philip187326 2022-06-13 22:12 采纳率: 63.6%
浏览 171
已结题

请问Python代码点云Delaunay三角化报错应该怎么办

问题遇到的现象和发生背景

您好,请问这张图上的点云可以进行Delaunay三角化吗?

问题相关代码,请勿粘贴截图
def boundary_extract(points, err=10e-3):
    pts = np.copy(points)
    tree = KDTree(pts, leaf_size=2)
    # adapt_R = adaptive_alpha(tree, 21)   
    tri = Delaunay(pts)               #在这一步报错
    s = tri.simplices  
    N = s.shape[0]  
    i = 0
    edges = []
    centers = []
    while i <= N - 1:
        if s[i, 0] == -1:  
            i = i + 1
            continue
        p3 = s[i]
        e1 = np.array([points[p3[0], :], points[p3[1], :]])
        e2 = np.array([points[p3[1], :], points[p3[2], :]])
        e3 = np.array([points[p3[0], :], points[p3[2], :]])
        e = [e1, e2, e3]
        for j in range(3):
            flag, center = edge_check_valid(e[j], tree, adapt_R[i], err)
            if flag:
                edges.append(e[j])
                centers.append(center)
        nb = tri.neighbors[i]
        nb_valid = nb[nb != -1]
        # nb_valid_num = nb_valid.shape[0]
        # s[nb_valid] = -1
        i = i + 1
    return edges, centers

运行结果及报错内容
Traceback (most recent call last):
  File "D:/pythonProjectForOpen3D/src/basic/area/AlphaShape.py", line 149, in <module>
    edges, centers = boundary_extract(final_pointCloud_array, err=10e-5)
  File "D:/pythonProjectForOpen3D/src/basic/area/AlphaShape.py", line 66, in boundary_extract
    tri = Delaunay(pts)
  File "qhull.pyx", line 1840, in scipy.spatial.qhull.Delaunay.__init__
  File "qhull.pyx", line 356, in scipy.spatial.qhull._Qhull.__init__
scipy.spatial.qhull.QhullError: QH6154 Qhull precision error: Initial simplex is flat (facet 1 is coplanar with the interior point)

While executing:  | qhull d Qz Qt Qc Qbb Q12
Options selected for Qhull 2019.1.r 2019/06/21:
  run-id 1401204984  delaunay  Qz-infinity-point  Qtriangulate  Qcoplanar-keep
  Qbbound-last  Q12-allow-wide  _pre-merge  _zero-centrum  Qinterior-keep
  Pgood  _max-width 40  Error-roundoff 4e-14  _one-merge 3.6e-13
  Visible-distance 2.4e-13  U-max-coplanar 2.4e-13  Width-outside 4.8e-13
  _wide-facet 1.4e-12  _maxoutside 4.8e-13

precision problems (corrected unless 'Q0' or an error)
    142 zero divisors during gaussian elimination

The input to qhull appears to be less than 4 dimensional, or a
computation has overflowed.

Qhull could not construct a clearly convex simplex from points:
- p0(v5):    19   4.5     0   2.2
- p36(v4): 0.095    20     0     3
- p110(v3): -0.033   -20     0   3.1
- p140(v2):    20 -0.14     0     3
- p78(v1):   -20  0.77     0   1.7

The center point is coplanar with a facet, or a vertex is coplanar
with a neighboring facet.  The maximum round off error for
computing distances is 4e-14.  The center point, facets and distances
to the center point are as follows:

center point    3.912    1.025        0    2.595

facet p36 p110 p140 p78 distance=    0
facet p0 p110 p140 p78 distance=    0
facet p0 p36 p140 p78 distance=    0
facet p0 p36 p110 p78 distance=    0
facet p0 p36 p110 p140 distance=    0

These points either have a maximum or minimum x-coordinate, or
they maximize the determinant for k coordinates.  Trial points
are first selected from points that maximize a coordinate.

The min and max coordinates for each dimension are:
  0:    -19.87     19.97  difference= 39.84
  1:    -19.97     19.97  difference= 39.94
  2:         0         0  difference=    0
  3:         0     19.97  difference= 19.97

If the input should be full dimensional, you have several options that
may determine an initial simplex:
  - use 'QJ'  to joggle the input and make it full dimensional
  - use 'QbB' to scale the points to the unit cube
  - use 'QR0' to randomly rotate the input for different maximum points
  - use 'Qs'  to search all points for the initial simplex
  - use 'En'  to specify a maximum roundoff error less than 4e-14.
  - trace execution with 'T3' to see the determinant for each point.

If the input is lower dimensional:
  - use 'QJ' to joggle the input and make it full dimensional
  - use 'Qbk:0Bk:0' to delete coordinate k from the input.  You should
    pick the coordinate with the least range.  The hull will have the
    correct topology.
  - determine the flat containing the points, rotate the points
    into a coordinate plane, and delete the other coordinates.
  - add one or more points to make the input full dimensional.


Process finished with exit code 1


我的解答思路和尝试过的方法

目前还没找到解决办法

我想要达到的结果

希望可以找到报错的原因并解决问题

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 6月21日
    • 创建了问题 6月13日

    悬赏问题

    • ¥15 rt-thread线程切换的问题
    • ¥20 python忆阻器数字识别
    • ¥15 无法输出helloworld
    • ¥15 高通uboot 打印ubi init err 22
    • ¥20 PDF元数据中的XMP媒体管理属性
    • ¥15 R语言中lasso回归报错
    • ¥15 网站突然不能访问了,上午还好好的
    • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
    • ¥15 semrush,SEO,内嵌网站,api
    • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