KlassenKlassenKlassenKlassen | | | | Operatoren

create_poseT_create_poseCreatePosecreate_poseCreatePoseCreatePose (Operator)

Name

create_poseT_create_poseCreatePosecreate_poseCreatePoseCreatePose — Erzeugen einer 3D-Lage (Pose).

Signatur

create_pose( : : TransX, TransY, TransZ, RotX, RotY, RotZ, OrderOfTransform, OrderOfRotation, ViewOfTransform : Pose)

Herror T_create_pose(const Htuple TransX, const Htuple TransY, const Htuple TransZ, const Htuple RotX, const Htuple RotY, const Htuple RotZ, const Htuple OrderOfTransform, const Htuple OrderOfRotation, const Htuple ViewOfTransform, Htuple* Pose)

Herror create_pose(const HTuple& TransX, const HTuple& TransY, const HTuple& TransZ, const HTuple& RotX, const HTuple& RotY, const HTuple& RotZ, const HTuple& OrderOfTransform, const HTuple& OrderOfRotation, const HTuple& ViewOfTransform, HTuple* Pose)

void CreatePose(const HTuple& TransX, const HTuple& TransY, const HTuple& TransZ, const HTuple& RotX, const HTuple& RotY, const HTuple& RotZ, const HTuple& OrderOfTransform, const HTuple& OrderOfRotation, const HTuple& ViewOfTransform, HTuple* Pose)

void HPose::HPose(double TransX, double TransY, double TransZ, double RotX, double RotY, double RotZ, const HString& OrderOfTransform, const HString& OrderOfRotation, const HString& ViewOfTransform)

void HPose::HPose(double TransX, double TransY, double TransZ, double RotX, double RotY, double RotZ, const char* OrderOfTransform, const char* OrderOfRotation, const char* ViewOfTransform)

void HPose::CreatePose(double TransX, double TransY, double TransZ, double RotX, double RotY, double RotZ, const HString& OrderOfTransform, const HString& OrderOfRotation, const HString& ViewOfTransform)

void HPose::CreatePose(double TransX, double TransY, double TransZ, double RotX, double RotY, double RotZ, const char* OrderOfTransform, const char* OrderOfRotation, const char* ViewOfTransform)

void HOperatorSetX.CreatePose(
[in] VARIANT TransX, [in] VARIANT TransY, [in] VARIANT TransZ, [in] VARIANT RotX, [in] VARIANT RotY, [in] VARIANT RotZ, [in] VARIANT OrderOfTransform, [in] VARIANT OrderOfRotation, [in] VARIANT ViewOfTransform, [out] VARIANT* Pose)

VARIANT HPoseX.CreatePose(
[in] double TransX, [in] double TransY, [in] double TransZ, [in] double RotX, [in] double RotY, [in] double RotZ, [in] BSTR OrderOfTransform, [in] BSTR OrderOfRotation, [in] BSTR ViewOfTransform)

static void HOperatorSet.CreatePose(HTuple transX, HTuple transY, HTuple transZ, HTuple rotX, HTuple rotY, HTuple rotZ, HTuple orderOfTransform, HTuple orderOfRotation, HTuple viewOfTransform, out HTuple pose)

public HPose(double transX, double transY, double transZ, double rotX, double rotY, double rotZ, string orderOfTransform, string orderOfRotation, string viewOfTransform)

void HPose.CreatePose(double transX, double transY, double transZ, double rotX, double rotY, double rotZ, string orderOfTransform, string orderOfRotation, string viewOfTransform)

Beschreibung

create_posecreate_poseCreatePosecreate_poseCreatePoseCreatePose erzeugt eine 3D-Lage PosePosePosePosePosepose. Eine 3D-Lage beschreibt eine starre 3D-Transformation, d.h. eine Transformation bestehend aus einer beliebigen Translation und Rotation, mit 6 Parametern: TransXTransXTransXTransXTransXtransX, TransYTransYTransYTransYTransYtransY und TransZTransZTransZTransZTransZtransZ beschreiben die Translation entlang der x-, y- und z-Achse, während RotXRotXRotXRotXRotXrotX, RotYRotYRotYRotYRotYrotY und RotZRotZRotZRotZRotZrotZ die Rotation beschreiben.

