1. 程式人生 > >車牌定位matlab程式:通過hsv彩色分割方式定位車牌

車牌定位matlab程式:通過hsv彩色分割方式定位車牌

最近看了《基於數字影象處理的車牌識別研究》這篇論文,對車牌識別知識講的很仔細,推薦。

1.(摘自《基於數字影象處理的車牌識別研究》)

通過對大量車牌影象的分析,可以發現對於具有某種目標色的畫素,可以直接通過對H、s、v三分量設定一個範圍來把它們過濾出來,無需進行較複雜的色彩距離計算, 這樣可以在色彩分割時節省大量的時間。這種過濾對藍色和黃色車牌特別有效,但對於黑色和白色的過濾效果不是很理想。這是因為對於純色的黑色和白色,它們的色調和飽和度沒有意義,所以和其它顏色相比缺少了兩個過慮指標。

根據這篇論文所講的步驟想要寫程式,開始居然是無從下手。通過參考各種車牌識別matlab程式,才寫出來第一個程式。此程式是針對藍色車牌的識別,識別效果還不錯,通過HSV顏色空間分割確實可行。

通過先驗知識,汽車車牌的HSV值可由下表確定:

2.藍色車牌HSV彩色分割定位Matlab程式

clear all;clc;
[Im,Path]=uigetfile('*jpg','選擇圖片');
Image=imread([Path,Im]);
Image=im2double(Image);
s=size(Image,2)
I=rgb2hsv(Image);
[y,x,z]=size(I);
Blue_y = zeros(y, 1);
p=[0.56 0.71 0.4 1 0.3 1 0];
for i = 1 : y
    for j = 1 : x
        hij = I(i, j, 1);
        sij = I(i, j, 2);
        vij = I(i, j, 3);
        if (hij>=p(1) && hij<=p(2)) &&( sij >=p(3)&& sij<=p(4))&&...
                (vij>=p(5)&&vij<=p(6))
            Blue_y(i, 1) = Blue_y(i, 1) + 1; 
        end
    end
end
[~, MaxY] = max(Blue_y);
Th = p(7);
PY1 = MaxY;
while ((Blue_y(PY1,1)>Th) && (PY1>0))
    PY1 = PY1 - 1;
end
PY2 = MaxY;
while ((Blue_y(PY2,1)>Th) && (PY2<y))
    PY2 = PY2 + 1;
end
PY1 = PY1 - 2;
PY2 = PY2 + 2;
if PY1 < 1
    PY1 = 1;
end
if PY2 > y
    PY2 = y;
end
It=Image(PY1:PY2,:,:);
subplot(231),imshow(It);
IY = I(PY1:PY2, :, :);
subplot(232),imshow(IY);
I2=im2bw(IY,0.5);
subplot(233),imshow(I2);

[y1,x1,z1]=size(IY);
Blue_x=zeros(1,x1);
for j = 1 : x1
    for i = 1 : y1
        hij = IY(i, j, 1);
        sij = IY(i, j, 2);
        vij = IY(i, j, 3);
        if (hij>=p(1) && hij<=p(2)) &&( sij >=p(3)&& sij<=p(4))&&...
                (vij>=p(5)&&vij<=p(6))
            Blue_x(1, j) = Blue_x(1, j) + 1; 
%              bw1(i, j) = 1;
        end
    end
end
PY1,PY2

[~, MaxX] = max(Blue_x);
Th = p(7);
PX1 = MaxX;

while ((Blue_x(1,PX1)>Th) && (PX1>0))
    PX1 = PX1 - 1;
end
PX2 = MaxX;
while ((Blue_x(1,PX2)>Th) && (PX2<x1))
    PX2 = PX2 + 1;
end
Ita=Image(PY1:PY2,PX1:PX2,:);
subplot(234),imshow(Ita);
IX = I(PY1:PY2, PX1:PX2, :);
subplot(235),imshow(IX);
I3=im2bw(IX,0.5);
subplot(236),imshow(I3);

3.效果展示

(1)


(2)

(3)

不過改進空間還是很大,對於藍色車輛、深藍色車輛以及圖片中藍色較多的圖片,識別效果還是不行。