短時間の照明条件変化を考慮する背景差分法

ICIP06にかなりオーソドックスな割りに性能の良い手法があったので実装してみた.
Julio, et.al, "A Background Subtraction Model Adapted to Illumination Changes", ICIP2006.

背景差分法の概要はこのPDFを参照.

背景差分法の基本アイディアは,背景画像と現在画像の輝度差が大きいところが前景である,というもの.論文では数フレームに渡って分散を計算して,さらに画面全体のヒストグラムを取り,最初のピークが背景画像の標準偏差である,と提案している.これは妥当だと思う.私も実際に計算してみた.なお,輝度値は0〜255を利用(後述の比では+1して0除算を回避).

「最初の」とは言え,0.8ぐらいのは頻度が少なくて怪しいので,1.8ぐらいが妥当だと思われる.この0.8の原因は不明(DV符号化の影響か?).さらに論文によると,|I-B|>6*1.8ぐらいがちょうど良いらしい.Iは入力画像,Bは背景画像,1.8が標準偏差,6が定数です.6ってなんだYO!と思うのですが,まぁ,妥当なんです.

次に,論文オリジナルのアプローチは以下の通り.まず,画素毎では前景の空間的な連続性が考慮されていない.そこで,窓を用意してその中で平均する.次に,前景の時間的な連続性が考慮されていない.そこで,前フレームと現フレームの差分絶対値を平均化する.さらに,影やハイライトなど,照明変化による輝度値の変動は無視したい.また,それらの領域での輝度変化比は一定である(という仮定).そこで,窓を用意してその中で輝度変化比の標準偏差をとる.

コードに落とすとこんな感じですかね.

px(d1,x,y) = px(ad,x-1,y-1)*1 + px(ad,x-1,y)*2 + px(ad,x-1,y+1)*1
           + px(ad,x,  y-1)*2 + px(ad,x,  y)*4 + px(ad,x,  y+1)*2
           + px(ad,x+1,y-1)*1 + px(ad,x+1,y)*2 + px(ad,x+1,y+1)*1;
px(nd,x,y) = px(d1,x,y) + px(d2,x,y);
ave2 = px(ra,x-1,y-1) + px(ra,x-1,y) + px(ra,x-1,y+1)
     + px(ra,x  ,y-1) + px(ra,x  ,y) + px(ra,x  ,y+1)
     + px(ra,x+1,y-1) + px(ra,x+1,y) + px(ra,x+1,y+1);
std2 = sq(px(ra,x-1,y-1)) + sq(px(ra,x-1,y)) + sq(px(ra,x-1,y+1))
     + sq(px(ra,x  ,y-1)) + sq(px(ra,x  ,y)) + sq(px(ra,x  ,y+1))
     + sq(px(ra,x+1,y-1)) + sq(px(ra,x+1,y)) + sq(px(ra,x+1,y+1));
px(sr,x,y) = sqrt((double)std2/9-sq((double)ave2/9));

adは差分絶対値,d1は現フレームの加重平均した差分絶対値,d2は前フレームのそれ,ndは最終的な差分値,raは輝度比,srは輝度比の標準偏差となります.

条件判断部分は以下の通り.

if (px(nd,x,y) > k*sigma*32) {
    if(px(sr,x,y) < Lstd) {
        if(Llow <= px(ra,x,y) && px(ra,x,y) < 1) {
            px(fg,x,y) = 32;
        }
        else if (1 <= px(ra,x,y) && px(ra,x,y) < Lhigh) {
            px(fg,x,y) = 32;
        }
        else {
            px(fg,x,y) = 192;
        }
    }
    else {
        px(fg,x,y) = 192;
    }
}
else {
    px(fg,x,y) = 0;
}

fgは結果で,0が背景,32が影またはハイライト,192が前景になります.LlowとLhighは0.5と1.3.多分適当で大丈夫(これは論文の値).

最後に,値の時間遷移を掲載します.差分が大きくなっても輝度比の標準偏差が小さいために影領域と判断されていることが分かります.うん,かなり影がうまく取れてる.




課題は,背景画像の更新部分.ここはやはり,混合ガウスモデル(GMM : Gaussian Mixtured Model)の方が良いと思う.今後はGMMとの融合かな.それと,そもそも変化比だけで背景差分は出来ないのかな.そう考えると,既に発表されている可能性も高いなぁ.気が向いたら調査してみます.