1. ホーム
  2. matlab

[解決済み] Matlabでcorr2関数を説明する

2022-02-07 20:30:31

質問

相関関数について教えてください。 corr2 をMATLABで使ってみませんか?2次元で物体の類似性を比較するものだということは知っているのですが、式でいうと というのは疑問です。 AB (おそらく比較のためのマトリックス)、そしてまた AmnBmn .

というのも、MATLABがこの関数をどのように実行しているかというと、画像(行列)全体に対して相関を実行するのではなく、画像をブロックに分割し、ある画像のブロックと別の画像のブロックを比較しているケースがいくつか見受けられたからです。

MATLABのドキュメントでは corr2 の式は、MATLABのドキュメントにある他の関数のように、どの本から引用したのか、どこで説明されているのかを参照するような、式自体の計算方法への言及は置かれていない。

どのように解くのですか?

相関係数とは、2つの画像の類似度を、それぞれの画像に対応させて表した数値です。 画素強度 .

ご指摘の通り、この係数を算出するためにこの関数を使用しています。

ここで、A と B は比較する画像であり、添え字の添え字 m と n は 画素位置 を画像中に表示します。基本的に Matab が行うことは、両方の画像のすべてのピクセル位置について、そのピクセルの強度値と画像全体の平均強度(文字とその上に直線で示される)との間の差を計算することです。

Kostyaが指摘したように、タイプする edit corr2 をコマンドウィンドウに入力すると、Matlabが相関係数を計算するために使用するコードが表示されます。式は基本的にこうです。

a = a - mean2(a);
b = b - mean2(b);
r = sum(sum(a.*b))/sqrt(sum(sum(a.*a))*sum(sum(b.*b)));

ここで a は入力画像、b は a と比較したい画像です。

この式を分解すると、次のようになります。 a - mean2(a)b-mean2(b) は上式の分子の要素である。 mean2(a) と等価である。 mean(mean(a)) または mean(a(:)) は、画像全体の平均強度である。これは一度だけ計算されます。

3行目のコードでは、係数を計算しています。ここでは sum(sum(a.*b)) は、式中の二重和を要素ごとに、つまり各画素の位置を個別に考慮して計算します。注意すべきは sum(a) は各列の合計を個別に計算するので、1つの値を得るためには sum を2回実行します。

これは、分母で起きていることとほぼ同じですが、計算を行うのは a-mean2(a)^2b-mean2(b)^2 . これは、個々の画像の画素の強度の差を考慮した、ある種の正規化処理と見ることができます。

最後のコメントですが、画像を小さなブロックに分解して、そのブロックに対して相関係数を計算することができます。これは非常に大きな画像に対して時間を節約できるかもしれませんが、すべてがベクトル化されているので、計算は非常に高速になります。分散処理には有効かもしれませんね。もちろん、2つの画像ブロックの相関係数は、画像全体の相関係数と同じとは限りません。

好奇心のために、以下のサイトをご覧ください。 これ この論文では、画像の比較に相関係数を使用する際の注意点をいくつか挙げています。

これで少しは分かりやすくなったでしょうか?