1. 程式人生 > >基於邊緣檢測的車牌定位

基於邊緣檢測的車牌定位

剛開始接觸影象處理做的試驗專案,想法比較簡單,限制多弊端較大,對圖片質量要求比較高,如果灰度變化太大又或者預處理後得到的二值影象的連通區域出現與車牌所處區域面積相近,效果就差了很多。影象的預處理是通過增加對比度以及形態學處理得到的。想要得到理想效果需要多次重複操作。

有很多不足之處,還請各位大神指教。

直接上效果圖

   

下面是matlab實現程式:

close all;clc;
I=imread('F:\matlab\MATLAB上機操作\圖形\2.jpg');
%影象預處理
re=license_plate_regulation(I);
i2=edge(re,'roberts');%邊緣檢測
imshow(i2);
se=[1;1;1];%腐蝕運算元
i3=imerode(i2,se);%此腐蝕可將非車牌區域的噪聲資訊腐蝕掉
figure,imshow(i3);
se1=strel('rectangle',[25,25]);%建立25*25的矩形結構元素
i4=imclose(i3,se1);%閉環運算 需要選擇大的運算元
figure,imshow(i4);
figure
imshow(i4,[])
xlabel('(a)original image')

se=strel('disk',7);%產生結構元素,7為多次實驗後的得到的結果
A2=imopen(i4,se);%開運算先腐蝕後膨脹,去掉面積相對車牌小的區域。
figure
imshow(A2,[])

xlabel(['(b)Erosion with a disk of radius ',num2str(7)])

%車牌定位

[m,n]=size(A2);
z=zeros(40,50);
for i=2:m-1%得到車牌的左右邊界
    for j=2:n-1
        if (A2(i,j+1)<A2(i,j))||(A2(i,j)>A2(i,j-1))
            z(j)=j;
        end
    end
end
b1=find(z);
jmax=max(b1)+5;
jmin=min(b1)-5;
z1=zeros(40,50);%得到車牌的上下邊界
for i=2:m-1
    for j=2:n-1
        if (A2(i+1,j)<A2(i,j))||(A2(i,j)>A2(i-1,j))
            z1(i)=i;
        end
    end
end
c1=find(z1);
imax=max(c1)+5;
imin=min(c1)-5;
dw=re(imin:imax,jmin:jmax);%求得車牌區域
figure,imshow(dw)

車牌傾斜矯正函式(摘自《影象處理例項講解》)

function re=license_plate_regulation(I)
%讀取原始的車牌影象;
I1=rgb2gray(I);
I2=wiener2(I1,[5 5]);%對影象進行維納濾波
I3=edge(I2,'sobel','horizontal');%利用sobel運算元,檢測影象邊緣直線
[m,n]=size(I3);%計算影象大小
rou=round(sqrt(m^2+n^2));%獲取rou最大值
theta=180;%獲取theta的最大值
r=zeros(rou,theta);%產生量化初值為0的計數矩陣
for i=1:m
    for j=1:n
        if I3(i,j)==1
            for k=1:theta
                ru=round(abs(i*cos(k*3.14/180)+j*sin(k*3.14/180)));
                r(ru+1,k)=r(ru+1,k)+1;
            end
        end
    end
end
r_max=r(1,1);
for i=1:rou
    for j=1:theta
        if r(i,j)>r_max
            r_max=r(i,j);
            c=j;
        end
    end
end
if c<=90
    rot_theta=-c;%確定旋轉角度
else
    rot_theta=180-c;
end
I4=imrotate(I2,rot_theta,'crop');%對圖片進行旋轉,矯正影象
set(0,'defaultFigurePosition',[100,100,1200,450]);%修改圖形影象的預設設定
set(0,'defaultFigureColor',[1 1 1])%修改圖形背景顏色的設定
re=I4;