天天看點

視訊編碼

·視訊讀取介紹

首先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

這個步驟比較簡單,就是将每個視屏幀圖檔變成灰階圖,一般系統處理。

·核心部分,汽車識别和提取

主要是通過和提取的背景進行對比,得到汽車的基本輪廓,然後再通過視訊的前後幀進行差分比對,得到運動汽車。最後對獲得圖檔進行處理提取汽車。

    其流程圖如下所示:

視訊編碼

繼續閱讀