我有以下图像,我正在使用Sobel滤镜进行卷积:
在第157行,颜色开始变化,我们看到强度增加。请注意,在我的MATLAB代码中,我将图像转换为灰度。这种行为可以在下面看到:
然后我应用以下Sobel滤镜:
Gy = [-1 -2 -1; 0 0 0; +1 +2 +1];
A = conv2(im, Gy);
我希望输出是一个带正数的矩阵,因为强度会增加。但是,输出显示带负数的矩阵。有谁知道为什么?
答案 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'
标志来覆盖此行为。