【问题标题】:Coloring 3D shapes为 3D 形状着色
【发布时间】:2021-12-03 12:29:16
【问题描述】:

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

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()

【问题讨论】:

  • 如何定义测地线?在点之间使用阈值?如果双手几乎接触到欧几里得距离与表面上的点到点距离相似怎么办?我没有您问题的答案,但您可能对pygeodesicpotpourri3dthis question 感兴趣

标签: python matplotlib data-visualization point-clouds


【解决方案1】:

我找到了一种方法可以得到令人满意的结果。

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

然后,我们可以使用 Pytorch3D 将球体变形为输入形状,如 here 所述。以这种方式,球体颜色平滑地转移到人的形状。虽然我有一个只有顶点坐标的点云,但是效果还是不错的。

以下是使用此方法为海豚着色的示例:

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

【讨论】:

  • 有趣的方法,感谢您对您的问题提供反馈!
猜你喜欢
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 2013-09-03
  • 1970-01-01
  • 2022-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多