3D-Lagen werden typischerweise für zwei Zwecke verwendet: Erstens zur Beschreibung der Position und Orientierung eines Koordinatensystems relativ zu einem anderen (z.B. die 3D-Lage eines Objektkoordinatensystems relativ zum Kamerakoordinatensystem - kurz, die 3D-Lage des Objekts relativ zur Kamera) und zweitens zur Beschreibung der Transformation von Koordinaten zwischen Koordinatensystemen (z.B. die Transformation von Objektkoordinaten in Kamerakoordinaten).

Darstellung der Orientierung (Rotation)

Eine 3D-Rotation um eine beliebige Achse kann mit drei Parametern in verschiedener Weise dargestellt werden. HALCON stellt drei davon über den Parameter OrderOfRotationOrderOfRotationOrderOfRotationOrderOfRotationOrderOfRotationorderOfRotation zur Auswahl: Falls der Wert 'gba'"gba""gba""gba""gba""gba" übergeben wird, wird die Rotation durch die folgende Kette von Rotationen beschrieben (siehe hom_mat3d_rotatehom_mat3d_rotateHomMat3dRotatehom_mat3d_rotateHomMat3dRotateHomMat3dRotate für den Inhalt der Rotationsmatrizen ):

wird in der Fachliteratur auch Yaw-Pitch-Roll Konvention genannt. Bitte beachten Sie, dass diese Kette auf zwei Arten „gelesen“ werden kann: Wenn man von rechts startet, werden die Rotationen immer relativ zum globalen (unveränderten oder „alten“) Koordinatensystem ausgeführt. D.h., kann wie folgt gelesen werden: Erst wird um die z-Achse rotiert, dann um die „alte“ y-Achse und schließlich um die „alte“ x-Achse. Falls die Kette dagegen von links nach rechts gelesen wird, werden die Rotationen jeweils relativ zum lokalen („neuen“) Koordinatensystem ausgeführt. Dann liest sich wie folgt: Erst wird um die x-Achse rotiert, dann um die „neue“ y-Achse und schließlich um die „neu(st)e“ z-Achse.

Von rechts nach links gelesen, entspricht der folgenden Sequenz von Operatoraufrufen:

  hom_mat3d_identity (HomMat3DIdent)
  hom_mat3d_rotate (HomMat3DIdent, RotZ, 'z', 0, 0, 0, HomMat3DRotZ)
  hom_mat3d_rotate (HomMat3DRotZ, RotY, 'y', 0, 0, 0, HomMat3DRotYZ)
  hom_mat3d_rotate (HomMat3DRotYZ, RotX, 'x', 0, 0, 0, HomMat3DXYZ)

Dagegen entspricht die folgende Sequenz der Leserichtung von links nach rechts:

  hom_mat3d_identity (HomMat3DIdent)
  hom_mat3d_rotate_local (HomMat3DIdent, RotX, 'x', HomMat3DRotX)
  hom_mat3d_rotate_local (HomMat3DRotX, RotY, 'y', HomMat3DRotXY)
  hom_mat3d_rotate_local (HomMat3DRotXY, RotZ, 'z', HomMat3DXYZ)

wird in der Fachliteratur auch Roll-Pitch-Yaw Konvention genannt.

Falls in OrderOfRotationOrderOfRotationOrderOfRotationOrderOfRotationOrderOfRotationorderOfRotation der Wert 'abg'"abg""abg""abg""abg""abg" übergeben wird, wird die Rotation durch die folgende Transformationskette dargestellt:

