したがって、大きな画像 A でテンプレート B を見つけようとすると、空間ドメインで次のように相互相関の最大値を見つけることでそれを行うことができます。
% 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なしで試してみましたが、まだ間違っていますが、別の結果が得られます。どうすればこれを正しく行うことができますか?