算子image_to_world_plane通过将图像变换到测量平面(即世界坐标系 WCS 中的平面 z=0z=0 )来实现图像校正。校正后的图像不存在镜头畸变和透视畸变,其效果等同于由一台无镜头畸变、且光轴垂直于测量平面的相机所拍摄的图像。
调用示例:
image_to_world_plane (Image, ImageMapped, CamParam, PoseForCenteredImage, ... WidthMappedImage, HeightMappedImage, ... ScaleForCenteredImage, 'bilinear')如果需要对多幅图像进行校正,为了提高效率,可先使用算子gen_image_to_world_plane_map生成一个投影映射(projection map)—— 其参数用法与image_to_world_plane类似;
随后,再通过算子map_image利用该映射对每幅图像执行实际的校正变换。
调用流程如下:
gen_image_to_world_plane_map (Map, CamParam, PoseForCenteredImage, ... WidthOriginalImage, HeightOriginalImage, ... WidthMappedImage, HeightMappedImage, ... ScaleForCenteredImage, 'bilinear') map_image (Image, Map, ImageMapped)✅优势:当处理多帧图像时,只需一次性计算映射(Map),后续每帧仅需快速查表变换,显著提升性能。
校正后图像(rectified image)的尺寸可通过以下参数指定:
- 对于算子
image_to_world_plane,使用参数Width和Height; - 对于算子
gen_image_to_world_plane_map,使用参数WidthMapped和HeightMapped。
这些尺寸必须以像素(pixels)为单位给出。
校正后图像的像素物理尺寸由参数Scale指定。
该参数定义为:
Scale= 校正后图像的像素尺寸 / 标定靶标世界坐标所采用的单位(公式 3.3)
在许多情况下,标定靶标的世界坐标是以米(meters)为单位给出的。此时,可直接通过将Scale参数设为以下字符串来指定像素尺寸:
'm'(对应数值 1.0)'cm'(0.01)'mm'(0.001)'microns'或'µm'(均为 1e-6)
例如,若将Scale设为'µm',则校正后图像中的一个像素对应于真实世界中1 µm × 1 µm的区域。
应选择合适的Scale值,使得在校正区域中心附近,原始输入图像的像素尺寸与校正后图像的像素尺寸相近。若两者尺度差异过大,会导致混叠(aliasing)或过度平滑(smoothing)效应。
参数Interpolation用于指定插值方式:
'bilinear':在输入图像像素之间进行双线性插值;'none':直接使用最近邻像素的灰度值。
校正后的图像ImageWorld的定位规则如下:
- 其左上角精确位于世界坐标系(WCS)的原点;
- 其列方向(图像 x 轴)与 WCS 的x 轴平行。
由于 WCS 是由相机外参CamPose定义的,因此可通过算子set_origin_pose修改CamPose,从而平移校正图像的位置。
更一般的变换(如旋转、缩放)也可通过对CamPose应用齐次变换矩阵(homogeneous transformation matrices)来实现。
如图 3.11 所示,WCS 被设定为使校正图像的左上角与输入图像的左上角重合。
图中还显示了校正图像的完整定义域(domain)被反向投影到输入图像虚拟成像平面上的效果,可见两者的左上角完全对齐。
需要注意的是,WCS 也可以被定义为使校正图像完全或部分位于成像区域之外。
此时,校正图像的 domain 仅包含那些在原始图像中有灰度信息的像素。
如图 3.12 所示,校正图像的上半部分超出了成像区域,这部分在显示时以深灰色表示(无有效图像数据)。图中同样展示了该校正图像反向投影到输入图像平面的情形,可明显看出上半部分缺乏图像信息。