我有以下图像,我正在使用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 内部旋转内核 again ,这样就可以执行相关性 .
conv2
Gy = Gy(end:-1:1, end:-1:1);
因此:
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' 标志来覆盖此行为 .
'conv'
1 回答
conv2
在执行过滤之前将内核/过滤器掩码旋转180度 . 这是卷积的定义(a.k.a . 你正在使用conv2
- 2D卷积) . 您期望的积极变化是因为执行 correlation 的过程 . 因此,要么使用filter2,要么通过执行Gy = Gy(end:-1:1, end:-1:1);
将内核旋转180度,然后调用conv2
,以便在conv2
内部旋转内核 again ,这样就可以执行相关性 .因此:
同样,如果您有权访问图像处理工具箱,则可以使用另一个答案已建议的imfilter,默认行为是使用相关而不是卷积 . 如果您明确要执行卷积,则可以通过指定
'conv'
标志来覆盖此行为 .