Hi,
I want to do "TV channel" detection by identifying the "channel logo".
Suppose I need to identify two channels: A and B. I grab some sample screenshots, and find out the region of these logos in their respective screenshots as ROI_A and ROI_B.
I'm trying with opencv's feature2d framework (SurfFeatureDetector/SurfDescriptorExtractor and FlannBasedMatcher, but the result is not working. Any suggestions will be appreciated.
Now the detection task is performed as:
- Given a screenshot of an unknown channel, the image SCENE.
- For logo A:
- get A's pre-calculated SURF data (keypoints, descriptors)
- calculate SCENE(ROI_A) region's SURF data
- use FlannBasedMatcher upon these descriptors to get some "match" data
- repeat such process for other logos (here the B)
- I have posted a resultant picture, the right side is the sample scene, the left side has two different logos. The upper one is a random one, the bottom one is the same as the logo on the scene. But the upper one obviously have a lot of "matches", while the bottom one barely has few. i.e., totally wrong.
So my questions are: 1. For my task, the logo's region is fixed for a specific one, and no rotation or scaling need to be considered. So is the feature2d framework appropriate for this, or is there some other opencv feature better fit for this? 2. How do I get a good logo image as the object, currently I find some clean scenes (those with pure color background) and use the logo on that scene as target object. 3. I thought I could count on the number of "matches" to get the correct channel (the logo with the most matches will be regarded as the channel). But the experiment shows this is not reliable. As I only want to know whether it's matched, but not the object's location, how to do this?
Thanks again for your time,
Test result picture: