Создайте 3D-стек из нескольких 2D-изображений с цветовым градиентом.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Создайте 3D-стек из нескольких 2D-изображений с цветовым градиентом.

Сообщение Anonymous »

У меня есть набор из 10 2D-изображений, которые я хочу соединить, чтобы создать 3D-изображение. Эти изображения генерируются с помощью matplotlib, поэтому они могут иметь формат .png или .tif. В приведенном ниже примере кода у меня есть функцияplot_data(), которая использует gen_random_data() для получения линии и построения набора из 10 2D-изображений, где цвет градиента основан на viridis()< /код> cmap. Я использовал meshlib.mrmeshpy для объединения этих изображений и получения 3D-графика, но это 3D-изображение не имеет цветокоррекции. Может ли кто-нибудь помочь мне реализовать цвет, который у меня есть? Если есть другой пакет, кроме meshlib.mrmeshpy, который может это сделать, сообщите мне.
У меня есть такой код:

Код: Выделить всё

import cv2
import meshlib.mrmeshpy as mr
import vtk
import matplotlib.pyplot as plt
import numpy as np
import os

def gen_random_data():
# Generate random data
np.random.seed(42)
x = np.random.rand(100, 100)
y = 2 * x + 5
# z = np.random.rand(100, 100)
return x, y

def plot_data(n=10):
for i in range(n):
# Generate random data
x, y = gen_random_data()
# Plot the data
plt.scatter(x, y, c=y)
plt.viridis()
plt.savefig('scatter_plots/scatter_plot_{}.tif'.format(i))
plt.show()

def make_stack(tif_path):

settings = mr.LoadingTiffSettings()

# load images from specified directory
settings.dir = tif_path

# specifiy size of 3D image element
settings.voxelSize = mr.Vector3f(1, 1, 5)

#create voxel object from the series of images
volume = mr.loadTiffDir(settings)

#define ISO value to build surface
iso = 100.0  #127.0

#convert voxel object to mesh
mesh = mr.gridToMesh(volume, iso)

#save mesh to .stl file
mr.saveMesh(mesh, mr.Path(tif_path + '/' + '3d_image_stack.stl'))

def view_stack(tif_path):
# visualize the file:
reader = vtk.vtkSTLReader()
reader.SetFileName(tif_path + '/' + '3d_image_stack.stl')

mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(reader.GetOutputPort())

actor = vtk.vtkActor()
actor.SetMapper(mapper)

renderer = vtk.vtkRenderer()
renderer.AddActor(actor)
renderer.SetBackground(1, 1, 1)

render_window = vtk.vtkRenderWindow()
render_window.AddRenderer(renderer)
render_window.SetSize(800, 800)

interactor = vtk.vtkRenderWindowInteractor()
interactor.SetRenderWindow(render_window)

interactor.Initialize()
interactor.Start()

def main():
# Plot and provide path to TIF images
plot_data(10)
TIF_PATH = r'scatter_plots'

make_stack(TIF_PATH)
view_stack(TIF_PATH)

if __name__ == '__main__':
main()
Этот код сгенерирует изображения и создаст трехмерный график. Я пробовал играть со значением ISO, но это не влияет на цвет.

Подробнее здесь: https://stackoverflow.com/questions/790 ... r-gradient
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»