やあ、
ゼロの出現(上の写真では緑色)を無視する、上記の2つのデータセット間の相関行列を作成したいと思います。スムーズな結果を生成する最も効率的な方法を知っている人はいますか?
類似性をポイントごとに識別できる相関方法はありますか?したがって、結果は元のマトリックスの「形状」になりますか?
ありがとう
注:matlab統計ツールボックスがありません
やあ、
ゼロの出現(上の写真では緑色)を無視する、上記の2つのデータセット間の相関行列を作成したいと思います。スムーズな結果を生成する最も効率的な方法を知っている人はいますか?
類似性をポイントごとに識別できる相関方法はありますか?したがって、結果は元のマトリックスの「形状」になりますか?
ありがとう
注:matlab統計ツールボックスがありません
2. Is there any correlation method that can identify the similarity point by
point and by thus the results will have the "shape" of the original matrix?
2 番目のポイントから始めましょう。なぜなら、そこに何を求めているかがより明確だからです。A
たとえば、との 2 つの画像を 1 つずつ比較したいとしますB
。これは、2 つのスカラーa
との類似性を測定することになりb
ます。これらのスカラーが interval からのものであると仮定しましょう[0, Q]
。ここでQ
は、画像形式に依存します (Q == 1
またはQ == 255
Matlab では一般的です)。
さて、距離の最も簡単な尺度は差d = |a - b|
です。これを正規化し、距離の代わりに類似度[0, 1]
を測定するために値を反転することもできます。マトラブでは:
S = 1 - abs(A - B) / Q;
画像のゼロを無視することについて言及しました。さて、ゼロに期待する類似度の尺度を定義する必要があります。1 つの可能性は、1 つのピクセルがゼロの場合は常に類似度をゼロに設定することです。
S(A == 0 | B == 0) = 0;
そこの類似度は定義されていないと言って、類似度を に設定することもできますNaN
。
S(A == 0 | B == 0) = nan;
もちろん、10 と 11 の不一致は 100 と 110 の不一致と同じくらい悪いとも言えます。この場合、合計に対する距離を取ることができますa + b
(Bray Curtis の正規化または正規化されたユークリッド メトリックとして知られています) 。
D = abs(A - B) ./ (A + B)
S = 1 - D / max(D(:));
両方の行列の同じ位置にゼロ値のピクセルがある場合、問題が発生します。繰り返しますが、いくつかの可能性があります: ゼロによる除算を防ぐ小さな正の値alpha
(例: ) で合計を増やすことができます。alpha = 1e-6
D = abs(A - B) ./ (alpha + A + B)
別のオプションは、無限値を無視して、D
ここに「ゼロ処理」を追加することです。
D = abs(A - B) ./ (A + B)
D(A == 0 | B == 0) = nan;
S = 1 - D / max(D(:));
ほら、たくさんの可能性があります。
1. I would like to create a correlation matrix [...]
この点についてもっとよく考えて、何を計算するかをより適切に説明する必要があります。行列のサイズが の場合、変数m x m
があります。これから、すべてのピクセルと他のすべてのピクセルとの相関を測定するm^2
相関行列を計算できます。m^2 x m^2
この行列には、対角線にも最大値があります (これらは分散です)。ただし、実現が 2 つしかない場合は、相関行列を計算することはお勧めしません。
もう 1 つのオプションは、2 つの画像の行または列の類似性を測定することです。1 x m
次に、相関係数のベクトルになります。
ただし、対角に最大値を持つm x m
size の 2 つの入力からsize の相関行列を計算する方法がわかりません。m x m
一般的な相関係数を取得するには、 を使用しますcorr2
。ドキュメントから:
r = corr2(A,B)
A と B の間の相関係数 r を返します。ここで、A と B は同じサイズの行列またはベクトルです。r は double のスカラーです。
ざっくり、計算してるだけだと思いますcorr(A(:), B(:))
。