Skip to content

YEC64/Python-Open3D_pointcloud_data_processing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

Python-Open3D_pointcloud_data_processing

"Lidar, son yılların en dikkat çeken teknolojilerinden olan otonom araçlarda sıkça kullanılanılan sensörlerden birisidir. Bulunduğu ortamın belirli bölgesine veya 360 derece olacak şekilde lazer ışınları göndererek uzaklık ölçümü yapılmasını sağlar."

"Bir bölgenin, bir odanın haritalanmasında veya yeterince veri toplanırsa yapay zeka modelleri eğitilerek nesnelerin tanınmasında kullanılabilir."

"Bu github reposunda python ile pointcloud şeklinde gelen lidar verilerinin işlenmesi üzerine çalışmalar yaparken karşılaştığım ve faydalı bulduğum bir kütüphaneyi sizlerle paylaşmak ve dökümantasyonda verilen küçük bir örneği sunmak istiyorum."

Open3D Kütüphanesinin Kurulumu

pip install open3d

veya

pip install --user open3d 

"Kütüphane dökümantasyonunda bu şekilde pip ile kuulabildiği yazıyor fakat benim denemelerimde kütüphane düzgün bir şekilde kurulmadı. Ben kütüphanenin github reposunu indirip build ederek kurlumunu gerçekleştirdim. Aşağıdaki linkden adımları takip ederek aynı şekilde kurulumları yapabilirsiniz."

Build from source

ÖRNEK ÇALIŞMA

"Pointcloud verisindeki bir nesneyi ayırt etme. Kod bloklarının çıktılarını altlarına görsel olarak ekleyeceğim"

İlk adım olarak numpy ve open3d kütphanesini import etme

import open3d as o3d 
import numpy as np 

Open3d kütüphanesinde test için sunulmuş pointcloud datasını içe aktarma

ply_point_cloud = o3d.data.PLYPointCloud()
pcd = o3d.io.read_point_cloud(ply_point_cloud.path)
print(pcd)
print(np.asarray(pcd.points))

o3d.visualization.draw_geometries([pcd],
                                  zoom=0.3412,
                                  front=[0.4257, -0.2125, -0.8795],
                                  lookat=[2.6172, 2.0475, 1.532],
                                  up=[-0.0694, -0.9768, 0.2024])

Screenshot from 2022-02-22 17-02-12

Veriyi daha kolay işlenebilir hale getirmek için noktaların homojen bir alt kümesini alma

downpcd = pcd.voxel_down_sample(voxel_size=0.05)

o3d.visualization.draw_geometries([downpcd],
                                  zoom=0.3412,
                                  front=[0.4257, -0.2125, -0.8795],
                                  lookat=[2.6172, 2.0475, 1.532],
                                  up=[-0.0694, -0.9768, 0.2024])

Screenshot from 2022-02-22 17-02-27

Noktaların normal doğrularını çizdirme

downpcd.estimate_normals(
    search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1, max_nn=30))

o3d.visualization.draw_geometries([downpcd],
                                  zoom=0.3412,
                                  front=[0.4257, -0.2125, -0.8795],
                                  lookat=[2.6172, 2.0475, 1.532],
                                  up=[-0.0694, -0.9768, 0.2024],
                                  point_show_normal=True)

Screenshot from 2022-02-22 17-02-34

Nesnenin nokta bulutundan kırpılması

demo_crop_data = o3d.data.DemoCropPointCloud()
pcd = o3d.io.read_point_cloud(demo_crop_data.point_cloud_path)
vol = o3d.visualization.read_selection_polygon_volume(demo_crop_data.cropped_json_path)
chair = vol.crop_point_cloud(pcd)

o3d.visualization.draw_geometries([chair],
                                  zoom=0.7,
                                  front=[0.5439, -0.2333, -0.8060],
                                  lookat=[2.4615, 2.1331, 1.338],
                                  up=[-0.1781, -0.9708, 0.1608])

Screenshot from 2022-02-22 17-02-42

Nesne üzerinde kalan noktaların ayırt edici olması için renklendirilmesi

chair.paint_uniform_color([1, 0.706, 0])


o3d.visualization.draw_geometries([chair],
                                  zoom=0.7,
                                  front=[0.5439, -0.2333, -0.8060],
                                  lookat=[2.4615, 2.1331, 1.338],
                                  up=[-0.1781, -0.9708, 0.1608])

Screenshot from 2022-02-22 17-02-49

Nesnedeki noktaların uzaklıklarını bulma

dists = pcd.compute_point_cloud_distance(chair)
dists = np.asarray(dists)
ind = np.where(dists > 0.01)[0]

Nesnenin sınırlarının iki eksenli boundingbox içerisine alınması

aabb = chair.get_axis_aligned_bounding_box()
aabb.color = (1, 0, 0)
obb = chair.get_oriented_bounding_box()
obb.color = (0, 1, 0)

o3d.visualization.draw_geometries([chair, aabb, obb],
                                  zoom=0.7,
                                  front=[0.5439, -0.2333, -0.8060],
                                  lookat=[2.4615, 2.1331, 1.338],
                                  up=[-0.1781, -0.9708, 0.1608])

Screenshot from 2022-02-22 17-02-54

Nesnenin noktalarını barındıran en küçük dışbükey yüzeyi tepit etme

pcl = chair
hull, _ = pcl.compute_convex_hull()
hull_ls = o3d.geometry.LineSet.create_from_triangle_mesh(hull)
hull_ls.paint_uniform_color((1, 0, 0))


o3d.visualization.draw_geometries([pcl, hull_ls])

Screenshot from 2022-02-22 17-03-19

SON

"Merhaba ben YEC, umarım yardımcı olmuştur. Daha fazla incelemek için Open3d kütüphanesi dökümantasyonunu inceleyebilirsiniz. Linkedin hesabımdan takip edebilir ve konu ile ilgili sorularını sunabilirsiniz."

Linkedin

About

Example of processing point cloud data using the python-Open3D library

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages