《數(shù)字圖像處理課程設計》由會員分享,可在線閱讀,更多相關《數(shù)字圖像處理課程設計(14頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、
數(shù)字圖像處理課程設計
車牌處理
姓名:
學號:
一、設計目的
利用matlab實現(xiàn)車牌識別系統(tǒng),熟悉matlab應用軟件的基礎知識,了解了基本程序設計方法,利用其解決數(shù)字信號處理的實際應用問題,從而加深對理論知識的掌握,并把所學的知識系統(tǒng)、高效的貫穿到實踐中來,避免理論與實踐的脫離,鞏固理論課上知識的同時,加強實踐能力的提高,理論聯(lián)系實踐,提高自身的動手能力。同時不斷的調試程序也提高了自己獨立編程水平,并在實踐中不斷完善理論基礎,有助于自身綜合能力的提高。
2、
二、設計的內容
學習MATLAB程序設計,利用MATLAB函數(shù)功能,設計和實現(xiàn)通過設計一個車牌識別系統(tǒng)。車牌識別系統(tǒng)的基本工作原理為:將手機拍攝到的包含車輛牌照的圖像輸入到計算機中進行預處理,再對牌照進行搜索、檢測、定位,并分割出包含牌照字符的矩形區(qū)域,然后對牌照字符進行二值化并將其分割為單個字符,然后將其逐個與創(chuàng)建的字符模板中的字符進行匹配,匹配成功則輸出,最終匹配結束則輸出則為車牌號碼的數(shù)字。
三、程序代碼
clear all;
close all;
clc;
[Ic,map]=imread(E:\car.jpg);
figure;
imshow(Ic);
ti
3、tle(圖1 彩色車牌);
Igray=rgb2gray(Ic);
figure;
imshow(Igray);
title(圖2 灰度車牌);
I2bw=im2bw(Igray,0.3);
figure;
imshow(I2bw);
title(圖3 二值圖像);
BW=edge(Igray,sobel);
figure;
imshow(BW);
title(圖4 邊沿檢測);
msk=[0 0 0 0 0;
0 1 1 1 0;
0 1 1 1 0;
0 1 1 1 0;
0 0 0 0 0;];
B0=c
4、onv2(double(BW),double(msk));
figure;
imshow(B0);
title(圖5 邊沿增強);
se=ones(2,50);
B1=imdilate(B0,se);
figure;
imshow(B1);
title(圖6 第一次膨脹);
B2=imerode(B1,se);
figure;
imshow(B2);
title(圖7 第一次腐蝕);
se=ones(15,2);
B3=imdilate(B2,se);
figure;
imshow(B3);
title(圖8 第二次膨脹);
B4=imero
5、de(B3,se);
figure;
imshow(B4);
title(圖9 第二次腐蝕);
se=ones(10,2);
B5=imdilate(B4,se);
figure;
imshow(B5);
title(圖10 第三次膨脹);
B6=imerode(B5,se);
figure;
imshow(B6);
title(圖11 第三次腐蝕);
[B,L]=bwboundaries(B6,4);
figure;
imshow(label2rgb(L,@jet,[.5 .5 .5]));
hold on
for k=1;lengt
6、h(B)
boundary=B{k};
plot(boundary(:,2),boundary(:,1),w,LineWidth,2)
end
stats=regionprops(L,Area,Centroid);
for k=1:length(B)
boundary=B{k};
delta_sq=diff(boundary).^2;
perimeter=sum(sqrt(sum(delta_sq,2)));
area=stats(k).Area;
metric=27*area/perimet
7、er^2;
metric_string=sprintf(%2.2f,metric);
if metric>=0.85&&metric<=1.15&&area>1000
centroid=stats(k).Centroid;
plot(centroid(1),centroid(2),ko);
goalboundary=boundary;
s=min(goalboundary,[],1);
e=max(goalboundary,[],1);
goal=i
8、mcrop(I2bw,[s(2) s(1) e(2)-s(2) e(1)-s(1)]);
end
text(boundary(1,2)-35,boundary(1,1)+13,metric_string,Color,g,FontSize,14,Fontweight,bold);
end
goal=~goal;
figure;
imshow(goal);
title(檢測出的車牌);
%%%%車牌識別%%%%%
%裁剪
goal=my_imtrim(goal);
figure;
imshow(goal);
title(裁剪后的
9、車牌區(qū)域);
%分割
[w1,w2,w3,w4,w5,w6]=my_cut(goal);
figure;
subplot(2,6,1); imshow(w1);
subplot(2,6,2); imshow(w2);
subplot(2,6,3); imshow(w3);
subplot(2,6,4); imshow(w4);
subplot(2,6,5); imshow(w5);
subplot(2,6,6); imshow(w6);
[w1,w2,w3,w4,w5,w6]=my_norm(w1,w2,w3,w4,w5,w6,[40,20]);
subplo
10、t(2,6,7); imshow(w1);
subplot(2,6,8); imshow(w2);
subplot(2,6,9); imshow(w3);
subplot(2,6,10); imshow(w4);
subplot(2,6,11); imshow(w5);
subplot(2,6,12); imshow(w6);
% fname=strcat(D:\std_test_images\photo\,D,.jpg);
% [t1,map]=imread(fname);
% fname=strcat(D:\std_test_images\photo\,O,
11、.jpg);
% [t2,map]=imread(fname);
% [corr2(w2,t1),corr2(w2,t2)]
lcode=char([A:Z,unknown]);
temp=[];
w=[w1,w2,w3,w4,w5,w6];
for k=1:26
fname=strcat(E:\photo\,lcode(k),.jpg);
[t,map]=imread(fname);
temp=[temp,t];
end
num=strcat(車牌號為:);
for i=1:6
sample=w(:,20*(i-1)+1:20*(
12、i-1)+20);
flag=27;
rel=-1;
for j=1:26
templet=temp(:,20*(j-1)+1:20*(j-1)+20);
if corr2(templet,sample)>rel
rel=corr2(templet,sample);
flag=j;
end
end
num=strcat(num,32,lcode(flag));
end
num
figure
imshow(Ic)
title(nu
13、m)
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 widey2
d(:,[1:wide])=0;
if sum(sum
14、(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;
15、
function [w1,w2,w3,w4,w5,w6] = my_cut( im )
%將裁剪后的圖像分割為6個字符
% 提取第一個字符
[m,n]=size(im);
left=1;
right=1;
while sum(im(:,right))>0 && right
16、hile sum(im(:,right))>0 && right0 && right
17、
while sum(im(:,right))==0 && right0 && right0 && right<
18、n
right=right+1;
end
w5=imcrop(im,[left,1,right-left-1,m]);
% 提取第六個字符
while sum(im(:,right))==0 && right0 && right
19、出的車牌區(qū)域的邊緣進行裁剪
% 使圖像邊沿緊貼車牌號
% 第一次裁剪
[m,n]=size(im);
left=floor(n/20);
right=n-left;
while sum(im(:,left))>m/5 && leftm/5 && right>1
right=right-1;
end
im=imcrop(im,[left 1 right-left m]);
% 第二次裁剪
[m,n]=size(im);
top=1;
bottom=m;
whil
20、e sum(im(top,:))>0 && top0 && bottom>1
bottom=bottom-1;
end
im=imcrop(im,[1 top n bottom-top]);
% 第三次裁剪
[m,n]=size(im);
top=1;
bottom=m;
left=1;
right=n;
while sum(im(top,:))==0 && top
21、& bottom>1
bottom=bottom-1;
end
while sum(im(:,left))==0 && left1
right=right-1;
end
goal=imcrop(im,[left,top,right-left,bottom-top]);
end
function [w1,w2,w3,w4,w5,w6] = my_norm(w1,w2,w3,w4,w5,w6,x)
%將提取出的字符統(tǒng)一大小
w1=imr
22、esize(w1,x);
w2=imresize(w2,x);
w3=imresize(w3,x);
w4=imresize(w4,x);
w5=imresize(w5,x);
w6=imresize(w6,x);
end
四、設計結果
五、心得體會
通過這次課程設計,讓我又一次了解和熟悉了MATLAB這個強大的處理工具,這次課程設計雖然初期由于自己基礎不扎實,在設計實現(xiàn)過程中遇到了很多麻煩和問題,花了很多不必要的時間,好在自己還是堅持了下來,積極想辦法解決問題,沒有放棄,最終才能做到這個地步,有一點小小的成就感。同時也明白了做什么事尤其是科研,專注和堅持是很重要的。