首页 文章

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

提问于
浏览
3

我有以下图像,我正在使用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 回答

  • 3

    conv2 在执行过滤之前将内核/过滤器掩码旋转180度 . 这是卷积的定义(a.k.a . 你正在使用 conv2 - 2D卷积) . 您期望的积极变化是因为执行 correlation 的过程 . 因此,要么使用filter2,要么通过执行 Gy = Gy(end:-1:1, end:-1:1); 将内核旋转180度,然后调用 conv2 ,以便在 conv2 内部旋转内核 again ,这样就可以执行相关性 .

    因此:

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

相关问题