MATLAB Answers

Finding correlation between two images

43 views (last 30 days)
Mohammad Saquib Khan
Mohammad Saquib Khan on 24 Sep 2021 at 8:29
Commented: Image Analyst on 25 Sep 2021 at 13:01
Suppose I want to perform correlation between two images. I know there is a function normxcorr2 which can be used to find the correlation between two images (img1, img2) like this
When I run the imfilter command and use the imshow() command to output the resulting image, I can see that it is different from what I get when I output the resulting image using normxcorr2 command.The image generated through normxcorr2 looks more like what i would expect from the correlation of the two images. What's the difference between these two methods?
C = normxcorr2(img1, img2)
But can I find the correlation using imfilter? Does this command perform correlation?
corr = imfilter(img1, img2, 'corr','replicate');
When I run the imfilter command and use the imshow() command to output the resulting image, I can see that it is different from what I get when I output the resulting image using normxcorr2 command.
imshow(C);
figure
imshow(corr);
The image generated through normxcorr2 looks more like what i would expect from the correlation of the two images. What's the difference between these two methods? Is using imfilter even logical?
  2 Comments
Mohammad Saquib Khan
Mohammad Saquib Khan on 24 Sep 2021 at 9:26
I haven't yet looked into the documentation but I will surely do that now. What if after computing my variable corr, I normalise it? Will then the the two resulting images be same?

Sign in to comment.

Accepted Answer

Image Analyst
Image Analyst on 24 Sep 2021 at 13:11
normxcorr2() scans the image with a window and does a normalization at each location. imfilter() does not. It simply moves the window, multiplies the pixels together, and sums -- no normalization. You cannot normalize a xcorr2() or imfilter() output image to make it look like what it would look like if it had normalized the subimages at each location.
  4 Comments
Image Analyst
Image Analyst on 25 Sep 2021 at 13:01
If your output is a floating point image you're going to have to make sure it's in the range 0-1 or else any values more than 1 will show up as white. Try casting to uint8 before display. If it's a gray scale floating point image, try
imshow(yourImage, []);

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!