这个算法是汪悦在 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. 035:DTL常用过滤器(4)

    join过滤器: 类似与 Python 中的 join ,将列表/元组/字符串用指定的字符进行拼接.示例代码如下: {{ value|join:"/" }} 如果 value 是等 ...

  2. 对async 函数的研究

    async 函数 1.ES2017 标准引入了 async 函数,使得异步操作变得更加方便. async 函数是什么?一句话,它就是 Generator 函数的语法糖. 前文有一个 Generator ...

  3. linux运维、架构之路-Nginx服务

    一.Nginx服务 1.介绍         Nginx软件常见的使用方式或架构为:LNMP(linux nginx mysql php),Nginx三大主要功能,web网站服务,反向代理负载均衡(n ...

  4. MaxCompute按量计费计算任务消费监控告警

    MaxCompute 按量计费资源为弹性伸缩资源,对于计算任务,按任务需求提供所需资源,对资源使用无限制,同时MaxCompute按量计费的账单为天账单,即当天消费需要第二天才出账,因此,有必要对计算 ...

  5. django的安装和初步使用

    安装参考:步骤也可以参考这个 很详细 https://blog.csdn.net/zww1984774346/article/details/54408759 如果想在终端查看项目结构 需要用到tre ...

  6. ng mvc + @Valid + @RequestBody 接收json同时校验javaBean的数据有效性

    @Valid @RequestBody CustomerDto customerBean @RequestMapping(value="/customerDataSync.do", ...

  7. php array_sum()函数 语法

    php array_sum()函数 语法 作用:返回数组中所有值的和.大理石构件价格 语法:array_sum(arra) 参数: 参数 描述 array  必需.规定数组. 说明:如果所有值都是整数 ...

  8. Python_013(面向对象概念)

    一.面向对象 1.面向对象几个概念问题: a:类:具有相同属性和技能的一类事物.用代码表示就是,我类里面有一些静态变量和方法是大家共有的; b:对象:具体的类的表现.在代码中就是,调用类的方法或变量传 ...

  9. [CSP-S模拟测试]:轰炸行动(bomb)(塔尖+拓扑排序+语文)

    题目描述 战狂也在玩<魔方王国>.他只会征兵而不会建城市,因此他决定对小奇的城市进行轰炸.小奇有n座城市,城市之间建立了$m$条有向的地下通道.战狂会发起若干轮轰炸,每轮可以轰炸任意多个城 ...

  10. JavaScript原型和闭包学习笔记

    在这里先和大家推荐一个博客,这博客的<深入理解javascript原型和闭包(完结)>系列,看了比较多的视频和书本,这个博客讲得很耐人寻味. 深入理解javascript原型和闭包(完结) ...