移動物体のセグメンテーション

説明

フレーム差分背景差分実装抽出し移動体の分析。

ウェブテスト

  1. MATLAB基本的なコマンドを使用すると、画像は基本的なコマンドをIMREADやビデオavireadのmmreaderを読み出します。
  2. オブジェクトセグメンテーションを移動させるための種々の移動物体検出機能を呼び出します。
  3. セグメンテーション結果を調整するための形態学的演算子を使ってMATLAB。
  4. 物体検出を移動させる効果を比較すると、構造要素の形状及び大きさを変更することにより、形態学的フィルタリング素子STRELコマンド構造形式を呼び出す学びます。

実験手順

フレーム

tic;
clear all
mov = VideoReader('raw.avi');  %读取视频
x = read(mov,2);                  %把第二帧赋给x
fr_size = size(x);               %帧大小
width = fr_size(2);
height = fr_size(1);
c =zeros(height, width);        %生成height*width大小的0矩阵
for k=1:mov.NumberOfFrames-2   %遍历每一帧
    x = read(mov,k);
    y = read(mov,k+2);         %n帧差分。空洞:运动太慢。重影:运动太快。
    m = rgb2gray(x);
    n = rgb2gray(y);
    q=im2double(n);
    w=im2double(m);
    c = q-w ;
    t=50;                          %阈值
    t=t/255;                      %转化为double型数据
    id = c > t;
    cc =zeros(fr_size);
    cc(id) = 1;
    subplot(2,2,1),imshow(m),title('当前帧'),
    subplot(2,2,2),imshow(n),title('后一帧'),
    subplot(2,2,3),imshow(c),title('两帧相减'),
    subplot(2,2,4),imshow(cc),title('阈值后');
    %Mov1(k) = im2frame(uint8(cc),gray); % put frames into movie
    %imwrite(cc,['zcf',sprintf('%04d',mov.NumberOfFrames),'.jpg']);
end
  • アルゴリズム分析
    フレーム間差分法は、絶対値が一定の閾値を超えた場合、減算階調差の絶対値の異なるフレーム中の対応する画素が、判定された動画像シーケンスに基づいて相関の強い提案隣接フレーム画像を検出するための方法であって、場合、移動ターゲットがターゲット検出を達成するために、決定することができます。
    灰色の物体の均一な分布は、この方法が原因となる場合、特定の重複部分は、ターゲットが検出されないように、通信していない重度の標的セグメントを引き起こし、大きな孔が形成されています。穴が遅すぎる、あまりにも速いゴーストがあると動きが発生したときに生成された動きをターゲットにしています。低速のターゲットシナリオのための二つの差分法。
    この方法の利点は、環境適応ので、シーンチェンジが光に対して敏感ではない、アルゴリズムは単純で高速であることであり、欠点は、空隙がゴースト現象が発生することで、全体領域が移動物体のみ輪郭抽出を抽出することができませんこのアルゴリズムは、選択したフレーム間の時間間隔とセグメンテーションしきい値の効果に大きく依存しています。

バックグラウンド減算

原理的バックグラウンド減算は、動き差分対象領域を得るために、現在のフレームと背景画像です。フレームの自由な移動により取得された背景画像。背景従来の施工方法は、時間平均、単一のガウス法、混合ガウシアン法等を有しています。以下は、背景差分の簡単なフローチャートである:
ここに画像を挿入説明
より少ない計算バックグラウンド減算が、光、天候や影響を受けた他の外部条件によって。

時間平均法

clear all;
N = 40;                      % N帧用于训练高斯模型,构造背景图像
h = fspecial('gaussian');
imagedata = filter2(h,rgb2gray(imread('rawpic/raw0001.jpg'))); 
mu = imagedata;
[m,n] = size(mu);
pro = zeros(m,n);
for i=1:N                                                     
    filename = sprintf('rawpic/raw%04d.jpg',i);      
    tmp =filter2(h,rgb2gray(imread(filename)));
    mu = mu+tmp;
