医学图像处理期末大作业

肺部CT图像处理

期末大作业占比:50分

任务描述:

给定肺部一组CT DICOM图像,提取肺部结构,重建其肺部三维模型。具体如下:

1:基于阈值或其他方法对肺部实质图像(a)进行分割

2:通过图像形态学去除粘连或填空洞等,得到类似(b)的肺实质

3:勾出肺部边界并计算面积(只针对某一幅图像)

4:肺部模型重建:通过对每一张CT切片进行分割,得到一组肺部结构图。将多张切片的分割结果存储在一个三维数组中,通过marching_cubes方法计算三维数据中的曲面并显示肺部的三维模型。

5:可选功能,可自行选择增加其他功能,如分割、可视化肺内气管等。

完成代码,进行演示(25分)演示代码、运行结果,从代码结构、算法、演示效果评分

撰写实验报告(25分),

1)说明算法、实现过程、结果与分析、总结(包括特色和遇到问题解决方法)

2)评分:报告上述内容充实,格式规范,图文并茂,分析清晰。


下面是个人操作演示结果,满分通过:

处理后的掩码图像:

软件演示:  下方有链接可以显示动态演示效果的视频

左侧显示每一张肺实质分割图像,也就是掩码图像,右侧是三维可交互的肺实质重建结果,可以任意方向旋转,立体的,按住CTRL键可以放大缩小。

下面是点击左侧的任意一张肺实质分割图像,然后会显示计算面积按钮,点击即可勾画出轮廓并显示面积大小

  


代码运行和动态演示效果:点击下方链接可查看

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅

                                                      肺实质分割动态视频-CSDN直播左侧显示每一张肺实质分割图像,也就是掩码图像,右侧是三维可交互的肺实质重建结果,可以任意方向旋转,立体的。下面是点击左侧的任意一张肺实质分割图像,然后会显示计算面积按钮,点击即可勾画出轮廓,并显示面积大小。给定肺部一组CT DICOM图像,提取肺部结构,重建其肺部三维模型。具体如下:1:基于阈值https://live.csdn.net/v/394955

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅


部分代码:

import vtk

# 定义渲染窗口、交互模式
aRender = vtk.vtkRenderer()
Renwin = vtk.vtkRenderWindow()
Renwin.AddRenderer(aRender)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(Renwin)

# 定义个图片读取接口
# 读取PNG图片就换成PNG_Reader = vtk.vtkPNGReader()
PNG_Reader = vtk.vtkPNGReader()
PNG_Reader.SetNumberOfScalarComponents(1)
PNG_Reader.SetFileDimensionality(2)  # 说明图像是三维的

# 定义图像大小,本行表示图像大小为(512*512*240)
PNG_Reader.SetDataExtent(0, 511, 0, 511, 1, 89)
# 设置图像的存放位置
name_prefix = ['mask/mask_']
PNG_Reader.SetFilePrefix(name_prefix[0])

# 设置图像前缀名字
# 表示图像前缀为数字(如:0.jpg)
PNG_Reader.SetFilePattern("%s%d.png")
PNG_Reader.Update()
PNG_Reader.SetDataByteOrderToLittleEndian()
spacing = [1.0, 1.0, 2.5]  # x, y 方向上的间距为 2 像素,z 方向上的间距为 2.5 像素
PNG_Reader.GetOutput().SetSpacing(spacing)

# 高斯平滑
gauss = vtk.vtkImageGaussianSmooth()
gauss.SetInputConnection(PNG_Reader.GetOutputPort())
gauss.SetStandardDeviations(1.0, 1.0, 1.0)
gauss.SetRadiusFactors(1.0, 1.0, 1.0)
gauss.Update()

# 创建等值面提取器
contour = vtk.vtkMarchingCubes()
gauss.GetOutput().SetSpacing(spacing)
contour.SetInputConnection(gauss.GetOutputPort())
contour.ComputeNormalsOn()
contour.SetValue(0, 100)

mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(contour.GetOutputPort())
mapper.ScalarVisibilityOff()

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

# 创建渲染器,设置背景颜色
renderer = vtk.vtkRenderer()
renderer.SetBackground([1.0, 1.0, 1.0])
renderer.AddActor(actor)

window = vtk.vtkRenderWindow()
window.SetSize(512, 512)
window.AddRenderer(renderer)

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

下面是包含所有文件的压缩包:

  • 文件全部代码
  • 原始数据文件
  • 满分实验报告

需要的可以在评论区点击下载

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小只123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值