%程序功能:实现车牌自动定位
%修改内容:增加合并区域操作,第88行开始
%修改内容:77,84行 对车牌长宽比阈值进行修改,
% 同时对候选车牌区域增加长宽限制,即该区域不能占整个图像的比例不能太小和太大
% 对检测出来无车牌的情况进行提示
% 可修改阈值如下:threshold1, threshold2, 功能: 区域合并的条件 函数mycombine的参数
% threshold3, 功能:候选车牌区域长宽比阈值
% threshold4 功能:车牌区域占整个图像比列阈值
clear;clc;close all
%%%%%% 阈值设置,可修改 查看阈值具体最用"Ctrl+F" 查找相关阈值名 %%%%%%%%
%%%%%%%%%%%%%%可根据实际情况修改
threshold1=0.5; threshold2=1/20;
threshold3=2.5; threshold4=[1/7,1/3,1/12,1/6]; %顺序为宽的最小最大,高的最小最大
filename='2.jpg';
I=im2gray(filename);%调用自编函数读取图像,并转化为灰度图象;
tic %计时开始
[height,width]=size(I);
%预处理
I_edge=zeros(height,width);
for i=1:width-1
I_edge(:,i)=abs(I(:,i+1)-I(:,i));
end
I_edge=(255/(max(max(I_edge))-min(min(I_edge))))*(I_edge-min(min(I_edge)));
[I_edge,y1]=select(I_edge,height,width); %%%%%%调用select函数
BW2 = I_edge;%
%%%%%%%%%%%%%%%%一些形态学处理
SE=strel('rectangle',[6,6]);
IM2=bwareaopen(BW2,20);%开运算,消除细小物体
IM2=imerode(IM2,SE);%腐蚀
IM3=imdilate(IM2,SE);%膨胀
SE=strel('rectangle',[5,5]);
IM3=imdilate(IM3,SE);%膨胀
%%%%%%%%%%%%%%计算区域的外接矩形
boundaries = bwboundaries(IM3); %调用函数 bwboundaries
k=length(boundaries);
kkk=k;
rectange=cell(1,k);
for i=1:k
b = boundaries{i};
rectange{i}(1)=min(b(:,1));rectange{i}(2)=max(b(:,1));%矩形的行起点与终点
rectange{i}(3)=min(b(:,2));rectange{i}(4)=max(b(:,2));%矩形的列起点与终点
rec_center{i}=[fix((rectange{i}(1)+rectange{i}(2))/2),fix((rectange{i}(3)+rectange{i}(4))/2)];%矩形中心
rec_ratio(i)=(rectange{i}(4)-rectange{i}(3))/(rectange{i}(2)-rectange{i}(1));%矩形长宽比
end
bp=rectange;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%对上面参数和变量的说明:rectange为一胞元,用于存放每个图像块的左上和右下两个点的坐标;
%存放格式为:rectange{k}=[x1,x2,y1,y2];x1,x2分别为行坐标,y1,y2为列坐标
%rec_center为一胞元,用于存放每个图像块的中心坐标,p_center{k}=[x,y];x,y分别为行,列坐标
%rec_ratio为一矩阵,用来存放图像块的长宽比例
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%合并临近区域%%%%%%%%%%%%%
[rectange,rec_center,rec_ratio]=mycombine(rectange,height,width,threshold1,threshold2);
%调用自编函数mycombine,其中最后两个为阈值,需要调整
k=length(rectange); %更新区域个数
bp=rectange;
kkk=k;
%%%%%%%%%%%%%%合并结束%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%根据区域比例判断是否为车牌区域%%%%%%%%%%%%
m=1;T=0.6*max(rec_ratio);%0.8参数需要调整
T=min(T,threshold3); %阈值选取
for i=1:k
% imshow(I(rectange{i}(1):rectange{i}(2),rectange{i}(3):rectange{i}(4)))
if(rec_ratio(i)>=T&rec_ratio(i)<15)
disw=rectange{i}(4)-rectange{i}(3);
dish=rectange{i}(2)-rectange{i}(1);
if((disw>=width*threshold4(1) & disw<=width*threshold4(2))...
&(dish>=height*threshold4(3) & dish<=height*threshold4(4)))
%参数可修改
%车牌区域宽度各高度占整个图像的大小必能太大也不能太小
p1{m}=rectange{i};
m=m+1;
end
end
end
%判断是否检测到车牌
if(m==1)
toc;
disp('检测无车牌........!');
figure
subplot(221);imshow(I);
subplot(222);imshow(BW2);
subplot(223);imshow(IM2);
subplot(224);imshow(IM3);
else
rectange=p1;clear p1;
k=m-1; %更新区域
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%根据颜色比判定是否为车牌%
%%%%%需要改进
l=1;
for i=1:k
index=rectange{i};
if(isplate(I(index(1):index(2),index(3):index(4))))
plate{l}=index;
l=l+1;
end
end
if(l>1)
rectange=plate;
k=l-1;
end
%%%%%%%%%%%判定结束%%%%%%%%%%%%%%%%%%%%%
toc %计时结束
clear edge_IM3;clear x; clear y; % 清空部分变量
if(k==1)
imwrite(I(index(1)-2:index(2),index(3):index(4)),'bmw.jpg');
end
%%%%%%%%%%%%%%%%显示
figure;
% I(rectange{1}(1)-2:rectange{1}(1),rectange{1}(3)-2:rectange{1}(4)+2)=255;
% I(rectange{1}(2):rectange{1}(2)+2,rectange{1}(3)-2:rectange{1}(4)+2)=255;
% I(rectange{1}(1)-2:rectange{1}(2)+2,rectange{1}(3)-2:rectange{1}(3))=255;
% I(rectange{1}(1)-2:rectange{1}(2)+2,rectange{1}(4):rectange{1}(4)+2)=255;
imshow(I);
imwrite(I,'I.jpg')
subplot(221);imshow(I);
I(rectange{1}(1),rectange{1}(3):rectange{1}(4))=255;
I(rectange{1}(2),rectange{1}(3):rectange{1}(4))=255;
subplot(222);imshow(BW2);
subplot(223);imshow(IM2);
subplot(224);imshow(IM3);
hold on
for i=1:kkk
plot(bp{i}(3):bp{i}(4),bp{i}(1)*ones(1,bp{i}(4)+1-bp{i}(3)),'g');
plot(bp{i}(3):bp{i}(4),bp{i}(2)*ones(1,bp{i}(4)+1-bp{i}(3)),'g');
plot(bp{i}(3)*ones(1,bp{i}(2)+1-bp{i}(1)),bp{i}(1):bp{i}(2),'g');
plot(bp{i}(4)*ones(1,bp{i}(2)+1-bp{i}(1)),bp{i}(1):bp{i}(2),'g')
end
%%%%%%%%%%%%%%%%%显示
figure
for i=1:k
subplot(k,1,i)
index=rectange{i};
imshow(I(index(1):index(2),index(3):index(4)));
end
end
%%%%%%%%%%%%%%%%
%figure;
%I1=I.*uint8(IM3);imshow(I1)
%plot(b(:,2),b(:,1),'g','LineWidth',3);
License-plate-location.rar_license plate_车牌定位 matlab
版权申诉
155 浏览量
2022-07-14
02:31:47
上传
评论
收藏 1.04MB RAR 举报
周楷雯
- 粉丝: 78
- 资源: 1万+
最新资源
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
- 以下是一个简化的示例,它使用pygame库来模拟烟花动画的框架.txt
- Linux线程同步机制深度解析与实用指南.zip
- PTA题库C语言解题策略与实战.rar
- SVPWM控制技术的simulink建模与仿真【包括simulink模型,参考文献,操作步骤】
- AI高清修复图片画质易语言易语言源码易语言填表
- 映射窗口.ec易语言易语言模块CPU占用0%游戏监控窗口监控
- 易语言 361窗口模块高效、便捷、自封装、自用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