user987979
user987979

Reputation: 111

How do I compare two edge-images (in OpenCV)?

in my project i need to compare to images. One image shows a render-model and the other image is a photo, in which the real object, which is represented in the model, is shown. What i exactly want:

I tried to calculate the euclidian distance of the two images but the result is only good, when the pixels exactly fit to each other. Now i am searching for alterantives.

Until now i considered to use the normalized cross-correlation, but i really dont know if it fits to my task.

The question is, if the normalized cross-correlation is worth a try or if there are better methods of solving my problem!

The algorithm should be as fast as possible, because i compare a lot of images.

Thanks a lot


Thanks for your suggestions. I am a little confused due to the fact that the normalized cross-corellation and Haussdorff distance seem to be good for finding a small pattern in a big picture.

The question is: Are the two algorithms also good for comparing 2 pictures of the same size?

Here is an example of 2 images that have to be compared. At the moment i am comparing around 120 pictures-paires a second.

Too bad that i cannot post images as a new user. So here is the direct link: http://s14.directupload.net/file/d/2674/t8qzbq9i_png.htm

Upvotes: 10

Views: 11116

Answers (2)

Maurits
Maurits

Reputation: 2114

How about experimenting with the Haussdorff distance as a starting point? General idea and c implementation here. Article here:

Comparing images using the Hausdorff distance, by DP Huttenlocher - 1993.

Upvotes: 4

mevatron
mevatron

Reputation: 14011

You could also check-out cosine similarity. I used it with great success on detecting cut-scenes in a video stream. Essentially, you treat the entire image as a 1D vector, and proceed with the cosine similarity measure. Basically, small angles mean a close match, and large values mean there is a mismatch. The thresholds would need some tuning for your dataset, but it might work, and it's very fast.

Normalized cross-correlation should be more robust, but it will take a bit more time. Since you mentioned needing to handle different poses you should also look at a feature detection and extraction solution. Have a look at opencv's matcher_simple.cpp and matching_to_many_images.cpp samples. These techniques have some tolerance for scale and rotation differences.

Hope that's helpful!

Upvotes: 1

Related Questions