0

我想使用 ransac 算法分割地平面激光雷达环,我使用 python-pcl 来做到这一点,但我得到了错误的结果,如下图所示。

众所周知,激光雷达数据有许多地平面环,它找不到正确的地平面,但它找到了地平面以上的平面。我可以猜测的原因可能是激光雷达的地面非常稀疏,而地面以上的平面上的点数比地面多,因此算法找到了错误的结果。代码可以列出如下:


seg = point_cloud.make_segmenter()

seg.set_optimize_coefficients(True)

seg.set_model_type(pcl.SACMODEL_PLANE)

seg.set_method_type(pcl.SAC_RANSAC)

seg.set_distance_threshold(0.1)

indices, model = seg.segment()

不确定是否是我猜测的问题,所以如果有人以前遇到过问题,请告诉我。而且我不知道如何解决这个问题,关于激光雷达环分割的信息很少,有人知道如何解决吗?

还有其他方法可以进行激光雷达地面分割,我可以得到代码吗?

在此处输入图像描述

4

1 回答 1

2

尝试这个 -

from mpl_toolkits.mplot3d.axes3d import *
import matplotlib.pyplot as plt
from sklearn import linear_model


fig = plt.figure("Pointcloud")
ax = Axes3D(fig)
ax.grid = True

ax.set_xlabel("X")
ax.set_ylabel("Y")
ax.set_zlabel("Z")
xyz = get_points()# here xyz is a 3d numpy array
    if xyz.size > 10:
        XY = xyz[:, :2]
        Z = xyz[:, 2]
        ransac = linear_model.RANSACRegressor(residual_threshold=0.01)
        ransac.fit(XY, Z)
        inlier_mask = ransac.inlier_mask_
        outlier_mask = np.logical_not(inlier_mask)
        inliers = np.zeros(shape=(len(inlier_mask), 3))
        outliers = np.zeros(shape=(len(outlier_mask), 3))
        a, b = ransac.estimator_.coef_
        d = ransac.estimator_.intercept_
        for i in range(len(inlier_mask)):
            if not outlier_mask[i]:
                inliers[i] = xyz[i]
            else:
                outliers[i] = xyz[i]

        min_x = np.amin(inliers[:, 0])
        max_x = np.amax(inliers[:, 0])
        min_y = np.amin(inliers[:, 1])
        max_y = np.amax(inliers[:, 1])

        x = np.linspace(min_x, max_x)
        y = np.linspace(min_y, max_y)

        X, Y = np.meshgrid(x, y)
        Z = a * X + b * Y + d
        AA = ax.plot_surface(X, Y, Z, cmap='binary', rstride=1, cstride=1, 
        alpha=1.0)
        BB = ax.scatter(outliers[:, 0], outliers[:, 1], outliers[:, 2],c='k', s 
        =1)
        CC = ax.scatter(inliers[:, 0], inliers[:, 1], inliers[:, 2], c='green', 
        s=1)
        plt.show()

或者请提供您的数据集。也可以使用 ransac 参数

于 2020-01-14T20:09:43.943 回答