智能圖像處理與分析識別課件:工程應(yīng)用-車牌識別_第1頁
智能圖像處理與分析識別課件:工程應(yīng)用-車牌識別_第2頁
智能圖像處理與分析識別課件:工程應(yīng)用-車牌識別_第3頁
智能圖像處理與分析識別課件:工程應(yīng)用-車牌識別_第4頁
智能圖像處理與分析識別課件:工程應(yīng)用-車牌識別_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

智能圖像處理與分析識別

《智能圖像處理與分析識別》工程應(yīng)用-車牌識別15.1車牌圖像采集15.2車牌圖像預(yù)處理及牌照定位15.3汽車牌照區(qū)域的分割15.4字符圖像分割15.5字符細(xì)化15.6BP神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和字符的識別15.1工程應(yīng)用:車牌識別隨著科學(xué)技術(shù)的發(fā)展,智慧城市逐漸完善,各種交通場景下的智能車牌檢測識別系統(tǒng)陸續(xù)普及,微電子、通信和計(jì)算機(jī)技術(shù)在交通領(lǐng)域的應(yīng)用極大的提高了對交通的管理效率,節(jié)省了很多人力和物力的成本。車牌識別系統(tǒng)(LicensePlateRecognitionSystem,LPRS)是對汽車牌照這一特定目標(biāo)對象的專用計(jì)算機(jī)系統(tǒng),是機(jī)器視覺技術(shù)在交通場景識別中的一種應(yīng)用。車牌識別系統(tǒng)通常由硬件和軟件組成。其硬件部分一般由車體感應(yīng)設(shè)備、攝像機(jī)、輔助光源、圖像采集卡和計(jì)算機(jī)組成,主要用來采集車牌圖像;軟件部分包含各種圖像處理及目標(biāo)識別算法,是該系統(tǒng)的核心內(nèi)容,主要是用來實(shí)現(xiàn)車牌字符的識別功能。車牌識別系統(tǒng)通常涉及到模式識別、人工智能、圖像處理、計(jì)算機(jī)視覺和信號處理等學(xué)科。車牌識別的關(guān)鍵技術(shù)包括車牌定位、字符切割和字符識別等。車牌定位是從圖像中確定車牌位置并提取車牌區(qū)域圖像,目前常用的方法有直線檢測的方法、灰度邊緣檢測方法、顏色分割方法、神經(jīng)網(wǎng)絡(luò)法和矢量量化的牌照定位方法等。字符切割是對車牌區(qū)域內(nèi)字符圖像進(jìn)行切割處理,從而得到所需的單個(gè)字符圖像,目前常用的方法有基于投影方法和基于連通字符的提取等方法。字符識別是利用模式識別算法識別字符圖像,目前常用的方法有基于模板匹配的方法、基于特征的方法和基于機(jī)器學(xué)習(xí)的方法。15.1工程應(yīng)用:車牌識別本章主要采用基于BP神經(jīng)網(wǎng)絡(luò)的字符識別方法對車牌字符進(jìn)行識別,基本處理步驟如下:1)讀取車牌圖像;2)圖像預(yù)處理,對圖像進(jìn)行圖像灰度轉(zhuǎn)換、二值化、形態(tài)學(xué)處理、平滑等一系列預(yù)處理操作;3)牌照定位,采用Canny算子對圖像進(jìn)行邊緣檢測,并定位圖片中的牌照位置;4)牌照字符分割,把牌照中的字符分割出來;5)字符識別建模,完成基于BP神經(jīng)網(wǎng)絡(luò)的字符識別模型的訓(xùn)練和測試;6)牌照字符識別,把分割好的字符送入到訓(xùn)練好的BP神經(jīng)網(wǎng)絡(luò)中進(jìn)行識別,輸出車牌號碼。15.1車牌圖像采集汽車牌照采集時(shí),要求車牌照干凈清晰、不被異物遮擋,且拍攝距離不要過遠(yuǎn),以盡量減少圖像中的噪聲信息。本章提前采集了大量的汽車牌照圖像,為模型訓(xùn)練和測試提供了充足的數(shù)據(jù)支撐。汽車牌照圖像距離如圖15-1所示。圖15-1原始圖像15.2車牌圖像預(yù)處理及牌照定位在自然環(huán)境下,由于汽車圖像背景復(fù)雜、光線不均等因素,使得如何在自然背景中準(zhǔn)確地定位車牌區(qū)域成為了整個(gè)車牌識別系統(tǒng)的難點(diǎn)。圖像車牌區(qū)域定位的主要步驟為:圖像灰度轉(zhuǎn)換,圖像邊緣檢測,灰度圖腐蝕與膨脹,車牌區(qū)域的邊界值計(jì)算。(1)圖像灰度轉(zhuǎn)換為了便于邊緣檢測,需要將彩色圖像灰度轉(zhuǎn)換成灰度圖。圖15-2車牌灰度圖及其直方圖(a)灰度圖

