Как сегментировать 3D-точки? - PullRequest
0 голосов
/ 11 ноября 2019

введите описание изображения здесь

Я хочу сегментировать это трехмерное облако точек на три отдельных облака, например так: введите описание изображения здесь

Сегментация должна работать на различных моделях без необходимости вручную фиксировать маркеры или указывать количество сегментаций, которые должны быть выполнены.

Код ниже для того же результата, что и на рисунках:

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