索贝尔(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行)中
然而,下面的图表对两者都是正确的。
-->column
^
|row
|在Matlab中可能会输出Gx ==水平边缘,如果使用1型Gx ==垂直边缘,如果使用Gx ==水平边缘,则输出Gx==水平边缘,如果使用样式2则输出Gy ==vertical边缘。两者都会产生相同的输出(内部操作可能由于主订单的不同而不同)。
@Abhishek您使用样式1计算水平和垂直边缘?Gx代表水平边缘,而Gy代表垂直边缘?那意味着样式2是对它的补充吗?就像。计算Gx会给出垂直边,Gy会给水平边吗?
发布于 2013-03-05 19:52:59
2型是对的。但是,使用这两种样式,我们将得到相同的结果,因为内核与图像相结合。
Gx =-1-2-1.0 0<--将提取Y方向的特征,而不是X方向的特征.1 2 1
Gy = -1 0 1 -2 0 2<--将提取X方向的特征,而不是Y方向的特征。-1 0 1
这可以用一个简单的二维卷积来验证.
原始图像:

使用Style1,Gx:

使用style1,Gy:

发布于 2013-03-05 19:49:23
如果您使用的是数学符号,正确的掩码是样式2(参见这里)。
您的困惑可能是由于矩阵之间的差异,在MATLAB和OpenCV。MATLAB矩阵按列-大数顺序指定,而OpenCV矩阵按行-大顺序指定.
样式1以列的主要方式表示Sobel掩码,样式2按行的主要顺序表示相同的掩码。
https://stackoverflow.com/questions/15231863
复制相似问题