ここでは,画像の相関値(相関係数)の計算方法についていくつか種類を紹介したいと思います.例えば,図1の2つのブロックが似ているかどうか計算したいとします.そういう時,ここで説明する相関値の計算方法が利用できると思います.
[img:wcyv]
{{small:図1 ブロックの比較例}}
相関値の計算は例えば,テンプレートマッチングや[link:ステレオマッチング]などで利用されています.
*一般的な相関値の計算方法
画像上の2つのブロックを{$A,B$}とし,ブロックの各画素の輝度値を{$A(x,y), B(x,y)$}と置きます.{$x,y$}はブロック内の画素の位置を表します.
**SAD (Sum of Absolute Difference)
輝度値の差の絶対値を計算し,その和を算出する方法です.ブロックが類似するほど値が小さくなります.
{$$ {\rm SAD} = \sum_{y} \sum_{x} {|A(x,y) - B(x,y)|}$$}
**SSD (Sum of Squared Difference)
輝度値の差の二乗を計算し,その和を算出する方法です.ブロックが類似するほど値が小さくなります.
{$$ {\rm SSD} = \sum_{y} \sum_{x} {(A(x,y) - B(x,y))^2}$$}
**NCC (Normalized Cross-Correlation)
正規化相互相関とも呼ばれています.分子の部分で,輝度値の内積を計算します.似た輝度値であれば,内積の値は大きくなります.分母の数値は,分子の数値を正規化するための数値です.ブロックが類似するほど値が大きくなります.最大で1,最小で0になります.
{$$
{\rm NCC} = \frac{\displaystyle \sum_{y} \sum_{x} A(x,y) B(x,y)}
{\displaystyle \sqrt{\sum_{y} \sum_{x} A(x,y)^2 \sum_{y} \sum_{x} B(x,y)^2}}
$$}
{{small,red:2019/01/04追記 NCCの式の間違いを修正 一部の変数がx,yではなく,u,vと記載されていました}}
**ZNCC (Zero-mean Normalized Cross-Correlation)
平均値を引いた後に,正規化相互相関を計算する方法です.周波数的に考えると直流成分を取り除くことになります.明るさに違いのある画像の比較を行う時に利用されます.
{$$
{\rm ZNCC} = \frac{\displaystyle \sum_{y} \sum_{x} \begin{pmatrix}{A(x,y) - \bar{A}}\end{pmatrix} \begin{pmatrix}{B(x,y) - \bar{B}}\end{pmatrix}}
{\displaystyle \sqrt{\sum_{y} \sum_{x}\begin{pmatrix}{A(x,y) - \bar{A}}\end{pmatrix}^2 \sum_{y} \sum_{x} \begin{pmatrix}{B(x,y) - \bar{B}}\end{pmatrix}^2}}
$$}
ここで,{$\bar{A}, \bar{B}$}は輝度値の平均値です.なお,{$MN$}はブロックの縦横のピクセル数です.
{$$ \bar{A} = \frac{1}{MN}\sum_{y} \sum_{x} {A(x,y)}, \bar{B} = \frac{1}{MN}\sum_{y} \sum_{x} {B(x,y)}$$}
*特殊な相関値の計算方法
**色や微分値を利用する方法
例えば,RGBのカラー画像では,3つのチャンネルそれぞれについて,相関値を計算しその和を取るような方法や,3次元のベクトルと考えてベクトルの内積やベクトルの差に注目して相関値を計算する方法があります.また,色空間を別の色空間に変換した後に相関値を計算する方法や,或いは,微分フィルタの結果に基づいて,微分値に注目して相関値を計算する方法などもあります.細かな話をするとまだまだありますが,結局どのような方法が適切かはケースバイケースになります.
輝度値や色の差を計算する例をいくつか紹介したいと思います.文献[1]では,Labの色空間で色の差を計算します.文献[2]では,色と微分値のそれぞれの差を取り,所定の比率で合計して相関を計算します.
{{small:[1]R.Achanta, A.Shaji, K.Smith, A.Lucchi, P.Fua, and S.Susstrunk, "SLIC superpixels compared to state-of-the-art superpixel methods", IEEE Transactions on Pattern Analysis and Machine Intelligence(PAMI), 2011. }}
{{small:[link:https://infoscience.epfl.ch/record/177415/files/Superpixel_PAMI2011-2.pdf] }}
{{small:[2]M.Bleyer, C.Rhemann, C.Rother, "PatchMatch Stereo - Stereo Matching with Slanted Support Windows", The British Machine Vision Conference (BMVC), 2011}}
{{small:[link:http://www.bmva.org/bmvc/2011/proceedings/paper14/paper14.pdf] }}
**位相成分を利用する方法
画像をフーリエ変換し,その位相成分を利用して相関を計算する方法があります.輝度値を使って相関を計算する方法に比べ,類似する部分で強い反応が得られる傾向があります.詳しくは,[link:位相限定相関法]を参考にしてください.
**学習を利用する方法
最近では,Deep LearningやCNNの技術を使った相関の計算方法も提案されています.例えば文献[3]では,CNNを使ってブロックを特徴ベクトルに変換し,その内積に基づいて相関を計算します.文献[3]のケースでは,真値付きのステレオ画像を教師データとしてネットワークの学習を行います.
[img:bgv7]
{{small:図2 CNNに基づく相関値の計算 出典[3]}}
{{small:[3]J.Žbontar, Y.LeCun, "Stereo Matching by Training a Convolutional Neural Network to Compare Image Patches", Computer Vision and Pattern Recognition(CVPR), 2015}}
{{small:[link:https://arxiv.org/abs/1510.05970] }}
>> ご意見・ご質問など お気軽にご連絡ください.info