实验四 图像分割

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