有谁知道边缘检测算法中 Prewitt、Sobel 和 Laplacian 算子之间的区别?
有些比其他更好吗?
是否在不同的情况下使用不同的运算符?
有谁知道边缘检测算法中 Prewitt、Sobel 和 Laplacian 算子之间的区别?
有些比其他更好吗?
是否在不同的情况下使用不同的运算符?
拉普拉斯算子是二阶导数算子,另外两个是一阶导数算子,所以用在不同的场合。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
对于该信号,lapace 滤波器的结果为 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 滤波器非常相似,并且用于相同的目的。一阶导数滤波器之间的重要区别是
这些属性可以用人工测试图像来测量(如著名的Jähne 测试模式,在Bern Jähne 的“图像处理”中找到)。不幸的是,我在那本书中没有找到任何关于 Prewitt 算子的信息,所以你必须自己做实验。
归根结底,这些属性之间总是需要权衡取舍,其中哪个更重要取决于应用程序。