首页 > 解决方案 > 如何分割 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()

标签: pythonimage-segmentation

解决方案


推荐阅读