停車收費管理解決方案
1.摘要:
汽車牌照自動識別系統是制約道路交通智能化的重要因素,包括車牌定位、字符分割和字符識別三個主要部分。本文首先確定車輛牌照在原始圖像中的水平位置和垂直位置,從而定位車輛牌照,然后采用局部投影進行字符分割。在字符識別部分,提出了在無特征提取情況下基于支持向量機的車牌字符識別方法。實驗結果表明,本文提出的方法具有良好的識別性能。隨著公路逐漸普及,我國的公路交通事業發展迅速,所以人工管理方式已經不能滿著實際的需要,微電子、通信和計算機技術在交通領域的應用極大地提高了交通管理效率。汽車牌照的自動識別技術已經得到了廣泛應用。
2.設計目的:
1、使學生在鞏固理論課上知識的同時,加強實踐能力的提高,理論聯系實踐。
2、激發學生的研究潛能,提高學生的協作精神,鍛煉學生的動手能力。
3.設計原理
由于車輛牌照是機動車唯一的管理標識符號,在交通管理中具有不可替代的作用,因此車輛牌照識別系統應具有很高的識別正確率,對環境光照條件、拍攝位置和車輛行駛速度等因素的影響應有較大的容閾,并且要求滿足實時性要求。
圖1 牌照識別系統原理圖
該系統是計算機圖像處理與字符識別技術在智能化交通管理系統中的應用,它主要由圖像的采集和預處理、牌照區域的定位和提取、牌照字符的分割和識別等幾個部分組成,如圖1 所示。其基本工作過程如下:
(1)當行駛的車輛經過時,觸發埋設在固定位置的傳感器,系統被喚醒處于工作狀態;一旦連接攝像頭光快門的光電傳感器被觸發,設置在車輛前方、后方和側面的相機同時拍攝下車輛圖像;
(2)由攝像機或CCD 攝像頭拍攝的含有車輛牌照的圖像通視頻卡輸入計算機進行預處理,圖像預處理包括圖像轉換、圖像增強、濾波和水平較正等;
(3)由檢索模塊進行牌照搜索與檢測,定位并分割出包含牌照字符號碼的矩形區域;
(4)對牌照字符進行二值化并分割出單個字符,經歸一化后輸入字符識別系統進行識別。
4.詳細設計步驟
4.1 提出總體設計方案。
車輛牌照識別整個系統主要是由車牌定位和字符識別兩部分組成,其中車牌定位又可以分為圖像預處理及邊緣提取模塊和牌照的定位及分割模塊;字符識別可以分為字符分割與特征提取和單個字符識別兩個模塊。
為了用于牌照的分割和牌照字符的識別,原始圖象應具有適當的亮度,較大的對比度和清晰可辯的牌照圖象。但由于該系統的攝像部分工作于開放的戶外環境,加之車輛牌照的整潔度、自然光照條件、拍攝時攝像機與牌照的矩離和角度以及車輛行駛速度等因素的影響,牌照圖象可能出現模糊、歪斜和缺損等嚴重缺陷,因此需要對原始圖象進行識別前的預處理。
牌照的定位和分割是牌照識別系統的關鍵技術之一,其主要目的是在經圖象預處理后的原始灰度圖象中確定牌照的具體位置,并將包含牌照字符的一塊子圖象從整個圖象中分割出來,供字符識別子系統識別之用,分割的準確與否直接關系到整個牌照字符識別系統的識別率。
由于拍攝時的光照條件、牌照的整潔程度的影響,和攝像機的焦距調整、鏡頭的光學畸變所產生的噪聲都會不同程度地造成牌照字符的邊界模糊、細節不清、筆劃斷開或粗細不均,加上牌照上的污斑等缺陷,致使字符提取困難,進而影響字符識別的準確性。因此,需要對字符在識別之前再進行一次針對性的處理。
車牌識別的最終目的就是對車牌上的文字進行識別。主要應用的為模板匹配方法。
因為系統運行的過程中,主要進行的都是圖像處理,在這個過程中要進行大量的數據處理,所以處理器和內存要求比較高,CPU要求主頻在600HZ及以上,內存在128MB及以上。系統可以運行于Windows98、Windows2000或者Windows XP操作系統下,程序調試時使用matlab。
4.2 預處理及邊緣
圖2 預處理及邊緣提取流程圖
4.2.1 圖象的采集與轉換
考慮到現有牌照的字符與背景的顏色搭配一般有藍底白字、黃底黑字、白底紅字、綠底白字和黑底白字等幾種,利用不同的色彩通道就可以將區域與背景明顯地區分出來,例如,對藍底白字這種最常見的牌照,采用藍色B 通道時牌照區域為一亮的矩形,而牌照字符在區域中并不呈現。因為藍色(255,0,0)與白色(255,255,255)在B 通道中并無區分,而在G、R 通道或是灰度圖象中并無此便利。同理對白底黑字的牌照可用R 通道,綠底白字的牌照可以用G 通道就可以明顯呈現出牌照區域的位置,便于后續處理。原圖、灰度圖及其直方圖見圖2與圖3。對于將彩色圖象轉換成灰度圖象時,圖象灰度值可由下面的公式計算:
4.2.2 邊緣提取
邊緣是指圖像局部亮度變化顯著的部分,是圖像風、紋理特征提取和形狀特征提取等圖像分析的重要基礎。所以在此我們要對圖像進行邊緣檢測。圖象增強處理對圖象牌照的可辯認度的改善和簡化后續的牌照字符定位和分割的難度都是很有必要的。增強圖象對比度度的方法有:灰度線性變換、圖象平滑處理等。
(1)灰度校正
由于牌照圖象在拍攝時受到種種條件的限制和干擾,圖象的灰度值往往與實際景物不完全匹配,這將直接影響到圖象的后續處理。如果造成這種影響的原因主要是由于被攝物體的遠近不同,使得圖象中央區域和邊緣區域的灰度失衡,或是由于攝像頭在掃描時各點的靈敏度有較大的差異而產生圖象灰度失真,或是由于曝光不足而使得圖像的灰度變化范圍很窄。這時就可以采用灰度校正的方法來處理,增強灰度的變化范圍、豐富灰度層次,以達到增強圖象的對比度和分辨率。我們發現車輛牌照圖象的灰度取值范圍大多局限在r=(50,200)之間,而且總體上灰度偏低,圖象較暗。根據圖象處理系統的條件,最好將灰度范圍展開到s=(0,255)之間,為此我們對灰度值作如下的變換:
(2)平滑處理
對于受噪聲干擾嚴重的圖象,由于噪聲點多在頻域中映射為高頻分量,因此可以在通過低
4 |
3 |
2 |
5 |
i,j |
1 |
6 |
7 |
8 |
|
2 |
|
3 |
i,j |
1 |
|
4 |
|
通濾波器來濾除噪聲,但實際中為了簡化算
法也可以直接在空域中用求鄰域平均值的方
法萊削弱噪聲的影響,這種方法稱為圖象平滑
處理。例如,某一象素點的鄰域S 有兩種表示方法:8鄰域和4鄰域分別對應的鄰域平均值為
其中,M 為鄰域中除中心象素點f(i,j) 之外包括的其它象素總數,對于4鄰域M=4,8 鄰域M=8。然而,鄰域平均值的平滑處理會使得圖象灰度急劇變化的地方,尤其是物體邊緣區域和字符輪廓等部分產生模糊作用。為了克服這種平均化引起的圖象模糊現象,我們給中心點象素值與其鄰域平均值的差值設置一固定的閾值,只有大于該閾值的點才能替換為鄰域平均值,而差值不大于閾值時,仍保留原來的值,從而減少由于平均化引起的圖象模糊。
圖像中車輛牌照是具有比較顯著特征的一塊圖象區域,這此特征表現在:近似水平的矩形區域;其中字符串都是按水平方向排列的;在整體圖象中的位置較為固定。正是由于牌照圖象的這些特點,再經過適當的圖象變換,它在整幅中可以明顯地呈現出其邊緣。邊緣提取是較經典的算法,此處邊緣的提取采用的是Roberts算子。
圖6 robert算子邊緣檢測
由上圖可以歸納起來以下方面:原始圖像清晰度比較高,從而簡化了預處理,結合MATLAB實驗過程,得出不是每一種圖像處理之初都適合濾波和邊界增強。本次汽車車牌的識別,為了保存更多的有用信息。
4.3 牌照的定位和分割
牌照的定位和分割是牌照識別系統的關鍵技術之一,其主要目的是在經圖象預處理后的原始灰度圖象中確定牌照的具體位置,并將包含牌照字符的一塊子圖象從整個圖象中分割出來,供字符識別子系統識別之用,分割的準確與否直接關系到整個牌照字符識別系統的識別率。由于牌照圖象在原始圖象中是很有特征的一個子區域,確切說是水平度較高的橫向近似的長方形,它在原始圖象中的相對位置比較集中,而且其灰度值與周邊區域有明顯的不同,因而在其邊緣形成了灰度突變的邊界,這樣就便于通過邊緣檢測來對圖象。
圖7 牌照定位于分割流程圖
4.3.1 牌照區域的定位
牌照圖象經過了以上的處理后,牌照區域已經十分明顯,而且其邊緣得到了勾勒和加強。此時可進一步確定牌照在整幅圖象中的準確位置。這里選用的是數學形態學的方法,其基本思想是用具有一定形態的機構元素去量度和提取圖像中的對應形狀以達到對圖像分析和識別的目的。數學形態學的應用可以簡化圖像數據,保持它們基本的形態特征,并除去不相干的結構。在本程序中用到了膨脹和閉合這兩個基本運算,最后還用了bwareaopen來去除對象中不相干的小對象。
圖8 腐蝕后圖像 圖9 平滑圖像的輪廓 圖10 從對象中移除小對象后圖像
4.3.2 牌照區域的分割
對車牌的分割可以有很多種方法,本程序是利用車牌的彩色信息的彩色分割方法。根據車牌底色等有關的先驗知識,采用彩色像素點統計的方法分割出合理的車牌區域,確定車牌底色藍色RGB對應的各自灰度范圍,然后行方向統計在此顏色范圍內的像素點數量,設定合理的 閾值,確定車牌在行方向的合理區域。然后,在分割出的行區域內,統計列方向藍色像素點的數量,最終確定完整的車牌區域。
圖11 行方向區域和最終定位出來的車牌
4.3.3車牌進一步處理
經過上述方法分割出來的車牌圖像中存在目標物體、背景還有噪聲,要想從圖像中直接提取出目標物體,最常用的方法就是設定一個閾值T,用T將圖像的數據分成兩部分:大于T的像素群和小于T的像素群,即對圖像二值化。均值濾波是典型的線性濾波算法,它是指在圖像上對目標像素給一個模板,該模板包括了其周圍的臨近像素。再用模板中的全體像素的平均值來代替原來像素值。
圖12 裁剪出來的車牌的進一步處理過程圖
4.4 字符的分割與歸一化
圖13 字符分割與歸一化流程圖
4.4.1字符分割
在汽車牌照自動識別過程中,字符分割有承前啟后的作用。它在前期牌照定位的基礎上進行字符的分割,然后再利用分割的結果進行字符識別。字符識別的算法很多,因為車牌字符間間隔較大,不會出現字符粘連情況,所以此處采用的方法為尋找連續有文字的塊,若長度大于某閾值,則認為該塊有兩個字符組成,需要分割。
圖14 分割出來的七個字符圖像
4.4.2字符歸一化
一般分割出來的字符要進行進一步的處理,以滿足下一步字符識別的需要。但是對于車牌的識別,并不需要太多的處理就已經可以達到正確識別的目的。在此只進行了歸一化處理,然后進行后期處理。
圖15 歸一化處理后的七個字符圖像
4.5 字符的識別
字符的識別目前用于車牌字符識別(OCR)中的算法主要有基于模板匹配的OCR算法以及基于人工神經網絡的OCR算法?;谀0迤ヅ涞?/span>OCR的基本過程是:首先對待識別字符進行二值化并將其尺寸大小縮放為字符數據庫中模板的大小,然后與所有的模板進行匹配,最后選最佳匹配作為結果。模板匹配的主要特點是實現簡單,當字符較規整時對字符圖像的缺損、污跡干擾適應力強且識別率相當高。綜合模板匹配的這些優點我們將其用為車牌字符識別的主要方法。
模板匹配是圖象識別方法中最具代表性的基本方法之一,它是將從待識別的圖象或圖象區域f(i,j)中提取的若干特征量與模板T(i,j)相應的特征量逐個進行比較,計算它們之間規格化的互相關量,其中互相關量最大的一個就表示期間相似程度最高,可將圖象歸于相應的類。也可以計算圖象與模板特征量之間的距離,用最小距離法判定所屬類。然而,通常情況下用于匹配的圖象各自的成像條件存在差異,產生較大的噪聲干擾,或圖象經預處理和規格化處理后,使得圖象的灰度或像素點的位置發生改變。在實際設計模板的時候,是根據各區域形狀固有的特點,突出各類似區域之間的差別,并將容易由處理過程引起的噪聲和位移等因素都考慮進去,按照一些基于圖象不變特性所設計的特征量來構建模板,就可以避免上述問題。
圖16 字符識別流程圖
此處采用相減的方法來求得字符與模板中哪一個字符最相似,然后找到相似度最大的輸出。汽車牌照的字符一般有七個,大部分車牌第一位是漢字,通常代表車輛所屬省份,緊接其后的為字母與數字。車牌字符識別與一般文字識別在于它的字符數有限,漢字共約50多個,大寫英文字母26個,數字10個。為了實驗方便,結合本次設計所選汽車牌照的特點,只建立了4個數字26個字母與10個數字的模板。其他模板設計的方法與此相同。
首先取字符模板,接著依次取待識別字符與模板進行匹配,將其與模板字符相減,得到的0越多那么就越匹配。把每一幅相減后的圖的0值個數保存,即為識別出來的結果。
圖17 識別結果
5.設計結果及分析
通過以上的方法,我對多幅圖像進行了檢測,有較好的識別效果。下面是對另一幅車牌照的檢測,結果如圖18---24 所示。



