医学图像处理——DeepDrr工具CT生成DRR

  • 一、DeepDrr工具介绍
  • 二、DeepDRR工具使用
  • 三、测试DeepDRR工具
    • 3.1 测试数据集
      • 3.1.1 阿里云数据
      • 3.1.2 LIDC-IDRI肺结节dicom数据集
      • 3.1.3 LIDC-IDRI肺结节dicom数据集
    • 3.2 测试代码
  • 四、总结

一、DeepDrr工具介绍

它可以将CT数据模拟X射线投影生成DRR数据。
DeepDRR将3D和2D的材料分解和散射估计的机器学习模型分别与投影、衰减和噪声注入的分析模型相结合,以实现所需的性能,其实现的流程图如下:
1. DeepDRR工具Github链接
2. DeepDRR工具文档说明

二、DeepDRR工具使用

由于实验室的1080ti不支持cuda11,为了节约调试时间就租用了RTX 2080 Ti * 1卡,租用平台AutoDL,以下是平台的配置详情。

按照1. DeepDRR工具Github链接配置环境就行,在这个平台直接跑README.md文件内容。

# 注意把该命令
conda env create -f environment.yaml
# 换成
conda env create -f environment.yml
# 下面是文档生成命令不用管
sphinx-apidoc -f -o docs/source deepdrr

后续就是提示缺啥包就按啥包。

三、测试DeepDRR工具

3.1 测试数据集

它提供了一个最简单的使用例子,从NifTi.nii.gz(nii文件是volume file格式,常见的一种医学图像,可以由MRI软件生成,它可以看成2维,也可以看成三维)文件中加载一个CT数据,并模拟一个X射线投射生成一张DRR。但是我们没有上述CT数据。

3.1.1 阿里云数据

1. 阿里云数据,找了几个数据集,都是PNG格式的,后续使用.png转.nii.gz,其效果不好。

// 多幅png图片转.nii.gz文件
import numpy as np
import nibabel as nib
from glob import glob
from torch.utils.data import Dataset
from torchvision import transforms
from PIL import Imageclass DataSet(Dataset):  # 方便读数据def __init__(self, label_path):self.label_path = label_pathself.transform = transforms.Compose([transforms.ToTensor()],)def __len__(self):return len(self.label_path)def __getitem__(self, idx):label = self.label_path[idx]label = Image.open(label)label = self.transform(label)return labellabel_path = r'C:\Users\tanhui\Downloads\CP\679\3041\*'
label_path = glob(label_path)
dataset = DataSet(label_path)
label = dataset[0]
z, x, y = label.shape
z = len(dataset)  # 通道数
allImage = np.zeros([x, y, z], dtype='uint8')
# print(x, y, z)
for i in range(z):label = dataset[i]singleImage = label.numpy()allImage[:, :, i] = singleImage
# print(allImage.shape)
new_image = nib.Nifti1Image(allImage, np.eye(4))
nib.save(new_image, 'data2.nii.gz')

3.1.2 LIDC-IDRI肺结节dicom数据集

2. LIDC-IDRI肺结节dicom数据集,这个数据集可能要科学上网才下得快且要安装它站里面的一个下载工具(数据集太大,工具帮助我们选择性下载),附上一个简单的下载教程。

// 多张dicm格式文件转.nii.gz文件
#coding=utf-8
import SimpleITK as sitkdef dcm2nii(dcms_path, nii_path):# 1.构建dicom序列文件阅读器,并执行(即将dicom序列文件“打包整合”)reader = sitk.ImageSeriesReader()dicom_names = reader.GetGDCMSeriesFileNames(dcms_path)reader.SetFileNames(dicom_names)image2 = reader.Execute()# 2.将整合后的数据转为array,并获取dicom文件基本信息image_array = sitk.GetArrayFromImage(image2)  # z, y, xorigin = image2.GetOrigin()  # x, y, zspacing = image2.GetSpacing()  # x, y, zdirection = image2.GetDirection()  # x, y, z# 3.将array转为img,并保存为.nii.gzimage3 = sitk.GetImageFromArray(image_array)image3.SetSpacing(spacing)image3.SetDirection(direction)image3.SetOrigin(origin)sitk.WriteImage(image3, nii_path)if __name__ == '__main__':dcms_path = r'D:\data\manifest-1668773888310\LIDC-IDRI\LIDC-IDRI-0002\01-01-2000-NA-NA-98329\3000522.000000-NA-04919'  # dicom序列文件所在路径nii_path = r'.\test.nii.gz'  # 所需.nii.gz文件保存路径dcm2nii(dcms_path, nii_path)

附上dicm格式文件转.nii.gz文件详细教程

3.1.3 LIDC-IDRI肺结节dicom数据集

使用MRIcroGL软件查看合成的CT数据。

3.2 测试代码

使用下面测试代码,将上面合成的test.nii.gz CT数据生产一张DR。

from deepdrr import geo, Volume, MobileCArm
from deepdrr.projector import Projector # separate import for CUDA initcarm = MobileCArm()
ct = Volume.from_nifti('/path/to/ct_image.nii.gz')# Initialize the Projector object (allocates GPU memory)
with Projector(ct, carm=carm) as projector:# Orient and position the patient model in world space.ct.orient_patient(head_first=True, supine=True)ct.place_center(carm.isocenter_in_world)# Move the C-arm to the desired pose.carm.move_to(alpha=30, beta=10, degrees=True)# Run projectionimage = projector()