(b)灰度圖的直方圖15.2車牌圖像預(yù)處理及牌照定位利用Canny算子對車牌圖像進(jìn)行邊緣檢測的程序代碼如下:I_gray=imread('灰度圖.jpg');%讀入圖片I_edge=edge(I_gray,'canny',0.18,'both');figure,imshow(I_edge);%title('邊緣檢測結(jié)果');imwrite(I_edge,'邊緣檢測圖.jpg');彩色圖像向灰度圖轉(zhuǎn)化的程序代碼如下:I=imread('原圖.jpg');%讀入圖片I_gray=rgb2gray(I);figure,imshow(I_gray);%title('灰度圖');figure,imhist(I_gray);%title('灰度圖的直方圖');imwrite(I_gray,'灰度圖.jpg');15.2車牌圖像預(yù)處理及牌照定位(2)圖像邊緣檢測在MATLAB中利用edge()函數(shù)實(shí)現(xiàn)邊緣檢測,在edge()函數(shù)中有Sobel算子、Prewitt算子、Log算子以及Canny算子等多種邊緣檢測算子。通過對幾種算法的檢測結(jié)果進(jìn)行比較,發(fā)現(xiàn)Canny算子既能濾除噪聲,又能保持較好的邊緣特性。圖15-3車牌邊緣檢測結(jié)果從邊緣效果圖能看出來,經(jīng)過處理后的車牌的輪廓已經(jīng)非常明顯了。但是,該邊緣檢測圖像中不僅有車牌照的邊緣,圖像中非車牌區(qū)域的邊緣(噪聲邊緣)也一并檢測出來。由于邊緣檢測結(jié)果中存在各種干擾,因此無法直接確定汽車牌照區(qū)域,需要對圖像進(jìn)一步處理,以消除噪聲邊緣的影響,確定車牌區(qū)域的位置。15.2車牌圖像預(yù)處理及牌照定位(3)腐蝕與膨脹眾所周知,汽車牌照是一個(gè)矩形區(qū)域。但是,由于圖像中噪聲邊緣的影響,通過圖像膨脹進(jìn)行邊緣提取或直接對邊緣圖像進(jìn)行矩形區(qū)域提取存在一定的難度。這就需要尋找一種方法,削弱噪聲邊緣的影響,強(qiáng)化目標(biāo)區(qū)域信息。腐蝕是一種消除邊界點(diǎn)的常用方法,利用它可以使邊界向內(nèi)部收縮,消除或者削弱小而且無價(jià)值的像素區(qū)域。觀察圖15-4,可以看到無論是噪聲邊緣還是車牌邊緣,腐蝕后均變得更細(xì)且不連續(xù)。但是由于汽車牌照區(qū)域的邊緣比其他區(qū)域的邊緣更加密集,腐蝕后牌照邊緣雖然也會細(xì)化甚至斷開,但是剩余邊緣點(diǎn)依然相對密集。進(jìn)一步對圖像做閉運(yùn)算,可以將臨近的邊緣點(diǎn)連通起來,形成連通區(qū)域。圖15-5車牌圖像區(qū)域連通結(jié)果圖圖15-4車牌邊緣腐蝕結(jié)果圖15.2車牌圖像預(yù)處理及牌照定位對車牌邊緣圖像進(jìn)行腐蝕的程序代碼如下:I_edge=imread(‘邊緣檢測圖.jpg’);se=[1;1;1];I_r=imerode(I_edge,se);figure,imshow(I_r);%title('車牌邊緣腐蝕結(jié)果圖');imwrite(I_r,'邊緣腐蝕圖.jpg');車牌圖像邊緣連通操作的程序代碼如下:I_r=imread(‘邊緣腐蝕圖.jpg’);se=strel('rectangle',[32,32]);I_area=imclose(I_r,se);figure;imshow(I_area);%title('車牌圖像的區(qū)域連通結(jié)果');imwrite(I_area,'閉運(yùn)算區(qū)域連通圖.jpg');15.2車牌圖像預(yù)處理及牌照定位(4)初步移除汽車牌照以外的對象由于圖像中含有大量小面積的噪聲,為了防止計(jì)算凸包時(shí)出錯(cuò),可以先去除小面積的噪聲。(5)汽車牌照定位車牌圖像區(qū)域去除小的噪聲區(qū)域后仍然可能有多個(gè)閉合區(qū)域,需要根據(jù)車牌的特征信息來最終確定車牌區(qū)域。車牌的長度、寬度、寬高比和面積都等,都是汽車牌照的形狀特征,可以用來作為車牌區(qū)域的判斷條件。對于圖15-6所顯示的區(qū)域,可根據(jù)各個(gè)連通域的寬高比來確定汽車牌照的位置。本工程應(yīng)用中,通過貼標(biāo)簽并求取最小外接矩形的方法,進(jìn)而計(jì)算各區(qū)域的寬高比。圖15-6噪聲區(qū)域去除后的圖像圖15-7車牌區(qū)域的最小外接矩形初步移除小對象的程序代碼如下:I_area=imread(‘閉運(yùn)算區(qū)域連通圖.jpg’)[m,n]=size(I_area);mianji=m*n;I_object=bwareaopen(I_area,round(mianji/50));figure,imshow(I_object);%title('去除小對象后的圖像');imwrite(I_object,'去除小對象圖.jpg');利用寬高比定位汽車牌照的程序代碼如下:I_object=imread(‘去除小對象圖.jpg’)[m,n]=size(I_area);mianji=m*n;[L1,N1]=bwlabel(I_object);%

