ベクトル内積
さて、昨日の話の続き。
昨日の話で最後に出てきた式と言うのが、
で表される式であって、これを使おうじゃないか、というのが方針。
ところで、グレイスケールを用いた場合なのだけれども、その場合の変換公式として使われるのが
という式であって、これを一般化した
と言うものに対する最適化問題を解くというのが、Local Poisson Mattingの手法だった。しかし、ベクトルを用いてそのまま解く場合には、この最適化問題が生じない。これはかなりの疑問だ。ところが、つい最近線形代数の教科書を眺めていたこともあって、その解決案は意外と簡単に分かった。すなわち、内積の計算方法が違うのだ。
内積の計算方法は、通常であればこのように表記される。
だが、決してそうである必要性は無い。内積に求められている条件は四つあり、
となっている。
ここから何が考えられるかというと、実は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)の差は異なる可能性がある。このような空間における「良い」内積を定義しなくてはならない。つまりは、内積は以下のような形をしているだろう。
もう少し分かりやすく書くならば、
に対して、内積はとして定義される。このようなa', b', c'の最適値を求めるのが良い。
ただ、問題が一つある。a', b', c'の相互関係をきちんと定義しなくてはならない。例えばグレイスケールの話であれば、という式があった。今回はどうすればよいだろうか。で良いのだろうか。
考えたのは、グレイスケールの場合を拡張してみようということだ。グレイスケールの場合であれば、に対して、というようなベクトルを考えて、それの各要素を足している、と見ることができる。それじゃあ、これの内積を考えてみたときにはどうなるんだろうか。
GrayVector同士のの自然な内積を計算してみると、となる。すなわち、上記のa', b', c'に対して、ということになる。
よって、最適化問題として考えた場合には、このようにするべきだろう。
もしくは
という式。これに対する最適化問題を解けばよいだろう。