get_circle_poseT_get_circle_poseGetCirclePoseGetCirclePose (Operator)

Name

get_circle_poseT_get_circle_poseGetCirclePoseGetCirclePose — Bestimmen der 3D-Lage (Pose) eines Kreises aus seiner perspektivischen Projektion in 2D.

Signatur

get_circle_pose(Contour : : CameraParam, Radius, OutputType : Pose1, Pose2)

Herror T_get_circle_pose(const Hobject Contour, const Htuple CameraParam, const Htuple Radius, const Htuple OutputType, Htuple* Pose1, Htuple* Pose2)

void GetCirclePose(const HObject& Contour, const HTuple& CameraParam, const HTuple& Radius, const HTuple& OutputType, HTuple* Pose1, HTuple* Pose2)

HTuple HXLD::GetCirclePose(const HCamPar& CameraParam, const HTuple& Radius, const HString& OutputType, HTuple* Pose2) const

HTuple HXLD::GetCirclePose(const HCamPar& CameraParam, double Radius, const HString& OutputType, HTuple* Pose2) const

HTuple HXLD::GetCirclePose(const HCamPar& CameraParam, double Radius, const char* OutputType, HTuple* Pose2) const

HTuple HXLD::GetCirclePose(const HCamPar& CameraParam, double Radius, const wchar_t* OutputType, HTuple* Pose2) const   (Nur Windows)

HTuple HCamPar::GetCirclePose(const HXLD& Contour, const HTuple& Radius, const HString& OutputType, HTuple* Pose2) const

HTuple HCamPar::GetCirclePose(const HXLD& Contour, double Radius, const HString& OutputType, HTuple* Pose2) const

HTuple HCamPar::GetCirclePose(const HXLD& Contour, double Radius, const char* OutputType, HTuple* Pose2) const

HTuple HCamPar::GetCirclePose(const HXLD& Contour, double Radius, const wchar_t* OutputType, HTuple* Pose2) const   (Nur Windows)

static void HOperatorSet.GetCirclePose(HObject contour, HTuple cameraParam, HTuple radius, HTuple outputType, out HTuple pose1, out HTuple pose2)

HTuple HXLD.GetCirclePose(HCamPar cameraParam, HTuple radius, string outputType, out HTuple pose2)

HTuple HXLD.GetCirclePose(HCamPar cameraParam, double radius, string outputType, out HTuple pose2)

HTuple HCamPar.GetCirclePose(HXLD contour, HTuple radius, string outputType, out HTuple pose2)

HTuple HCamPar.GetCirclePose(HXLD contour, double radius, string outputType, out HTuple pose2)

Beschreibung

Jede Ellipse im Bild kann als die perspektivische Projektion eines Kreises interpretiert werden. Tatsächlich existieren für einen vorgegebenen Radius des Kreises zwei unterschiedlich orientierte Kreise im Raum, die dieselbe Projektion zur Folge haben. get_circle_poseget_circle_poseGetCirclePoseGetCirclePoseGetCirclePose bestimmt die 3D-Positionen und -Orientierungen dieser beiden Kreise. Zuerst wird jede ContourContourContourContourcontour durch eine Ellipse approximiert. Dann werden, basierend auf den internen Kameraparametern (CameraParamCameraParamCameraParamCameraParamcameraParam) und dem Radius des Kreises in 3D (RadiusRadiusRadiusRadiusradius), die 3D-Positionen und -Orientierungen (Pose1Pose1Pose1Pose1pose1,Pose2Pose2Pose2Pose2pose2) in Kamerakoordinaten bestimmt.

In Abhängigkeit vom Wert des Parameters OutputTypeOutputTypeOutputTypeOutputTypeoutputType werden Position und Orientierung als 3D-Lage (Pose) (OutputTypeOutputTypeOutputTypeOutputTypeoutputType = 'pose'"pose""pose""pose""pose") oder in Form des Mittelpunktes des Kreises und des Normalenvektors der Ebene, in der der Kreis liegt (OutputTypeOutputTypeOutputTypeOutputTypeoutputType = 'center_normal'"center_normal""center_normal""center_normal""center_normal"), zurückgegeben. Im ersteren Fall wird der Winkel für die Rotation um die z-Achse auf Null gesetzt, da er nicht bestimmt werden kann. Im letzteren Fall enthalten die ersten drei Elemente der Ausgabeparameter Pose1Pose1Pose1Pose1pose1 und Pose2Pose2Pose2Pose2pose2 jeweils die Kamerakoordinaten des Mittelpunktes. Die folgenden drei Elemente enthalten den Normalenvektor. Der Normalenvektor ist normalisiert und zeigt auf die Seite der Ebene, die das Projektionszentrum, also den Ursprung des Kamerakoordinatensystems, nicht enthält. Ist der Parameter OutputTypeOutputTypeOutputTypeOutputTypeoutputType auf den Wert 'center_normal'"center_normal""center_normal""center_normal""center_normal" gesetzt, enthalten die Ausgabeparameter Pose1Pose1Pose1Pose1pose1 und Pose2Pose2Pose2Pose2pose2 nur jeweils sechs Elemente, die die Position und die Orientierung der Kreise beschreiben. Ist hingegen OutputTypeOutputTypeOutputTypeOutputTypeoutputType = 'pose'"pose""pose""pose""pose", enthalten die Ausgabeparameter Pose1Pose1Pose1Pose1pose1 und Pose2Pose2Pose2Pose2pose2 jeweils die sieben Elemente der Pose.

