• 车道线曲线拟合方法


    车道线曲线拟合方法

    一.车道线拟合算法

    背景技术:在车辆行驶过程中,为了更好的了解并预测周围的环境信息,对车道线的曲线拟合是必要的。将采集来的车道线数据进行曲线拟合可以很好的估计车道线的参数信息,得知偏移量、倾斜角、曲率半径等信息,从而预测车道线的走向,为驾驶员或车辆自动控制系统提供帮助。现有的主流算法是将采集的车道线数据投影到鸟瞰图后直接用最小二乘法做三次曲线的拟合。这样做的优点是简单快捷,但缺点包括:视频中同一条车道线在连续几帧的图像中拟合的结果有较大的差别,结果不稳定,远端有摆动的情况。

    经典拟合算法
    一种车道线曲线拟合方法。本方法的步骤主要包括五步:

    第一步从视频中获取当前帧和前2‑5帧图像中各条车道线的像素坐标,并将它们投影到鸟瞰图上;

    第二步对于每条车道线,利用当前帧和前2‑5帧的鸟瞰图坐标用最小二乘法进行三次曲线拟合;

    第三步对于每条车道线,保留第二步中结果的一部分参数以及计算时用到的系数矩阵;

    第四步在第二步中保留的参数的基础上,联立所有帧中的所有车道线,用最小二乘法做最终的拟合,其中计算所需的矩阵由第三步中保留的参数和矩阵直接得到;

    第五步通过第四步的计算结果,得到当前帧各条车道线的最终拟合结果。本发明用于车道线曲线拟合。

    车道线检测实验笔记

    二. 基于Catmull_Rom样条曲线的车道线检测

    1. 样条曲线模型引入

    Catmull_Rom样条曲线拟合是曲线插值技术的一种,该插值技术能经过所给的所有控制点。BY THE WAY,很多插值技术可以参考Catmull_Rom样条曲线拟合方法需要至少四个控制点,公式如下:

     其中,t属于[0,1](也就是0-1中每个t值可能对应所求曲线中的某点,其取值越多,曲线越密)。实际上,四个控制点,曲线只会经过其中两个控制点,如现在有控制点A,B,C,D,则最后的曲线拟合结果将如下:

     得到的事BC之间的拟合曲线。那么若要得到ABCD的拟合曲线应该怎么办呢。实际上,引入两个新的控制点A',D'即可,A'由AB计算而得,D'由CD计算而得,例如,A'计算如下:

                       A'.x = A.x + (A.x - B.x)

                       A'.y = A.y + (A.y - B.y)

    B'点计算类似。于是,由A'ABC可以得到AB曲线,由ABCD可以得到BC曲线,由BCDD'可以得到CD曲线,经过三次计算,可以得到ABCD曲线。

    在一张空白图上,计算经过(50,50),(90,120),(70,200)三点的Catmull_Rom样条曲线。

    贝塞尔曲线只会穿过首尾两个控制点而不过中间的控制点,在某些场合希望曲线穿过所有控制点的话可以使用catmull-rom spline(简称CR-Spline)

    CR-Spline需要至少4个控制点,首尾两个控制点为辅助点,曲线不会穿过,其余控制点在t=[0,1]之间曲线会穿过(我喊作路径点),t=0时值等于第2个顶点,而t=1时值等于倒数第2个顶点

     为了接口友好,通常都会约定传递给插值函数的参数为曲线所经过的路径点而不包含辅助点,两个辅助点可以根据已有的路径点计算出来。

    一般情况计算两个辅助点只需要分别在首尾方向作延伸就行了:p0=p1+(p1-p2),pN+1=pN+(pN-pN-1)

    如果传入的控制点首尾相等形成闭合环,那么不用计算,直接取值p0=pN-1,pN=p1就行

    2. 基于Catmull_Rom样条曲线的车道线检测

    2.1. 基本思路

    有了Catmull_Rom样条曲线的基础,那么车道线检测实际上就是找到合适的控制点!

    给出基于Catmull_Rom样条曲线的车道线检测的基本方法(除去预处理过程):

    1)Hough变换直线检测,将两条主车道线检测出来,直线记为L1,L2;

    2)判断是车道线是直线还是曲线;

    3)若车道线是曲线,找到三个控制点P1,P2,P3;

    4)通过三个控制点,拟合Catmull_Rom样条曲线,得到结果

    2.2.  实验示例

    按照此特性,若从上往下检测(即从(x = 0,y = 0)开始 x++,y++到(x = w,y = h)),直线的Hough检测结果将会基本吻合实际结果,即在检测结果点的周围,都将有实际点的存在;而曲线的Hough检测结果,将会先出现检测结果周围没有实际点,检测结果点周围才会有实际点存在。

    定义:检测结果点吻合:若检测点周围八领域内存在实际点,则代表检测点结果吻合

    于是该问题转化为:从图顶向下搜索,能否找到P3点,使得P3点上部分一段区域(给定一个长度阈值alph1)检测结果点都不吻合(引入容错因子,防止噪声theta),P3点下部分一段区域(同样给定一个长度阈值alph2)检测结果点吻合。若能找到P3点,则该车道线是曲线,否则,该车道线是直线!

    找到控制点P1,P2,P3:

    P3控制点:实际上,步骤(2)中已经找到了其中一个控制点P3,P3点可以作为直线部分和曲线部分的分界点,P3以上部分拟合曲线,P3一下部分保留Hough变换的直线检测结果;

    P1控制点:我们注意到,可以取远端两车道的消失点作为控制点P1。

     具体搜索方法:

    1>找到Hough变换得到的两直线的交点O。

    2>从O点所在行向下搜索,找到P1。(从左往右搜索,第一个遇到的点即为P1点)

    P2控制点:得到了P1,P3两点,则取P1,P3中间的一行搜索两车道的P2点!
    经过三个控制点P1,2,3,使用Catmull_Rom样条曲线拟合得到结果:

     

      

     结论:

    1)从结果上来看,能得到曲线,拟合效果并不是很好,但是提升空间很大,比如增多控制点会让曲线拟合更为精准!

    2)控制点寻找的方法仍需要斟酌,因为道路的情况及其复杂,所以需要针对可想的所有情况进行模拟!

     

  • 相关阅读:
    一些技术鸡汤
    css优化
    Spring 通过maven pom文件配置初始化
    sql 编写横竖表转换
    Linux 常用命令笔记 (持续更新)
    java常用集合详解 contains
    jQuery Ajax(异步请求)
    java中"与"和"或"
    java8 中的时间和数据的变化
    mysql 根据查询结果集更新
  • 原文地址:https://www.cnblogs.com/wujianming-110117/p/12810820.html
Copyright © 2020-2023  润新知