Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

BRISK+FREAK: Which Matcher and which "correct" filter logic to use

Hi Guys, I really need you help please.

Before i write this post, i've read many tutorials, mades different searches, and try to understand all the concepts involved in computer vision. I never heard about Computer Vision before, so i'm a newbie in this field.

Let's start from explain the specific problem. I would like to know how much similar two images are. I know there are a lot of posts/info/tutorials/sites about that, and i swear i've already read it all! For example i've started from these links (i think that somes of them, could be interesting for all of you):

http://answers.opencv.org/question/20400/switching-from-brisk-to-freak-descriptor-causes/

http://answers.opencv.org/question/18413/freak-or-brisk-neither-good-nor-faster-than/

http://answers.opencv.org/question/15760/object-detection-with-freak-hamming/

http://answers.opencv.org/question/11840/false-positive-in-object-detection/

http://answers.opencv.org/question/4829/how-to-filter-freakbruteforcematcher-result/

And some code Examples:

http://www.programering.com/a/MTNzAzMwATc.html

https://github.com/rghunter/BRISK/blob/master/src/demo.cpp

http://find-object.googlecode.com/svn/trunk/find_object/example/main.cpp

https://github.com/kikohs/freak/blob/master/demo/freak_demo.cpp

Specifically: I have a photo of a dog: first photo is only the face of the dog, the second one is the same dog but laied on a green field. For me, the images are similar (is the same dog).

Then i have a photo with another dog face. It's a different dog, and i would like to filter this photo like "no similar" (before answer "use BOW", please continues in reading).

The OpenCV release is the last (2.4.9)

I need help on SPECIFIC combinations of descriptor/extractor/matcher: I use BRISK as detector (because it's light and free) I use FREAK as descriptor (becuse it's light - more than BRISK descriptor, because it's free and because it's a float descriptor like BRISK).

I've read that other good combinations are: ORB+ORB & BRISK+ BRISK (I've never tried the first combination, but the second it's slow than the second one)

Then i tried different kind of matchers: - BFMatcher (with CrossCheck = true (and no filter logic) & CrossCheck = false + filter logic) - Flann Matcher

For the first one (BF) i've try both match & knnMatch methods For the second one i've try only knnMatch method with different filter logic.

What i understand (or what i thik i've understand) is that for each detector there is a "better" matcher (BF/Flann). And for each matcher (used with previous combination) there is only ONE "good way" to detect the right match from the knnMatch method.

So the question: which matcher i should use with BRISK+FREAK and MORE IMPORTANT: which distance filter logic i've should implement?

I don't think it'a a problem that i can solve with homography (i don't have to find a specific object in scene, but just knows how similar images are). Could BOW be the BEST way to proceed? In this case, could you provide a link/tutorial to use BOW with these specific descriptor/extactor? I've alredy check differents links provided in this forum. For example:

https://github.com/shackenberg/Minimal-Bag-of-Visual-Words-Image-Classifier

http://answers.opencv.org/question/17460/how-to-use-bag-of-words-example-with-brief/

http://answers.opencv.org/question/8677/image-comparison-with-a-database/#8686

http://answers.opencv.org/question/4861/how-to-use-bag-of-words-to-predict-an-image/

http://answers.opencv.org/question/11922/how-can-i-use-keypoints-descriptors-andor-matches/

Thanks a lot for all your kind suggestions. Andrea

click to hide/show revision 2
Insert specific problem on matcher

BRISK+FREAK: Which Matcher and which "correct" filter logic to use

Hi Guys, I really need you help please.

Before i write this post, i've read many tutorials, mades different searches, and try to understand all the concepts involved in computer vision. I never heard about Computer Vision before, so i'm a newbie in this field.

Let's start from explain the specific problem. I would like to know how much similar two images are. I know there are a lot of posts/info/tutorials/sites about that, and i swear i've already read it all! For example i've started from these links (i think that somes of them, could be interesting for all of you):

http://answers.opencv.org/question/20400/switching-from-brisk-to-freak-descriptor-causes/

http://answers.opencv.org/question/18413/freak-or-brisk-neither-good-nor-faster-than/

http://answers.opencv.org/question/15760/object-detection-with-freak-hamming/

http://answers.opencv.org/question/11840/false-positive-in-object-detection/

http://answers.opencv.org/question/4829/how-to-filter-freakbruteforcematcher-result/

And some code Examples:

http://www.programering.com/a/MTNzAzMwATc.html

https://github.com/rghunter/BRISK/blob/master/src/demo.cpp

http://find-object.googlecode.com/svn/trunk/find_object/example/main.cpp

https://github.com/kikohs/freak/blob/master/demo/freak_demo.cpp

Specifically: I have a photo of a dog: first photo is only the face of the dog, the second one is the same dog but laied on a green field. For me, the images are similar (is the same dog).

Then i have a photo with another dog face. It's a different dog, and i would like to filter this photo like "no similar" (before answer "use BOW", please continues in reading).

The OpenCV release is the last (2.4.9)

I need help on SPECIFIC combinations of descriptor/extractor/matcher: I use BRISK as detector (because it's light and free) I use FREAK as descriptor (becuse it's light - more than BRISK descriptor, because it's free and because it's a float descriptor like BRISK).

I've read that other good combinations are: ORB+ORB & BRISK+ BRISK BRISK+BRISK (I've never tried the first combination, but the second it's slow than the second one) BRISK+FREAK)

Then i tried different kind of matchers: - BFMatcher (with CrossCheck = true (and no filter logic) & CrossCheck = false + filter logic) - Flann Matcher

For the first one (BF) i've try both match & knnMatch methods For the second one i've try only knnMatch method with different filter logic.

The problems is that different filter logics "sometimes" not works for all combinations of this photoset of two dogs. For example: one filter logic works good to find the same dog in photos, but doesen't works if i try to match the face of the first dog with the second one (there are two differen dogs!).

What i understand (or what i thik i've understand) is that for each detector there is a "better" matcher (BF/Flann). And for each matcher (used with previous combination) there is only ONE "good way" to detect the right match from the knnMatch method.

So the question: which matcher i should use with BRISK+FREAK and MORE IMPORTANT: which distance filter logic i've should implement?

I don't think it'a a problem that i can solve with homography (i don't have to find a specific object in scene, but just knows how similar images are). Could BOW be the BEST way to proceed? In this case, could you provide a link/tutorial to use BOW with these specific descriptor/extactor? I've alredy check differents links provided in this forum. For example:

https://github.com/shackenberg/Minimal-Bag-of-Visual-Words-Image-Classifier

http://answers.opencv.org/question/17460/how-to-use-bag-of-words-example-with-brief/

http://answers.opencv.org/question/8677/image-comparison-with-a-database/#8686

http://answers.opencv.org/question/4861/how-to-use-bag-of-words-to-predict-an-image/

http://answers.opencv.org/question/11922/how-can-i-use-keypoints-descriptors-andor-matches/

Thanks a lot for all your kind suggestions. Andrea