As I know, Homography (projective transformation) in computer vision can be used to detect object in images but all the examples, I've seen, were on planar objects. Does Homography only work on a planar surface object? Or It can detect any kind of objects? I'm asking because I tried to find the object below (It's a non planar surface object) with no success:
In this link, you can see the code. I used it as it's with just updating the name of images so what we're doing is the following:
- Getting the keypoints from the 2 images using SURF
- Describe the keypoints using SURF descriptor
- Try to match the keypoints between the 2 images
- Use the list of matched key points to compute Homography matrix.
- Get the coordinates of the object corner points.
- Apply perspectiveTransform to get their correspondings in the scene image
- Draw lines between the results points.
Please note that the green lines drawn inside the big circles in the images are the line drawn to represent the results points.
Based on what I showed above, it seems to me that there is something not clear in my understanding of Homography and where it can be applied because this kind of example is quite simple and it didn't work. I'm currently looking into OpenCV code to understand exactly how they estimate it but it's not going quickly.So, does anyone have any clue on how OpenCV computes this transformation? Or any reference that can help in this situation?
EDITED:
Here is another example:

I applied the homography on the object and the yellow box which is just containing the instrument I need. The results are even worse because now it's somehow a point as you can see in the green point surrounded by the red circle. Also, I can't take images for the objects from the scene because I have a lot of videos so what I'm doing is taking a separate images for each intruments and trying to find them in the scene videos.


SURF works with any kind of objects, I tested the same code which you are using on my image, and here are the results. Upon my understanding, the algorithm does not always support in finding the objects in another scene. It works well if the object image is extracted from the scene image.
Try these different options depending on your need:
(1) If you have various series of source images, you can extract the desired object from the scene image and find its position in other scene images.
(2) Try to crop the object image without any background, it is not always successful, but it will work even if the angle changes.
(3) Sometimes changing the minHessian value, and depending on the keypoints count, where only lesser keypoints will be detected you will have a chance of detecting your image.