内積は計算そのものは簡単な割にはとても応用範囲が広いので、私の好きな処理の一つなのです。
内積の定義は以下の通りです。
上図のようにベクトルaとベクトルbの成分を以下のように表すと
2つのベクトルの内積は
であらわされます。
ただし、ベクトルの大きさは、ノルムと呼ばれ、以下のように計算します。
さらに一般的にn次元ベクトルの場合、2つのベクトルを
a=(a1,a2,a3,・・・,an)
b=(b1,b2,b3,・・・,bn)
とすると(添え字の無いaとbは太字で表します)、内積の計算は
となります。
ここまでが、普通に学校で習う内積なのですが、この内積の式をいろいろ変形させて使う事で、応用例が広がります。
例えば内積の式を cosθ= の式に変形して
とすると、定式で求めたcosθのアークコサインを計算すると、2つのベクトルのなす角を求める事ができます。
さらにcosθをそのまま用いて、cosθが1の時は2つのベクトルが向きが一致し、cosθが-1の時は2つのベクトルが向きが逆向きとなる事から2つのベクトルの大きさに関係なく、2つのベクトルがどれだけ似ているか?の指標に使われる場合があります。例えば、画像処理では正規化相関が、まさにそのものとなります。
また、内積の式を
のように変形すると、ベクトルbの成分の内、ベクトルaの方向にどれだけの成分があるか?の計算をする事ができます。
この処理は、いづれ出てくるであろう正規直行規定への斜影の処理と同じです。
さらに言うとフーリエ変換の一部とも考える事ができます。
と言う事で、内積そのものの計算は同じ成分同士を掛けて足し合わせだけなので簡単なのですが、応用範囲が広いので好きなのです。
内積はニュアンス的には、どれだけ似ているか? もしくは 似ている成分を抽出する手法として用いる事ができます。
例えば3×3フィルタの一つのソーベルフィルタも、
X方向へは
-1 | 0 | 1 |
-2 | 0 | 2 |
-1 | 0 | 1 |
Y方向へは
-1 | -2 | -1 |
0 | 0 | 0 |
1 | 2 | 1 |
と表せれますが、これは一般的には画像を微分している!という捉え方が多いですが、9次元ベクトルの内積を計算している!とも考えられます。
そう考えると、ソーベルフィルタの結果は、左から右(上から下)方法へ向かって暗から明へ変化する場合は値が正となり、明から暗へ変化する場合は負となるのも納得できます。
さらにエッジの強さが強い時は値が大きくなるのも内積の特性と一致します。
と、無理やり内積をこじつける必要もありませんが、正規化相関やフーリエ変換は内積と同じ!と思えると、一見難しそうなアルゴリズムでも、少し簡単に見えてくると思います。
コメント
[…] もう少し、まじめにフーリエ変換を理解したい場合は内積や正規直交規定を理解しておくと、良いかと思います。 […]
[…] ちなみに、私は内積が好きでなので、割と何でも内積にこじつける事で、難しく聞こえる処理も内積と思える事で、簡単い聞こえる場合が度々あります。 […]
[…] 1/29 内積 […]
[…] 1/29 内積 […]
[…] 1/29 内積 […]