using PDL on Medical Image

Homepage

PDL(Perl Data Language)原本是一个天文学家为处理天文图像而编写的模块,计算机中图像数据是以N维矩阵形式存储的,因此PDL模块的核心实现了线性代数中的矩阵计算,有关特点、大数据量处理效率方面的问题可以到它的网站去找,地址是 http://pdl.perl.org。

最近我和一家做医学图像研究的公司合作研究PDL模块在医学核磁共振图像(MRI)处理方面的价值,初步研究了MRI图像的两种存储格式-ANALYZE75和NIfTI-1,它们基本都是“header + image”的存储方式,其中header中存储图像信息,img中存储图像数据,通常MRI扫描图像是4维的,包括X轴(侧面)、Y轴(前后)、Z轴(上下)三个方向的层层扫描切片。ANALYZE75和NIfTI-1格式图像的处理步骤可以简单描述为:(1)首先解析header中的信息,主要读取image的维度尺寸等信息;(2)然后使用PDL模块从img文件中读取图像数据并存储到PDL自定义的矩阵对象中(piddle),从而可以方便的从中提取所需的X/Y/Z轴的Slice(2D),(3)进而可以对这些切片调用各种矩阵算法实现2D图像的基本处理,如调整亮度、对比度、叠加透明覆盖层、高斯模糊等。

NIfTI-1 header的基础来自ANALYZE75,丰富了一些字段的定义,存储格式方面的差异如下:
ANALYZ75  .hdr+.img(header和img数据分别存储在两个命名相同后缀不同的文件中)
NIfTI-1      (1)ni1方式:.hdr+.img
                (2)n+1方式:.nii(header和image数据同时存在.nii文件中,image数据位置以header的vox_offset字段说明)

PDL的图像输出(PDL::Graphics::*、PDL::IO::*)和一些开源的数学统计图像工具有很好的接口,如PGPLOT、PLPLOT等,可以直接从PDL对象(称为piddle)中存储的矩阵数据直接生成数学图形,也可以很方便的读写各种2D格式图像(如PNG、JPEG、GIF等),或调用OpenGL接口生成3D图像,因此如果要比较全面的探索PDL,应该选择Linux操作系统,并建议同时研究PGPLOT工具。PDL模块在安装后,提供一个perldl的shell,对探索PDL的用法很有帮助。

Linux环境下开源的MRI图像浏览软件MRIcro(http://www.sph.sc.edu/comd/rorden/mricro.html)能帮助你对MRI图像有个快速的认识,同时该工具也自带了一些ANALYZE75的样例可供测试。下面是我在研究PDL MRI图像处理中一些笔记,希望对这方面感兴趣的人提供有用的信息。

1、Linux环境下的PGPLOT、PDL安装及PDL模块的基础用法:01_PDL.rar 

图1:在图像上打方格 

2、ANALYZE75格式图像的处理:02_ANALYZE75.rar

图2:脑部fMRI(功能性核磁共振成像)Z轴的某张切片 

3、NIfTI-1格式图像的处理:03_NIfTI-1.rar 

 图3:脑部fMRI Z轴的某张切片

4、有用链接:
http://pdl.perl.org/
http://pdl.perl.org/nifty/
http://www.astro.caltech.edu/~tjp/pgplot/
http://plplot.sourceforge.net/
http://www.grahamwideman.com/gw/brain/analyze/
http://nifti.nimh.nih.gov/

2008-04-27 01:40