编辑信息
主编辑
林瑞腾博士
文章类型
研究文章
出版历史
收稿日期:2017年7月22日
录用日期:2017年8月14日
发布日期:2017年8月17日
版权
©2017珠煌Z.这是根据创意公约归因许可的条款分发的开放式文章,其允许在任何媒体中不受限制地使用,分发和再现,只要原始作者和来源被记入。
引用
基于OpenCV GPU框架的超声射频信号实时包络检测。医学仪器诊断工程doi 4: 10.15761/ mde .1000121
北京理工大学生命科学与生物工程学院,北京
北京理工大学信息技术学院,北京
北京理工大学信息技术学院,北京
北京理工大学生命科学与生物工程学院,北京
北京理工大学信息技术学院,北京
台北市国立台湾大学附属医院外科
台湾桃园,长庚大学医学院影像与放射学系
台湾桃园省龙涌大学和昌涌纪念医院医学影像研究中心
台湾桃园龙益纪念医院医学成像与干预系
DOI:10.15761 / MDDE.1000121
超声波背散射信号的信封检测对于基于包络统计的定量超声组织表征是必不可少的。在这项工作中,我们用OpenCV图形处理单元(GPU)框架用于希尔伯特基于超声辐射(RF)信号的信封检测。使用带有双2.60-GHz CPU,64-GB RAM和2 GB GPU的计算机在21个超声RF数据(256扫描线×1552采样点)上进行了实验。实验结果表明,OpenCV CPU和OpenCV GPU的平均运行时间分别为106.00±0.84ms和18.43±0.68ms。所提出的基于OpenCV GPU的包络检测方法可用于超声波应用,要求超声波RF信号的外壳实时计算。
超声组织表征,信封检测,Hilbert变换,图形处理单元,OpenCV
超声成像已广泛用于常规诊断,因为其低成本,非离子辐射和实时能力[1,2]。换能器将超声波透射到与组织相互作用的组织中,并且换能器接收回返回的回波。由超声回波信号的幅度构造,超声B模式图像遭受缺点,作为定性和操作员相关的[1]。为了补充B模式成像,定量超声(QUS)探讨了用于组织表征的反向散射超声信号的频率,相位或统计信息[3-10]。在QU的上下文中,可以量化包括反向散射系数,声学衰减,声音,包络统计,散射物性能和组织弹性的参数以进行组织表征[4,11,12]。
当组织被建模为散射颗粒的集合(即,散射体)时,可以在未处理的射频(RF)回波信号中反映入射超声波与组织散射克的相互作用。包络统计与组织微观结构直接相关,并且能够在超声波B模式图像上表征在不明显的组织中的结构改变[4-10]。因此,它们可用于定量组织病理状态的定量描述。超声RF数据的信封检测对于包络统计分析至关重要[4-10]。为了确保实时反向散射的信封分析,需要信封检测算法的时间效率。
OpenCV是用C / C ++编写的开源计算机视觉库(http://opencv.org/),并已广泛用于图像处理和计算机视觉应用[13-16]。具体地,OpenCV为实时数据处理提供了一种图形处理单元(GPU)框架[16]。考虑到OpenCV的开源性质和GPU框架,我们提出了使用OpenCV GPU在这项工作中检测超声波散射信封。在21帧超声RF数据上进行包络检测实验。实验结果表明,可以使用OpenCV GPU框架实现实时RF包络检测。
本研究经国家台湾大学医院的机构审查委员会批准,患者签署了知情同意书。用商业便携式超声扫描仪(Model 3000,Terason,Burlington,MA,USA)收集乳房超声图像,原始RF数据以30MHz的采样率数字化。换能器包括宽带线性阵列(型号10L5,Terason),中心频率为7.5MHz。招募了二十一名志愿者女性乳腺肿瘤患者。超声波师进行了超声扫描。每个图像采集协议涉及到后散射回波的总共256个波束形成扫描线(每个扫描线1552个采样点)。每个扫描线之间的间隔为0.15毫米。
超声波RF信号的瞬时幅度(A线)通过包络检测获得:
(1)
在哪里E.(T.)表示a-line,R.(T.)为超声射频信号,表示的希尔伯特变换R.(T.),j是虚构的单位。表达式被称为分析信号或复合RF回波。在先前的研究中,Hilbert变换经常用于超声波RF信号的包络检测[6-10]。基于Hilbert变换的性质[17,18],分析信号在负频率下没有频谱分量,其阳性频率下的频谱分量加倍[19]。基于希尔伯特变换的信封检测的算法实现,将考虑此属性。图1显示了包络检测算法的流程图。
图1。超声辐射频率信号包络检测算法的流程图。
假设一帧超声波射频数据,R.(T.),包括m扫描线,每个扫描线包含N样本点。为了一世TH.扫描线R.(T.),计算Hilbert变换。然后,使用等式(1)计算RF数据的包络。
希尔伯特变换一世TH.扫描线,S.,采用离散傅里叶变换(DFT)[20]进行计算,涉及五个步骤的算法:
在本研究中,使用具有OpenCV 2.4.9和Microsoft的C ++语言实现了基于HILBERT变换的信封检测算法(r)Visual C ++ 2010.已经执行了基于openCV CPU和OpenCV GPU框架的信封检测,并且在表1,2和3中提供了算法实现的C ++代码,其中“RF”表示超声RF数据矩阵,“信封”是“rf”的包络矩阵。具有OpenCV CPU的信封检测基于OpenCV矩阵数据结构,CV :: MAT。使用OpenCV DFT函数,CV :: DFT()计算了基于OpenCV CPU框架的转发DFT和反向DFT。带有OpenCV GPU的信封检测是基于OpenCV GPU矩阵数据结构,CV :: GPU :: GPumat。使用基于OpenCV GPU的DFT功能,CV :: GPU :: DFT()进行了基于OpenCV GPU框架的转发DFT和逆DFT。CPU和GPU之间的通信是使用GPUMAT :: Upload()和GPumat :: Download()函数进行的。
在双2.60 ghz Intel的计算机上对21帧超声射频数据进行包络检测实验(r)Xeon.(r)E5-2670 CPU,64-GB RAM和2-GB NVIDIA(r)方形住宅区TM值4000 GPU。表1中列出了扫描线和采样点的数量。实验结果表明,在视觉上,OpenCV GPU框架产生了与OpenCV CPU相同的B模式图像(图2)。对于256扫描线的RF数据×1552个采样点(N= 21), OpenCV CPU和OpenCV GPU的运行时间分别为106.00±0.84 ms和18.43±0.68 ms(表4)。
图2。使用OpenCV CPU(左)和OpenCV GPU(右)框架检测到从反向散射信封计算的乳房超声B模式图像的视觉比较。
简历:: Mat RFComplex(RF.Rows,RF.Cols,CV_32FC2); STD :: Vector combiner.push_back (rf); combiner.push_back(cv :: mat :: zeros(rf.size(),v_32fc1)); cv ::合并(Combiner,RFComplex); std::向量<简历:垫>分配器; splitter.push_back(cv :: mat(rfcomplex.rows,rfcomplex.cols, CV_32FC1)); splitter.push_back(cv :: mat(rfcomplex.rows,rfcomplex.cols, CV_32FC1)); cv :: mat rfspectrum = cv :: mat(rfcomplex.rows, rfComplex。Cols, CV_32FC2); //转发DFT. cv :: dft(rfcomplex,rfspectrum,dft_rows); CV ::乘法(rfspectrum,因子,rfspectrum,1.0,cv_32fc2); //逆DFT. cv::dft(rfSpectrum, rfComplex, DFT_ROWS | dft_inverse); cv :: split(rfcomplex,splitter); //得到虚部 imag =拆分[1]; cv::multiply(imag, cv::Scalar(1.0/rf.cols), imag, 1.0, cv_32fc1); 简历::幅度(RF,IMAG,信封); |
表格1。C ++代码用于使用OpenCV CPU框架的信封检测。
CV :: GPU ::流流; cv::gpu::GpuMat rfGPU = cv::gpu::GpuMat行,射频。Cols, CV_32FC1); rfGPU.upload (rf); cv::gpu::GpuMat rfComplexGPU = cv::gpu::GpuMat行,rfGPU。Cols, CV_32FC2); std::向量<简历::gpu:: GpuMat >组合器; combiner.push_back(rfgpu); combiner.push_back(cv :: gpu :: gpumat(rfgpu.rows,rfgpu.cols,cv_32fc1,cv :: scalar(0)))); cv :: gpu :: merge(Combiner,RFComplexGPU,Stream); cv::gpu::GpuMat facorgpu = cv::gpu::GpuMat(rfGPU。行,rfGPU。Cols, CV_32FC2); factorgpu.upload(因素); cv :: gpu :: gpumat rfspectrumgpu = cv :: gpu :: gpumat(rfgpu.rows,rfgpu.cols,cv_32fc2); std::向量<简历::gpu:: GpuMat >分配器; splitter.push_back(cv :: gpu :: gpumat(rfgpu.rows,rfgpu.cols,cv_32fc1)); splitter.push_back(cv :: gpu :: gpumat(rfgpu.rows,rfgpu.cols,cv_32fc1)); //转发DFT. cv :: gpu :: dft(rfcomplexgpu,rfspectrumgpu,rfcomplexgpu.size(),dft_rows,stream); CV :: GPU ::乘法(rfspectrumgpu,factorgpu,rfspectrumgpu,1.0,cv_32fc2,流); //逆DFT. 简历:gpu:: dft (rfSpectrumGPU、rfComplexGPU rfComplexGPU.size (), dft_rows |dft_inverse,流); 简历:gpu:分裂(rfComplexGPU、分配器、流); //得到虚部 cv::gpu::GpuMat imagGPU = splitter[1]; cv :: gpu ::乘以(imaggpu,cv :: scalar(1.0 / rfgpu.cols),imaggpu,1.0,cv_32fc1,流); cv::gpu::GpuMat magGPU = cv::gpu::GpuMat(rfGPU。行,rfGPU。Cols, CV_32FC1); CV :: GPU ::幅度(RFGPU,ImagGPU,MagGPU,Stream); maggpu.download(信封); stream.waitforcompletion(); |
表格2。C ++代码用于使用OpenCV GPU框架的信封检测。
射频。ConvertTo(rf, CV_32FC1); 简历::垫图像放大(rf。行,射频。Cols, CV_32FC1); // imaginary part cv::Mat factor = cv::Mat::ones(rf。行,射频。Cols, CV_32FC2 ); for (int i = 0;我< rf.rows;+ + i) { for(int j = 1; j { factor.at 的因素。[1] = 2 and [1] = 1 and [1] = 1 and [1] = 2; 的因素。at 的因素。at } } CV :: Mat信封(RF.Rows,RF.Cols,CV_32FC1); |
表格3.。用于预处理的C ++代码。
OpenCV CPU的运行时间(ms) |
OpenCV GPU的运行时间(MS) |
|
---|---|---|
|
107. |
18. |
|
106. |
19. |
|
105. |
19. |
|
106. |
19. |
|
105. |
19. |
|
107. |
19. |
|
106. |
19. |
|
105. |
18. |
|
106. |
18. |
|
105. |
19. |
|
106. |
19. |
|
107. |
19. |
|
107. |
19. |
|
107. |
18. |
|
107. |
19. |
|
107. |
18. |
|
105. |
17. |
|
106. |
18. |
|
106. |
18. |
|
105. |
17. |
|
105. |
18. |
106.00±0.84. |
18.43±0.68 |
表格4.。使用OpenCV CPU和OpenCV GPU框架的射频数据(256扫描线×1552采样点)的信封检测的运行时间(N= 21)。
超声波背散射信号的信封检测是许多超声波应用中的基本步骤,例如基于包络统计数据的组织表征[4-10]。期望实时包络检测以便快速分析超声波RF信号。但是,CPU上的信封检测可以是耗时的过程。为了加速计算,并行GPU,尤其是GPU上通用计算的GPGPU,已经在包括机器学习和医学图像处理的许多领域中使用[21,22]。
CUDA(计算统一设备架构)和OpenCL平台是GPU计算中最广泛采用的两种编程模型。OpenCV是一个基于GPU框架的开源计算机视觉库。OpenCV GPU框架是基于CUDA平台实现的,使用简单灵活。OpenCV已经被用于各种超声应用,包括乳腺超声图像分割[14]和准实时超声后向散射统计参数成像(即超声Nakagami成像)[15]。然而,在我们之前的工作中,射频信号的包络检测是在CPU[15]上实现的,限制了超声Nakagami成像的帧率(1-3帧/秒)。在心脏组织的实时超声表征等应用中,对计算速度的要求很高。
迄今为止,尚未进行使用OpenCV GPU的定量超声研究。据我们所知,这项工作是第一个使用OpenCV GPU框架进行反向散射信封检测的框架。在这项工作中,我们建议使用OpenCV GPU框架进行超声RF信号的包络检测。实验结果表明,OpenCV GPU框架能够进行实时包络检测。所提出的基于OpenCV GPU的包络检测方法可以用于各种超声组织表征应用,要求快速计算反向散射RF信号的包络。
国家自然科学基金资助项目(no . 71661167001, no . 71781260096);北京工业大学国际科研合作种子基金资助。关键词:岩石力学,蠕变,蠕变特性,蠕变特性
林瑞腾博士
研究文章
收稿日期:2017年7月22日
录用日期:2017年8月14日
发布日期:2017年8月17日
©2017珠煌Z.这是根据创意公约归因许可的条款分发的开放式文章,其允许在任何媒体中不受限制地使用,分发和再现,只要原始作者和来源被记入。
基于OpenCV GPU框架的超声射频信号实时包络检测。医学仪器诊断工程doi 4: 10.15761/ mde .1000121
Rshuicai Wu,生命学院和生物工程学院,
北京工业大学,中国北京。
Po-Hsiang Tsui,医学影像和放射科学系,
横源大学医学院,台湾桃园。
简历:: Mat RFComplex(RF.Rows,RF.Cols,CV_32FC2); STD :: Vector combiner.push_back (rf); combiner.push_back(cv :: mat :: zeros(rf.size(),v_32fc1)); cv ::合并(Combiner,RFComplex); std::向量<简历:垫>分配器; splitter.push_back(cv :: mat(rfcomplex.rows,rfcomplex.cols, CV_32FC1)); splitter.push_back(cv :: mat(rfcomplex.rows,rfcomplex.cols, CV_32FC1)); cv :: mat rfspectrum = cv :: mat(rfcomplex.rows, rfComplex。Cols, CV_32FC2); //转发DFT. cv :: dft(rfcomplex,rfspectrum,dft_rows); CV ::乘法(rfspectrum,因子,rfspectrum,1.0,cv_32fc2); //逆DFT. cv::dft(rfSpectrum, rfComplex, DFT_ROWS | dft_inverse); cv :: split(rfcomplex,splitter); //得到虚部 imag =拆分[1]; cv::multiply(imag, cv::Scalar(1.0/rf.cols), imag, 1.0, cv_32fc1); 简历::幅度(RF,IMAG,信封); |
表格1。C ++代码用于使用OpenCV CPU框架的信封检测。
CV :: GPU ::流流; cv::gpu::GpuMat rfGPU = cv::gpu::GpuMat行,射频。Cols, CV_32FC1); rfGPU.upload (rf); cv::gpu::GpuMat rfComplexGPU = cv::gpu::GpuMat行,rfGPU。Cols, CV_32FC2); std::向量<简历::gpu:: GpuMat >组合器; combiner.push_back(rfgpu); combiner.push_back(cv :: gpu :: gpumat(rfgpu.rows,rfgpu.cols,cv_32fc1,cv :: scalar(0)))); cv :: gpu :: merge(Combiner,RFComplexGPU,Stream); cv::gpu::GpuMat facorgpu = cv::gpu::GpuMat(rfGPU。行,rfGPU。Cols, CV_32FC2); factorgpu.upload(因素); cv :: gpu :: gpumat rfspectrumgpu = cv :: gpu :: gpumat(rfgpu.rows,rfgpu.cols,cv_32fc2); std::向量<简历::gpu:: GpuMat >分配器; splitter.push_back(cv :: gpu :: gpumat(rfgpu.rows,rfgpu.cols,cv_32fc1)); splitter.push_back(cv :: gpu :: gpumat(rfgpu.rows,rfgpu.cols,cv_32fc1)); //转发DFT. cv :: gpu :: dft(rfcomplexgpu,rfspectrumgpu,rfcomplexgpu.size(),dft_rows,stream); CV :: GPU ::乘法(rfspectrumgpu,factorgpu,rfspectrumgpu,1.0,cv_32fc2,流); //逆DFT. 简历:gpu:: dft (rfSpectrumGPU、rfComplexGPU rfComplexGPU.size (), dft_rows |dft_inverse,流); 简历:gpu:分裂(rfComplexGPU、分配器、流); //得到虚部 cv::gpu::GpuMat imagGPU = splitter[1]; cv :: gpu ::乘以(imaggpu,cv :: scalar(1.0 / rfgpu.cols),imaggpu,1.0,cv_32fc1,流); cv::gpu::GpuMat magGPU = cv::gpu::GpuMat(rfGPU。行,rfGPU。Cols, CV_32FC1); CV :: GPU ::幅度(RFGPU,ImagGPU,MagGPU,Stream); maggpu.download(信封); stream.waitforcompletion(); |
表格2。C ++代码用于使用OpenCV GPU框架的信封检测。
射频。ConvertTo(rf, CV_32FC1); 简历::垫图像放大(rf。行,射频。Cols, CV_32FC1); // imaginary part cv::Mat factor = cv::Mat::ones(rf。行,射频。Cols, CV_32FC2 ); for (int i = 0;我< rf.rows;+ + i) { for(int j = 1; j { factor.at 的因素。[1] = 2 and [1] = 1 and [1] = 1 and [1] = 2; 的因素。at 的因素。at } } CV :: Mat信封(RF.Rows,RF.Cols,CV_32FC1); |
表格3.。用于预处理的C ++代码。
OpenCV CPU的运行时间(ms) |
OpenCV GPU的运行时间(MS) |
|
---|---|---|
|
107. |
18. |
|
106. |
19. |
|
105. |
19. |
|
106. |
19. |
|
105. |
19. |
|
107. |
19. |
|
106. |
19. |
|
105. |
18. |
|
106. |
18. |
|
105. |
19. |
|
106. |
19. |
|
107. |
19. |
|
107. |
19. |
|
107. |
18. |
|
107. |
19. |
|
107. |
18. |
|
105. |
17. |
|
106. |
18. |
|
106. |
18. |
|
105. |
17. |
|
105. |
18. |
106.00±0.84. |
18.43±0.68 |
表格4.。使用OpenCV CPU和OpenCV GPU框架的射频数据(256扫描线×1552采样点)的信封检测的运行时间(N= 21)。
图1。超声辐射频率信号包络检测算法的流程图。
图2。使用OpenCV CPU(左)和OpenCV GPU(右)框架检测到从反向散射信封计算的乳房超声B模式图像的视觉比较。