opencv - 自动驾驶汽车如何消除车道上的障碍物?
问题描述
我从事自动驾驶汽车项目。我想确定汽车在高速公路上的转向角。但是对于这个特定的场景,没有车道线或任何车道边界,只有沥青本身。我假设周围环境不会包含任何与沥青颜色足够接近的颜色。
(假设中间没有白线,我看到的都是沥青)
该过程是实时的(在 Raspberry Pi 上),并且在相机的帮助下捕获帧。
对于这个问题,我提出了如下管道(OpenCV 4.0 with C++):
- 去噪 --> BGR2HSV --> HSV 滤波器 --> Canny 边缘检测 --> 裁剪到 ROI --> 霍夫线检测 --> 工艺线
这条管道清楚地告诉我汽车应该如何转向以保持在单向车道的中间。我可以用 HSV 过滤沥青部分。问题是当车道上有障碍物时。可能会在车道的一侧或中间放置一些盒子。在这种情况下,HSV 过滤器会在车道上创建一个大黑框。霍夫线检测将框的边缘转换为假车道线。最终,这会导致错误的转向预测。实际上,我开发了一种算法来通过观察霍夫线的斜率来处理这个问题,但是它并不总是稳定的。
(放置在车道一侧的红色框)
我的观点是,您会建议对此过程进行任何改进以消除图像过滤可能存在的障碍吗?车道上的障碍物会导致错误的霍夫线并影响转向决策。我认为的一个改进是从图像的左侧和右侧(在 ROI 中)检测最大白色像素计数的索引,然后将每个像素设置为白色。这将扫除道路中间的障碍物(车辆可能会撞到障碍物),但无论如何都会将障碍物留在车道的一侧。但是如果道路弯曲,这将不实用,因为改进会丢失图像中的弯曲数据。
编辑:
当我在 OpenCV 文档中使用 convexHull时,我得到以下结果,这是出乎意料的。
解决方案
如果出于任何原因看不到车道,特斯拉使用的一个技巧是跟随前车的运动。因此,您可以通过适当的算法利用它们,而不是消除障碍。
您的算法应如下所示:
- 尝试检测您正在前进的车道。
- 如果找到前车,则使用前车的运动跟踪算法跟踪前车。
这篇文章很好地介绍了python中的对象跟踪:
https://www.pyimagesearch.com/2018/07/30/opencv-object-tracking/
如果您想了解更多关于自动驾驶汽车的信息,可以在这里查看我的 github 存储库:
https://github.com/kochlisGit/autonomous-vehicles-deep-reinforcement-learning
推荐阅读
- android - 改造:在应用程序启动时存储和加载不同的基本 url(由用户设置)的最佳方式是什么?
- python - 添加父窗口 Tkinter
- apache-kafka - docker中的本地kafka,具有事务支持
- arrays - C如何解析char数组中的int和char?
- c# - 要实施哪些 Google API 来访问不同云端硬盘位置的文件?
- python - 使用从其他脚本导入函数的 .bat 运行 python 脚本
- python - 在反汇编的一条指令中创建空集
- php - 使用 PHP,我如何在我知道关键的元素之前获取元素
- java - 无法确定任务“:app:processDebugManifest”的依赖关系
- c - 为什么我的 hello world 二进制文件大多为零?