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

时间:2016-03-03 05:22:03

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

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

enter image description here

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

enter image description here

然后我应用以下Sobel滤镜:

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

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

enter image description here

1 个答案:

答案 0 :(得分:3)

在执行过滤之前,

conv2将内核/过滤器蒙版旋转180度。这是卷积的定义(a.k.a。你使用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'标志来覆盖此行为。