貼標(biāo)簽figure,imshow(I_object);holdonfori=1:N1[rc]=find(L1==i);%找出目標(biāo)邊界

%求最小外接矩形[rectx,recty,area,perimeter]=minboundrect(c,r,'a');w=abs(min(rectx))-round(max(rectx));%寬h=abs(min(recty))-round(max(recty));%高ifw/h>2&&w*h>mianji/15line(rectx(:),recty(:),'color','r','LineWidth',3);rectx_copy=rectx;%坐標(biāo)存儲到新的變量之中recty_copy=recty;endendsaverectx_copy;saverecty_copy;15.2車牌圖像預(yù)處理及牌照定位15.3汽車牌照區(qū)域的分割根據(jù)外接矩形四個(gè)頂點(diǎn)的坐標(biāo),分別選取x、y軸方向坐標(biāo)點(diǎn)的最小值、最大值作為車牌的初步定位。根據(jù)初步定位的結(jié)果,可以對車牌區(qū)域進(jìn)行裁剪??梢钥吹?,第一次裁剪后的汽車牌照圖像中有鉚釘及車牌周圍噪聲區(qū)域。由于鉚釘顏色與字符接近,容易影響字符的分割結(jié)果,因此需要進(jìn)行進(jìn)一步的分割處理。如果車牌顏色為藍(lán)色,可以考慮提取藍(lán)色區(qū)域圖像,以減少噪聲的影響。具體步驟如下:

(1)根據(jù)藍(lán)色像素點(diǎn)的RGB分量值的差異性,判斷藍(lán)色像素區(qū)域,提取含藍(lán)色分量的圖像區(qū)域,將非藍(lán)色的區(qū)域設(shè)置為白色;

(2)根據(jù)所藍(lán)色分量提取后的圖像,判斷藍(lán)色車牌的具體位置,進(jìn)行車牌圖像左右邊界裁剪;

