[解決済み] Matlabでcorr2関数を説明する
質問
相関関数について教えてください。
corr2
をMATLABで使ってみませんか?2次元で物体の類似性を比較するものだということは知っているのですが、式でいうと
というのは疑問です。
A
と
B
(おそらく比較のためのマトリックス)、そしてまた
Amn
と
Bmn
.
というのも、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)^2
と
b-mean2(b)^2
. これは、個々の画像の画素の強度の差を考慮した、ある種の正規化処理と見ることができます。
最後のコメントですが、画像を小さなブロックに分解して、そのブロックに対して相関係数を計算することができます。これは非常に大きな画像に対して時間を節約できるかもしれませんが、すべてがベクトル化されているので、計算は非常に高速になります。分散処理には有効かもしれませんね。もちろん、2つの画像ブロックの相関係数は、画像全体の相関係数と同じとは限りません。
好奇心のために、以下のサイトをご覧ください。 これ この論文では、画像の比較に相関係数を使用する際の注意点をいくつか挙げています。
これで少しは分かりやすくなったでしょうか?
関連
-
[解決済み】MATLABの&と&&の違いは何ですか?
-
[解決済み】"配列のインデックスは正の整数または論理値でなければならない"
-
[解決済み] matlabエディタで複数の行をコメントするためのショートカットキーはありますか?
-
[解決済み] MATLABエラー "このコンテキストでは関数定義は許可されていません。" [重複しています]。
-
[解決済み] エラー: 等号の左側にある式は代入の対象として有効ではありません Matlab
-
[解決済み] MATLABでマシンイプシロンを計算する方法は?
-
[解決済み] 行列の行にノルム関数を適用する - Matlab [duplicate]
-
[解決済み] matlab のプロットベクトルは同じ長さでなければなりません。
-
[解決済み] Ax = B の形の行列を解く ==> エラー。行列が特異に近い、またはスケールが悪い
-
[解決済み] Matlabでベクトルを表示(印刷)するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】2つのベクトル間の角度 matlab
-
[解決済み] matlabエディタで複数の行をコメントするためのショートカットキーはありますか?
-
[解決済み] MATLABで1つの点の最近傍を検索する
-
[解決済み] matlabで補強行列を作成し、縮小行エシュロン形式を作成する。
-
[解決済み] MATLAB : 周波数分布
-
[解決済み] エラー: 等号の左側にある式は代入の対象として有効ではありません Matlab
-
[解決済み] Wolfram AlphaとMATLABでは伝達関数のプロットが異なる
-
[解決済み] Matlabで固有ベクトルを正しくプロットする
-
[解決済み] MATLABでベクトルの線形スパンを求める
-
[解決済み] matlabでchi2gof関数を理解する