社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

从数据结构到Python实现:如何使用深度学习分析医学影像(上)

医学影像云 • 6 年前 • 643 次点击  

摘要

运用深度学习技术进行图像和视频分析,并将它们用于自动驾驶汽车、无人机等多种应用场景中已成为研究前沿。近期诸如《A Neural Algorithm of Artistic Style》等论文展示了如何将艺术家的风格转移并应用到另一张图像中,而生成新的图像。其他如《Generative Adversarial Networks》(GAN)以及「Wasserstein GAN」等论文为开发能学习生成类似于我们所提供的数据的模型做了铺垫。因此,它们在半监督学习领域打开了新世界的大门,也为将来的无监督学习奠定了基础。


尽管这些研究领域处于通用图像层面,但我们的目标是将它们应用于医学图像以辅助医疗。我们需要从基础开始。本文第一部分将从图像处理的基础、医学图像格式化数据的基础以及一些可视化的医疗数据谈起。而后一部分文章将深入探究卷积神经网络,并使用 Keras 来预测肺癌。

基本图像处理(利用 python 实现)

图像处理库有很多,但 OpenCV(开源计算机视觉库,open computer vision)凭借其广泛的支持且可用于 C++、java 和 python 的优点而成为主流。而我更偏向于使用 jupyter notebook 导入 OpenCV。

你可以使用 pip install opencv-python,也可以从 opencv.org 网站直接进行安装。


安装 opencv


现在打开 Jupyter notebook 并确认能够导入 cv2。你还需要 numpy 和 matplotlib 库来在 notebook 内查看图片。



现在来检查能否打开并通过键入下述代码在笔记本上查看图像。


通过 OpenCV 进行图像加载的示例


基本人脸识别

我们来做点有意思的事情吧,比如人脸识别。我们将使用一种最初由 Rainer Lienhart 开发的正面人脸识别器,它使用了基于开源 xml 残基(stump-based)的 20x20 柔和 adaboost 算法。

关于 Haar-cascade 检测的详细范例:http://docs.opencv.org/trunk/d7/d8b/tutorial_py_face_detection.html

使用 OpenCV 进行人脸识别

在文档区使用 opencv 进行图像处理的例子不胜枚举。

我们已经了解了图像处理的基础,下面来了解医学图像格式吧。


医学图像数据格式

医学图像以数字成像和通信(DICOM)为存储与交换医学图像数据的标准解决方案。该标准的第一版发布于 1985 年,之后有少许修改;它使用了文件格式和通信协议如下。

  • 文件格式:所有患者的医疗图像都以 DICOM 文件格式进行保存。该格式不仅具有与图像相关的数据(如用于捕获图像的设备和医疗处理情境),还具有关于患者的 PHI (受保护的健康信息,protected health information),如姓名、性别、年龄等。医疗影像设备可以创建 DICOM 文件,而医生可以使用 DICOM 查看器以及可显示 DICOM 图像的计算机应用程序来读取并诊断从图像获得的结果。

  • 通信协议:DICOM 通信协议用于搜索档案中的成像研究,并将成像研究恢复到工作站来显示。连接到医院网络的全部医学成像应用程序都使用 DICOM 协议来交换信息,其中大部分信息是 DICOM 图像,但还包括患者和手术信息。此外还有更先进的网络命令用于控制并跟踪治疗、调整进程、报告状态,并在医生和成像设备之间共享工作负载。


现有篇博文很细致地描述了 DICOM 标准,此处为链接:http://dicomiseasy.blogspot.com/


▲分析DICOM文件

Pydicom 是一个 python 包,它很适合分析 DICOM 图像。本节将阐述如何在 Jupyter notebook 上呈现 DICOM 图像。


安装 Pydicom 使用:pip install pydicom。


安装 pydicom 包之后,回到 Jupyter notebook 进行操作。在 notebook 中导入 dicom 包以及其他包,如下所示:


我们也能使用 pandas、scipy、skimage 以及 mpl_toolkit 等其他的包来进行数据处理与分析。