(3)根據(jù)車牌中間區(qū)域車牌顏色特征,確定車牌字符的上下邊界,進(jìn)行車牌字符上下邊界裁剪,消除上鉚釘、下鉚釘兩邊非車牌區(qū)域的影響;圖15-8車牌區(qū)域初步裁剪結(jié)果圖圖15-9藍(lán)色區(qū)域提取圖像車牌區(qū)域初步裁剪代碼如下:I=imread('原圖.jpg');%讀入原始圖片importdata(‘rectx_copy.mat’);%載入數(shù)據(jù)importdata(‘recty_copy.mat’);x_Is=round(min(recty_copy)):round(max(recty_copy));y_Is=round(min(rectx_copy)):round(max(rectx_copy));Is1=I(x_Is,y_Is,1:3);%裁剪彩色圖片(RGB)figure,imshow(Is1);%title('車牌區(qū)域初步裁剪');imwrite(Is1,'車牌區(qū)域初步裁剪.jpg');提取藍(lán)色車牌區(qū)域的程序代碼如下:Is1=imread('車牌區(qū)域初步裁剪.jpg');[m,n,d]=size(Is1);level=60;%設(shè)置顏色分量差異性閾值Is2=ones(m,n,3)*255;%臨時(shí)存放藍(lán)色分量的提取圖像,背景為白%提取藍(lán)色分量fori=1:mforj=1:n%藍(lán)色分量與其他分量的差值大于閾值,則為藍(lán)色if((Is1(i,j,3)-Is1(i,j,1)>level)&&(Is1(i,j,3)-Is1(i,j,2)>level))Is2(i,j,1)=0;Is2(i,j,2)=0;Is2(i,j,3)=255;%將藍(lán)色分量的像色設(shè)為純藍(lán)色endendendfigure,imshow(Is2);%title('藍(lán)色區(qū)域提取圖像');imwrite(Is2,'藍(lán)色區(qū)域提取圖像.jpg');15.3汽車牌照區(qū)域的分割15.3汽車牌照區(qū)域的分割車牌圖像精確定位:由于藍(lán)色分量強(qiáng)化過程中,強(qiáng)化程度不容易掌控,強(qiáng)化后的圖像可能會出現(xiàn)字符變形,不能直接用強(qiáng)化后的圖像來進(jìn)行下一步的處理。但是可以利用藍(lán)色分量強(qiáng)化結(jié)果來判斷藍(lán)色車牌區(qū)域的位置,幫助更為精準(zhǔn)的定位車牌字符區(qū)域。同時(shí)也可以借助車牌區(qū)域中間部位藍(lán)色像素的連續(xù)性,來消除鉚釘?shù)挠绊?。(a)車牌區(qū)域初步裁剪二值圖像(b)車牌圖像左右邊界裁剪結(jié)果(c)車牌區(qū)域精準(zhǔn)切割結(jié)果圖15-10車牌區(qū)域二次分割過程車牌圖像精確定位代碼如下:%%車牌精準(zhǔn)定位,消除藍(lán)色車外外圍噪聲,消除上下鉚釘區(qū)域的影響Is1=imread(‘車牌區(qū)域初步裁剪.jpg’);Is2=imread('藍(lán)色區(qū)域強(qiáng)化圖像.jpg')Is3=Is2(:,:,1);Is4=im2bw(Is1);figure,imshow(Is3);%title('藍(lán)色分量的二值圖像');imwrite(Is3,'藍(lán)色分量的二值圖像.jpg');figure,imshow(Is4);%title('車牌區(qū)域初步裁剪二值圖像.jpg');imwrite(Is4,'車牌區(qū)域初步裁剪二值圖像.jpg');%%去除左右邊界白色區(qū)域[m_d,n_d]=size(Is3);left=1;right=n_d;whilesum(Is3(:,left))==m_d*255&&left<n_dleft=left+1;endwhilesum(Is3(:,right))==m_d*255&&right>=1+1right=right-1;endIs3=Is3(:,left+1:right-1);%裁剪目標(biāo)區(qū)域Is4=Is4(:,left+1:right-1);%裁剪目標(biāo)區(qū)域figure,imshow(Is3);%title('藍(lán)色區(qū)域強(qiáng)化圖像左右邊界裁剪結(jié)果')figure,imshow(Is4);%title('車牌左右邊界裁剪結(jié)果')imwrite(Is4,'車牌區(qū)域左右邊界裁剪結(jié)果.jpg');%%去除鉚釘影響[m_d,n_d]=size(Is3);H1=[];H2=[];forh1=1:round(m_d/2)ifsum(Is3(h1,(round(4*n_d/9):round(5*n_d/9))))==0&&…sum(Is3(h1+1,(round(4*n_d/9):round(5*n_d/9))))~=0%車牌圖像4/9~5/9的區(qū)域基本上處于車牌中間位置,為無鉚釘區(qū)域

%記錄圖像上半部分中間區(qū)域區(qū)域中未出現(xiàn)目標(biāo)點(diǎn)的行號H1=[H1,h1];endendforh2=round(m_d/2):m_d-1ifsum(Is3(h2,(round(4*n_d/9):round(5*n_d/9))))~=0&&…sum(Is3(h2+1,(round(4*n_d/9):round(5*n_d/9))))==0H2=[H2,h2];%記錄圖像下半部分4/9~5/9的區(qū)域未出現(xiàn)目標(biāo)點(diǎn)的行號h2=m_d-2;endendIs4=Is4(H1(end):H2(1),:);%裁剪鉚釘區(qū)域figure,imshow(Is4);%title('車牌區(qū)域精準(zhǔn)切割結(jié)果');imwrite(Is4,'車牌區(qū)域精準(zhǔn)切割結(jié)果.jpg');15.3汽車牌照區(qū)域的分割15.4字符圖像分割(1)車牌號圖像去噪分割出的車牌號區(qū)域圖像中仍然可能存在一些噪聲,所以在進(jìn)行字符分割和歸一化處理之前,需要進(jìn)行均值濾波、開運(yùn)算(先腐蝕后膨脹)等圖像形態(tài)學(xué)處理,以去除噪聲像素點(diǎn)??梢钥吹剑?jīng)去噪處理,圖像中的一些噪聲像素點(diǎn)被去除了。(a)均值濾波后的圖像

