【问题标题】:MATLAB: How to apply the colfilt commandMATLAB:如何应用 colfilt 命令
【发布时间】:2014-07-06 12:23:58
【问题描述】:

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

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

但是,我收到了以下错误消息:

???错误使用 ==> reshape 要 RESHAPE 元素的数量不能 改变。

==> colfilt 中的错误在 183 b(i*mb+brows,j*nb+bcols) = ...

我做错了什么?

【问题讨论】:

    标签: matlab image-processing filter filtering


    【解决方案1】:

    我不确定为什么 colfilt 不适合你。我对使用colfilt 进行了一些测试,它似乎对我有用。你能提供一个链接或在哪里我可以下载图像并测试它吗?

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

    1. IP2 = im2col(IP, [5 5]);
    2. 然后做OP = min(IP2);
    3. 完成后,请执行以下操作:OP2 = col2im(OP, [5 5], [768 1024]);

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

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

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

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多