Ich habe Open3D in meiner Abschlussforschung angesprochen, aber als ich anfing, Open3D zu berühren, war ich in Schwierigkeiten, weil es zu wenig japanische Informationen gab, also werde ich es ein wenig zusammenfassen.
Eine Site, die die meisten Leute, die Open3D berühren, wahrscheinlich erreichen werden → Open3D: http://lang.sist.chukyo-u.ac.jp/classes/Open3D/ Dies ist eine japanische Übersetzung des offiziellen Tutorials, aber neben dem Tutorial gibt es noch viele andere Möglichkeiten. Wenn Sie etwas tun möchten, finden Sie es normalerweise in der offiziellen Dokumentation (http://www.open3d.org/docs/release/index.html).
Was ich in meiner Forschung getan habe, war "Erzeugung von Punktgruppen aus RGB-D-Kamerabildern", "Entfernen von Ausreißern", "Ausrichten von Punktgruppen" usw. Andere Dinge, die ich getan habe, waren "Boxelisierung von Punktgruppen" und "Ebenenschätzung mit RANSAC".
Dieses Mal werde ich über die Grundlagen von Open3D und "Boxelisierung von Punktgruppen" schreiben (obwohl es nur eine Einführung in Funktionen ist).
Bitte beachten Sie, dass die Spezifikationen von Open3D je nach Version sehr unterschiedlich sind. In diesem Artikel wird es als kompatibel mit v0.9.0 beschrieben. Da ich jedoch auch v0.7.0 für meine Recherchen verwendet habe, habe ich nur die Mindestoperation mit v0.9.0 überprüft.
Generierung und Visualisierung von Punktgruppen aus RGB-D-Bildern, Lesen und Schreiben in PCD-Dateien
Oben rechts ist das von RealSense aufgenommene Bild und links die generierte Punktgruppe (in der Untersuchung wurde die Punktgruppe nach dem Ausschneiden des Bildes generiert).
import open3d as o3d
"""
RGB zu Open3D-D Bildeingabe
"""
color = o3d.Image(color_numpy) #Vom numpy-Array konvertieren
depth = o3d.Image(depth_numpy)
rgbd = o3d.geometry.RGBDImage.create_rgbd_image_from_color_and_depth(color, depth, convert_rgb_to_intensity=False)
pcd = o3d.geometry.PointCloud.create_point_cloud_from_rgbd_image(rgbd, pinhole_camera_intrinsic)
pcd.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]]) #Drehung für einfache Anzeige
Wenn Sie RealSense verwenden, können Sie pinhole_camera_intrinsic mit der folgenden Methode abrufen. Verarbeitungen wie RealSense-Einstellungen entfallen.
import pyrealsense2 as rs
#Holen Sie sich Kamera-Intrinsics
intr = profile.get_stream(rs.stream.color).as_video_stream_profile().get_intrinsics()
pinhole_camera_intrinsic = o3d.camera.PinholeCameraIntrinsic(intr.width, intr.height, intr.fx, intr.fy, intr.ppx, intr.ppy)
o3d.visualization.draw_geometries([pcd])
Es wird auch zur Visualisierung von Boxen und Maschen sowie Punktgruppen verwendet.
#Binär schreiben
o3d.io.write_point_cloud("hoge.pcd", pcd)
#Schreiben mit ASCII
o3d.io.write_point_cloud("hoge.pcd", pcd, True)
Sie können andere als PCD-Dateien ausgeben. Es ist bequem, mit ASCII auszugeben, da es leicht zu sehen ist.
pcd = o3d.io.read_point_cloud("./hoge.pcd")
voxel = o3d.geometry.VoxelGrid.create_from_point_cloud(pcd, 0.03) #Boxelgrößenangabe
o3d.visualization.draw_geometries([voxel])
Als ich Open3D berührte, habe ich selbst eine Boxelisierungsfunktion für Punktgruppen erstellt, aber es scheint, dass sie ursprünglich vorbereitet wurde. .. ..
Dieses Mal habe ich die Grundlagen von Open3D zusammengefasst. Wenn ich Zeit habe, möchte ich meine Forschung und Flugzeugschätzung mit RANSAC zusammenfassen, werde es aber wahrscheinlich nicht.