emmm好了现在又到了CSDN记录美好生活的时候了,不过写这个也是做一个记录吧,怕自己之后搞的时候忘了。。。
在原有框架的基础上变成了显示CT重建后的人体段,环境还是老的环境。
CT图像总共是328张,大概重建时间2秒不到,感觉还是OK的
代码分段来吧有点长。。。
这边是按下打开按钮后子函数里的代码。。。我定义成
def on_open_action(self):
首先初始化一波要调用的函数我这边使用GPU来对CT影像进行重构反正就是听起来厉害一点
self.GPU_volumeMapper = vtk.vtkGPUVolumeRayCastMapper() self.GPU_volumeProperty = vtk.vtkVolumeProperty() self.GPU_compositeOpacity = vtk.vtkPiecewiseFunction() self.GPU_gradientOpacity = vtk.vtkPiecewiseFunction() self.GPU_color = vtk.vtkColorTransferFunction() self.GPU_volume = vtk.vtkVolume() self.GPU_render = vtk.vtkRenderer()
接着当然是打开序列图像喽,这边用的是QT自带打开目录的函数
self.path = QFileDialog.getExistingDirectory(self, '选择文件夹', 'C:/Users/QYC/Desktop/') reader = vtk.vtkDICOMImageReader() # 用于读取DICOM 图像,DICOM(*.dcm)产生输出数据。 reader.SetDirectoryName(self.path) reader.Update() # 这句一定要,不然没有体
接着这一波是对CT进行各种设置,透明度,光影等等,最后使用AddVolume()加入体
self.GPU_volumeMapper.SetInputData(reader.GetOutput()) self.GPU_volumeProperty.SetInterpolationTypeToLinear() self.GPU_volumeProperty.ShadeOn(0) self.GPU_volumeProperty.SetAmbient(0, 0.4) self.GPU_volumeProperty.SetDiffuse(0, 0.6) self.GPU_volumeProperty.SetSpecular(0, 0.2) # 下面两段是添加透明度函数和对应分段函数(可以不要的) self.GPU_compositeOpacity.AddPoint(100, 0.0) self.GPU_compositeOpacity.AddPoint(140, 0.4) self.GPU_compositeOpacity.AddPoint(180, 0.6) self.GPU_volumeProperty.SetScalarOpacity(0, self.GPU_compositeOpacity) self.GPU_gradientOpacity.AddPoint(10, 0.0) self.GPU_gradientOpacity.AddPoint(90, 0.5) self.GPU_gradientOpacity.AddPoint(100, 1.0) self.GPU_volumeProperty.SetGradientOpacity(0, self.GPU_gradientOpacity) self.GPU_color.AddRGBPoint(1, 0, 0, 1) # 设置显示的体颜色 self.GPU_volumeProperty.SetColor(0, self.GPU_color) self.GPU_volume.SetMapper(self.GPU_volumeMapper) self.GPU_volume.SetProperty(self.GPU_volumeProperty) self.GPU_render.AddVolume(self.GPU_volume) #添加体数据 self.GPU_render.SetBackground(0, 1, 0) # 设置背景颜色(绿色代表健康) self.GPU_render.ResetCamera() # 这一句是为了每次打开体数据以后设置体中心为交互中心 self.qvtkWidget.GetRenderWindow().Render() # 添加Render self.qvtkWidget.GetRenderWindow().AddRenderer(self.GPU_render) # 显示,一定要有这个
至此显示体数据就结束了
后面是脑子突然冒出个骚想法想搞的。就是删除这个题,后期可以加入隐藏功能
这边就把退出按钮设置成了关闭显示(删除体数据的按钮)
定义了一个槽函数
def on_close_action(self):
# 第一步删除体数据,后面再载入一次,emmm虽然这么搞效率有点低
self.GPU_render.RemoveVolume(self.GPU_volume) self.qvtkWidget.GetRenderWindow().Render() self.qvtkWidget.GetRenderWindow().AddRenderer(self.GPU_render)
下面是用了以后的效果:
欢迎各路大佬指点