有段時間沒寫日誌了。
今天寫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結合使用時可參照兩者各自座標系靈活調整了。