效果如下:

四、总结

简单的将DeepDRR工具运行了一下,初测了它的很小一部分功能,后续期待能基于该工具做出更好的应用。

医学图像处理——DeepDrr工具CT生成DRR相关推荐

  1. 【医学图像处理】CT成像技术之CT设备

    [医学图像处理]CT成像技术之CT设备 本系列重点介绍CT成像技术,并将介绍用于获取图像的设备,如何形成和显示图像,影响图像质量的因素以及如何测量剂量. 关注公众号,同样精彩内容 本章节重点介绍CT成 ...

  2. 【医学图像处理】CT成像技术之图像质量

    [医学图像处理]CT成像技术之图像质量 关注公众号,同样精彩内容 CT图像质量主要由以下三个因素决定: 分辨率 噪声 对比度 分辨率 分辨率是两个对象必须分开多远的度量,然后才能将它们视为图像中的单独 ...

  3. 【医学图像处理】CT成像技术之CT剂量

    [医学图像处理]CT成像技术之CT剂量 剂量单位 我们可以将不同的剂量测量视为逐步进行,每次将额外的变量添加到方程式中. CT剂量指数(CTDI) 首先,我们通过单机架旋转来测量检测器的剂量,以得出C ...

  4. 医学图像处理:CT与CBCT

    好的文章链接 : 医学图像处理:CT与CBCT - 简书 CBCT是CT吗?|CBCT|CT|成像|全景|牙片|-健康界 一文读懂X射线探测器(上):百花齐放的技术

  5. 【医学图像处理】CT成像技术之CT伪影

    [医学图像处理]CT成像技术之CT伪影 导致CT图像伪影的因素可以分类为: 物理因素 病人属性 扫描器因素 螺旋和多层切片因素 物理因素 光束硬化 X射线束具有不同能量的光子,这些能量在平均" ...

  6. 医学图像处理与深度学习入门

    https://www.toutiao.com/a6701130271518884366/ 利用深度学习技术,分析图像与视频,并且将之应用在诸如自动驾驶,无人机等等领域已经成为最新研究方向.在最新的一 ...

  7. python与医学图像处理_医学图像处理与深度学习(一)

    从本文开始,作者将开始介绍图像处理的基础知识,基本的医学图像数据,并且对这些数据进行可视化处理. 利用深度学习技术,分析图像与视频,并且将之应用在诸如自动驾驶,无人机等等领域已经成为最新研究方向.在最 ...

  8. java毕业设计——基于java+图像处理技术的医学图像处理系统设计与实现(毕业论文+程序源码)——医学图像处理系统

    基于java+图像处理技术的医学图像处理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+图像处理技术的医学图像处理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦 ...

  9. 医学图像处理入门知识 | 格式DICOM,MHD+RAW | 坐标系 | ITK-SNAP | 重采样

    医学图像处理入门知识 引言 常见的医学图像格式 DICOM mhd+raw 坐标系 世界坐标体系 解剖学坐标体系 图像坐标体系 这三个坐标体系有什么关系呢?怎样转换呢? ITK-SNAP工具使用 基本 ...

最新文章

  1. 第36章 网络管理
  2. linux 源码安装浏览器,vps+linux+安装浏览器
  3. 顶会ASPLOS 新成果解析:用“弹性异构”防御DNN加速器对抗攻击
  4. python的list去除重复
  5. php好玩的源码_github上比较有趣的PHP开源项目
  6. php中什么时候用传值,php中传值与传引用的区别。什么时候传值什么时候传引用?...
  7. php 弹出下载,php文件下载,不弹出下载框怎么破
  8. OpenGL基础53:阴影映射(下)
  9. JSP自定义标签_属性接收复杂类型处理方式
  10. docker search oracle,Docker search 命令
  11. 服务器账号永不过期,linux下如何设置用户密码永不过期_网站服务器运行维护
  12. OneNote无法粘贴图片
  13. java正则表达式双引号_java正则表达式去掉双引号
  14. 讲师靓照大集合,为最喜爱的讲师投票吧!iOS DevCamp Android DevCamp
  15. leet code No1
  16. 大数据系列之知识点总结和企业级游戏行业架构设计
  17. linux c实现键盘模拟,C++模拟键盘按键的实例
  18. 语音处理:音频信号短时平稳性分析
  19. jquery遍历节点的方法
  20. H5C3动画实例,通过基于jQuery的fullpage插件完成

热门文章

  1. 金马公关为什么选择使用活字格来搭建《会议邀约系统》
  2. c语言任何一个大于6的偶数均可表示为两个素数之和,C语言:验证哥德巴赫猜想:任何一个大于6的偶数均可表示为2个素数之和...
  3. 安卓在活动左上角添加返回键
  4. 【剑桥摄影协会】Photoshop中的USM算法(Unsharp Mask)
  5. 2022-2028全球与中国呼吸系统疾病治疗市场现状及未来发展趋势
  6. 牛客bfs:工厂流水线
  7. 回顾2022! 链上NFT精彩项目大盘点
  8. 学了 C 语言到底能做什么, 能从事什么工作?(附课程)
  9. 弘扬企业家精神!闪马智能创始人兼CEO彭垚再获殊荣
  10. 一个数据分析报告的框架,主要包含哪几项?