编辑通过阅读Sobel自己写的一篇有趣的文章,可以找到Sobel操作员采用这种方式的真正原因。我对本文的快速阅读表明,Sobel的想法是通过平均水平,垂直和对角中心差来获得对梯度的改进估计。现在,当您将渐变分为垂直和水平分量时,对角线中心差都包含在其中,而垂直和水平中心线差仅包含在其中。两个避免重复计算对角线,因此对角线应具有垂直和水平方向的权重的一半。实际权重1和2刚好适合定点算术(并且实际上包括16的比例因子)。
我大多同意@mbrenon的观点,但有几点很难在评论中提出。
首先,在计算机视觉中,“大多数情况下,我们只是尝试操作员”方法浪费时间,与可能实现的结果相比,效果不佳。 (也就是说,我也喜欢尝试。)
的确,使用[-1 0 1]
一个很好的理由是它将导数估计值以像素为中心。但是,另一个很好的理由是,它是中心差异公式,并且您可以通过数学方式证明,与[-1 1]相比,它的真实导数估算值具有更低的误差。
[1 2 1]
用于过滤噪声,如mbrenon所说。这些特定数字运作良好的原因是它们是高斯近似值,这是唯一不引入伪像的滤波器(尽管从Sobel的文章来看,这似乎是巧合)。现在,如果要减少噪声并找到水平导数,则需要在垂直方向上进行滤波,以最小化导数估计。将transpose([1 2 1])
与[-1 0 1]
卷积得到Sobel运算符。即:
[1] [-1 0 1]
[2]*[-1 0 1] = [-2 0 2]
[1] [-1 0 1]
0
对于图像导数计算,Sobel运算符看起来是这样的:
我不太了解两件事,
1.为什么中心像素为0 ?我不能只使用下面的运算符,
2.为什么中心行是其他行的2倍?
我搜索了我的问题,没有找到任何可以说服我的答案。请帮我。