(b)開運(yùn)算處理后的圖像圖15-11車牌區(qū)域圖像去噪利用均值濾波和開運(yùn)算對車牌號區(qū)域圖像進(jìn)行濾波處理的代碼如下:Is4=imread(‘車牌區(qū)域精準(zhǔn)切割結(jié)果.jpg’);h=fspecial('average',1);Is5=filter2(h,Is4);figure,imshow(Is5);%title('均值濾波后的圖像');se=strel('square',2);Is6=imopen(Is5,se);figure,imshow(Is6);%title('開運(yùn)算處理后的圖像');imwrite(Is5,'均值濾波后的圖像.jpg');imwrite(Is6,'開運(yùn)算處理后的圖像.jpg');15.4字符圖像分割15.4字符圖像分割(2)字符分割與標(biāo)準(zhǔn)化字符分割與標(biāo)準(zhǔn)化的流程如下:(a)從左到右遍歷圖像的各列,計(jì)算各列的像素點(diǎn)灰度值之和。如果某列像素值之和不為零,且其前一列像素值之和為0,則統(tǒng)計(jì)其右側(cè)像素值之和不為零的連續(xù)列的數(shù)量,把這個(gè)區(qū)域當(dāng)成預(yù)備‘字符’。(b)判斷預(yù)備‘字符’是否為真正的車牌號字符,去掉寬度過小的預(yù)備‘字符’。設(shè)置閾值T,如果字符的寬度小于T,則是假字符,把該字符的所有像素值置為零;如果字符的寬度大于T,則把該字符保存為字符。(c)統(tǒng)計(jì)出所有車牌號字符,分割完畢。(d)最后把分割出來的車牌號字符尺寸標(biāo)準(zhǔn)化為m×n,保證與模板中字符圖像的大小相匹配。15.4字符圖像分割

字符分割時(shí)需要注意,車牌中有漢字,而左右結(jié)構(gòu)的漢字中間有較窄的間隔,因此字符分割方法要對這種情況具有適用性。例如,圖15-12中的‘津’字,由左右兩部分組成,中間的垂直方向有一個(gè)很小的縫隙,采用直接統(tǒng)計(jì)圖像的連續(xù)列的方法將無法將‘津’字作為一個(gè)整體字符進(jìn)行分割。因此,在本工程應(yīng)用中,我們把車牌號圖像向左或向右旋轉(zhuǎn)一定角度,使得利用投影法時(shí)不會把左右結(jié)構(gòu)的漢字分割成兩部分。通常車牌中的第一個(gè)字符為漢字,其它字符均為數(shù)字或字母,為了防止圖像旋轉(zhuǎn)導(dǎo)致字符變形而降低識別率,因此僅對第一個(gè)字符進(jìn)行旋轉(zhuǎn)處理,其他字符應(yīng)保持原有角度不變。(a)旋轉(zhuǎn)后的車牌區(qū)域圖像(b)切除漢字后的車牌區(qū)域圖像(d)車牌字符標(biāo)準(zhǔn)化結(jié)果(c)全部車牌字符切割結(jié)果圖15-12字符分割和歸一化效果圖車牌圖像字符分割和標(biāo)準(zhǔn)化的代碼如下:Is6=imread(‘開運(yùn)算處理后的圖像.jpg’);%%旋轉(zhuǎn)車牌號圖像[M,N]=size(Is6);angle=-3;I_ro=imrotate(Is6,angle);%旋轉(zhuǎn)車牌號圖像figure,imshow(I_ro);%title(‘旋轉(zhuǎn)后的車牌號圖像’);imwrite(I_ro,'旋轉(zhuǎn)后的車牌區(qū)域圖像.jpg');%%字符分割和歸一化T=N/20;flag=0;word1=[];whileflag==0[m,n]=size(I_ro);wide=0;whilesum(I_ro(:,wide+1))~=0&&wide<n-2wide=wide+1;

%統(tǒng)計(jì)各個(gè)字符的寬度大小endifwide<T

%從左到右切割非字符區(qū)域I_ro(:,[1:wide])=0;I_ro=qiege(I_ro);%裁掉寬度小于10的目標(biāo)Is6(:,[1:wide])=0;Is6=qiege(Is6);%從左到右切割字符區(qū)域elseifwide>T

