ベクトル内積

さて、昨日の話の続き。
昨日の話で最後に出てきた式と言うのが、
\nabla \alpha = \frac{(\nabla I)^T (F - B)}{(F - B)^T (F - B)}
で表される式であって、これを使おうじゃないか、というのが方針。
ところで、グレイスケールを用いた場合なのだけれども、その場合の変換公式として使われるのが
 Grayscale = R \ast 0.298912 + G \ast 0.586611 + B \ast 0.114478
という式であって、これを一般化した
 Grayscale = a \ast R + b \ast G + c \ast B  s.t. a + b + c = 1
と言うものに対する最適化問題を解くというのが、Local Poisson Mattingの手法だった。しかし、ベクトルを用いてそのまま解く場合には、この最適化問題が生じない。これはかなりの疑問だ。ところが、つい最近線形代数の教科書を眺めていたこともあって、その解決案は意外と簡単に分かった。すなわち、内積の計算方法が違うのだ。

内積の計算方法は、通常であればこのように表記される。
 \vec{x} \ast \vec{y} = \sum{x_i \ast y_i}
だが、決してそうである必要性は無い。内積に求められている条件は四つあり、

  1. 交換則
  2. 分配則
  3. 要素のスカラー倍が全体のスカラー倍になる
  4. a * a >= 0 かつ、a == 0 <=> a * a == 0

となっている。

ここから何が考えられるかというと、実はRGB空間と言うのは直交正規座標ではないのではないか、という話だ。もしもそうであれば、内積の計算方法を変えてやる必要がある。まず、直交性について考えてみた。・・・のだけれども、考えてみればおかしな話で、例えば色(255, 0, 0)と(0, 0, 0)を比べた差と、(255, 0, 0)と(0, 10, 0)を比べた差は、前者の方が小さいというのが直感的だ。わざわざ直感に反することを考えて話をややこしくする必要は無いだろう。
では、座標の目盛り幅が違うと言うのが妥当な考えだろう。すなわち、(255, 0, 0)と(0, 0, 0)の差と、(0, 255, 0)と(0, 0, 0)の差は異なる可能性がある。このような空間における「良い」内積を定義しなくてはならない。つまりは、内積は以下のような形をしているだろう。
 \vec{x} \ast \vec{y} = \sum{v_i \ast x_i \ast y_i}
もう少し分かりやすく書くならば、
 \vec{x} = (x_R, x_G, x_B), \vec{y} = (y_R, y_G, y_B)に対して、内積 (\vec{x}, \vec{y}) = (a'  x_R  y_R, b'  x_G  y_G, c'  x_B  y_B)として定義される。このようなa', b', c'の最適値を求めるのが良い。
ただ、問題が一つある。a', b', c'の相互関係をきちんと定義しなくてはならない。例えばグレイスケールの話であれば、 a + b + c = 1という式があった。今回はどうすればよいだろうか。 a' + b' + c' = 1で良いのだろうか。
考えたのは、グレイスケールの場合を拡張してみようということだ。グレイスケールの場合であれば、 \vec{x} = (x_R, x_G, x_B)に対して、 GrayVector(\vec{x}) = (a \ast x_R, b \ast x_G, c \ast x_B) s.t. a + b + c = 1というようなベクトルを考えて、それの各要素を足している、と見ることができる。それじゃあ、これの内積を考えてみたときにはどうなるんだろうか。
GrayVector同士の \vec{x}, \vec{y}の自然な内積を計算してみると、 GrayVector(\vec{x}) \ast GrayVector(\vec{y}) = a^2 \ast x_R \ast y_R + b^2 \ast x_G \ast y_G + c^2 \ast x_B \ast y_Bとなる。すなわち、上記のa', b', c'に対して、 a' = a^2, b' = b^2, c' = c^2ということになる。
よって、最適化問題として考えた場合には、このようにするべきだろう。
 (\vec{x}, \vec{y}) = (a'  x_R  y_R, b'  x_G  y_G, c'  x_B  y_B)  s.t. \sqrt{a'} + \sqrt{b'} + \sqrt{c'} = 1
もしくは
 (\vec{x}, \vec{y}) = (a^2  x_R  y_R, b^2  x_G  y_G, c^2  x_B  y_B)  s.t. a + b + c = 1
という式。これに対する最適化問題を解けばよいだろう。