基於視頻的車輛識別


基於視頻的車輛識別

注:
開發環境: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,開發時間歷時三周,查閱相關論文數十篇。實現了在一個視頻中把運動的車用綠色的框框出來。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM