KlassenKlassenKlassenKlassen | | | | Operatoren

image_to_world_planeT_image_to_world_planeImageToWorldPlaneimage_to_world_planeImageToWorldPlaneImageToWorldPlane (Operator)

Name

image_to_world_planeT_image_to_world_planeImageToWorldPlaneimage_to_world_planeImageToWorldPlaneImageToWorldPlane — Rektifizieren eines Bildes durch Transformation in die Ebene z=0 eines Weltkoordinatensystems.

Signatur

image_to_world_plane(Image : ImageWorld : CameraParam, WorldPose, Width, Height, Scale, Interpolation : )

Herror T_image_to_world_plane(const Hobject Image, Hobject* ImageWorld, const Htuple CameraParam, const Htuple WorldPose, const Htuple Width, const Htuple Height, const Htuple Scale, const Htuple Interpolation)

Herror image_to_world_plane(Hobject Image, Hobject* ImageWorld, const HTuple& CameraParam, const HTuple& WorldPose, const HTuple& Width, const HTuple& Height, const HTuple& Scale, const HTuple& Interpolation)

HImage HImage::ImageToWorldPlane(const HTuple& CameraParam, const HTuple& WorldPose, const HTuple& Width, const HTuple& Height, const HTuple& Scale, const HTuple& Interpolation) const

HImageArray HImageArray::ImageToWorldPlane(const HTuple& CameraParam, const HTuple& WorldPose, const HTuple& Width, const HTuple& Height, const HTuple& Scale, const HTuple& Interpolation) const

void ImageToWorldPlane(const HObject& Image, HObject* ImageWorld, const HTuple& CameraParam, const HTuple& WorldPose, const HTuple& Width, const HTuple& Height, const HTuple& Scale, const HTuple& Interpolation)

HImage HImage::ImageToWorldPlane(const HCamPar& CameraParam, const HPose& WorldPose, Hlong Width, Hlong Height, const HTuple& Scale, const HString& Interpolation) const

HImage HImage::ImageToWorldPlane(const HCamPar& CameraParam, const HPose& WorldPose, Hlong Width, Hlong Height, const HString& Scale, const HString& Interpolation) const

HImage HImage::ImageToWorldPlane(const HCamPar& CameraParam, const HPose& WorldPose, Hlong Width, Hlong Height, const char* Scale, const char* Interpolation) const

HImage HCamPar::ImageToWorldPlane(const HImage& Image, const HPose& WorldPose, Hlong Width, Hlong Height, const HTuple& Scale, const HString& Interpolation) const

HImage HCamPar::ImageToWorldPlane(const HImage& Image, const HPose& WorldPose, Hlong Width, Hlong Height, const HString& Scale, const HString& Interpolation) const

HImage HCamPar::ImageToWorldPlane(const HImage& Image, const HPose& WorldPose, Hlong Width, Hlong Height, const char* Scale, const char* Interpolation) const

HImage HPose::ImageToWorldPlane(const HImage& Image, const HCamPar& CameraParam, Hlong Width, Hlong Height, const HTuple& Scale, const HString& Interpolation) const

HImage HPose::ImageToWorldPlane(const HImage& Image, const HCamPar& CameraParam, Hlong Width, Hlong Height, const HString& Scale, const HString& Interpolation) const

HImage HPose::ImageToWorldPlane(const HImage& Image, const HCamPar& CameraParam, Hlong Width, Hlong Height, const char* Scale, const char* Interpolation) const

void HOperatorSetX.ImageToWorldPlane(
[in] IHUntypedObjectX* Image, [out] IHUntypedObjectX*ImageWorld, [in] VARIANT CameraParam, [in] VARIANT WorldPose, [in] VARIANT Width, [in] VARIANT Height, [in] VARIANT Scale, [in] VARIANT Interpolation)

IHImageX* HImageX.ImageToWorldPlane(
[in] VARIANT CameraParam, [in] VARIANT WorldPose, [in] Hlong Width, [in] Hlong Height, [in] VARIANT Scale, [in] BSTR Interpolation)

