資源簡介
程序運行無誤,有注釋,條理清晰。壓縮包含所有.m文件

代碼片段和文件信息
%ex1505
clc
clear
filename=‘E:\matlab7.0\car.jpg‘;%圖片的路徑
I=im2gray(filename);%調用自編函數讀取圖像,并轉化為灰度圖象;
tic???%計時開始
[heightwidth]=size(I);
%預處理
I_edge=zeros(heightwidth);%創建height*width矩陣
for?i=1:width-1%對每一列進行遍歷
????I_edge(:i)=abs(I(:i+1)-I(:i));%每列的值賦為原圖像中左右兩列相減的絕對值(即梯度)
end
%?歸一化處理(0~255)
I_edge=(255/(max(max(I_edge))-min(min(I_edge))))*(I_edge-min(min(I_edge)));
[I_edgey1]=select(I_edgeheightwidth);???%%%%%%調用select函數選擇圖像的某個區域
BW2?=?I_edge;%
%%%%%%%%%%%%%%%%一些形態學處理
SE=strel(‘rectangle‘[1010]);%創建10*10的建構元素
IM2=imerode(BW2SE);%腐蝕
IM2=bwareaopen(IM220);%刪除小面積
IM3=imdilate(IM2SE);%膨脹
?????????????????????%先腐蝕再膨脹,進行了開運算,消除小物體
%%%%%%%%%%%%%%%%%%投影以粗略估計車牌位置
p_h=projection(double(IM3)‘h‘);????????????????%調用projection函數,水平方向
if(p_h(1)>0)
????p_h=[0p_h];
end
p_v=projection(double(IM3)‘v‘);????????????????%調用projection函數,垂直方向
if(p_v(1)>0)
????p_v=[0p_v];
end
%%%%%%
p_h=double((p_h>5));%水平方向
p_h=find(((p_h(1:end-1)-p_h(2:end))~=0));
len_h=length(p_h)/2;
%%%%%
p_v=double((p_v>5));%垂直方向
p_v=find(((p_v(1:end-1)-p_v(2:end))~=0));
len_v=length(p_v)/2;
%%%%%%%%%%%
%%%%%%%%%%%%%%%%%粗略計算車牌候選區
k=1;
for?i=1:len_h
????for?j=1:len_v
????????s=IM3(p_h(2*i-1):p_h(2*i)p_v(2*j-1):p_v(2*j));
????????if(mean(mean(s))>0.1)
????????????p{k}=[p_h(2*i-1)p_h(2*i)+1p_v(2*j-1)p_v(2*j)+1];
????????????k=k+1;
????????end
????end
end
k=k-1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%進一步縮小車牌候選區
for?i=1:k
???edge_IM3=double(edge(double(IM3(p{i}(1):p{i}(2)p{i}(3):p{i}(4)))‘canny‘));
???[xy]=find(edge_IM3==1);
???p{i}=[p{i}(1)+min(x)p{i}(2)-(p{i}(2)-p{i}(1)+1-max(x))...
?????????p{i}(3)+min(y)p{i}(4)-(p{i}(4)-p{i}(3)+1-max(y))];
???p_center{i}=[fix((p{i}(1)+p{i}(2))/2)fix((p{i}(3)+p{i}(4))/2)];
???p_ratio(i)=(p{i}(4)-p{i}(3))/(p{i}(2)-p{i}(1));
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%對上面參數和變量的說明:p為一胞元,用于存放每個圖像塊的左上和右下兩個點的坐標;
%存放格式為:p{k}=[x1x2y1y2];x1x2分別為行坐標,y1y2為列坐標
%p_center為一胞元用于存放每個圖像塊的中心坐標p_center{k}=[xy];xy分別為行列坐標
%p_ratio為一矩陣,用來存放圖像塊的長寬比例
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%合并臨近區域%%%%%%%
%如果有多個區域則執行合并
if?k>1
????n=0;
????ncount=zeros(1k);
????for?i=1:k-1
????????%%%需要調整if條件中的比例
????????%%%需要調整
????????%檢查是否滿足合并條件
????????if(abs(p{i}(1)+p{i}(2)-p{i+1}(1)-p{i+1}(2))<=height/30&&abs(p{i+1}(3)-p{i}(4))<=width/15)
????????????p{i+1}(1)=min(p{i}(1)p{i+1}(1));
????????????p{i+1}(2)=max(p{i}(2)p{i+1}(2));
????????????p{i+1}(3)=min(p{i}(3)p{i+1}(3));
????????????p{i+1}(4)=max(p{i}(4)p{i+1}(4));??%向后合并
????????????n=n+1;
????????????ncount(n)=i+1;
????????end
????end
????%如果有合并,求出合并后最終區域
????if(n>0)
????????d_ncount=ncount(2:n+1)-ncount(1:n);???%避免重復記錄臨近的多個區域。
????????index=find(d_ncount~=1);
????????m=length(index);
????????for?i=1:m
????????????pp{i}=p{ncount(index(i))};
????????????
????????????%重新記錄合并區域的比例
????????????pp_ratio(i)=(pp{i}(4)-pp{i}(3))/(pp{i}(2)-pp{i}(1));?????
????????end
????????p=pp;???%更新區域記錄
?????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1818??2014-02-22?13:02??matlab?車牌定位(源程序)\cp.jpg
?????文件???????4281??2014-02-22?12:29??matlab?車牌定位(源程序)\ex1505.asv
?????文件???????4340??2014-05-08?13:44??matlab?車牌定位(源程序)\ex1505.m
?????文件???????1372??2014-02-22?10:47??matlab?車牌定位(源程序)\im2gray.m
?????文件????????127??2010-08-29?09:16??matlab?車牌定位(源程序)\projection.m
?????文件???????1250??2014-02-22?12:24??matlab?車牌定位(源程序)\select.asv
?????文件???????1274??2014-02-22?12:25??matlab?車牌定位(源程序)\select.m
?????文件??????17454??2014-05-08?13:49??matlab?車牌定位(源程序)\基于matlab的汽車牌照識別源程序.docx
?????目錄??????????0??2015-04-21?16:11??matlab?車牌定位(源程序)
-----------?---------??----------?-----??----
????????????????31916????????????????????9
- 上一篇:基于sift特征的人民幣識別matlab版
- 下一篇:自動尋峰谷算法matlab實現
評論
共有 條評論