
使用 Azure Kinect 校准函数 | Microsoft Docs
使用校准函数可以转换 Azure Kinect 设备上每个传感器的坐标系之间的点。 需要转换整个图像的应用程序可以利用 转换函数 提供的加速 *** 作。
需要检索设备校准数据才能执行坐标系转换。 校准数据存储在 k4a_calibration_t 数据类型中。 该数据是通过 k4a_device_get_calibration() 函数从设备获取的。 校准数据不仅特定于每个设备,而且还特定于相机的工作模式。 因此, k4a_device_get_calibration() 需要使用 depth_mode 和 color_resolution 参数作为输入。
校准参数与 OpenCV 兼容。 有关各个相机校正参数的详细信息,另请参阅 OpenCV 文档 。 另请参阅 SDK 的 OpenCV 兼容性示例 ,其中演示了 k4a_calibration_t 类型与相应 OpenCV 数据结构之间的转换。
下图显示了 Azure Kinect 的不同坐标系,以及用于在这些坐标系之间转换的函数。 为了使插图显得简洁,我们省略了陀螺仪和加速度传感器的 3D 坐标系。
有关镜头失真的备注:2D 坐标始终引用 SDK 中失真的图像。 SDK 的 失真矫正示例 演示了图像失真矫正。 一般情况下,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() 。 该函数使用源相机的内部校准通过指定的像素坐标计算源相机焦点引出的 3D 射线。 然后,使用深度值查找此射线的确切 3D 点位置。 此 *** 作通常称为取消投影函数。 如果源和目标相机不同,该函数会通过 k4a_calibration_3d_to_3d() 将 3D 点转换为目标的坐标系。 如果 2D 像素坐标超出了源相机的可视区域,则有效值将设置为 0。
函数 k4a_calibration_2d_to_2d() 将源相机的 2D 像素坐标转换为目标相机的 2D 像素坐标。 源和目标必须设置为彩色相机或深度相机。 该函数需要将源相机图像中像素的深度值(以毫米为单位)作为输入,在彩色相机几何中推导出深度值的一种方法是使用函数 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。
一、成熟度不同
激光 SLAM 比 VSLAM 起步早,在理论、技术和产品落地上都相对成熟。基于视觉的 SLAM 方案目前主要有两种实现路径,一种是基于 RGBD 的深度摄像机,比如 Kinect;还有一种就是基于单目、双目或者鱼眼摄像头的。
VSLAM 目前尚处于进一步研发和应用场景拓展、产品逐渐落地阶段。
二、应用场景
从应用场景来说,VSLAM 的应用场景要丰富很多。VSLAM 在室内外环境下均能开展工作,但是对光的依赖程度高,在暗处或者一些无纹理区域是无法进行工作的。而激光 SLAM 目前主要被应用在室内,用来进行地图构建和导航工作。
三、地图精度不同
激光 SLAM 在构建地图的时候,精度较高;
VSLAM,比如常见的,用的非常多的深度摄像机 Kinect,(测距范围在 3-12m 之间),地图构建精度约 3cm;所以激光 SLAM 构建的地图精度一般来说比 VSLAM 高,且能直接用于定位导航。
四、易用性不同
激光 SLAM 和基于深度相机的 VSLAM 均是通过直接获取环境中的点云数据,根据生成的点云数据,测算哪里有障碍物以及障碍物的距离。
但是基于单目、双目、鱼眼摄像机的 VSLAM 方案,则不能直接获得环境中的点云,而是形成灰色或彩色图像,需要通过不断移动自身的位置,通过提取、匹配特征点,利用三角测距的方法测算出障碍物的距离。
在python中numpy是很好用的数据处理包。不了解你说的数据结构但是可以尝试把数据转成numpy的md数组格式。之后可以在数组中进行检查看是不是所有的三通道都相等。如果说这样的话那么理论上三通道和三通道代表的信息都是一样的,直接在里面切片不会影响结果。
SDK 安装
kinect 是输入。类似鼠标 即时动态捕捉、影像辨识、麦克风输入、语音辨识
Kinect 是一组传感器的组合,包含一个彩色摄像头,一对深度摄像头(一个用以发射红
外,一个用以接收) ,一组麦克风阵列和底座马达。
彩色摄像头想必大家都已经很熟悉了。深度摄像头是由红外线提供的,返回画面上每个
点的深度值(离 Kinect 的距离,单位是 mm,标称精度约 5mm) 。麦克风阵列其实是数个水平放置的麦克风,因为彼此间有距离,所以可以识别说话人的方向,借此粗略估计是哪个玩家在说话,便于想象的话可以理解为类似声纳图(声音我们不涉及)。
读取彩色数据流,可以获得一张1080p的(19201080);
犹如拍照应用
看SDK自带示例
Color Depth D2D 彩色数据流
和许多输入设备不一样,Kinect 能够产生三维数据,它有红外发射器和摄像头。 Kinect SDK 从红外摄像头获取的红外数据后,对其进行计算处理,然后产生景深影像数据。
深度帧数据中,每个像素占 16 位,即每一个像素占 2 个字节。每一个像素的深度值只占用了 16 个位中的 13 个位。
获取每一个像素的距离很容易,但是要直接使用还需要做一些位 *** 作。如上图所示,深度值存储在第 3 至 15 位中,要获取能够直接使用的深度数据需要向右移位,将游戏者索引(Player Index)位移除
看SDK自带示例
Depth Basics-D2D 深度数据流
05-45米
25个关节点 每个关节点的 3D空间坐标和转向
看SDK自带示例
Body Basics D2D 骨骼数据流
示例:
Color Depth D2D 彩色数据流
Depth Basics-D2D 深度数据流
Coordinate Mapping Basics 扣出人物,置换背景
Body Basics D2D 骨骼数据流
以上就是关于使用 Azure Kinect 校准函数全部的内容,包括:使用 Azure Kinect 校准函数、SLAM与VSLAM有什么区别、数据集是Kinect获取的三通道深度图,怎么变成单通道且无信息损失等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)