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)式はと、
上の式は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を作成します。
結果は以下になります。(500個のデータに対してσx=50、最大値255に対してσy=25)
図の意味ですが、これは500x500の行列です。i行目のデータiと、j列目のデータjが似ている場合は黒色、似ていない場合は白色に着色しています。例えばi=jのデータを見ると、自分自身との類似度を計算しているので黒色になります。上記はBilateral Filterに対してのものですが、試しに①ガウシアンフィルタと②値の類似度を元に作成したAffinity Matrixを計算しました。
左が①ガウシアン、右が②値の類似度です。
左図はガウシアンなので、単純にi=jから離れるにつれてだんだんと重み付けが小さくなります。
右図については、0列目から500列目にかけて横に辿ると、ステップ上に黒と白が並んでいるように見えます。このステップは、元の信号のエッジ位置と対応しています。例えば1行目は1番目のデータとの他のデータの類似度を並べただけですから、エッジを超える度に黒と白が交互に現れているわけです。
以上の結果からBilateral Filterは①空間に対する類似度(近さ)と②値に対する類似度を掛け合わせたものであると、一目でわかります。まさに画像処理で使われるAffinity Matrixとは、クラスタリングで使われる類似度と同じものだったわけです。
今回はここまで
本論文の(3)式を理解するためには、Bilateral GridでもAffinity Matrixを作る必要があります。同じ方法でいいかと思いきや、少しテクニックがいります。もう既にできているのですが、文章が長くなるのでまた次回で!