计算机视觉,如何检测道路?从何处开始?

6
我是一名电子工程本科生,正在进行一个项目,需要我检测道路(主要是拐弯处)。要求是,根据拐弯处的GPS坐标和方向,机器人应该能够导航到给定的点。问题在于GPS坐标非常不准确,而且道路并不总是笔直的。因此,我将不得不检测道路的两侧,并相应地导航我的机器人。
我考虑在机器人的两侧安装两个摄像头。这些摄像头通常用于使机器人保持在道路中央,当机器人距离转弯处5米时,其中一个摄像头将引导它通过转弯。
我将使用树莓派进行开发,但为了测试目的,我已在运行Ubuntu的笔记本电脑上安装了simplecv和opencv。我绝对没有计算机视觉方面的经验。我不知道从哪里开始。请问有谁可以指导我完成上述任务的算法?我应该使用simplecv还是opencv?Python还是C++?个人喜欢Python上的simplecv,但我不知道它是否能够完成任务。
任何帮助都将不胜感激。请给我指明方向!
编辑:理想情况下,没有交通,没有障碍物。道路宽度恒定。 我将在校园内演示该项目,这里是校园道路的照片。

尝试阅读有关边缘检测(用于锐利转弯)或HoughLine变换的内容,绘制出道路两侧的线条。这只是我想到的一个方法...但普通传感器如红外、超声波等难道不足以替代计算机视觉吗?我不是机器人专家,只是问问。 - rockinfresh
@rockinfresh 红外传感器的距离有限(仅几厘米)。我尝试了超声波,但路面太低,超声波要么检测到路面,要么完全没有检测到。 - Hassan
3个回答

4
我认为这个建议会有用,试试吧。我将使用的4张图片参考自Robert Laganiere的《OpenCV 2计算机视觉应用程序编程食谱》。这是我用来学习图像处理的书籍之一,在HoughLine上也有类似的道路示例。
我以前使用过HoughLine,但没有在道路上使用过。为了让你更好地理解,这是它=> 原始图像如下:
(插入图片)
现在,你可以对图像应用Canny,它会看起来像这样:
(插入图片)
或者你也可以使用Sobel...
(插入图片)
然后,应用HoughLine:
(插入图片)
你将不得不自己调整参数。
所以这是我的建议=> 放一个前置摄像头,稍微低一点,能够检测到几米的车道,你可以使用ROI(感兴趣区域)来聚焦视频的底部区域,那里最可能有车道。这是为了消除噪音,其中其他与道路平行的物体也被检测到了。
你让机器人停留在两条被检测到的道路线中间。另一个ROI的用途是,如果一条线的一侧消失了,说明它正在轻微倾斜。你可以调整机器人回到正确的轨道上。
当有转弯时,你可以指定如果线不再垂直(也许通过canny算子),则进行转弯,直到线再次垂直为止。
当然,你将不得不编写两个不同的函数来检查是否根据线的角度向右转还是向左转。
这就是我解决问题的方式。我的方法应该有相当不错的结果。你可能面临的唯一问题是调整Houghlines和Canny的参数。
(附言:在查看你的图片时,我注意到路缘石的一侧偶尔会出现空隙。所以我建议使用HoughLineP而不是HoughLine,这样你就可以指定每条线之间的最大间隔,以便将其视为线,如果我记得正确的话。如果这仍然不起作用,你可能需要对视频帧进行一些预处理。)
希望你觉得我的方法有用。祝好运。如果还有其他需要帮助的地方,请在评论中回复,我会尽力帮助(:

抱歉我的非正式英语,我现在有点赶。祝好。 - rockinfresh
这个方法没有使用通道,是否可行? - Hassan
我在考虑对路缘进行Hough变换。这可能比较棘手,但是可以做到。或者您也可以使用两个摄像头放在你提出的问题的两侧,通过Hough变换来检测路的两侧(每侧一个摄像头)。然后,您可以将相机角度设置为在捕获帧的顶半部分描绘路缘,并在底半部分设置ROI。如果您仔细考虑一下,如果道路向右弯曲,左侧的捕获帧将显示HoughLine进入ROI(底半部分),因为路缘越来越靠近它。 - rockinfresh
希望你知道我的意思,没有白板有点难以解释。相机的角度对此很重要。试着想象一下。或者你可以尝试类似于侧面放置相机的方法。如果你让我提供另一种方法,我只能想到颜色空间处理。让我谷歌一下看看是否有人在此之前做过,并很快提出另一个答案,这样你就有更多的实验方法了。 - rockinfresh

4
由于您问到“从哪里开始”,我建议您从阅读关于“道路/车道检测”问题的相关文献开始。也许您可以在校园图书馆查找一些相关文献。
例如,DAVIES, E. Roy. 计算机与机器视觉:理论、算法、实践。 Elsevier/Academic Press, 2012年出版的书中有“第23章 车载视觉系统”,其中描述了“定位道路”和“定位道路标记”的基本方法。Davies的书还有一个注释和更新的参考书目部分。
对于更详细的背景,您可以查看像下面这篇“调查”文章,比较不同的解决方案: MCCALL, Joel C.; TRIVEDI, Mohan M. 基于视频的车道估计和跟踪用于驾驶员辅助:调查、系统和评估。《智能交通系统,IEEE Transactions on》, 2006, 7.1: 20-37.

1

承诺了,这里有另一种方法。

为了更清楚地了解这种方法,请观看此视频:http://www.youtube.com/watch?v=TMKd9ov_rmE

颜色分割方法实际上使用Expectation-Maximization(EM)算法。而Gabor滤波器用于消失点。有点接近我心中的想法,但略有不同。

您可以尝试在视频中展示的方法和/或我的方法。

我实际上要做的是消失点,ROI根据消失点的y轴点发生变化。而ROI的两侧是固定的,以使道路(灰色)始终在ROI内。

之后,您必须使用区域,其中一旦ROI中灰色的颜色空间小于ROI的90%(您自己计算数量。这只是一个粗略的估计),就意味着有转弯。有几种方法可以告诉您是哪个转弯,我让您自己想出来:p。如果您使用此方法,肯定可以想到它。

我的唯一担忧是示例图像中的斑马线或行人,它们呈白色,但这些可以很容易地被去除。(提示:直方图和如果颜色值在白色范围内...或者你可以使用面积。如果 blob 小于此像素数量...)

我不确定这个程序的计算开销会有多大。

但如果你要尝试这种方法,请专注于 HSV 或 LAB 颜色空间,而不是 RGB。现在你有更多的实验方法可供尝试。你也可以尝试自己的方法。玩耍吧。图像处理、计算机视觉真的很有趣 (:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接