MATLAB小技巧(8)简单车牌定位实例

MATLAB小技巧(8)简单车牌定位实例

前言

MATLAB进行图像处理相关的学习是非常友好的,可以从零开始,对基础的图像处理都已经有了封装好的许多可直接调用的函数,这个系列文章的话主要就是介绍一些大家在MATLAB中常用一些概念函数进行例程演示!

车牌定位是图像处理领域比较常见的目标检测定位的应用了,通过对包含车牌的图像进行处理,根据边缘信息提取到车牌候选区域,再对各连通域进行筛选判断,得到最接近车牌的区域,再通过左右边界确定车票具体分割位置,得到最终的车牌定位结果。

本文通过传统的方法对车牌定位的整个处理过程进行了展现,相对而言对于复杂背景,以及干扰比较严重(比如存在类字符或者类车牌干扰的情况下)的场景,示例扔存在一些误判。想要得到鲁棒性非常好的车牌定位效果的例程,还需要不断对具体算法实现进行调优。

一. MATLAB仿真

%% 简单车牌定位实例
% date:2022-4-24 23:45:24
% author:C.S
clear all;
close all;
clc;

[filename,pathname]=uigetfile('*.jpg;*.png;*.bmp','select the file'); 
im=[pathname,filename]; 
src =imread(im); 
plate =location(src);


function dw=location(i)
%车牌定位方法
i1=rgb2gray(i);%灰度化
figure,imshow(i1);
i2=edge(i1,'Sobel');%边缘检测
figure,imshow(i2);
se=[1;1;1];%列腐蚀算子,腐蚀算子的形状很重要
i3=imerode(i2,se);%此腐蚀可将非车牌区域的噪声信息腐蚀掉
figure,imshow(i3);
se1=strel('rectangle',[25,25]);%方形闭环算子
i4=imclose(i3,se1);%闭环运算 需要选择大的算子
figure,imshow(i4);
i5=bwareaopen(i4,1500);%将连通域面积小于1500像素的区域都删除,此方法是为了把除车牌以外的区域都删除
figure,imshow(i5);
[y,x,z]=size(i5);
i6=double(i5);
Y1=zeros(y,1);
for ii=1:y%统计每一行的像素值为1的个数
    for jj=1:x
        if(i6(ii,jj,1)==1)
            Y1(ii,1)=Y1(ii,1)+1;
        end
    end
end
[temp,MaxY]=max(Y1);%temp为Y1的最大值,MaxY为其所在的行数
figure,plot(1:y,Y1);
PY1=MaxY;
while((Y1(PY1,1)>=50)&&(PY1>1))%求车牌上边界
    PY1=PY1-1;
end
PY2=MaxY;
while((Y1(PY2,1)>=50)&&(PY2<y))%求车牌下边界
    PY2=PY2+1;
end

X1=zeros(1,x);
for jj=1:x%统计每一列的像素值为1的个数,只统计车牌上下边界之间的像素数
    for ii=PY1:PY2
        if(i6(ii,jj,1)==1)
            X1(1,jj)=X1(1,jj)+1;
        end
    end
end
figure,plot(1:x,X1);

PX1=1;
while((X1(1,PX1)<15)&&(PX1<x))%求车牌左边界
    PX1=PX1+1;
end
PX2=x;
while((X1(1,PX2)<15)&&(PX2>PX1))%求车牌右边界
    PX2=PX2-1;
end
PX1=PX1-1;
PX2=PX2+1;
dw=i(PY1:PY2,PX1:PX2,:);%求得车牌区域
figure,imshow(dw);
end

二. 仿真结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

三. 小结

介绍了一个简单的车牌定位实例,后续会介绍一些性能比较好的车牌定位算法进行介绍,包括但不限于传统方法与深度学习方法,对比二者的优缺点进行分析。每天学一个MATLAB小知识,大家一起来学习进步阿!

猜你喜欢

转载自blog.csdn.net/sinat_34897952/article/details/124395516#comments_21911151