超声延时聚焦原理及算法仿真

前言

本系列主要记录对超声原理的一些理解,如有错误或者不到位之处,请留言指出,谢谢。

说明

本文对超声前端中的聚焦成像理论进行了讨论,文末附有相关仿真代码。只是简单的仿真了延时的计算,仅供理解原理。

超声成像系统一般分为三个部分:前处理,信号处理,后处理。前处理又叫波束合成,这部分决定了超声成像的图像质量基础。其中,前处理的第一步就是超声的接收发送

∙ \bullet 前处理,包括超声的发射及接收。

超声发射的过程就是将N个逻辑通道控制K*N个物理阵元。这部分一般由FPGA进行控制,简单理解为超声探头是每次从n个阵元发射声波进行成像。

根据发射的方式分为 平 面 波 成 像 \color{red}{平面波成像} 聚 焦 成 像 \color{red}{聚焦成像}

平面波成像:全部阵元同时发射,形成一个平面波。由于一次发射接收就可以生成一幅超声图像,PWI 成像帧频高,极大地提高了成像速度。但缺点是缺少聚焦,单次生成的超声图像分辨率和对比度较差,还伴随一些伪影。

聚焦成像

聚焦成像:连续移动激励有效孔径内全部阵元,每次生成一条扫描线,最后组成一幅图像,缺点是帧率较低。
聚焦的原理就是通过施加不同延时激励晶体产生信号,当采用一个有序的时间间隔激发晶体,这些线状波阵面会产生波的干涉,形成所需的整体波面。其主要设计基于 惠 更 斯 原 理 \color{red}{惠更斯原理} ,将同相位的波形叠加,增强信号。超声延时聚焦原理及算法仿真_第1张图片

目前常用的成像方法为聚焦成像,超声发射场如下图。类似漏斗形状的成像场由近场、中场和远场构成。
超声延时聚焦原理及算法仿真_第2张图片

使用中场的信号进行成像,可以增强信号强度,提升图像质量。
这样的发射模式模式就会引出一个问题,探头上n个阵元依次进行发射,如何接收才能确保接收时序与发射时序匹配呢。这就引出了超声前处理中的延时聚焦原理。

超声延时聚焦原理及算法仿真_第3张图片

延时聚焦计算

n个阵元在发射到目标时的长短不同,所以需要对每次发射进行延时聚焦,从中心阵元向外部依次增加。回波计算同理,需要确定每次的回波数据时同一时间发出的,原理大概类似下图。
超声延时聚焦原理及算法仿真_第4张图片

假设目标到阵元的距离为 s s s,阵元的间距为 b b b,则中心阵元依次向外的距离为$L_1、L_2。 $探测深度为 10 m m 10mm 10mm;两个阵元中心间隔为 b = 0.5 m m b=0.5mm b=0.5mm;
L 1 = 1.5 b = 0.75 m m , L 2 = 2.5 b = 1.25 m m L_1 = 1.5b = 0.75mm,L_2 = 2.5b = 1.25mm L1=1.5b=0.75mm,L2=2.5b=1.25mm
通过以上计算出每号阵元的线差,比如1号阵元与2号阵元的线差就是 δ 1 = ∥ s 2 + L 1 2 − s 2 + L 2 2 ∥ = ∥ 1 0 2 + 0.7 5 2 − 1 0 2 + 1.2 5 2 ∥ = 0.04973 m m \delta_1 = \lVert \sqrt{s^2+L_{1}^2}-\sqrt{s^2+L_{2}^2} \lVert=\lVert \sqrt{10^2+0.75^2}-\sqrt{10^2 + 1.25^2} \lVert= 0.04973mm δ1=s2+L12 s2+L22 =102+0.752 102+1.252 =0.04973mm,按照超声在人体组织中传播时间 $c= 1540m/s $,可以得到延时参数
τ 1 = δ 1 c = 32.29 n s \tau _1 = \frac{\delta_1}{c} = 32.29ns τ1=cδ1=32.29ns
接下来第二个阵元的延时时间就等于 τ 1 + τ 2 , 所 以 当 指 定 探 头 类 型 和 目 标 深 度 时 , 延 时 参 数 能 够 计 算 得 到 且 左 右 对 称 。 例 如 一 个 孔 径 由 64 个 阵 元 组 成 , 一 共 需 要 计 算 \tau_1 + \tau_2 , 所以当指定探头类型和目标深度时,延时参数能够计算得到且左右对称。例如一个孔径由64个阵元组成,一共需要计算 τ1+τ2,64(64-2)/2 = 31个延时参数。