%切割寬度大于10的目標(biāo),即切割漢字temp=qiege(imcrop(I_ro,[11widem]));flag=1;%結(jié)束while循環(huán)word1=temp;%把temp放到空矩陣word1中Is6(:,[1:wide])=0;%把漢字部分全部變成0I_ro2_7=qiege(Is6);%把漢字從字符分割圖(旋轉(zhuǎn)前)切除后的圖像%I_ro2_7=imrotate(I_ro2_7,3);%反相旋轉(zhuǎn)figure,imshow(I_ro2_7)imwrite(I_ro2_7,'切割漢字后的車牌區(qū)域圖像.jpg');endendfori=2:7%識別第2-7個(gè)字符words=['[','word',num2str(i),',','I_ro2_7',']','=fenge(I_ro2_7);'];%命令行語句拼接eval(words);%相當(dāng)于執(zhí)行[word2,d]=fenge(d);...;[word3,d]=fenge(d);end%存儲字符切割結(jié)果imwrite(word1,['1','.bmp']);imwrite(word2,['2','.bmp']);imwrite(word3,['3','.bmp']);imwrite(word4,['4','.bmp']);imwrite(word5,['5','.bmp']);imwrite(word6,['6','.bmp']);imwrite(word7,['7','.bmp']);fori=1:7

%字符標(biāo)準(zhǔn)化words=['word',num2str(i),'=imresize(word',num2str(i),',[3216]);'];eval(words);end15.4字符圖像分割

fenge()函數(shù)的Matlab代碼如下:%獲取切割后的單個(gè)字符function[word,result]=fenge(Img)[m,n]=size(Img);word=[];flag=0;y1=n/9;y2=0.25;whileflag==0[m,n]=size(Img);wide=0;whilesum(Img(:,wide+1))~=0&&wide<=n-2wide=wide+1;endtemp=qiege(imcrop(Img,[11widem]));[m1,n1]=size(temp);ifwide<y1&&n1/m1>y2Img(:,[1:wide])=0;ifsum(sum(Img))~=0Img=qiege(Img);elseword=[];flag=1;endelseword=qiege(imcrop(Img,[11widem]));

Img(:,[1:wide])=0;ifsum(sum(Img))~=0Img=qiege(Img);flag=1;elseImg=[];endendendresult=Img;endqiege()函數(shù)的Matlab代碼如下:functione=qiege(Img)[m,n]=size(Img);top=1;bottom=m;left=1;right=n;whilesum(Img(top,:))==0&&top<=m-1%位置1的索引超出數(shù)組范圍(不能超過64)。top=top+1;endwhilesum(Img(bottom,:))==0&&bottom>1bottom=bottom-1;endwhilesum(Img(:,left))==0&&left<nleft=left+1;endwhilesum(Img(:,right))==0&&right>=1+1%位置2的索引無效。數(shù)組索引必須為正整數(shù)或邏輯值。right=right-1;enddd=right-left;hh=bottom-top;e=imcrop(Img,[lefttopddhh]);%

[左上右下]:圖像的一個(gè)裁剪區(qū)域15.4字符圖像分割

