一、实验原理、目的与要求
、实验原理、目的与要求
要求:从带有车道线的图像(图2)中检测出车道线,并将检测算法通过摄像头采集实现实时的车道线检测。检测算法包括(但不限)以下步骤:
- 读入图像;
- 灰度变换;
- 去噪;
- 边缘检测;
- 线检测(直线/曲线);
- 视频采集及实时检测
图3-1 原图
原理:
形态学处理:
- 开运算:先腐蚀后膨胀的过程。用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。开运算通常是在需要去除小颗粒噪声,以及断开目标物之间粘连时使用。其主要作用与腐蚀相似,与腐蚀操作相比,具有可以基本保持目标原有大小不变的优点
- 闭运算:先膨胀后腐蚀的过程称为闭运算。用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积
Canny检测:是一种多级边缘检测算法,它首先进行图像降噪(但是在opencv和matlab调用的检测并不包括降噪)、计算图像梯度、非极大值抑制和阈值筛选
Hough变换及直线检测:如果直线 y=mx+b 在图片中,那么图片中,必需有N多点在直线上(像素点代入表达式成立),只要有这条直线上的两个点,就能确定这条直线。该问题可以转换为:求解所有的(m,b)组合。设置两个坐标系,左边的坐标系表示的是(x,y)值,右边的坐标系表达的是(m,b)的值,即直线的参数值。那么一个(x,y)点在右边对应的就是是一条线,左边坐标系的一条直线就是右边坐标系中的一个点。这样,右边左边系中的交点表示有多个点经过(m,b)确定的直线。
二、实验仪器设备及环境
电脑(windows10)
环境:matlab2016b
三、实验内容步骤
1.首先进行二值化处理
2.对图像进行去噪
3.检测图像边缘
4.检测直线,找出车道线
5.尝试视频录制和动态检测
四、实验数据记录及数据处理
1.二值化:
实验时发现,如果直接使用大津法计算阈值,车道线反而会被模糊掉
图3-2直接用大津法二值化
于是尝试了用先用对数变换扩展暗处像素,以期使车道线与车道背景分离开,再二值化,,实践后发现,虽然扩展了暗处像素,但二值化的效果并不明显
图3-3对数变换后的图片
图3-4对数变换后再OTSU二值化
于是最终选择了手动调节阈值来进行二值化
图3-5使用阈值为148进行二值化
2.去噪:
图3-6按连通域面积滤除后的效果
接下来利用上一次实验的成果,对图像进行闭运算,进一步增强图像
图3-7进行闭运算之后的结果
3.进行canny边缘检测
图3-8进行canny边缘检测后的结果
4.进行霍夫变换并进行直线检测,通过调节参数,获得比较理想的结果
图3-9进行直线检测的结果
5.视频采集
由于没有合适的手段采集实际的车道线并动态检测,这里仅仅分别尝试了在matlab和opencv中获取电脑自带摄像头的图像,获取之后直接用于图像处理即可
这里要注意的是,一般摄像头都会有最大帧率,比如50fps。那么如果想用满所有的图像,就必须要保证每张图像的处理时间在20ms以内(假设采集不需要占用cpu),不然就不能用满所有帧;或者说,最终的图像处理速度,取决于采集和处理之中的慢者
图3-10获取电脑摄像头图像
五、实验结论探讨及分析
本次实验进行车道线检测,相比于前两次实验,本次实验算是一个相对比较完整的图像工程,从最基本的图片中提取出需要的信息——车道线
实现的思路比较常规,由于图像中并没有过多的噪点,二值化后图像就已经很清晰了,后面的canny边缘检测和hough变换直线检测都显得水到渠成。不过这里也发现,选取合适的阈值对图像进行二值化并不容易。虽然大津法是动态阈值,但是有时候用大津法二值化并不能不满足提取图像细节的需求。