Ниже приведена функция, которая принимает два вектора одинакового размера X и Y и должна возвращать вектор, содержащий одиночные коэффициенты корреляции для соответствия изображения. Предполагается, что функция работает аналогично встроенной функции 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) выше выдавал тот же результат в corr(X,Y) Matlab при задании векторов одинакового размера значений интенсивности изображения.
Редактировать 2: теперь формат выходного вектора правильный, однако значения сильно отличаются.
zx
иzy
будут единственными значениями в вашем цикле. Я предполагаю, что вы бы хотели, чтобы они были векторами?zx(i)
иzy(i)
? Вы можете избежать зацикливания, просто вычислив то, что вы хотите векторизовать:zx = (X - meanX) / stdX; zy = (Y - meanY) / stdY;
. Кроме того, в зависимости от вашей версии MATLAB вам может потребоваться явно выполнить поэлементное умножение:mult = zx .* zy;
. - person rayryeng   schedule 19.04.2017mult
также неверен. Он сообщает только об одном значении, которое находится в конце цикла. - person rayryeng   schedule 19.04.2017