Detecting a single plane using Ransac in python

91 Views Asked by At

When detecting building roof top ransac is detecting multiple building roof as a one single plane. I want to segment each building rooftop separately.

How the data looks like https://i.stack.imgur.com/cAFRL.png

What ransac produce https://i.stack.imgur.com/PsRgr.png

What i want https://i.stack.imgur.com/r7Pz7.png

This is what i have tried

import os
import open3d as o3d
import numpy as np

test_data_dir = 'M:\\lidar\\Test\\'
point_cloud_file_name = 'boutlier.txt'
point_cloud_file_path = os.path.join(test_data_dir, point_cloud_file_name)

pcd = o3d.io.read_point_cloud(point_cloud_file_path,format="xyz")

plane_model, inliers = pcd.segment_plane(distance_threshold=2.5,
                                         ransac_n=3,
                                         num_iterations=1000)

inlier_cloud = pcd.select_by_index(inliers)
inlier_cloud.paint_uniform_color([0.5, 0, 0.5])

outlier_cloud = pcd.select_by_index(inliers, invert=True)

o3d.visualization.draw_geometries([inlier_cloud])
0

There are 0 best solutions below