Я бы выполнил трехмерный объем c, используя 3D numpy массивы на графике (что-то похожее на использование функции isosurface в MATLAB). Массивы содержат 10 срезов изображений размером 512 на 512 - shape = (10, 512, 512). Я последовал одному из примеров на сайте сюжета (https://plot.ly/python/3d-volume-plots/), но вместо этого он вернул мне пустой сюжет. Почему это так?
Мой код такой, как показано ниже:
import cv2
import skimage.io as skio
import glob
import os
import numpy as np
import pyvista as pv
import plotly.graph_objects as go
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d
def plot3D(img_dir):
#Read images into array
img_list = []
index = 0
for img in os.listdir(img_dir):
img_individual = cv2.imread(os.path.join(img_dir,img), cv2.IMREAD_GRAYSCALE)
img_list.append([img_individual])
index += 1 #Count the number of images appended into the list
print(np.shape(img_list)) #shape = (10,1,512,512)
img_listtoarray = np.asarray(img_list) #Convert list to numpy array
img_array = np.ones((index,512,512))
print(np.shape(img_array))
i = 0
j = 0
k = 0
#Reduce 4D array into 3D array of size (10,512,512)
for i in range(index):
while(j < 512):
while(k < 512):
img_array[i,j,k] = img_listtoarray[i,0,j,k]
k += 1
j += 1
k = 0
j = 0
print(np.shape(img_array)) #shape = (10,512,512)
#Create meshgrid
Z, X, Y = np.mgrid[1:10:5j,1:512:5j,1:512:5j] #Check dimensions
fig = go.Figure(data = go.Volume(
x = Z.flatten(),
y = X.flatten(),
z = Y.flatten(),
value = img_array,
isomin = 0.1,
isomax = 0.8,
opacity = 0.3,
surface_count = 30
))
fig.show()
plot3D("train/result_processed/")
Это будет использоваться для построения трехмерного изображения сфероида ячейки MDCK с использованием фрагментов сегментированного изображения, как показано ниже. в ссылке: Все используемые изображения имеют тип uint8.
Спасибо.