Я хочу построить трехмерную визуализацию сканирования DICOM, но я застрял на этой ошибке.
Я использую метод марширующих кубов. Сначала из вершин и граней сетки и вернулся, затем перешел в plt_3d. Импортированные модули:
импорт numpy как np
импорт pydicom как pyd
импорт os
импорт matplotlib.pyplot как plt
изglob import glob
из mpl_toolkits.mplot3d.art3d import Poly3DCollection
import scipy.ndimage
из скиф-морфологии импорта
из показателя импорта скимаджа
из skimage.transform import resize
из sklearn.cluster import KMeans
из сюжета import версия
из plotly.offline import download_plotlyjs,init_notebook_mode, plot, iplot
из plotly.tools импортирует FigureFactory как FF
из plotly.graph_objs import *
init_notebook_mode (подключено = True)
imgs_after_resampявляется пиксельным массивом (3d), который содержит данные DICOM
def make_mesh(image, threshold=-300, step_size=1):
p = image.transpose(2,1,0)
verts, faces, norm, val = measure.marching_cubes_lewiner(p, threshold,
step_size=step_size, allow_degenerate=True)
print(verts)
return verts, faces
def plotly_3d(verts, faces):
x,y,z = zip(*verts)
fig = FF.create_trisurf(x=x,
y=y,
z=z,
plot_edges=False,
colormap=colormap,
simplices=faces,
backgroundcolor='rgb(64, 64, 64)',
title="Interactive Visualization")
iplot(fig)
def plt_3d(verts, faces):
print(“Drawing”)
x,y,z = zip(*verts)
fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(111, projection='3d')
mesh = Poly3DCollection(verts[faces], linewidths=0.05, alpha=1)
face_color = [1, 1, 0.9]
mesh.set_facecolor(face_color)
ax.add_collection3d(mesh)
ax.set_xlim(0, max(x))
ax.set_ylim(0, max(y))
ax.set_zlim(0, max(z))
ax.set_axis_bgcolor((0.7, 0.7, 0.7))
plt.show()
v, f = make_mesh(imgs_after_resamp, 350)
new3d=np.vectorize(plt_3d)
new3d(v,f)
ValueError Traceback (последний последний вызов) в ----> 1 plot_ve (imgs_re, 400)
TypeError:аргумент типа type после * должен быть iterв состоянии, не numpy.float32