Matlab 簡單的車牌識別並分割(學習筆記)

2021-10-06 16:19:49 字數 3760 閱讀 8550

因為團隊考核遇到題目,費了不少時間完成,將學習的過程記錄下來吧。車牌識別分為4個步驟,第一是定位藍色車牌區域;第二是旋轉影象;第三是剪下藍色車牌影象;第四是分割字元並輸出到螢幕。

第一步:定位藍色車牌區域

%

% 定位藍色車牌區域

f=imread(

'd:\myron\個人\**\5.jpg');

fg=rgb2gray(f)

;gray=

3*f(:,

:,3)

-f(:,:

,1)-f(:,

:,2)

;figure,imshow(gray)

,title(

'保留藍色色域');

level=graythresh(gray)

;%利用ostu法獲取影象的閾值

bw=im2bw(gray,level)

;%根據ostu法分割車牌影象

% figure,imshow(bw)

,title(

'二值化後的影象');

bw1=bwareaopen(bw,

500)

;%刪除面積小於500的區域

% figure,imshow (bw1)

,title (

'刪除小面積區域後的影象');

se=strel(

'cube',15

);%建立乙個邊長為15的正方形

bw2=imclose(bw1,se)

;%閉運算連使整個車牌區域連線在一起

% figure,imshow(bw2)

,title(

'進行閉運算後的車牌'

);`

第二步:旋轉影象在此步驟中我們使用radon變換,具體如何實現可檢視其他大牛的詳細解釋,在這裡就不詳細描述了,畢竟學習是乙個自己探索真理的過程,fighting!

%

% 車牌矯正(利用radon變換)

theta=0:

179;

r=radon(bw2,theta)

;[m,n]

=size(r);c=

0;for i=1:m

for j=1:n

if r(1,

1)r(1,

1)=r(i,j)

; c=j;

endend

endrot=

90-c;

fx=imrotate(f,rot,

'crop');

% figure;imshow(fx)

;title(

'旋轉後的影象'

);

第三步:剪下藍色車牌影象在實現過程中遇到了regionprops函式,真是非常的友好。下面的字元分割我也是使用了這個函式,非常的簡潔。

%

% 剪下定位車牌區域

s1=regionprops(bw2,

'boundingbox'

,'centroid');

%獲取車牌矩形區域,即二值圖中值為1的矩形框

xy=s1(1)

.boundingbox;

%獲取車牌矩形區域左上角座標及矩形的長和寬, xy(

1)為矩形框左上角的y座標,xy(

2)為矩形框左上角的x座標

fcrop=f(

round

(xy(2)

):round

(xy(2)

+xy(4)

),round

(xy(1)

):round

(xy(1)

+xy(3)

),:)

;% figure,imshow (fcrop)

,title(

'定位剪下後的藍色車牌影象'

);

第四步:分割字元並輸出到螢幕想用利用regionprops函式進行字元分割,就必須保證每乙個車牌字元通過形態學處理後都分別為單獨的連通區域,由於我的車牌干擾因素比較多,形態學處理也略微複雜了一些,對於其他干擾因素較少的影象來說,簡單處理後就可以使用此函式。然後通過for迴圈挨個輸出。

%

% 分割字元

fgray=rgb2gray(fcrop)

;level2=graythresh(fgray)

;bw3=im2bw(fgray,level2)

;% figure;imshow(bw3)

;title(

'定位剪下後的二值影象');

se2=strel(

'line',2

,90);

se3=strel(

'cube',4

);se4=strel(

'disk',1

);bw3o=bwareaopen(bw3,30)

;figure;imshow(bw3o)

;title(

'刪除小於20面積後的影象');

bw3oe=imerode(bw3o,se4)

;figure;imshow(bw3oe)

;title(

'二值影象腐蝕後'

)bw3oc =imclose(bw3oe,se2)

;figure;imshow(bw3oc)

;title(

'二值影象閉運算後');

bw4=imclearborder(bw3oc)

;figure;imshow(bw4)

;bw4d=imdilate(bw4,se3)

;bw4d=imdilate(bw4d,se3)

;figure;imshow(bw4d)

;title(

'膨脹後的影象');

bw5=bwareaopen(bw4d,

400)

;figure;imshow(bw5)

;title(

'刪除小於400後的影象'

);

s2=regionprops(bw5,

'boundingbox'

,'centroid');

for i=

1:length(s2)

xy=s2(i)

.boundingbox;

bw6=fcrop(floor(xy(2)

):floor(xy(2)

+xy(4)

),floor(xy(1)

):floor(xy(1)

+xy(3)

),:)

; subplot(1,

7,i)

;imshow(bw6)

;title(num2str(i));

end

#偷個懶,直接全部一起奉上。嘻嘻

#原影象

這次的考核也算是僥倖過關,加入團隊,接下來的日子裡多多努力吧!希望在看的你們也可以為了選擇想要的生活而不斷前進,披荊斬棘,最終到達山巔。

#最後附上旅遊時拍下的美麗重慶夜景圖

matlab車牌號識別

識別主程式 t round gmax gmax gmin 3 t 為二值化的閾值 roti im2bw roti,t 256 subplot 3,2,1 imshow roti title 二值化影象 bw bwareaopen roti,50 subplot 3,2,2 imshow bw tit...

基於MATLAB的夜間車牌識別處理

先看處理結果 簡單說一下實現思路 讀取,轉灰度,計算灰度直方圖,估算閾值 這裡的閾值計算很重要,經過閾值演算法,選取乙個最恰當的閾值 之後二值化。顯示影象即可。後面閾值的計算補更。車牌 clear all clcps imread chepai.png subplot 1,2,1 imshow ps...

MATLAB實現車牌識別 藍色底 黃色底

matlab實現簡單的車牌識別 很多數學建模或者一些畢業 都會涉及到車牌識別,這裡採用matlab語言進行編寫,較為詳盡的介紹了車牌識別的兩種常用方法 方法 一 簡單定位法 這是自己取的名字,這是對於車牌所處環境顏色不複雜時採用的方法 進行灰度處理 進行影象邊緣檢測和腐蝕,膨脹和平滑影象輪廓,最後去...