python - 为 3D 形状着色

标签 python matplotlib data-visualization point-clouds

如何给 3D 形状/点云(在我的例子中是人体)着色,使每个点都有不同的颜色,但点与点之间的颜色过渡是平滑的,如图所示下图?

enter image description here

N 个点的形状表示为点坐标x,y,zNx3 数组。我试图简单地将每个点的坐标值 x,y,z 转换为 r,g,b 颜色值,但结果并不令人满意(例如某些点根据欧几里得距离彼此接近的点用相似的颜色着色,但它们应该用不同的颜色着色,因为它们的测地距离很大)。

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

pc = ...
colors = (pc - pc.min()) / (pc.max() - pc.min())

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(pc[1], pc[1], pc[2], c=colors)
plt.show()

最佳答案

我找到了一种方法,结果令人满意。

想法是根据球体顶点的坐标为球体着色(如问题所示)。这样的着色很好,因为在人体形状中不存在“欧几里德距离与测地线距离”的问题。

然后,我们可以使用 Pytorch3D 将球体变形为输入形状,如所述here .通过这种方式,球体着色可以顺利地转移到人形上。虽然我有一个只有顶点坐标的点云,但结果非常好。

下面是使用这种方法给海豚上色的例子:

enter image description here

一个问题是我们仍然需要将颜色从获得的形状转移到原始形状,这也许可以通过在两者之间找到最近的邻居来完成(虽然我还没有尝试过)。

关于python - 为 3D 形状着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69582382/

相关文章:

python - matplotlib 中的 bbox_inches ='tight' 错误

r - 如何使用 ggplot2 在 y 轴截距(y 轴)上添加一个点

graph - 数据可视化

python - django-south 与 django-audit-log

python - numpy 中具有多个参数的分段函数

python - 如何解决 Python "WindowsError messages are not properly encoded"问题?

Python 3.x turtle 速度极慢?

python - 在 Matplotlib 寄生虫图中旋转 x 轴标签

python - 交互式 Matplotlib 窗口未更新

python - 获取groupby后每列的百分比