如何在matlab中手动编写相关系数?

时间:2017-04-19 17:28:01

标签: matlab image-processing correlation coefficients correspondence

以下是采用两个相等大小的矢量X和Y的函数,并且假设返回包含用于图像对应的单个相关系数的矢量。如果给出两个相等大小的向量,该函数应该与matlab中的内置corr(X,Y)函数类似地工作。现在我的代码正在生成一个包含多个双数向量的向量,而不是包含单个数字的向量。我该如何解决这个问题?

function result = myCorr(X, Y)

meanX = mean(X);
meanY = mean(Y);
stdX = std(X);
stdY = std(Y);

for i = 1:1:length(X),
    X(i) = (X(i) - meanX)/stdX;
    Y(i) = (Y(i) - meanY)/stdY;
    mult = X(i) * Y(i);
end

result = sum(mult)/(length(X)-1);
end

编辑:为了澄清我希望上面的myCorr(X,Y)在给定相等大小的图像强度值矢量时在matlab的corr(X,Y)处产生相同的输出。

编辑2:现在输出向量的格式是正确的,但值很多都是关闭的。

1 个答案:

答案 0 :(得分:1)

我建议你使用r = corrcoef(X,Y)它会给你一个2x2矩阵中你想要的标准化r值,你可以只返回r(2,1)条目作为你的答案。这样做相当于

r=(X-mean(X))*(Y-mean(Y))'/(sqrt(sum((X-mean(X)).^2))*sqrt(sum((Y-mean(Y)).^2)))

但是,如果你真的想做你在问题中提到的事情你也可以做

r=(X)*(Y)'/(sqrt(sum((X-mean(X)).^2))*sqrt(sum((Y-mean(Y)).^2)))