基于图形处理器的人体皮肤组织实时成像谱域相干光断层成像系统 下载: 1365次
1 引言
光学相干层析技术(OCT)是在20世纪90年代末发展起来的一种光信号探测技术[1],最初应用在眼科等透明组织的结构成像中,目前已发展到非透明组织的功能性成像[2-3]。OCT的分辨率可达到微米量级,成像深度可达毫米量级,是一种无接触、非入侵的成像方式,可以达到活体成像的要求,故在神经外科等无创、微创手术中有较好的辅助作用,在癌症的早期诊断、眼科视网膜成像和管状组织的内窥成像等方面也有广泛应用[4-7]。与电子计算机断层扫描(CT)、核磁共振成像(MRI)和超声等医学成像相比,OCT具有很大的优势。
随着OCT的快速发展,系统数据采集装置的采样速率也得到提高,目前最快的频域相干光断层成像(SD-OCT)系统己经能达到500 kHz的A-line扫描速率[8]。针对本文研究的SD-OCT系统而言,需要对采集到的数据进行重建,而影响皮肤图像能否实时重建的技术瓶颈是需要对采集到的数据的每一行分别进行正向傅里叶变换,将数据由频谱域空间变换到波数空间进行插值变换和快速傅里叶变换(FFT),然后再对变换后的图像进行三维或者二维成像显示。由于待处理的数据量庞大,而FFT算法的计算复杂度较高,从而导致对采集的数据进行重建成像的计算量极其巨大,耗时严重,难以达到目前实时成像显示的要求。
目前,研究人员提出了一些解决方法。有研究人员提出利用数字信号处理器(DSP)[9]或者现场可编程门阵列(FPGA)[10]来实现实时光学相干层析成像的目的,但这种方法需要额外添加硬件,这会增加系统的复杂度和花费,而且使用该方法还需要研究人员具备相当扎实的硬件编程能力,这对研究人员的综合能力要求比较高,从而耗费更多的人力成本。此外,有人将多核中央处理器(CPU)处理单元引入到系统中,英特尔与AMD公司相继推出了双核、4核乃至80核CPU,运算效率越来越高。但是多核CPU较为昂贵,而且在使用多核CPU时需要对每个CPU内核进行编程,指定内核需要处理的数据块,并分别对每个内核进行流程编写,这种方法的缺点是操作繁琐,编程量大,也不是较为理想的方法[11]。随着图形处理器(GPU)和通用图形处理器(GPGPU)编程技术的发展,GPU的计算性能和可编程性不断增强,越来越多的研究人员开始利用GPU强大的计算性能对医学影像数据进行处理,从而解决各自领域的技术瓶颈,OCT系统也不例外。目前,英伟达公司也提出了一种统一计算设备架构(CUDA),用它对GPU进行编程实现了通用目的的计算应用[12-13]。
目前,国外的研究人员在理论与实验方面取得了较大进展。最先提出将GPU应用到OCT系统成像的是Watanabe等[14],他们在2009年提出将GPU与硬件相结合,从而来达到提高数据处理速度的目的。利用GPU上的多流处理器对正向傅里叶变换部分进行快速的并行运算,利用linear-k光谱仪与相应光栅结合来避免重采样过程的大量运算,该实验图像重建速率可达到27.9 frame/s(每帧大小为2048 pixel×1000 pixel)。2010年,Watanabe等[15]又在之前的基础上加入了补零运算和FFT算法来改进重采样过程。同年,Jeught等[16]在不改变外界硬件的基础上实现了利用GPU完成重采样过程的加速。美国约翰霍普金斯大学Kang教授的研究小组致力于超快光学相干成像的实时三维影像与传感系统的研究,他们利用GPU与压缩传感相结合的方法对SD-OCT系统进行实时成像研究,并取得了不错的实验结果[17]。Kang与Zhang的小组实现了基于GPU的非均匀傅里叶变化(NUFFT)[18]。
相较于国外在OCT实时成像方面的研究,国内的起步较晚。北京协和医学院的刘巧艳小组将GPU引入到眼科OCT系统的图像重建中,其成像速率比基于CPU平台的串行成像模式提高了一个数量级[19]。中国科学院的自适应光学实验室用时域插值算法替代运算量较大的零位补偿线性插值法,对CCD采集到的原始数据与插值系数进行卷积计算,从而得到
本课题组利用2048个采样点模式的SD-OCT系统对人体皮肤组织进行成像,每帧数据的大小为10000 line×2048 pixel/line×2 Byte/pixel,共计39 MB数据。实验室现有的MATLAB数据处理平台的成像速率高达2~3 min/frame,耗时严重,难以满足在体实时成像的临床要求。故本研究在现有实验室硬件设备的条件下,利用实验室电脑上已有的低成本通用独显GPU进行数据处理,以提高处理速度。主要处理流程包括:采样数据的预处理、正向傅里叶变换和变换后图像的后处理。最后利用OpenCV将处理后的数据进行显示成像。本方法大幅提升了目前实验室仪器的整体性能。在实验中,通过SD-OCT系统对手部皮肤组织进行活体成像,然后用线阵器件CCD对系统产生的干涉信号进行采集,再将采集到的数据传输到CPU与GPU上进行图像处理。采用CPU+GPU混合编程数据处理方法与实验室现有成像处理平台MATLAB分别对数据进行处理,并通过比较同一帧图像的处理时间与成像质量来衡量两种数据处理方式的优劣。经实验证实,将GPU引入到皮肤组织成像的SD-OCT系统中可以使成像速度提升约10倍,实验系统的整体性能得到了大幅度提高,能够满足二维实时成像的临床需求。
2 基本原理
2.1 实验系统
实验系统主要分为两大模块:成像与数据采集模块--SD-OCT光路系统;数据处理模块--计算机与GPU。实验系统原理图如
2.2 SD-OCT成像系统原理
傅里叶域OCT系统的设计与搭建主要有两种方式:一种是扫频OCT(SS-OCT),它利用光源自身光谱的扫频实现层析成像;另一种是本研究采用的SD-OCT。SD-OCT的核心构造包括:光源、光纤式迈克耳孙干涉仪及探测器。从光源发出的光经过光纤耦合器分光后,一束进入参考臂,经透镜准直成平行光入射到参考平面反射镜上,再经平面反射镜反射后沿原路返回,经由透镜耦合进光纤;另外一束光经过透镜准直后入射到扫描振镜上,反射后经聚焦透镜聚焦入射到样品上,入射光经过样品的后向散射后沿原路返回耦合进光纤。两束光在光纤耦合器的输出端输出,经过准直透镜准直后入射到衍射光栅上,经衍射光栅分光后聚焦到线阵CCD上,从而实现干涉光谱信号的探测。
OCT常用的两个波长的光分别是800~850 nm波段的光和1310 nm光,因为这两种波长的光很好地平衡了穿透深度与生物组织光吸收特性之间的矛盾。在实验中, SD-OCT系统采用的是波长
2.3 数据处理模块原理
在CCD上采集到的数据通过数据线传给计算机,计算机将并行运算部分的数据传输给GPU,GPU进行处理后再传输给计算机进行图像显示。本研究采用Intel(R)Core(TM)i5-2450M CPU@2.50 GHz型的CPU,双核处理器,6 GB内存(可用5.82 GB)。英伟达公司GeForce GT 630M系列1 GB的GPU独立显卡,全局内存大小为1024 MB,96cores内核。
3 GPU的并行处理与软件架构
3.1 硬件架构GPU
GPU是显卡上专门用于处理图形渲染的设备,是显卡的“大脑”。通俗地讲,GPU就等同于专门用于图像处理的CPU。GPU是一种多线程的并行计算方式,侧重的是数据的吞吐量,在大量数据的计算上极具优势[20]。GPU如此优越的计算能力主要依赖于它的硬件结构,在CPU中大量的硬件结构被用作逻辑控制单元和数据缓冲单元,只有少量的硬件结构在进行逻辑运算,计算能力有限。而在GPU中,大量的数据元都在执行相同的程序,所以不需要复杂的数据流控制,同时由于运算过程具有极高的运算复杂度,因此内存读取的延时可以被掩盖,不需要大的数据缓存,大量的晶体管可以被用来进行数据运算,这样极大地提高了GPU的并行运算速率。
GPU可以被看作是由多个多处理器组成,每个多处理器包含8个流处理器,每个多处理器还具有一定数量的寄存器组、共享内存以及纹理缓存和常量缓存。在GPU中,最基本的处理单元就是流处理器。GPU的硬件结构图如
3.2 并行计算架构--CUDA
CUDA是2006年由NVIDIA提出的应用于GPU并行编程的软件开发环境。在CUDA的开发环境中,CPU是主机负责程序的串行部分,GPU作为协处理器负责并行部分的大量密集型数据的计算。它们各自拥有独立的存储空间:内存和显存。CUDA采用的是通用并行接口,使用含有扩展和限制的类C语言CUDA C,能够在GPU上进行多线程计算的语言扩展[20]。
3.3 GPU数据处理的过程
基于CUDA软件环境,CPU与GPU混合编程的数据处理步骤如下:
1) 将图像采集卡采集并经由数据总线传给计算机CPU的数据在CPU端进行数据类型转换,转化为单精度复数类型(cufftComplex类型)。
2) 利用CUDA里的cudaMalloc内存分配函数为干涉信号数据在GPU端分配显存空间,分配空间大小根据要处理的数据量的大小而定。
3) 通过CUDA中的cudaMemcpy拷贝函数将CPU端的干涉信号数据从主机端传输到设备端已经分配好的显存中。因为是从主机端拷贝到设备端,故cudaMemcpy的参数应设置为cudaMemcpyHostToDevice。
4) 在使用CUFFT库中的FFT执行函数之前要先创建一个plan。先用cufftHandle plan定义一个句柄plan,然后利用CUFFT库中自带的cufftPlan1d函数创建一个一维快速傅里叶变换句柄,变换的类型是CUFFT_C2C(C表示复数,C2C表示复数到复数的变换)。使用plan的好处是可以根据输入数据的大小预先配置好内存和计算资源,使得真正运算时处理器能达到最佳性能。
5) 设置好plan后,运行execution函数,进行傅里叶变换的运算。一旦配置完成,配置信息即会被保存,便于之后的复用。本实验中采用的是cufftExecC2C函数,变换类型参数是CUFFT_FORWARD,表示正向傅里叶变换。
6) 利用cudaMemcpy函数将FFT处理后的数据由设备端传送到主机端,函数cudaMemcpy的参数设置为cudaMemcpyDeviceToHost。
7) 将经过FFT处理后的图像数据在CPU上进行复数取模和对数变换的后处理。该步骤可实现图像的归一化处理,即将灰度值映射到0~1.0范围内。
8) 最后利用OpenCV对处理后的数据进行成像显示(OpenCV是一个基于C/C++语言的开源图像处理函数库)。
程序设计流程图如
4 实验结果与分析
本研究采用CPU+GPU混合编程的数据处理环境,实验的硬件平台如
本课题组采用对比实验的方法来验证所提方法的优越性。实验室原有的MATLAB数据处理平台在处理小数据量图像时的成像延迟并不明显,但随着数据量增大,MATLAB的数据处理速率急剧下降,成像延迟明显,成像时间高达分钟量级,远远达不到实时成像的要求。为验证所提方法对SD-OCT系统成像速率的提升效果,分别用MATLAB处理平台与CPU+GPU混合编程平台对相同数据大小的二维图像进行处理并显示,通过CUDA的时间计算接口函数--event function与CPU的时间计算函数--clock函数(精度均为ms量级)来比较两种平台数据处理的时间,并通过计算加速比来评价成像性能。然后增加图像处理的数据量,将数据量增大10倍,验证GPU在处理大数据时的优越性能。该过程主要考察一帧图像的数据传输,直流去噪声,快速傅里叶变换,取模、取对数、归一化,OpenGL绘图以及总时间6个参数。为了突出傅里叶变化部分的并行化处理对图像重建实时性的影响,采用直接傅里叶变换的方法对皮肤组织图像进行重构,而未对原始光谱信号进行波长标定重采样计算,虽然这样处理会影响成像质量,但可使 “总时间”参数更好地反映傅里叶变换部分的成像性能。
实验数据来自于人体手部皮肤的成像,对同一人的右手食指指甲中间部位的皮肤和右手手掌右下侧部位分别成像,成像结果如
图 4. 实验结果对比图。(a)手指图像;(b)手指图像的MATLAB平台处理结果;(c)手指图像的GPU+CPU混合编程处理结果;(d)手掌图像;(e)手掌图像的MATLAB平台处理结果;(f)手掌图像的GPU+CPU混合编程处理结果
Fig. 4. Comparison of experimental results.(a)Finger image; (b) MATLAB processing result of finger image; (c) GPU+CPU processing result of finger image; (d) palm image; (e) MATLAB processing result of palm image; (f) GPU+CPU processing result of palm image
在测试成像速度的实验中,每帧图像的数据量分别是2048 pixel×1000 line的A-line和2048 pixel×10000 line的A-line。首先分别用MATLAB与CPU+GPU混合编程对小数据量(1000 line×2048 pixel)的图像进行处理并显示,测试的时间如
表 1. CPU+GPU混合编程的小数据量处理时间
Table 1. Small data processing time of CPU+GPU hybrid programming
|
表 2. MATLAB编程的小数据量处理时间
Table 2. Small data processing time of MATLAB programming
|
由
接下来分别用MATLAB与CPU+GPU混合编程对大数据量(10000 line×2048 pixel)的图像进行处理并显示,时间测试结果如
表 3. CPU+GPU混合编程的大数据量处理时间
Table 3. Large data processing time of CPU+GPU hybrid programming
|
表 4. MATLAB编程大数据量处理时间
Table 4. Large data processing time of MATLAB programming
|
分析
为了定量衡量两种软件平台数据处理速率的优劣,采用加速比
由
5 结论
随着OCT在生物组织成像领域的深入发展,越来越多的临床诊断需要OCT的辅助。随着外科手术辅助操作的要求,实时成像是OCT系统不可忽视的发展方向。通常OCT系统处理的数据量都比较庞大,而对组织深度信息进行恢复的关键就是图像的FFT,但FFT计算复杂,耗时严重,是影响实时成像的重要因素。为了提高成像速率,本研究利用实验室已搭建好的SD-OCT成像系统,在不额外增加任何硬件的条件下,利用实验室计算机上通用的独显GPU,将GPU的通用编程语言CUDA C引入到数据处理过程中。通过对手部皮肤组织成像的数据进行处理,测试引入GPU对整体系统性能的提升。实验结果证明,在对大数据量图像进行处理时,CPU+GPU混合编程的数据处理速度相较于MATLAB平台数据处理速度提升约10倍,改善了目前实验室系统的整体性能,并且不增加任何成本。GPU的并行数据处理能力与浮点数据计算能力会随着显卡的更新换代而变得越来越强大,本实验所用显卡属中端版本,计算性能一般,但依然可以看出其在实时成像领域的巨大潜力。同时本方法的OpenCV成像显示部分是由CPU串行计算实现的,耗时较严重。但自2010年起,OpenCV已经开始实现支持GPU的CUDA接口,即图像的显示也可以并行实现,整体成像速度还有更大的提升空间,这一部分需要继续探索,使GPU的并行计算能力得到最大程度的发挥,提高系统的性能。本研究为日后三维实时成像打下了夯实的基础,有助于我国的医疗水平更上一层楼。
[1] Huang D, Swanson E A, Lin C P, et al. Optical coherence tomography[J]. Science, 1991, 254(5035): 1178-1181.
[5] 卞海溢, 高万荣, 张仙玲, 等. 基于观察矩阵的频域光学相干层析成像图像重构算法[J]. 光学学报, 2014, 34(2): 0211003.
[6] 郭英呈, 高万荣, 朱越. 基于补偿干涉仪的串联式全场光学相干层析系统[J]. 激光与光电子学进展, 2017, 54(1): 011101.
[7] 刘浩, 高万荣, 陈朝良. 手持式牙齿在体谱域光学相干层析成像系统研究[J]. 中国激光, 2016, 43(2): 204003.
[11] 刘锐. GPU在FD-OCT系统数据处理及实时图像显示中的应用[D]. 北京: 北京理工大学, 2015.
LiuR. Application of GPU in data processing and real time image display in FD-OCT system[D]. Beijing: Beijing Institute of Technology, 2015.
[13] 赵春晖, 姚淅峰, 张丽丽. 采用字典递归更新的目标检测稀疏算法及GPU实现[J]. 光学学报, 2016, 36(8): 0828002.
[17] XuD, HuangY, Kang JU. Graphics processing unit-accelerated real-time compressive sensing spectral domain optical coherence tomography[C]. SPIE, 2015, 9330: 93301B.
[19] 刘巧艳, 李跃杰, 徐秋晶, 等. GPU在眼科 FD-OCT 系统实时图像显示及数据处理中的应用[J]. 中国医疗器械杂志, 2013, 37(1): 1-5.
Liu Q Y, Li Y J, Xu Q J, et al. Applying graphics processing unit in real-time signal processing and visualization of ophthalmic Fourier-domain OCT system[J]. Chinese Journal of Medical Instrumentation, 2013, 37(1): 1-5.
[20] 科克, 胡文美. 大规模并行处理器编程实战[M]. 北京: 清华大学出版社, 2010.
Article Outline
朱珊珊, 高万荣, 史伟松. 基于图形处理器的人体皮肤组织实时成像谱域相干光断层成像系统[J]. 激光与光电子学进展, 2018, 55(4): 041701. Shanshan Zhu, Wanrong Gao, Weisong Shi. GPU-Based Fourier Domain Optical Coherence Tomography System for Real Time Imaging of Human Skin[J]. Laser & Optoelectronics Progress, 2018, 55(4): 041701.