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]
被修改
@Aurelis
在Matlab中 - > (第x行)
在OpenCV中 - > (col x row)
但是,下图对于两者都是正确的
-->column
^
|row
|
如果使用样式1并且Gx ==水平边缘,则可能在Matlab中将输出Gx ==水平边缘,Gy ==垂直边缘,如果使用样式2,则Gy ==垂直边缘。两者都将产生相同的输出(由于col-row主要顺序,内部操作可能不同)。
@Abhishek您正在使用样式1来计算水平和垂直边缘?和Gx对应水平边缘,而Gy对应垂直边缘? 这是否意味着风格2是其中的补充?例如。计算Gx会给出垂直边缘而Gy会给出水平边缘吗?
答案 0 :(得分: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]
这可以通过使用简单的2-D卷积来验证。
原始图片:
使用Style1,Gx:
使用style1,Gy:
答案 1 :(得分:1)
如果您使用数学符号,正确的面具是样式2(见here)。
您的困惑可能源于MATLAB和OpenCV中矩阵之间的差异。 MATLAB矩阵以列主顺序指定,而OpenCV矩阵以行主顺序指定。
样式1以列为主的方式表示Sobel掩码,而样式2以行主顺序表示相同的掩码。