·視訊讀取介紹
首先MATLAB中對于視屏支援較好的格式為8bit,16bit,24bit的AVI格式,是以我們首先要将您提供的WMV檔案轉換為對應的AVI格式,以友善處理。此外,為了防止出現OUT OF MEMORY的問題,我們在給你做的時候,将視訊的大小變小了,改為320*240.然後由于系統不要求采用實時的做法,是以我們直接壓縮為沒秒10幀的格式
注意,用我們提供的轉換軟體進行轉換,轉換參數配置界面如下所示。
此外,由于源視屏時間比較長,這對于一般電腦來說,在MATLAB中會出現OUT OF MEMORY的錯誤,是以我們需要将視訊結成不同的長度的視訊,這裡,我們将視訊截成3s,15frame/s的視屏格式。
這裡我們從你提供的視屏中截取了5個小片段,分包有機車,小汽車,大卡車,面包車,以及行人等各類因素。是以能說明問題了。
對應代碼為
function [Obj,frameNum] = get_AVI(datas);
Obj = mmreader(datas);
frameNum = get(Obj,'NumberOfFrames');
end
注意MATLAB對AVI,WMV格式的限制,是以最好先對視屏檔案處理一下。
·背景的提取
本系統一個比較重要的部分就是背景的提取。
背景差分法,假設在提取運動目标的過程中其對應的背景是固定不變的,在這種條件下,該方法能精确的提取出快速、緩慢運動和靜止的前景目标。正是由于這種特點,背景分差法對背景的變化非常敏感,隻要背景發生較大的變化,則可能造成誤檢的現象。
在高速公路監控圖像中,通過标定場景路面圖像作為圖像處理區域,其背景圖像簡單,而且每個背景點上的顔色分布比較集中。是以可以采用運算速度快、性能較好的統計學背景模型——序列均值法。
就是對一個視屏的像素求和再平均,由于過往的車輛是少數,是以求平均之後,其得到的像素值基本接近了背景。
function [back_ground,back1] = get_background(Obj,frameNum_Original);
for i = 1:frameNum_Original
pixel(:,:,i) = rgb2gray(read(Obj,i));
end
rows = size(pixel,1);%240
cols = size(pixel,2);%320
for i = 1:rows
for j = 1:cols
back1(i,j) = 0;
end
end
for k = 1:frameNum_Original
for i = 1:rows
for j = 1:cols
back1(i,j) = back1(i,j)+ double(pixel(i,j,k));
end
end
end
for i = 1:rows
for j = 1:cols
back_ground(i,j) = uint8(back1(i,j)/frameNum_Original);
end
end
·視訊預處理
for i = 1:frameNum
pixel(:,:,i) = rgb2gray(read(Obj,i));
end
這個步驟比較簡單,就是将每個視屏幀圖檔變成灰階圖,一般系統處理。
·核心部分,汽車識别和提取
主要是通過和提取的背景進行對比,得到汽車的基本輪廓,然後再通過視訊的前後幀進行差分比對,得到運動汽車。最後對獲得圖檔進行處理提取汽車。
其流程圖如下所示: