有段时间没写日志了。
今天写Kinect操作Java3D模型的程序,发现两者坐标存在很大差异,遂整理了一下。
首先,Java3D坐标系单位是1,象征真是世界中的1m(但不是真的1m,要不显示器该放不下了)。
其次,OpenNI坐标系如下(翻译自OpenNI-API-1.5.4)
OpenNI定义了两种坐标系统:
投影坐标:深度值的二维地图
真实世界坐标:三位点坐标集合
两个坐标系统详细内容如下:
特征
| 投影坐标
| 真实世界坐标
|
x,y单位 | pixels 像素 | mm 毫米 |
z单位 | mm 毫米 | mm 毫米 |
(x,y) 平面原点 | 视域(FOV)左上角 | 视域中心 |
z轴0点 | 传感器所处垂直面中心 | 传感器所处垂直面中心 |
x轴方向 | 从左到右 | 从左到右 |
y轴方向 | 从上到下 | 从下倒上 |
z轴方向 | 远离设备(从设备到用户) | 远离设备 |
这两种坐标系统的区别是,物体越靠近传感器,其在投影坐标系中变得越大,在真是坐标系中不变。
注意:OpenNI中返回数据格式并不统一,有的使用投影坐标(像depth maps),有的使用真实世界坐标(例如 skeleton joints),使用时需注意。
Java3D和OpenNI结合使用时可参照两者各自坐标系灵活调整了。
转载于:https://blog.51cto.com/albany/1058999