1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > PyQt Python VTK 医学图像的可视化 vtkImageView2三视图(横断面 冠状面 矢状面)

PyQt Python VTK 医学图像的可视化 vtkImageView2三视图(横断面 冠状面 矢状面)

时间:2023-12-28 17:41:19

相关推荐

PyQt Python VTK 医学图像的可视化 vtkImageView2三视图(横断面 冠状面 矢状面)

概述:

本文实现了 Python 版本 的 四视图,MPR 和三维重建;同时有C++ Qt版本

效果展示:

视频展示:

VTK四视图

vtkImageViewer2

一个方便易用的2D图像显示类,它封装了vtkRenderWindow, vtkRender, vtkImageActor和vtkImageMapToWinowLevelColors。同时,包含了一个vtkInteractorStyleImage的交互方式,使得显示和交互变得更加简单。

3D医学图像有很多,不仅只有CT,还有MRI,超声波,X-光等,各具有独特的诊断优势。下面以CT图像数据作为示例:

效果:

1. DICOM 数据读取

reader = vtk.vtkDICOMImageReader()reader.SetDirectoryName("D:/datasource/fei/ScalarVolume_13")reader.Update()

2.设置imageViewer

可以设置slice,3维数据的方向,以及窗口大小、窗宽、窗位等等

imageviewer = vtk.vtkImageViewer2()imageviewer.SetInputConnection(reader.GetOutputPort())interactor = vtk.vtkRenderWindowInteractor()imageviewer.SetupInteractor(interactor) # 添加交互器# imageviewer.SetSize(400, 400)imageviewer.SetColorLevel(100) # 窗位imageviewer.SetColorWindow(3000) # 窗宽imageviewer.SetSliceOrientationToXY() # 设置切片方向为XYimageviewer.SetSlice(imageviewer.GetSliceMin()) # 设置切片起始位置为切片最小值

all code; 可以设置 :横断面,冠状面,矢状面

import vtkreader = vtk.vtkDICOMImageReader()reader.SetDirectoryName("CT")reader.Update() imageviewer = vtk.vtkImageViewer2()imageviewer.SetInputConnection(reader.GetOutputPort())interactor = vtk.vtkRenderWindowInteractor()imageviewer.SetupInteractor(interactor)#添加交互器#imageviewer.SetSize(400, 400)imageviewer.SetColorLevel(100)#窗位imageviewer.SetColorWindow(3000)#窗宽imageviewer.SetSliceOrientationToXY()#设置切片方向为XYimageviewer.SetSlice(imageviewer.GetSliceMin())#设置切片起始位置为切片最小值#imageviewer.SetSliceOrientationToXZ() #imageviewer.SetSliceOrientationToYZ() #print(imageviewer.GetSliceOrientation())#打印切片方向,XY为2,XZ为1,YZ为0imageviewer.Render()interactor.Start()

Using vtkResliceImageViewer or vtkImageViewer2 with Python3+PyQt5

import sysimport vtkfrom PyQt5 import QtCore, QtGuifrom PyQt5 import QtWidgetsfrom vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractorclass MainWindow(QtWidgets.QMainWindow):def __init__(self, parent = None):QtWidgets.QMainWindow.__init__(self, parent)self.frame = QtWidgets.QFrame()self.vl = QtWidgets.QVBoxLayout()self.vtkWidget = QVTKRenderWindowInteractor(self.frame)self.vl.addWidget(self.vtkWidget)pathDicomDir = "/path/to/dicom/data"reader = vtk.vtkDICOMImageReader()reader.SetDirectoryName(pathDicomDir)reader.Update()self.viewer = vtk.vtkImageViewer()# self.viewer = vtk.vtkImageViewer2()# self.viewer = vtk.vtkResliceImageViewer()self.viewer.SetInputData(reader.GetOutput())self.viewer.SetupInteractor(self.vtkWidget)self.viewer.SetRenderWindow(self.vtkWidget.GetRenderWindow())self.viewer.Render()self.frame.setLayout(self.vl)self.setCentralWidget(self.frame)self.show()if __name__ == "__main__":app = QtWidgets.QApplication(sys.argv)window = MainWindow()sys.exit(app.exec_())

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。