我想将CameraSpace中的3D骨架映射回Kinect中的2D彩色图像,而不使用坐标映射器。我需要从深度相机转换为彩色相机吗?
在我看来,骨骼关节是从深度图像中得到的。因此,为了获得彩色图像中的关节位置,我应该通过以下三个步骤:
1)三维关节在深度摄像机三维空间上,需要转换为彩色摄像机三维空间(旋转/平移)。我不知道如何得到这个变换矩阵!
2)找出彩色摄像机的内在参数(利用matlab标定工具箱)将三维映射回2D。
3)与畸变系数相乘。
我在这里发现了一个类似的问题:How to convert points in depth space to color space in Kinect without using Kinect SDK functions?,但是,关于如何找出转换矩阵来将深度相机映射到彩色相机的问题没有得到回答。
编辑:实现后,我认为彩色2D和深度2D共享相同的3D相机空间(在某些方面,实际上深度和颜色是两种不同的相机->它们应该有不同的3D相机空间)。因此,在没有坐标映射功能的情况下,成功地将三维点映射成二维颜色(利用Matlab工具箱得到的投影矩阵)。3D相机->项目返回2D像素颜色
在开始的时候,我认为三维点在三维深度空间,三维深度和三维颜色空间是不同的。(输入: 3D深度空间中的三维点,输出: 2D彩色像素),I需要将3D深度相机->3D彩色相机->项目转换回2D像素颜色)。然而,step 3D深度相机->3D彩色相机并不需要实现。
发布于 2018-05-09 17:46:02
是的,你绝对需要从深度相机空间转换到彩色相机空间。Kinect有两个摄像头- IR和RGB和三个“空间”-相机,深度和颜色。深度图像和红外图像共享相同的颜色空间。骨架关节在3D相机空间中出现,因此为了在深度或颜色空间中有一个对应的点,您将需要适当地转换(自然,您将在过程中松开Z坐标)。
有一个很好的理由可以解释为什么坐标映射过程被抽象到API调用之后。它取决于摄像机的视场(视场)和它们之间的物理距离。传感器的每一种型号都会有不同的变化。因此,这是老虎钳检查这些值为您的特定传感器。它们是常量的,所以如果您能够保证您的代码只运行在特定的Kinect模型上,那么您就可以了。
在此之后,请参阅关于您需要进行的计算的以下文章:Manual coordinate mapping
https://stackoverflow.com/questions/50235864
复制相似问题