Falls der Wert 'rodriguez'"rodriguez""rodriguez""rodriguez""rodriguez""rodriguez" in OrderOfRotationOrderOfRotationOrderOfRotationOrderOfRotationOrderOfRotationorderOfRotation übergeben wird, werden die Rotationsparameter RotXRotXRotXRotXRotXrotX, RotYRotYRotYRotYRotYrotY und RotZRotZRotZRotZRotZrotZ als die x-, y- und z-Komponente des sogenannten Rodriguez-Rotationsvektors interpretiert. Die Richtung dieses Vektors definiert die (beliebige) Rotationsachse, seine Länge den Rotationswinkel (mathematisch positive Orientierung). HALCON verwendet eine Variation des Rodriguez-Vektors, in der die Länge des Vektors gleich dem Tangens des halben Winkels ist:

Bitte beachten Sie, dass diese Posen-Darstellung nicht immer eindeutig ist, d.h. mehrere Posen-Darstellungen beschreiben dieselbe homogene Transformationsmatrix. Beispielsweise für mit haben die folgenden zwei Posen die gleiche Darstellung als homogene Transformationsmatrix:

  create_pose(0, 0, 0, 30 , 90, 54, 'Rp+T', 'gba', 'point', Pose1)
  create_pose(0, 0, 0, 17, 90, 67, 'Rp+T', 'gba', 'point', Pose2)

Alternativ können Rotationen auch durch homogene Transformationsmatrizen oder Quaternionen (axis_angle_to_quataxis_angle_to_quatAxisAngleToQuataxis_angle_to_quatAxisAngleToQuatAxisAngleToQuat) dargestellt werden.

Entsprechende homogene Transformationsmatrix

Mit dem Operator pose_to_hom_mat3dpose_to_hom_mat3dPoseToHomMat3dpose_to_hom_mat3dPoseToHomMat3dPoseToHomMat3d erhält man die der 3D-Lage entsprechende homogene Transformationsmatrix. Gemäß der Standard-Definition ist dies die folgende Transformationsmatrix, welche in zwei separate Matrizen aufgespaltet werden kann, eine für die Translation (H(t)) und eine für die Rotation (H(R)):

Koordinatentransformation

Die folgende Gleichung zeigt, wie ein Punkt mit Hilfe einer 3D-Lage (bzw. der entsprechenden homogenen Transformationsmatrix ) von Koordinatensystem 1 in Koordinatensystem 2 transformiert werden kann (Ein- und Ausgabepunkte als homogene Vektoren dargestellt, vgl. affine_trans_point_3daffine_trans_point_3dAffineTransPoint3daffine_trans_point_3dAffineTransPoint3dAffineTransPoint3d). Beachten Sie, dass zur Transformation von Koordinatensystem 1 in System 2 die homogene Transformationsmatrix verwendet wird, die die 3D-Lage von System 1 relativ zu System 2 beschreibt:

Die Gleichung entspricht der folgenden Sequenz von Operatoraufrufen:

  pose_to_hom_mat3d(PoseOf1In2, HomMat3DFrom1In2)
  affine_trans_point_3d(HomMat3DFrom1In2, P1X, P1Y, P1Z, P2X, P2Y, P2Z)

Nicht dem Standard entsprechende Darstellungen von 3D-Lagen

Bisher wurde die Standard-Definition von 3D-Lagen beschrieben. Um diese zu erzeugen, übergibt man in den Parametern OrderOfTransformOrderOfTransformOrderOfTransformOrderOfTransformOrderOfTransformorderOfTransform und ViewOfTransformViewOfTransformViewOfTransformViewOfTransformViewOfTransformviewOfTransform die (Standard-)Werte 'Rp+T'"Rp+T""Rp+T""Rp+T""Rp+T""Rp+T" bzw. 'point'"point""point""point""point""point". Für andere Werte werden nicht dem Standard entsprechende Typen von 3D-Lagen erzeugt, die kurz im Folgenden beschrieben werden. Bitte beachten Sie, dass diese Darstellungstypen nur zur Abwärtskompatibiltät unterstützt werden; wir empfehlen nachdrücklich, die Standard-Typen zu verwenden.

