我有下面的图像,我正在与索贝尔过滤器车队:
在第157行,颜色开始改变,我们看到强度增加注意,在我的MATLAB代码中,我将图像转换为灰度这种行为表现如下:
然后应用以下Sobel过滤器:
Gy = [-1 -2 -1; 0 0 0; +1 +2 +1];
A = conv2(im, Gy);
我希望输出是一个正数矩阵,因为强度增加了然而,输出显示了一个带负数的矩阵有人知道为什么吗?
最佳答案
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'
标志来覆盖此行为。