1. 程式人生 > 其它 >【車輛計數】基於matlab形態學停車場車輛計數【含Matlab原始碼 628期】

【車輛計數】基於matlab形態學停車場車輛計數【含Matlab原始碼 628期】

一、簡介

1 二值形態學
1.1 結構元素的構造與分解

Se=strel(shape,parameters);

如以下語句可以構造一個正方形結構元素:

se=strel('rectangle',[3 3]);

結構元素為:

結構元分解:
結構元B可描述為結構元B1和B2的膨脹:B=B1膨脹B2
比如由5*5的全是1的結構元素可分解為值為1的5元素行矩陣和值為1的5元素列矩陣,結構元素的分解能獲得速度提升。

1.2 腐蝕與膨脹
腐蝕:

J = imerode(I,SE);

膨脹:

J = imdilate(I,SE)

1.3 開操作與閉操作
開操作:

J = imopen(I,SE)

開操作即為先對影象進行腐蝕操作,在對影象進行膨脹操作
作用:去除所有不能包含結構元的部分,平滑目標輪廓,斷開細的連線部分,去掉細的突出
閉操作:

J = imclose(I,SE)

閉操作即為先對影象進行膨脹操作,在對影象進行腐蝕操作
作用:平滑目標的輪廓,並且連線窄的斷裂並填滿細長的“港灣”,填滿閉結構元小的洞。

1.4 形態學濾波器
不同順序(不同結構元大小,不同次數)運用腐蝕膨脹、開閉操作。

1.5 擊中或擊不中變換

BW2 = bwhitmiss(BW,SE1,SE2);

1.6 二值影象的形態學變換

g=bwmorph(f,opration,n);

bwmorph函式可以執行許多以膨脹、腐蝕為基礎的形態學操作,operation是指定的所希望運算的字串,n是重複次數,預設為1,可以是Inf.
可進行操作包括細化,粗化,骨架,剪裁等等

1.7 形態學操作
刪除小面積物件

BW2 = bwareaopen(BW,P)

刪除二值影象BW中面積小於P的物件,預設情況下使用8鄰域。

刪除邊界物體

IM2 = imclearborder(IM);

刪除和影象邊界相連的物件。若IM是二值圖,imclearborder將刪除和影象邊界相連的物件。預設情況conn=8。

極限腐蝕

BW2 = bwulterode(BW)

區域/孔洞填充

BW2 = imfill(BW,'holes')

重建

IM = imreconstruct(marker,mask);

通過重建開操作:對影象先進行腐蝕操作,利用腐蝕的影象作為標記,利用原影象作為模板,進行重建。

2 灰度形態學
2.1 膨脹與腐蝕
二值形態學腐蝕膨脹定義的擴充套件。
腐蝕:小於結構元的峰頂將被削除
膨脹:小於結構元的谷底將被彌合

2.2 開操作與閉操作
二值形態學開操作閉操作定義的擴充套件。
開操作:先腐蝕,後膨脹
閉操作:先膨脹,後腐蝕

2.3 形態學影象平滑
先開操作,再閉操作
可以減少或去除人為亮和暗的因素或噪聲。

2.4 頂帽操作與底帽操作
頂帽操作:

J = imtophat(I,SE)

原影象減去影象開操作結果,去除影象暗部,突出亮部細節

二、原始碼

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)

三、執行結果

四、備註

版本:2014a

完整程式碼或代寫加1564658423