Wenn 'R(p-T)'"R(p-T)""R(p-T)""R(p-T)""R(p-T)""R(p-T)" in OrderOfTransformOrderOfTransformOrderOfTransformOrderOfTransformOrderOfTransformorderOfTransform übergeben wird, entspricht die erzeugte 3D-Lage der folgenden Transformationskette, d.h. die Reihenfolge von Translation und Rotation ist vertauscht und die Translation ist negiert:

Wenn in 'coordinate_system'"coordinate_system""coordinate_system""coordinate_system""coordinate_system""coordinate_system" in ViewOfTransformViewOfTransformViewOfTransformViewOfTransformViewOfTransformviewOfTransform übergeben wird, bleibt die Reihenfolge der Transformationen gleich, aber die Rotationswinkel werden negiert. Bitte beachten Sie, dass dies nicht der Transformation eines Koordinatensystems entspricht, auch wenn der Parameterwert dies suggeriert!

Zurückgelieferte Datenstruktur

Die erzeugte 3D-Lage wird in PosePosePosePosePosepose zurückgeliefert, in Form eines Tupels mit sieben Elementen. Die ersten drei Elemente enthalten die Translationsparameter TransXTransXTransXTransXTransXtransX, TransYTransYTransYTransYTransYtransY und TransZTransZTransZTransZTransZtransZ, gefolgt von den Rotationsparametern RotXRotXRotXRotXRotXrotX, RotYRotYRotYRotYRotYrotY und RotZRotZRotZRotZRotZrotZ. Das letzte Element kodiert den Darstellungstyp der 3D-Lage, der mit den Parametern OrderOfTransformOrderOfTransformOrderOfTransformOrderOfTransformOrderOfTransformorderOfTransform, OrderOfRotationOrderOfRotationOrderOfRotationOrderOfRotationOrderOfRotationorderOfRotation und ViewOfTransformViewOfTransformViewOfTransformViewOfTransformViewOfTransformviewOfTransform gewählt wurde. Die folgende Tabelle listet die möglichen Kombinationen. Wie schon erwähnt empfehlen wir, nur die Typen mit OrderOfTransformOrderOfTransformOrderOfTransformOrderOfTransformOrderOfTransformorderOfTransform = 'Rp+T'"Rp+T""Rp+T""Rp+T""Rp+T""Rp+T" und ViewOfTransformViewOfTransformViewOfTransformViewOfTransformViewOfTransformviewOfTransform = 'point'"point""point""point""point""point" zu verwenden (Codes 0, 2, and 4).