IHImageX* HCamParX.ImageToWorldPlane(
[in] IHImageX* Image, [in] VARIANT CameraParam, [in] VARIANT WorldPose, [in] Hlong Width, [in] Hlong Height, [in] VARIANT Scale, [in] BSTR Interpolation)

IHImageX* HPoseX.ImageToWorldPlane(
[in] IHImageX* Image, [in] VARIANT CameraParam, [in] VARIANT WorldPose, [in] Hlong Width, [in] Hlong Height, [in] VARIANT Scale, [in] BSTR Interpolation)

static void HOperatorSet.ImageToWorldPlane(HObject image, out HObject imageWorld, HTuple cameraParam, HTuple worldPose, HTuple width, HTuple height, HTuple scale, HTuple interpolation)

HImage HImage.ImageToWorldPlane(HCamPar cameraParam, HPose worldPose, int width, int height, HTuple scale, string interpolation)

HImage HImage.ImageToWorldPlane(HCamPar cameraParam, HPose worldPose, int width, int height, string scale, string interpolation)

HImage HCamPar.ImageToWorldPlane(HImage image, HPose worldPose, int width, int height, HTuple scale, string interpolation)

HImage HCamPar.ImageToWorldPlane(HImage image, HPose worldPose, int width, int height, string scale, string interpolation)

HImage HPose.ImageToWorldPlane(HImage image, HCamPar cameraParam, int width, int height, HTuple scale, string interpolation)

HImage HPose.ImageToWorldPlane(HImage image, HCamPar cameraParam, int width, int height, string scale, string interpolation)

Beschreibung

image_to_world_planeimage_to_world_planeImageToWorldPlaneimage_to_world_planeImageToWorldPlaneImageToWorldPlane rektifiziert ein Bild ImageImageImageImageImageimage durch Transformation in die Ebene z=0 (Messebene) eines Weltkoordinatensystems. Das resultierende Bild ImageWorldImageWorldImageWorldImageWorldImageWorldimageWorld 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 WorldPoseWorldPoseWorldPoseWorldPoseWorldPoseworldPose übergibt. In CameraParamCameraParamCameraParamCameraParamCameraParamcameraParam müssen die internen Kameraparameter übergeben werden (siehe calibrate_camerascalibrate_camerasCalibrateCamerascalibrate_camerasCalibrateCamerasCalibrateCameras für ihre Reihenfolge und das zu Grunde liegende Kameramodell).

In vielen Fällen sind CameraParamCameraParamCameraParamCameraParamCameraParamcameraParam und WorldPoseWorldPoseWorldPoseWorldPoseWorldPoseworldPose das Ergebnis einer vorherigen Kamerakalibrierung mit dem Operator calibrate_camerascalibrate_camerasCalibrateCamerascalibrate_camerasCalibrateCamerasCalibrateCameras. Ein Beispiel findet sich weiter unten.

Die Pixel-Position der linken oberen Ecke des Ergebnisbildes ImageWorldImageWorldImageWorldImageWorldImageWorldimageWorld ist durch den Ursprung des Weltkoordinatensystems festgelegt. Die Ausdehnung des Ergebnisbildes ImageWorldImageWorldImageWorldImageWorldImageWorldimageWorld kann durch die Parameter WidthWidthWidthWidthWidthwidth, HeightHeightHeightHeightHeightheight und ScaleScaleScaleScaleScalescale gewählt werden. Dabei sind WidthWidthWidthWidthWidthwidth und HeightHeightHeightHeightHeightheight in Pixel anzugeben.

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.

Sollen mehrere Bilder unter Verwendung derselben Parameter transformiert werden, so ist die Kombination aus gen_image_to_world_plane_mapgen_image_to_world_plane_mapGenImageToWorldPlaneMapgen_image_to_world_plane_mapGenImageToWorldPlaneMapGenImageToWorldPlaneMap und map_imagemap_imageMapImagemap_imageMapImageMapImage wesentlich effizienter als der Operator image_to_world_planeimage_to_world_planeImageToWorldPlaneimage_to_world_planeImageToWorldPlaneImageToWorldPlane, da die Abbildungsvorschrift nur einmal berechnet werden muss.

