Medical Image Analysis with Deep Learning — I

利用深度学习进行医疗图像分析-Part I

我们的目标是将用在通用图像上的深度学习方法应用到医学图像中以帮助医疗。本文先从图像处理的基础知识开始讲解,包括使用pyDICOM将医学图像数据导入NumPY以及使用VTK可视化医疗数据。


简介:DICOM标准

为了便于影像信息的共享和交流,美国放射学会和美国国家电器制造商协会联合制定了医学数字图像通讯标准ACR/NEMA DICOM 3.0,其主要目的是为了在各种医疗影像产品之间提供一致性接口,以便更有效地在医学影像设备之间传输交换数字影像。DICOM标准主要由以下几部分组成:

1)概述:DICOM的概念、组成、内容及其评价。

2)兼容性: 说明了生产厂商该如何制定并描述自己的DICOM产品。包括对信息对象、服务类、以及传输协议、编码方法等的选择。

3) 信息对象定义:利用面向对象的设计方法,采用"E-R"模型,把具体事物映射到DICOM的应用范围之内。例如现实具体的患者,在DICOM中就映射为“患者IOD”,其中包括许多属性,如姓名、年龄、身高等。

4) 服务类定义:服务类是对现实中医学信息间的传递和通讯的抽象概括。

5) 数据结构和编码。

6)数据字典:数据字典给出各数据元素精确的定义,包括一个唯一标识符、一个名称、一个数据类型以及使用说明。

7)消息交换、8)、消息交换台网络支持、9)消息交换的点对点支持。


DCM文件格式

符合DICOM标准的文件通常后缀为.dcm,对于一般的DCM文件,是由若干实体构成,DCM文件的最基本组成单位是数据元素,它至少包含三项内容:数据元素标签、数据值长度、数据值体。
1). 数据元素标签:是由序列数对组成的对数据元素的唯一标识.
2). 数据值长度:此项记录是以字节为单位,记录了数据值体的长度.
3) 数据值体:包含了数据元素的属性内容,长度由数据值长度项所指定。


分析DICOM图像

Pydicom 是一个非常好的用于分析 DICOM 图像的 Python 软件包。在本节中,我会向大家介绍如何在 Jupyter notebook 上呈现 DICOM 图像。
首先安装OpenCV和pydicom包: pip install opencv-python  、pip install pydicom,之后开启jupyter notebook并新建一个工程,导入各种相关包:

这里以MyHead 数据集作为示例,下载文件到您的jupyter目录中,当然在线也可以免费获得DICOM数据集,这里有几个可以让您开始:

2.  Dicom图书馆DICOM图书馆是一个免费的在线医疗DICOM图像或视频文件共享服务,用于教育和科学目的
3. Osirix数据集: 提供通过各种成像模式获取的大量人类数据集
4. Zubal Phantom: 该网站提供了CT和MRI两个人类男性的多个数据集

我们使用os.path.walk遍历MyHead目录,并将所有.dcm文件收集到一个list命名lstFilesDCM




现在,让我们进入pydicom代码一部分。这个包的一个显着方面是,在读取DICOM文件时,它创建一个dicom.dataset.FileDataset对象,其中不同的元数据被分配给具有相同名称的对象属性。我们将在下面看到:


在第一行,我们加载第一个DICOM文件,我们将使用它作为引用的名称RefDs来提取元数据,其文件名在lstFilesDCM列表中是第一个然后,我们计算3D NumPy数组的总尺寸,其等于(切片中的像素行数)x(x,y和z笛卡尔轴)x(切片中的像素列数)x(切片数) 。最后,我们使用PixelSpacingSliceThickness属性来计算三个轴之间的像素间距。我们存储数组的维数ConstPixelDims和间距ConstPixelSpacing

下一个代码块是:

我们简单地使用 numpy.arange ConstPixelDims ConstPixelSpacing 计算这个数组的轴。接下来是最后 pydicom 一部分:

你可以看到,我们在这里做的是首先创建一个NumPy数组ArrayDicom,使用以前计算过的ConstPixelDims尺寸命名dtype这个阵列是相同dtypepixel_array基准数据集RefDs,我们最初用于提取元数据。这里的兴趣在于该pixel_array对象是一个纯NumPy数组,其中包含特定DICOM切片/图像的像素数据。因此,我们下一步将循环遍历收集的DICOM文件名,并使用该dicom.read_file函数将每个文件读入dicom.dataset.FileDataset对象。然后,我们使用该pixel_array对象的属性,并将ArrayDicom沿z轴堆叠。

最后显示图像如下:









Reference:(有改动)

1. https://medium.com/@taposhdr/medical-image-analysis-with-deep-learning-i-23d518abf531

2. https://pyscience.wordpress.com/2014/09/08/dicom-in-python-importing-medical-image-data-into-numpy-with-pydicom-and-vtk/

3. DCM图像文件格式简析

4. https://en.wikipedia.org/wiki/DICOM

5. http://dicomiseasy.blogspot.com/p/introduction-to-dicom.html

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端 JOpenID JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值