OrderOfTransformOrderOfTransformOrderOfTransformOrderOfTransformOrderOfTransformorderOfTransform OrderOfRotationOrderOfRotationOrderOfRotationOrderOfRotationOrderOfRotationorderOfRotation ViewOfTransformViewOfTransformViewOfTransformViewOfTransformViewOfTransformviewOfTransform Code
'Rp+T'"Rp+T""Rp+T""Rp+T""Rp+T""Rp+T" 'gba'"gba""gba""gba""gba""gba" 'point'"point""point""point""point""point" 0
'Rp+T'"Rp+T""Rp+T""Rp+T""Rp+T""Rp+T" 'abg'"abg""abg""abg""abg""abg" 'point'"point""point""point""point""point" 2
'Rp+T'"Rp+T""Rp+T""Rp+T""Rp+T""Rp+T" 'rodriguez'"rodriguez""rodriguez""rodriguez""rodriguez""rodriguez" 'point'"point""point""point""point""point" 4
'Rp+T'"Rp+T""Rp+T""Rp+T""Rp+T""Rp+T" 'gba'"gba""gba""gba""gba""gba" 'coordinate_system'"coordinate_system""coordinate_system""coordinate_system""coordinate_system""coordinate_system" 1
'Rp+T'"Rp+T""Rp+T""Rp+T""Rp+T""Rp+T" 'abg'"abg""abg""abg""abg""abg" 'coordinate_system'"coordinate_system""coordinate_system""coordinate_system""coordinate_system""coordinate_system" 3
'Rp+T'"Rp+T""Rp+T""Rp+T""Rp+T""Rp+T" 'rodriguez'"rodriguez""rodriguez""rodriguez""rodriguez""rodriguez" 'coordinate_system'"coordinate_system""coordinate_system""coordinate_system""coordinate_system""coordinate_system" 5
'R(p-T)'"R(p-T)""R(p-T)""R(p-T)""R(p-T)""R(p-T)" 'gba'"gba""gba""gba""gba""gba" 'point'"point""point""point""point""point" 8
'R(p-T)'"R(p-T)""R(p-T)""R(p-T)""R(p-T)""R(p-T)" 'abg'"abg""abg""abg""abg""abg" 'point'"point""point""point""point""point" 10
'R(p-T)'"R(p-T)""R(p-T)""R(p-T)""R(p-T)""R(p-T)" 'rodriguez'"rodriguez""rodriguez""rodriguez""rodriguez""rodriguez" 'point'"point""point""point""point""point" 12
'R(p-T)'"R(p-T)""R(p-T)""R(p-T)""R(p-T)""R(p-T)" 'gba'"gba""gba""gba""gba""gba" 'coordinate_system'"coordinate_system""coordinate_system""coordinate_system""coordinate_system""coordinate_system" 9
'R(p-T)'"R(p-T)""R(p-T)""R(p-T)""R(p-T)""R(p-T)" 'abg'"abg""abg""abg""abg""abg" 'coordinate_system'"coordinate_system""coordinate_system""coordinate_system""coordinate_system""coordinate_system" 11
'R(p-T)'"R(p-T)""R(p-T)""R(p-T)""R(p-T)""R(p-T)" 'rodriguez'"rodriguez""rodriguez""rodriguez""rodriguez""rodriguez" 'coordinate_system'"coordinate_system""coordinate_system""coordinate_system""coordinate_system""coordinate_system" 13

3D-Lagen können mit convert_pose_typeconvert_pose_typeConvertPoseTypeconvert_pose_typeConvertPoseTypeConvertPoseType in andere Darstellungstypen konvertiert werden; mit get_pose_typeget_pose_typeGetPoseTypeget_pose_typeGetPoseTypeGetPoseType kann der Darstellungstyp einer 3D-Lage abgefragt werden.

Parallelisierung

Parameter

