数字图像处理 原理与实践(MATLAB)实验四 入门教学 图像分割出汽车的车牌

242 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

实验四

1.图像分割出汽车的车牌

close all;
clear all;
clc;
I=imread('车牌.jpg');%读取图片 
[y,x,z]=size(I);%给定图片大小 
myI=double(I);%返回双精度值 
%RGB to HSI
tic  %计时开始   
%Y 方向 
Blue_y=zeros(y,1);%一列全零矩阵
for i=1:y%给定i的范围      
		for j=1:x%给定j的范围             
			if((myI(i,j,1)<=30)&&((myI(i,j,2)<=62)&&(myI(i,j,2)>=51))&&((myI(i,j,3)<=142)&&				(myI(i,j,3)>=119))) % 蓝色RGB的灰度范围 
               Blue_y(i,1)= Blue_y(i,1)+1;   % y矩阵加一                    
			end       
		end       
end 
[temp MaxY]=max(Blue_y);        % Y方向车牌区域确定 
PY1=MaxY;%y矩阵的最大元素 
while ((Blue_y(PY1,1)>=5)&&(PY1>1))% 确定蓝色RGB Blue_y所在位置  
       PY1=PY1-1; %对车牌区域的修正,向上调整
       end     
PY2=MaxY; %y矩阵的最大元素  
while ((Blue_y(PY2,1)>=5)&&(PY2<y))%确定蓝色RGB Blue_y所在位置
	PY2=PY2+1;%对车牌区域的修正向下调整
end
IY=I(PY1:PY2,:,:);%行的范围
%X方向
Blue_x=zeros(1,x);%一行全一矩阵
for j=1:x%给定J的取值范围
	for i=PY1:PY2
		if((myI(i,j,1)<=30)&&((myI(i,j,2)<=62)&&(myI(i,j,2)>=51))&&((myI(i,j,3)<=142)&&(myI(i,j,3)>=119)))%调整I中的范围
		Blue_x(1,j)=Blue_x(1,j)+1;%Blue_x的矩阵加一
		end
	end
end
PX1=1;%当PX1等于1时 
while ((Blue_x(1,PX1)<3)&&(PX1<x)) %确定蓝色RGB Blue_x的位置        
	PX1=PX1+1; %对车牌区域的修正向下调整
end 
PX2=x;%PX2等于x
while((Blue_x(1,PX2)<3)&&(PX2>PX1))%确定蓝色RGB Blue_x的位置
	PX2=PX2-1;%对车牌区域的修正向下调整
end
PX1=PX1-2; % 对车牌区域的修正
PX2=PX2+2; %对车牌区域的修正 



Plate=I(PY1:PY2,PX1-2:PX2,:);%矩阵行列的范围 
t=toc % 读取计时 

figure,imshow(I);%创建图像窗口,显示图像I 
figure,plot(Blue_y);grid%创建图像窗口,绘制Blue_y图像,画出网格线
figure,plot(Blue_x);grid%创建图像窗口,绘制Blue_x图像,画出网格线 
figure,imshow(Plate); %创建图像窗口,显示图像Plate  

车牌

image-20211202113417979