1.设计总目标
能够识别出不同场景环境下图片中的交通限速标志,将限速标志及其里面的数字分别标志出来,具有较强的鲁棒性。
代码链接:交通标志牌检测 限速标志 matlab
2.实现步骤
2. 1 CLAHE增强图像局部对比度
观察图片可以看出,有些图片的局部亮度过大(test18),或者局部较暗(test16),在进行ostu阈值分割时与背景融合在一起,所以进行对比度的增强。
直方图均衡经典算法对整幅图像的像素使用相同的变换,对于像素值分布比较均衡的图像来说,经典算法的效果不错。但是如果图像中包括明显亮的或者暗的区域,在这些部分的对比度并不能得到增强。AHE算法通过对局部区域的直方图均衡解决该问题。由于AHE算法存在放大噪声等问题,CLAHE在局部直方图均衡化(又称自适应直方图均衡化AHE)的基础上,对每个子块直方图做了限制,很好的控制了AHE带来的噪声。
使用CLAHE增强图像局部对比度,再进行ostu阈值分割。
figure,
subplot(1,2,1),imshow(Image);title('原图');
if length(size(Image))>2 %判断图像的通道数是否大于2
rimg = Image(:,:,1); %r分量
gimg = Image(:,:,2); %g分量
bimg = Image(:,:,3); %b分量
resultr = adapthisteq(rimg,'NumTiles', [35 35], 'ClipLimit', 0.015,'Range','original'); %使用CLAHE增强图像的局部对比度
resultg = adapthisteq(gimg,'NumTiles', [35 35], 'ClipLimit', 0.015,'Range','original'); %使用CLAHE增强图像的局部对比度
resultb = adapthisteq(bimg,'NumTiles', [35 35], 'ClipLimit', 0.015,'Range','original'); %使用CLAHE增强图像的局部对比度
result = cat(3, resultr, resultg, resultb); %处理后的CLAHE图像
subplot(1,2,2),imshow(result);title('CLAHE处理后');
end
grayImg=rgb2gray(Image);%原图转换为灰度图片
grayResult=rgb2gray(result);%将CLAHE处理后的rgb图片转换为灰度图片
grayImg= imadjust(grayImg,[0,1],[1,0]);%反色
grayResult= imadjust(grayResult,[0,1],[1,0]);%反色
%对原始图像进行ostu阈值分割
levelOrignal=graythresh(grayImg);%阈值
bwOrignal=im2bw(grayImg,levelOrignal);%二值化
[imgW,imgH] = size(bwOrignal);
%figure,imshow(bwOrignal),title('orginalbw')
%对CLAHE处理后的图像进行ostu阈值分割
levelResult=graythresh(grayResult);%阈值
bwResult=im2bw(grayResult,levelResult);%二值化
%figure,imshow(bwResult),title('enhancebw')
bwFinal=bwOrignal|bwResult;%将原始的二值图像与CLAHE二值图像相或
%figure,imshow(bwFinal),title('final')
2.2 基于HSV颜色空间的图片分割
在RGB图像中,由于每一个像素点由R,G,B三个分量组成,每一个分量的变化都能直接导致彩色图像中该像素点颜色的变化,并且两种颜色的视觉差异不能采用该颜色空间中两个颜色点之间的距离来表示。而在不同的光照条件下,所表示的色彩不大相同。受光照变化影响很大。而在HSV模型,H表示色调,S表示饱和度,V表示数值(对应图像亮度),V分量与图像的彩色信息无关,可以将亮度信息和色度信息从图像中分离开,并且能够独立的表示,受光照影响较小,因此,本次作业中选取的基于HSV彩色模型对图片进行分割。
通过查阅资料以及实验对比得出相应的hsv取值范围
((h1<=0.056&h1>=0)|(h1>=0.740&h1<=1.0))&s1>=0.169&s1<=1.0&v1>=0.180&v1<=1.0;
%%%%%%%%%%% HSV颜色分割图像 %%%%%%%%%%%%%%%%%%%%%%%%%
hsvImg=rgb2hsv(Image);%转换到HSV空间
h1=hsvImg(:,:,1);%H分量
s1=hsvImg(:,:,2);%S分量
v1=hsvImg(:,:,3);%V分量
%提取红色分量
hsvReg1=((h1<=0.056&h1>=0)|(h1>=0.740&h1<=1.0))&s1>=0.169&s1<=1.0&v1>=0.180&v1<=1.0;
figure,imshow(hsvReg1);title('原图hsv检测图像');
2.3. 基于圆度的图片分割
利用HSV颜色空间分割的图片含有较多背景红色的冗余部分,利用交通标志牌的圆形形状特征再次进行分割。本次作业中采用计算闭合连通区域的圆形度进行形状的判别。对于圆形度小于0.77的图像区域进行排除。
2.4. 区分限速标志
通过上面两个步骤基本上分割出来感兴趣的圆形区域。通过观察限速标志和类似的标志图片,可以看出,禁止标志通常有一条斜线贯穿整个圆形,对其二值化处理后,整体作为一个连通区域,限速标志牌至少含有两个连通区域。结合限速标志牌中数字的长宽比以及占据整个圆形区域的面积比可以区别其它交通标志。
将处理后的感兴趣图像区域中的连通域的面积进行由大到小的排序,由大的连通域开始进行循环,根据大的连通域的范围进行判别其中是否包含其它的连通域,如果不包含则表示不是限速标志区域,若包含,计算该连通区域的长宽比以及相应的占据大的连通域的面积比例,如果符合则标志出数字区域,并且标注出包含其大的圆形区域,并标记该数字连通区域已经使用过。
由于拍摄图片的视角问题,所以设置数字连通区域的宽高比范围为0.2~1.5。占据圆形区域的比例为大于0.03。
3.实现结果
成功识别结果展示
未成功识别结果展示