课题介绍
红绿灯识别技术是智能交通系统一个重要方面,而且对无人驾驶以及智能车辆的辅助驾驶系统发展有积极推动作用。常用的红绿灯识别方法主要有两类:基于颜色方法和基于模板匹配的方法。基于颜色的方法对交通标志所处的外部环境要求高,且容易受噪声影响;基于模板匹配的方法对恶劣环境下的识别有较好的效果,但是其鲁棒性差。机器学习则是利用从已知的数据样本学习,根据某些特征通过某些特定的方法,来对未知的样本数据进行识别,做出正确判断。基于塔式梯度直方图(Pyramid Histogram of Oriented Gradients, PHOG)特征及支持向量机(Support Vector Machine,SVM)的红绿灯自动识别方法就是一种机器学习方法,不同于基于颜色和模板匹配的方法,此方法只需对图像进行特征提取,然后利用支持向量机对提取的特征进行学习形成分类模型,再利用该模型对红绿灯图像进行识别判断。
- GUI界面设计
- 核心代码
%主要功能描述:实现对红绿灯检测功能,将图像从RGB转换到HVS空间, %避免了普通%RGB空间易于受到亮度影响判定结果的弊端。
clear; close all;
Image_f=imread('pic.jpg');
figure(1),imshow(Image_f);title('检测图像'); %RGB TO HSV
hsv_f = rgb2hsv(Image_f); H = hsv_f(:,:,1)*255; S = hsv_f(:,:,2)*255; V = hsv_f(:,:,3)*255; figure,imhist(uint8(H)); [y,x,z]=size(Image_f); Red_y=zeros(y,1); Green_y=zeros(y,1); Yellow_y=zeros(y,1); for i=1:y for j=1:x
if(((H(i,j)>=0)&&(H(i,j)<15))||((H(i,j) >= 245) && (H(i,j) <=255))
&&(V(i,j)>50)&&(S(i,j)>30)) %(V(i,j)<255) &&(V(i,j)>50)&&(S(i,j)>30) Red_y(i,1)= Red_y(i,1)+1;%红像素点统计 elseif(((H(i,j)>=66)&&(H(i,j)<130))
&&(V(i,j)>50)&&(S(i,j)>30)) %(V(i,j)<255) &&(V(i,j)>50)&&(S(i,j)>30) Green_y(i,1)= Green_y(i,1)+1;%绿像素点统计 elseif(((H(i,j)>=20)&&(H(i,j,1)<65))
&&(V(i,j)>50)&&(S(i,j)>30)) %(V(i,j)<255) &&(V(i,j)>50)&&(S(i,j)>30) Yellow_y(i,1)= Yellow_y(i,1)+1;%黄像素点统计 end end end
Max_Red_y=max(Red_y) Max_Green_y=max(Green_y) Max_Yellow_y=max(Yellow_y)
if((Max_Red_y> Max_Green_y)&&(Max_Red_y> Max_Yellow_y)) Result =1;
elseif((Max_Green_y> Max_Red_y)&&(Max_Green_y> Max_Yellow_y)) Result =2;
elseif((Max_Yellow_y> Max_Green_y)&&(Max_Yellow_y> Max_Red_y))
Result =3; else
Result =4; end
if(Result==1)
disp('检测结果为红灯'); elseif(Result==2);
disp('检测结果为绿灯'); elseif(Result==3)
disp('检测结果为黄灯'); else
disp('检测失败'); end