2010-08-21 13 views
1

Je compte des objets dans une image. Je souhaite effectuer une interpolation linéaire où je connais les tailles de pixels de mes objets aux perspectives proches et lointaines et les positions de ces deux objets dans l'image. Les images au bas de l'image sont plus grandes car elles sont proches de la caméra qui les a prises.Interpolation d'objet par distance dans une image

L'image à analyser est la même chose de cette question ici ... link text

Je me rends compte que l'interpolation linéaire ne fonctionne que sur un plan, ici de haut en bas, de sorte que des idées sur la façon de le faire correctement serait bien. C'est pour une dissertation de maîtrise, j'ai fait les bits «durs» - la classification des images, la collecte de données, mais je viens de frapper un mur de brique mentale, entre Java (en cours d'utilisation) et R (maintenant juste pour les statistiques), De l'aide serait grandement appréciée!

Répondre

0

Donc, j'utiliserais l'équation de projection 3D et travailler à l'envers pour trouver les x, y, z de certains objets dans votre scène. Donc, vu la taille de votre objet, la distance focale de votre caméra, vous pouvez calculer les x, y, z de l'objet dans le cadre.

Je ferais quelques suppositions à propos de la caméra (pas de rotation, pas de translation, la caméra est assise à 0, 0, 0 sur l'axe z).

image.x = model.x * camera.focalLength/model.z 
image.y = model.y * camera.focalLength/model.z 

les Retournement autour de vous obtenez:

model.x = image.x * model.z/camera.focalLength; 
model.y = image.y * model.z/camera.focalLength; 

Cela suppose que vous connaissez la distance au point que vous croyez que l'objet repose de la caméra (à savoir model.z). De même, si vous voulez calculer la distance de l'objet de la caméra, vous pouvez calculer la model.z cette façon:

model.z = model.x * camera.focalLength/image.x 
model.z = model.y * camera.focalLength/image.y 

Trick Je suppose est de déterminer ce que vous devez utiliser pour model.x et model.y dans ce cas. Si vous prenez la largeur de votre objet ou la hauteur de votre objet, vous pouvez créer une relation entre la largeur constante de votre objet et la largeur de votre objet dans la scène lorsqu'elle change de distance.

model.z = model.width * camera.focalLength/image.width; 
model.z = model.height * camera.focalLength/image.height; 

Été assis sur cette réponse pendant quelques jours, donc je vérifie mes faits. Mais cela correspond à peu près à l'autre poste.

0

Homography est la méthode mathématique qui traduit entre les distances d'objet de la caméra dans la variation de taille qui résulte de la projection en perspective. Fondamentalement, la taille de l'objet tel qu'il apparaît sur une image de caméra est proportionnelle à la taille du monde réel de l'objet divisé par la distance de l'objet par rapport à l'appareil photo. Disons qu'il y a deux objets, A et B, qui ont la même taille de monde réel. A est à distance D A et B est à distance D B. Leurs tailles, telles qu'elles apparaissent sur l'image de la caméra, sont H A et H B.

Pour un C de l'objet, de même taille dans le monde réel que A et B, qui se trouve à la distance (1- α) D A + (α) D B, sa taille sur l'image de la caméra est donnée par:

+1

Pourriez-vous terminer ce que vous disiez? Il semblait exactement ce que je voulais! –