单镜头视觉系统检测车辆的测距方法 收藏

以前提过单目测距的问题,检测的障碍物2-D框加上摄像头的姿态和路面假设。以下根据公开发布的论文讨论具体的算法:

注:深度学习直接估计深度图不属于这个议题。


1。Vision-based ACC with a Single Camera: Bounds on Range and Range Rate Accuracy

著名的Mobileye论文,先看成像几何如图:

本车A,前方车B和C,摄像头P焦距f,高度H,和障碍物B/C距离Z1/Z2,B/C检测框着地点在图像的投影是y1/y2。那么y=fH/Z,所以Z=fH/y。下面是三个不同距离的估计结果:

精度测量得到:90米误差大约10%, 44米误差约为5%。


2。Integrated Vehicle and Lane Detection with Distance Estimation

算法流程如下:

先是从3个消失点估算摄像头焦距,然后6个2D-3D对应点得到摄像头姿态:

基于车道宽度的假设(3.75米),可以算出投影矩阵,随之得到距离公式:

下图是一些结果:


3。 Use of a Monocular Camera to Analyze a Ground Vehicle’s Lateral Movements for Reliable Autonomous City Driving

还是基于消失点原理,加上水平线,可得到道路场景几何关系。

消失点和pitch angle的关系:

从消失点得到pitch angle:


4。Range Estimation with a Monocular Camera for Vision-Based Forward Collision Warning System

如果车辆宽度已知,那么车距为d=FW/w。

如上图,可以计算距离为:

整个FCW系统流程图如下:

给了一个虚拟水平线的概念,估计它的位置 ,Hc为摄像头高度,Yb是车辆框底部的垂直位置。然后可以计算出车辆距离:


5。Robust Vehicle Detection and Distance Estimation Under Challenging Lighting Conditions

碰撞报警需要估算安全距离。下图几何关系能给出估计距离的公式:

距离公式为

下图是IPM的鸟瞰图展示距离:


6。Pitch Angle Estimation Using a Vehicle Mounted Monocular Camera for Vehicle Target Range Measurement

计算特征点运动,由此得到自身摄像头运动,从其平移向量推出pitch angle。

上图可以计算出前方车的距离:

整个系统流程图如下:

下面就是从SFM的几何关系推理距离:

看下面的关系可以得到pitch angle:

角度计算公式为


7。Forward Collision Warning with a Single Camera

time to contact (TTC) 直接从车辆的大小和位置得到,下面是流程图:

计算公式:

车边框的位置以及光流大小可以确定碰撞的可能性:


这里主要是通过简单的几何关系,直接估算检测的路上车辆距离并给出可能的撞击时间。现在深度学习越来越强大,理论上得到车检测边框的同时,也可以回归车的距离。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
视觉的前方车辆测距算法一般分为以下几个步骤: 1. 相机标定:标定相机的内参和外参,得到相机的内部参数矩阵、畸变系数和外部参数矩阵。 2. 图像预处理:读取图像并进行预处理,包括去畸变、灰度化、滤波、边缘检测等。 3. 特征提取:提取图像中特征点,并使用算法进行匹配。 4. 三角测量:利用相机的内参和外参以及特征点的位置信息,通过三角测量的方法计算前方物体的距离。 以下是一个简视觉前方车辆测距的 Matlab 代码实现: ```matlab % 相机标定 % 标定板格子数量为(9,6),格子大小为25mm [imagePoints,boardSize] = detectCheckerboardPoints('calibration.jpg'); worldPoints = generateCheckerboardPoints(boardSize,25); cameraParams = estimateCameraParameters(imagePoints,worldPoints); % 读取图像 img = imread('test.jpg'); % 去畸变 undistortedImg = undistortImage(img,cameraParams); % 灰度化 grayImg = rgb2gray(undistortedImg); % 滤波 filteredImg = imgaussfilt(grayImg,3); % 边缘检测 edgeImg = edge(filteredImg,'canny'); % 特征提取 points = detectSURFFeatures(edgeImg); [features,validPoints] = extractFeatures(edgeImg,points); % 特征匹配 indexPairs = matchFeatures(features1,features2,'MaxRatio',0.7); matchedPoints1 = validPoints1(indexPairs(:,1),:); matchedPoints2 = validPoints2(indexPairs(:,2),:); % 三角测量 worldPoints = triangulate(matchedPoints1,matchedPoints2,stereoParams); distance = mean(worldPoints(:,3)); ``` 需要注意的是,这只是一个简的示例代码,实际应用中需要根据具体情况进行调整和优化。同时,视觉测距的精度受到很多因素的影响,如相机标定精度、图像质量、特征点匹配精度等,因此在实际应用中需要综合考虑各种因素,采用多种方法提高精度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值