美文网首页
Canny边缘检测

Canny边缘检测

作者: Tsukinousag | 来源:发表于2021-10-25 23:08 被阅读0次
    cv2.Canny()
    

    主要包括四个部分

    • 使用高斯滤波去除图像噪声
    • 计算梯度的幅度与方向
    • 非极大抑制,即适当地让边缘"变瘦"
    • 确定边缘,使用双阈值算法确定最终的边缘信息

    1.应用高斯滤波去除图像噪声

    滤波的目的是平滑一些纹理较弱的非边缘区域,以便得到更准确的边缘

    2. 计算梯度

    梯度方向总是与边缘方向是垂直的,计算梯度时会得到梯度的幅度和角度(代表梯度的方向),如(2,90)代表梯度的幅度为2,角度为90°

    3. 非极大抑制

    在获得了梯度的幅度和方向后,遍历图像中的像素点,去除所有非边缘的点,得到水平方向和垂直方向的最大值

    • 如果该点是正/负梯度方向上的局部最大值,则保留该点
    • 如果不是,则抑制该点

    4. 应用双阈值确定边缘

    完成上述步骤以后,图像内的强边缘已经在当前获取的边缘图像内,但是一些虚边缘可能也在边缘图像内。这些虚边缘可能是真实图像产生的,也有可能是噪声产生的。对于后者,必须剔除

    若>=maxval,判定为强边缘
    若>minval&&<maxval,判定为虚边缘
    若<=minval判定为弱边缘

    对于虚边缘需要进一步处理,一半通过判断虚边缘与强边缘是否连接,来确定虚边缘到底属于哪种情况

    • 与强边缘连接,则将该边缘处理为边缘
    • 与强边缘无连接,则该边缘为弱边缘,将其抑制

    Canny函数及使用

    使用不同点的阈值threshold1和threshold2

    import cv2
    
    img=cv2.imread('D:/hjb.jpg',cv2.IMREAD_GRAYSCALE)
    
    cv2.imshow('img',img)
    
    r1=cv2.Canny(img,128,200)
    r2=cv2.Canny(img,32,128)
    
    cv2.imshow('r1',r1)
    cv2.imshow('r2',r2)
    
    cv2.waitKey(0)
    cv2.destroyWindow()
    

    相关文章

      网友评论

          本文标题:Canny边缘检测

          本文链接:https://www.haomeiwen.com/subject/zjjsaltx.html