Это код, который у меня есть:
Код: Выделить всё
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()
Подробнее здесь: https://stackoverflow.com/questions/790 ... r-gradient