如何消除自动驾驶车道上的障碍?

时间:2019-05-01 19:37:08

标签: opencv image-processing

我从事自动驾驶汽车项目。我想确定汽车在高速公路上的转向角。但是对于这种特定情况,没有车道线或任何车道边界,只有沥青本身。我认为周围不会包含任何与沥青颜色足够接近的颜色。

(假设中间没有白线,我只看沥青)

enter image description here

该过程是实时的(在Raspberry Pi上),并且借助相机捕获帧。

对于这个问题,我提出了如下的管道(带有C ++的OpenCV 4.0):

  • Denoise-> BGR2HSV-> HSV过滤器-> Canny边缘检测->作物到ROI->霍夫线检测->生产线

这条管道清楚地告诉了我汽车如何转向以保持在单向车道的中间。我可以用HSV过滤沥青段。问题是当车道上有障碍物时。车道的侧面或中间可能会有盒子。在这种情况下,HSV过滤器会在车道上创建一个大黑匣子。粗线检测将盒子的边缘转换为假车道线。最终,这导致错误的转向预测。实际上,我开发了一种算法,通过观察霍夫线的斜率来解决此问题,但是,它并不总是稳定的。

(位于车道一侧的红色框)

enter image description here

我的意思是,您是否建议在此过程中进行任何改进以消除图像过滤方面的可能障碍?车道上的障碍物会导致错误的呼啸线并影响转向决策。我认为有一个改进,就是从图像的左侧和右侧(在ROI中)检测最大白色像素计数的索引,然后将每个像素之间的像素设置为白色。这样可以清除路中间的障碍物(车辆可能会撞到障碍物),但无论如何都将其留在车道旁。但是,如果道路弯曲,这将是不切实际的,因为这种改进会丢失图像中的弯曲数据。

(图片来源:https://www.masterbuilder.co.in/wp-content/uploads/2018/03/Rs-46000-cr-initiative-taken-for-new-express-highways-elevated-roads-Govt.png

编辑:

当我使用凸包as in OpenCV documentation时,会得到以下结果,这是意外的。

enter image description here

3 个答案:

答案 0 :(得分:1)

特斯拉使用的一个技巧,如果出于任何原因,车道不可见是跟随前车的运动。因此,您可以通过适当的算法利用它们,而不是消除障碍。

您的算法应如下所示:

  1. 尝试检测您正在行驶的车道。
  2. 如果找到前车,则使用前车运动跟踪算法跟踪前车。

这篇文章很好地介绍了python中的对象跟踪:

https://www.pyimagesearch.com/2018/07/30/opencv-object-tracking/

如果您想了解有关自动驾驶汽车的更多信息,可以在此处查看我的 github 存储库:

https://github.com/kochlisGit/autonomous-vehicles-deep-reinforcement-learning

答案 1 :(得分:0)

应用HSV过滤器后,可以使用findContours,后跟convexHull。这样可以在检测到的轮廓中弥合“间隙”。

示例:
enter image description here

代码:

import cv2
import numpy as np
# load image in grayscale
img = cv2.imread('hull.png',0)
# load image in color
img_color = cv2.imread('hull.png')
# find contours
contours, hier = cv2.findContours(img,cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# get and draw convexhull
for cnt in contours:
    hull = cv2.convexHull(cnt)
    cv2.drawContours(img_color,[hull],0,(0,0,255),3)
# show images
cv2.imshow('Image', img)
cv2.imshow('Result', img_color)
cv2.waitKey(0)
cv2.destroyAllWindows()

有关更实际的示例,请查看this answer。所描述的过程将在其中应用: enter image description here

答案 2 :(得分:0)

您可以尝试定位道路的中间(不带或不带随机对象),然后从此处计算转向角,而不是确定道路并尝试消除诸如盒子之类的外部物体。

这是一种以这种方式进行的研究论文,当车道在那儿时也有帮助,但在光线不足或阴影遮挡车道时看不到。

https://www.researchgate.net/publication/282921028_Steering_angle_estimation_for_autonomous_vehicle_navigation_using_hough_and_Euclidean_transform