end;
mu=mu./N;
imwrite(uint8(mu),'sjpj.jpg');
%figure(1),imshow(uint8(mu));
for num = N+1:500                              % 测试
    filename = sprintf('rawpic/raw%04d.jpg',num);
    imagedata = filter2(h,rgb2gray(imread(filename)));
    t=50;                                         % 阈值,可调节
    pro = abs(imagedata-mu)> t;
    imshow(pro),title(sprintf('frame number %d',floor(num)));
    mu = (mu*(num-1) +imagedata)/num; 
    %imwrite(pro,['sjpj',sprintf('%04d',num),'.jpg']);
    %Mov1(num-N) = im2frame(uint8(255*pro),gray); % put frames into movie
end;
  • アルゴリズム分析
    この実験では、時間平均背景映像を構築するために使用される方法40の前に、背景画像のフレームの後に得られたフレームの総累積数で割りました。画像フレームの違いを確認する背景画像次々 40一方が移動対象として特定される閾値よりも大きいです。これと同時に、フレーム平均を更新する処理を続けました。時間平均化アルゴリズムは、高速、簡単であり、環境光の変化に動的背景感受性変化します。

シングルガウス

clear all;
N = 40;
h = fspecial('gaussian');
imagedata = filter2(h,rgb2gray(imread('rawpic/raw0001.jpg')));
mu = imagedata;
[m,n] = size(mu);
cov = zeros(m,n);
pro = zeros(m,n);
sav_mu = mu;
a = 0.01;
for i=1:N
    filename = sprintf('rawpic/raw%04d.jpg',i); 
    tmp =filter2(h,rgb2gray(imread(filename)));
    mu = (tmp+(i-1)*sav_mu)./i;
    cov = ((tmp-mu).^2+(i-1)*cov)./(i)+(mu-sav_mu).^2;
    sav_mu = mu;
end;
cov = cov+0.001;                         %防止cov为0
imwrite(uint8(mu),'sjpj.jpg');
 
for num = N+1:500
    filename = sprintf('rawpic/raw%04d.jpg',num);
    imagedata = double(filter2(h,rgb2gray(imread(filename))));
    T=1e-4;                                % 阈值,可调节
    pro = (2*pi)^(-1/2)*exp(-0.5*(imagedata-mu).^2./cov)./sqrt(cov)< T;
%% update covariance and mean
mu = mu +a*(1-pro).*(imagedata-mu); 
cov = cov + a*(1-pro).*((imagedata-mu).^2-cov);
%D1=medfilt2(pro,[5,5]);
%K=filter2(fspecial('average',3),pro)/255;
%se=strel('disk',1); %
%A=imdilate(D1,se); 
%fc=imopen(pro,se);
%B = imfill(fc, 'holes');
imshow(mat2gray(pro)),title(sprintf('frame number %d',floor(num)));
%imwrite(pro,['sjpj',sprintf('%04d',num),'.jpg']);
pause(0.000001);
end;
  • アルゴリズム分析
    単一ガウスモデルは、一定の背景単一の機会、ガウス混合モデルのために適している、これは、単一のガウスモデルが、最も単純な単一のガウスモデルの拡張であり、かつ反復的にパラメータを取り、毎回モデル化する必要はありません。
    数学的な形式で表現される画像の各画素の単一ガウスモデル階調値が、確率過程のXとみなし、ある画素のグレー値の確率がガウス分布を発生することを前提としている:
    ここに画像を挿入説明
    請求σ²コードCOVの場合、xはコード画像データであり、μコードミューあります。- (1/2)と(2 * PI)^ (-0.5 EXP。(ImageDataを-MU)^ 2./cov)./sqrt(cov)この値に対応するTがターゲットを移動した閾値よりも小さくなっています。パラメータ更新する呼ば前記分散、平均フレームとの更新処理、一般的には、更新されません。

実験結果

  • フレーム
    ここに画像を挿入説明
  • 時間平均法
    ここに画像を挿入説明
  • シングルガウス
    ここに画像を挿入説明

おすすめ

転載: blog.csdn.net/qq_42037746/article/details/92389721