以下是一个函数,它采用两个相等大小的向量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:现在输出矢量的格式是正确的,但是这些值关闭了很多。
可能的语法错误。 'zx'和'zy'在你的循环中是单数值。我假设你会想要这些作为载体? 'zx(i)'和'zy(i)'?你可以通过计算你想要的矢量来避免循环:'zx =(X - meanX)/ stdX; zy =(Y - meanY)/ stdY;'。另外,根据您的MATLAB版本,您可能需要明确执行元素相乘:'mult = zx。* zy;'。 – rayryeng
我已经更新了我的一些功能,但我仍然认为它没有返回正确的系数 – Teej
您的'mult'也是不正确的。它只报告一个值,这是在循环结尾。 – rayryeng