【问题标题】:Edge Detection Techniques边缘检测技术
【发布时间】:2010-12-19 14:59:31
【问题描述】:

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

有些人比其他人更好吗?

在不同的情况下使用不同的运算符吗?

【问题讨论】:

    标签: computer-vision edge-detection


    【解决方案1】:

    拉普拉斯算子是二阶导数算子,另外两个是一阶导数算子,所以用在不同的场合。 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 过滤器非常相似,并且用于相同的目的。一阶导数滤波器之间的重要区别是

    • 对噪音的敏感性
    • 各向异性:理想情况下,X/Y 的过滤结果应与 sin αcos α 成正比,其中 α 是梯度的角度,总和对于每个角度,这两个正方形的大小应该相同。
    • 拐角处的行为

    这些属性可以通过人工测试图像(如著名的Jähne test patterns,在"Image Processing" by Bern Jähne 中找到)来测量。不幸的是,我在那本书中没有找到任何关于 Prewitt 算子的信息,所以你必须自己做实验。

    最终,这些属性之间总是需要权衡取舍,其中哪个更重要取决于应用程序。

    【讨论】:

    • 感谢 Nikie,这是一个绝妙的回应,正是我想要的。接受的答案:)。
    • 英特尔的 Jähne 测试模式显然已经改变了位置(上面答案中的死链接),我在这里找到了它们:software.intel.com/en-us/node/503777
    猜你喜欢
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 2017-01-02
    相关资源
    最近更新 更多