|
从本文开始,作者将开始介绍图像处理的基础知识,基本的医学图像数据,并且对这些数据进行可视化处理。
利用深度学习技术,分析图像与视频,并且将之应用在诸如自动驾驶,无人机等等领域已经成为最新研究方向。在最新的一篇名为“A Neural Algorithm of Artistic Style”[1508.06576] A Neural Algorithm of Artistic Style中,作者描述了一种新的方式,从艺术作品中获得,并且应用到图像中,生成新的图像。另外,在 “Generative Adversarial Networks” [1406.2661] Generative Adversarial Networks(GAN) and “Wasserstein GAN” https://arxiv.org/pdf/1701.07875.pdf文章中,作者提出了新的模型,这些模型能够生成,类似于我们给出的原始数据。至此开启了半监督学习的新世界,并且为半监督学习铺平了道路。
然而这些研究领域仍然停留在普通图像上,然而我们的目标是将这些研究应用于医学图像,进而辅助医疗诊断。在进入主题之前,我们将从图像处理的基础开始,介绍基本的医学图像格式数据,并且将这些数据可视化。在下一篇文章中,我们将深入CNN方法,并且利用Keras(Keras Documentation),对肺癌进行预测。
图像处理基础(python)
当前,图像处理工具可谓层出不穷,其中,OpenCV(OpenCV library) 因为其强大的社区支持,以及广泛的可用性,在c++, java python等等编程语言中皆可使用,因此,OpenCV已经成为图像处理主流工具。在这篇文章中,我们将使用jupyter notebook与OpenCV。
安装OpenCV:
pip install opencv-python 或者直接从http://opencv.org中下载并安装。
打开jupyter notebook, 并且确认是否可以 import cv2. 接下来我们将使用到numpy 和 matplotlib。
在notebook中 ,输入以下代码检验是否可以打开并且查看图像。
基本脸部识别
让我们做一些有趣的事情,比如检测脸部。 为了检测脸部,我们将使用最初由Rainer Lienhart创建的基于开源xml残片的20x20柔和的adaboost正面人脸检测器。 这里有一个好的帖子,详细介绍哈尔级联检测Face Detection using Haar Cascades。
在http://opencv.org 中,还有很多类似的例子,http://docs.opencv.org/trunk/d6/d00/tutorial_py_root.html , 读者可以多多练习。现在我们已经了解一些基本的图像处理知识,下面我们将学习如何处理医学图像。
医学图像数据格式
医学图像采用数字成像和通信(DICOM)作为存储和交换医学图像数据的标准解决方案。这个标准的第一个版本是在1985年发布的。发展到现在,该方案有了一些改变。该标准使用文件格式和通信协议。
文件格式 - 所有患者医疗图像都以DICOM文件格式保存。除了其他图像相关数据(例如用于拍摄图像的设备以及医疗处理的一些背景)之外,该格式具有关于患者的PHI(受保护的健康信息),例如姓名,性别,年龄。医学影像设备创建DICOM文件。医生使用DICOM查看器,可显示DICOM图像的计算机软件应用程序,读取和诊断图像中的发现。
通信协议 - DICOM通信协议用于搜索档案中的成像研究,并将成像研究恢复到工作站以显示。连接到医院网络的所有医疗成像应用程序都使用DICOM协议来交换信息,主要是DICOM图像,还包括患者和手术信息。还有更先进的网络命令,用于控制和跟踪治疗,调度程序,报告状态,分担医生和成像设备之间的工作量。关于DICOM标准细节,在这里推荐一个很好的博客http://dicomiseasy.blogspot.com
分析DICOM图像
用于分析DICOM图像的一个很好的python包是pydicom。在本节中,我们将看到如何在Jupyter笔记本上呈现DICOM图像。安装OpenCV使用:pip install pydicom
安装pydicom软件包后,请回到jupyter笔记本。在笔记本中,导入dicom包和其他包,如下所示。
初次之外,我们还可以用pandas,scipy, skimage,mpl_toolkit 进行数据处理和分析。
接下来,我们介绍一些可以获得DICOM 数据库,如下:
kaggle competitions and DatasetsDicom LibraryOsirix DatasetsVisible Human DatasetsThe Zubal Phantom
从以上数据库中下载dicom文件,并且载入jupyter notebook
第一步:在jupyter 中读取DICOM文件,并可视化
上图中,第一行代码,我们导入第一个dicom文件,我们使用它作为一个reference,用来获取元数据。
然后我们计算三维NumPy数组的总和,它们等于(切片中像素行的数量)x(切片中像素列的数量)x(切片的数量)沿着x,y和z笛卡尔坐标轴。 最后,我们使用PixelSpacing和SliceThickness属性来计算三个轴上的像素之间的间距。 我们将数组维存储在ConstPixelDims中,并将间距存储在ConstPixelSpacing [1]中。
第二步:进一步了解DICOM 格式数据:
CT扫描的测量单位是Hounsfield单位(HU),它是放射性强度的量度。 仔细校准CT扫描仪以准确测量。 关于这方面的详细了解可以在这里找到。https://web.archive.org/web/20070926231241/http://www.intl.elsevierhealth.com/e-books/pdf/940.pdf
每个像素被分配一个数值(CT值),它是相应体素中所有衰减值的平均值。 将这个数字与水的衰减值进行比较,并在戈弗雷·豪斯菲尔德爵士(Sir Godfrey Hounsfield)之后以胡恩斯菲尔德单位(Hounsfield units,HU)的任意单位的比例显示。
这个标度将水分配为零的衰减值(HU)。 CT数字的范围是2000HU宽,尽管一些现代扫描仪的HU的范围可以达到4000.每个数字代表在光谱两端的+1000(白色)和-1000(黑色)的灰色阴影。
一些扫描仪具有圆柱扫描边界,但是输出图像是方形的。 落在这些边界之外的像素的固定值为-2000。
第一步通常是将这些值设置为0.接下来,让我们回到HU单位,通过乘以重新调整斜率并添加拦截(这些拦截方便地存储在扫描的元数据中!)。
在下一部分中,我们将使用Kaggle的肺癌数据集和使用Keras的卷积神经网络。 我们将根据这篇文章提供的信息来进行下一个。
Acknowledgements:
https://pyscience.wordpress.com/2014/09/08/dicom-in-python-importing-medical-image-data-into-numpy-with-pydicom-and-vtk/http://www.osirix-viewer.com/resources/dicom-image-library/http://wearables.cc.gatech.edu/paper_of_week/viola01rapid.pdfhttp://adilmoujahid.com/posts/2016/06/introduction-deep-learning-python-caffe/http://dicomiseasy.blogspot.com/https://www.kaggle.com/c/data-science-bowl-2017http://docs.opencv.org/trunk/d6/d00/tutorial_py_root.htmlKaggle community for all the different scripts and support
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|