今天介绍的是如何通过计算机视觉去识别车道线,其实现在也有各种方法去识别车道线了。这次是基于Matlab的实现,过几天会更新Python版本的实现,虽然用的语言不一样,但是原理都是一样的。
预处理
摄像机获得的视频图像,由于受到周围环境的影响,存在着很多无用信息和各种各样的噪声干扰。为了准确的检测到道路线必须对图像进行预处理。首先,通过灰度化处理将原始彩色图像转换为灰色图像,然后采用大小为5*5的模板进行高斯滤波平滑处理,减小噪声干扰。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
若使用3×3模板,则计算公式如下
g(x,y)={f(x-1,y-1)+f(x-1,y+1)+f(x+1,y-1)+f(x+1,y+1)+[f(x-1,y)+f(x,y- 1)+f(x+1,y)+f(x,y+1)]*2+f(x,y)*4}/16;
其中,f(x,y)为图像中(x,y)点的灰度值,g(x,y)为该点经过高斯滤波后的值
由于天空并不存在车道的感兴趣区域,所以对图片进行了划分,将感兴趣区域划为一个三角形区域。如图1。

图一
预处理代码如下:
%读入RGB图片
I=imread('IMG00061.jpg');
%把RGB图转换为灰度图
I=rgb2gray(I);
%高斯滤波平滑处理
sigma = 1;
gausFilter =fspecial('gaussian', [5,5], sigma);
gaus= imfilter(I, gausFilter,'replicate');
%得到图片的宽和高
[h, w]=size(I);
%k是直线的斜率
%找出图片的感兴趣区域
k = 1.3;
for y=1:h
for x=1:w
if y < x*k + h-k*w || y < -k*x +h
I(y, x) = 0;
end
end
end
边缘检测
| 欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) | Powered by Discuz! X3.2 |