車牌定位matlab程式:通過hsv彩色分割方式定位車牌
阿新 • • 發佈:2019-01-29
最近看了《基於數字影象處理的車牌識別研究》這篇論文,對車牌識別知識講的很仔細,推薦。
1.(摘自《基於數字影象處理的車牌識別研究》)
通過對大量車牌影象的分析,可以發現對於具有某種目標色的畫素,可以直接通過對H、s、v三分量設定一個範圍來把它們過濾出來,無需進行較複雜的色彩距離計算, 這樣可以在色彩分割時節省大量的時間。這種過濾對藍色和黃色車牌特別有效,但對於黑色和白色的過濾效果不是很理想。這是因為對於純色的黑色和白色,它們的色調和飽和度沒有意義,所以和其它顏色相比缺少了兩個過慮指標。
根據這篇論文所講的步驟想要寫程式,開始居然是無從下手。通過參考各種車牌識別matlab程式,才寫出來第一個程式。此程式是針對藍色車牌的識別,識別效果還不錯,通過HSV顏色空間分割確實可行。
通過先驗知識,汽車車牌的HSV值可由下表確定:
2.藍色車牌HSV彩色分割定位Matlab程式:
3.效果展示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);
(1)
(2)
(3)
不過改進空間還是很大,對於藍色車輛、深藍色車輛以及圖片中藍色較多的圖片,識別效果還是不行。