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