以下是采用两个相等大小的矢量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:现在输出向量的格式是正确的,但值很多都是关闭的。
答案 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)))