15.5字符細(xì)化在圖像處理中,形狀信息是十分重要的。為了便于描述和提取特征,對那些細(xì)長的區(qū)域常用它類似骨架的細(xì)線來表示,這些細(xì)線位于圖形的中軸附近,而且從視覺的角度來說仍然保持原來的形狀,這種處理就是所謂的細(xì)化。細(xì)化的目的是要得到與原來區(qū)域形狀近似的、由簡單的弧和曲線組成的圖形。細(xì)化算法實(shí)際上是一種特殊的多次迭代的收縮算法。但是,細(xì)化的結(jié)果是要求得到一個(gè)由曲線組成的連通的圖形,這是細(xì)化與收縮的根本區(qū)別。所以,不能像收縮處理那么簡單地消去所有的邊界點(diǎn),否則將破壞圖形的連通性。因此,在每次迭代中,在消去邊界點(diǎn)的同時(shí),還要保證不破壞它的連通性,即不能消去那些只有一個(gè)鄰點(diǎn)的邊界點(diǎn),以防止弧立的端點(diǎn)被消去。字符過于膨脹會大大影響字符的識別效果,這時(shí)可通過細(xì)化處理來降低過膨脹。字符細(xì)化僅針對于過于膨脹的字符,而字符是否過膨脹則通過像素占空比來判斷。字符細(xì)化效果如圖15-13所示??梢钥吹?,本示例中車牌的字符均不符合細(xì)化條件,因此未被細(xì)化。圖15-13字符過膨脹處理結(jié)果字符細(xì)化的相關(guān)程序代碼如下:%%像素占空比(判斷是否需要字符細(xì)化)fori=1:7I=imread(strcat([num2str(j),'.bmp']));white=0;forx=1:32fory=1:16ifeval(['word',num2str(i),'(x,y)','==1'])white=white+1;endendendwhite_ratio=white/(32*16);ifwhite_ratio>0.7eval(['word',num2str(i),"=bwmorph(word3,'thin',4)"])endendfigure,subplot(2,7,1),imshow(word1),title('1');subplot(2,7,2),imshow(word2),title('2');subplot(2,7,3),imshow(word3),title('3');subplot(2,7,4),imshow(word4),title('4');subplot(2,7,5),imshow(word5),title('5');subplot(2,7,6),imshow(word6),title('6');subplot(2,7,7),imshow(word7),title('7');imwrite(word1,['xh1','.bmp']);imwrite(word2,['xh2','.bmp']);imwrite(word3,['xh3','.bmp']);imwrite(word4,['xh4','.bmp']);imwrite(word5,['xh5','.bmp']);imwrite(word6,['xh6','.bmp']);imwrite(word7,['xh7','.bmp']);15.5字符細(xì)化15.6BP神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和字符的識別車牌圖像進(jìn)行字符分割后,將分割后的字符送入車牌識別模塊進(jìn)行字符的識別,而識別率的高低主要取決于識別算法的精度。因此,字符識別是車牌識別的核心所在。字符識別(OpticalCharacterRecognition,OCR)隸屬于模式識別和人工智能?!澳J阶R別”中的模式是指人們在一些限制的條件下根據(jù)特定的需求對自然界的一個(gè)事物進(jìn)行抽象分類的概念。字符識別中,字符呈現(xiàn)出的是其形狀或外形的特點(diǎn),因此對字符的識別就是對其外形及特點(diǎn)的識別。首先要對這些字符的外在特點(diǎn)進(jìn)行描述,然后通過一系列的處理提取出這些特征,最后再把這些特征與模板的特征進(jìn)行匹配或者送入到訓(xùn)練好的模型中進(jìn)行識別。本工程應(yīng)用中采用BP神經(jīng)網(wǎng)絡(luò)識別算法,也就是說BP神經(jīng)網(wǎng)絡(luò)模型的精確程度決定著車牌字符的識別率。BP神經(jīng)網(wǎng)絡(luò)屬于人工神經(jīng)網(wǎng)絡(luò)的一種,人工神經(jīng)網(wǎng)絡(luò)(ArtificialNeuralNetwork,ANN)是一種模擬人腦神經(jīng)元之間相互連接的數(shù)學(xué)模型,可以進(jìn)行信息的運(yùn)算和處理工作。BP神經(jīng)網(wǎng)絡(luò)一般包括輸入層、隱含層和輸出層三部分。15.6BP神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和字符的識別

通常,車牌號由七個(gè)字符組成,第一個(gè)字符是漢字,第二個(gè)字符是字母,第三到七位字符是字母或者數(shù)字。為了提高車牌字符的識別率,可以采用三個(gè)BP神經(jīng)網(wǎng)絡(luò)來分別對車牌的三個(gè)部分進(jìn)行識別。本工程應(yīng)用中,數(shù)據(jù)集中每一個(gè)字符的大小都為32*16,把字符均勻分割成4×4大小的特征矩陣,并做歸一化處理。將基于特征矩陣的16個(gè)特征值作為神經(jīng)網(wǎng)絡(luò)的輸入,字符的種類作為輸出。(1)網(wǎng)絡(luò)模型建立經(jīng)調(diào)試,網(wǎng)絡(luò)的輸入層設(shè)置16個(gè)神經(jīng)元,隱含層設(shè)置2層,第一層有16個(gè)神經(jīng)元,第二層有5個(gè)神經(jīng)元,輸出層設(shè)置一個(gè)神經(jīng)元。隱含層和輸出層的激活函數(shù)均選tansig函數(shù),訓(xùn)練函數(shù)選取trainbfg函數(shù),學(xué)習(xí)率設(shè)置為0.05,迭代次數(shù)設(shè)置為1000次,動量因子設(shè)為0.9。由于漢字、字母、字母漢字的訓(xùn)練過程基本相似,故此處以漢字的神經(jīng)網(wǎng)絡(luò)為例,介紹神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練過程。在本應(yīng)用案例中,僅提供了4個(gè)漢字的數(shù)據(jù)樣本,每個(gè)漢字提供100個(gè)訓(xùn)練樣本,因此識別模型也是針對這4個(gè)漢字訓(xùn)練的。需要注意:本案例旨在提供一種解決問題的方法,在實(shí)際應(yīng)用中還需根據(jù)具體需求及具體數(shù)據(jù)樣本情況,重新調(diào)整代碼中訓(xùn)練數(shù)據(jù)的數(shù)量、種類及訓(xùn)練參數(shù)。15.6BP神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和字符的識別

