フィルターのクリア

Cross-correlation in frequency domain and xcorr2 in MATLAB

17 ビュー (過去 30 日間)
Shy
Shy 2024 年 5 月 11 日
コメント済み: Shy 2024 年 5 月 12 日
What are the reasons for the differences between my frequency domain cross-correlation results and those obtained using the xcorr2() function in MATLAB? Is it possible that xcorr2() performs spatial domain cross-correlation, and how might this affect the results?
img1 = imread('1.jpg');
img2 = imread('2.jpg');
img1_gray = rgb2gray(img1);
img2_gray = rgb2gray(img2);
[m, n] = size(img1_gray);
[p, q] = size(img2_gray);
fft_img1 = fft2(img1_gray, m + p - 1, n + q - 1);
fft_img2 = fft2(img2_gray, m + p - 1, n + q - 1);
cross_correlation = (fft_img1 .* conj(fft_img2));
cross_correlation = ifft2(cross_correlation);
cross_correlation = fftshift(cross_correlation);
cross_correlation_xcorr2 = xcorr2(img2_gray, img1_gray);
figure;
subplot(2, 1, 1);
imshow(cross_correlation, []);
title('Custom Cross-Correlation');
subplot(2, 1, 2);
imshow(cross_correlation_xcorr2, []);
title('xcorr2');
Results:
  2 件のコメント
Paul
Paul 2024 年 5 月 11 日
Can you add 1.jpg and 2.jpg to your post using the Paperclip icon on the Insert menu?
Shy
Shy 2024 年 5 月 11 日
Sure.

サインインしてコメントする。

採用された回答

Paul
Paul 2024 年 5 月 11 日
Hi Shy,
Assuming that the output of the xcorr2 is the expected result, it can be obtained with the changes below
img1 = imread('1.jpg');
img2 = imread('2.jpg');
img1_gray = rgb2gray(img1);
img2_gray = rgb2gray(img2);
[m, n] = size(img1_gray);
[p, q] = size(img2_gray);
%fft_img1 = fft2(img1_gray, m + p - 1, n + q - 1);
fft_img1 = fft2(flipud(fliplr(img1_gray)), m + p - 1, n + q - 1);
fft_img2 = fft2(img2_gray, m + p - 1, n + q - 1);
%cross_correlation = (fft_img1 .* conj(fft_img2));
cross_correlation = (fft_img1 .* fft_img2);
cross_correlation = ifft2(cross_correlation);
%cross_correlation = fftshift(cross_correlation);
cross_correlation_xcorr2 = xcorr2(img2_gray, img1_gray);
figure;
subplot(2, 1, 1);
imshow(cross_correlation, []);
title('Custom Cross-Correlation');
subplot(2, 1, 2);
imshow(cross_correlation_xcorr2, []);
title('xcorr2');
  3 件のコメント
Paul
Paul 2024 年 5 月 11 日
As I undersand it, xcorr2(x,y) is the the same as conv2 of x and the 2D-reversed conjugate of y. But in this case, img1_gray is real, so its conjugate is itself. With that understanding, I just made the fft stuff implement the convolution of img2 and the 2D-reverse of img1 (because img1 is the second argument to xcorr2).
Shy
Shy 2024 年 5 月 12 日
Okay, I get it. Thanks

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeRed についてさらに検索

製品


リリース

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by