TransXTransXTransXTransXTransXtransX (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Translation in Richtung der x-Achse (in [m]).

Defaultwert: 0.1

Wertevorschläge: -1.0, -0.75, -0.5, -0.25, -0.2, -0.1, -0.5, -0.25, -0.125, -0.01, 0.0, 0.01, 0.125, 0.25, 0.5, 0.1, 0.2, 0.25, 0.5, 0.75, 1.0

TransYTransYTransYTransYTransYtransY (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Translation in Richtung der y-Achse (in [m]).

Defaultwert: 0.1

Wertevorschläge: -1.0, -0.75, -0.5, -0.25, -0.2, -0.1, -0.5, -0.25, -0.125, -0.01, 0.0, 0.01, 0.125, 0.25, 0.5, 0.1, 0.2, 0.25, 0.5, 0.75, 1.0

TransZTransZTransZTransZTransZtransZ (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Translation in Richtung der z-Achse (in [m]).

Defaultwert: 0.1

Wertevorschläge: -1.0, -0.75, -0.5, -0.25, -0.2, -0.1, -0.5, -0.25, -0.125, -0.01, 0.0, 0.01, 0.125, 0.25, 0.5, 0.1, 0.2, 0.25, 0.5, 0.75, 1.0

RotXRotXRotXRotXRotXrotX (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Rotation um x-Achse bzw. x-Komponente des Rodriguez-Vektors (in [°] bzw. ohne Einheit).

Defaultwert: 90.0

Wertevorschläge: 0.0, 90.0, 180.0, 270.0

Typischer Wertebereich: 0 ≤ RotX RotX RotX RotX RotX rotX ≤ 360

RotYRotYRotYRotYRotYrotY (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Rotation um y-Achse bzw. y-Komponente des Rodriguez-Vektors (in [°] bzw. ohne Einheit).

Defaultwert: 90.0

Wertevorschläge: 0.0, 90.0, 180.0, 270.0

Typischer Wertebereich: 0 ≤ RotY RotY RotY RotY RotY rotY ≤ 360

RotZRotZRotZRotZRotZrotZ (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Rotation um z-Achse bzw. z-Komponente des Rodriguez-Vektors (in [°] bzw. ohne Einheit).

Defaultwert: 90.0

Wertevorschläge: 0.0, 90.0, 180.0, 270.0

Typischer Wertebereich: 0 ≤ RotZ RotZ RotZ RotZ RotZ rotZ ≤ 360

OrderOfTransformOrderOfTransformOrderOfTransformOrderOfTransformOrderOfTransformorderOfTransform (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Reihenfolge von Rotation und Translation.

Defaultwert: 'Rp+T' "Rp+T" "Rp+T" "Rp+T" "Rp+T" "Rp+T"

Wertevorschläge: 'Rp+T'"Rp+T""Rp+T""Rp+T""Rp+T""Rp+T", 'R(p-T)'"R(p-T)""R(p-T)""R(p-T)""R(p-T)""R(p-T)"

OrderOfRotationOrderOfRotationOrderOfRotationOrderOfRotationOrderOfRotationorderOfRotation (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Bedeutung der Rotationswerte.

Defaultwert: 'gba' "gba" "gba" "gba" "gba" "gba"

Wertevorschläge: 'gba'"gba""gba""gba""gba""gba", 'abg'"abg""abg""abg""abg""abg", 'rodriguez'"rodriguez""rodriguez""rodriguez""rodriguez""rodriguez"

ViewOfTransformViewOfTransformViewOfTransformViewOfTransformViewOfTransformviewOfTransform (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Sichtweise der Transformation.

Defaultwert: 'point' "point" "point" "point" "point" "point"

Wertevorschläge: 'point'"point""point""point""point""point", 'coordinate_system'"coordinate_system""coordinate_system""coordinate_system""coordinate_system""coordinate_system"

PosePosePosePosePosepose (output_control)  pose HPose, HTupleHTupleHTupleHPoseX, VARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

3D-Lage (Pose).

Parameteranzahl: 7

Beispiel (HDevelop)

*  Goal: Calibration with non-standard calibration object
*  Read start values for internal camera parameters
read_cam_par('campar.dat', CameraParam)
*  (Read 3D world points [WorldPointsX,WorldPointsY,WorldPointsZ],
*   extract corresponding 2D image points [PixelsRow,PixelsColumn])
*  Task: Create starting value for the external camera parameters, i.e., the
*        pose of the calibration object in the calibration images
*  First image: Calibration object placed at a distance of 0.5 and 0.1
*               'below' the camera coordinate system
*               orientation 'read from left to right': rotated 30 degrees
*               around the optical axis of the camera (z-axis),
*               then tilted 10 degrees around the new y-axis
create_pose(0.1, 0.0, 0.5, 30, 10, 0, 'Rp+T', 'abg', 'point', StartPose1)
*  (Accumulate all poses in StartPoses = [StartPose1, StartPose2, ...])
*  perform the calibration
camera_calibration(WorldPointsX, WorldPointsY, WorldPointsZ, \
                   PixelsRow, PixelsColumn, CameraParam, StartPoses, \
                   'pose', FinalCamParam, FinalPoses, Errors)

Beispiel (HDevelop)

*  Goal: Calibration with non-standard calibration object
*  Read start values for internal camera parameters
read_cam_par('campar.dat', CameraParam)
*  (Read 3D world points [WorldPointsX,WorldPointsY,WorldPointsZ],
*   extract corresponding 2D image points [PixelsRow,PixelsColumn])
*  Task: Create starting value for the external camera parameters, i.e., the
*        pose of the calibration object in the calibration images
*  First image: Calibration object placed at a distance of 0.5 and 0.1
*               'below' the camera coordinate system
*               orientation 'read from left to right': rotated 30 degrees
*               around the optical axis of the camera (z-axis),
*               then tilted 10 degrees around the new y-axis
create_pose(0.1, 0.0, 0.5, 30, 10, 0, 'Rp+T', 'abg', 'point', StartPose1)
*  (Accumulate all poses in StartPoses = [StartPose1, StartPose2, ...])
*  perform the calibration
camera_calibration(WorldPointsX, WorldPointsY, WorldPointsZ, \
                   PixelsRow, PixelsColumn, CameraParam, StartPoses, \
                   'pose', FinalCamParam, FinalPoses, Errors)

Beispiel (HDevelop)

*  Goal: Calibration with non-standard calibration object
*  Read start values for internal camera parameters
read_cam_par('campar.dat', CameraParam)
*  (Read 3D world points [WorldPointsX,WorldPointsY,WorldPointsZ],
*   extract corresponding 2D image points [PixelsRow,PixelsColumn])
*  Task: Create starting value for the external camera parameters, i.e., the
*        pose of the calibration object in the calibration images
*  First image: Calibration object placed at a distance of 0.5 and 0.1
*               'below' the camera coordinate system
*               orientation 'read from left to right': rotated 30 degrees
*               around the optical axis of the camera (z-axis),
*               then tilted 10 degrees around the new y-axis
create_pose(0.1, 0.0, 0.5, 30, 10, 0, 'Rp+T', 'abg', 'point', StartPose1)
*  (Accumulate all poses in StartPoses = [StartPose1, StartPose2, ...])
*  perform the calibration
camera_calibration(WorldPointsX, WorldPointsY, WorldPointsZ, \
                   PixelsRow, PixelsColumn, CameraParam, StartPoses, \
                   'pose', FinalCamParam, FinalPoses, Errors)

Beispiel (C++ (HALCON 5.0-10.0))

//  goal: calibration with non-standard calibration object
HTuple CameraParam, StartPose1, StartPoses, FinalPoses;
HTuple Errors, FinalCamParam;
HTuple WorldPointsX, WorldPointsY, WorldPointsZ, PixelsRow, PixelsColumn;
//  read start values for internal camera parameters
read_cam_par("campar.dat", &CameraParam);
//  (read 3D world points [WorldPointsX,WorldPointsY,WorldPointsZ],
//   extract corresponding 2D image points [PixelsRow,PixelsColumn])
//  task: create starting value for the external camera parameters, i.e., the
//        pose of the calibration object in the calibration images
//  first image: calibration object placed at a distance of 0.5 and 0.1
//               'below' the camera coordinate system
//               orientation 'read from left to right': rotated 30 degrees
//               around the optical axis of the camera (z-axis),
//               then tilted 10 degrees around the new y-axis
create_pose(0.1, 0.0, 0.5, 30, 10, 0, 'Rp+T', 'abg', 'point', &StartPose1);
//  (accumulate all poses in StartPoses = [StartPose1, StartPose2, ...])
//  perform the calibration
camera_calibration(WorldPointsX, WorldPointsY, WorldPointsZ,
                   PixelsRow, PixelsColumn, CameraParam, StartPoses, "pose",
                   &FinalCamParam, &FinalPoses, &Errors);

Beispiel (HDevelop)

*  Goal: Calibration with non-standard calibration object
*  Read start values for internal camera parameters
read_cam_par('campar.dat', CameraParam)
*  (Read 3D world points [WorldPointsX,WorldPointsY,WorldPointsZ],
*   extract corresponding 2D image points [PixelsRow,PixelsColumn])
*  Task: Create starting value for the external camera parameters, i.e., the
*        pose of the calibration object in the calibration images
*  First image: Calibration object placed at a distance of 0.5 and 0.1
*               'below' the camera coordinate system
*               orientation 'read from left to right': rotated 30 degrees
*               around the optical axis of the camera (z-axis),
*               then tilted 10 degrees around the new y-axis
create_pose(0.1, 0.0, 0.5, 30, 10, 0, 'Rp+T', 'abg', 'point', StartPose1)
*  (Accumulate all poses in StartPoses = [StartPose1, StartPose2, ...])
*  perform the calibration
camera_calibration(WorldPointsX, WorldPointsY, WorldPointsZ, \
                   PixelsRow, PixelsColumn, CameraParam, StartPoses, \
                   'pose', FinalCamParam, FinalPoses, Errors)

Beispiel (HDevelop)

*  Goal: Calibration with non-standard calibration object
*  Read start values for internal camera parameters
read_cam_par('campar.dat', CameraParam)
*  (Read 3D world points [WorldPointsX,WorldPointsY,WorldPointsZ],
*   extract corresponding 2D image points [PixelsRow,PixelsColumn])
*  Task: Create starting value for the external camera parameters, i.e., the
*        pose of the calibration object in the calibration images
*  First image: Calibration object placed at a distance of 0.5 and 0.1
*               'below' the camera coordinate system
*               orientation 'read from left to right': rotated 30 degrees
*               around the optical axis of the camera (z-axis),
*               then tilted 10 degrees around the new y-axis
create_pose(0.1, 0.0, 0.5, 30, 10, 0, 'Rp+T', 'abg', 'point', StartPose1)
*  (Accumulate all poses in StartPoses = [StartPose1, StartPose2, ...])
*  perform the calibration
camera_calibration(WorldPointsX, WorldPointsY, WorldPointsZ, \
                   PixelsRow, PixelsColumn, CameraParam, StartPoses, \
                   'pose', FinalCamParam, FinalPoses, Errors)

Ergebnis

Sind die Parameterwerte korrekt, dann liefert create_posecreate_poseCreatePosecreate_poseCreatePoseCreatePose den Wert 2 (H_MSG_TRUE).

Nachfolger

pose_to_hom_mat3dpose_to_hom_mat3dPoseToHomMat3dpose_to_hom_mat3dPoseToHomMat3dPoseToHomMat3d, write_posewrite_poseWritePosewrite_poseWritePoseWritePose, camera_calibrationcamera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration, hand_eye_calibrationhand_eye_calibrationHandEyeCalibrationhand_eye_calibrationHandEyeCalibrationHandEyeCalibration

Alternativen

read_poseread_poseReadPoseread_poseReadPoseReadPose, hom_mat3d_to_posehom_mat3d_to_poseHomMat3dToPosehom_mat3d_to_poseHomMat3dToPoseHomMat3dToPose

Siehe auch

hom_mat3d_rotatehom_mat3d_rotateHomMat3dRotatehom_mat3d_rotateHomMat3dRotateHomMat3dRotate, hom_mat3d_translatehom_mat3d_translateHomMat3dTranslatehom_mat3d_translateHomMat3dTranslateHomMat3dTranslate, convert_pose_typeconvert_pose_typeConvertPoseTypeconvert_pose_typeConvertPoseTypeConvertPoseType, get_pose_typeget_pose_typeGetPoseTypeget_pose_typeGetPoseTypeGetPoseType, hom_mat3d_to_posehom_mat3d_to_poseHomMat3dToPosehom_mat3d_to_poseHomMat3dToPoseHomMat3dToPose, pose_to_hom_mat3dpose_to_hom_mat3dPoseToHomMat3dpose_to_hom_mat3dPoseToHomMat3dPoseToHomMat3d, write_posewrite_poseWritePosewrite_poseWritePoseWritePose, read_poseread_poseReadPoseread_poseReadPoseReadPose

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren