簡単に言うなら、camera intrinsicsを取り出して、深度画像を較正する(calibration)と、現実世界の3D点群を取得することができます。
深度画像I(xi,yi,z)
の座標系:
次元 | 単位 | 範囲 |
---|---|---|
xi | pixel (integer) | [0, N] |
yi | pixel (integer) | [0, N] |
z | meter (float) | R+ |
e.g. 256x256の深度画像の場合 N=255
3D点群P(x,y,z)
の座標系:
次元 | 単位 | 範囲 |
---|---|---|
x | meter (float) | R+ |
y | meter (float) | R+ |
z | meter (float) | R+ |
つまり、xi
/yi
から、x
/y
に変換する公式が必要です。
このwikiページを参考すると、一番簡単な公式は下記のような感じです。
x = (xi - principle_point_x) / focal_x * z
y = (yi - principle_point_y) / focal_y * z
どうやってprinciple point
とfocal_length
を取得するかというと、C APIの場合は、rs2_get_video_stream_intrinsics
で、rs2_intrinsics
を取り出して、rs2_intrinsics
からprinciple point
とfocal_length
の情報を掘り出すことができます。
SDKの中には、手軽いhigh-level APIもあります。例はこちら:
Like!