阳光算法,其实应该叫灰度图像处理算法才对。灰度图像转二值化图像,具体步骤什么的,不再介绍,不懂得可以去自学《数字图像处理》和matlab。
OV7725硬件二值化与MT9V034比较
OV7725硬件二值化摄像头
(1)基本原理:
当扫描到某点时,该点处图像的灰度值被摄像头中的图像传感芯片换成与灰度值对应的电压值,不同的电压值经过硬件二值化电路的处理转化成高低电压,这样就完成电压值的二值化处理(高低电压)。
最后将图像信息数据通过数据端口输出到控制器。
(2)优势
①由硬件自动进行二值化,节约MCU运算时间。
②二值化后处理简单,因为0就是黑,1就是白
③一次传输8个像素,一个字节为8个像素,有效降低像素时钟
(3)劣势
由于二值化后信息量少,导致在复杂的场景可能无法正常判断与识别。
2.灰度摄像头MT9V034
(1)MT9V034优势:
①全局快门是MT9V034最大的优势,可以在MT9V034 PDF中查看全局快门与卷帘快门的区别(OV7725为卷帘快门)
②摄像头输出灰度图像,可以用于实现更加复杂的图像识别。因为包含的信息量较多
③图像输出的速度较快,例如设置FPS为 60,分辨率为120*188,图像输出的时间只有3MS左右,有更多的时间去处理。
(2)劣势
与二值化比较就是信息量比较大,使得运算量也较大,同时处理起来需要更多的知识但是由于现在比赛的环境越来越复杂,简单的摄像头已经开始难以满意要求,因为慢慢的这点已经变得不再是缺点了
3. DMA传输
DMA转移数据程序解析:当摄像头采集到图像时,发出场中断信号,控制器捕捉到这一场中断信号,触发中断,进入场中断服务程序,场中断标志置1。
在场中断服务程序中,初始化 DMA传输,并使能DMA传输。
之后控制器捕捉PCLK时钟信号,PCLK时钟信号为脉冲方波,它的每一个上升沿都将触发一次DMA传输,每次DMA传输将一个字节的图像信息送入控制器寄存器中,当触发n 次后停止DMA传输。
DMA传输停止时触发中断程进入中断复位函数,在中断复位函数里禁止DMA传输关闭场中断,同时标记图像采集完毕。
这样就完成一场图像信息的采集。
灰度图像处理
提取到图像数据后,需要对CMOS传感器采集的数据进行处理,把路况提取出来,这时需要确定图像阈值的大小。
智能车采集到的图像的灰度值是0-255,数值越高表示接近白色,数值越低接近黑线。
如果像素点灰度值小于某一阈值,则确定该点为黑点,否则,确定其为白点。但现在由于加入了阳光,所以综合考虑阳光的影响。
确定阙值的方法有很多,这里介绍自动阈值法(大津(Ostu)法)。
(1)自动阈值法基本原理
是以图像的灰度直方图为依据,以目标和背景的类间方差最大为阈值选取准则,综合考虑了像素邻域以及图像整体灰度分布等特征关系。
由直方统计图确定被阈值t分离后的区域l、区域⒉所占整个图像的面积比,以及整幅图像、区域1、区域2的平均灰度。
(2)介绍一下灰度直方图
灰度直方图:描述图像中每种灰度级像素的个数,反映图像中每种灰度出现的频率,横坐标是灰度级,纵坐标是灰度级出现的频率。
双峰直方图是指直方图中出现两个峰,也就是说有两个频率较高的灰度级,一个在较低灰度级部分,一个在较高灰度级部分。
以两幅尺寸为256*256图片为例,一幅是调车时的实际场地图像,一幅是纯蓝白赛道图。
用MATLAB统计灰度直方图
灰度图
灰度直方图
由此实际赛道和理想赛道的灰度差异,智能车图像直方图就是一个多峰灰度图。
(3)自动阈值法基本步骤
(4)阈值分割完图像数组后,便是对其二值化,因为处理器只能识别二进数О和1,因此小于或等于阙值的像素可以设定为黑色,以灰度值0表示,大于阈值的像素设定为白色,以灰度值1表示。
如果有连续均匀地灰度值,那么可以得到相当好的二值化图像。
MATLAB编程对上述测试图片二值化
图像不同部分灰度差别较大,势必造成大津法阈值分割不准确。图片一运行时间为0.017821 秒,图片二为0.013891秒。
阈值不准确的原因﹐在很大一部分上是由于光照不均引起的图像噪声所致,一幅完美的图像,直方图应是谷宽双峰的。
一幅较好的图像,代表蓝色底布和白色赛道的双峰应该是最明显的,而图片一的直方图是三峰,而且前两峰靠的很近,高度也近似,这就引入了极大的噪声。因此我们需要滤除噪声。
采用最简单的均值滤波,得到以下图像
可见最简单的均值滤波并不能满足滤波要求,但是均值滤波能很好地去掉由于地面反射引起的光斑。
中值滤波以后的图像
中值滤波并没有去掉光斑,但是将光斑区域明显的聚集起来。滤波方法对噪声是否有用,要看噪声的类型,上述中值滤波和均值滤波呈现了不同的效果,说明含有的噪声至少有高斯噪声和椒盐噪声两类。
综合考虑均值滤波和中值滤波,得到以下图像
(5)上述提到了三峰图像,而我们采用的是单阙值分割,即只实现了两峰之间的分割,第三峰被忽视了,因此可以考虑多峰阈值分割。
具体如下:
①使用OSTU求出第一个分割阈值t1,将小于等于t1的灰度值设为t1,其他保持不变,得到新图像。
②再度适用OSTU得到第二个阈值t2、将图像中像素灰度值小于等于t2的置为0,大于的置为255,得到所要处理的图像。
运用多峰阙值法,得到如下图像:
步骤一以后
由此可知,第一次得到的阈值是前两个峰之间的阈值。
步骤二以后
多阈值分割法的效果显然好于单阀值,而且运行时间为0.037678秒,时间上比起单阈值分割法多了0.02秒。
加入中值滤波得到的图像
完全可以满足寻线要求,但是时间上为0.112160秒,可见中值滤波很耗费时间。
(6)对于阳光的滤除,模型优化上,以信标车为例
模糊OSTU
大津算法的阈值准确度较高,但是遇见多峰图像时,大津阈值法的分割可能无法满足要求,需要判断峰的数目,然后多次使用大津算法,这种情况下运算量较大。
对智能车赛道来讲,究其原因,是因为蓝色底布反光呈现的灰度值与白色赛道灰度值接近,使得图像灰度值呈现模糊化的特点,因此可以运用模糊数学的方法,在大津法的基础上对其进行改进。
1、模糊大津阈值法基本原理
将赛道图像灰度值分为三类,第一类A 蓝色底布,选取较低的一部分灰度值L2,第二类B反光区域,选取中间的一部分灰度值Ll-L4,第三类C白色赛道,选取较高的一部分灰度值L3。
图像被分割为三个区域ABC,图像的每一个灰度值都有一个隶属度或两个隶属度,比如L2点有两个隶属度u(L2)和u,(L2)且u(L2)+ ug(L2)=1,每个区域就相当于一个模糊子集。
2、模糊大津阈值法基本步骤
设图像灰度直方图函数为h(k),h(k)表示当灰度值为k时像素点的个数,如果整幅图像的像素数为N,那么在大津阈值法基础上修改的各个区域的像素面积比为︰
由于区域划分受到L1,L2,L3,L4的影响,通过遍历灰度直方图的谷点,求出均值谷点作为灰度直方图分割点,分割点左方为α.区域,右方为β区域,取α区域频率最高灰度值gray1 ,β区域频率灰度最高值gray2 。
Ll = gray1
L2= gray1+20
L4= grav 2
L3滑动取值,比较不同L3下的类问最大方差,当类问最大方差最大时,取阙值为
3、模糊大津阈值法MATLAB图像处理
使用MATLAB编程,得到如下图像。
五、方法比较
在反射光较强时,对不加任何滤波的OSTU、多阙值OSTU、模糊OSTU进行比较
没有反射光的图像,不加任何滤波进行比较