近年来,深度学习技术一直都处于科研界的前沿。凭借深度学习,我们开始对图像和视频进行分析,并将其应用于各种各样的设备,比如自动驾驶汽车、无人驾驶飞机,等等。
A Neural Algorithm of Artistic Style是一篇最新发表的研究性论文,论文向我们介绍了如何将一种风格和气质从艺术家身上转移至一张图像,并由此创建出另一张新图像。其他的一些论文,比如Generative Adversarial Networks和Wasserstein GAN,也已经为开发模型铺平了道路,这个模型能够创建出与输入数据相似的新数据。由此,“半监督学习”世界的大门被打开了,未来“无监督学习”的发展也将更加顺利。
尽管这些调查研究的对象现在仅限于一般的图像,但我们的目标是将这些研究运用到医学图像中,帮助医疗保健的发展。在本文中,我将从图像处理和医学图像格式数据入手,并对一些医学数据进行可视化处理。在下一篇文章中,我将进深入剖析一些卷积神经网络,并将其与Keras联合,预测肺癌。
使用Python进行基本的图像处理
OpenCV(开源计算机视觉库)凭借其大量社区支持,以及对C++,Java和Python的可兼容性,在琳琅满目的图像处理库中脱颖而出,成为了图像处理库的主流。
现在,打开你的Jupyter笔记本,并且确定cv2是能够导入至笔记本的。你还需要numpy和matplotlib来查看笔记本内的细节内容。
现在,我们来看一下你能不能打开图片,能不能用下面的代码在你的笔记本上查看图片。
基本的人脸检测
接下来,我们要玩些有趣的——检测人脸。我们将使用一个开源的正脸检测器来进行人脸检测,这个检测器最初是由Rainer Lienhart创建的。下图这个帖子详细地介绍了级联检测的细节:
在下面的文档中还有很多使用OpenCV进行图像处理的例子(点击链接查看文档http://docs.opencv.org/trunk/d6/d00/tutorial_py_root.html),读者们可以任意查看。了解了基本的图像处理以后,接下来我们将开始了解“医学图像格式”。
医学图像数据格式
医学图像与“数字影像和通讯”(DICOM)一样,是一个储存和交换医学图像数据的标准解决方案。该标准自1985年第一版发布以来,已经被修改了好几次。该标准使用的是一个文件格式和一个通讯协议。
文件格式——所有病人的医学图像都被保存在DICOM文件格式里。这个格式中保存着病人的受保护健康信息,比如:病人姓名、性别、年龄,还有一些医疗图像的数据。“医学成像设备”创建了DICOM文件。医生们使用DICOM阅读器和能够显示DICOM图像的电脑软件应用程序来查看医学图像,并且根据图像的信息作出诊断。
通讯协议——DICOM通讯协议是用来在档案中搜索影像研究,并将影像研究还原显示的。所有连接了医院网络的医学成像应用程序都会使用DICOM协议交换信息,这些信息中的大部分是DICOM图像,不过还包括了一些患者信息和治疗方案。还有一些网络要求是用于控制和跟踪手术、安排手术日程、报告状态,以及分担医生和成像设备之间的工作量的。
下面的博客详细地介绍了DICOM标准:
分析DICOM图像
Pydicom是一个相当不错的、用于分析DICOM图像的Python工具包。在这个部分,我们将会看到DICOM图像是如何在Jupyter笔记本上呈现的。
使用pip安装pydicom下载安装OpenCV
Pydicom工具包安装完毕以后,回到Jupyter笔记本。将dicom工具包和下图中的其他工具包导入笔记本中。
在处理和分析数据时,我们还会用到其他的工具包,比如pandas,scipy,skimage和mpl_toolkit,等等。
网上有很多免费的DICOM数据库,下面的这些数据库可能对你有所帮助:
Kaggle竞赛和数据库:这是我个人最喜欢的数据库。这里面有关于肺癌和糖尿病视网膜病变的数据。
Dicom数据库:DICOM数据库是一个免费的线上医学DICOM图像或视频分享的服务器,它主要是以教学和科研为目的的。
Osirix数据库:这个数据库向我们提供了大量通过各种成像方式获得的人类数据。
可视化人体数据集:“可视人计划”的某些部分是分布于这个数据集的,但是这个数据集中的数据是需要收费的。
Zubal幻影:这个网站提供了关于两名男性CT和MRI图像的多个数据库。
下载dicom文件,并将其上传至你的jupyter笔记本。
现在,将DICOM图像加载到一个列表中。
第一步:在Jupyter笔记本上查看DICOM图像
在第一行,我们加载第一个DICOM文件,然后提取文件名在列表中排第一的元数据。
接下来,我们要计算3DNumpy数组的总维数,它等于片中像素的行数x、片中像素的列数x,还有x,y,z轴。最后,我们要用“像素空间”和“SliceThickness”来计算三个轴上像素间的空间距离。我们需要将数组维度保存在ConstPixelDims中,并将空间保存在ConstPixelSpacing中。
第二步:进一步研究DICOM格式的细节
CT扫描测量的单元是“胡斯菲尔德单元”(HU),这个单元测量的是放射性密度。为了得到精确的测量结果,CT扫描仪经过了严格的校准。下面是关于CT扫描测量的细节内容:
每个像素都会被分配一个数值(CT数),这个数值是相应的voxel内所有衰减值的平均值。这个数字是与水的衰减值相比较得出的,而且是以任意单元的规模显示的,这个任意单元叫做“胡斯菲尔德单元”(HU),是以Godfrey Hounsfield先生的名字命名的。
这个任意单元的规模将水的衰减值定为零。CT数字的范围是2000HU,尽管有一些现代扫描仪的HU范围达到了4000。每个数值都代表了一种灰色阴影,在光谱两端有+1000白色和-1000黑色。
胡斯菲尔德规模(图片来自《CT的介绍》)
有些扫描仪是有柱状扫描边界的,但是其输出的图像确实方形的。在扫描边界之外的像素将被赋予-2000的定值。
CT扫描仪图像(图片来自《CT的介绍》)
第一步通常是将这些值设置为零。接着,我们把得到的数值与重新调节的斜率相乘,再加上截距(通常是记录在扫描的元数据中的),然后回到HU单元。
在接下来的部分,我们将会使用Kaggle的肺癌数据库和Keras的卷积神经网络。我们将根据本文提供的信息,构建下一部分的内容。