边缘检测技术

15

有人知道边缘检测算法中Prewitt、Sobel和Laplacian算子之间的区别吗?

有些算子比其他算子更好吗?

不同的情况下是否使用不同的算子?

1个回答

27
拉普拉斯算子是一个二阶导数算子,而另外两个则是一阶导数算子,所以它们在不同的情况下使用。Sobel/Prewitt 用于测量斜率,而 Laplacian 用于测量斜率的变化。

例如:

如果您有一个具有恒定斜率(梯度)的信号:

Gradient signal: 1 2 3 4 5 6 7 8 9

一阶导数滤波器(Sobel/Prewitt)将测量斜率,因此滤波器响应为

Sobel result:      2 2 2 2 2 2 2 

拉普拉斯滤波器对于这个信号的结果为0,因为斜率是恒定的。

示例2:如果您有一个边缘信号:

Edge:            0 0 0 0 1 1 1 1 

sobel滤波器的结果有一个峰值;峰值的符号取决于边缘的方向:

Sobel result:    0 0 0 1 1 0 0 0

拉普拉斯滤波器会产生两个峰值;边缘的位置对应着拉普拉斯滤波器结果的零交叉点:
Laplace result:  0 0 0 1 -1 0 0 0

因此,如果您想要了解边缘的方向,则需要使用一阶导数滤波器。此外,拉普拉斯滤波器比Sobel或Prewitt更容易受到噪声的影响。

另一方面,Sobel和Prewitt滤波器非常相似,用于相同的目的。一阶导数滤波器之间的重要差异为:

  • 对噪声的敏感性
  • 各向异性:理想情况下,X/Y的滤波器结果应与梯度的角度α的正弦α和余弦α成比例,而两个平方的总和应对每个角度相同。
  • 在角落处的行为

可以使用人工测试图像(如著名的Jähne测试模式,在Bern Jähne的“图像处理”中找到)来测量这些属性。不幸的是,在那本书中我没有找到任何关于Prewitt算子的内容,因此您需要进行自己的实验。

最终,这些属性之间总是存在权衡,哪一个更重要取决于应用程序。


谢谢Nikie,这是一个很棒的回答,正是我想要的。已接受答案 :)。 - ale
英特尔的Jähne测试模式显然已经更改了位置(上面的答案中有死链接),我在这里找到了它们:https://software.intel.com/en-us/node/503777 - winne2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接