image_to_world_planeT_image_to_world_planeImageToWorldPlaneImageToWorldPlane — Rektifizieren eines Bildes durch Transformation in die Ebene z=0 eines
Weltkoordinatensystems.
image_to_world_planeimage_to_world_planeImageToWorldPlaneImageToWorldPlaneImageToWorldPlane rektifiziert ein Bild ImageImageImageImageimage durch
Transformation in die Ebene z=0 (Messebene) eines Weltkoordinatensystems.
Das resultierende Bild ImageWorldImageWorldImageWorldImageWorldimageWorld weist weder radiale noch
perspektivische Verzerrungen auf; es entspricht einem Bild, das von einer
verzerrungsfreien Kamera aufgenommen wird, die senkrecht auf die Messebene
im Weltkoordinatensystem schaut. Das Weltkoordinatensystem wird gewählt,
indem man seine 3D-Lage in Kamerakoordinaten in WorldPoseWorldPoseWorldPoseWorldPoseworldPose übergibt.
Diese 3D-Lage wird in der Form
erwartet. Dabei steht
ccs für das Kamerakoordinatensystem und
wcs für das Weltkoordinatensystem
(siehe auch Transformationen / Posen und
„Solution Guide III-C - 3D Vision“).
In CameraParamCameraParamCameraParamCameraParamcameraParam müssen die internen Kameraparameter übergeben werden
(siehe Kalibrierung für ihre Reihenfolge und das zu Grunde
liegende Kameramodell).
Mit dem Parameter ScaleScaleScaleScalescale kann die Größe eines Pixels im
transformierten Bild festgelegt werden. Hierbei gibt es zwei typische
Szenarien: Erstens kann das Bild so skaliert werden, dass Pixelkoordinaten
im transformierten Bild direkt in einer metrischen Einheit vorliegen, dass
ein Pixel also z.B. einem Mikrometer entspricht. Dies ist nützlich, falls
im transformierten Bild Messaufgaben durchgeführt werden sollen, deren
Ergebnisse dann automatisch in metrischen Einheiten vorliegen. Im
zweiten Szenario skaliert man das Bild so, dass sein Inhalt im
transformierten Bild in ähnlicher Größe vorliegt wie im Originalbild. Diese
Art der Skalierung ist z.B. günstig, wenn man im transformierten Bild
formbasiertes Matching anwenden will.
ScaleScaleScaleScalescale entspricht dem Verhältnis gewünschte
Pixelgröße/ursprüngliche Einheit. Ein Pixelgröße von 1um heißt, dass ein
Pixel im transformierten Bild der Fläche 1um x 1um in der Messebene
entspricht. Die ursprüngliche Einheit ist durch die Koordinaten des
Kalibrierkörpers gegeben. Falls dies, wie bei der Standard-Kalibrierplatte,
Meter sind, ist es auch möglich, die gewünschte Einheit der Pixelkoordinaten
direkt durch 'm'"m""m""m""m", 'cm'"cm""cm""cm""cm", 'mm'"mm""mm""mm""mm", 'microns'"microns""microns""microns""microns"
oder 'um'"um""um""um""um" anzugeben.
Der Parameter InterpolationInterpolationInterpolationInterpolationinterpolation gibt an, ob zwischen den Pixeln des
Eingabebildes bilinear interpoliert ('bilinear'"bilinear""bilinear""bilinear""bilinear") oder lediglich der
Grauwert des am nächsten liegenden Pixels ('nearest_neighbor'"nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor")
verwendet werden soll.
image_to_world_planeimage_to_world_planeImageToWorldPlaneImageToWorldPlaneImageToWorldPlane kann auf OpenCL Geräten ausgeführt werden,
wenn das Eingangsbild die maximale Größe für Bildobjekte des ausgewählten
Gerätes nicht überschreitet. Das Ergebnis kann dabei geringfügig von dem
auf der CPU berechneten abweichen.
Ausführungsinformationen
Unterstützt OpenCL Compute Devices.
Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
* Calibrate camera.
calibrate_cameras (CalibDataID, Error)
* Obtain camera parameters.
get_calib_data (CalibDataID, 'camera', 0, 'params', CamParam)
* Example values, if no calibration data is available:
CamParam := ['area_scan_division', 0.0087, -1859, 8.65e-006, 8.6e-006, \
362.5, 291.6, 768, 576]
* Get reference pose (pose 4 of calibration object 0).
get_calib_data (CalibDataID, 'calib_obj_pose',\
[0,4], 'pose', Pose)
* Example values, if no calibration data is available:
Pose := [-0.11, -0.21, 2.51, 352.73, 346.73, 336.48, 0]
* Compensate thickness of plate.
set_origin_pose (Pose, -1.125, -1.0, 0, PoseNewOrigin)
* Transform the image into the world plane.
read_image (Image, 'calib/calib-3d-coord-04')
image_to_world_plane (Image, ImageWorld, CamParam, PoseNewOrigin,\
900, 800, 0.0025, 'bilinear')
Ergebnis
Sind die Parameterwerte korrekt, dann liefert
image_to_world_planeimage_to_world_planeImageToWorldPlaneImageToWorldPlaneImageToWorldPlane den Wert 2 (H_MSG_TRUE).