Finding correlation between two images
7 次查看(过去 30 天)
显示 更早的评论
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 个评论
Bjorn Gustavsson
2021-9-24
Have you looked in the documentation how normxcorr2 normalizes the x-correlation values for the different shifts, it seems a "natural" guess that it properly scales with the number of samples, while imfilter might "not bother with that" since its purpose is mainly to filter images.
采纳的回答
Image Analyst
2021-9-24
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 个评论
Image Analyst
2021-9-25
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, []);
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!