延时计算公式 τ n = s 2 + ( n + 0.5 ) 2 − s 2 + ( n + 1.5 ) 2 c \tau_n = \frac{\sqrt{s^2+(n+0.5)^2}-\sqrt{s^2+(n+1.5)^2}}{c} τn=cs2+(n+0.5)2 s2+(n+1.5)2

第一个延时值 τ 1 \tau_1 τ1,第二个延时值为 τ 1 + τ 2 \tau_1 + \tau_2 τ1+τ2,第n个延时值为 τ 1 + τ 2 + ⋯ + τ n \tau_1 +\tau_2+\dots + \tau_n τ1+τ2++τn

所以最终64阵元的延时仿真结果如图:
超声延时聚焦原理及算法仿真_第5张图片
横坐标是阵元序号,纵坐标是延时的值。通过FiledII仿真后的聚焦结果如下,可以看到仿真探头的输出波形有一个明显的在中场有明显的聚焦结果。
超声延时聚焦原理及算法仿真_第6张图片

由于在发射时使用了延时激励,接收回波时的各阵元回波本身存在相应的相位差,所以需要进行接收端进行相同的延时补偿。
超声延时聚焦原理及算法仿真_第7张图片

按照回波数据来说每一个数据的时刻可能没有恰好落在延时参数上,所以回波数据的延时选择更符合折线段。

回波结果

每次一个孔径发射产生一条线,m个孔径依次发射就产生了由m条线组成的一帧超声图像。

由以上结果可以看出,延时参数由中心孔径依次向外增加。

到这一步以后大概就清楚聚焦成像和延时的作用了。但是这样想,如果增加孔径中阵元的数目,那得到的图像结果是不是会更清楚。增加阵元数会导致计算量增大,帧率降低,且近场的成像效果变差。
考虑到这点,目前超声的前处理还会增加孔径变化,按照目标的深度动态调节孔径中阵元的数目,以达到远近场都可以有较高的分辨率。

以上操作前处理中的一部分,为了提高成像结果,还会将接收回来的数据进行线复合等操作,这个算法在以后会提到。

附录代码


```python
def DelayCalac(s:float,b:float):
    """
        定义一个延时激励函数;
        input:探测深度s;相邻阵元中心间距b;阵元数量n(单边);
        output:延时参数的列表t
    """
    c = 0.00154  # mm/ns
    n = 32
    t =[]
    delta_t = float(0)
    for i in range(1,n+1):
        s1 = sqrt_(s,(i+0.5)*b)
        s2 = sqrt_(s,(i+1.5)*b)
        delta_t = abs(s1-s2)/c + delta_t
        t.append(delta_t)
    return  t


def sqrt_(a:int,b:int):
    """
        定义一个开方函数;
        输入为a,b
        输出为\sqrt(a^2 + b^2)
    """
    import math
    res = float(math.sqrt(pow(a,2)+pow(b,2)))
    return res

def plot_list(list1:list):
    """
        绘制列表反转后与列表相连的结果图像 321 123
        输入为列表
    """
    import matplotlib.pyplot as plt
    list2 = list1[::-1]
    res_list = list2 + list1
    x= range(len(res_list))
    plt.plot(x,res_list,'o')
    plt.show()

if __name__ == '__main__':
    t = DelayCalac(100,0.5)
    print(t,len(t))
    plot_list(t)


你可能感兴趣的:(python,算法)