Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detect more than 1 object on picture

I wrote a little script which let to find an object in a global picture by the SIFT descriptors method. But I have a question about multiple detections in the same picture.

I have this global picture :

enter image description here

I have this template :

enter image description here

My script looks like :

import numpy as np
import cv2

#########################
# SIFT descriptors part #
#########################

img1 = cv2.imread('/Users/valentinjungbluth/Desktop/SIFT:SURF Algo/lampe.jpg',0)
img2 = cv2.imread('/Users/valentinjungbluth/Desktop/SIFT:SURF Algo/ville.jpg',0)

# Initiate SIFT detector
sift = cv2.xfeatures2d.SIFT_create()

print (img1.dtype)
print (img2.dtype)


kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)

bf = cv2.BFMatcher()
matches = bf.knnMatch(des1,des2,k=2)

good = []
for m,n in matches :
    if m.distance < 0.2*n.distance :
        good.append([m])

img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,None,flags=2)

cv2.imwrite('matches.jpg',img3)

And the result is :

enter image description here

My question is :

How I can detect this others lamps ? Because all lamps are very similar and I want to match with all lamps which are present in the picture.

Thank you so much !

EDIT With Micka's answer :

enter image description here

Nothing appears at 0.2 scale distance, but if I put 0.75 :

enter image description here

like image 369
Essex Avatar asked Dec 15 '16 09:12

Essex


People also ask

How can I identify multiple objects in an image?

If there are multiple object to localize on an image, we use multiple object detection. As like the object localization, neural network creates 7 output vectors, but grid by grid. One image is divided by a grid 4 by 4 or 16 by 16 etc.. This example has 4 x 4 grid.

Can AI identify objects in images?

Image recognition analyses each pixel of an image to extract useful information similarly to humans do. AI cameras can detect and recognize various objects developed through computer vision training.


2 Answers

This is a good question. There are couple of ways I can think of doing this:

1.Sliding Windowing technique - You can search for the "template" in the global image by making a window, the size of the template, and sliding it in the entire image. You can do this for a pyramid so the scale and translational changes are taken care of.Sliding Window Technique

  1. SIFT - Try matching the global image with the template and find all matches. Then you should filter the matches with relative pose. May be you'd require another filtering but I think this method is more general as it caters for more constraints than the previous.

Hope it helps!

like image 195
Rick M. Avatar answered Sep 29 '22 20:09

Rick M.


Try to allow more good matches by being more permissive in the condition.

good = []
for m,n in matches :
    if m.distance < 0.2*n.distance :
        good.append([m])

A more robust approach would be to describe the lamp using the sift features extracted from the template image(s), and then try to find those features using a sliding window over the image. For each window, compute the sift features, and compute a "distance" to your template's features. If the distance is smaller than a given threshold, then the window contains a lamp!

like image 21
Hennio Avatar answered Sep 29 '22 19:09

Hennio