基于边缘检测的车牌定位

刚开始接触图像处理做的试验项目,想法比较简单,限制多弊端较大,对图片质量要求比较高,如果灰度变化太大又或者预处理后得到的二值图像的连通区域出现与车牌所处区域面积相近,效果就差了很多。图像的预处理是通过增加对比度以及形态学处理得到的。想要得到理想效果需要多次重复操作。

有很多不足之处,还请各位大神指教。


直接上效果图

   

下面是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;



猜你喜欢

转载自blog.csdn.net/revitalise/article/details/79330699