python - 如何分割 3D 点?
问题描述
我想将此 3d 点云分割为三个单独的云,如下所示: 在此处输入图像描述
分割应该适用于各种模型,而无需手动修复标记或指定应该完成的分割数量。
下面的代码与图片中的结果完全相同:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import pandas as pd
data = np.array([[[0, 0, 0, 0],
[0, 0, 0, 0],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 0, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]], [[0, 0, 0, 0],
[0, 0, 0, 0],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 0, 0, 0],
[1, 1, 1, 1],
[1, 1, 1, 1]], [[0, 0, 0, 0],
[0, 0, 0, 0],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 0, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]], [[0, 0, 0, 0],
[0, 0, 0, 0],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 0, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]], [[0, 0, 0, 0],
[0, 0, 0, 0],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 0, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]], [[0, 0, 0, 0],
[0, 0, 0, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 0, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]], [[0, 0, 0, 1],
[0, 0, 0, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 0, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]], [[0, 0, 0, 1],
[0, 0, 0, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 0, 0, 0],
[1, 1, 1, 1],
[1, 1, 1, 1]], [[0, 0, 0, 1],
[0, 0, 0, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]], [[0, 0, 0, 1],
[0, 0, 0, 1],
[0, 0, 0, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[0, 0, 0, 0]]])
data = 1-data
label_array = (label(data, neighbors = 4, connectivity=3))
highval = np.max(label_array)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
xs = []
ys = []
zs = []
cs = []
for s in range(highval):
straw = np.argwhere(label_array==s+1)
for i in range(len(straw)):
cs.append(s)
li = straw[i]
xs.append(li[0])
ys.append(li[1])
zs.append(li[2])
coord_1 = []
df = pd.DataFrame()
df['x'] = pd.Series(xs)
df['y'] = pd.Series(ys)
df['z'] = pd.Series(zs)
df['c'] = pd.Series(cs)
print(df)
ax.scatter(df['x'], df['y'], df['z'], c = df['c'],s = 50, cmap = plt.cm.spring)
plt.show()
解决方案
推荐阅读
- ios - 从 tableView 单元格传递数据被点击到第二个 tableView
- visual-studio - 无法在 VS 编辑器上调试反应本机应用程序
- python-3.x - 相互依赖的情节下拉按钮
- powershell - Powershell中字符串中的反斜杠
- amazon-web-services - AWS Boto3 HTTP 请求
- node.js - SocketIO - 将音频文件发送到 socket.id 的问题
- c# - 如何通过 C# 测试项目自动化打开隐身/私人窗口 Chrome
- android - 如何创建视图输入是动态的recyclerview
- sql-server - 尝试从sql server中的表中获取单列值列表的for循环
- git - 提交日志中文件的 Git2-rs 状态