ガイデットフィルタとその周辺
TRANSCRIPT
Guided Filterとその周辺
名古屋工業大学
福嶋慶繁
2012/7/21 第18回 名古屋CV・PRML勉強会
紹介論文
• J. Lu, K. Shi, D. Min, L. Lin, and M. N. Do, “Cross-Based Local Multipoint Filtering,” CVPR2012.
• 内容:
高速なエッジキープ型のフィルタの 拡張とアプリケーション例
–注)細かいところはカットしています
– なかなか本題にはいりません.
関連論文 • Bilateral Filterの論文
– C. Tomasi and R. Manduchi, “Bilateral Filtering for Gray and Color Images,” ICCV’98.
• Joint/Cross Bilarater Filterによるデノイズ
– G. Petschnigg, M. Agrawala, H. Hoppe, R. Szeliski, M. Cohen, K. Toyama, “Digital Photography with Fash and No-flash Image Pairs,” SIGGRAPH’04.
– E. Eisemann and F. Durand, “Flash Photography Enhancement via Intrinsic Relighting,” SIGGRAPH’04.
• Joint Bilateral Filterを~mapに適用して解像度やノイズ除去
– J. Kopf,M. F. Cohen,D. Lischinski and M. Uyttendaele, “Joint bilateral upsampling,” SIGGRAPH’07
• NLFによるデノイズ
– A. Buades, B. Coll, J.M. Morel, “A Non-local Algorithm for Image Denoising,” CVPR’05.
• Guided Filterの論文
– K. He, J. Sun and X. Tang, “Guided Image Filtering,” ECCV’10.
• Guided Filterをコストボリュームに適用することによる応用の拡張
– C. Rhemann, A. Hosni, M. Bleyer, C. Rother, and M. Gelautz, ”Fast Cost-volume Filtering for Visual Correspondence and Beyond,” CVPR’11.
• クロススケルトンによる適用的インテグラルイメージ
– K. Zhang, J. Lu, and G. Lafruit, “Cross-Based Local Stereo Matching Using Orthogonal Integral Images,” IEEE Trans. CSVT’09.
エッジキープ型のフィルタって何?
ぼけないフィルタ
ボケすぎないフィルタ
エッジキープ型のフィルタの例
• Median Filter
• (joint/cross) Bilateral Filter
• Non-local Means Filter
• BM3D
• Guided Filter
• (Cross-Orthogonal integral Image)
エッジキープ型のフィルタの応用
• ノイズ除去
• 輪郭強調
–上記組み合わせの画像処理
• HDR
• 超解像
• MRFによる奥行き推定,背景差分,オプティカルフローの最適化の近似
Bilateral Filter
Joint/Cross Bilateral Filter
image
IR image/Flash image
Joint/Cross Bilateral Filter
image
IR image/Flash image
median
• Joint/Cross Filterの本当の効果
– ノイズ除去...それだけ?
Graph cut ? Belief Propagation ? そんな重たいもの使わなくても!?
– Ex: C. Rhemann, A. Hosni, M. Bleyer, C. Rother, and M. Gelautz,
”Fast Cost-volume Filtering for Visual Correspondence and Beyond,”
CVPR’11.
Joint/cross filterの使い方
• 結果にフィルタ
–~ map refinement/enhancement
–計算結果のポストフィルタとして利用
• 尤度にフィルタ
– Cost volume filtering
–尤度を量子化してその尤度mapを各量子化ステップでフィルタしてその最小値・最大値を取る
Joint/Cross Filtering for BF Map
+ thresholdingで背景差分のrefinementにもなります.
Joint/Cross Filtering for Depth Map
Joint/Cross Filtering for Haze Map
Cost-Volume Filtering
• Markov Random Field(MRF)などのエネルギー関数は,データ項とスムース項が,有る値(ただし量子化ステップ内の離散値)を取るときの値を最小化,最大化する(p:画素位置,l:ラベルor階調値)
E(p,l) = Ed(p,l) + λEs(p,l)
• これをスムース項の代わりにフィルタとしてほぼ同じ意味になるように表現(w:重み)
E(p,l) = ΣW(p,q) Ed(p,l)
• つまり,データ項が滑らかに変化するように&参照画像のエッジをキープするように平滑化する.
• どちらかというとCRFに近い結果 • もうちょっと抽象的に説明すると,MRF最適化はコストボリュームにIIRフィルタをかけているのに近い.
Cost-Volume Filtering
• マルチラベル問題全般に使用可能 – ステレオ,背景差分オプティカルフロー,アルファマッティング,顕著性マップ,xx map, etc…すべてに使用可能
• ステレオマッチングを例に説明
Cost-Volume Filtering
• マッチングコストの計算
• COST(p,d) = L(p) – R(p-d) :d=0
d=0 -
Cost-Volume Filtering
• マッチングコストの計算
• COST(p,d) = L(p) – R(p-d) :d=1
d=1 -
Cost-Volume Filtering
• マッチングコストの計算
• COST(p,d) = L(p) – R(p-d) :d=2
d=2 -
Cost-Volume Filtering
• マッチングコストの計算
• COST(p,d) = L(p) – R(p-d) :d=3
d=3 -
Cost-Volume Filtering
• マッチングコストの計算
• COST(p,d) = L(p) – R(p-d) :d=4
d=4 -
Cost-Volume Filtering
• マッチングコストの計算
• COST(p,d) = L(p) – R(p-d) :d=5
d=5 -
Cost-Volume Filtering
• マッチングコストの計算
• COST(p,d) = L(p) – R(p-d) :d=6
d=6 -
Cost-Volume Filtering
• マッチングコストの計算
• COST(p,d) = L(p) – R(p-d) :d=0
d=7 -
Cost-Volume Filtering
d=0 d=1 d=2 d=3 d=4 d=5 d=6
マッチングスコアボリューム 別名: Disparity Space Volume DSV
マッチングスコア,尤度マップ
Cost-Volume Filtering
d=0 d=1 d=2 d=3 d=4 d=5 d=6
安定度が低い
もっともスコアの低いもしくは尤度の高いものをその値として採用
DMAP(p) = argmindCOST(p,d)
Cost-Volume Filtering
d=0 d=1 d=2 d=3 d=4 d=5 d=6
マッチングスコアにフィルタする (Box Filterで→Block Matching) 安定するが境界がおかしい
argmin: もっちもスコアの低いもしくは尤度の高いものをその値として採用
Cost-Volume Filtering
d=0 d=1 d=2 d=3 d=4 d=5 d=6
マッチングスコアにフィルタする (Joint Bilateral Filterで) エッジもきれいに!
argmin: もっちもスコアの低いもしくは尤度の高いものをその値として採用
フィルタの欠点
• フィルタって,基本的なものだけど大きなカーネルだと計算は重たい.
• カーネルサイズ分の計算コスト!O(K)
• 特にバイラテラルフィルタは重たいことで有名
• ただし,いろいろ高速化方法はある!
本題の一歩手前
Guided Filter
• エッジ保持型のO(1)フィルタ
• バイラテラルフィルタに似た効果
• FullHDの画像をCore i7を使って30fpsでフィルタ可能
• GPUならさらにその十倍!?
Guided Filter詳細
• 入力画像pはガイド画像Iのカーネル内の適当な係数の線形変換であると仮定
– カーネル内にエッジは一つ
– ∇q = a∇I
– マッティングや超解像などに使われる
– (係数a,bに入力画像pを用いる)
ある画像を線形変換(ax+b)すると目的の画像へ変わる
kkiki ibIaq ,
kkiki ibIaq ,
Output Image: q
iq coefficient Image: a
coefficient Image: b
k
Guidance Image: I
iI
カーネル
kb
ka
= ・
の図解
kkiki ibIaq ,
Output Image: q
iq coefficient Image: a
coefficient Image: b
k
Guidance Image: I
iI
カーネル
kb
ka
= ・
の図解
kkiki ibIaq ,
Output Image: q
iq coefficient Image: a
coefficient Image: b
k
Guidance Image: I
iI
カーネル
kb
ka
= ・
の図解
kkiki ibIaq ,
Output Image: q
iq coefficient Image: a
coefficient Image: b
k
Guidance Image: I
iI
カーネル
kb
ka
= ・
の図解
kkiki ibIaq ,
Output Image: q
iq coefficient Image: a
coefficient Image: b
k
Guidance Image: I
iI
カーネル
kb
ka
= ・
の図解
kkiki ibIaq ,
Output Image: q
iq coefficient Image: a
coefficient Image: b
k
Guidance Image: I
iI
カーネル
kb
ka
= ・
の図解
1
1
1
1
1
11
22
11
1
22
11
i
i
i
i
i
kk
kk
kik
kik
i
i
i
i
i
i
i
I
I
I
I
I
ba
ba
ba
ba
bIa
bIa
bIa
bIa
q
q
q
q
q
カーネル内の全ての係数で,q=aI+bが成り立つように係数を決定
つまり,あるカーネル内での線形最小二乗
線形回帰
入力画素値pと出力qを誤差εのもとに線形回帰
上の解析解
μ:Iのカーネル内平均 σ:Iのカーネル内分散
kkiki ibIaq ,
元の式に戻ると,a,bはもちろんノイズを含み,どのkを選ぶかによって出力が違う
こういうときはとりあえず平均!
バイラテラルフィルタのように変形
Ex:バイラテラルフィルタの場合
赤点中心のカーネル. 左:参照画像 中:guided kernel 右:bilateral kernel 白いほど重みが大きい
カーネルの意味
※この変形した様子から天下り的に理解したほうが分かりやすいかも
エッジが1つしかないと仮定しているため左の図解となる. 画素iをフィルタ位置としたときの参照画素jの重み: 右辺は,概ね,I,jの画素値が同じなら1をとり, 逆ならー1を取る.つまり重みは大体0~2. εの値が大きいと重みはほぼ1になる.
このフィルタ実は非常に高速
• フィルタ計算が全てボックスフィルタと1画素同士の加減算,乗算で出来ている.
• つまり,全てO(1)計算.
• イメージ:下のような処理を何回かやるだけ
–画像1と画像2を掛ける
–それをボックスフィルタ
–それを画像1と画像2のボックスフィルタをしたものどうしをかけたものから引く
復習:インテグラルイメージ(1/2)
• フィルタとは?
カーネルのたたみこみ
普通,O(k)(kはカーネルサイズ)だけ計算時間が必要
復習:インテグラルイメージ(1/2)
• フィルタとは?
カーネルのたたみこみ
普通,O(k)(kはカーネルサイズ)だけ計算時間が必要
復習:インテグラルイメージ(1/2)
• フィルタとは?
カーネルのたたみこみ
普通,O(k)(kはカーネルサイズ)だけ計算時間が必要
復習:インテグラルイメージ(1/2)
• フィルタとは?
カーネルのたたみこみ
普通,O(k)(kはカーネルサイズ)だけ計算時間が必要
5x5のカーネルの場合1画素ごとに25回の演算が必要 ただし,ボックスフィルタのカーネルは全て1. (バイラテラルフィルタなどは画素ごとに違う)
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
復習:インテグラルイメージ(2/2)
1.積分画像を作成 (サイズは(x+1,y+1)で左上を0でパディング 積分画像とは? 左上から注目画素までの矩形の値の 総和を保持した画像 左上から順々に足していくだけ 2.4つの値の加減算で矩形の面積を求める
積分値
復習:インテグラルイメージ(2/2)
1.積分画像を作成 (サイズは(x+1,y+1)で左上を0でパディング 積分画像とは? 左上から注目画素までの矩形の値の 総和を保持した画像 左上から順々に足していくだけ 2.4つの値の加減算で矩形の面積を求める
積分値
復習:インテグラルイメージ(2/2)
1.積分画像を作成 (サイズは(x+1,y+1)で左上を0でパディング 積分画像とは? 左上から注目画素までの矩形の値の 総和を保持した画像 左上から順々に足していくだけ 2.4つの値の加減算で矩形の面積を求める
積分値
復習:インテグラルイメージ(2/2)
1.積分画像を作成 (サイズは(x+1,y+1)で左上を0でパディング 積分画像とは? 左上から注目画素までの矩形の値の 総和を保持した画像 左上から順々に足していくだけ 2.4つの値の加減算で矩形の面積を求める
積分値
復習:インテグラルイメージ(2/2)
1.積分画像を作成 (サイズは(x+1,y+1)で左上を0でパディング 積分画像とは? 左上から注目画素までの矩形の値の 総和を保持した画像 左上から順々に足していくだけ 2.4つの値の加減算で矩形の面積を求める
積分値
復習:インテグラルイメージ(2/2)
1.積分画像を作成 (サイズは(x+1,y+1)で左上を0でパディング 積分画像とは? 左上から注目画素までの矩形の値の 総和を保持した画像 左上から順々に足していくだけ 2.4つの値の加減算で矩形の面積を求める
積分値
復習:インテグラルイメージ(2/2)
1.積分画像を作成 (サイズは(x+1,y+1)で左上を0でパディング 積分画像とは? 左上から注目画素までの矩形の値の 総和を保持した画像 左上から順々に足していくだけ 2.4つの値の加減算で矩形の面積を求める
積分値
やっと本題
Guided Filterの制限
• フラットな平滑化が出来ない(L0のような)
– つまりエッジと勾配を維持するフィルタ
• 勾配はほとんどないと仮定できるときはエッジのみ維持したフィルタにしたい
– BFやNLFはエッジ保持のみのフィルタで勾配は保持されない
• ハイコントラストエッジ周辺は実はうまくいかない
ハイコントラストエッジ周辺の問題
今回の論文の拡張部分!
• とりあえず平均が気に食わない!全領域で線形回帰はあり得ない! – 係数a,bはオブジェクトの属する領域によって大きく変化するはず!
• Cross-Based Local Multipoint Filtering(CLMF) と名付けよう
• 同一領域以外は平均に使わないようにしたい
• でも同一領域を決めるために,セグメンテーションしたら,このフィルタの高速性が生きない...
1
1
1
1
1
11
22
11
11
22
11
1
22
11
i
i
i
i
i
kk
kk
ki
ki
ki
ki
ii
ii
kik
kik
i
i
i
i
i
i
i
I
I
I
I
I
ba
ba
ba
ba
ww
ww
ww
ww
bIa
bIa
bIa
bIa
q
q
q
q
q
カーネル内の全ての係数で,q=aI+bが成り立つように係数を決定 条件を満たす場所だけで
あるカーネル内での重み付き線形最小二乗 重みwi
k(画素位置iの時のカーネル位置kの時の重み) ※厳密に調べていないが,ほぼWLSと同じ式? A. Levin, D. Lischinski, Y. Weiss, “Colorization using optimization,” SIGGRAPH’04. Z. Farbman, R. Fattal, D. Lischinski, R. Szeliski, “Edge-preserving decompositions for multi-scale tone and detail manipulation,” SIGGRAPH’08.
• 1画素ごとに重み付き最小二乗を解いていたらとてもじゃないけど計算が複雑.
• 重みを0/1にしたら簡単な解法が!
1
1
1
1
1
11
22
11
11
22
11
1
22
11
i
i
i
i
i
kk
kk
ki
ki
ki
ki
ii
ii
kik
kik
i
i
i
i
i
i
i
I
I
I
I
I
ba
ba
ba
ba
ww
ww
ww
ww
bIa
bIa
bIa
bIa
q
q
q
q
q
カーネル内の全ての係数で,q=aI+bが成り立つように係数を決定 条件を満たす場所だけで
あるカーネル内での重み付き線形最小二乗 ※重みwi
k(画素位置iの時のカーネル位置kの時の重み) は,0 or 1のhard thresholding
Cross based local filter (CLF)
• 形が適応的なジョイントボックスフィルタ Integral Imageを使用
p
普通のボックスフィルタ 重みが一定の矩形フィルタ Integral image によりO(1)で計算可能
Cross based local filter (CLF)
• 形が適応的なジョイントボックスフィルタ – Cross Based Orthogonal Integral Imageを使用
OIIを使った適応的ボックスフィルタ 重みが0or1と適応的に変化するフィルタ 通常ならフィルタ半径内の係数を 計算しなければならないが...
Cross based local filter (CLF)
• 形が適応的なジョイントボックスフィルタ – Cross Based Orthogonal Integral Imageを使用
下記手順でO(1)化 フィルタターゲットのエッジなどの情報を 用いてクロス(十字)を作成 まず,水平にインテグラルイメージ作成 各画素のクロスの水平成分に沿った 積分値を計算. 最後に縦方向に同様の処理 セパレータブルフィルタと同じような原理
クロスの計算方法
• argmax r
• for r = 0:max r V(p) < V(p-r)
クロスとカーネルの例
(a) クロス (b) 積分領域拡大図 (c) さまざまな積分区間の例
GF→CLMFへの式変形
• Σの係数の平均・分散の計算(つまりボックスフィルタ)を全部COIIに変換するだけの簡単なお仕事.
• 最後の係数a,bについては有効な画素の多さに応じて重み付き平均
– Weighted averageもO(1)で計算可能
– ex) 重み画像W,入力画像Iとしてその重み付き平均
– W-Average(W,I) = 1/ΣW * ΣI*W
• 計算コストはO(1)のまま
GF→CLMFへの式変形
• ついでにGuided Filterをより一般化
– aX+bで変換する1次変換
– X+bで変換する0次変換
に拡張
フィルタの効果まとめ
バイラテラル: 点ベースでエッジのみを保持. 速度は遅い.かなり遅い. CLF: 点ベースでエッジのみを保持. 速度は最高速.ただし,クロスの計算がO(W+H) CLMF-0(提案): 多点ベースでエッジのみを保持. 速度は最高速(2番目) GF(従来): 多点ベースでエッジと勾配を保持. 速度はそこそこ高速(3番目)core i7FulHD→30fps CLMF-1(提案): 多点ベースでエッジと勾配みを保持. 速度はそこそこ高速(4番目)おそらくGFの2倍以内
結果
• 平滑化結果
• ノイズリダクション
• ステレオ
• Flash-no-flashイメージ
エッジ保持平滑化結果
ノイズリダクション
Depth estimation over CVF
Depth upsampling(x8) & Depth noise reduntion
Flash/No-Flash
まとめ
• エッジ保持型のフィルタBilateral FilterのJoint bilateral filterへの拡張とその応用例の解説
• 高速なエッジ保持フィルタGuided Filter(GF)の解説
• GFの拡張CLMFの解説(ここが主題)