当前位置:  开发笔记 > 编程语言 > 正文

如何在MATLAB中将移动窗口应用于2D矩阵?

如何解决《如何在MATLAB中将移动窗口应用于2D矩阵?》经验,为你挑选了1个好方法。

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



1> Azim..:

如果您有图像处理工具箱,则可以使用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);

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有