image_to_world_planeT_image_to_world_planeImageToWorldPlaneImageToWorldPlaneimage_to_world_plane — Rektifizieren eines Bildes durch Transformation in die Ebene z=0 eines
Weltkoordinatensystems.
image_to_world_planeimage_to_world_planeImageToWorldPlaneImageToWorldPlaneImageToWorldPlaneimage_to_world_plane rektifiziert ein Bild ImageImageImageImageimageimage durch
Transformation in die Ebene z=0 (Messebene) eines Weltkoordinatensystems.
Das resultierende Bild ImageWorldImageWorldImageWorldImageWorldimageWorldimage_world 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 WorldPoseWorldPoseWorldPoseWorldPoseworldPoseworld_pose ü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 CameraParamCameraParamCameraParamCameraParamcameraParamcamera_param müssen die internen Kameraparameter übergeben werden
(siehe Kalibrierung für ihre Reihenfolge und das zu Grunde
liegende Kameramodell).
Mit dem Parameter ScaleScaleScaleScalescalescale 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.
ScaleScaleScaleScalescalescale 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""m", 'cm'"cm""cm""cm""cm""cm", 'mm'"mm""mm""mm""mm""mm", 'microns'"microns""microns""microns""microns""microns"
oder 'um'"um""um""um""um""um" anzugeben.
Der Parameter InterpolationInterpolationInterpolationInterpolationinterpolationinterpolation gibt an, ob zwischen den Pixeln des
Eingabebildes bilinear interpoliert ('bilinear'"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""nearest_neighbor")
verwendet werden soll.
image_to_world_planeimage_to_world_planeImageToWorldPlaneImageToWorldPlaneImageToWorldPlaneimage_to_world_plane 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_planeImageToWorldPlaneImageToWorldPlaneImageToWorldPlaneimage_to_world_plane den Wert TRUE.