두 이미지 사이의 피어슨 상관 계수를 찾으려면 다음 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;
}
}
결과 :
같은 그림이 개 그림 상자에로드됩니다.
해당 상관 계수의 값은 -1
입니다.
올바른 결과입니까?
아니요, 수정하려면 어떻게해야합니까?
를 참조 놓아야합니다 'n'- 포인트 수 - '높이'가 아닌 '높이 * 너비' –
사용하는 수식에 대한 참조를 제공 할 수 있다면 매우 유용 할 것입니다. 그러나 두 이미지가 동일하므로 결과가 1이어야한다고 생각합니다. 게다가, 분모는 항상 양의 값이므로, 분자에 문제가있을 것입니다. – Mahdi
@Mahdi, https://github.com/cureos/aforge/blob/master/Sources/Math/Metrics/PearsonCorrelation.cs – anonymous