1. 程式人生 > 其它 >【紅綠燈識別】基於matlab紅綠燈識別【含Matlab原始碼 1068期】

【紅綠燈識別】基於matlab紅綠燈識別【含Matlab原始碼 1068期】

一、簡介

紅綠燈分為導向燈和圓形燈。一般圓形燈在路口只有一盞燈,紅燈亮時禁止直行和左轉,可以右轉彎。導向燈市帶有箭頭的,可以有兩個或三個,分別指示不同方向的行車和停車。按指示的燈即可,沒有右轉向導向燈的情況下可以視為可以右轉。

RGB顏色空間以R(Red:紅)、G(Green:綠色)、 B(Blue:藍)三種基本色為基礎,進行不同程度的疊加,產生豐富而廣泛的顏色,所以俗稱三基色模式。在大自然中有無窮多種不同的顏色,而人眼只能分辨有限種不同的顏色,RGB棋式可表示一千六百多萬種不同的顏色,在人跟看起來它非常接近大自然的顏色,故又稱為自然色彩模式。紅綠藍代表可見光譜中的三種基木顏色或稱為三原色,每一種顏色按其亮度的不同分為256個等級。當色光三原色重疊時,由於不同的混色比例能產生各種中間色。

RGB顏色空間最大的優點就是直觀,容易理解。缺點是R、G、B這三個分量是高度相關的,即如果一個顏色的某一個分量發生了一定程度的改變,那麼這個相色很可能要發生改變;人眼對於常見的 紅綠藍三色的敏感程度是不一樣的,因此RGB顏色空間的均勻性非常差,且兩種顏色之間的知覺差異色差不能表示為改顏色空間中兩點間的距離,但是利用線性或非線性變換,則可以從RGB顏色空間推匯出其他的顏色特徵空間。

二、原始碼

clc
clear all
close all
a=imread('mode1.jpg');
figure(1),imshow(a);title('檢測影象');%讀入影象並顯示
hsv=rgb2hsv(a);
h=hsv(:,:,1);
s=hsv(:,:,2);
v=hsv(:,:,3);
figure(2),imshow(hsv);title('HSV影象');%轉換為hsv影象並顯示
bw1=h>0.9|h<0.05;
bw1=bw1.*(s>0.5);%檢測紅色區域
se=strel('disk',3);%建立一個指定半徑R的平面圓盤形的結構元素
bw2=imopen(bw1,se);%用結構元素SE實現二值影象的bw1的形態開運算。SE可以是單個結構元素物件或者結構元素物件陣列。
bw2=bwfill(bw2,'holes');%空洞填充,填充二進位制影象的背景色
% % % figure
% % % imshow(bw2)
[L,num]=bwlabel(bw2,8);%標記各區域,這裡num返回的就是BW2中連通區域的個數。
 STATS = regionprops(L,'area','BoundingBox');%%對二值化資料進行連通域資料分析獲取標記後的影象面積。外接長方形、和麵積
bw_area=zeros(1,num);
bw_circle=zeros(1,num);
% % % bw_center=zeros(num,2);
figure(1),imshow(a);title('檢測影象');%讀入影象並顯示
hold on
for i=1:num
    [r,c]=find(L==i);%返回的是L矩陣中數值為i的座標
    sizer=size(r,1);
    bw_area(i)=length(r);
    if bw_area(i)<200|bw_area(i)>10000
        continue;
    end    %去掉過大過小區域
    bw_center=[];
    bw_center(1:sizer,1)=round(mean(r));%行座標,求區域中心;mean(A)求每一列的均值;Round返回按指定位數進行四捨五入的數值
    bw_center(1:sizer,2)=round(mean(c));%列座標
    rc=[r,c];
    

三、執行結果


四、備註

版本:2014a
完整程式碼或代寫加1564658423