web-dev-qa-db-fra.com

Comment obtenir la taille réelle d'un objet à partir d'une image, sans connaître la distance entre l'objet et la caméra?

Je dois créer une application mobile qui calcule la taille réelle d'un objet dans une image.

J'ai fait des recherches à ce sujet et trouvé utile [question]: Comment trouveriez-vous la hauteur des objets donnés une image?

La relation entre la distance de la caméra et la taille réelle de l'objet n'est pas vraiment complexe, le rapport entre la taille de l'objet sur le capteur et la taille de l'objet dans la vie réelle est le même que le rapport entre le distance focale et distance à l'objet.

distance to object (mm) = focal length (mm) * real height of the object (mm) * image height (pixels)
                          ---------------------------------------------------------------------------
                          object height (pixels) * sensor height (mm)

Mais comment obtenir la valeur de la hauteur réelle de l'objet si la distance n'est pas connue?

Les outils qui créent des modèles 3D à partir d'images ont-ils des dimensions réelles?

26
Parth mehta

La réponse simple est vous ne pouvez pas .

Par ailleurs, c'est pourquoi les humains ont deux yeux. Si vous voulez juger de la taille sans distance connue, vous aurez besoin d'au moins deux points de référence. Cela vous permet de trianguler la position de l'objet, d'obtenir une distance et d'utiliser votre distance focale connue pour calculer la taille.

La réponse la plus complexe est il existe des moyens de contourner cela par exemple:

  1. Trichez en utilisant une référence connue:

    Par exemple, si vous avez un objet de taille connue, vous pouvez déduire la distance. C'est similaire à ce que la NASA fait pour calibrer ses caméras, par exemple.

    Vous pouvez faire des hypothèses sûres si vous traitez avec des objets communs, tels que la hauteur d'un étage lors de l'analyse de l'image d'un bâtiment.

  2. Déplacez votre appareil photo:

    Cela vous permet d'obtenir plus d'un point de référence avec la même caméra.

    Je suppose que vous pourriez utiliser l'accéléromètre pour mesurer avec précision la relation de position entre l'image capturée au point T1 dans le temps et le point T2. Cela vous donnerait deux images du même sujet avec une distance connue entre elles. Cela vous permet ensuite de trianguler comme si vous aviez deux yeux.

    Je ne sais pas si la gigue normale d'une caméra portable suffira pour la triangulation, ou si l'accéléromètre sera suffisamment précis pour positionner le téléphone de manière inertielle.

  3. Supposons une distance:

    Si votre application est conçue pour comparer quelque chose à l'échelle d'une main humaine (ou d'un autre morceau d'anatomie humaine), vous pouvez probablement supposer en toute sécurité une distance basée sur ce que les gens feront naturellement. Les limites de mise au point de l'appareil photo lui-même donneront également une plage supérieure et inférieure sur la distance à laquelle un objet peut être et être toujours au point. Ce sera probablement dans une marge d'erreur tolérable.

Comme vous le mentionnez dans votre question, il y a un sous-champ entier dédié à cette question, et c'est un domaine de recherche actif .

32
brice