web-dev-qa-db-ja.com

深度画像から点群を生成

深度画像(RGBD)を3D点群に変換しようとしています。私が現在使用しているソリューションは this post から取得されます:ここで:

  • cx =画像の中心の高さ
  • cy =画像の中心の幅
  • fxおよびfy = 250、いくつかのオプションを反復して選択

深度測定はピンホールカメラから取得され、点群は中心から離れて投影されています(下の画像例)。誰もが私にこれを解決する理由と方法を理解するのを手伝ってくれる?

enter image description hereenter image description hereenter image description here

2
Lloyd Rayner

これは、open3dパッケージを使用して簡単に解決できます。 Sudo pip install -U open3d-pythonを使用してインストールします(open3dだけではありません-これは別のパッケージです)。

インストールしたら:

from open3d import *

rgbd = create_rgbd_image_from_color_and_depth(color, depth, convert_rgb_to_intensity = False)
pcd = create_point_cloud_from_rgbd_image(rgbd, pinhole_camera_intrinsic)

# flip the orientation, so it looks upright, not upside-down
pcd.transform([[1,0,0,0],[0,-1,0,0],[0,0,-1,0],[0,0,0,1]])

draw_geometries([pcd])    # visualize the point cloud

上記のコードは、カラーイメージがcolorにあり、深度イメージがdepthにあると想定しています。詳細については、open3dに付属のサンプルを確認してください。

独自のカメラ組み込みがある場合は、pinhole_camera_intrinsicをそれらに置き換えることができますが、テスト実行では、ピンホールカメラは多かれ少なかれ正常に機能します。

6
lenik