这个算法是汪悦在 Lane detection and tracking using B-spline中提出来的。他在这篇论文中主要用的是B-spline模型,这个模型的主要优点是鲁棒性好,可以针对不同的情景进行处理,而且他将检测道路两边的边缘的问题转化成求解道路中间线的问题。

下面主要描述一下CHEVP算法:

  1. 边缘像素提取

    我们使用Canny边缘检测来获得边缘映射和边缘定位映射。选择方差σ = 1 并且模板的尺寸是9*1在X方向和Y方向上进行高斯卷积。边缘映射是通过一个合适的阈值处理得到的结果。在图表1中,图b是通过Canny边缘检测得到的边缘映射,图c则是边缘定位映射。

  2. 通过霍夫变化检测直线

    检测到的边缘点将被用于对直线参数空间中可能的存在的线进行投票。图像被水平地分为几个部分,如图2a所示,为了适应因为道路弯曲从而导致道路消失点的变化。图像部分自下而上高度越来越小。每个图像分割部分都有它们自己的直线参数空间,每个图像分割部分中边缘点分别为可能的直线进行投票。通过对于规范化后的累加空间的阈值处理,直线分割最终能够在每一个图像分割部分中检测出来。

  3. 地平线和消失点检测

    每一个图像分割部分中检测到的直线都是成对出现的,任意一队直线的相交部分会为另外一个霍夫空间中的消失点进行投票。投票的权重是根据最后一步产生的成对直线的规范化累加值决定的。这个过程在每个图像分割部分中分别重复,但是会在相同的霍夫空间中投票。

    霍夫空间中对于每一列的投票会归总起来从来检测可能的消失点。获得投票最多的一行将会被选择座位地平线在图像平面中,如下图所示:



    对于每个图像分割部分来说,它的消失点由地平线附近投票最多的点所决定。所有检测到的消失点可以再图4b中看到。注意一点,对于图像部分5,没有消失点存在,因为在这个图像分割部分并没有检测到直线。

  4. 根据检测的道路线估计道路中间线的参数k

    对于消失点进行投票的直线被认为是每个图像分割部分中道路线。从图像最下面的图像分割部分往上,挑选出在各个图像分割部分中的左右两边挑选出最接近去中间一列的检测到的道路线。如果这两条道路线在这个图像分割部分中并不存在,这个过程就会在更高的图像分割部分中进行,知道获得需要的道路线。图6表示两条直线L1和L2在图像分割部分4中,因为没有直线存在图像分割部分5中。

    然后连接图像分割部分4中的消失点和P-l4和P-r4的中点P-m4(直线L1和直线L2的相交的部分)

    参数k可以通过以下公式进行估计:





    对于图7中中间线的估计的例子如下所示:

    从图像分割部分4开始,因为图像分割部分5中不存在消失点,我们假设这个部分的消失点跟在分割部分4中的消失点。延伸通过vp4和P-m4交于图像分割部分5的P-m5点。同样的,我们在图像分割部分3中我们也能够检测到消失点。直线(vp3-P-m3)交于图像分割部分2的底部的P-m2处。同样的道理,适用于以上的部分

    通过构建道路中间线,通过参数k和道路中间线我们可以估计处道路的两条边缘线,图8给出了例子







  5. 计算道路模型的控制点来接近检测的道路中间线

    可以利用很多方法来计算B-spline中的控制点通过中间线。因为B-spline后面的部分会准确地逼近道路边缘,这里我们只是粗略地使用B-spline来接近检测到的道路中间线。

    我们是通过使用3个不同的控制点来构成两个部分的B-spline。为了让B-spline通过第一个和最后一个控制点,我们使用三倍的第一个和最后一个控制点。因此事实上一共有7个控制点,3个第一个控制点和3个最后一个控制点都是相同的。

    我们首先选择P-m0和P-m5分别代表道路模型中的第一个控制点Q0和最后一个控制点Q2.节点P1的选择取决于图9中β1和β2的值。如果β1和β2的值不等于0,我们则选择P-m作为Q1。即P1=P-m,P-m是P-m1和P-m2的中点。如果β1为0,而β2不等于0.我们则选择P-m1作为P1(Q1).其他的情况,我们则选择P-m2作为P1(Q1).因此控制点Q1可以通过下面的公式计算:





    ## 实验结果##



引用:

Wang, Yue, Eam Khwang Teoh, and Dinggang Shen. “Lane detection and tracking using B-Snake.” Image and Vision computing 22.4 (2004): 269-280.

