内容简介:雷锋网按:本文为 AI 研习社编译的技术博客,原标题 Finding Driving Lane Line live with OpenCV,作者为 Percy Jaiswal。翻译 | 尘央 王飞 校对 | 余杭 整理 | MY
雷锋网按:本文为 AI 研习社编译的技术博客,原标题 Finding Driving Lane Line live with OpenCV,作者为 Percy Jaiswal。
翻译 | 尘央 王飞 校对 | 余杭 整理 | MY
大家好!在此项目中,我将尝试从车载记录仪的视频中寻找车道线。当我们检测到车道线,我们将在原视频帧上将他们标记出来并回放。所有的一切工作将在线上使用 OpenCV 提供的函数完成,并且不会存在任何延迟。
在此我们将编辑一系列的函数来检测车道线。我们在编写此函数的时候将用到一个示例图像,一旦我们能在一些示例图像的基础上成功地检测到车道线,我们将完整的程序添加到一个函数里去,该函数能接收实时图像,并返回带有车道线标记的相同图像。让我们立刻开始学习吧。
首先,输入示例图像帧。此行将在最终的代码中进行注释,其中 image 将通过视频捕获来获得帧。
示例图
为了减轻我们处理器的负担(这在嵌入式系统中是非常稀缺的资源),我们将在 Greyscale 版本的图像中进行所有图像处理,而不是原始的彩色版本,这将有助于用更少的资源更快地执行程序。以下函数将彩色图像转换成灰度版本。
灰度图像
接下来我们将通过模糊来消除图像中的噪声,通过将图像与低通滤波器内核卷积来实现图像模糊。它有助于消除噪音,实际上从图像中去除了高频内容(例如:噪声,边缘),因此在此操作中边缘会有些模糊。OpenCV 提供 4 种不同类型的模糊技术,高斯模糊是最受欢迎的一种。
图像模糊(图像平滑化)
我们能选择不同的内核大小,其中结果过滤器将简单地取内核(内核大小行 x 列的矩阵)区域的平均像素值,并用平均值代替中心元素。而 5 是一个标准值,故我选择了 5。
边缘检测
canny 边缘检测是边缘检测的常用算法。实际上,canny 边缘函数还实现了一个内核大小为 5x5 的高斯过滤器,这和我们之前的步骤一样,但是在我遇到的许多文献中,都推荐在 canny 边缘检测之前先对其进行图像模糊。边缘检测背后的基础理论是,无论何处有边缘,边缘两侧的像素在强度上有着很大的差异(也称为梯度)。首先,在水平和垂直方向上扫描输入图像以找到每个像素的梯度。在获得梯度幅度和方向之后,完成图像的全扫描以去除可能不构成边缘的任何不想要的像素。为此,在每个像素处检查像素是否是其邻域中的局部最大值。
low_threshold 和 high_threshold 确定必须检测边缘的强度。如果梯度高于 high_threshold ,则将此梯度视为边缘的一部分,但是一旦检测到边缘,即使梯度高于 low_threshold ,下一个像素将被视为边缘。
参考我们的示例图像,很明显在边缘条件下,尤其是在车道线是白色的,邻近的车道像素是黑色的时候,相邻的像素存在着巨大的差异。
感兴趣区域
有一点需要考虑的是,我们并不想查找图像中的所有边缘。我们只对图像中中心区域的车道线查找感兴趣。直观上这是可行的,车道线是不可能在图像的左上/右上部分。看我们的示例图像,我们可以有把握地说,车道线应位于图像底部边缘较宽的梯形区域内。随着边缘逐渐变窄,我们朝向图像的顶部。
......
想要继续阅读,请移步至我们的AI研习社社区: https://club.leiphone.com/page/TextTranslation/847
更多精彩内容尽在 AI 研习社。
不同领域包括计算机视觉,语音语义,区块链,自动驾驶,数据挖掘,智能控制,编程语言等每日更新。
雷锋网雷锋网 (公众号:雷锋网) (公众号:雷锋网)(公众号:雷锋网)
雷锋网原创文章,未经授权禁止转载。详情见 转载须知 。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 酷走Android行车记录仪研究
- 用霍夫变换&SCNN码一个车道追踪器
- AI 快车道目标检测专场, PaddlePaddle “深度干货”
- SUPER 车道线检测:异构数据集训练、物理驱动拟合
- 20分钟教会车道保持功能!Wayve 公司的强化学习算法有点牛
- 鲁汶大学提出可端到端学习的车道线检测算法
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。