目錄
在路南等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需求定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,成都全網(wǎng)營銷,外貿(mào)網(wǎng)站制作,路南網(wǎng)站建設(shè)費(fèi)用合理。一、導(dǎo)入圖片
1. 從文件導(dǎo)入
?????1.1 原理:
?????1.2 代碼:
2. 攝像頭拍照識(shí)別
?????2.1 了解
?????2.1 代碼:
二、預(yù)處理
1. 預(yù)處理—— 原圖—>灰度圖
2. 預(yù)處理—— 邊緣檢測(cè)
?????2.1 概述
?????2.2?方法一:權(quán)值加重法
? 2.3?方法二:函數(shù)edge()
??????2.4 常見邊緣檢測(cè)算子
?編輯
?????2.5 邊緣檢測(cè)算子各自的優(yōu)缺點(diǎn):
3.預(yù)處理—— 腐蝕
?????3.1 原理:
?????3.2 代碼:
?????3.3 結(jié)果:
4. 預(yù)處理——閉運(yùn)算
?????4.1 原理:
?????4.2 代碼:
?????4.3 結(jié)果:
5.預(yù)處理——去除小對(duì)象
?????5.1 原理:
?????5.2 代碼:
?????5.3 結(jié)果:
二、車牌定位
1. 車牌定位—— 粗定位(確定行、列的起始和終止位置)
?????1.1 原理:
?????1.2?代碼:
?????1.3 結(jié)果
2. 車牌定位——傾斜矯正
?????2.1 原理
?????2.2 代碼
?????2.3 結(jié)果
? 3. 車牌定位——精定位之預(yù)處理——對(duì)定位后的車牌進(jìn)行灰度處理、直方圖均衡化
? 4.? 車牌定位——精定位之二值化
?????4.1 原理
?????4.2 代碼
?????4.3 結(jié)果
? 5.? 車牌定位——精定位之均值濾波
? 6. 車牌定位——精定位之去點(diǎn)處理
? 7. 車牌定位——精定位之去除上下邊框和鉚釘
三、車牌字符分割
1.? 垂直投影法
2. 歸一化
四、車牌字符識(shí)別
五、改進(jìn)
簡介:
進(jìn)行基于數(shù)字圖像處理技術(shù)的車牌定位技術(shù)和車牌字符分割技術(shù)的研究與開發(fā),具體涉及到的有以下五部分:導(dǎo)入圖片、圖像預(yù)處理、車牌定位、車牌字符分割、車牌字符識(shí)別。采用GUI完成車牌識(shí)別,傳參進(jìn)行交互。
車牌了解:
1. 我國汽車牌照的底色和字符顏色多樣,藍(lán)底白字、黃底黑字、黑底白字、紅底黑字、綠底白字、黃底黑字多種
2. 我國標(biāo)準(zhǔn)車牌照是由漢字、英文字母和阿拉伯?dāng)?shù)字組成的,漢字的識(shí)別與字母和數(shù)字的識(shí)別有很大的不同,增加了識(shí)別的難度。
3. 目前我國有普通地方車牌號(hào)、武警車牌號(hào)、軍隊(duì)車牌號(hào)三種類型,普通地方車牌號(hào)又叫自選號(hào)牌車牌,自選號(hào)牌車牌尺寸是520 ×122.5MM,即車牌長寬比為4.5:1,一共7個(gè)字符,每個(gè)字符的高寬比為2:1。首個(gè)字符為中文字符,為各個(gè)省或直轄市的簡稱,第二個(gè)字符為英文大寫字符,前兩個(gè)字符確定該車牌所在地,后五個(gè)字符由阿拉伯?dāng)?shù)字及英文大寫字符組合而成,并且后五個(gè)字符間距相同,七個(gè)字符大小也相同。
一、導(dǎo)入圖片 ????????1. 從文件導(dǎo)入 ????????????????1.1 原理:uigetfile函數(shù)的調(diào)用格式為:[filename,filepath]=uigetfile(…),執(zhí)行此函數(shù)可得到供用戶選擇圖片文件的對(duì)話框,用戶選擇要識(shí)別的圖片并點(diǎn)擊“打開”按鈕后,會(huì)返回此圖片的文件名和路徑名,分別保存到filename和pathname兩個(gè)變量中,然后通過imread函數(shù)將圖像數(shù)據(jù)讀出,賦值給變量I,從而實(shí)現(xiàn)圖像數(shù)據(jù)的讀入。
?????1.2 代碼:function pushbutton1_Callback(hObject, eventdata, handles)
[filename pathname]=uigetfile({'.jpg'}, '選擇需要識(shí)別的車牌圖像');
Origin=imread([pathname '\' filename]);
handles.Origin=Origin;
guidata(hObject, handles);
axes(handles.axes1);
imshow(Origin);title('原圖');
2. 攝像頭拍照識(shí)別
????????????????2.1 了解寫的挺詳細(xì)的一篇,可以參考下相關(guān)內(nèi)容
Matlab攝像頭基本操作https://zhuanlan.zhihu.com/p/488540327
?????2.1 代碼:function openCamera_Callback(hObject, eventdata, handles)
vid = videoinput('winvideo',1,'RGB24_1280x720');
vidRes1=get(vid,'VideoResolution');%獲取視頻的尺寸
nBands1=get(vid,'NumberOfBands');%采集視頻的顏色通道
set(vid,'ReturnedColorSpace','rgb');
himage1=imshow(zeros(vidRes1(2),vidRes1(1),nBands1));
preview(vid,himage1);
handles.vid=vid;
guidata(hObject, handles);
function btnTakePhoto_Callback(hObject, eventdata, handles)
vid=handles.vid;
frame = getsnapshot(vid);
axes(handles.axes1);
imwrite(frame,'I.png');
I=imread('I.png');
axes(handles.axes1);
imshow(I,[]);
title('拍攝完成');
handles.Origin=I; %更新原圖
guidata(hObject, handles);
二、預(yù)處理
????????1. 預(yù)處理—— 原圖—>灰度圖?不管哪種底色的車牌,其底色與上面的字符顏色的對(duì)比度大,將RGB圖像轉(zhuǎn)化成灰度圖像時(shí),車牌底色跟字符的灰度值會(huì)相差很大。例如藍(lán)色(255,0,0)與白色(255,255,255)在R通道中并無區(qū)分,而在G、R通道或是灰度圖象中數(shù)值相差很大。同理對(duì)白底黑字的牌照可用R通道,綠底白字的牌照可以用G通道就可以明顯呈現(xiàn)出牌照區(qū)域的位置,便于后續(xù)處理。原圖、灰度對(duì)于將彩色圖象轉(zhuǎn)換成灰度圖象時(shí),圖象灰度值可由下面的公式計(jì)算:
G = 0.299R+0.587G+0.114B,使用了權(quán)值加重法,可以突出某個(gè)通道,Matlab內(nèi)的RGB轉(zhuǎn)灰度圖函數(shù)rgb2gray()使用的是(1)式權(quán)值比例公式,這樣就可以利用邊緣檢測(cè)方法。
?通過檢測(cè)圖像中不同區(qū)域的邊緣來實(shí)現(xiàn)對(duì)圖像的分割。邊緣檢測(cè)的實(shí)質(zhì)就是檢測(cè)圖像特性發(fā)生變化的位置。汽車牌照最主要的特點(diǎn)就是其邊界。汽車牌照底色、牌照邊緣顏色以及牌照以外的顏色都是不相同的,表現(xiàn)在汽車原始圖像中,即灰度級(jí)互不相同,這樣就在牌照的邊緣形成了灰度突變邊界。邊緣檢測(cè)3.4是大多數(shù)圖像處理必不可少的一步,也是所有基于邊界的圖像分割的第一步,它的任務(wù)就是精確定位邊緣和抑制噪聲。圖像的邊緣是指圖像局部亮度變化最顯著的部分,即在灰度級(jí)上發(fā)生急劇變化的區(qū)域。
?????2.2?方法一:權(quán)值加重法 ? ? ? ? ? ? ? ? 2.3?方法二:函數(shù)edge()?????????????(1)說明:
函數(shù)edge()說明https://ww2.mathworks.cn/help/images/ref/edge.html?searchHighlight=edge&s_tid=srchtitle_edge_1#buo5g3w-1-BW
?????????????(2)method——邊緣檢測(cè)方法
??????2.4 常見邊緣檢測(cè)算子?????????????2.4.1 梯度算子?
%邊緣檢測(cè)
%梯度算子
Image=im2double(rgb2gray(imread('room.jpg')));
subplot(1,2,1),imshow(Image),title('原圖像');
[h,w]=size(Image);
edgelmage=zeros(h,w);
for x=1:w-1
? ? for y=1:h-1
? ? ? ? edgeImage(y,x) = abs(Image(y,x+1)-Image(y,x)) + abs(Image(y+1,x)-Image(y,x));
? ? end
end
subplot(1,2,2),imshow(edgeImage),title('梯度圖像');
?????????????2.4.2 Robert算子
Image=im2double(rgb2gray(imread('room.jpg')));
subplot(2,2,1),imshow(Image),title('原圖');
% edge查找二維灰度圖像中的邊緣
BW = edge(Image,'roberts');
subplot(2,2,2),imshow(BW),title('邊緣檢測(cè)');
H1=[1 0;0 -1];
H2=[0 1;-1 0];
% B=imfilter(A,h),使用多維濾波器h對(duì)多維數(shù)組A進(jìn)行濾波,并在B中返回結(jié)果。
R1=imfilter(Image,H1);
R2=imfilter(Image,H2);
edgeImage=abs(R1)+abs(R2);
subplot(2,2,3),imshow(edgeImage),title('Robert梯度圖像');
sharpImage=Image+edgeImage;
subplot(2,2,4),imshow(sharpImage),title('Robert銳化圖像');
?????????????2.4.3 Sobel算子
%邊緣檢測(cè)
%Sobel算子
Image=im2double(rgb2gray(imread('room.jpg')));
subplot(2,2,1),imshow(Image),title('原圖');
BW= edge(Image,'sobel');
subplot(2,2,2),imshow(BW),title('邊緣檢測(cè)');
H1=[-1 -2 -1;0 0 0;1 2 1];
H2=[-1 0 1;-2 0 2;-1 0 1];
R1=imfilter(Image,H1);
R2=imfilter(Image,H2);
edgeImage=abs(R1)+abs(R2);
subplot(2,2,3),imshow(edgeImage),title('Sobel梯度圖像');
sharpImage=Image+edgeImage;
subplot(2,2,4),imshow(sharpImage),title('Sobel銳化圖像');
?????????????2.4.4 Prewitt算子
%邊緣檢測(cè)
%Prewitt算子
Image=im2double(rgb2gray(imread('room.jpg')));
subplot(1,3,1),imshow(Image),title('原圖');
H1=[-1 -1 -1;0 0 0;1 1 1];
H2=[-1 0 1;-1 0 1;-1 0 1];
R1=imfilter(Image,H1);
R2=imfilter(Image,H2);
edgeImage1=abs(R1)+abs(R2);
sharpImage1=edgeImage1+Image;
subplot(1,3,2),imshow(edgeImage1),title('兩個(gè)模板梯度圖像');
subplot(1,3,3),imshow(sharpImage1),title('兩個(gè)模板銳化圖像');
?????????????2.4.5 Canny算子
?特點(diǎn):分別采用了兩個(gè)不同的閾值對(duì)圖像中的強(qiáng)邊緣和弱邊緣進(jìn)行檢測(cè),并且當(dāng)且僅當(dāng)弱邊緣和強(qiáng)邊緣有連接時(shí),才在最后的檢測(cè)結(jié)果中將弱邊緣顯示出來。
%邊緣檢測(cè)
%Canny算子
Image=im2double(rgb2gray(imread('room.jpg')));
subplot(1,2,1),imshow(Image),title('原圖像');
BW = edge(Image,'canny');
subplot(1,2,2),imshow(BW),title('Canny邊緣檢測(cè)');
?????2.5 邊緣檢測(cè)算子各自的優(yōu)缺點(diǎn):梯度算子計(jì)算簡單,但精度不高,只能檢測(cè)出圖像大致的輪廓,而對(duì)于比較細(xì)的邊緣可能會(huì)忽略。Roberts算子利用局部差分算子尋找邊緣,邊緣定位精度較高,但容易丟失部分邊緣,由于沒有經(jīng)過平滑處理,因此不具備抑制噪聲能力。Sobel算子和 Prewitt算子都是先對(duì)圖像先做加權(quán)平滑濾波處理,然后再做微分運(yùn)算,對(duì)噪聲有一定抑制能力但不能完全排除檢測(cè)結(jié)果出現(xiàn)虛假邊緣。Canny 算子有抑制噪聲能力,但會(huì)將一些高頻邊緣平滑掉。Prewitt 和 Sobel 算子比Roberts效果要好一些。Canny算子的檢測(cè)效果優(yōu)于梯度算子,能夠檢測(cè)出圖像較細(xì)的邊緣部分。
使用 imerode 函數(shù)進(jìn)行圖像腐蝕。J?= imerode(I,SE)侵蝕灰度,二進(jìn)制或壓縮的二進(jìn)制圖像I,返回侵蝕的圖像J。 SE是結(jié)構(gòu)元素對(duì)象或結(jié)構(gòu)元素對(duì)象數(shù)組,由strel或offsetstrel函數(shù)返回。腐蝕是一種消除邊界點(diǎn),使邊界向內(nèi)部收縮的過程,可以用來消除小且無意義的物體。用結(jié)構(gòu)元素掃描圖像的每一個(gè)像素,用結(jié)構(gòu)元素與圖像做“與”操作,如果都為1,結(jié)果圖像的該像素為1,否則為0。即圖像中背景與結(jié)構(gòu)元素重合的像素點(diǎn)輸出值為1,不完全重合的和不重合的像素點(diǎn)輸出值為0,以此實(shí)現(xiàn)削減無關(guān)結(jié)構(gòu)的目的。
?????3.2 代碼:function pushbutton4_Callback(hObject, eventdata, handles)
I=handles.BianYuan;
%se1=[1;1;1];
edit3=get (handles.edit3,'string');
edit3_1=round(str2double(edit3)) ;
se=strel('rectangle',[edit3_1,1]);
FuShi = imerode(I,se);
handles.Fushi=FuShi;
guidata(hObject, handles);
axes(handles.axes4)
imshow(FuShi,[]),title('圖像腐蝕');
?????3.3 結(jié)果:4. 預(yù)處理——閉運(yùn)算
????????????????4.1 原理:先膨脹圖像,然后對(duì)圖像進(jìn)行腐蝕。其功能是來填充物體內(nèi)的細(xì)小空洞,連接鄰近的物體,平滑邊界,同時(shí)不明顯改變面積。
?????4.2 代碼:function pushbutton5_Callback(hObject, eventdata, handles)
I=handles.Fushi;
edit4=get(handles.edit4,'string');
edit4_1=round(str2double(edit4)) ;
se2 = strel('rectangle', [edit4_1,edit4_1]);
TianChong = imclose(I,se2) ;%使用閉運(yùn)算進(jìn)行平滑處理
handles.TianChong = TianChong;
guidata(hObject, handles);
axes(handles.axes5);
imshow(TianChong,[]),title('平滑處理后的圖像');
?????4.3 結(jié)果:5.預(yù)處理——去除小對(duì)象
????????????????5.1 原理:利用bwareaopen函數(shù)對(duì)小于車牌區(qū)域面積的連通對(duì)象進(jìn)行剔除,防止其他連通對(duì)象干擾后面車牌區(qū)域的分割。去掉了不相關(guān)的區(qū)域,保留了感興趣的區(qū)域。bwareaopen函數(shù):刪除二值圖像BW中相互連接的像素個(gè)數(shù)小于P的對(duì)象,默認(rèn)情況下conn使用8鄰域。
?????5.2 代碼:function pushbutton6_Callback(hObject, eventdata, handles)
I=handles.TianChong;
edit5=get (handles.edit5,'string');
edit5_1=double(str2double(edit5));
morphological = bwareaopen(I,edit5_1) ;
handles.morphological = morphological;
guidata(hObject, handles);
axes(handles.axes6);
imshow(morphological,[]),title('移除小對(duì)象');
?????5.3 結(jié)果:二、車牌定位
????????1. 車牌定位—— 粗定位(確定行、列的起始和終止位置)
????????????????1.1 原理:通過比較累計(jì)行像素灰度值和列像素灰度值確定車牌的真實(shí)位置。首先使用size函數(shù)得到該圖像矩陣的行數(shù)y和列數(shù)x,用zero函數(shù)建立一個(gè)y行1列的零矩陣blue_Y,然后使用嵌套循環(huán)結(jié)構(gòu)遍歷該二值圖像的每一個(gè)像素點(diǎn),把每行值為1的像素點(diǎn)(也就是藍(lán)色像素點(diǎn))的數(shù)量分別記錄在先前創(chuàng)建的矩陣blue_y中。遍歷完之后,找出blue_y矩陣中值大的元素,它所對(duì)應(yīng)的行即為該二值圖像中藍(lán)色像素點(diǎn)最多的行。然后我們以這一行為起點(diǎn),分別向上向下逐行掃描,當(dāng)被掃描到的藍(lán)中白色像素點(diǎn)多于某個(gè)值時(shí),繼續(xù)掃描,直到掃描到某行中的藍(lán)色像素點(diǎn)數(shù)量小于估計(jì)值時(shí),停止掃描,并記錄這一行的行數(shù),該行數(shù)即為車牌的上邊界(或下邊界)。同理,我們可以用相同的方法確定出車牌的左邊界和右邊界。然后將原圖按照上述方法確定的坐標(biāo)進(jìn)行裁剪,即可得到僅有車牌的圖像。
?????1.2?代碼:function pushbutton7_Callback(hObject, eventdata, handles)
%Origin=handles.Origin;
[y, x, z] = size(handles.morphological); %返回預(yù)處理后各維的尺寸,存儲(chǔ)在x,y,z中
img = double(handles.morphological); %轉(zhuǎn)成雙精度浮點(diǎn)型
% 車牌的藍(lán)色區(qū)域
% Y方向
blue_Y = zeros(y, 1);%產(chǎn)生一個(gè)y*1的零陣
for i = 1:y
for j = 1:x
if(img(i, j) == 1) % 判斷車牌位置區(qū)域,如果img圖像坐標(biāo)(i,j)點(diǎn)值為1,即背景顏色為藍(lán)色,blue加一
blue_Y(i, 1) = blue_Y(i, 1) + 1; % 藍(lán)色像素點(diǎn)統(tǒng)計(jì)
end
end
end
% 找到Y(jié)坐標(biāo)的最小值
img_Y1 = 1;
while (blue_Y(img_Y1)< 5) && (img_Y1< y)
img_Y1 = img_Y1 + 1;
end
% 找到Y(jié)坐標(biāo)的大值
img_Y2 = y;
while (blue_Y(img_Y2)< 5) && (img_Y2 >img_Y1)
img_Y2 = img_Y2 - 1;
end
% x方向
blue_X = zeros(1, x);
for j = 1:x
for i = 1:y
if(img(i, j) == 1) % 判斷車牌位置區(qū)域
blue_X(1, j) = blue_X(1, j) + 1;
end
end
end
% 找到x坐標(biāo)的最小值
img_X1 = 1;
while (blue_X(1, img_X1)< 5) && (img_X1< x)
img_X1 = img_X1 + 1;
end
% 找到x坐標(biāo)的大值
img_X2 = x;
while (blue_X(1, img_X2)< 5) && (img_X2 >img_X1)
img_X2 = img_X2 - 1;
end
% 對(duì)圖像進(jìn)行裁剪
DingWei = handles.Origin(img_Y1:img_Y2, img_X1:img_X2, :);
handles.DingWei = DingWei;
guidata(hObject, handles);
axes(handles.axes7);
imshow(DingWei);title('定位剪切后的彩色車牌圖像');
?????1.3 結(jié)果2. 車牌定位——傾斜矯正
????????????????2.1 原理基于Radon變換的車牌圖像傾斜校正算法的實(shí)現(xiàn),將車牌圖像朝各個(gè)方向投影,進(jìn)而通過分析各方向的投影特性確定車牌的傾斜角度。
?????2.2 代碼pictureGray1 = rgb2gray(DingWei);
%水平方向調(diào)整
T=affine2d([0 1 0;1 0 0;0 0 1]);
pictureTr=imwarp(pictureGray1,T); % 圖像轉(zhuǎn)置,順時(shí)針旋轉(zhuǎn)90°調(diào)整水平方向
theta = -20 : 20; %設(shè)置傾斜角度的范圍
r1 = radon(pictureTr, theta); %radon變換確定傾斜角
result1 = sum(abs(diff(r1)), 1); %求出行倒數(shù)絕對(duì)值的累加和,大的對(duì)應(yīng)傾斜角
rot1 = find(result1==max(result1))-21;
pictureRo = imrotate(DingWei, rot1);
%豎直方向調(diào)整
pictureGray2 = rgb2gray(pictureRo);
r2 = radon(pictureGray2, theta);
result2 = sum(abs(diff(r2)), 1);
rot2 = (find(result2==max(result2))-21)/57.3; %將數(shù)值轉(zhuǎn)為角度
if rot2>0
T1 = affine2d([1 0 0 ; -tan(rot2) 1 0 ; size(pictureGray2, 1) * tan(rot2) 0 1]);
else
T1 = affine2d([1 0 0 ; tan(-rot2) 1 0 ; size(pictureGray2, 1) * tan(-rot2) 0 1]);
end
fx = imwarp(pictureRo, T1);
handles.fx = fx;
guidata(hObject, handles);
axes(handles.axes8);
imshow(fx);title('傾斜校正后的圖像');
?????2.3 結(jié)果 ? 3. 車牌定位——精定位之預(yù)處理——對(duì)定位后的車牌進(jìn)行灰度處理、直方圖均衡化直方圖均衡是一種利用灰度變換自動(dòng)調(diào)節(jié)圖像對(duì)比度的方法,通過灰度級(jí)的概率密度函數(shù)求出灰度變換函數(shù),它是一種以累積分布函數(shù)變換法為基礎(chǔ)的直方圖修正法。把原始圖像的灰度分布直方圖變換為均勻分布的形式,擴(kuò)大像素灰度值的動(dòng)態(tài)范圍,從而增強(qiáng)圖像對(duì)比度。histeq使用直方圖均衡增強(qiáng)對(duì)比度。
? 4.? 車牌定位——精定位之二值化 ????????????????4.1 原理? 最常用的方法就是設(shè)定一個(gè)閾值T,用T將圖像的數(shù)據(jù)分成兩部分:大于T的像素群和小于T的像素群,即對(duì)圖像二值化。所謂二值化實(shí)際上就是把原圖中的每個(gè)像素點(diǎn)的分別設(shè)置為0或255兩個(gè)值,簡單來說就是把整副原圖轉(zhuǎn)換成黑白圖像。若當(dāng)圖中的哪點(diǎn)的灰度值大于這個(gè)值時(shí)就將該點(diǎn)設(shè)為大255,反之如果圖像中的某點(diǎn)的灰度值小于這個(gè)值的時(shí)候就將該點(diǎn)值設(shè)為最小0。查找資料得知圖像大灰度值減去圖像大灰度值與最小灰度值之差的三分之一可獲得令人滿意的閾值,二值化的效果較好。
也可用matlab自帶函數(shù): imbinarize函數(shù)進(jìn)行二值化 ,通過閾值化將二維灰度圖像或三維進(jìn)行二值化 ,將所有高于全局閾值的值替換為 1 ,并將所有其他值設(shè)置為 0。 在默認(rèn)情況下,imbinarize 使用 Otsu 方法,該方法選擇特定閾值來最小化閾值化的黑白像素的類內(nèi)方差。
?????4.2 代碼H_max = double(max(max(balance)));
H_min = double(min(min(balance)));
T=round(H_max-(H_max-H_min)/3); %T為二值化的閾值
[m,n]=size(balance);
BW=(double(balance)>=T);%d:二值圖像
%BW=im2bw(balance,T/256);
handles.BW = BW;
guidata(hObject, handles);
axes(handles.axes11);
imshow(BW),title("二值化車牌圖片");
?????4.3 結(jié)果 ? 5.? 車牌定位——精定位之均值濾波均值濾波主要思想為鄰域平均法,即用幾個(gè)像素灰度的平均值來代替每個(gè)像素的灰度,本質(zhì)對(duì)領(lǐng)域內(nèi)的矩陣求均值。它通常用于去除圖像中高斯噪聲。有效抑制加性噪聲。
均值濾波效果分析:
fspecial:創(chuàng)建預(yù)定義的二維濾波器
補(bǔ)充:
1. 高斯濾波
原理:
特點(diǎn):
2. 中值濾波
原理:噪聲的出現(xiàn),使被處理點(diǎn)像素比周圍像素亮(暗)許多。以被處理點(diǎn)為中心,選取一個(gè)鄰域窗口,窗口內(nèi)所有點(diǎn)值排序,取中值代替該點(diǎn)值。
均值、中值濾波效果分析:
去除車牌字符間的點(diǎn),防止后面分割時(shí)將點(diǎn)誤以為字符被分割,導(dǎo)致最后一個(gè)數(shù)字未能成功分割。
[m,n]=size(avg);
avg(:,round(n*122/430):round(n*137/430))=0;%去除中間的點(diǎn)
d=bwareaopen(avg,40);%用于刪除二值圖像中面積小于一個(gè)定值(此處為65)的對(duì)象,默認(rèn)情況下使用8鄰域
handles.d=d; %更新原圖
guidata(hObject, handles);
axes(handles.axes13);
imshow(d),title('去點(diǎn)處理');
? 7. 車牌定位——精定位之去除上下邊框和鉚釘去邊界化是指刪除車牌的上下邊界,為字符分割及識(shí)別做準(zhǔn)備;而左右邊界不需刪除,因?yàn)閷⒃谧址指畈襟E中做處理。經(jīng)過分析,圖像中字母和數(shù)字的上下邊界像素所在的行會(huì)出現(xiàn)多次黑白交替。計(jì)算各列之間的差值并累加,分別計(jì)算邊界坐標(biāo)。從上到下逐行掃描像素,若此行黑白像素交替次數(shù)低于某一閾值(設(shè)為10),則刪除該行。
diff_row = diff(d,1,2); % 前一列減后一列
diff_row_sum = sum(abs(diff_row), 2); %1為列, 2為行
[rows, columns] = size(d);
trows = ceil(rows*(1/3));
j = trows;
for i=1:trows
if diff_row_sum(j,1)<10
plate.rowa = j;
break;
end
j = trows-i;
end
for i=2*trows:size(diff_row_sum,1)
if diff_row_sum(i,1)<10
plate.rowb = i;
break;
end
end
I = d(plate.rowa:plate.rowb, :);
d=remove_extra_region(I);
handles.d=d;
guidata(hObject, handles);
axes(handles.axes21);
imshow(d);title('去除上下邊框和鉚釘');
三、車牌字符分割
????????1.? 垂直投影法字符分割的方法也有多種:1.基于聚類分析的字符分割;2.投影分割的方法;3.基于模板匹配的字符分割等。最常用的是投影分割,主要是針對(duì)在車牌定位,圖像預(yù)處理后比較規(guī)則的車牌圖像。
在全局閾值算法中,Otsu在判別與最小二乘原理的基礎(chǔ)上推導(dǎo)出來的大方差閾值算法,速度快,且準(zhǔn)確率。其原理是:設(shè)車牌圖像前景與后景分割閾值為X,前景點(diǎn)數(shù)占圖像比例記為k1,平均灰度u1;后景點(diǎn)數(shù)比例k2,平均灰度u2;圖像總平均灰度u=u1×k1+u2×k2。取X從最小灰度值到大灰度值,當(dāng)X使得γ=k1×(u1-u)2+k2×(u2-u)2為大時(shí)即為最佳閾值。由于灰度值的分布情況,由方差值的大小來表現(xiàn),因而當(dāng)方差γ越大,說明前景和背景的差別γ越大。當(dāng)前景被繪制到背景區(qū)域或背景被分為前景區(qū)域時(shí),方差變小,所以當(dāng)X使方差γ大時(shí),它是最好的閾值。
從左到右逐列掃描像素,若此列像素均為黑色,在此處切割圖像。檢測(cè)每個(gè)圖像塊的寬度,若低于某一閾值,認(rèn)為此區(qū)域?yàn)樽笥疫吔缁蜃址虚g的分隔區(qū)域,刪除此圖像塊。
function pushbutton8_Callback(hObject, eventdata, handles)
d = handles.d;
%切割圖像
d = my_imsplit(d);
[m, n] = size(d);
s = sum(d); %sum(x)就是豎向相加,求每列的和,結(jié)果是行向量;
j = 1;
k1 = 1;
k2 = 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 = my_imsplit(d);
%切割出7個(gè)字符
y1=10;
y2=0.25;
flag=0;
word1=[];
while flag == 0
[m, n] = size(d);
left = 1;
width = 0;
while sum(d(:, width+1)) ~= 0
width = width + 1;
end
if width< y1
d(:, [1:width]) = 0;
d = my_imsplit(d);
else
temp = my_imsplit(imcrop(d, [1,1,width,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;
end
d(:, [1:width]) = 0;
d = my_imsplit(d);
end
end
%分割出第二至七個(gè)字符
[word2,d]=getword(d);
[word3,d]=getword(d);
[word4,d]=getword(d);
[word5,d]=getword(d);
[word6,d]=getword(d);
[word7,d]=getword(d);
[m,n]=size(word1);
2. 歸一化目前常用的主要有兩個(gè),一是縮小或放大待識(shí)別字符的外框使其變成一特定的大?。涣硪环N則是通過分析字符在兩個(gè)方向上的像素點(diǎn)做字符歸一化。imresize對(duì)圖像做縮放處理,常用調(diào)用格式為:B=imresize(A,ntimes,method);其中method可選nearest,bilinear(雙線性),bicubic,box,lanczors2,lanczors3等。
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]);
四、車牌字符識(shí)別字符識(shí)別的基本方法通常有三類:1.結(jié)構(gòu)特征分析方法;2.模板匹配法;3.神經(jīng)網(wǎng)絡(luò)法。此處采用的是模板匹配的方法,即是將要識(shí)別的字符與事先構(gòu)造好的模板進(jìn)行比對(duì),根據(jù)與模板的相似度的大小來確定最終的識(shí)別結(jié)果?;谀0迤ヅ渌惴ㄊ鞘紫葘⒎指詈蟮淖址祷?,并將其尺寸縮放為字符數(shù)據(jù)庫中模板的大小,然后與所有模板進(jìn)行匹配,最后選取最佳匹配作為結(jié)果。建立數(shù)字庫對(duì)該方法在車牌識(shí)別過程中很重要,數(shù)字庫準(zhǔn)確才能保證檢測(cè)出的數(shù)據(jù)正確。模板匹配是圖象識(shí)別方法中最具代表性的基本方法之一,它是將從待識(shí)別的圖象或圖象區(qū)域f(i,j)中提取的若干特征量與模板T(i,j)相應(yīng)的特征量逐個(gè)進(jìn)行比較,計(jì)算它們之間規(guī)格化的互相關(guān)量,其中互相關(guān)量大的一個(gè)就表示期間相似程度最高,可將圖象歸于相應(yīng)的類。也可以計(jì)算圖象與模板特征量之間的距離,用最小距離法判定所屬類。
此處采用相減的方法來求得字符與模板中哪一個(gè)字符最相似,然后找到相似度大的輸出。汽車牌照的字符一般有七個(gè),大部分車牌第一位是漢字,通常代表車輛所屬省份,緊接其后的為字母與數(shù)字。首先取字符模板,接著依次取待識(shí)別字符與模板進(jìn)行匹配,將其與模板字符相減,得到的0越多那么就越匹配。把每一幅相減后的圖的0值個(gè)數(shù)保存,即為識(shí)別出來的結(jié)果。
Step 1.將分割完的圖像用最近鄰差值resize為20*40大小(與字符模板
同樣大小)。
Step 2.采用誤差法衡量匹配度,第p個(gè)分割圖像與第q個(gè)模板匹配的誤
差值為:
Step 3.對(duì)于每個(gè)分割圖像,取誤差值最小的模板當(dāng)做其匹配圖像。
Step 4.輸出每個(gè)分割圖像對(duì)應(yīng)的車牌字符。
function pushbutton9_Callback(hObject, eventdata, handles)
code=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');
SegBw2=double(SegBw2)>20;
if l==1 %第一位漢字識(shí)別
kmin=37;
kmax=43;
elseif l==2 %第二位字母識(shí)別
kmin=11;
kmax=36;
else l>=3 %第三位后字母或數(shù)字識(shí)別
kmin=1;
kmax=36;
end
for k2=kmin:kmax
fname=strcat('字符模板\',code(k2),'.jpg');
SamBw2=imread(fname);
SamBw2=double(SamBw2)>1;
for i=1:40
for j=1:20
SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j);
end
end
%相當(dāng)于兩幅圖相減得第三幅圖
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);
Code(l*2-1)=code(findc(1)+kmin-1);
Code(l*2)=' ';
l=l+1;
end
% 顯示識(shí)別結(jié)果
disp(Code);%disp:顯示變量的值
msgbox(Code,'識(shí)別出的車牌號(hào)');%msgbox:創(chuàng)建消息對(duì)話框
項(xiàng)目不是特別成熟,只能正確識(shí)別出車牌位置比較規(guī)整的圖像,還需要再改進(jìn)。
一是當(dāng)車牌圖像的對(duì)比度較小、光照不均勻、車牌磨損褪色以及有類似車牌紋理特征的干擾時(shí),有效定位率下降;其次在車牌字符分割時(shí),光照不均、對(duì)比度較小、傾斜、污跡、字符粘連和斷裂等嚴(yán)重退化的車牌圖像的字符分割效果也不理想。
五、改進(jìn)1.采用hsv顏色系統(tǒng),添加圖片亮度檢測(cè)環(huán)節(jié),判定圖片景的光照條件,依據(jù)光照強(qiáng)度的不同匹配不同顏色進(jìn)行判斷,進(jìn)而優(yōu)化車牌定位
2.字符識(shí)別匹配環(huán)節(jié)中,可增加多套字符模板,添加不同角度的字符樣板,多次匹配,提高識(shí)別正確率
3.迫于時(shí)間,交互只做了預(yù)處理部分,可以動(dòng)態(tài)調(diào)整參數(shù)值,后面可以多設(shè)置參數(shù)部分,可以根據(jù)不同場(chǎng)景不同角度車牌進(jìn)行調(diào)整
4.學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)進(jìn)行車牌識(shí)別,主要有兩種方法:一種方法是對(duì)待識(shí)別字符進(jìn)行特征提取,然后用獲得的特征來訓(xùn)練神經(jīng)網(wǎng)絡(luò)分類器。另一種方法則充分利用神經(jīng)網(wǎng)絡(luò)的特點(diǎn),直接把待處理圖像輸入網(wǎng)絡(luò),由網(wǎng)絡(luò)自動(dòng)實(shí)現(xiàn)特征提取直至識(shí)別。
基于BP神經(jīng)網(wǎng)絡(luò)的字母識(shí)別系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) - 道客巴巴 (doc88.com)
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
分享標(biāo)題:數(shù)字圖像處理-創(chuàng)新互聯(lián)
文章來源:http://aaarwkj.com/article10/jcedo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、軟件開發(fā)、動(dòng)態(tài)網(wǎng)站、網(wǎng)站策劃、服務(wù)器托管、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容