Итак, когда я пытаюсь найти шаблон B в большом изображении A, я могу это сделать, найдя максимум взаимной корреляции, например, в пространственном домене:Перекрестная корреляция в частоте и пространственной области - сопоставление шаблона
% Finding maximum of correlation:
phi = normxcorr2(B,A);
[ymax, xmax] = find(phi == max(phi(:)));
% Find position in original image:
ypeak = ymax - size(B,1);
xpeak = xmax - size(B,2);
Но когда я хочу сделать это в частотной области, я получаю неправильные результаты:
% Calculate correlation in frequency domain:
Af = fft2(A);
Bf = fft2(B, size(A,1), size(A,2));
phi2f = conj(Af)'*Bf;
% Inverse fft to get back to spatial domain:
phi2 = real(ifft(fftshift(phi2f)));
% Now we have correlation matrix, excatly the same as calculated in
% the spatial domain.
[ymax2, xmax2] = find(phi2 == max(phi2(:)));
Я не понимаю, что я делаю неправильно в частотной области. Я пробовал это без fftshift, это дает другой результат, хотя и неправильный. Как я могу сделать это правильно?
Глядя на определение 'normcorr2', я думаю, мы можем предположить, что B ваш шаблон и А ваш образ? Я думаю, было бы хорошо, если бы вы добавили это, просто для ясности. – kkuilla
@kkuilla отредактировал – Vidak
И если у вас есть изображения, добавьте их вместе с ожидаемым и реальным выходом, чтобы он стал повторяемым. – kkuilla