| Operatoren |
image_to_world_plane — Rektifizieren eines Bildes durch Transformation in die Ebene z=0 eines Weltkoordinatensystems.
image_to_world_plane(Image : ImageWorld : CameraParam, WorldPose, Width, Height, Scale, Interpolation : )
image_to_world_plane rektifiziert ein Bild Image durch Transformation in die Ebene z=0 (Messebene) eines Weltkoordinatensystems. Das resultierende Bild ImageWorld 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 WorldPose übergibt. In CameraParam müssen die internen Kameraparameter übergeben werden (siehe calibrate_cameras für ihre Reihenfolge und das zu Grunde liegende Kameramodell).
In vielen Fällen sind CameraParam und WorldPose das Ergebnis einer vorherigen Kamerakalibrierung mit dem Operator calibrate_cameras. Ein Beispiel findet sich weiter unten.
Die Pixel-Position der linken oberen Ecke des Ergebnisbildes ImageWorld ist durch den Ursprung des Weltkoordinatensystems festgelegt. Die Ausdehnung des Ergebnisbildes ImageWorld kann durch die Parameter Width, Height und Scale gewählt werden. Dabei sind Width und Height in Pixel anzugeben.
Mit dem Parameter Scale 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.
Scale 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', 'cm', 'mm', 'microns' oder 'um' anzugeben.
Der Parameter Interpolation gibt an, ob zwischen den Pixeln des Eingabebildes bilinear interpoliert ('bilinear') oder lediglich der Grauwert des am nächsten liegenden Pixels ('nearest_neighbor') verwendet werden soll.
Sollen mehrere Bilder unter Verwendung derselben Parameter transformiert werden, so ist die Kombination aus gen_image_to_world_plane_map und map_image wesentlich effizienter als der Operator image_to_world_plane, da die Abbildungsvorschrift nur einmal berechnet werden muss.
image_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.
Eingabebild.
Transformiertes Bild.
Interne Kameraparameter.
3D-Lage des Weltkoordinatensystems in Kamerakoordinaten.
Parameteranzahl: 7
Breite des Ergebnisbildes in Pixel.
Restriktion: Width >= 1
Höhe des Ergebnisbildes in Pixel.
Restriktion: Height >= 1
Maßstab oder Dimension.
Defaultwert: 'm'
Wertevorschläge: 'm', 'cm', 'mm', 'microns', 'um', 1.0, 0.01, 0.001, 1.0e-6, 0.0254, 0.3048, 0.9144
Restriktion: Scale > 0
Art der Interpolation.
Defaultwert: 'bilinear'
Werteliste: 'bilinear', 'nearest_neighbor'
* 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')
* Cleanup
clear_calib_data (CalibDataID)
Sind die Parameterwerte korrekt, dann liefert image_to_world_plane den Wert 2 (H_MSG_TRUE).
create_pose, hom_mat3d_to_pose, camera_calibration, hand_eye_calibration, set_origin_pose
gen_image_to_world_plane_map, map_image
contour_to_world_plane_xld, image_points_to_world_plane
Calibration
| Operatoren |