看看最近的文章

使用OpenCV GPU框架的超声辐射信号的实时包络检测

zh煌Z.

北京理工大学生命科学与生物工程学院,北京

北京理工大学信息技术学院,北京

魏伟W.

北京理工大学信息技术学院,北京

水头W.

北京理工大学生命科学与生物工程学院,北京

Kebin J

北京理工大学信息技术学院,北京

Chang KJ

台北市国立台湾大学附属医院外科

TSUI PH.

台湾桃园,长庚大学医学院影像与放射学系

台湾桃园省龙涌大学和昌涌纪念医院医学影像研究中心

台湾桃园龙益纪念医院医学成像与干预系

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]进行计算,涉及五个步骤的算法:

  1. 定义复杂的矢量C,其真实的部分是S.和虚部是零矢量。
  2. 行为N-指向DFT[20]到C和复杂的矢量D.得到了。
  3. 为了K.TH.样本点,如果,让真实的部分和虚构部分乘以2;如果,让真实的部分和虚构的部分是零。
  4. 行为N-点逆DFT[20]到D.和复杂的矢量V.得到了。
  5. 希尔伯特变换一世TH.扫描线S.被计算为虚构的部分V.除以N

在本研究中,使用具有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;

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 (i,j)[0] = 2;

的因素。[1] = 2 and [1] = 1 and [1] = 1 and [1] = 2;

的因素。at(i, rf.cols-j)[0] = 0;

的因素。at(i, rf.cols-j)[1] = 0;

}

}

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);北京工业大学国际科研合作种子基金资助。关键词:岩石力学,蠕变,蠕变特性,蠕变特性

利益冲突

两位作者宣称他们没有相互竞争的利益。

参考

  1. 高速公路(2015)诊断超声:成像和血流测量,第2版。Boca Raton:CRC压力机。
  2. Szabo TL(2014)超声诊断成像:里外,第二版。纽约:学术出版社。
  3. insana MF,Hall TJ(1990)来自反向散射系数测量的参数超声成像:图像形成和解释。超声。成像12:245-267。[十字架]
  4. Mamou J,Oelze ML(2013)软组织中的定量超声。海德堡:斯普林克。
  5. 关键词:定量超声,包络统计,后向散射系数成像,超声诊断IEEE Trans Ultrason Feroelelentr频率控制63:336-351。[十字架]
  6. 徐ph,马海英,周智,何mc,李永华(2014)基于窗口调制的复合Nakagami成像技术。超声波54:1448-1459。[十字架]
  7. Tsui ph,Tsai Yw(2015)通过组合多焦点图像重构和噪声辅助相关算法来减少超声Nakagami成像的伪影。超声成像37:53-69。[十字架]
  8. Tsui ph,WAN YL,Tai Di,Shu YC(2015)估计对超声NAKAGAMI成像的影响可视化瑞利分布对瑞利分布的瑞利分布的反向散射统计变化。超声波Med Biol.41:2240-2251。[十字架]
  9. Al-Kadi OS,Chung Dy,Cousios CC,Noble JA(2016)异质组织表征使用超声:分形分析反向散射模型对肝脏肿瘤的比较。超声波Med Biol.42:1612-1626。[十字架]
  10. (2016)统一统计和光谱定量超声技术的概念。IEEE转医学成像35:488-500。[十字架]
  11. Parker KJ,Doyley MM,Rubens DJ(2011)成像组织的弹性特性:20年的观点。物理Med Biol.56: R1-1R29。[crossref]
  12. Sarvazyan A, Hall TJ, Urban MW, Fatemi M, Aglyamov SR, et al.(2011)弹性成像——医学影像学的一个新兴分支的综述。Curr Med Imaging Rev7:255-282。[crossref]
  13. Bradski G,Kaehler A(2008)学习OpenCV:与OpenCV库的计算机愿景。塞巴斯托波尔,加利福尼亚州:奥里利媒体。
  14. 周Z,Wu W,Wu S,Tsui ph,Lin Cc等。(2014)基于平均换档和图纸切割的半自动乳房超声图像分割。超声成像36:256-276。[十字架]
  15. 周Z,吴S,Wang Cy,MA HY,Lin CC等。(2015)使用实时超声Nakagami成像与频率和时间复合技术相结合监控射频消融。普罗斯一体10:e0118030。[十字架]
  16. Pulli,K,Baksheev A,Kornyakov K,Eruhimov V(2012)与OpenCV的实时计算机视觉。Commun ACM55岁:61 - 69。
  17. Hahn Sl(1996)Hilbert在信号处理中变换。波士顿:Artech House,Inc。
  18. Potamianos A,Maragos P(1994)能源算子和Hilbert将PProCh转变为信号和语音解调的比较。信号过程37: 95 - 120。
  19. yu c,张c,谢L(2012)超声成像基于包络信号的解卷积算法。信号过程92:793-800。
  20. OPPENHEIM A,Schafer R(2010)离散时间信号处理,第三个ED。上部马鞍河,NJ:Prentice Hall
  21. Eklund A,Dufort P,Forsberg D,LAConte SM(2013)GPU的医学图像处理 - 过去,现在和未来。医学图像肛门17:1073-1094。[crossref]
  22. Smistad E,Falch TL,Bozorgi M,Elster AC,Lindseth F(2015)GPU的医学图像细分 - 全面审查。医学图像肛门20:1-18。[crossref]

编辑信息

主编辑

林瑞腾博士

文章类型

研究文章

出版历史

收稿日期:2017年7月22日
录用日期:2017年8月14日
发布日期:2017年8月17日

版权

©2017珠煌Z.这是根据创意公约归因许可的条款分发的开放式文章,其允许在任何媒体中不受限制地使用,分发和再现,只要原始作者和来源被记入。

引用

基于OpenCV GPU框架的超声射频信号实时包络检测。医学仪器诊断工程doi 4: 10.15761/ mde .1000121

通讯作者

rshuicai wu.

Rshuicai Wu,生命学院和生物工程学院,
北京工业大学,中国北京。


Po-Hsiang徐

Po-Hsiang Tsui,医学影像和放射科学系,
横源大学医学院,台湾桃园。

简历:: Mat RFComplex(RF.Rows,RF.Cols,CV_32FC2);

STD :: Vector Combiner;

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 (i,j)[0] = 2;

的因素。[1] = 2 and [1] = 1 and [1] = 1 and [1] = 2;

的因素。at(i, rf.cols-j)[0] = 0;

的因素。at(i, rf.cols-j)[1] = 0;

}

}

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模式图像的视觉比较。