我是靠谱客的博主 复杂黑夜,最近开发中收集的这篇文章主要介绍MATLAB中处理任意大图像的函数blockproc,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

转至:http://www.matlabsky.com/thread-11783-1-1.html

MATLAB分块处理矩阵的函数很早就有了——blkproc,但缺点是blkproc必须一次性把要处理的矩阵全部导入内存中,这样大大限制了其应用范围,对一些超大型的图像就无能为力了。幸运的是随着MATLAB使用范围越来越广,Mathworks也紧跟用户需求,新版本的MATLAB推出了可以处理任意大图像的函数blockproc,其用法如下:

  1. B = blockproc(A,[M N],fun)

  2. B = blockproc(src_filename,[M N],fun)

  3. B = blockproc(adapter,[M N],fun)

  4. blockproc(...,param,val,...)
复制代码
A是要处理的图像矩阵,如果图像太大不能完全导入内存,也可以用图像文件名src_filename来表示。[M,N]是希望每次分块处理的矩阵大小,fun是函数句柄,即对每块矩阵的处理函数。
需要说明的是blockproc默认支持tiff/tif和jpeg2000格式的任意大图像处理,如果要读取其他格式的大图像需要针对该图像格式再写一个继承自MATLAB中ImageAdapter这个抽象类的子类adapter,来满足blockproc的输入要求。MATLAB帮助文档中有一个读取lan格式的LanAdapter示例类,大家可以参照那个格式来构造任意图像格式的Adapter类来实现blockproc函数对任意大图像文件的支持。
最后一种调用格式可以实现读取大图像文件,分块处理后再在指定路径写入处理后的图像文件,这个非常有用。下面给一个简单的例子,更多的用法希望大家讨论完善。
  1. fun = @(block_struct) repmat(block_struct.data,5,5) ;%注意处理函数的输入必须是结构体,其data域是我们的矩阵数据,这是由blockproc分块后的机制决定

  2. blockproc('moon.tif',[16 16],fun,'Destination','C:moonmoon.tif');

  3. imshow('C:moonmoon.tif')
复制代码
可以看到分块处理后的效果,当然这是简单的把原图像分块(每一子块大小16*16)复制了25倍后的效果

最后

以上就是复杂黑夜为你收集整理的MATLAB中处理任意大图像的函数blockproc的全部内容,希望文章能够帮你解决MATLAB中处理任意大图像的函数blockproc所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部