Wird mehr als eine Kontur in ContourContourContourContourcontour übergeben, muss in RadiusRadiusRadiusRadiusradius entweder ein Tupel übergeben werden, das für jede Kontur einen Wert enthält, oder RadiusRadiusRadiusRadiusradius enthält nur einen Wert, der dann für alle Konturen verwendet wird. Die Ausgabeparameter Pose1Pose1Pose1Pose1pose1 und Pose2Pose2Pose2Pose2pose2 enthalten die Posen bzw. die Positionen und Orientierungen hintereinander, d.h. Pose1Pose1Pose1Pose1pose1 und Pose2Pose2Pose2Pose2pose2 enthalten zuerst die Pose bzw. die Position und den Normalenvektor für die erste Kontur, dann die Werte für die zweite Kontur, usw.

Achtung

Die Genauigkeit der Posen hängt stark von der Genauigkeit der extrahierten Konturen ab. Die Extraktion von gekrümmten Kanten mit relativ großen Filtermasken hat zur Folge, dass die Kantenposition leicht verschoben wird. Kantenextraktionsverfahren, die auf der ersten Ableitung der Bildfunktion basieren (z.B. edges_sub_pixedges_sub_pixEdgesSubPixEdgesSubPixEdgesSubPix) verschieben die Kantenposition in Richtung des Krümmungsmittelpunkts, d.h. extrahierte Ellipsen werden geringfügig kleiner. Extraktionsverfahren, die auf der zweiten Ableitung der Bildfunktion basieren (laplace_of_gausslaplace_of_gaussLaplaceOfGaussLaplaceOfGaussLaplaceOfGauss gefolgt von zero_crossing_sub_pixzero_crossing_sub_pixZeroCrossingSubPixZeroCrossingSubPixZeroCrossingSubPix), verschieben die Kantenposition vom Krümmungsmittelpunkt weg, d.h. extrahierte Ellipsen werden geringfügig größer.

Diese Effekte sind umso stärker, je stärker die Kante gekrümmt ist und je größer die verwendete Filtermaske ist. Um hohe Genauigkeiten erzielen zu können, sollten daher die Ellipsen im Bild groß sein und der Filterparameter sollte so gewählt werden, dass kleine Filtermasken verwendet werden (siehe info_edgesinfo_edgesInfoEdgesInfoEdgesInfoEdges).

Ausführungsinformationen

Parameter

ContourContourContourContourcontour (input_object)  xld(-array) objectHXLDHXLDHobject

Zu untersuchende Konturen.

CameraParamCameraParamCameraParamCameraParamcameraParam (input_control)  campar HCamPar, HTupleHTupleHtuple (real / integer / string) (double / int / long / string) (double / Hlong / HString) (double / Hlong / char*)

Interne Kameraparameter.

RadiusRadiusRadiusRadiusradius (input_control)  number(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Radius des Kreises im Objektraum.

Parameteranzahl: Radius == Contour || Radius == 1

Restriktion: Radius > 0.0

OutputTypeOutputTypeOutputTypeOutputTypeoutputType (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Typ der Rückgabewerte.

Defaultwert: 'pose' "pose" "pose" "pose" "pose"

Werteliste: 'center_normal'"center_normal""center_normal""center_normal""center_normal", 'pose'"pose""pose""pose""pose"

Pose1Pose1Pose1Pose1pose1 (output_control)  real-array HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

3D-Lage (Pose) des ersten Kreises.

Parameteranzahl: Pose1 == 7 * Contour || Pose1 == 6 * Contour

Pose2Pose2Pose2Pose2pose2 (output_control)  real-array HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

3D-Lage (Pose) des zweiten Kreises.

Parameteranzahl: Pose2 == 7 * Contour || Pose2 == 6 * Contour

Ergebnis

Sind die Parameterwerte korrekt und konnte die Position des Kreises bestimmt werden, dann liefert get_circle_poseget_circle_poseGetCirclePoseGetCirclePoseGetCirclePose den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

edges_sub_pixedges_sub_pixEdgesSubPixEdgesSubPixEdgesSubPix

Alternativen

find_marks_and_posefind_marks_and_poseFindMarksAndPoseFindMarksAndPoseFindMarksAndPose, camera_calibrationcamera_calibrationCameraCalibrationCameraCalibrationCameraCalibration

Siehe auch

get_rectangle_poseget_rectangle_poseGetRectanglePoseGetRectanglePoseGetRectanglePose, fit_ellipse_contour_xldfit_ellipse_contour_xldFitEllipseContourXldFitEllipseContourXldFitEllipseContourXld

Modul

3D Metrology