逆透视变换车道线检测

本文介绍了一种用于无人驾驶系统的车道线检测方法,该方法基于逆透视变换技术。通过MATLAB图像处理程序,将车载摄像头拍摄的图像转换为俯视图,然后运用边缘检测提取车道线,尤其在中线提取上表现出色。逆透视变换能够将二维图像还原为俯视的路面图像,通过四组不相关图像像素和世界坐标的映射关系求解变换矩阵,实现车道线的精确检测。
摘要由CSDN通过智能技术生成

摘要

随着社会的进步和发展,安全驾驶和汽车的简便操作越来越受到人们的重视。苹果、谷歌和特斯拉等公司相继推出了无人驾驶系统,国内的厂商也对此领域产生了高度兴趣。基于人工智能和大数据的无人驾驶技术,被认为是消除交通安全问题的最终方法。从美国DARPA 挑战赛到中国未来智能车大赛,无人驾驶技术在全世界兴起了一阵热潮。
对于无人驾驶系统来说,车道线检测是非常重要的技术。到现在为止,已经有一些基于机器视觉的无人驾驶技术得到了应用。对于车道线的检测方法大致可以归结为三种思想:基于车道线模型的方法和基于车道线特征的方法。基于车道线模型的算法就是针对结构化道路,根据其道路形状对车道线进行建模,可以有效的克服路面脏污、光照强、阴影等环境因素造成的影响。基于车道线特征的算法主要是两点:特征提取和特征聚合。首先根据目标信息,选取合适的特征,然后利用这些特征对像像素点进行归类处理,根据一定的准则将车道线类像素提取出来,进行聚合处理。
其中,一部分算法直接检测道路的边缘,而另一些算法首先利用道路的部分参数(例如颜色信息)来确定道路边缘。算法应用的技术也有很大差别(霍夫变换、逆透视变换和神经网络等)。其中,逆透视变换(IPM)技术己经在一些实验中得到了实际验证,如意大利帕尔玛大学的GOLD就使用了技术,对图像进行预处理;还有Massimo Bertozzi等使用双目立体视觉的进行障碍物检测,都取得了很好的效果。
本文提出了一种基于逆透视变换的车道线检测算法,首先通过matlab编写图像处理程序,然后将其在嵌入式智能小车上验证,将MT9V032摄像头拍摄的图像转换为俯视图,接着采用边缘检测的方法对车道标识线进行了提取,提取中线效果很好。

逆透视变换

车载摄像机拍摄到的场景图像是三维空间的场景在二维空间的投影,在对道路情况进行识别的过程中,需要一种逆的求解过程,即从已经得到的二维图像还原成俯视的路面图像.此即逆透视变换。

由小孔成像原理可知,摄像机三维世界坐标(X,Y,Z)到二维图像坐标(x,y)变换的关系 为

在这里插入图片描述(1.1)
根据式1.1,可由三维世界坐标得到二维图像坐标,由于Z未知,所以反之不能实现,考虑到智能车在一般平面道路上行驶,可令Z = 0,则1.1式可变换为
在这里插入图片描述(1.2)
式1.2可以建立二维像素坐标与三维世界平面坐标的映射关系,通过矩阵变换得
在这里插入图片描述(1.3)
其中

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

由此得

在这里插入图片描述
在这里插入图片描述

整理成矩阵形式

在这里插入图片描述
在这里插入图片描述(1.4)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

则式1.4用矩阵可表示为
在这里插入图片描述
若要保证1.4有唯一解,则需满足增广矩阵为满秩,即rank(A|B)=8 ,那么就需要四组不相关的图像坐标系的点。
具体实现上,只需找出四组互不相关图像像素坐标和对应的世界坐标,然后通过matlab即可解出H参数矩阵,公式形式简单,便于大量图像数据处理。
对灰度图逆透视变换结果:
在这里插入图片描述

Code

我使用的C代码就不贴了,要看具体赛道情况,这里贴一个容易理解的Demo

/*   文件:图像逆透视变换
 *
 *   说明:①图像采集前对桶形变换和逆透视变换初始化,建立相应映射表
 *         ②采集完一场图像后,若调用IPMCorrect()函数, CorrImg[120][160]存储逆透视变换后图像
 *           若调用BuketCorrect()函数,CorrImg[120][160]存储桶形后图像
 *         ③所有初始化函数均放在程序初始部分执行!!!
 *
 *   方案:①搜线:先对原始图像搜线,然后根据已知边界初步确定中线,对于单边丢线情况对图像局部逆透视变换,
 *                得到正视图,然后搜线获得中线,再通过逆映射表得到原始图像中线
 *                最后利用最小二乘法对中线均匀化,便于处理。
 *         ②测距:已知图像坐标,根据图像坐标与实际坐标的关系,可算出相应世界坐标与车距离(原点为摄像头中心)
 *
 *            世界坐标(X,Y)与图像坐标(u,v)关系如下
 *            u = (0.0128*X-0.0007*Y-0.0463)/(0.0037*Y+1)/0.0365+80;
 *            v = (-0.007*Y+4.1192)/(0.0037*Y+1)/0.0365+60;
 * 
 *            X = (1.24*u-0.021*v-100)/(0.0028*v+0.017); 
 *            Y = (3.65*v-63.092)/(0.1103-0.0135*v);
 *
 *   注:*******************************************************************************************
 */
   
#include "common.h" //山外common.h头文件
#include "IPM.h"

const double f = 0.0021;
const double dx = 0.0365,dy = 0.0365;

Site_t PMCorr[120][160];   //透视映射表,由原始图得到正视图
Site_t BuketCorr[120][160];  //桶形矫正映射表
Site_t IPMCorr[120][160];  //逆透视反矫正映射表,由正视图得到原始图

unsigned char CorrImg[120][160]; //矫正后图像数组,用于图像处理
                                  //桶形矫正和透视变换用的同一个数组


// 桶形矫正初始化,建立矫正表 
// k1 = -0.00001374; k2 = -0.00001057;  
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值