在使用MATLAB语言实现图像处理算法时,我们常常会遇到需要对图像块(patch)进行运算的情况。受到其他语言编程习惯的影响,循环通常是不假思索的第一选择。但由于matlab是利于矩阵运算的编程语言,采用循环只会低效和耗时。
因此,下面总结了在图像处理中遇到的块运算常用的命令及代码,希望对大家有所帮助。
1. nlfilter
调用格式:B = nlfilter(A, [m n], fun);
意为对图像A的每个大小为m*n的patch进行fun函数的操作,patch的取法为滑动(sliding),即patch的中心像素遍历图像的每个点,当取到边界时需要进行边界延拓。fun必须是函数的句柄,可自由定义也可取matlab内置的函数。
例:
对图像I的每个5*5邻域进行取标准差的运算 :I2= nfilter(I,[5,5],@std2);
2. blockproc
不重叠的块运算命令(distinct block processing)
调用格式:B = blockproc(A,[M N],fun);
意为对图像A的每个不重叠的大小为m*n的块进行fun函数的操作,级联的结果为B。
例:
对图像I的每个5*5邻域进行取标准差的运算:fun = @(block_struct) ...
std2(block_struct.data) * ones(size(block_struct.data));
I2 = blockproc(I,[5 5],fun);
另:
还有个命令blkproc,功能