【问题标题】:Flipped conv2 output when trying to apply a Sobel filter尝试应用 Sobel 过滤器时翻转 conv2 输出
【发布时间】:2016-06-16 06:53:02
【问题描述】:

我正在使用 Sobel 过滤器对以下图像进行卷积:

在第 157 行,颜色开始发生变化,我们看到强度增加。请注意,在我的 MATLAB 代码中,我将图像转换为灰度。这种行为可以在下面看到:

然后我应用以下 Sobel 过滤器:

Gy = [-1 -2 -1; 0 0 0; +1 +2 +1];
A = conv2(im, Gy);

我希望输出是一个带有正数的矩阵,因为强度会增加。但是,输出显示了一个带有负数的矩阵。有谁知道为什么?

【问题讨论】:

    标签: matlab image-processing filter computer-vision convolution


    【解决方案1】:

    conv2 在执行过滤之前将内核/过滤器掩码旋转 180 度。这是卷积的定义(也就是你使用conv2 - 2D 卷积)。作为结果,您所期望的积极变化来自执行相关的过程。因此,要么使用filter2,要么通过执行Gy = Gy(end:-1:1, end:-1:1); 将内核旋转180 度,然后在之后调用conv2,以便在conv2 内部它将旋转内核再次,这样你'正在执行相关性。

    这样:

    Gy = [-1 -2 -1; 0 0 0; +1 +2 +1];
    Gy = Gy(end:-1:1, end:-1:1); %// Added
    A = conv2(im, Gy);
    

    同样,如果您有权访问图像处理工具箱,则可以使用 imfilter,正如另一个答案已经建议的那样,默认行为是使用相关性而不是卷积。如果您明确想要执行卷积,则可以通过指定 'conv' 标志来覆盖此行为。

    【讨论】:

      猜你喜欢
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-18
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      相关资源
      最近更新 更多