2つの画像間のピアソン相関係数を見つけるために次のC#コードを書いています。完全なソースコードはhere in the DotNetFiddleです。ピアソン相関係数
相関ソースコード:
public sealed class PearsonCorrelation
{
public static double GetSimilarityScore(double[,] p, double[,] q)
{
int Width = p.GetLength(0);
int Height = p.GetLength(1);
if (Width != q.GetLength(0) || Height != q.GetLength(1))
{
throw new ArgumentException("Input vectors must be of the same dimension.");
}
double pSum = 0, qSum = 0, pSumSq = 0, qSumSq = 0, productSum = 0;
double pValue, qValue;
for (int y = 0; y < Height; y++)
{
for (int x = 0; x < Width; x++)
{
pValue = p[y, x];
qValue = q[y, x];
pSum += pValue;
qSum += qValue;
pSumSq += pValue * pValue;
qSumSq += qValue * qValue;
productSum += pValue * qValue;
}
}
double numerator = productSum - ((pSum * qSum)/(double)Height);
double denominator = Math.Sqrt((pSumSq - (pSum * pSum)/(double)Height) * (qSumSq - (qSum * qSum)/(double)Height));
return (denominator == 0) ? 0 : numerator/denominator;
}
}
結果:
同じ画像を2つの画像ボックスにロードされます。
これらの相関係数の値は、-1
となりました。
これが正しい結果ですか?
いいえの場合は、修正するために何をすべきですか?
を参照してください置く必要があります'n' - 点数 - Heightだけでなく' Height * Width'です –
あなたが使用している数式への参照を私たちに提供できるなら、非常に役に立ちます。しかし、2つの画像が同じなので結果は1でなければならないと私は信じています。さらに、分母は常に正であるため、分子に何か問題があるはずです。 – Mahdi
@Mahdi、https://github.com/cureos/aforge/blob/master/Sources/Math/Metrics/PearsonCorrelation.cs – anonymous