gen_image_to_world_plane_map
名称
gen_image_to_world_plane_map —生成一个投影图,该投影图描述图像平面与世界坐标系的平面z = 0之间的映射。
签名
gen_image_to_world_plane_map(:地图:CameraParam,WorldPose,WidthIn,HeightIn,WidthMapped,HeightMapped,缩放,地图类型:)
描述
gen_image_to_world_plane_map生成投影图Map,该图描述了图像坐标平面与世界坐标系中的z = 0平面(测量平面)之间的映射。该地图可用于通过操作员map_image校正图像。校正后的图像既没有显示出径向畸变,也没有显示出透视畸变。它对应于通过无失真相机获取的图像,该图像垂直于测量平面。通过传递相对于WorldPose中的相机坐标系的3D姿势来选择世界坐标系 。在CameraParam中,您必须传递内部摄像机参数(请参阅calibrate_cameras 参数的顺序和基础相机模型)。
在许多情况下CameraParam和WorldPose与操作校准相机的结果calibrate_cameras。参见以下示例。
可以通过WidthIn和HeightIn参数指定要映射的图像的大小 。输出图像左上角的像素位置由世界坐标系的原点确定。可以通过参数WidthMapped,HeightMapped和 Scale选择输出图像的大小。WidthMapped和HeightMapped必须以像素为单位。
使用参数Scale,可以指定转换后图像中像素的大小。有两种典型的情况:首先,您可以缩放图像,以使变换后的图像中的像素坐标直接对应于度量单位,例如,一个像素对应一个微米。如果要在转换后的图像中进行测量,然后直接产生度量结果,这将很有用。第二种情况是缩放图像,以使其内容显示为与原始图像相似的大小。这很有用,例如,如果您想在转换后的图像中执行基于形状的匹配。
比例必须指定为所需像素大小/原始单位的比率。1um的像素大小意味着变换后的图像中的像素对应于测量平面中的1um x 1um区域。原始单位由校准对象的坐标确定。如果原始单位是米(使用标准校准板就是这种情况),则可以使用参数值 'm','cm','mm','microns'或 'um'来直接设置变换后的图像中像素坐标的单位。
映射函数存储在输出图像Map中。 地图具有与映射后生成的图像相同的大小。 MapType用于指定输出Map的类型。如果选择“ nearest_neighbor”,则“地图”由一个包含一个通道的图像组成,其中对于所得图像的每个像素,将存储输入图像像素的线性化坐标,该坐标是与转换坐标最近的像素。如果选择“双线性” 插值,则映射由一张包含五个通道的图像组成。在结果图像中每个像素的第一通道中,存储输入图像中像素的线性化坐标,该坐标相对于转换后的坐标位于左上角。其他四个通道包含用于双线性插值的转换坐标的四个相邻像素的权重,顺序如下:
例如,第二通道包含相对于转换后的坐标位于左上方的像素的权重。如果选择“ coordinate_map_sub_pix”,则“地图”由一个语义类型为“ vector_field_absolute”的矢量场图像组成,其中将针对所得图像的每个像素,将子像素的精确坐标存储在输入图像中。
如果几个图像必须使用相同的相机参数被映射, gen_image_to_world_plane_map结合map_image比操作者更有效image_to_world_plane因为只需进行一次计算的映射函数的需要。
如果要在另一个程序中重新使用创建的地图,则可以使用操作符write_image将其另存为多通道图像,格式为 'tiff'。
并行化
多线程类型:可重入(与非排他运算符并行运行)。
多线程作用域:全局(可以从任何线程调用)。
未经并行处理。
参量
包含映射数据的图像。
内部摄像机参数。
元素数量: CameraParam == 8 || CameraParam == 10 || CameraParam == 11 || CameraParam == 12 || CameraParam == 14
规模或单位。
默认值: “ m”
建议值:'m','cm','mm','microns','um',1.0,0.01,0.001,1.0e-6,0.0254,0.3048,0.9144
映射的类型。
默认值: “双线性”
值列表:“ bilinear”,“ coord_map_sub_pix”,“ nearest_neighbor”
示例:
*校准相机 calibrate_cameras(CalibDataID,Error) *获取相机参数。 get_calib_data(CalibDataID,'camera',0,'params',CamParam) *示例值,如果没有可用的校准数据: CamParam:= [0.0087,-1859、8.65e-006、8.6e-006、362.5、291.6、768、576] *获取参考姿势(校准对象0的姿势4) get_calib_data(CalibDataID,'calib_obj_pose',[0,4],“pose”,Pose) *示例值,如果没有可用的校准数据: Pose:= [-0.11,-0.21、2.51、352.73、346.73、336.48、0] *补偿板厚 set_origin_pose(Pose,-1.125,-1.0,0,PoseNewOrigin) *将图像转换为世界平面。 read_image(Image,'calib/calib-3d-coord-04') gen_image_to_world_plane_map(MapSingle,CamParam,PoseNewOrigin,\ CamParam [6],CamParam [7],900、800、0.0025,'bilinear')\ map_image(Image,MapSingle,ImageMapped) * 清理 clear_calib_data(CalibDataID)

