Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何在MATLAB中将移动窗口应用于2D矩阵?

我正在从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);

更多&回答...
poster 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



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


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