0

Sobel(Gx 和 Gy)的确切掩码是什么?我看到的是人们如何写它有两种类型,如下所示,

样式 1

Gx = [-1 -2 -1
        0 0 0
        1 2 1]

Gy = [-1 0 1
      -2 0 2
      -1 0 1]

风格 2

Gx = [-1 0 1
      -2 0 2
      -1 0 1]

Gy = [-1 -2 -1
        0 0 0
        1 2 1]

已编辑

@奥雷利斯

在 Matlab --> (row x col)

在 OpenCV --> (col x 行)

但是,下图对两者都是正确的

-->column
^
|row
|

可能在 Matlab 中将输出 Gx == 水平边缘,如果使用样式 1,则输出 Gy == 垂直边缘,如果使用样式 2,则输出 Gx == 水平边缘,Gy == 垂直边缘。两者都将产生相同的输出(由于 col-row 主要顺序,内部操作可能会有所不同)。

@Abhishek您正在使用样式1来计算水平和垂直边缘?和 Gx 对应于水平边缘,而 Gy 对应于垂直边缘?这是否意味着风格 2 是对它的补充?例如。计算 Gx 将给出垂直边缘而 Gy 给出水平边缘?

4

2 回答 2

3

风格 2 是正确的。但是,使用这两种样式我们将得到相同的结果,因为内核与图像进行卷积

Gx = [-1 -2 -1 0 0 0 <--- 将提取 Y 方向而不是 X 方向的特征。1 2 1]

Gy = [-1 0 1 -2 0 2 <--- 将提取 X 方向而不是 Y 方向的特征。-1 0 1]

这可以通过使用简单的二维卷积来验证。

原图:原始图像

使用样式 1,Gx: 在此处输入图像描述

使用样式 1,Gy: 在此处输入图像描述

于 2013-03-05T19:52:59.173 回答
1

如果您使用数学符号,则正确的掩码是样式 2(请参见此处)。

您的困惑可能源于 MATLAB 和 OpenCV 中的矩阵之间的差异。MATLAB 矩阵按列优先顺序指定,而 OpenCV 矩阵按行优先顺序指定。

样式 1 以列优先方式表示 Sobel 掩码,样式 2 以行优先方式表示相同掩码。

于 2013-03-05T19:49:23.307 回答