我有下面的图像,我正在与索贝尔过滤器车队:
matlab - 尝试应用Sobel滤波器时conv2输出翻转-LMLPHP
在第157行,颜色开始改变,我们看到强度增加注意,在我的MATLAB代码中,我将图像转换为灰度这种行为表现如下:
matlab - 尝试应用Sobel滤波器时conv2输出翻转-LMLPHP
然后应用以下Sobel过滤器:

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

我希望输出是一个正数矩阵,因为强度增加了然而,输出显示了一个带负数的矩阵有人知道为什么吗?
matlab - 尝试应用Sobel滤波器时conv2输出翻转-LMLPHP

最佳答案

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'标志来覆盖此行为。

10-08 11:59