尝试应用 Sobel 过滤器时翻转 conv2 输出

Flipped conv2 output when trying to apply a Sobel filter

我有以下图像,我正在使用 Sobel 滤波器进行卷积:

在第 157 行,颜色开始变化,我们看到强度增加。请注意,在我的 MATLAB 代码中,我将图像转换为灰度。此行为如下所示:

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

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

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

conv2 在执行过滤之前将内核/过滤器掩码旋转 180 度。这是卷积的定义(a.k.a。您正在使用 conv2 - 2D 卷积)。您期望的积极变化来自执行 correlation 的过程。因此,要么使用 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' 标志来覆盖此行为。