学习OpenCV:对Canny的理解

    Sobel算子存在一些问题:
    没有充分利用边缘梯度方向
    阈值设定会极大影响检测效果,阈值设定过大,会丢失很多边缘信息;阈值设定过小,会有很多噪声
    Canny边缘检测做了两个改进:1、基于边缘梯度方向的非极大值抑制;2、双阈值的滞后阈值处理;
    像素值小于低阈值,则排除为边缘像素;
    像素值大于高阈值,则保留为边缘像素;
    若像素值在两者之间,则该像素仅仅在连接到一个高于高阈值的像素时被保留;

CV_EXPORTS_W void Canny( InputArray image, OutputArray edges,
                         double threshold1, double threshold2,
                         int apertureSize = 3, bool L2gradient = false );

threshold1:像素值小于低阈值,则排除为边缘像素,设置时参考同一个区域内(边缘区域内)像素值波动值情况,确保低阈值大于使该区域内的像素值波动,区域内才不会出现边缘像素被保留;

threshold2:像素值大于高阈值,则保留为边缘像素;确保边缘阈值大于该高阈值;

若像素值在两者之间,则该像素仅仅在连接到一个高于高阈值的像素时被保留;

apertureSize:滑窗时核的大小,参考拉普拉斯算子核?

L2gradient:求出X、Y方向后的边缘值后合并,为false时输出边缘图为X、Y方向的两张边缘图像素值的绝对值之和(L1距离);为true时两者平方和开根号(L2距离);

如果出现较多的噪声可先进行高斯滤波;

参考链接:https://blog.csdn.net/weixin_40647819/article/details/91411424

 

おすすめ

転載: blog.csdn.net/Stone_Wang_MZ/article/details/107519834