【车辆计数】基于形态学实现停车场车辆计数matlab源码
一、简介
图像的二值化的基本原理
图像的二值化处理就是讲图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,特别是在实用的图像处理中,以二值图像处理实现而构成的系统是很多的,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像,这样子有利于再对图像做进一步处理时,图像的集合性质只与像素值为0或255的点的位置有关,不再涉及像素的多级值,使处理变得简单,而且数据的处理和压缩量小。为了得到理想的二值图像,一般采用封闭、连通的边界定义不交叠的区域。所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。如果某特定物体在内部有均匀一致的灰度值,并且其处在一个具有其他等级灰度值的均匀背景下,使用阀值法就可以得到比较的分割效果。如果物体同背景的差别表现不在灰度值上(比如纹理不同),可以将这个差别特征转换为灰度的差别,然后利用阀值选取技术来分割该图像。动态调节阀值实现图像的二值化可动态观察其分割图像的具体结果。
二值化是图像分割的一种方法。在二值化图象的时候把大于某个临界灰度值的像素灰度设为灰度極大值,把小于这个值的像素灰度设为灰度極小值,从而实现二值化。
根据阈值选取的不同,二值化的算法分为固定阈值和自适应阈值。 比较常用的二值化方法则有:双峰法、P参数法、迭代法和OTSU法等。
二、源代码
clc;
clear all
I=imread('C:\Users\lenovo\Desktop\新建文件夹\2.png');
G=rgb2gray(I);
% G=histeq(G);
H=imhist(G);
% bar(H);
[a,b]=size(G);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%提取白车
G=G-100;
for i=1:1:a
for j=1:1:b
if G(i,j)>=25
G2(i,j)=1;
else
G2(i,j)=0;
end
end
end
se1=strel('square',10);
G4=imdilate(G2,se1);
se1=strel('square',15);
G4=imerode(G4,se1);
XX=bwlabel(G4,8);
white=max(max(XX))/2%%%%%%%%%%%%%两个点为1个白车
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%提取黑车
G=rgb2gray(I);
G=G+100;
[a,b]=size(G);
for i=1:1:a
for j=1:1:b
if G(i,j)<=150
G1(i,j)=1;
else
G1(i,j)=0;
end
end
end
se1=strel('square',20);%20
G4=imerode(G1,se1);
se1=strel('square',35); %35
G5=imdilate(G4,se1);
XX1=bwlabel(G5,8);
black=max(max(XX1))-2%%%%%%%%%%%%%%减去两个背景
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%提取棕车
G=rgb2gray(I);
[a,b]=size(G);
for i=1:1:a
for j=1:1:b
if G(i,j)<=100&&G(i,j)>=70
G1(i,j)=1;
else
G1(i,j)=0;
end
end
end
se1=strel('square',30);
G4=imerode(G1,se1);
se1=strel('square',30);
G5=imdilate(G4,se1);
XX2=bwlabel(G5,8);
brown=max(max(XX2))-1%%%%%%%%%%%%减去中间背景点
XX3=XX1+XX2+XX;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%出图
subplot 221
imshow(I)
三、运行结果

