Votre problème est tout à fait standard dans le domaine.
Tout d'abord,
vous devez calibrer votre appareil photo. Cela peut être fait hors ligne (rend la vie beaucoup plus simple) ou en ligne par l'auto-calibrage.
Calibrez-le hors ligne - s'il vous plaît.
Deuxièmement,
Une fois que vous avez la matrice d'étalonnage de la caméra K déterminez la matrice de projection de la caméra dans une scène successive (vous devez utiliser la parallaxe comme mentionné par d'autres). Ceci est bien décrit dans ce Tutoriel OpenCV .
Vous devrez utiliser les informations du GPS pour trouver l'orientation relative entre les caméras dans les scènes successives (ce qui peut être problématique en raison du bruit inhérent à la plupart des unités GPS), c'est-à-dire l'orientation de la caméra. R y t mentionné dans le tutoriel ou la rotation et la translation entre les deux caméras.
Une fois que vous aurez résolu tout cela, vous aurez deux matrices de projection --- des représentations des caméras à ces scènes successives. En utilisant l'une de ces matrices dites de caméra, vous pouvez "projeter" un point 3D M de la scène à l'image 2D de la caméra en coordonnées de pixel m (comme dans le tutoriel).
Nous allons l'utiliser pour trianguler le point 3D réel à partir des points 2D trouvés dans votre vidéo.
Troisièmement,
utiliser un détecteur de points d'intérêt pour suivre le même point dans votre vidéo qui se trouve sur l'objet d'intérêt. Il existe plusieurs détecteurs disponibles, je recommande SURF puisque vous avez OpenCV qui a aussi plusieurs autres détecteurs comme Angles de Shi-Tomasi , Harris , etc. .
Quatrièmement,
Une fois que vous avez suivi les points de votre objet dans la séquence et obtenu les coordonnées des pixels 2D correspondants, vous devez trianguler pour trouver le point 3D le mieux adapté compte tenu de votre matrice de projection et des points 2D. ![Triangulation]()
L'image ci-dessus illustre bien l'incertitude et la façon dont le point 3D le mieux adapté est calculé. Bien sûr, dans votre cas, les caméras sont probablement en face l'une de l'autre !
Enfin,
Une fois que vous avez obtenu les points 3D sur l'objet, vous pouvez facilement calculer la distance euclidienne entre le centre de la caméra (qui est l'origine dans la plupart des cas) et le point.
Note
Ce n'est évidemment pas facile, mais ce n'est pas si difficile non plus. Je vous recommande l'excellent livre de Hartley et Zisserman. Géométrie à vues multiples qui a décrit tout ce qui précède de manière explicitement détaillée, avec un code MATLAB à la clé.
Amusez-vous bien et continuez à poser des questions !
0 votes
En fin de compte, je pense que vous devrez faire au moins une hypothèse sur les objets que vous suivez : leur taille. Avec tout ce que vous avez (pas de radar, par exemple), vous devrez deviner la taille des objets afin d'évaluer leur distance.
1 votes
Avec une seule caméra et sans connaître leur taille réelle, ce n'est pas possible.
1 votes
@BlueJRaja - "Une seule caméra" n'a pas d'importance dans ce cas. La vidéo est en mouvement, donc deux images successives peuvent être utilisées pour obtenir les deux points de vue différents. Parallaxe temporelle : stackoverflow.com/questions/2135116/
1 votes
Comme le souligne Robert, BlieRaja a tort sur ce point.
0 votes
C'est un beau projet sur lequel vous travaillez (j'ai également ajouté mon point de vue sur le problème) - est-ce pour un projet scolaire ?
0 votes
@Jacob, Non, c'est lié à quelque chose que je vais faire pour le travail. J'essaie de faire des recherches préliminaires.