gpt4 book ai didi

python - 如何在 python 中多次使用 ax.voxels 方法后修复限制

转载 作者:行者123 更新时间:2023-12-01 07:24:27 29 4
gpt4 key购买 nike

我正在使用从激光雷达收到的 3D 点云进行研究。我将大量点(最多 10 - 1 亿个)分割成立方体,研究它们的位置并使用 Axes3D.voxels 方法在单独的体素中显示结果。但是,在多次使用此方法后,我在设置 Axes3D 的适当限制时遇到了一些问题。

我定义了add_voxels函数,以便立即从输入的立方体位置的np.array中显示体素:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import itertools

def add_voxels(true_ids, ax):
shape_of_filled = true_ids.max(axis=0) + 1 # shape of building
filled = np.zeros(shape_of_filled)
for n in true_ids:
filled[n] = 1
x, y, z = np.indices(np.array(shape_of_filled) + 1)
return ax.voxels(x,y,z, filled)```

Then use it to plot my two clouds of cubes:

fig = plt.gcf() # get a reference to the current figure instance
ax = fig.gca(projection='3d') # get a reference to the current axes instance
cubecloud1 = np.array(list(itertools.product(range(2,4), range(2,4), range(2,4))))
cubecloud2 = np.array(list(itertools.product(range(4,7), range(4,7), range(4,7))))
add_voxels(cubecloud2, ax)
add_voxels(cubecloud1, ax)
plt.show()

这会导致体素位置的显示出现错误的限制:

我希望所有组件都显示在正确的边界框中,如下所示:

或者,至少,这个(假设边界框也包含不可见的体素):

最佳答案

我只能通过明确设置轴限制来完成这项工作:

# [...]
faces2 = add_voxels(cubecloud2, ax)
faces1 = add_voxels(cubecloud1, ax)
points = list(faces1.keys()) + list(faces2.keys())
data = list(zip(*points))
xmin = min(data[0])
xmax = max(data[0])
ymin = min(data[1])
ymax = max(data[1])
zmin = min(data[2])
zmax = max(data[2])
ax.set_xlim3d(xmin, xmax)
ax.set_ylim3d(ymin, ymax)
ax.set_zlim3d(zmin, zmax)
plt.show()

关于python - 如何在 python 中多次使用 ax.voxels 方法后修复限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57527709/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com