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.霍夫直线检测。

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

  • 相关阅读:
    算法训练 表达式计算
    基础练习 十六进制转十进制
    基础练习 十六进制转十进制
    基础练习 十六进制转十进制
    New ways to verify that Multipath TCP works through your network
    TCP的拥塞控制 (Tahoe Reno NewReno SACK)
    Multipath TCP Port for Android 4.1.2
    How to enable ping response in windows 7?
    NS3
    Multipath TCP Port for Android
  • 原文地址:https://www.cnblogs.com/YangQiaoblog/p/5696654.html
Copyright © 2011-2022 走看看