對于光照條件不理想的圖象,可先進行一次圖象增強處理,使得圖象灰度動態范圍擴展和對比度增強,再進行定位和分割,這樣可以提高分割的正確率。而采用了色彩通道的牌照區域分割算法充分利用了牌照圖象的色彩信息,簡化了算法的實現,加快了圖象的處理速度,具有較高的檢出正確率,而且整個過程用MATLAB 語言編程實現,無時間滯后感,可以滿足實時檢出的要求。但是在設計的過程中發現,使用另一幅圖像后,識別效果始終沒有那么理想。需要做一定的設置后才能識別出相應的字符。
在車牌字符分割的預處理中,用到了對分割出的字符車牌進行均值濾波,膨脹或腐蝕的處理。這在對于有雜點的車牌是很有用的,因為這樣可以把字符與字符之間的雜色點去除,只有白色的字符和黑色的背景存在,這樣有利于的字符分割進行。
字符識別過程使用的是模板匹配的方法,利用兩幅圖片相減的方法,找到相減后值最小的,即為相似程度最大的。模板的制作很重要,必須要用精確的模板,否則就不能正確的識別。
對于識別錯誤情況的分析可知,主要原因:一是牌照自身的污漬等影響了圖象的質量;二是牌照字符的分割失敗導致的識別錯誤;再就是部分字符的形狀相似性,比如,B 和8;A 和4 等字符識別結果可能發生混淆的情況。
總之,盡管目前牌照字符的識別率還不理想,但是只要在分割出的字符的大小、位置的歸一化,以及嘗試提取分類識別能力更好的特征值和設計分類器等環節上再完善,進一步提高識別率是完全可行的。
6.程序源代碼:(基于matlab的程序代碼)
function [d]=main(jpg)
I=imread(’car.jpg’);
figure(1),imshow(I);title(’原圖’);
I1=rgb2gray(I);
figure(2),subplot(1,2,1),imshow(I1);title(’灰度圖’);
figure(2),subplot(1,2,2),imhist(I1);title(’灰度圖直方圖’);
I2=edge(I1,’robert’,0.08,’both’);
figure(3),imshow(I2);title(’robert算子邊緣檢測’)
se=[1;1;1];
I3=imerode(I2,se);
figure(4),imshow(I3);title(’腐蝕后圖像’);
se=strel(’rectangle’,[40,40]);
I4=imclose(I3,se);
figure(5),imshow(I4);title(’平滑圖像的輪廓’);
I5=bwareaopen(I4,2000);
figure(6),imshow(I5);title(’從對象中移除小對象’);
[y,x,z]=size(I5);
myI=double(I5);
%begin橫向掃描
tic
Blue_y=zeros(y,1);
for i=1:y
for j=1:x
if(myI(i,j,1)==1)
%如果myI(i,j,1)即myI圖像中坐標為(i,j)的點為藍色
%則Blue_y的相應行的元素white_y(i,1)值加1
Blue_y(i,1)= Blue_y(i,1)+1;%藍色像素點統計
end
end
end
[temp MaxY]=max(Blue_y);%temp為向量white_y的元素中的最大值,MaxY為該值的索引( 在向量中的位置)
PY1=MaxY;
while ((Blue_y(PY1,1)>=120)&&(PY1>1))
PY1=PY1-1;
end
PY2=MaxY;
while ((Blue_y(PY2,1)>=40)&&(PY2
PY2=PY2+1;
end
IY=I(PY1:PY2,:,:);
%IY為原始圖像I中截取的縱坐標在PY1:PY2之間的部分
%end橫向掃描
%begin縱向掃描
Blue_x=zeros(1,x);%進一步確定x方向的車牌區域
for j=1:x
for i=PY1:PY2
if(myI(i,j,1)==1)
Blue_x(1,j)= Blue_x(1,j)+1;
end
end
end
PX1=1;
while ((Blue_x(1,PX1)<3)&&(PX1
PX1=PX1+1;
end
PX2=x;
while ((Blue_x(1,PX2)<3)&&(PX2>PX1))
PX2=PX2-1;
end
%end縱向掃描
PX1=PX1-2;%對車牌區域的校正
PX2=PX2+2;
dw=I(PY1:PY2,:,:);
t=toc;
figure(7),subplot(1,2,1),imshow(IY),title(’行方向合理區域’);
figure(7),subplot(1,2,2),imshow(dw),title(’定位剪切后的彩色車牌圖像’)
imwrite(dw,’dw.jpg’);
[filename,filepath]=uigetfile(’dw.jpg’,’輸入一個定位裁剪后的車牌圖像’);
jpg=strcat(filepath,filename);
a=imread(’dw.jpg’);
b=rgb2gray(a);
imwrite(b,’1.車牌灰度圖像.jpg’);
figure(8);subplot(3,2,1),imshow(b),title(’1.車牌灰度圖像’)
g_max=double(max(max(b)));
g_min=double(min(min(b)));
T=round(g_max-(g_max-g_min)/3); % T 為二值化的閾值
[m,n]=size(b);
d=(double(b)>=T); % d:二值圖像
imwrite(d,’2.車牌二值圖像.jpg’);
figure(8);subplot(3,2,2),imshow(d),title(’2.車牌二值圖像’)
figure(8),subplot(3,2,3),imshow(d),title(’3.均值濾波前’)
% 濾波
h=fspecial(’average’,3);
d=im2bw(round(filter2(h,d)));
imwrite(d,’4.均值濾波后.jpg’);
figure(8),subplot(3,2,4),imshow(d),title(’4.均值濾波后’)
% 某些圖像進行操作
% 膨脹或腐蝕
% se=strel(’square’,3); % 使用一個3X3的正方形結果元素對象對創建的圖像膨脹
% ’line’/’diamond’/’ball’...
se=eye(2); % eye(n) returns the n-by-n identity matrix 單位矩陣
[m,n]=size(d);
if bwarea(d)/m/n>=0.365
d=imerode(d,se);
elseif bwarea(d)/m/n<=0.235
d=imdilate(d,se);
end
imwrite(d,’5.膨脹或腐蝕處理后.jpg’);
figure(8),subplot(3,2,5),imshow(d),title(’5.膨脹或腐蝕處理后’)
% 尋找連續有文字的塊,若長度大于某閾值,則認為該塊有兩個字符組成,需要分割
d=qiege(d);
[m,n]=size(d);
figure,subplot(2,1,1),imshow(d),title(n)
k1=1;k2=1;s=sum(d);j=1;
while j~=n
while s(j)==0
j=j+1;
end
k1=j;
while s(j)~=0 && j<=n-1
j=j+1;
end
k2=j-1;
if k2-k1>=round(n/6.5)
[val,num]=min(sum(d(:,[k1+5:k2-5])));
d(:,k1+num+5)=0; % 分割
end
end
% 再切割
d=qiege(d);
% 切割出 7 個字符
y1=10;y2=0.25;flag=0;word1=[];
while flag==0
[m,n]=size(d);
left=1;wide=0;
while sum(d(:,wide+1))~=0
wide=wide+1;
end
if wide
d(:,[1:wide])=0;
d=qiege(d);
else
temp=qiege(imcrop(d,[1 1 wide m]));
[m,n]=size(temp);
all=sum(sum(temp));
two_thirds=sum(sum(temp([round(m/3):2*round(m/3)],:)));
if two_thirds/all>y2
flag=1;word1=temp; % WORD 1
end
d(:,[1:wide])=0;d=qiege(d);
end
end
% 分割出第二個字符
[word2,d]=getword(d);
% 分割出第三個字符
[word3,d]=getword(d);
% 分割出第四個字符
[word4,d]=getword(d);
% 分割出第五個字符
[word5,d]=getword(d);
% 分割出第六個字符
[word6,d]=getword(d);
% 分割出第七個字符
[word7,d]=getword(d);
figure(9),imshow(word1),title(’1’);
figure(10),imshow(word2),title(’2’);
figure(11),imshow(word3),title(’3’);
figure(12),imshow(word4),title(’4’);
figure(13),imshow(word5),title(’5’);
figure(14),imshow(word6),title(’6’);
figure(15),imshow(word7),title(’7’);
[m,n]=size(word1);
% 商用系統程序中歸一化大小為 40*20,此處演示
word1=imresize(word1,[40 20]);
word2=imresize(word2,[40 20]);
word3=imresize(word3,[40 20]);
word4=imresize(word4,[40 20]);
word5=imresize(word5,[40 20]);
word6=imresize(word6,[40 20]);
word7=imresize(word7,[40 20]);
figure(16),
subplot(3,7,8),imshow(word1),title(’1’);
subplot(3,7,9),imshow(word2),title(’2’);
subplot(3,7,10),imshow(word3),title(’3’);
subplot(3,7,11),imshow(word4),title(’4’);
subplot(3,7,12),imshow(word5),title(’5’);
subplot(3,7,13),imshow(word6),title(’6’);
subplot(3,7,14),imshow(word7),title(’7’);
imwrite(word1,’1.jpg’);
imwrite(word2,’2.jpg’);
imwrite(word3,’3.jpg’);
imwrite(word4,’4.jpg’);
imwrite(word5,’5.jpg’);
imwrite(word6,’6.jpg’);
imwrite(word7,’7.jpg’);
liccode=char([’0’:’9’ ’A’:’Z’ ’蘇豫陜魯’]); %建立自動識別字符代碼表
SubBw2=zeros(40,20);
l=1;
for I=1:7
ii=int2str(I);
t=imread([ii,’.jpg’]);
SegBw2=imresize(t,[40 20],’nearest’);
if l==1 %第一位漢字識別
kmin=37;
kmax=40;
elseif l==2 %第二位 A~Z 字母識別
kmin=11;
kmax=36;
else l>=3 %第三位以后是字母或數字識別
kmin=1;
kmax=36;
end
for k2=kmin:kmax
fname=strcat(’字符模板\’,liccode(k2),’.jpg’);
SamBw2 = imread(fname);
for i=1:40
for j=1:20
SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j);
end
end
% 以上相當于兩幅圖相減得到第三幅圖
Dmax=0;
for k1=1:40
for l1=1:20
if ( SubBw2(k1,l1) > 0 | SubBw2(k1,l1) <0 )
Dmax=Dmax+1;
end
end
end
Error(k2)=Dmax;
end
Error1=Error(kmin:kmax);
MinError=min(Error1);
findc=find(Error1==MinError);
l=l+1;
end
figure(17),subplot(3,1,2),imshow(dw),title (’車牌號碼: 陜 A B A 2 2 3’);
%子程序:(getword子程序)
function [word,result]=getword(d)
word=[];flag=0;y1=8;y2=0.5;
while flag==0
[m,n]=size(d);
wide=0;
while sum(d(:,wide+1))~=0 && wide<=n-2
wide=wide+1;
end
temp=qiege(imcrop(d,[1 1 wide m]));
[m1,n1]=size(temp);
if wide
d(:,[1:wide])=0;
if sum(sum(d))~=0
d=qiege(d); % 切割出最小范圍
else word=[];flag=1;
end
else
word=qiege(imcrop(d,[1 1 wide m]));
d(:,[1:wide])=0;
if sum(sum(d))~=0;
d=qiege(d);flag=1;
else d=[];
end
end
end
result=d;
% (qiege子程序)
function e=qiege(d)
[m,n]=size(d);
top=1;bottom=m;left=1;right=n; % init
while sum(d(top,:))==0 && top<=m
top=top+1;
end
while sum(d(bottom,:))==0 && bottom>1
bottom=bottom-1;
end
while sum(d(:,left))==0 && left
left=left+1;
end
while sum(d(:,right))==0 && right>=1
right=right-1;
end
dd=right-left;
hh=bottom-top;
e=imcrop(d,[left top dd hh]);
7.源程序代碼:(基于c++的程序代碼)
8.總結
本文主要解決了以下幾個問題:1.在背景的圖象中如何定位分割牌照區域;2.對分割下來的牌照字符如何提取具有分類能力的特征;3.如何設計識別器。在車輛牌照字符識別系統的研究領域,近幾年出現了許多切實可行的識別技術和方法,從這些新技術和方法中可以看到兩個明顯的趨勢:一是單一的預處理和識別技術都無法達到理想的結果,多種方法的有機結合才能使系統有效識別能力提高。在本系統的設計時,也汲取了以上一些算法的思想,結合實際,反復比較,綜合分析;二是在有效性和實用的原則下,結合神經網絡和人工智能的新技術的應用是研究的一個方向。
根據車牌特點,一般采用的車牌定位算法有:1.邊緣檢測定位算法;2.利用哈夫變換進行車牌定位;3.色彩分割提取車牌等。這里我采用的是邊緣檢測的方法實現定位的。
字符分割的方法也有多種:1. 基于聚類分析的字符分割;2. 投影分割的方法;3.基于模板匹配的字符分割等。最常用的是投影分割,主要是針對在車牌定位,圖像預處理后比較規則的車牌圖像。優點是程序邏輯設計簡單,循環執行功能單一,便于設計和操作,程序執行時間短。
字符識別的基本方法通常又三類:1.結構特征分析方法;2.模板匹配法;3.神經網絡法。此處采用的是模板匹配的方法,即是將要識別的字符與事先構造好的模板進行比對,根據與模板的相似度的大小來確定最終的識別結果。
但是系統本身還存在許多不足,距離具體實用的要求仍有很大差距,但我卻在這次課程設計中學到了很多知識。
9.體會
對現實事物的設計不僅是對前面所學知識的一種檢驗,而且也是對自己能力的一種提高。通過這次設計使我明白了自己原來知識還比較欠缺。這個設計讓我學到了很多東西,涉及到方方面面的知識,在這整個過程中我們查閱了大量的資料,得到了老師和同學的幫助,我在此對他們表示謝意。在這期間遇到了很多困難,我知道做什么都不容易,只能塌下心來,一步一個腳印的去完成才行。這學期我們學習了數字圖像處理這門課程,在這個課程設計中應用到了很多其中的知識。理論只有應用到實際中才能學著更有意義。學習是一個長期積累的過程,在后的工作、生活中都應該不斷的學習,努力提高自己知識和綜合素質。此外,還得出一個結論:知識必須通過應用才能實現其價值!有些東西以為學會了,但真正到用的時候才發現是兩回事,所以我認為只有到真正會用的時候才是真的學會了。在整個設計中我懂得了許多東西,也培養了我獨立工作的能力,以及團隊協作的能力,樹立了信心,相信會對今后的學習工作生活有非常重要的影響。同樣此次設計也大大提高了動手的能力,使我充分體會到了在創造過程中探索的艱難和成功時的喜悅。雖然這個設計做的并非對所以車牌都合適,但是在設計過 程中所學到的學習方法是我最大收獲和財富,相信定會使我受益終身。
10.參考文獻
[1] 岡薩雷斯.數字圖像處理(第二版).電子工業出版社,2007.8
[2] 胡小鋒、趙輝.VC++/MATLAB圖像處理與識別使用案例精選.人民郵電出版社,2004.9
[3] 郁梅等,基于視覺的車輛牌照檢測,計算機應用研究,1999(5),P65~67
- 上一條:
- 下一條:停車場智能管理系統