OpenCV extrinsèques de la caméra à partir d'une entité points
Comment puis-je récupérer la matrice de rotation, la translation de vecteur et peut-être que certains facteurs d'échelle de chaque caméra à l'aide d'OpenCV lorsque j'ai des photos d'un objet à partir de la vue de chacune de ces caméras? Pour chaque image, j'ai l'image des coordonnées de plusieurs points métrages. Pas toutes les fonctionnalité de points sont visibles dans toutes les images.
Je veux une carte le calcul des coordonnées 3D de la fonction des points de l'objet à une manière légèrement différente objet d'aligner la forme de la deuxième objet de l'objet premier.
J'ai entendu, il est possible à l'aide de cv::calibrateCamera(...)
mais je ne peux pas obtenir assez à travers elle...
Quelqu'un qui ont des expériences avec ce genre de problème?
Les coordonnées 3d de l'objet photographié sont inconnus.
Si le monde de la 3d des coordonnées des points de l'objet sont inconnu, je ne pense pas que cv::calibrateCamera de travail, car il semble supposer que les points de l'objet sont connu.
Vous regardez le bundle ajustements trop: en.wikipedia.org/wiki/Bundle_adjustment. Cela suppose que vous avez un estimation initiale de l'appareil photo pose. Le problème est alors de reconstruire tous les points et toutes les poses.
Cela semble être exactement ce dont j'avais besoin! Je vous remercie pour votre durée d'attention et de votre temps!
OriginalL'auteur Martin Hennig | 2011-11-15
Vous devez vous connecter pour publier un commentaire.
J'ai été confronté au même problème que vous, dans OpenCV. J'ai eu une image stéréo paire et je voulais calculé les paramètres extérieurs de la photo et les coordonnées de tous les points observés. Ce problème a été traité ici:
Berthold K. P. Horn. Orientation Relative revisité. Berthold K. P. Horn. Laboratoire d'Intelligence artificielle, de l'Institut de Technologie du Massachusetts, 545 Technologie ...
http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.64.4700
Cependant, je n'ai pas réussi à en trouver un adapté à la mise en œuvre de ce problème (peut-être que vous trouverez un). Faute de temps je n'ai pas le temps de comprendre toutes les mathématiques dans le présent document et le mettre en œuvre moi-même, alors je suis venu avec un quick-and-dirty solution qui fonctionne pour moi. Je vais vous expliquer ce que j'ai fait pour le résoudre:
En supposant que nous avons deux caméras, où la première caméra a de paramètres externes RT = Matx::l'oeil (les yeux). Maintenant faire une supposition sur la rotation R de la deuxième caméra. Pour chaque paire de points de l'image observée dans les deux images, nous calculons les directions de leurs rayons dans les coordonnées du monde et de les stocker dans un 2d-tableau dirs (EDIT: à L'intérieur des paramètres de la caméra sont supposées connues). Nous pouvons le faire car nous supposons que nous connaissons l'orientation de chaque caméra. Maintenant, nous construisons un système linéaire surdéterminé AC = 0 où C est le centre de la deuxième caméra. Je vous fournir la fonction pour calculer Une:
Puis de l'appel cv::SVD::solveZ(A) vous donnera le moins de carrés de la solution de norme 1 de ce système. De cette façon, vous obtenez la rotation et la translation de la seconde caméra. Cependant, depuis que j'ai juste fait une hypothèse sur la rotation de la seconde caméra, je fais plusieurs conjectures sur sa rotation (paramétrable à l'aide d'un 3x1 vecteur omega à partir de laquelle je calcule la matrice de rotation à l'aide de cv::Rodrigues) et puis j'ai affiner cette supposition en résolvant le système AC = 0 repetedly dans un Levenberg-Marquardt optimiseur numérique jacobien. Il fonctionne pour moi, mais c'est un peu sale, de sorte que vous si vous avez le temps, je vous encourage à mettre en œuvre ce qui est expliqué dans le papier.
EDIT:
Ici est la routine dans la Levenberg-Marquardt optimizer pour évaluer le vecteur des résidus:
En passant, j'ai cherché un peu plus sur l'internet et trouver un autre code qui pourrait être utile pour le calcul de l'orientation relative entre les caméras. Je n'ai pas essayé le code, mais il me semble utile:
http://www9.in.tum.de/praktika/ppbv.WS02/doc/html/reference/cpp/toc_tools_stereo.html
http://lear.inrialpes.fr/people/triggs/src/
http://www.maths.lth.se/vision/downloads/
cv::calibrateCamera(...)
fonctionne très similaire à ce que vous avez proposé. Ils décrivent l'algorithme comme suit:1. Tout d'abord, il calcule les initiales des paramètres intrinsèques (l'option est uniquement disponible pour les planaires mires) ou les lit à partir des paramètres d'entrée. La distorsion coefficients sont tous des zéros dans un premier temps (à moins que certains de CV_CALIB_FIX_K? sont mentionnés). 2. La première caméra pose est estimé que si les paramètres intrinsèques ont été déjà connu. Ceci est fait en utilisant FindExtrinsicCameraParams2
3. Après que le mondial de Levenberg-Marquardt optimisation de l'algorithme est exécuté afin de minimiser l'erreur de reprojection, c'est à dire la somme totale des carrés des distances entre la fonction de points de imagePoints et projetée (en utilisant les estimations actuelles pour les paramètres de la caméra et de la pose) points de l'objet objectPoints ; voir ProjectPoints2 .
C'est le lien vers la documentation de
cv::calibrateCamera
: opencv.willowgarage.com/documentation/cpp/...La solution ci-dessus suppose que le monde de la 3d coordonnées ne sont pas connues. Si elles sont connues, cv::calibrateCamera sera probablement très bien.
OriginalL'auteur Rulle
Sont ces caméras fixes qui vous souhaitez calibrer pour une utilisation future comme une paire stéréo? Dans ce cas, vous pouvez utiliser la cv::stereoCalibrate() fonction. OpenCV contient un exemple de code, dont l'un est stereo_calib.cpp qui peut valoir la peine d'examiner.
cv::calibrateCamera(...)
utilisecv::stereoCalibrate()
dans le calcul des progrès.Ok, c'est votre seule caméra calibrée (c'est à dire que vous connaissez les paramètres intrinsèques - longueur focale, pixel de l'incliner, le principe de point, de la distorsion des coefficients)?
J'ai pu les estimer, mais les vraies valeurs sont inconnues.
OriginalL'auteur Chris