Finding multiple instances of same object

Hi, I’m trying to find multiple instances of similar object in one picture.

Object is this black ring on light background. So far, I was able to find it with:
-template matching, with results differing from images and templates used (as expected)
-using inRange() color filter for image in HSV and RGB color space, with fairly good results,
-Haar/LBP Cascades that work remarkably well,

I wanted to do it using Feature Matching, but I can’t get it to work properly. Depending on used detector, it detects features inside and in neighbourhood of the object, but it cannot match template with objects properly. Template is square image of black ring on light background, cut from pictures. Could it be because object is “too simple”? I use high resolution pictures (~12Mpixels), could that be a problem?

Also, I wanted to ask, what are other methods that I could check for this application.

template matching… doesn’t work here. it’s for fixed size things.

a simple ring has very few “features”. that approach, for the rings, is also wrong.

discard all your approaches. present the problem, ask for approaches. what are you really trying to achieve here? zoom out with your explanation. I won’t bother guessing.

you aren’t looking for those rings. you are looking for the whole mat. am I right? if yes, that is what you should have said.

So, to rephrase my problem:
I’m trying to find given object (black ring in light square) in picture. Above I’ve given an example of a cutting mat with four markers on it. I’m looking for approaches to detect those four rings, not a whole mat. I’ve already tried a couple of methods. One of them is feature matching, but it didn’t work. My questions are:

  • why doesn’t feature matching work? is it because the marker is too simple, and detectors need more complex templates to match?

  • what are other approaches I could try?


run drawKeypoints, look at what features you get from your picture.

that circle may result in one or two features, a few more for the corners, and that’s it.

that’s absolutely the wrong approach here. it will not work, and trying to make it work is tilting at windmills.

feature matching in general is the wrong approach if you want to detect any kind of fiducial.

other approaches… blob detection and filtering for circularity. OpenCV has code for that.

or perhaps you could do some research into what fiducials have been shown to be easy to detect and localize. reinventing the wheel is somewhat pointless.

if it turns out that you’re trying to estimate a plane, or put anything on that plane and perspective-warp it… that would be frustrating, because that is exactly what I asked about.