【車輛計數(shù)】基于形態(tài)學(xué)實(shí)現(xiàn)停車場車輛計數(shù)matlab源碼
?一、簡介
圖像的二值化的基本原理
圖像的二值化處理就是講圖像上的點(diǎn)的灰度置為0或255,也就是講整個圖像呈現(xiàn)出明顯的黑白效果。即將256個亮度等級的灰度圖像通過適當(dāng)?shù)拈y值選取而獲得仍然可以反映圖像整體和局部特征的二值化圖像。在數(shù)字圖像處理中,二值圖像占有非常重要的地位,特別是在實(shí)用的圖像處理中,以二值圖像處理實(shí)現(xiàn)而構(gòu)成的系統(tǒng)是很多的,要進(jìn)行二值圖像的處理與分析,首先要把灰度圖像二值化,得到二值化圖像,這樣子有利于再對圖像做進(jìn)一步處理時,圖像的集合性質(zhì)只與像素值為0或255的點(diǎn)的位置有關(guān),不再涉及像素的多級值,使處理變得簡單,而且數(shù)據(jù)的處理和壓縮量小。為了得到理想的二值圖像,一般采用封閉、連通的邊界定義不交疊的區(qū)域。所有灰度大于或等于閥值的像素被判定為屬于特定物體,其灰度值為255表示,否則這些像素點(diǎn)被排除在物體區(qū)域以外,灰度值為0,表示背景或者例外的物體區(qū)域。如果某特定物體在內(nèi)部有均勻一致的灰度值,并且其處在一個具有其他等級灰度值的均勻背景下,使用閥值法就可以得到比較的分割效果。如果物體同背景的差別表現(xiàn)不在灰度值上(比如紋理不同),可以將這個差別特征轉(zhuǎn)換為灰度的差別,然后利用閥值選取技術(shù)來分割該圖像。動態(tài)調(diào)節(jié)閥值實(shí)現(xiàn)圖像的二值化可動態(tài)觀察其分割圖像的具體結(jié)果。
二值化是圖像分割的一種方法。在二值化圖象的時候把大于某個臨界灰度值的像素灰度設(shè)為灰度極大值,把小于這個值的像素灰度設(shè)為灰度極小值,從而實(shí)現(xiàn)二值化。
根據(jù)閾值選取的不同,二值化的算法分為固定閾值和自適應(yīng)閾值。 比較常用的二值化方法則有:雙峰法、P參數(shù)法、迭代法和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%%%%%%%%%%%%%兩個點(diǎn)為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%%%%%%%%%%%%減去中間背景點(diǎn)
XX3=XX1+XX2+XX;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%出圖
subplot 221
imshow(I)
三、運(yùn)行結(jié)果


?
?