本文内容
● 获取校准数据
● 坐标转换函数
● 相关示例
● 后续步骤
本文完全复用Azure kinect 的校准函数,使用校准函数可以转换Femto Bolt 装备上每个传感器的坐标系之间的点。 需要转换整个图像的应用法式可以使用图像转换提供的加速操作。
获取校准数据
需要获取装备校准数据才气执行坐标系转换。 校准数据存储在 k4a_calibration_t 数据类型中。 gai数据通过 k4a_device_get_calibration() 函数,从装备中获取。 校准数据针对差异装备,或统一个装备的差异事情模式都纷歧样。 因此,k4a_device_get_calibration() 需要使用 depth_mode 和 color_resolution 参数作为输入。
OpenCV 兼容性
校准参数与 OpenCV 兼容。 有关各个相机校正参数的详细信息,另请参阅 OpenCV 文档。 另请参阅 SDK 的 OpenCV 兼容性示例,其中演示了 k4a_calibration_t 类型与响应 OpenCV 数据结构之间的转换。
坐标转换函数
下图显示了 Femto Bolt 的差异坐标系,以及用于在这些坐标系之间转换的函数。 为了使插图显得精练,大宝娱乐省略了陀螺仪和加速率传感器的 3D 坐标系。
有关镜头失真的备注:2D 坐标shi终引用 SDK 中失真的图像。 SDK 的失真矫正示例 演示了图像失真矫正。 一ban情形下,3D 点永远不会受到镜头失真的影响。
在 3D 坐标系之间转换
函数 k4a_calibration_3d_to_3d() 使用相机的外部校准将源坐标系的 3D 点转换为目的坐标系的 3D 点。 源和目的可设置为四个 3D 坐标系中的任何一个,即,彩色相机、深度相机、陀螺仪或加速率传感器。 若是源和目的相同,则返回未修改的输入 3D 点作为输出。
函数 k4a_calibration_3d_to_2d() 将源坐标系的 3D 点转换为目的相机的 2D 像素坐标。 此函数通常称为投影函数。 只管源可以设置为四个 3D 坐标系中的任何一个,但目的必须是深度相机或彩色相机。 若是源和目的差异,则会使用 k4a_calibration_3d_to_3d() 将输入的 3D 点转换为目的相机的 3D 坐标系。 以目的相机坐标系体现 3D 点后,将使用目的相机的内部校准盘算响应的 2D 像素坐标。 若是 3D 点超出了目的相机的可视区域,则有用值将设置为 0。
函数 k4a_calibration_2d_to_3d() 将源相机的 2D 像素坐标转换为目的相机坐标系的 3D 点。 源必须是彩色相机或深度相机。 目的可设置为四个 3D 坐标系中的任何一个。 除了 2D 像素坐标外,源相机图像中像素的深度值(以毫米为单元)也需要作为函数的输入,在彩色相机几何中推导出深度值的一种要领是使用函数 k4a_transformation_depth_image_to_color_camera()。 gai函数使用源相机的内部校准通过指定的像素坐标盘算源相机焦点引出的 3D 射线。 然后,使用深度值查找此射线简直切 3D 点位置。 此操作通常称为作废投影函数。 若是源和目的相机差异,gai函数会通过 k4a_calibration_3d_to_3d() 将 3D 点转换为目的的坐标系。 若是 2D 像素坐标超出了源相机的可视区域,则有用值将设置为 0。
函数 k4a_calibration_2d_to_2d() 将源相机的 2D 像素坐标转换为目的相机的 2D 像素坐标。 源和目的必须设置为彩色相机或深度相机。 gai函数需要将源相机图像中像素的深度值(以毫米为单元)作为输入,在彩色相机几何中推导出深度值的一种要领是使用函数 k4a_transformation_depth_image_to_color_camera()。 它将挪用 k4a_calibration_2d_to_3d() 转换为源相机系统的 3D 点。 然后,它将挪用 k4a_calibration_3d_to_2d() 转换为目的相机图像的 2D 像素坐标。 若是 k4a_calibration_2d_to_3d() 或 k4a_calibration_3d_to_2d() 返回无效的效果,则有用值将设置为 0。
相关示例
● OpenCV 兼容性示例
● 失真矫正示例
● 快速点云示例
相知趣机校正后,接下来还可以相识装备同步。