1. 引言
医疗超声成像作为一种无创、实时、低成本的医学影像技术,在临床诊断中发挥着至关重要的作用。随着计算能力的提升和人工智能技术的发展,超声图像系统模拟系统(Ultrasound Imaging System Simulator)已成为研究、开发和教学的重要工具。这类模拟系统能够生成逼真的超声图像,用于算法验证、系统优化和人员培训。
后处理算法是超声图像模拟系统中的关键环节,它负责对模拟生成的原始射频(RF)信号或波束形成后的数据进行处理,以生成最终可供临床解读的B模式图像。本文将深入探讨医疗超声图像系统模拟系统中后处理算法的核心原理、典型实现方法及其在实际应用中的考量。
2. 超声图像模拟系统概述
2.1 系统架构
一个典型的超声图像模拟系统通常包含以下模块:
- 声学模型:模拟超声波在组织中的传播、反射、散射和衰减。
- 探头模型:模拟超声探头的阵元特性、发射脉冲和接收灵敏度。
- 组织模型:定义仿体(phantom)的几何形状、声学参数(声速、密度、衰减系数)和散射子分布。
- 波束形成器:模拟延迟叠加(Delay-and-Sum, DAS)或其他高级波束形成算法。
- 后处理模块:对波束形成后的数据进行处理,生成最终图像。
2.2 模拟数据流
原始散射子模型 → 声场模拟 → 射频信号生成 → 波束形成 → 后处理 → B模式图像
3. 后处理算法的核心任务
后处理算法的主要目标是将波束形成后的射频数据转换为高质量、高对比度的B模式图像,其核心任务包括:
4. 关键后处理算法详解
4.1 包络检测
包络检测用于提取射频信号的幅度信息,常用方法包括:
希尔伯特变换法:
import numpy as np
from scipy.signal import hilbert
def envelope_detection_hilbert(rf_signal):
\”\”\”
使用希尔伯特变换进行包络检测
Args:
rf_signal: 输入的射频信号(复数或实数)
Returns:
envelope: 包络信号
\”\”\”
analytic_signal = hilbert(rf_signal)
envelope = np.abs(analytic_signal)
return envelope
正交解调法:
def envelope_detection_quadrature(rf_signal, fc, fs):
\”\”\”
正交解调法进行包络检测
Args:
rf_signal: 射频信号
fc: 载波频率
fs: 采样频率
Returns:
envelope: 包络信号
\”\”\”
t = np.arange(len(rf_signal)) / fs
I = rf_signal * np.cos(2 * np.pi * fc * t)
Q = rf_signal * np.sin(2 * np.pi * fc * t)
# 低通滤波
from scipy.signal import butter, filtfilt
b, a = butter(4, fc/fs, \’low\’)
I_filtered = filtfilt(b, a, I)
Q_filtered = filtfilt(b, a, Q)
envelope = np.sqrt(I_filtered**2 + Q_filtered**2)
return envelope
4.2 对数压缩
超声信号的动态范围可达60-100dB,而显示器通常只能显示约40dB的动态范围。对数压缩公式为:
I_display = A * log10(1 + B * I_envelope) + C
其中:
- I_envelope:包络检测后的信号强度
- A, B, C:可调参数,控制对比度和亮度
- I_display:压缩后的灰度值(0-255)
def log_compression(envelope, dynamic_range_db=60, max_gray=255):
\”\”\”
对数压缩函数
Args:
envelope: 包络信号
dynamic_range_db: 动态范围(dB)
max_gray: 最大灰度值
Returns:
compressed: 压缩后的图像数据
\”\”\”
# 避免log(0)
envelope = np.maximum(envelope, 1e-10)
# 转换为dB
envelope_db = 20 * np.log10(envelope)
# 归一化到动态范围
max_val = np.max(envelope_db)
min_val = max_val – dynamic_range_db
# 压缩到0-1范围
normalized = (envelope_db – min_val) / dynamic_range_db
normalized = np.clip(normalized, 0, 1)
# 转换为灰度值
compressed = normalized * max_gray
return compressed.astype(np.uint8)
4.3 时间增益补偿(TGC)
TGC用于补偿超声波随深度增加而衰减的问题,常用模型为:
G(z) = G0 * exp(2 * α * z * f)
其中:
- z:深度
- α:衰减系数(dB/cm/MHz)
- f:超声频率(MHz)
- G0:初始增益
def tgc_compensation(signal, depth, freq_mhz, attenuation_db=0.7, initial_gain=1.0):
\”\”\”
时间增益补偿
Args:
signal: 输入信号(按深度排列)
depth: 深度数组(cm)
freq_mhz: 超声频率(MHz)
attenuation_db: 衰减系数(dB/cm/MHz)
initial_gain: 初始增益
Returns:
compensated: 补偿后的信号
\”\”\”
# 计算衰减因子
attenuation_factor = attenuation_db * freq_mhz # dB/cm
# 计算增益曲线
gain = initial_gain * np.exp(2 * (attenuation_factor / 8.686) * depth)
# 应用增益补偿
compensated = signal * gain[:, np.newaxis] if signal.ndim > 1 else signal * gain
return compensated
4.4 扫描转换
对于扇形扫描的超声图像,需要将极坐标数据转换为笛卡尔坐标:
def scan_conversion_polar_to_cartesian(polar_data, theta_range, r_range, output_shape):
\”\”\”
极坐标到笛卡尔坐标的扫描转换
Args:
polar_data: 极坐标图像数据 [角度, 距离]
theta_range: 角度范围 [起始角, 结束角](弧度)
r_range: 距离范围 [最小距离, 最大距离]
output_shape: 输出图像尺寸 (高度, 宽度)


