【问题标题】:How to find the intersection between 2 skimage.measure.LineModelND objects?如何找到 2 个 skimage.measure.LineModelND 对象之间的交集?
【发布时间】:2021-12-29 19:46:23
【问题描述】:

以下是我想要完成的任务的描述。我有一组 3D 点,我试图在这些点上拟合 2 条线,在定义这些线之后,我想找到它们的交点。

这里有更多关于我到目前为止所做的事情的详细信息,从一开始就开始。我有一组 3D 点存储在形状为 (N, 3)np.ndarray 中,可以找到点 here

之后,我使用 scikit-image 库通过 ransac 定义线条。我得到LineModelND 类型的线,它们由一个点(原点)和一个使用ransac 的单位向量(方向)定义。这是一个代码sn-p。在将一条线拟合到数据之后,我将异常值拟合到另一条线上,所以现在我有 2 个 LineModelND 对象,我想找到它们的交点。有什么想法吗?

model = LineModelND()
model.estimate(proj_points_array)

model_robust, inliers = ransac(proj_points_array, LineModelND, min_samples=2,
                               residual_threshold=0.02, max_trials=1000)

print('line params: ', model_robust.params, ' line is type of: ', type(model_robust))

outliers = inliers == False

model_2 = LineModelND()
model_2.estimate(proj_points_array[outliers,:])

Here is the geometry of the points.

【问题讨论】:

    标签: python numpy geometry line scikit-image


    【解决方案1】:

    目前我找到的解决方案是使用skspatial.objects.Line.intersect_line 方法。这种方法要求点共面,线实际上有交点,换句话说,线不平行。 LineModelND返回一个由点和方向定义的线模型作为skspatial.objects.Line对象的线对象定义,所以在定义了skspatial Lines之后就可以使用这个类的intersect_line方法了。

    在我的例子中,这些线不是共面的。所以我必须将这些点投影到一个平面上,找到 2D 交点,从平面方程计算 3D 轴值,然后反转变换。这导致following output(我无法发布图片,所以我发布了图片的链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      相关资源
      最近更新 更多