RANSAC 主要解决样本中的外点问题,最多可处理 50% 的外点情况。(RANSAC具有很强的抗噪声能力,只要迭代次数够多,肯定能找到最优解,如果噪声大于50%,那么实际上噪声就是主要的点而不是噪声了)
基本思想:
RANSAC 通过反复选择数据中的一组随机子集来达成目标。被选取的子集被假设为局内点,并用下述方法进行验证:
这个过程被重复执行固定的次数,每次产生的模型要么因为局内点太少而被舍弃,要么因为它比现有的模型更好而被选用。
对上述步骤,进行简单总结如下:
是用open3d拟合点云内的平面。
import open3d as o3d
import numpy as np
from matplotlib import pyplot as plt
'''
RANSAC算法 随机一致性采样
'''
pcd = o3d.io.read_point_cloud("./test_data/fragment.pcd")
print(pcd)
# 0.01m以内都算内点,3点确定一个平面,迭代次数为1000次
plane_model, inliers = pcd.segment_plane(distance_threshold=0.01,
ransac_n=3,
num_iterations=1000)
[a, b, c, d] = plane_model
print(f"Plane equation: {a:.2f}x + {b:.2f}y + {c:.2f}z + {d:.2f} = 0")
inlier_cloud = pcd.select_by_index(inliers)
inlier_cloud.paint_uniform_color([1.0, 0, 0])
outlier_cloud = pcd.select_by_index(inliers, invert=True)
o3d.visualization.draw_geometries([inlier_cloud, outlier_cloud],
zoom=0.8,
front=[-0.4999, -0.1659, -0.8499],
lookat=[2.1813, 2.0619, 2.0999],
up=[0.1204, -0.9852, 0.1215])
效果:红色为平面,绿色为噪声。