vector_to_pose T_vector_to_pose VectorToPose VectorToPose (Operator)
Name
vector_to_pose T_vector_to_pose VectorToPose VectorToPose
— Berechnen einer absoluten Pose aus Punktkorrespondenzen von Welt-
zu Bildkoordinaten.
Signatur
void VectorToPose (const HTuple& WorldX , const HTuple& WorldY , const HTuple& WorldZ , const HTuple& ImageRow , const HTuple& ImageColumn , const HTuple& CameraParam , const HTuple& Method , const HTuple& QualityType , HTuple* Pose , HTuple* Quality )
static HPose HImage ::VectorToPose (const HTuple& WorldX , const HTuple& WorldY , const HTuple& WorldZ , const HTuple& ImageRow , const HTuple& ImageColumn , const HCamPar& CameraParam , const HString& Method , const HTuple& QualityType , HTuple* Quality )
static HPose HImage ::VectorToPose (const HTuple& WorldX , const HTuple& WorldY , const HTuple& WorldZ , const HTuple& ImageRow , const HTuple& ImageColumn , const HCamPar& CameraParam , const HString& Method , const HString& QualityType , double* Quality )
static HPose HImage ::VectorToPose (const HTuple& WorldX , const HTuple& WorldY , const HTuple& WorldZ , const HTuple& ImageRow , const HTuple& ImageColumn , const HCamPar& CameraParam , const char* Method , const char* QualityType , double* Quality )
static HPose HImage ::VectorToPose (const HTuple& WorldX , const HTuple& WorldY , const HTuple& WorldZ , const HTuple& ImageRow , const HTuple& ImageColumn , const HCamPar& CameraParam , const wchar_t* Method , const wchar_t* QualityType , double* Quality )
(Nur Windows)
HPose HCamPar ::VectorToPose (const HTuple& WorldX , const HTuple& WorldY , const HTuple& WorldZ , const HTuple& ImageRow , const HTuple& ImageColumn , const HString& Method , const HTuple& QualityType , HTuple* Quality ) const
HPose HCamPar ::VectorToPose (const HTuple& WorldX , const HTuple& WorldY , const HTuple& WorldZ , const HTuple& ImageRow , const HTuple& ImageColumn , const HString& Method , const HString& QualityType , double* Quality ) const
HPose HCamPar ::VectorToPose (const HTuple& WorldX , const HTuple& WorldY , const HTuple& WorldZ , const HTuple& ImageRow , const HTuple& ImageColumn , const char* Method , const char* QualityType , double* Quality ) const
HPose HCamPar ::VectorToPose (const HTuple& WorldX , const HTuple& WorldY , const HTuple& WorldZ , const HTuple& ImageRow , const HTuple& ImageColumn , const wchar_t* Method , const wchar_t* QualityType , double* Quality ) const
(Nur Windows)
HTuple HPose ::VectorToPose (const HTuple& WorldX , const HTuple& WorldY , const HTuple& WorldZ , const HTuple& ImageRow , const HTuple& ImageColumn , const HCamPar& CameraParam , const HString& Method , const HTuple& QualityType )
double HPose ::VectorToPose (const HTuple& WorldX , const HTuple& WorldY , const HTuple& WorldZ , const HTuple& ImageRow , const HTuple& ImageColumn , const HCamPar& CameraParam , const HString& Method , const HString& QualityType )
double HPose ::VectorToPose (const HTuple& WorldX , const HTuple& WorldY , const HTuple& WorldZ , const HTuple& ImageRow , const HTuple& ImageColumn , const HCamPar& CameraParam , const char* Method , const char* QualityType )
double HPose ::VectorToPose (const HTuple& WorldX , const HTuple& WorldY , const HTuple& WorldZ , const HTuple& ImageRow , const HTuple& ImageColumn , const HCamPar& CameraParam , const wchar_t* Method , const wchar_t* QualityType )
(Nur Windows)
static void HOperatorSet .VectorToPose (HTuple worldX , HTuple worldY , HTuple worldZ , HTuple imageRow , HTuple imageColumn , HTuple cameraParam , HTuple method , HTuple qualityType , out HTuple pose , out HTuple quality )
static HPose HImage .VectorToPose (HTuple worldX , HTuple worldY , HTuple worldZ , HTuple imageRow , HTuple imageColumn , HCamPar cameraParam , string method , HTuple qualityType , out HTuple quality )
static HPose HImage .VectorToPose (HTuple worldX , HTuple worldY , HTuple worldZ , HTuple imageRow , HTuple imageColumn , HCamPar cameraParam , string method , string qualityType , out double quality )
HPose HCamPar .VectorToPose (HTuple worldX , HTuple worldY , HTuple worldZ , HTuple imageRow , HTuple imageColumn , string method , HTuple qualityType , out HTuple quality )
HPose HCamPar .VectorToPose (HTuple worldX , HTuple worldY , HTuple worldZ , HTuple imageRow , HTuple imageColumn , string method , string qualityType , out double quality )
HTuple HPose .VectorToPose (HTuple worldX , HTuple worldY , HTuple worldZ , HTuple imageRow , HTuple imageColumn , HCamPar cameraParam , string method , HTuple qualityType )
double HPose .VectorToPose (HTuple worldX , HTuple worldY , HTuple worldZ , HTuple imageRow , HTuple imageColumn , HCamPar cameraParam , string method , string qualityType )
Beschreibung
Der Operator vector_to_pose vector_to_pose VectorToPose VectorToPose VectorToPose
berechnet eine Pose aus
mindestens drei oder vier (abhängig von Method Method Method Method method
)
Punktkorrespondenzen von 3D-Weltkoordinaten (WorldX WorldX WorldX WorldX worldX
,
WorldY WorldY WorldY WorldY worldY
, WorldZ WorldZ WorldZ WorldZ worldZ
), gegeben in Metern, und
2D-Bildkoordinaten (ImageRow ImageRow ImageRow ImageRow imageRow
, ImageColumn ImageColumn ImageColumn ImageColumn imageColumn
),
gegeben in Pixeln sowie den internen Kameraparametern
(CameraParam CameraParam CameraParam CameraParam cameraParam
).
Dabei ist die Pose (die externen Kameraparameter) in der Form
. Dabei steht
ccs für das Kamerakoordinatensystem und
wcs für das Weltkoordinatensystem, siehe auch
Transformationen / Posen und
„Solution Guide III-C - 3D Vision“
.
Parameter Method
Je nach Wahl des Parameters Method Method Method Method method
kann gewählt werden,
welcher Algorithmus für die Berechnung der Pose verwendet werden
soll.
Methoden, die für Lochkameras unterstützt werden:
Method Method Method Method method
Wann verwenden
Minimale Anzahl von Punktkorrespondenzen
'analytic' "analytic" "analytic" "analytic" "analytic" [1]
Standardmethode für allgemeine Verwendung
4
'iterative' "iterative" "iterative" "iterative" "iterative" [2]
Falls nur drei oder vier Punktkorrespondenzen
verwendet werden oder falls die Weltpunkte fast planar sind
3
'planar_analytic' "planar_analytic" "planar_analytic" "planar_analytic" "planar_analytic" [4]
Falls die Weltpunkte in einer
horizontalen Ebene liegen (
)
4
Die Zahlen in den eckigen Klammern in der oben stehenden Tabelle verweisen
auf die Veröffentlichungen, auf denen die Implementierungen der
entsprechenden Methoden basieren.
Methoden, die für telezentrische Kameras unterstützt
werden:
Method Method Method Method method
Wann verwenden
Minimale Anzahl von Punktkorrespondenzen
'telecentric' "telecentric" "telecentric" "telecentric" "telecentric" [3]
Standardmethode für allgemeine Verwendung
4
'telecentric_robust' "telecentric_robust" "telecentric_robust" "telecentric_robust" "telecentric_robust" [3]
Für sehr schlecht gestellte
Punktkonfigurationen, falls Quality Quality Quality Quality quality
einen unerwartet hohen
Wert besitzt
4
'telecentric_planar' "telecentric_planar" "telecentric_planar" "telecentric_planar" "telecentric_planar" [3]
Falls die Weltpunkte in einer
horizontalen Ebene liegen (
)
3
'telecentric_planar_robust' "telecentric_planar_robust" "telecentric_planar_robust" "telecentric_planar_robust" "telecentric_planar_robust" [3]
Für sehr schlecht gestellte
Punktkonfigurationen, in denen die Weltpunkte in einer horizontalen
Ebene liegen (
) und
für die Quality Quality Quality Quality quality
einen unerwartet hohen Wert besitzt
3
Die Zahlen in den eckigen Klammern in der oben stehenden Tabelle verweisen
auf die Veröffentlichungen, auf denen die Implementierungen der
entsprechenden Methoden basieren.
Parameter CameraParam und Quality
Zur Lösung des Problems benötigen alle Algorithmen die internen
Kameraparameter aus der Kamerakalibrierung, die in
CameraParam CameraParam CameraParam CameraParam cameraParam
übergeben werden.
Zusätzlich kann der Benutzer durch QualityType QualityType QualityType QualityType qualityType
eine oder
mehrere Qualitätsmaß-Bewertungen der Pose bestimmen, die
mitberechnet werden. Die resultierenden Qualitätsmaße werden in
Quality Quality Quality Quality quality
aneinandergehängt zurückgeliefert. Derzeit wird nur
'error' "error" "error" "error" "error" unterstützt. Es entspricht dem quadratischen
Mittelwert der Fehler in Pixeln der projizierten
3D-Weltkoordinaten.
Allgemeine Anmerkungen
Falls eine Methode für planare Weltpunkte gewählt wird, wird
angenommen, dass alle Weltpunkte in der Ebene
liegen. Daher muss für planare Weltpunkte
die z-Komponente der Weltpunkte nicht gesetzt werden
(WorldZ WorldZ WorldZ WorldZ worldZ
= [] ), da nur 2D-Korrespondenzen verwendet
werden.
Für telezentrische Kameras kann offensichtlicherweise die
Translation in z -Richtung nicht bestimmt werden. Sie wird
in Pose Pose Pose Pose pose
auf 0 gesetzt.
Für planare Weltpunkte und telezentrische Kameras existieren immer
zwei mögliche äquivalente Posen. Diese Mehrdeutigkeit kann nur
durch Zusatzwissen aufgelöst werden. vector_to_pose vector_to_pose VectorToPose VectorToPose VectorToPose
gibt in
diesem Fall eine beliebige der zwei möglichen Lösungen zurück. Die
andere Lösung kann leicht dadurch berechnet werden, dass die Werte
von
und
in Pose Pose Pose Pose pose
durch
und
ersetzt
werden.
Achtung
Die Methode 'analytic' "analytic" "analytic" "analytic" "analytic" erlaubt maximal 32767
Punktkorrespondenzen als Eingabe.
Ausführungsinformationen
Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
Wird ohne Parallelisierung verarbeitet.
Parameter
WorldX WorldX WorldX WorldX worldX
(input_control) number-array →
HTuple HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
X-Koordinaten der Weltpunkte.
Parameteranzahl: WorldX >= 4
WorldY WorldY WorldY WorldY worldY
(input_control) number-array →
HTuple HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Y-Koordinaten der Weltpunkte.
Parameteranzahl: WorldY == WorldX
WorldZ WorldZ WorldZ WorldZ worldZ
(input_control) number-array →
HTuple HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Z-Koordinaten der Weltpunkte.
Parameteranzahl: WorldZ == WorldX || WorldZ == 0
ImageRow ImageRow ImageRow ImageRow imageRow
(input_control) number-array →
HTuple HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Zeilen-Koordinaten der Bildpunkte.
Parameteranzahl: ImageRow == WorldX
ImageColumn ImageColumn ImageColumn ImageColumn imageColumn
(input_control) number-array →
HTuple HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Spalten-Koordinaten der Bildpunkte.
Parameteranzahl: ImageColumn == WorldX
CameraParam CameraParam CameraParam CameraParam cameraParam
(input_control) campar →
HCamPar , HTuple HTuple Htuple (real / integer / string) (double / int / long / string) (double / Hlong / HString) (double / Hlong / char*)
Die internen Kameraparameter aus der Kamerakalibrierung.
Method Method Method Method method
(input_control) string →
HTuple HTuple Htuple (string) (string ) (HString ) (char* )
Art des Algorithmus
Defaultwert:
'iterative'
"iterative"
"iterative"
"iterative"
"iterative"
Werteliste: 'analytic' "analytic" "analytic" "analytic" "analytic" , 'iterative' "iterative" "iterative" "iterative" "iterative" , 'planar_analytic' "planar_analytic" "planar_analytic" "planar_analytic" "planar_analytic" , 'telecentric' "telecentric" "telecentric" "telecentric" "telecentric" , 'telecentric_planar' "telecentric_planar" "telecentric_planar" "telecentric_planar" "telecentric_planar" , 'telecentric_planar_robust' "telecentric_planar_robust" "telecentric_planar_robust" "telecentric_planar_robust" "telecentric_planar_robust" , 'telecentric_robust' "telecentric_robust" "telecentric_robust" "telecentric_robust" "telecentric_robust"
QualityType QualityType QualityType QualityType qualityType
(input_control) string(-array) →
HTuple HTuple Htuple (string) (string ) (HString ) (char* )
Art des mit Quality zurückgegebenen Qualitätsmaßes.
Defaultwert:
'error'
"error"
"error"
"error"
"error"
Werteliste: 'error' "error" "error" "error" "error"
Pose Pose Pose Pose pose
(output_control) pose →
HPose , HTuple HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Pose.
Quality Quality Quality Quality quality
(output_control) number(-array) →
HTuple HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Posequalitätsmaß.
Ergebnis
Sind die Parameterwerte korrekt, dann liefert vector_to_pose vector_to_pose VectorToPose VectorToPose VectorToPose
den Wert 2 (H_MSG_TRUE).
Siehe auch
proj_hom_mat2d_to_pose proj_hom_mat2d_to_pose ProjHomMat2dToPose ProjHomMat2dToPose ProjHomMat2dToPose
,
vector_to_rel_pose vector_to_rel_pose VectorToRelPose VectorToRelPose VectorToRelPose
,
camera_calibration camera_calibration CameraCalibration CameraCalibration CameraCalibration
Literatur
[1] Francesc Moreno-Noguer, Vincent Lepetit, and Pascal Fua:
„Accurate Non-Iterative O(n) Solution to the PnP Problem“;
Eleventh IEEE International Conference on Computer Vision, 2007.
[2] Gerald Schweighofer, and Axel Pinz: „Robust Pose Estimation from a Planar
Target“; Transactions on Pattern Analysis and Machine Intelligence (PAMI),
28(12):2024-2030, 2006.
[3] Carsten Steger: „Algorithms for the Orthographic-n -Point
Problem“; Journal of Mathematical Imaging and Vision, vol. 60,
no. 2, pp. 246-266, 2018.
[4] Zhengyou Zhang: „A flexible new technique for camera calibration.“;
Transactions on Pattern Analysis and Machine Intelligence (PAMI),
22(11):1330-1334, 2000.
Modul
Calibration