利用逆透视变换获取车载图象的鸟瞰图
近年来在人工智能潮流下,各行各业对无人驾驶技术的发展投来了越来越多的关注。在智能驾驶系统的研究中,车道线检测的研究是非常重要的一环;鉴于绝大多数城市道路交通环境特性和车道线本身特性,当前车道线检测研究使用的绝大部分方法都是基于计算机视觉的方法,近几年深度学习方法的发展非常迅猛,但是由于深度学习依赖巨量的训练数据和其成本高昂的硬件需求,当前市场上使用的大多数智能驾驶产品都没有引入基于深度学习的视觉解决方案,以结合基于图象处理算法的视觉与雷达传感器结合的智能驾驶产品居多。
逆透视变换是当前国内外车道线检测研究使用得比较多的一个方法,逆透视变换从原理层面上与透视变换并没有本质的区别,透视变换能够将图象投影到一个新的视平面,关于透视变换的原理网上有很多博客,这里也就不多说了。Opencv中提供了透视变换的接口,通过在分别原图和结果图上设定4个点,这八个点就确定了原图到逆透视图的转换矩阵,并且这两组点在原图和逆透视图上是像素对应的。
其实无论是透视变换还是逆透视变换,最重要的还是两组对应点的选取,这两组四个点,总共八个点关系透视变换的最终效果。这里使用的是车载摄像头的标定信息来选取对应点。
下面的代码是智能驾驶系统项目中的源码,这里把Opencv中的接口稍微封装了一下,其中有些与逆透视变换无关的参数,可以忽略不管;比较重要的一点是:这里的原图的四个点是通过车载摄像头的标定信息计算出来的,可以通过车载摄像头的标定信息计算出车载摄像头的消失点,找到消失点之后,四个点的选取就比较容易了;逆透视图的四个点就更好选取了,只要需要保证四个点构成一个正矩形就行了,四个点之间的像素距离可以根据标定信息计算,这样能够最大程度上让鸟瞰图的尺寸比例更接近现实世界的尺寸比例关系。
//参数为原图像、逆透视图、四个原图上的对应点
bool IpmTransform::executeipm(Mat& img,Mat& dst,Point2d P1,Point2d P2,Point2d P3,Point2d P4)
{if (img.data){Point2f corners[4];//原图四个点Point2f corners_trans[4];//逆透视图四个点//**车载场景图象的其他参数**//float roi_x0=0;float roi_y0=228;float ROI_HEIGHT=30000;float ROI_WIDTH=3750;//************************//corners[0] = P2;corners[1] = P3;corners[2] = P1;corners[3] = P4;//设定逆透视图的宽度float IPM_WIDTH=500;float N=5;//保证逆透视图的宽度大概为N个车头宽float sacale=(IPM_WIDTH/N)/ROI_WIDTH;float IPM_HEIGHT=ROI_HEIGHT*sacale;//逆透视图初始化dst=Mat::zeros(IPM_HEIGHT+50,IPM_WIDTH,img.type());corners_trans[0] = Point2f(IPM_WIDTH/2-IPM_WIDTH/(2*N),0); //P2corners_trans[1] = Point2f(IPM_WIDTH/2+IPM_WIDTH/(2*N),0); //P3corners_trans[2] = Point2f(IPM_WIDTH/2-IPM_WIDTH/(2*N),IPM_HEIGHT); //P1corners_trans[3] = Point2f(IPM_WIDTH/2+IPM_WIDTH/(2*N),IPM_HEIGHT); //P4//计算原图到逆透视图和逆透视图到原图的变换矩阵warpMatrix_src2ipm = getPerspectiveTransform(corners, corners_trans);warpPerspective(img, dst, warpMatrix_src2ipm, dst.size());//标出两组点for(int i=0;i<4;i++)circle(img,corners[i],5,Scalar(0,255,255),4);for(int i=0;i<4;i++)circle(dst,corners_trans[i],5,Scalar(0,255,255),4);imshow("img",img);imshow("dst",dst);}else{cout << "NO IMAGE!!!" << endl;return false;}return true;
}
这里的变换截取了车载图象的一部分作为ROI区域来进行逆透视变换,这里在原图以及逆透视图上将两组对应点都用黄色点标了出来:
经过逆透视变换之后的图:(在鸟瞰图上的车道线远近粗细一样,这样为车道线检测提供了一个非常重要的特征)
同样在弯道的车道上也可以应用这种变换方法:
逆透视图:
详细代码可见于LDW车道偏离预警源码:
https://github.com/cz152417312/ADAS/tree/master/LDW
利用逆透视变换获取车载图象的鸟瞰图相关推荐
- 消失点计算逆透视变换(IPM)
当我们看火车轨道的时候总在某个距离上看到两条轨道重合到一起后消失. 原图四个点选择: 下面的代码是智能驾驶系统项目中的源码,这里把Opencv中的接口稍微封装了一下,其中有些与透视变换无关的参数,可以 ...
- 如何利用echarts图表获取条状图点击名称和值
如何利用echarts图表获取条状图点击名称和值 听语音 | 浏览:1505 | 更新:2017-06-13 10:20 | 标签:软件 1 2 3 4 5 6 7 分步阅读 echarts图表插件工 ...
- 基于自适应逆透视变换的车道线SLAM
公众号致力于分享点云处理,SLAM,三维视觉,高精地图相关的文章与技术,欢迎各位加入我们,一起每交流一起进步,有兴趣的可联系微信:920177957.本文来自点云PCL博主的分享,未经作者允许请勿转载 ...
- matlab与逆透视变换,基于逆透视变换的车道线检测方法与流程
本发明属计算机视觉.图形处理技术领域,具体涉及一种通过照度不变及逆透视变换进行车道线快速鲁棒检测的方法. 背景技术: 车道线检测作为自动驾驶技术的第一个环节,能够有效感知车辆周围世界,并获取可行驶区域 ...
- 逆透视变换详解 及 代码实现
逆透视变换详解 及 代码实现(一) 中主要是原理的说明: 一.世界坐标轴和摄像机坐标轴 从下图中可以看到,世界坐标为(X,Y,Z) 相机坐标为(Xc,Yc,Zc) 而世界坐标变换到相机坐标存在一个旋 ...
- 逆透视变换详解 及 代码实现(二)
根据 逆透视变换详解 及 代码实现(一)的原理 下面我用车上拍摄的车道图像,采用逆透视变换得到的图像,给出代码前我们先看下处理结果. 首先是原始图像: 下图为逆透视变换图像: 下面说具体的实现吧!! ...
- 逆透视变换(IPM)多种方式及代码总结
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 来源丨古月居 作者丨lovely_yoshino 1.背景 在自动/辅助驾驶中,车道线的检测非常重要. ...
- 逆透视变换车道线检测
摘要 随着社会的进步和发展,安全驾驶和汽车的简便操作越来越受到人们的重视.苹果.谷歌和特斯拉等公司相继推出了无人驾驶系统,国内的厂商也对此领域产生了高度兴趣.基于人工智能和大数据的无人驾驶技术,被认为 ...
- 逆透视变换与SIFT算法
1. 逆透视变换(Inverse Perspective Mapping -- IPM) 后续会补充逆透视变换的名词和原理的解析. 在自动/辅助驾驶中,车道线的检测非常重要.在前视摄像头拍摄的图像中, ...
最新文章
- NHibernate和Cuyahoga(二)(翻译):
- 备受诟病的导购,不过是在替屈臣氏挡子弹
- 哈利波特检索_语料库ing说: 难怪哈利波特与混血王子那么好看
- 【Linux系统编程】 文件描述符的复制:dup()和dup2()
- 如何自行分析定位SAP BSP错误
- mysql报错注入实战_MySQL手工注入实战
- jq获取input选取的文件名_tushare获取交易数据并可视化分析
- vue ---- 将项目打包发布
- harbor1.4.0高可用部署
- 阿里云云计算 51 在线实验--安全中心初体验
- 电脑安装最新silverlight版本后依旧提示“Silverlight已被阻止,因为它过时且需要被更新”
- 二进制数除法 matlab,MATLAB求出不可约多项式(实现二进制加法、除法)
- Zotero英文翻译插件安装教程
- 研究背景与文献综述的区别是什么?
- 漏洞修复:Cache Management: Insecure Policy
- Android WIFI认证的流程
- linux中常用的压缩命令,Linux中常用的压缩和解压缩命令汇总
- 软件工程复习知识点汇总(2)
- 华为Mate50和小米13 参数对比
- Vue入门练习:小王记事本