CHEVP算法(Canny/Hough Estimation of Vanishing Points)的更多相关文章

  1. 使用Canny+hough实现钱币检测

    目录 Canny边缘提取算法实现 霍夫变换实现 参考 这个是北京邮电大学<计算机视觉>的一门作业: Canny边缘提取算法实现 首先定义一个Canny类 其init函数是: class C ...

  2. Opencv笔记(十四)——边缘检测算法canny

    简介 Canny 边缘检测算法 是 John F. Canny 于 1986年开发出来的一个多级边缘检测算法,也被很多人认为是边缘检测的 最优算法,它是由很多步构成的算法. 最优边缘检测的三个主要评价 ...

  3. 【算法】Hough变换

    终于看懂点了霍夫变换,以下内容来源为吉大的硕士论文,作者王阳阳 上图引用自 http://www.cnblogs.com/Ponys/p/3146753.html

  4. deep learning+ Depth Estimation

    Depth estimation/stereo matching/optical flow @CVPR 2017 Unsupervised Learning of Depth and Ego-Moti ...

  5. opencv算法学习

    1.改变图像的亮度和对比度: 算法介绍:对每一点像素值的r,g,b,值进行乘法和加法的运算. 代码使用: ; y < image.rows; y++ ) { ; x < image.col ...

  6. scala实现kmeans算法

    算法的概念不做过都解释,google一下一大把.直接贴上代码,有比较详细的注释了. 主程序: import scala.io.Source import scala.util.Random /** * ...

  7. Hough变换在opencv中的应用

    霍夫曼变换(Hough Transform)的原理 霍夫曼变换是一种可以检测出某种特殊形状的算法,OpenCV中用霍夫曼变换来检测出图像中的直线.椭圆和其他几何图形.由它改进的算法,可以用来检测任何形 ...

  8. OpenCV探索之路(六):边缘检测(canny、sobel、laplacian)

    边缘检测的一般步骤: 滤波--消除噪声 增强--使边界轮廓更加明显 检测--选出边缘点 Canny算法 Canny边缘检测算法被很多人推崇为当今最优秀的边缘检测算法,所以我们第一个就介绍他. open ...

  9. LA 4728 旋转卡壳算法求凸包的最大直径

    #include<iostream> #include<cstdio> #include<cmath> #include<vector> #includ ...

随机推荐

  1. P2617 Dynamic Rankings(待修改区间第k大)

    题目链接:https://www.luogu.org/problemnew/show/P2617 题目: 题目描述 给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的 ...

  2. 信号量计算问题--n个进程, 共享3个资源, 当前信号量为-1, 其他进程继续执行P操作, 那么信号量应该继续减

    选B

  3. Spring---Spring Integration

    1.概述 1.1.Spring Integration  提供了  基于spring  的 EIP(Enterprise Integration Patterns,企业集成模式)的实现: 1.2.Sp ...

  4. JS中判断一个数组是否有相同数据的

    页面中有多个<select> $("select").each(function(){ str.push($(this).val());}); // join() 方法 ...

  5. dict以及defaultdict的简单使用

    先看一个需求 from collections import defaultdict """ 需求: 统计user_list中字母出现的次数 ""&q ...

  6. java实现js端的escape和unescape

    1.今天遇到这么个问题,需要把一些特殊字符传递到后台进行处理,例如Aa111111!@#,结果到了后台出现了个别字符中文符号了.这个时候需要转码.常见的就是js端的escape和unescape这种函 ...

  7. 【CF1257C】Dominated Subarray【贪心】

    题意:给定一个数组,求最小的字数组使得数组里存在至少一对重复元素 题解:每个点求出他的后继在哪,然后每次贪心就这个点到他的后继为一个子数组,求出最小的就是答案 #include<iostream ...

  8. 让VirtualBox虚拟机实现开机自动后台运行

    转至:http://www.cnblogs.com/top5/archive/2012/01/19/2326234.html 测试环境:Host OS: Windows 7 x64 Guest OS: ...

  9. 减轻Temporal AA 的 拖影问题(ghosting)

    Temporal AA 效率高,但是有拖影等问题,UE4中可以如下修改减轻拖影问题: 搜索到PostProcessTemporalAA.usf文件,打开,找到 #define AA_DYNAMIC_A ...

  10. python 使用xlsxwriter的方法属性

    http://xlsxwriter.readthedocs.io/format.html