有段时间没写日志了。
今天写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