再利用上述程序訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型的時(shí)候,會出現(xiàn)如圖15-15所示的神經(jīng)網(wǎng)絡(luò)訓(xùn)練界面,其中Input表示輸入的數(shù)據(jù),HiddenLayer1表示第一個(gè)隱藏層(16個(gè)神經(jīng)元),HiddenLayer2表示第二個(gè)隱藏層(5個(gè)神經(jīng)元),OutputLayer表示輸出層,Output表示輸出的數(shù)據(jù),即每一個(gè)樣本所對應(yīng)的標(biāo)簽值。訓(xùn)練完成之后,點(diǎn)擊按鈕Performance,則會出現(xiàn)如圖14-15所示的均方誤差隨著迭代次數(shù)的增加而逐漸減小的示意圖。圖15-14神經(jīng)網(wǎng)絡(luò)訓(xùn)練界面圖15-15均方誤差-迭代次數(shù)關(guān)系圖車牌漢字BP神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練和驗(yàn)證的代碼如下:test_path='D:\test\';%%測試圖像的存儲路徑train_path='D:\train\';%%訓(xùn)練圖像的存儲路徑%%驗(yàn)證集數(shù)據(jù)樣本特征矩陣提取A=dir(fullfile(test_path,'*.bmp'));%驗(yàn)證集L1=length(A);fori=1:L1A1=imread([test_path,A(i).name]);feature_AA(:,i)=Get_Feature_cp(A1,32,16);endforh=1:4%共4個(gè)漢字fork=0:9%每個(gè)漢字10個(gè)測試樣本class_A(1,h*10-k)=h;endend%%訓(xùn)練集數(shù)據(jù)樣本特征矩陣提取B=dir(fullfile(train_path,'*.bmp'));L2=length(B);forj=1:L2B1=imread(strcat(train_path,[num2str(j),'.bmp']));feature_BB(:,j)=Get_Feature_cp(B1,32,16);end%%增強(qiáng)數(shù)據(jù)集%feature_BB中的每一列都是一個(gè)字符的特征矩陣(16*1)forh=1:4%訓(xùn)練數(shù)據(jù)4個(gè)漢字,每個(gè)漢字100個(gè)樣本fork=0:50%遍歷每100個(gè)字符的前50個(gè)forg=1:16%遍歷每一個(gè)字符的所有特征值feature_BB(g,h*100-k)=feature_BB(g,h*100)+unidrnd(5);%特征值隨機(jī)加0-5之間的數(shù)值endendfork=51:99%遍歷每100個(gè)字符的后50個(gè)forg=1:16x=feature_BB(g,h*100)-unidrnd(3)%特征值隨機(jī)減0-3之間的數(shù)值ifx>=0

%確保隨機(jī)減后的特征值不小于0feature_BB(g,h*100-k)=x;elseifx<0feature_BB(g,h*100-k)=0;endendendend15.6BP神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和字符的識別%%模型訓(xùn)練net=train(net1,feature_bb,class_BB);%%驗(yàn)證集的模型預(yù)測t_sim=sim(net,feature_aa);

%返回驗(yàn)證集樣本的預(yù)測值t_sim=round(t_sim);%%模型誤差計(jì)算error1=0;count=0;fori=1:L1count=count+1;ifabs(t_sim(i)-class_A(i))<0.5temp=0;elsetemp=1;enderror1=error1+temp;enderror=error1/count;save('SW.mat');%將工作區(qū)中的所有變量保存在二進(jìn)制MAT文件SW.mat中。%訓(xùn)練數(shù)據(jù)類別標(biāo)簽forh=1:4fork=0:99class_BB(1,h*100-k)=h;endend%%歸一化處理[feature_bb,ps1_input]=mapminmax(feature_BB,0,1);feature_aa=mapminmax('apply',feature_AA,ps1_input);%同樣的規(guī)范化%%建立網(wǎng)絡(luò)模型net=newff(feature_bb,class_BB,[16,5],{'tansig''tansig''tansig'},'trainbfg');W1=net1.iw{1,1};%輸入層到中間層的權(quán)值B1=net1.b{1};%中間各層神經(jīng)元閾值W2=net1.lw{2,1};%中間層到輸出層的權(quán)值B2=net1.b{2};%輸出層各神經(jīng)元閾值%%網(wǎng)絡(luò)參數(shù)設(shè)置net.trainParam.epochs=10000;%迭代次數(shù)net.trainParam.goal=1e-3;%訓(xùn)練要求精度net.trainParam.lr=0.05;%學(xué)習(xí)率net.trainParam.show=50;%每隔10次顯示一次net.trainParam.mc=0.9;%動量因子15.6BP神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和字符的識別15.6BP神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和字符的識別(2)車牌字符識別

當(dāng)字符識別的網(wǎng)絡(luò)模型訓(xùn)練完成以后,就用來對車牌進(jìn)行識別檢測了。最終車牌字符識別結(jié)果如圖15-16所示。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論