Image Recognition using edge detection?
I am trying to implement some kind of logo recognition for books. My ultimate task is to take a picture of 4-5 of these logos on books and to be able to recognize them. The logos look like: example, and amount to around 20 different ones. As you can notice, they are fairly simplistic and my attempts to use feature (corner) recognition with ORB/AKAZE/others are not really working. I tried various parameters for: preprocessing the images (enhance contrast, gaussian blur), feature&descriptor extracting (except SIFT/SURF because of their license), selecting the best features (min-distance threshold, ratio test, top 10). Trying to make any of these work with findHomography with RANSAC is very inaccurate (can tweak things so that it works for a specific case but fails completely at others).
Looking at their results, it seems that the logos are just too simplistic and do not have any good defining features. The above methods still find good matches with keypoints that are completely unrelated to the logos (even though not many). I believe I need to change my approach and am thinking of the following:
- implement a clustering algorithm (instead of findHomography) to group features together and stop at some max threshold when a new keypoint to-be-added is too far from the others //EDIT: I mean hierarchical clustering here
- use hough transform for clustering as in the Lowe paper (though I do not yet understand how)
- something else?
Any ideas I could try or comments regarding the above? Is there maybe some sort of image recognition using more details about shape, as opposed to corners? Or some kind of recognition using canny edges? Are Ridge- or blob- recognition good options to investigate?
How about trying a matchTemplate approach? It seems a way better solution for these simplistic shapes.
@StevenPuttemans I do have my doubts on that, if you can please clarify for me: What if the logo on the book is skewed a bit? And about the size? I can't know beforehand how large the logo is going to be in the image. Also colors? Should all images be made binary then, assuming the logos are black & white?
Hmm if you want to incorporate variance, then you will have to build a model that is able to cope robustly with that. You can skip clustering and keypoints then, and I suggest moving on the the object detection and localisation interfaces of OpenCV, like cascade classifiers, HOG+SVM, random forests, ...