确定图像中车辆的距离(Matlab,OpenCV)

Posted

技术标签:

【中文标题】确定图像中车辆的距离(Matlab,OpenCV)【英文标题】:Determine distance to vehicle in image (Matlab, OpenCV) 【发布时间】:2017-08-27 22:50:43 【问题描述】:

我有 2 张图片:

1 检测到汽车时的初始图像。

2 IPM 图像,当我将图像转换为另一个计划时。

我没有任何有关相机参数的信息。 我知道汽车在原始图像和 IPM 图像中的位置,我想知道如何确定汽车和摄像头之间的距离。我们可以假设相机的高度是 1 m。

是否存在任何公式或算法?

【问题讨论】:

如果你想计算到另一个已知大小的对象的距离,你需要知道一个特征在已知距离的大小。这是在不了解相机的情况下与物体保持距离的唯一方法。 @Piglet 知道车道的宽度会有所帮助,对吧? 我认为这不会有帮助,因为当车道投影到图像中时,较近的部分(底部像素行)将占用大量像素,而较远的部分away(更高的像素行)将占用更少的像素。那么,在这个区间内,我们要在哪里测量车道的长度(以像素为单位)并说“N 个像素的长度将相当于世界空间中 K 米的长度”?否则单目 SLAM 会容易得多。 其实我之前的评论并不完全正确。在一张图像的情况下是正确的。但是给定一个视频流,理论上你可以使用车道的宽度来推断比例,但这需要 I) SLAM 算法来准确地重建 3d 车道边界(这在非城市设置),例如通过将边界限制为已知宽度。 II) 区分车道边界点和非车道边界点的 3d 点(例如分割)。但是,这将导致一个可以说是复杂的管道(不要忘记异常值拒绝)。 【参考方案1】:

从您的问题来看,您似乎处于单眼情况,其中深度/比例信息自然不可用。恐怕没有简单的方法可以实现您想要的。在我的脑海中,这里有几个选项:

1- 使用神经网络。这是最便宜的选择(从材料和开发工作的角度来看)。另外,如果您没有视频流而只有单个图像,它将起作用(尽管我猜这不是您的情况)。如果性能不是问题,您可以或多或少地采用任何卷积神经网络,并在深度数据上对其进行训练。否则,快速搜索将引导您更快地找到最先进的网络,您可以根据自己的需要进行定制。但是,包含深度图地面实况的数据库有点稀缺,您通常必须自己为训练数据构建深度图。在这种情况下,我会想到here 底部列出的许多开源方法。一旦你有了深度图,你就可以训练单目深度估计。

2- 您可以使用立体相机。这些自然会给您深度,例如通过简单的三角测量。

3- 您有一个视频流,可以使用 IMU 或汽车里程计。在这种情况下,您可以使用许多(多传感器)同时定位和映射 (SLAM) 方法。关于这个主题的文献很丰富,但 IMU 校准通常有点噩梦。

4- 您可以使用便宜的 GPS 接收器(想到 ublox EVK* 系列)。在这种情况下,您仍然需要使用一些 SLAM 变体(例如约束捆绑调整或任何基于卡尔曼的方法)。假设 GPS 偏差较低(因为您只显示不受多路径影响的城市周边图像),这将为您提供一个不错的比例近似值。

请注意,方法 3 和 4 将为您提供重建的估计值,因此如果您使用稀疏(ie 基于特征的)SLAM 方法,您最终将不得不对汽车所在的区域进行致密化被检测到(除非粗略估计没问题)。

【讨论】:

以上是关于确定图像中车辆的距离(Matlab,OpenCV)的主要内容,如果未能解决你的问题,请参考以下文章

opencv4图像分割那些你不知道的API 代码可直接移植使用

OpenCV图像处理11车辆统计项目

车辆计数基于matlab GUI背景差分法道路行驶多车辆检测含Matlab源码 1911期

OpenCV(26)图像分割 -- 距离变换与分水岭算法(硬币检测扑克牌检测车道检测)

急求matlab车辆调度遗传算法代码,需求车辆行驶最优路径。

DCTWVRP基于matlab遗传算法求解带容量+距离+时间窗的VRP问题含Matlab源码 1211期