Achtung

image_to_world_planeimage_to_world_planeImageToWorldPlaneimage_to_world_planeImageToWorldPlaneImageToWorldPlane 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.

Parallelisierung

Parameter

ImageImageImageImageImageimage (input_object)  (multichannel-)image(-array) objectHImageHImageHImageHImageXHobject (byte / uint2 / real)

Eingabebild.

ImageWorldImageWorldImageWorldImageWorldImageWorldimageWorld (output_object)  (multichannel-)image(-array) objectHImageHImageHImageHImageXHobject * (byte / uint2 / real)

Transformiertes Bild.

CameraParamCameraParamCameraParamCameraParamCameraParamcameraParam (input_control)  campar HCamPar, HTupleHTupleHTupleHCamParX, VARIANTHtuple (real / integer / string) (double / int / long / string) (double / Hlong / HString) (double / Hlong / char*) (double / Hlong / BSTR) (double / Hlong / char*)

Interne Kameraparameter.

WorldPoseWorldPoseWorldPoseWorldPoseWorldPoseworldPose (input_control)  pose HPose, HTupleHTupleHTupleHPoseX, VARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

3D-Lage des Weltkoordinatensystems in Kamerakoordinaten.

Parameteranzahl: 7

WidthWidthWidthWidthWidthwidth (input_control)  extent.x HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Breite des Ergebnisbildes in Pixel.

Restriktion: Width >= 1

HeightHeightHeightHeightHeightheight (input_control)  extent.y HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Höhe des Ergebnisbildes in Pixel.

Restriktion: Height >= 1

ScaleScaleScaleScaleScalescale (input_control)  number HTupleHTupleHTupleVARIANTHtuple (string / integer / real) (string / int / long / double) (HString / Hlong / double) (char* / Hlong / double) (BSTR / Hlong / double) (char* / Hlong / double)

Maßstab oder Dimension.

Defaultwert: 'm' "m" "m" "m" "m" "m"

Wertevorschläge: 'm'"m""m""m""m""m", 'cm'"cm""cm""cm""cm""cm", 'mm'"mm""mm""mm""mm""mm", 'microns'"microns""microns""microns""microns""microns", 'um'"um""um""um""um""um", 1.0, 0.01, 0.001, 1.0e-6, 0.0254, 0.3048, 0.9144

Restriktion: Scale > 0

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

Art der Interpolation.

Defaultwert: 'bilinear' "bilinear" "bilinear" "bilinear" "bilinear" "bilinear"

Werteliste: 'bilinear'"bilinear""bilinear""bilinear""bilinear""bilinear", 'nearest_neighbor'"nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor"

Beispiel (HDevelop)

* 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)

Ergebnis

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

Vorgänger

create_posecreate_poseCreatePosecreate_poseCreatePoseCreatePose, hom_mat3d_to_posehom_mat3d_to_poseHomMat3dToPosehom_mat3d_to_poseHomMat3dToPoseHomMat3dToPose, camera_calibrationcamera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration, hand_eye_calibrationhand_eye_calibrationHandEyeCalibrationhand_eye_calibrationHandEyeCalibrationHandEyeCalibration, set_origin_poseset_origin_poseSetOriginPoseset_origin_poseSetOriginPoseSetOriginPose

Alternativen

gen_image_to_world_plane_mapgen_image_to_world_plane_mapGenImageToWorldPlaneMapgen_image_to_world_plane_mapGenImageToWorldPlaneMapGenImageToWorldPlaneMap, map_imagemap_imageMapImagemap_imageMapImageMapImage

Siehe auch

contour_to_world_plane_xldcontour_to_world_plane_xldContourToWorldPlaneXldcontour_to_world_plane_xldContourToWorldPlaneXldContourToWorldPlaneXld, image_points_to_world_planeimage_points_to_world_planeImagePointsToWorldPlaneimage_points_to_world_planeImagePointsToWorldPlaneImagePointsToWorldPlane

Modul

Calibration


KlassenKlassenKlassenKlassen | | | | Operatoren