MATLAB:如何应用colfilt命令

时间:2014-05-18 13:40:47

标签: matlab image-processing filter filtering

我有一张768 x 1024像素的图像。我想在此图像上执行订单统计过滤器,例如最小值和最大值。为此,我想使用带有5×5滑动窗口的colfilt函数来进行最小过滤。换句话说:

OP = colfilt(IP, [5 5], 'sliding', @min); 

但是,我收到此错误消息:

  

???使用==>时出错reshape要RESHAPE,元素的数量一定不能       变化

     

==>中的错误col合闸在183 b(i * mb +眉毛,j * nb + bcols)= ...

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我不确定为什么colfilt不适合你。我在使用colfilt时做了一些测试,似乎在我的最后工作。您能提供链接或我可以下载图像并进行测试的地方吗?

与此同时,您可以做的事情(完全相同)是尝试使用im2col来获取每个滑动窗口邻域并将它们放入单独的列中。之后,取每个列的最小值,然后通过col2im将其重新构建回矩阵。因此,请尝试:

  1. IP2 = im2col(IP, [5 5]);
  2. 然后执行OP = min(IP2);
  3. 完成后,请执行:OP2 = col2im(OP, [5 5], [768 1024]);
  4. 因此,

    OP2将包含您的(最小)滤镜图像。请记住,这将包含图像的裁剪版本,其中边框上的某些像素被消除,以确保过滤蒙版完全适合图像内部。因此,您的输出将是一个766 x 1022图像,因为您的蒙版是5 x 5.如果您想避免这种情况,请考虑沿边框填充您的矩阵,以便您可以获得相同大小的输出在末尾。因为您的蒙版是5 x 5,所以图像周围将有一个2像素边框,保持未处理状态,以确保蒙版完全包含在图像中。因此,在执行步骤#1 - #3之前尝试执行此操作:

    IPPad = padarray(IP, [2 2], 'replicate');
    

    replicate选项将简单地沿着填充图像的边框沿原始图像的边框复制这些像素。这将在图像周围创建一个2像素的边框。其他选项包括circularsymmetric。如果要完全用零(零填充)填充边框,也不能指定replicate标志。

    希望这有帮助!