你可以在线获得很多免费的 DICOM 数据集,但下述数据集在入门阶段定能有所帮助:

  • Kaggle Competitions and Datasets:它是我的最爱。请查阅肺癌竞争和糖尿病视网膜病变的数据:https://www.kaggle.com/c/data-science-bowl-2017/data

  • Dicom Library:面向教育和科学的 DICOM 库,其提供免费的在线医疗 DICOM 图像或视频文件共享服务。

  • Osirix Datasets:提供通过各种成像模式获取的大量人类数据集。

  • Visible Human Datasets:在这里可视化人类计划的一部分数据可以免费利用,这很奇怪,因为获取这些数据既不免费也不轻松。

  • The Zubal Phantom:该网站免费提供 CT 和 MRI 这两种男性的多个数据集。

请下载 dicom 文件并加载到 jupyter notebook 中。



现在将 DICOM 图像加载到列表中。


第一步:在 Jupyter 中进行 DICOM 图像的基本查看操作

在第一行加载第一个 DICOM 文件来提取元数据,这个文件将赋值为 RefDs,其文件名会列在 lstFilesDCM 列表的顶端。



然后来计算 3D NumPy 数组的总维度,它等于在笛卡尔坐标轴中(每个切片的像素行数*每个切片的像素列数*切片数)。最后,使用 PixelSpacing 和 SliceThickness 属性来计算三个轴之间的像素间距。我们将把数组维度储存在 ConstPixelDims 中,把空间储存在 ConstPixelSpacing [1] 中。



第二步:查看 DICOM 格式的细节

CT 扫描中的测量单位是亨氏单位(Hounsfield Unit,HU),它是辐射强度的度量。CT 扫描仪经过高度校准以精确测量。


每个像素都被分配了一个数值(CT 号),它是包含在相应体素(corresponding voxel)中的所有衰减值的平均数。将这个数字与水的衰减值进行比较,并以任意单位中的亨氏单位(HU)为刻度进行显示。

这个刻度将水的衰减值(HU)标为 0。CT 数量的范围是 2000HU,但一些现代扫描仪具有较高的 HU 范围,最高可达 4000。每个数字表示在光谱的其中一端会出现+1000(白色)和-1000(黑色)的灰色阴影。

一些扫描仪具有圆柱形扫描范围,但其输出图像却是矩形。落在这些边界之外的像素具有-2000 的固定值。

第一步通常是将这些值设置为 0。接着,通过与重新缩放的斜率相乘并添加截距来返回到亨氏单位(斜率和截距均很方便地存储在扫描的元数据中!)。


下部分将会用到 Kaggle 的肺癌数据集,并使用 Keras 卷积神经网络进行建模;它将以上文所提供的的信息为基础。


在上文中,我们介绍了一些使用 OpenCV 进行图像处理的基础知识,以及 DICOM(医学数字影像和通讯)图像基础。下面我们将从卷积神经网络(Convolutional Neural Nets)的视角来谈一谈深度学习基础。在下部分文章里,我们将以 Kaggle 的肺癌数据集为实例,来研究一下在一个肺癌 DICOM 图像中要寻找的关键信息,并使用 Kera 开发出一个预测肺癌的模型。


>>>转载声明:版权申明【本微信所有转载文章系出于传递更多信息之目的,且明确注明来源和作者,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理】

>>>来源:机械之心

>>>选自:Medium


征稿启事

内容范围

有关医学影像技术的资讯、动态、市场、前沿等信息和文章;各种设备的技术应用、维护、检测、防护、质控、管理等 文章;有关本行业的晋升、继续教育考题、复习资料等。

来稿要求

请务必保证原创,拒绝抄袭,文责自负。本微信公众号对所录用文章会进行自动识别,一经发现非原创文章,将作撤稿处理,不予录用。

关于版权

作者投稿一旦经本平台录用,即默认稿件版权已被授权本平台,并同步发布到《医学影像技术网》主站点。

关于报酬

原创文章一旦录用,即将以微信红包形式给予作者100-2000元稿费。

寄稿地址

请各位来稿者将您的稿件(请附带联系方式、微信号)发送至邮箱:yuanwyl@163.com,我们将以邮件和微信的形式进行反馈。

本平台拥有最终解释权








今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/jxaNREP3TQ
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/2359
 
643 次点击