zoukankan      html  css  js  c++  java
  • 霍夫直线检测进行复杂环境的树干提取

                                                            霍夫直线检测进行复杂环境的树干提取

    霍夫直线检测是常用的直线检测算法,原理比较简单。

    我叙述一下我对霍夫直线检测算法的理解:将像素点在图像中的二维坐标,通过坐标变换转化为极坐标,然后通过比较每个点在极坐标下的角度值,如果角度值相同,则判定为同直线。

    该算法有几个可调参数:

    C++: void HoughLinesP(InputArray image, OutputArray lines, double rho, double theta, int threshold, double minLineLength=0, double maxLineGap=0 )

    • 第五个参数,int类型的threshold,累加平面的阈值参数,即识别某部分为图中的一条直线时它在累加平面中必须达到的值。大于阈值threshold的线段才可以被检测通过并返回到结果中。
    • 第六个参数,double类型的minLineLength,有默认值0,表示最低线段的长度,比这个设定参数短的线段就不能被显现出来。
    • 第七个参数,double类型的maxLineGap,有默认值0,允许将同一行点与点之间连接起来的最大的距离。

    要想将这个算法使出威力,需要对这几个直线检测算法有足够的了解。本人由于水平有限,搞起来感觉比较失败。

    我的代码参考自毛星云的博客,连接如下:

    http://blog.csdn.net/poem_qianmo/article/details/26977557

    先贴出树干提取前的原图:

    图中白色的就是需要提取的树干。很明显,树干非常不清晰,环境干扰量大,十分不好直接分离。

    我再贴处理后的最终效果图(由于本人很菜,误检率比较高,漏检率也比较高)

    要完成这个直线检测的步骤大概如下(包括图片预处理):

    1.RGB转灰度图,这一步一般来说没什么要注意的,提醒一下。如果目标在某一个通道(R、G、B)和环境相差很大,最好保留这个通道作为灰度图。本例中由于树干为白色,就不用考虑这个

    2.选择合适阈值进行二值化,(域值的参数选择很重要,必须能去除大部分干扰)。

    3.删除小面积连通域。去除一些不可能是树干的小干扰。

    4.树干骨架提取,便于直线检测。

    5.霍夫直线检测。

    由于霍夫直线检测需要调整的参数太多,可以将参数设为不同的滑动条,通过滑动滑动条来寻找合适参数。

  • 相关阅读:
    反射(五)之动态代理的作用
    反射(四)之反射在开发中的适用场景及利弊
    反射(三)之通过反射获取构造方法, 成员变量, 成员方法
    反射(二)之反射机制
    反射(一)之初探反射
    java多线程(五)之总结(转)
    java多线程(四)之同步机制
    java多线程(三)之售票案例
    java多线程(二)之实现Runnable接口
    java多线程(一)之继承Thread类
  • 原文地址:https://www.cnblogs.com/YangQiaoblog/p/5696654.html
Copyright © 2011-2022 走看看