【发布时间】:2017-04-19 17:28:00
【问题描述】:
以下是一个函数,它采用两个大小相等的向量 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:现在输出向量的格式是正确的,但是值相差很多。
【问题讨论】:
-
可能的语法错误。
zx和zy将是循环中的奇异值。我假设你会想要那些作为向量?zx(i)和zy(i)?您可以通过仅计算您想要矢量化的内容来避免循环:zx = (X - meanX) / stdX; zy = (Y - meanY) / stdY;。此外,根据您的 MATLAB 版本,您可能需要显式执行逐元素乘法:mult = zx .* zy;. -
我已经更新了一些函数,但我仍然认为它没有返回正确的系数
-
您的
mult也不正确。它只报告一个值,即循环结束。 -
我将如何更改 mult 以便它存储相乘数字对的所有值的数组?
-
知道了。我只需要在循环之前初始化 mult 然后索引它,现在一切正常。
标签: matlab image-processing correlation coefficients correspondence