我正在从Matlab中的图像中进行特征提取。为此,我必须在nXn窗口上应用许多功能(例如查找每个3X3窗口的差异等)。
除了在矩阵上循环并每次收集窗口元素之外,在Matlab中是否有一种简单有效的方法来做到这一点?
对于某些功能,我已经能够找到等效的蒙版并使用filter2对其进行应用,但是对于其他许多功能,我似乎并不那么奢侈(一个很好的例子:3X3窗口的中值)。
我想要的是
类似于 arrayfun的东西,但是它适用于nXn窗口,而不是单个元素。
谢谢,
桑达
回答:
如果您拥有图像处理工具箱,则可以使用
blkproc使用自定义定义的函数来处理图像的
nxm个块。这是一个例子
function Ip = imageProcessed(II,blockSize) % FUNCTION imageProcessed calculates average value of blocks of size nxm % blocks if nargin1, % blkproc requires a grayscale image % convert II to gray scale if it is RGB. II=rgb2gray(II) end % Custom average function. myAveFun = @(x) ones(size(x))*sum(x(:))/length(x(:)); % use blkproc to process image Ip = blkproc(II,[blockSize(1), blockSize(2)],myAveFun); end
注意:
从MATLAB 2009b的图像处理工具箱开始,不
推荐使用 blkproc并将其替换为
blockproc (请参见
此处的 R2099b部分)。因此,最后两行可以更改为:
myAveFun = @(blkstrct) ones(size(blkstrct.data))*mean(blkstrct.data(:)) Ip = blockproc(II,blockSize,myAveFun);
更多&回答...