J'essaie de convertir une image de profondeur (RGBD) en un nuage de points 3D. La solution que j'utilise actuellement est tirée de cet article où:
cx
= hauteur du centre de l'imagecy
= largeur du centre de l'imagefx
et fy
= 250
, choisi en parcourant quelques optionsLes mesures de profondeur ont été prises à partir d'une caméra à trou d'épingle et le nuage de points se projette loin du centre (exemples d'images ci-dessous). Quelqu'un peut-il m'aider à comprendre pourquoi et comment je peux résoudre ce problème?
Vous pouvez facilement résoudre ce problème en utilisant open3d
paquet. Installez-le en utilisant Sudo pip install -U open3d-python
(pas seulement open3d
- c'est un autre paquet).
Une fois installé:
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
Le code ci-dessus suppose que vous avez votre image couleur dans color
et votre image de profondeur dans depth
, vérifiez les exemples fournis avec open3d
pour plus d'informations.
Si vous possédez votre propre appareil photo, vous pouvez remplacer pinhole_camera_intrinsic
avec ceux-ci, mais pour le test, la caméra sténopé fonctionne plus ou moins bien.