基於視頻的車輛識別
注:
開發環境:matlab 2014a
本次是為了2016年的暑假實訓項目,第一次使用matlab
現將代碼貼出來:
% 創建系統對象,用於讀入待處理視頻 filename = 'G:\源視頻.avi'; hvfr = vision.VideoFileReader(filename, 'ImageColorSpace', 'RGB'); % 創建系統對象,用於色彩空間轉換 hcsc = vision.ColorSpaceConverter('Conversion', 'RGB to intensity'); % 創建系統對象,用於用高斯混合模型檢測背景 hfdet = vision.ForegroundDetector(... 'NumTrainingFrames', 5, ... % 取連續五幀進行檢測背景 'InitialVariance', (30/255)^2); % 初始標准差為 30/255 % 創建系統對象,用於檢測出包含汽車運動的圖像塊 hblob = vision.BlobAnalysis( ... 'CentroidOutputPort', false, ... 'AreaOutputPort', true, ... 'BoundingBoxOutputPort', true, ... 'OutputDataType', 'single', ... 'MinimumBlobArea', 250, ... 'MaximumBlobArea', 3600, ... 'MaximumCount', 80); % 創建系統對象,用於對檢測出的運動車輛進行框畫 hshapeins = vision.ShapeInserter( ... 'BorderColor', 'Custom', ... 'CustomBorderColor', [0 255 0]); % 創建系統對象,用於標注檢測到車輛的個數 htextins = vision.TextInserter( ... 'Text', '%4d', ... 'Location', [1 1], ... 'Color', [255 255 255], ... 'FontSize', 12); % 創建系統對象,用於顯示結果 sz = get(0,'ScreenSize'); pos = [20 sz(4)-300 200 200]; hVideoOrig = vision.VideoPlayer('Name', 'Original', 'Position', pos); pos(1) = pos(1)+220; %在右側建立下一個視窗 hVideoFg = vision.VideoPlayer('Name', 'Foreground', 'Position', pos); pos(1) = pos(1)+220; hVideoRes = vision.VideoPlayer('Name', 'Results', 'Position', pos); line_row = 23; % 定義感興趣區域(ROI) % 以下的程序段為對輸入的視頻圖像進行處理 while ~isDone(hvfr) image = step(hvfr); % 讀入視頻的每一幀 y = step(hcsc, image); % 將彩色圖像轉換成灰度圖像 % 采用自動白平衡算法去除灰度突變 y = y-mean(y(:)); fg_image = step(hfdet, y); % 檢驗背景 % 采用數學形態學,在前景圖像中檢測變化的聯通圖像塊區域的面積 [area, bbox] = step(hblob, fg_image); image_out = image; image_out(22:23,:,:) = 255; % 僅對經過白線后的車輛進行計數 image_out(1:15,1:30,:) = 0; % 將背景置為黑色 Idx = bbox(:,2) > line_row; %選擇感興趣區域. % 當在感興趣區域中,聯通圖像塊的比例占整個變化區域的40%以上時,便認為是車輛 ratio = zeros(length(Idx),1); ratio(Idx) = single(area(Idx,1))./single(bbox(Idx,3).*bbox(Idx,4)); ratiob = ratio > 0.4; count = int32(sum(ratiob)); % 車輛的數量 bbox(~ratiob,:) = int32(-1); % 將檢測出的車輛圈畫出來 image_out = step(hshapeins, image_out, bbox); % 顯示檢測汽車的數量 image_out = step(htextins, image_out, count); step(hVideoOrig, image); % 原始視頻 step(hVideoFg, fg_image); % 前景 step(hVideoRes, image_out); % 用方框勾畫檢測出的車輛 end %關閉視頻文件 release(hvfr);
本次實訓是基於視頻的車輛識別(不是車牌識別),環境基於matlab 2014a,開發時間歷時三周,查閱相關論文數十篇。實現了在一個視頻中把運動的車用綠色的框框出來。