使用Python+VTK获取3D体渲染模型任意角度切面(更新中)

目录

    • 效果图
    • 实现目标
    • 安装依赖
    • Code
    • 其他需求

效果图

废话少说先上效果图,右边红色的plane是想要获取3D模型对应切面的平面,左边是这个切面的切片的图像。
使用Python+VTK获取3D体渲染模型任意角度切面(更新中)_第1张图片

实现目标

定义一个任意角度的切面,都能把体绘制模型的这个切面的图像获取,并且能够把这个切面图像转为numpy格式供其他逻辑继续处理。MPR三维重建只能获取xyz轴的切面无法满足任意角度切片的需求。

安装依赖

pip install vtk numpy opencv-python scipy

Code

体渲染的知识可以参考我上一篇文章:Python使用VTK对容积超声图像进行体绘制(三维重建)

import vtk
import numpy as np
import cv2
from vtkmodules.util.numpy_support import numpy_to_vtk, vtk_to_numpy
from scipy.ndimage import rotate # 3D旋转

# 定义原点vtk对象原点位置
origin = [0, 0, 0]
# 定义xyz旋转角度
x_angle = 0
y_angle = 0
z_angle = 0

# 导入3D模型, 根据自己场景调整, 最终类型是vtkImageData就可以
label_arr = np.load("./your_model.npy")
label_arr = rotate(label_arr, 180, axes=(0, 1), reshape=True, order=1, mode='constant', cval=0, prefilter=True)
label_arr = rotate(label_arr, -90, axes=(0, 2), reshape=True, order=1, mode='constant', cval=0, prefilter=True)

# numpy转为vtkTypeUInt8Array
vtk_data = numpy_to_vtk(label_arr.ravel(), array_type=vtk.VTK_UNSIGNED_CHAR)
# 获取模型尺寸
model_dims = label_arr.shape
# 定义一个vtkImageData数据对象, 作为vtkImageReslice的输入
image_data 

你可能感兴趣的:(python,3d,VTK)