Как выполнить трехмерное построение c с использованием трехмерных массивов на графике? - PullRequest
0 голосов
/ 06 февраля 2020

Я бы выполнил трехмерный объем 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.

Спасибо.

...