如何给 3D 形状/点云(在我的例子中是人体)着色,使每个点都有不同的颜色,但点与点之间的颜色过渡是平滑的,如图所示下图?
N 个点的形状表示为点坐标x,y,z
的Nx3
数组。我试图简单地将每个点的坐标值 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 .通过这种方式,球体着色可以顺利地转移到人形上。虽然我有一个只有顶点坐标的点云,但结果非常好。
下面是使用这种方法给海豚上色的例子:
一个问题是我们仍然需要将颜色从获得的形状转移到原始形状,这也许可以通过在两者之间找到最近的邻居来完成(虽然我还没有尝试过)。
关于python - 为 3D 形状着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69582382/