gpt4 book ai didi

matlab - 如何在 MATLAB 中将移动窗口应用于二维矩阵?

转载 作者:太空宇宙 更新时间:2023-11-03 19:25:00 24 4
gpt4 key购买 nike

我正在 Matlab 中从图像中提取特征。为此,我必须在 nXn 窗口上应用许多函数(例如找出每个 3X3 窗口的方差等。
除了循环遍历矩阵并每次收集窗口元素之外,在 Matlab 中是否有一种简单有效的方法可以做到这一点?
对于某些函数,我已经能够找到等效的掩码并使用 filter2 应用它们,但对于许多其他函数我似乎没有这么奢侈(一个很好的例子:3X3 窗口的中值)。
我想要的是类似 arrayfun 的东西,但它适用于 nXn 窗口,而不是单个元素。
谢谢,
桑达

最佳答案

如果您有图像处理工具箱,则可以使用 blkproc 使用自定义函数处理图像的 nxm block 。这是一个例子

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 部分 here)。所以最后两行可以改成:

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

关于matlab - 如何在 MATLAB 中将移动窗口应用于二维矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/681864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com