Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我正在从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); 更多&回答... |
![]() |
![]() |