【问题标题】:How do I write correlation coefficient manually in matlab?如何在matlab中手动编写相关系数?
【发布时间】: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:现在输出向量的格式是正确的,但是值相差很多。

【问题讨论】:

  • 可能的语法错误。 zxzy 将是循环中的奇异值。我假设你会想要那些作为向量? 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


【解决方案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)))

【讨论】:

  • 似乎这些函数输出的矩阵的值比 corr 函数的值多。
猜你喜欢
  • 2013-04-12
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
  • 2014-12-21
  • 2011-09-11
相关资源
最近更新 更多