我正在使用Matlab中的图像进行特征提取.为此必须在nXn窗口上应用许多函数(例如在每个3X3窗口上找到方差等等.
除了在矩阵上循环并收集窗口之外,在Matlab中有一种简单有效的方法吗?每次元素?
对于某些函数,我已经能够找到一个等效的掩码并使用filter2应用它们,但对于其他许多我似乎没有这么奢侈(一个很好的例子:3X3窗口的中位数).
我想要的是像 arrayfun,但适用于nXn窗口,而不是单个元素.
谢谢,
Sundar
如果您有图像处理工具箱,则可以使用blkproc使用自定义函数处理图像的nxm块.这是一个例子
function Ip = imageProcessed(II,blockSize) % FUNCTION imageProcessed calculates average value of blocks of size nxm % blocks if nargin<2, % default/example value for block size blockSize = [3 4]; end if size(II,3)>1, % 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);