有人知道边缘检测算法中Prewitt,Sobel和Laplacian算子之间的差异吗?
有些人比其他人好吗?
在不同情况下使用不同的运算符吗?
答案 0 :(得分:18)
laplace运算符是二阶导数运算符,另外两个是一阶导数运算符,因此它们在不同情况下使用。当拉普拉斯算子测量斜率的变化时,Sobel / Prewitt测量斜率。
示例:
如果您的信号具有恒定斜率(渐变):
Gradient signal: 1 2 3 4 5 6 7 8 9
一阶导数滤波器(Sobel / Prewitt)将测量斜率,因此滤波器响应为
Sobel result: 2 2 2 2 2 2 2
对于此信号,lapace滤波器的结果为0,因为斜率是常数。
示例2:如果您有边缘信号:
Edge: 0 0 0 0 1 1 1 1
索贝尔滤波器结果有一个峰值;峰的符号取决于边缘的方向:
Sobel result: 0 0 0 1 1 0 0 0
拉普拉斯滤波器产生两个峰值;边缘的位置对应于拉普拉斯滤波器结果的零交叉:
Laplace result: 0 0 0 1 -1 0 0 0
因此,如果你想知道方向和边缘,你可以使用一阶导数滤波器。此外,拉普拉斯滤波器比Sobel或Prewitt对噪声更敏感。
另一方面,Sobel和Prewitt过滤器非常相似,用于相同的目的。一阶导数滤波器之间的重要区别是可以使用人工测试图像(例如Jähne test patterns中的着名"Image Processing" by Bern Jähne)来测量这些属性。不幸的是,我在那本书中没有找到关于Prewitt算子的任何信息,所以你必须自己做实验。
最后,这些属性之间总是需要权衡,哪些属性更重要取决于应用程序。