Gan_Camera CameraD; Gan_Vector3 v3x, v3xu; /* build camera with one parameter of radial distortion */ gan_camera_build_radial_distortion_1 ( &CameraD, /* ZH FY FX Y0 X0 */ 100.0, 700.0, 500.0, 150.0, 100.0, /* K1 */ 0.001 ); /* build image point x assumed to have distortion */ gan_vec3_fill_q ( &v3x, 50.0, -80.0, 100.0 ); /* remove distortion from image point x --> xu */ gan_camera_remove_distortion_q ( &CameraD, &v3x, &v3xu );removes the distortion from the image point x, producing an undistorted point xu. Given the camera 3D point
/* remove distortion from image point x --> xu in-place */ gan_camera_remove_distortion_i ( &CameraD, &v3x );
The reverse is to add distortion to an image point. Given a non-linear camera, this means converting a point projected with the equivalent linear camera to a point projected with the non-linear camera:
/* build image point xu assumed to have NO distortion */ gan_vec3_fill_q ( &v3xu, 50.0, -80.0, 100.0 ); /* add distortion to image point xu --> x */ gan_camera_add_distortion_q ( &CameraD, &v3xu, &v3x ); /* OR */ gan_camera_add_distortion_i ( &CameraD, &v3xu ); /* in-place */
The single precision versions of these routines are
Gan_Camera_f CameraF; Gan_Vector3_f v3x, v3xu; /* build camera with one parameter of radial distortion */ gan_cameraf_build_radial_distortion_1 ( &CameraF, /* ZH FY FX Y0 X0 */ 100.0F, 700.0F, 500.0F, 150.0F, 100.0F, /* K1 */ 0.001F ); /* build image point x assumed to have distortion */ gan_vec3f_fill_q ( &v3x, 50.0F, -80.0F, 100.0F ); /* remove distortion from image point x --> xu */ gan_cameraf_remove_distortion_q ( &CameraF, &v3x, &v3xu ); /* OR */ gan_cameraf_remove_distortion_i ( &CameraF, &v3x ); /* in-place */ /* build image point xu assumed to have NO distortion */ gan_vec3f_fill_q ( &v3xu, 50.0F, -80.0F, 100.0F ); /* add distortion to image point xu --> x */ gan_cameraf_add_distortion_q ( &CameraF, &v3xu, &v3x ); /* OR */ gan_cameraf_add_distortion_i ( &CameraF, &v3xu ); /* in-place */