RealSenseで取得した深度画像から深度推定を行う方法を教えてください
Depth CameraのRealSense D415に関する質問です。
ReralSenseから取得した深度画像から、深度情報を取り出すことは可能でしょうか。自分の認識では、深度画像はOpenCVで深度に合わせて着色を行っているだけなので出来ないと思っているのですが、もし可能でしたら方法を教えていただきたいです。
0 likes
Depth CameraのRealSense D415に関する質問です。
ReralSenseから取得した深度画像から、深度情報を取り出すことは可能でしょうか。自分の認識では、深度画像はOpenCVで深度に合わせて着色を行っているだけなので出来ないと思っているのですが、もし可能でしたら方法を教えていただきたいです。
簡単に言うなら、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もあります。例はこちら: