らんらん技術日記

日々の学習メモに

Bilateral Solverをソルブする(第3回)

艦これ改、買いました!PS Vitaと合わせて2万6千円!安い買い物でしたね・・。最近は本家艦これの冬イベントもあったのでなかなか忙しいなぁ(棒)

てわけであまり進捗がないですが第3回です。

今回はAffinity Matrixについての話です。日本語では類似度行列と訳されるみたいですが(確信なし)、どうやらクラスタリングでは一般的な技術のよう。このAffinity Matrix、画像処理に適用すると新しい発見があるかもしれませんよ・・・!?

(内用がごちゃごちゃしているので、そのうち修正します)

久しぶりに元論文を読む

前回まではBilateral Gridについて書いていましたが、「実は」以下の論文を解読しようというのが本連載の趣旨です!

 Jonathan T. Barron著:The Fast Bilateral Solver

このBilateral SolverはBilateral Gridを元にしています。そして!Bilateral Gridを完璧に理解した自分なら!Bilateral Solverも理解できるはず!

 

1ページ目:ふむふむ、よくわからん。

2ページ目:ほうほう、(1)式と(2)式は見たことあるな。(3)式はと、

 

{ \displaystyle {W = S^T\overline{B}S}}   (3)

 

上の式はBilateral Gridを行列式で表した形らしいです。いやいやいやw 前回までやってきたBilateral Gridは行列式なんて使ってないすよw

・・・・・・orz

Affinity Matrix

そもそも(3)式中のWとはなにか。論文によると、Bilateral Filterの係数とも紹介されていますが、同時にAffinity Matrixだとも言っています。Affinity Matrixをググってもクラスタリングの話ばかりで困ったものです。(Bilateral Filterをご存知ない方はイメージングソリューションというブログを見てくださいね。元論文関係ないのにGoogle検索でトップに来ます。)

てわけで再び引用論文に遡ってみます。

 Jonathan T. Barron著:Fast Bilateral-Space Stereo for Synthetic Defocus

どこかで見たことのある著者ですが、気にせず読みます。この論文によると、フィルタ係数を並べた行列のようです。言葉よりも実例で説明します。以下の信号について、Bilateral Filterの重み付けでAffinity Matrixを作成します。

f:id:yukirunrun:20160208003430p:plain

結果は以下になります。(500個のデータに対してσx=50、最大値255に対してσy=25)

f:id:yukirunrun:20160301013025p:plain

図の意味ですが、これは500x500の行列です。i行目のデータiと、j列目のデータjが似ている場合は黒色、似ていない場合は白色に着色しています。例えばi=jのデータを見ると、自分自身との類似度を計算しているので黒色になります。上記はBilateral Filterに対してのものですが、試しに①ガウシアンフィルタと②値の類似度を元に作成したAffinity Matrixを計算しました。

f:id:yukirunrun:20160301014302p:plain      f:id:yukirunrun:20160301014259p:plain

左が①ガウシアン、右が②値の類似度です。

左図はガウシアンなので、単純にi=jから離れるにつれてだんだんと重み付けが小さくなります。

右図については、0列目から500列目にかけて横に辿ると、ステップ上に黒と白が並んでいるように見えます。このステップは、元の信号のエッジ位置と対応しています。例えば1行目は1番目のデータとの他のデータの類似度を並べただけですから、エッジを超える度に黒と白が交互に現れているわけです。

以上の結果からBilateral Filterは①空間に対する類似度(近さ)と②値に対する類似度を掛け合わせたものであると、一目でわかります。まさに画像処理で使われるAffinity Matrixとは、クラスタリングで使われる類似度と同じものだったわけです。

今回はここまで

本論文の(3)式を理解するためには、Bilateral GridでもAffinity Matrixを作る必要があります。同じ方法でいいかと思いきや、少しテクニックがいります。もう既にできているのですが、文章が長くなるのでまた次回で!