1 简介 为实现限速交通标志的快速准确识别,采用模板匹配对限速交通标志进行识别.首先图像进行倾斜校正,并在HSV颜色空间进行分割,提取感兴趣区域(ROI),然后利用垂直投影分割字符,最
1 简介
为实现限速交通标志的快速准确识别,采用模板匹配对限速交通标志进行识别.首先图像进行倾斜校正,并在HSV颜色空间进行分割,提取感兴趣区域(ROI),然后利用垂直投影分割字符,最后通过和模板字符进行匹配,比较两者相似度来识别字符.实验结果表明,该方法能够有效分割出限速交通标志的字符,并能准确的识别出标志.
2 部分代码
function [number,rect,hsvReg1,B,L,BW]=Mat5_2rec(Image)grayImg=rgb2gray(Image);%原图转换为灰度图片
%%%%%%%%%%% 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检测图像');
%%=======================去噪==================================
hsvReg1=bwareaopen(hsvReg1,100);%1000为去除像素点阙值
%figure;imshow(hsvReg1);
%%=======================填充==================================
se=strel('disk',2);
hsvReg1=imclose(hsvReg1,se);
hsvReg1=imfill(hsvReg1,'holes');
%figure;imshow(hsvReg1);
%%======================区域选定==============================
[B,L]=bwboundaries(hsvReg1,'noholes');
% figure;imshow(label2rgb(L,@jet,[.5 .5 .5]));%5
% hold on;
% for k=1:length(B)
% boundary=B{k};
% plot(boundary(:,2),boundary(:,1),'w','LineWidth',2);
% end
stats=regionprops(L,'Area','Centroid');
threshold=0.80;
for k=1:length(B)
boundary=B{k};
delta_sq=diff(boundary).^2;
perimeter=sum(sqrt(sum(delta_sq,2)));
area=stats(k).Area;
metric=4*pi*area/perimeter^2;
metric_string=sprintf('%2.2f',metric);
if metric>threshold
c=stats(k).Centroid;
% plot(c(1),c(2),'ko');
r=perimeter/(2*pi);
rect=[c(1)-r*sqrt(2)/2.5 c(2)-r*sqrt(2)/2.5 r*sqrt(2)/1.25 r*sqrt(2)/1.25];
end
% rectangle('Position',rect,'LineWidth',4,'EdgeColor','g');
% text(boundary(1,2)-35,boundary(1,1)+13,metric_string,'Color','y','FontSize',14,'FontWeight','bold');
end
% title(['位置框定']);
%%==============================图像剪裁=========================================
result=imcrop(grayImg,rect);
% figure;imshow(result);
%%=============================二值化加强=======================================
n = graythresh(result);
BW = imbinarize(result,n);
% figure;imshow(BW);
%%==============================数字读取=========================================
ocrResults=ocr(BW,'CharacterSet','0 1 2 3 4 5 6 7 8 9 60');
number = cell2mat(ocrResults.Words);
end
3 仿真结果
4 参考文献
[1]郝芳芳, 王震洲. 模板匹配下的限速交通标志识别算法研究[J]. 科技风, 2018(21):2.