MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   如何在MATLAB中将移动窗口应用于2D矩阵? (https://www.labfans.com/bbs/showthread.php?t=22627)

poster 2019-12-10 16:49

如何在MATLAB中将移动窗口应用于2D矩阵?
 
我正在从Matlab中的图像中进行特征提取。为此,我必须在nXn窗口上应用许多功能(例如查找每个3X3窗口的差异等)。
除了在矩阵上循环并每次收集窗口元素之外,在Matlab中是否有一种简单有效的方法来做到这一点?
对于某些功能,我已经能够找到等效的蒙版并使用filter2对其进行应用,但是对于其他许多功能,我似乎并不那么奢侈(一个很好的例子:3X3窗口的中值)。
我想要的是[I]类似于[/I] arrayfun的东西,但是它适用于nXn窗口,而不是单个元素。
谢谢,
桑达


回答:
如果您拥有图像处理工具箱,则可以使用[I]blkproc[/I]使用自定义定义的函数来处理图像的[I]nxm[/I]个块。这是一个例子

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 [B]注意:[/B]

从MATLAB 2009b的图像处理工具箱开始,不[I]推荐使用[/I] blkproc并将其替换为[I]blockproc[/I] (请参见[URL="http://www.mathworks.com/help/images/release-notes.html"]此处的[/URL] R2099b部分)。因此,最后两行可以更改为:

myAveFun = @(blkstrct) ones(size(blkstrct.data))*mean(blkstrct.data(:)) Ip = blockproc(II,blockSize,myAveFun);

[url=https://stackoverflow.com/questions/681864]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 23:33

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.