• python医学图像处理

    2019-11-30 12:05:10
    python与医疗图像1 https://blog.csdn.net/ssw_1990/article/details/51890055 python与医疗图像2https://blog.csdn.net/ssw_1990/article/details/51996011 python与医疗图像3https://blog.csdn.n...

    最近刚开始看脑影像方面的内容,感谢博主们的分享!

    python与医疗图像1 https://blog.csdn.net/ssw_1990/article/details/51890055

    python与医疗图像2  https://blog.csdn.net/ssw_1990/article/details/51996011

    python与医疗图像3  https://blog.csdn.net/ssw_1990/article/details/73472399

    ======================================================================

    1. pip install dipy:DIPY is a python toolbox for analysis of MR diffusion imaging.

    2. pip install nibabel:安装用于读写影像数据文件的程序包

    3. pip install --trusted-host pypi.python.org SimpleITK:安装ITK包

    ======================================================================

    1. PyMVPA

    解析:PyMVPA(Python MultiVariate Pattern Analysis)是一个用来简化大型数据集的模式分类分析的Python模块。

    提供一些高级的抽象的常用的处理步骤和一些常用算法的实现,而且它不仅仅局限于神经影像学领域。Windows下安

    装方式为pip install pymvpa-0.4.8-cp27-none-win_amd64.whl。

    2. Nilearn

    解析:Nilearn是一个能够快速统计学习神经影像数据的Python模块。它利用Python语言中的scikit-learn工具箱和一些进行预测建模,分类,解码,连通性分析的应用程序来进行多元的统计。

     pip install -U --user nilearn

    3. Scikit-learn

    解析:Scikit-learn是基于Scipy为机器学习建造的的一个Python模块,它的特色就是多样化的分类,回归和聚类的算法包括支持向量机,逻辑回归,朴素贝叶斯分类器,随机森林,Gradient Boosting,聚类算法和DBSCAN等。

    Scikit-learn需要NumPy和SciPy等其他包的支持,因此在安装Scikit-learn之前需要提前安装一些支持包,

    假定已经完整安装了所有支持包,那么利用安装Scikit-learn只需要简单的一条简单的pip命令(也可以用conda命令,详见官方文档):

    $ sudo pip install -U scikit-learn

    4. Scikit-image

    解析:Scikit-image是用于图像处理的Python包,使用原生的NumPy数组作为图像对象。

    pip install skimage

    5. PyOpenCV(或CV2)

    解析:PyOpenCV(或CV2)是一个用Python实现的OpenCV的API。但是,PyOpenCV与CV2的区别呢?

    6. PyOpenGL

    解析:PyOpenGL是一个用Python实现的OpenGL的API。

    7. PIL

    解析:PIL(Python Imaging Library)是Python中最常用图像处理库,它的功能非常强大,并且API非常简单易用。

    8. FSL

    解析:常用的分析fMRI的软件有SPM,FSL和AFNI。官网对FSL的介绍:FSL is a comprehensive library of image 

    analysis and statistical tools for fMRI, MRI and DTI brain imaging data. The suite consists of various command line 

    tools, as well as simple GUIs for its core analysis pipelines. Among others, FSL offers implementations of standard 

    GLM analysis, white matter tractography, tissue segmentation, affine and non-linear co-registration, and 

    independent component analysis.

    FSL提供的工具,如下所示:

    (1)Functional MRI: FEAT, MELODIC, FABBER, BASIL, VERBENA

    (2)Structural MRI: BET, FAST, FIRST, FLIRT & FNIRT, FSLVBM, SIENA & SIENAX, fsl_anat

    (3)Diffusion MRI: FDT, TBSS, EDDY, TOPUP

    (4)GLM / Stats: GLM general advice, Randomise, Cluster, FDR, Dual Regression, Mm, FLOBS

    (5)Other: FSLView, Fslutils, Atlases, Atlasquery, SUSAN, FUGUE, MCFLIRT, Miscvis, POSSUM, BayCEST

    FSL安装,如下所示:

    (1)下载FSL

    http://fsl.fmrib.ox.ac.uk/fsldownloads/fsl-5.0.9-centos6_64.tar.gz

    (2)安装FSL

    [plain] view plain copy
    sudo su  
    mkdir /opt/software  
    tar -zxvf fsl-5.0.9-centos6_64.tar.gz  
    (3)配置环境变量
    [plain] view plain copy
    vim ~/.bashrc  
    FSLDIR=/opt/software/fsl  
    . ${FSLDIR}/etc/fslconf/fsl.sh  
    PATH=${FSLDIR}/bin:${PATH}  
    export FSLDIR PATH  
    说明:source ~/.bashrc即可,不需要重启计算机。
    可能遇到的问题,如下所示:

    (1)error while loading shared libraries: libmng.so.1: cannot open shared object file: No such file or directory

    解析:

    sudo apt-get install liblcms1 (http://packages.ubuntu.com/precise/libmng1)

    sudo dpkg -i libmng1_1.0.10-3_amd64.deb

    9. FreeSurfer

    解析:FreeSurfer是一个处理大脑3D结构像数据,进行自动皮层和皮下核团分割的软件。该软件是一款用于分析脑神

    经数据的工具集合,它提供了一系列的算法来量化人脑的功能、连接以及结构属性,能对高分辨率的磁共振图像进行

    三维重建,生成展平或胀平图像,并能得到皮质厚度、面积、灰质容积等解剖参数。

    FreeSurfer安装,如下所示:

    (1)配置环境变量

    export FREESURFER_HOME=/home/ssw/freesurfer

    source $FREESURFER_HOME/SetUpFreeSurfer.sh

    (2)yum install tcsh

    (3)将license复制到/home/ssw/freesurfer中。

    (4)分别输入tkregister2、tkmedit、tksurfer 和recon-all --help。

    (5)recon-all -s bert -autorecon1。

    10. Slicer

    解析:3D Slicer是一个跨平台的,免费和开源的数据可视化和医学图像计算软件包。

    11. nipy,nibabel

    解析:Python医疗影像开发包。pip install nipy-0.4.0-cp27-none-win_amd64.whl;pip install nibabel。

    12. VTK

    解析:VTK(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。

    VTK是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的,包含有大约250,000行代码,2000多个

    类,还包含有几个转换界面,可以通过Python语言使用VTK。

     

    参考文献:

    [1] PyMVPA:http://www.pymvpa.org/

    [2] Scikit-learn:http://scikit-image.org/

    [3] PIL:http://www.pythonware.com/products/pil/

    [4] PyOpenGL 3.x:http://pyopengl.sourceforge.net/

    [5] 核磁共振成像:https://www.zhihu.com/topic/19613128/top-answers

    [6] FSL:http://neuro.debian.net/install_pkg.html?p=fsl-complete

    [7] ubuntu 12.04安装fsl:http://blog.csdn.net/lj695242104/article/details/17059625

    [8] FreeSurfer使用手册:https://read.douban.com/column/594403/

    [9] 3D Slicer:https://www.slicer.org/

    [10] FreeSurfer Download and Install:http://surfer.nmr.mgh.harvard.edu/fswiki/DownloadAndInstall/

    ==================================================================


    1. 医学影像学

    医学影像学Medical Imaging,是研究借助于某种介质(如X射线、电磁场、超声波等)与人体相互作用,把人体内部组织器官结构、密度以影像方式表现出来,供诊断医师根据影像提供的信息进行判断,从而对人体健康状况进行评价的一门科学,包括医学成像系统和医学图像处理两方面相对独立的研究方向。

    仪器主要包括X光成像仪器、CT(普通CT、螺旋CT)、正子扫描(PET)、超声(分B超、彩色多普勒超声、心脏彩超、三维彩超)、核磁共振成像(MRI)、心电图仪器、脑电图仪器等。

    课程设置包括:(1)主干学科:基础医学、临床医学、医学影像学.(2)主要课程:物理学、电子学基础、计算机原理与接口、影像设备结构与维修、医学成像技术、摄影学、人体解剖学、诊断学、内科学、影像诊断学、影像物理、超声诊断、放射诊断、核素诊断、介入放射学、核医学、医学影像解剖学、肿瘤放疗治疗学、B超诊断学。

    2. MNI空间

    解析:MNI空间是Montreal Neurological Institute根据一系列正常人脑的磁共振图像而建立的坐标系统。Native空间就

    是原始空间,图像没有做任何变换时就是在原始空间。在这个空间中图像的维度、原点、voxel size等都是不同的,

    不同被试的图像之间不具有可比性,计算出来的任何特征都不能进行统计分析,或是用于机器学习。所以必须对所有

    被试的图像进行配准标准化到同一个模板上,这样所有被试的维度、原点、voxel size就一样了。使用MNI标准模板,

    就表示把图像转换至MNI空间了。一般而言MNI模板是最常用的,研究的比较多。标准空间的图像也是指MNI空间的

    图像。Talairach空间和MNI空间的坐标有对应的关系,很多软件都提供这个功能,比如Mricron、REST等。Talairach

    空间主要是为了判别当前坐标在什么结构上,Talairach atlas and Talairach coordinates就是Stereotaxic space。

    3. 脑成像数据模态 [16]

    解析:脑成像数据主要有DTI、FMRI、3D三种模态。其中,DTI,3DT1是三维数据,FMRI是四维数据。

    (1)DTI:Diffusion Tensor Imaging,磁共振弥散张量成像。

    (2)FMRI:Functional Magnetic Resonance Imaging,功能性磁共振成像。

    4. DICOM格式

    解析:DICOM(Digital Imaging and Communications in Medicine)即医学数字成像和通信,是医学图像和相关信息

    的国际标准(ISO 12052)。它定义了质量能满足临床需要的可用于数据交换的医学图像格式。DICOM被广泛应用于

    放射医疗,心血管成像以及放射诊疗诊断设备(X射线,CT,核磁共振,超声等),并且在眼科和牙科等其它医学领

    域得到越来越深入广泛的应用。在数以万计的在用医学成像设备中,DICOM是部署最为广泛的医疗信息标准之一。当

    前大约有百亿级符合DICOM标准的医学图像用于临床使用。

    5. 原子(原子核,电子),原子核(质子,中子)

    解析:氢原子模型:电中性的原子含有一个正价的质子与一个负价的电子,被库仑定律束缚于原子核。质子和电子都

    是构成物质的基本粒子。任何物质都是由原子构成的,而原子可以看作一个模型:原子核和绕原子核运动的电子。原

    子核可以进一步分为质子和中子。电子带负电荷,质量非常小。质子带正电荷,其质量和中子的质量大致相等。 

    6. 轨道磁矩和自旋磁矩

    解析:在原子中,电子因绕原子核运动而具有轨道磁矩;电子因自旋具有自旋磁矩;原子核、质子、中子以及其它基

    本粒子也都具有各自的自旋磁矩。这些对研究原子能级的精细结构,磁场中的塞曼效应以及磁共振等有重要意义,也

    表明各种基本粒子具有复杂的结构。

    7. 磁化强度

    解析:磁化强度(M)是描述磁介质磁化状态的物理量。在国际单位制中,M的单位为安培/米。定义为媒质微小体元

    ΔV内的全部分子磁矩矢量和与ΔV之比。即对于顺磁与抗磁介质,无外加磁场时,M恒为零;存在外加磁场时,如右所示:。

    (1)抗磁性物质的磁化强度的大小与外磁场的大小成正比,但是方向与外磁场方向相反。

    (2)顺磁性物质的磁化强度的大小与外磁场的大小成正比,而且方向与外磁场方向相同。

    8. fMRI数据结构

    解析:

    (1)时间分辨率

    (2)空间分布率

    (3)结构图像:空间分辨率相对很高。

    (4)功能图像:时间分辨率相对很高。

    9. K空间

    解析:K空间的数据分布实际上是图像空间中数据的二维傅立叶变换结果。K空间中的数据点和图像空间中的数据点并

    不是一一对应的。一个K空间中的数据点对应了图像空间中所有数据点的一部分信息。事实上,K空间中的数据正是图

    像空间中的数据作二维傅立叶变换的结果,也就是说,我们的“大脑图像”可以被看作是由一系列频率、相位、方向各

    异的二维正弦波叠加而成的,而K空间的数据正表示了图像的正弦波组成。因此,为了理解如何从K空间中的数据变换

    得到图像空间中的数据,必须首先理解傅立叶变换。 

    10. MRI与fMRI

    解析:

    (1)MRI扫的是大脑的结构图像,也叫T1权重图像。它有着很高的空间分辨率,可以从中看到非常清晰的解剖结

    构,也可以从中区分出各种不同的组织。 

    (2)fMRI往往用于研究大脑的具体功能,扫出来的是功能图像,也叫做T2*权重图像。虽然它的空间分辨率比较低,

    但是时间分辨率很高,可以在很短的时间内扫出一叠功能图像。这样就可以研究实验操作究竟是如何影响大脑的MRI

    信号的。 

    11. BOLD指数

    解析:BOLD指数指的是有氧血红蛋白(Oxygenated Hemoglobin)的含量和脱氧血红蛋白(Deoxygenated 

    Hemoglobin)含量的比值。 

    12. BOLD原理

    解析:有氧血红蛋白是抗磁性(Diamagnetic)的,脱氧血红蛋白是顺磁性(Paramagnetic)的。fMRI(T2*权重)

    正是利用了血红蛋白在这两种状态下不同的磁性性质,顺磁性的脱氧血红蛋白可以增强MR的原磁场。当它的含量下

    降时,BOLD fMRI信号会跟着上升。脱氧血红蛋白上升,会导致信号的下降,因为它会干扰主磁场,导致信号的衰减

    加速。

    13. fMRI数据预处理 

    解析:数据预处理步骤包括:可视化(Visualization)、去伪影(Artifact removal)、时间配准(Slice

    time correction)、头动校正(Motion correction)、生理噪音校正(Correction for physiological effect)、结构功能

    配准(Co-registration)、标准化(Normalization)和时空间滤波(Spatial and temporal filtering)。

    14. 现代神经影像学技术

    解析:脑电图(EEG);单光子发射体层成像(SPECT);正电子发射型计算机断层显像(PET);功能性磁共振

    成像(fMRI);侵入性光学成像(Invasive Optical Imaging);颅内电极记录(Intracranial Recording);脑皮层电

    图(ECoG)。其中应用最为广泛的是fMRI和PET。

    15. Analyze格式

    解析:Analyze格式储存的每组数据组包含2个文件,一个为数据文件,其扩展名为.img,包含二进制的图像资料;另

    外一个为头文件,扩展名为.hdr,包含图像的元数据。在fMRI的早期,Analyze格式最常用的格式,但现在逐渐被

    NIfTI格式所取代。Analyze格式主要不足就是头文件不能真正反映元数据。      

    16. NIfTI格式 

    解析:标准NIfTI图像的扩展名是.nii,包含了头文件及图像资料。由于NIfTI格式和Analyze格式的关系,因此NIfTI格式

    也可使用独立的图像文件(.img)和头文件(.hdr)。单独的.nii格式文件的优势就是可以用标准的压缩软件(如

    gzip),而且一些分析软件包(比如FSL)可以直接读取和写入压缩的.nii文件(扩展名为.nii.gz)。

    17. nilearn模块

    解析:

    (1)nilearn.connectome: Functional Connectivity

    (2)nilearn.datasets: Automatic Dataset Fetching

    (3)nilearn.decoding: Decoding

    (4)nilearn.decomposition: Multivariate decompositions

    (5)nilearn.image: Image processing and resampling utilities

    (6)nilearn.input_data: Loading and Processing files easily

    (7)nilearn.masking: Data Masking Utilities

    (8)nilearn.regions: Operating on regions

    (9)nilearn.mass_univariate: Mass-univariate analysis

    (10)nilearn.plotting: Plotting brain data

    (11)nilearn.signal: Preprocessing Time Series

    说明:Nilearn是一个将机器学习、模式识别、多变量分析等技术应用于神经影像数据的应用中,能完成多体素模式分

    析(MVPA:Mutli-Voxel Pattern Analysis)、解码、模型预测、构造功能连接、脑区分割、构造连接体等功能。一般

    用于处理功能磁共振图像(FMRI)、静息状态(resting-state),或者基于体素的形态学分析(VBM)。对于机器学

    习专家来说,Nilearn的价值体现在特定领域特定工程的构造,也就是将神经影像数据表达成为非常适合于统计学习的

    特征矩阵。[17]

    18. 可获取的三种磁共振信号

    (1)自由感应衰减信号(FID):一般不用FID信号来重建图像,因为信号的较大幅度部分被掩盖在90度射频内;线

    圈发射和接受通路之间来不及切换。

    (2)自旋回波信号(SE):较为常用的也是最早用以进行磁共振图像重建的信号,只是需要多施加一次1800RF脉

    冲,回波时间较长。

    (3)梯度回波信号(GrE):较新的可大大缩减磁共振扫面时间的用以重建图像的信号,又称场回波。

    说明:MPRAGE即快速梯度回波成像。

    19. SPM和AFNI

    解析:

    (1)SPM:A powerful set of MATLAB functions for preprocessing, analysis, and display of fMRI and PET data. It 

    is currently freely available.

    (2)AFNI:A set of programs for processing, analyzing, and displaying functional MRI (fMRI) data. It runs on Unix-

    based systems and is currently freely available.

    20. fMRI分析的主要步骤

    解析:fMRI数据分析之所以复杂是由许多因素造成的:第一,数据容易受到许多伪迹的影响,比如头动。第二,数据

    中存在许多变异来源,包括个体间差异以及个体内不同时间的变异。第三,数据的维度很大,对许多惯于分析小型数

    据的科学工作者们来说存在许多挑战。fMRI数据分析的主要步骤分别对应于解决上述这些问题。如下所示:

    (1)质量控制:确保数据不被伪迹破坏。

    (2)扭曲校正:校正fMRI图像经常发生的空间扭曲失真。

    (3)头动校正:校正头动,将扫描的时间序列图像重新对准。

    (4)层间时间校正:校正图像不同层之间的时间差异。

    (5)空间标准化:将不同个体的数据对准到一个通用空间结构上,使得所有数据可以合并进行组分析。

    (6)空间平滑:有意模糊数据以降低噪声。

    (7)时间过滤:在时间维度上过滤数据,以去除低频噪声。

    (8)统计建模:将统计模型拟合到观测数据,以估计任务或刺激引起的响应。

    (9)统计推断:估计结果的统计显著性,对在整个大脑中进行的大量统计检验进行校正。

    (10)可视化:对结果进行可视化,并估计效应量。

    21. 神经元与神经系统

    解析:神经元,又称神经原或神经细胞,是构成神经系统结构和功能的基本单位。神经元是具有长突起的细胞,它由

    细胞体和细胞突起构成。神经系统是机体内对生理功能活动的调节起主导作用的系统,主要由神经组织组成,分为中

    枢神经系统和周围神经系统两大部分。中枢神经系统又包括脑和脊髓,周围神经系统包括脑神经和脊神经。

    22. 基于MRI标准坐标空间的三个主要坐标轴示意图

    解析:在用于神经成像数据的标准空间中,X代表左/右;Y代表前/后;Z代表上/下。在数据矩阵中,一个特定的体素

    可以被标记为[Xvox, Yvox, Zvox],通过这三个维度的坐标就可以确定体素的位置。如下所示:

    23. SPM数据转换

    解析:使用SPM进行数据处理前,必须先将其它档案格式转换成spm可以读取的Analyze档案格式,包含.img档和.hdr

    标头档。相关的转档软件有XMedCon和MRIcro等。   

    参考文献:

    [1] 南方医科大学:http://course.smu.edu.cn/coursecenter/Page/SchoolSpace/Department/ShowTrainScheme.aspx?OrganizationId=41

    [2] 南方医科大学精品课程"医学影像学":http://jpkc.fimmu.com/yx/yxbf/wljc1.htm

    [3] 医学影像学:http://course.jingpinke.com/details?uuid=8a833999-20a7dbd5-0120-a7dbd535-

    00e7&objectId=oid:8a833999-20a7dbd5-0120-a7dbd535-00e6&courseID=S0400398

    [4] 西安交通大学精品课程"医学影像学":http://radiology.xjtu.edu.cn/

    [5] 中山大学精品课程"放射诊断学/医学影像学":http://www.360doc.com/content/13/0118/09/1509573_260853317.shtml

    [6] 医学影像学:http://www.1ketang.com/course/64.html

    [7] 唐都医院放射治疗科学科专业网站:http://tdradiotherapy.fmmu.edu.cn/content.aspx?id=652799609557

    [8] 天津医科大学医学影像诊断学:http://tj.jingpinke.com/xpe/portal/c791a316-1271-1000-bae6-e2511f149c90?uuid=8a833996-18ac928d-0118-ac928e9c-0114&courseID=C060034

    [9] 南方医科大学医学影像学:http://sns.icourses.cn/jpk/getCourseDetail.action?courseId=6987

    [10] 医学影像学:http://basic.shsmu.edu.cn/jpkc/radiology/index.asp

    [11] 医学影像学课程:http://netclass.csu.edu.cn/jpkc2006/xiaoji2006/fshk-jpkc06/03sb/xeh.htm

    [12] 中山大学医学影像学:http://www.icourses.cn/coursestatic/course_3479.html

    [13] 复旦大学医学影像学精品课程:http://jpkc.fudan.edu.cn/s/186/main.htm

    [14] 影像园:http://www.xctmr.com/ppt/

    [15] 杭州师范大学精品课程"医学影像学":http://yxyxx.hznu.edu.cn/

    [16] 脑成像数据的格式转换:http://blog.csdn.net/yangpengfeiblog/article/details/9197783 

    [17] Nilearn库介绍:http://blog.csdn.net/jinxiaonian11/article/details/53465072

    [18] Ubuntu 12.04安装FreeSurfer:http://blog.csdn.net/lj695242104/article/details/39988687


    ————————————————
    版权声明:本文为CSDN博主「jessican_uestc」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/jessican_uestc/article/details/79549069

    展开全文
  • 怎样利用python处理图像?2.什么是卷积?3.什么是Keras? 运用深度学习技术进行图像和视频分析,并将它们用于自动驾驶汽车、无人机等多种应用场景中已成为研究前沿。近期诸如《A Neural Algorithm of Artistic ...
    转自fc013,仅做学习用
    问题导读:

    1.怎样利用python处理图像?
    2.什么是卷积?
    3.什么是Keras?







      运用深度学习技术进行图像和视频分析,并将它们用于自动驾驶汽车、无人机等多种应用场景中已成为研究前沿。近期诸如《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/ ... 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 开发出一个预测肺癌的模型。

      卷积神经网络 (CNN) 基础

      为了理解卷积神经网络的基础,我们首先要搞清楚什么是卷积。

      什么是卷积?

      那么在泛函分析中,卷积(Convolution)是通过两个函数 f 和 g 生成第三个函数的一种数学算子,表征函数 f 与 g 经过翻转和平移的重叠部分的面积。所以在简单定义下,设 f(x)、g(x) 是 R 上的两个可积函数,作积分:

      则代表卷积。理解这个定义的简单方式就是把它想象成应用到一个矩阵上的滑动窗方程。

      有着 3×3 过滤器的卷积。

      在上面的图片中,应用到矩阵上的滑动窗是绿色,而滑动窗矩阵则是红色。输出就是卷积特征矩阵。下面的图片显示了两个矩形脉冲(蓝色和红色)的卷积运算及其结果。




      Jeremy Howard 在他的 MOOC 上用一个电子表格解释了卷积,这是理解基础原理的一种很好的方式。现在有两个矩阵,f 和 g。f 和 g 进行卷积运算的结果,是第三个矩阵「Conv layer 1」,它由两个矩阵的点积给出。如下所示,这两个矩阵的点积是一个标量。


      两个矩阵的点积。

      现在让我们按照 Jeremy 的建议用电子表格来演示一下,输入矩阵是函数 f(),滑动窗矩阵是过滤器方程 g()。那么这两个矩阵元素的乘积和就是我们要求的点积,如下所示。




      让我们把这个扩展到一个大写字母「A」的图片。我们知道图片是由像素点构成的。这样我们的输入矩阵就是「A」。我们选择的滑动窗方程是一个随机的矩阵 g。下图显示的就是这个矩阵点积的卷积输出。




      什么是卷积神经网络 (CNN) ?



      在我看来,一个简单的卷积神经网络 (CNN) 就是一系列神经网络层。每一层都对应着一个特定的函数。每个卷积层是三维的(RGB),所以我们用体积作为度量。更进一步的,CNN 的每一层都通过一个微分方程向另一层传递一个体积量的激活。这个微分方程被称为激活函数或传递函数。

      CNN 的实体有多种:输入,滤波器(或核函数)、卷积层、激活层、池化层、以及批量归一化层。这些层在不同排列和不同规则下的组合形成了不同的深度学习算法。

      输入层:通常一个 CNN 的输入是一个 n 维阵列。对于一个图像来说,就是三个维度的输入——长度,宽度和深度(即颜色通道)。




      过滤器或核函数:正如下面这张来自 RiverTrail 的图像所示,一个过滤器或核函数会滑到图像的每个位置上并计算出一个新的像素点,这个像素点的值是它经过的所有像素点的加权和。在上面的电子表格例子中,我们的过滤器就是 g,它经过了 f 的输入矩阵。




      卷积层:输入矩阵和过滤器的点积形成的一个新矩阵,称为卷积矩阵或卷积层。



      下面的网址中有一个很好的解释填补、跨步和转置是如何工作的视觉图表。



      激活层:

      激活函数可根据是否饱和分为两种类型。

     

      饱和激活函数都是双曲型和双曲正切型,而非饱和激活函数都是修正线性单元(ReLU)及其变体函数。使用非饱和激活函数有两方面的优势:

      第一是可以解决所谓的「爆炸/消失梯度(exploding/vanishing gradient)」。

      第二是可以加快函数收敛速度。

      双曲函数:把一个实数值输入挤压到 [0,1] 区间范围内

      σ(x) = 1 / (1 + exp(−x))

      双曲正切函数:把一个实数值输入挤压到 (-1,1)区间内

      tanh(x) = 2σ(2x) − 1

      ReLU

      ReLU 代表单调线性单元(Rectified Linear Unit)。它是输入为 x 的最值函数 (x,0),比如一个卷积图像的矩阵。ReLU 接着把矩阵 x 中的所有负值置为零,并保持所有其他值不变。ReLU 是在卷积之后计算出来的,因此会出现一个非线性的激活函数,如双曲正切或双曲函数。Geoff Hinton 在他的 nature 论文里第一次讨论这个问题。

      ELUs

      指数线性单元(Exponential linear units)试图使平均激活接近于零,这样就能加速学习。ELUs 也能通过正值认定避免消失梯度的出现。研究显示,ELUs 比 ReLUs 有更高的分类准确性。



      来源: http://image-net.org/challenges/ ... _Schwarz_poster.pdf [(1×96×6, 3×512×3, 5×768×3, 3×1024×3, 2×4096×FC, 1×1000×FC) 层 × 单元 × 接受域或完全连接(FC)的堆叠构成的 15 层 CNN。2×2 的最大池化,每次堆叠后有 2 步幅,第一个 FC 之前有 3 层的空间金字塔池。]


    来源:维基百科



      渗漏 ReLU

      ReLU 中的负值部分完全被抛弃,与之相反,渗漏 ReLU 给负值部分赋了一个非零斜率。渗漏修正线性激活在声子模型(Maas et al., 2013)中第一次被引入。数学上,我们有


    来源:卷积网络中修正激活的经验主义演化


      其中 ai 是在 (1, 正无穷) 区间内的固定参数。

      参数化修正线性单元 (PReLU)

      PReLU 可被视为渗漏 ReLU 的一个变体。在 PReLU 中,负值部分的斜率是从数据中学习得来的,而非预先定义好的。PReLU 的创作者们声称它是 ImageNet 归类(Russakovsky et al., 2015) 任务中(机器)超越人类水平的关键因素。它与渗漏 ReLU 基本相同,唯一的区别就是 ai 是通过反向传播训练学习到的。

      随机渗漏修正线性单元 (RReLU)

      随机渗漏单调线性单元 (RReLU) 也是渗漏 ReLU 的一种变体。在 RReLU 中,负值部分的斜率是在给定训练范围内的随机取值的,然后在测试中固定下来。RReLU 最显著的特征是在训练过程中,aji 是一个从一致分布 U(l,u) 上取样得到的随机数。正式数学表达如下:



      下面显示了 ReLU, 渗漏 ReLU, PReLU 和 ReLU 的对比。




      来源::https://arxiv.org/pdf/1505.00853.pdf。ReLU, 渗漏 ReLU, PReLU 和 ReLU,对于 PReLU,ai 是学习到的;而对于渗漏 ReLU,ai 是固定的。对于 RReLU,aji 是一个在给定区间内取样的随机变量,在测试中保持不变。

      噪声激活函数

      这些都是拓展后包括了 Gaussian 噪声(Gaussian noise)的激活函数。


    来源:维基百科


      池化层

      池化层的目标是逐渐地减少矩阵的尺寸,以减少网络中参数的数量和计算,这样也就能控制过拟合。池化层在输入的每个深度切片上独立操作,并使用最大化和平均运算来重置其空间尺寸。最常见的形式,一个采用了步幅 2,尺寸 2x2 过滤器的池化层,同时沿着宽度和高度,以幅度 2 将输入中的每个深度切片向下取样,丢弃了激活值的 75%。在此情况下,每个最大值运算都取了 4 个数字(某些深度切片中的小 2x2 区域)的最大值。深度方向的维度保持不变。更一般的来说,池化层就是:









      注意:这里我们把 2 x 2 window 滑动了两个细胞(也被叫做步幅),并取了每个区域的最大值。

      批归一化层:

      批归一化是归一化每个中间层的权重和激活函数的有效方式。批归一化有两个主要的好处:

      1. 对一个模型加入批归一化能使训练速度提升 10 倍或更多

      2. 由于归一化极大降低了偏远输入的小数字过度影响训练的能力,它也能降低过拟合。

      全连接层:

      全连接层是一个传统的多层感知器(Multi Layer Perceptron),它在输出层使用了一个Softmax 函数。「全连接」这个术语就说明了前一层和后一层的每个神经元都是连接起来的。Softmax 函数即对数函数(logistic function)的一般化情况,它把一个取值区间为任意实数的K 维向量「挤压」成一个取值区间在(0,1)内且和为1的K 维向量。

    来源:维基百科



      Sofxmax 激活一般被用于最终的完全连接层,随着它的值在 0 和 1 之间不停变化,得到概率。

      现在我们对 CNN 中不同的层次都有了一定的概念。运用这些知识我就能开发出肺癌探测所需的深度学习算法。

      第三部分

      在最后一部分中,我们将透过卷积神经网络讨论一些深度学习的基础知识。在本文中,我们将侧重于使用 Keras 和 Theano 的基础深入学习。我们将给出两个范例,一个使用 Keras 进行基本预测分析,另一个使用 VGG 的图像分析简单样例。

      我已经意识到这个话题的广度和深度,它需要更多的文章来解读。在之后的文章中,我们将讨论处理中 DICOM 和 NIFTI 在医学成像格式中的不同,进一步扩大我们的学习范围并对如何对 2 维肺分割分析使用深度学习进行讨论。然后转到 3 维肺分割。我们同样会讨论如何在深度学习之前进行医学图像分析以及我们现在可以如何做。我非常开心也非常感谢我的新合作伙伴将这一切聚在一起——Flavio Trolese(4Quant 的合作伙伴)、 Kevin Mader(4Quant 的联合创始人)以及 Cyriac Joshy(瑞士苏黎世联邦理工的讲师)。

      在本文中,我们将要讨论 Keras 并使用两个范例来展示如何使用 Keras 进行简单的预测分析任务以及图像分析。

      什么是 Keras?

      Keras 网站是这么介绍的——Keras 是 Theano 和 TensorFlow 的深度学习库。




      Keras API 在 Theano 和 TensorFlow 之上运行。

      Keras 是高级的神经网络 API,由 Python 编写并可以在 TensorFlow 和 Theano 之上运行。其开发目的是使快速实验成为可能。

      什么是 Theano 和 TensorFlow?

      James Bergstra 博士等人在 Scipy 2010 发布的 Theano 是一个 CPU 和 GPU 数学表达式编译器。它是一个 Python 库,允许你有效地定义、优化和评估涉及多维数组的数学表达式。Theano 由 Yoshua Bengio 等一些高级研究员和蒙特利尔学习算法研究所(MILA)共同完成。在 Scipy 2010 上一个非常棒的 Theano 教程。下图显示了截至 2010 年,Theano 在 GPU 和 CPU 与其他工具的对比。该结果最初在《Theano: A CPU and GPU Math Compiler in Python》一文中发表。



      还有一些在 Theano 之上的建立其它的库,包括 Pylearn2 和 GroundHog(同样由 MILA 开发)、Lasagne、Blocks 和 Fuel.

      TensorFlow 由 Google Brain 团队的研究员与工程师开发。其被开发用于进行机器学习和深度神经网络研究,但是该系统也足以适用于其它领域。如其网站介绍的那样,TensorFlow 是一个使用数据流图的数值计算开源软件库。图中的节点表示数学运算,图的边表示在其之间传递的多维数据数组(张量)。代码的可视化如下图所示。


    TensorFlow:在异构分布式系统上的大规模机器学习


      使用 Keras 的预测分析示例

      在这个示例中,我们将使用 UCI 网站的 Sonar 数据集构建一个简单的预测模型。在下面的代码中,我们将会直接从 UCI 网站中得到数据并以 60:40 的比例将其分为训练集与测试集。我们在预测模型中使用 Keras 并在标签编码中使用 sklearn。



      在下一段代码中,我们读取数据集,并使用上面定义的函数查看数据。我们打印数据集,并找出需要编码的因变量。




      我们使用 scikit-learn 中的 LabelEncoder 进行标签编码,将 R 和 M 隐藏到数字 0 和 1 中。这样的操作被称为 one-hot 编码。one-hot 编码可将分类特征转换为对算法更友好的格式。在这个示例中,我们使用使用「R」值 和「M」值分类我们的 Y 变量。使用标签编码器,它们分别被转换为「1」和「0」。



      scikit-learn 中的 LabelEncoder

      然后使用 Keras 创建模型:

     


      无预处理的简单模型的精确度为 81.64%

      使用 Keras 的图像分析示例

      为了用 Keras 解释图像处理,我们将使用来自 Kaggle 比赛的数据——狗和猫(https://www.kaggle.com/c/dogs-vs-cats)。该比赛的目的在于开发一种算法以区分图像是否包含狗或猫。这个任务对人、狗和猫来说很简单,但是计算机却很难做到。在该项挑战中,有 25,000 张标记狗和猫的照片可用于训练,并且在测试集中有 12,500 张照片,我们必须在挑战中尝试为其加上标签。根据 Kaggle 网站,当该项比赛开始时(2013 年底):

      当前最佳:目前的文献显示,机器分类器在该任务上可以达到 80% 以上的准确度。那么如果我们能够超过 80%,我们将在 2013 年处于最前沿。」

      我强烈推荐观看 Fast.ai 的 MOOC 以了解更多的细节,学习下一步和深度学习的前沿研究。我已经在下列代码中引用 fast.ai,这是一个很好的起点,链接:http://www.fast.ai/

     



      步骤 1:设置

      从 Kaggle 网站下载狗和猫的数据,并存入你的笔记本电脑。本文中的示例均在 Mac 上运行。

     


      基础设置

      Jeremy Howard 在他的班上提供了一个实用的 Python 文件,该文件有助于封装基本函数。对于开始部分,我们将使用此实用文件。点击下载:https://github.com/fastai/course ... rning1/nbs/utils.py。当我们深入到更多细节时,我们将解压该文件并查看其背后的内容。

     


      步骤 2:使用 VGG

      我们的第一步简单地使用已经为我们创建好的模型,它可以识别许多类别的图片(1,000 种)。我们将使用『VGG』,它赢得了 2014 年 ImageNet 比赛,是一个非常简单的创造理解的模型。VGG ImageNet 团队创造了更大、更慢、准确性略有提高的模型(VGG 19)和更小、更快的模型(VGG 16)。我们将使用 VGG 16,因为 VGG 19 过慢的性能与其在准确度上的微小提升不对等。

      我们创建了一个 Python 类,Vgg16,这使得使用 VGG 16 模型非常简单。Vgg 16 同样可从 fast.ai 的 GitHub 中获得:https://github.com/fastai/course ... rning1/nbs/vgg16.py

     


      步骤 3:实例化 VGG

     


      Vgg16 构建在 Keras 之上(我们将在短时间内学到更多内容),Keras 是一个灵活易用的深度学习库,该软件库是基于 Theano 或 Tensorflow 的一个深度学习框架。Keras 使用固定的目录结构在批量读取图像和标签组,每个类别的图像必须放在单独的文件夹中。

      我们从训练文件夹中获取批量数据:

     


      步骤 4:预测狗 vs 猫

     


      步骤 5:总结并编码文件

      总结一下这篇文章,我推荐的狗和猫分类方法为:

     



      总结

      如果读者跟着我们走到了这一步,那么其实已经实现了上一部分文章中讨论过的理论,并做了一些实际的编程工作。如果读者们按照上述说明实现了这两个案例,那么就已经完成了使用 Keras 的第一个预测模型,也初步实现了图像分析。由于代码的长度,我们不在这里讨论细节只给出了链接。如果你查看链接有任何疑问,请联系 fast.ai。

      至此,我们从最开始的数据库安装到医学图像数据格式的解释,已经有了医学影像处理的基本知识。随后我们从卷积的定义到 CNN 的详细构架与原理,进一步实践的理论基础已经完成了累积。最后一部分对前面的理论知识进行实践,用 Python 实现了这一令人激动的模型。因此,我们希望读者朋友能在这一循序渐进的过程中真正感受到医学影像处理的乐趣。

      参考原文:
    展开全文
  • python读取CT医学图像

    2018-04-21 14:44:40
    需要安装OpenCV和SimpleItk。SimpleItk比较简单,...代码如下:[python] view plain copy#coding:utf-8 import SimpleITK as sitk import cv2 #LKDS-00058,-102.655469971,108.188810974,438.759994507,...

    需要安装OpenCV和SimpleItk。

    SimpleItk比较简单,直接pip install SimpleItk即可。

    代码如下:

    [python] view plain copy
    1. #coding:utf-8  
    2. import SimpleITK as sitk  
    3. import cv2  
    4.   
    5. #LKDS-00058,-102.655469971,108.188810974,438.759994507,12.2279986879  
    6. if __name__ == '__main__':  
    7.     filename = "F:/cancer_solution/data/train_subset00/LKDS-00058.mhd"  
    8.     ds = sitk.ReadImage(filename)  
    9.     img_array = sitk.GetArrayFromImage(ds)  
    10.     frame_num, width, height = img_array.shape  
    11.   
    12.     outpath = "F:/cancer_solution/out/train/LKDS-00058"  
    13.     index = -1  
    14.     for img_item in img_array:  
    15.         index = index + 1  
    16.         cv2.imwrite("%s/%d.png"%(outpath,index),img_item)  
    17.   
    18.     print "done!"  

    如上所示,就将CT影像解析成了多个单幅图片。


    目前还不太理解(x,y,z)坐标是如何对应的。

    但祈世间人无病,何愁架上药生尘。癌症,终有一天可以被战胜。

    展开全文
  • 利用深度学习技术,分析图像与视频,并且将之应用在诸如自动驾驶,无人机等等领域已经成为最新研究方向。在最新的一篇名为“A Neural Algorithm of Artistic Style”[1508.06576] A Neural Algorithm of Artistic ...

    https://www.toutiao.com/a6701130271518884366/

     

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

     

    利用深度学习技术,分析图像与视频,并且将之应用在诸如自动驾驶,无人机等等领域已经成为最新研究方向。在最新的一篇名为“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 Datasets
    • Dicom Library
    • Osirix Datasets
    • Visible Human Datasets
    • The 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单位,通过乘以重新调整斜率并添加拦截(这些拦截方便地存储在扫描的元数据中!)。

     

    Acknowledgements

    【1】https://pyscience.wordpress.com/2014/09/08/dicom-in-python-
    【2】importing-medical-image-data-into-numpy-with-pydicom-and-vtk/
    【3】http://www.osirix-viewer.com/resources/dicom-image-library/
    【4】http://wearables.cc.gatech.edu/paper_of_week/viola01rapid.pdf
    【5】http://adilmoujahid.com/posts/2016/06/introduction-deep-learning-python-caffe/
    【6】http://dicomiseasy.blogspot.com/
    【7】https://www.kaggle.com/c/data-science-bowl-2017
    【8】http://docs.opencv.org/trunk/d6/d00/tutorial_py_root.html
    Kaggle community for all the different scripts and support
    

     

    作者 | william张真人william张真人 - 知乎

    版权声明

    本文版权归《william张真人》,转载请自行联系

    展开全文
  • 医学图像读写python

    2019-02-26 15:56:45
    绝大多数格式的医学图像 import SimpleITK as sitk def readimg(path):  img = sitk.ReadImage(path)  data = sitk.GetArrayFromImage(img)  data=data.transpose([1,2,0]) # sitk读取图像channel会转到第...
    1. 绝大多数格式的医学图像
      import SimpleITK as sitk
      
      def readimg(path):
      
          img = sitk.ReadImage(path)
      
          data = sitk.GetArrayFromImage(img)
      
          data=data.transpose([1,2,0]) # sitk读取图像channel会转到第一维
      
          # note that the transpose function should have a return value to save the data array
      
          return data
      
      def writeimg(data, path):
      
          img = sitk.GetImageFromArray(data)
      
          sitk.WriteImage(img,path)
    2. Nibabel 包 读nii
      import nibabel as nib
      
      img_file = nib.load(img_path)
      
      data = img_file.get_data()
      
      affine = [[1,0,0],[0,1,0],[0,0,1]]# 保持不变
      new_vol = nib.Nifti1Image(data,affine)
      
      nib.save(new_vol,path)

       

    3. Raw data,二进制文件,读取之前需要知道数据大小,类型,可用imageJ查看
      import numpy as np
      
      Data = np.fromfile(path, dtype=np.int16).reshape((50,128,128)) # dtype and the shape of img should be known in advance
      
      # save file
      
      Data.tofile(path) # note that the shape of data should be channel first
      
      
      def nii2raw(path):
      
          img = sitk.ReadImage(path)
      
          data = sitk.GetArrayFromImage(img)
      
          #data=data.transpose([1,2,0])  # if you want to save the data as raw file, transpose should not be applied
      
          data.tofile(path.replace('.nii.gz','.raw'))

       

    4.  

    展开全文
  • 医学图像处理

    2018-09-05 10:21:48
    DICOM(Digital Imaging and Communications in Medicine)即医学数字成像和通信,是医学图像和相关信息的国际标准(ISO 12052)。DICOM被广泛应用于放射医疗、心血管成像以及放射诊疗诊断设备(X射线,CT,核磁共振...
  • FreeSurfer为结构MRI数据提供完整的处理流,包括:颅骨剥离,B1偏置场校正和灰白质分割;重建皮质表面模型(灰白色边界表面和软脑膜表面);标记皮质表面上的区域以及皮层下的大脑结构;用立体定位图非线性配准个体...
  • 总结一下目前遇到的一些医学图像预处理步骤,但才开始自学两周,所以很多东西或许不对或者不全面,以后争取每两周回顾以前的文章,将内容完善,并提高质量。(2019-3-5) 由于篇幅原因,将预处理的步骤分开来,这一...
  • 1. pip install dipy:DIPY is a python toolbox for analysis of MR diffusion imaging.2. pip install nibabel:安装用于读写影像数据文件的程序包3. pip install --trusted-host pypi.python.org SimpleITK:...
  • python3.6 + opencv-python 4.2 opencv-python 版的whl文件安装包下载地址: http://mirrors.aliyun.com/pypi/simple/opencv-python/ 细胞计数的范例代码网上很多,但偏书面性和学习性,而且错误多形成误导,下面来点...
  • 它定义了质量能满足临床需要的可用于数据交换的医学图像格式,可用于处理、存储、打印和传输医学影像信息。DICOM可以便捷地交换于两个满足DICOM格式协议的工作站之间。目前该协议标准不仅广泛应用于大型医院,
  • 转载一篇图像处理文章:https://blog.csdn.net/wsh596823919/article/details/79982485
  • 提供详细的图像处理python程序,并提供具体实例验证
  • 它定义了质量能满足临床需要的可用于数据交换的医学图像格式,可用于处理、存储、打印和传输医学影像信息。DICOM可以便捷地交换于两个满足DICOM格式协议的工作站之间。目前该协议标准不仅广泛应用于大型医院,而且已
  • 最近在做医学图像处理,简单的记录一下。 预处理 已知的数据集是通过labelimg工具打好标签的图片(如下图所示),总共区分三种病例。但标签框的大小不一致,必须要统一大小,以满足后期制作统一格式的数据集(*.npz...
  • 医学图像处理综述: https://wenku.baidu.com/view/e16c795c84254b35eefd34ea.html 深度学习在医学图像处理中的应用: https://zhuanlan.zhihu.com/p/27568550 医学影像方面期刊感觉NEUROIMAGE, JACC-...
  • 利用Python实现图像的仿射变换   仿射变换通常用于图像的几何矫正、图像配准   在透视映射下,物体的形状会失真。例如,虽然原本矩形的窗户、书本,由于成像角度的原因,最终呈现在图像上,便会是另外一种不太...
  • 1.使用PIL库对图像进行处理 1.1读取图像, 并保存在pic变量中: from PIL import Image pic = Image.open('fruits.jpg') 如果你想查看图片大小,使用 pic.size 或者查看图片 pic.show() 1.2 想将图像转化成灰度 pic...
  • Python图像处理8

    2017-05-23 16:43:11
    图像配准是指将不同时间、不同传感器(成像设备)或不同条件下(天候、照度、摄像位置和角度等)获取的两幅或多幅图像进行匹配、叠加的过程,它已经被广泛地应用于遥感数据分析、计算机视觉、图像处理等领域。...
  • Python+OpenCV3.3图像处理视频培训课程:该教程基于Python3.6+OpenCV新版本3.3.0详细讲述Python OpenCV图像处理部分内容,包括opencv人脸识别、人脸检测、数字验证码识别等内容。是Python开发者学习图像知识与应用...
1 2 3 4 5 ... 20
收藏数 4,344
精华内容 1,737
关键字:

python医学图像处理