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