0

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

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的科尔(X,Y),以产生相同的输出。

编辑2:现在输出矢量的格式是正确的,但是这些值关闭了很多。

+0

可能的语法错误。 'zx'和'zy'在你的循环中是单数值。我假设你会想要这些作为载体? 'zx(i)'和'zy(i)'?你可以通过计算你想要的矢量来避免循环:'zx =(X - meanX)/ stdX; zy =(Y - meanY)/ stdY;'。另外,根据您的MATLAB版本,您可能需要明确执行元素相乘:'mult = zx。* zy;'。 – rayryeng

+0

我已经更新了我的一些功能,但我仍然认为它没有返回正确的系数 – Teej

+0

您的'mult'也是不正确的。它只报告一个值,这是在循环结尾。 – rayryeng

回答

1

我建议你使用r = corrcoef(X,Y)它会给你一个2×2矩阵中的正规化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))) 
+0

看起来好像这些函数的输出矩阵的值比corr函数的值大。 – Teej