使用MATLAB的k-Wave工具箱进行超声CT成像。k-Wave专门用于模拟声波在非均匀介质中的传播,非常适合进行超声衍射CT 和全波形反演这类前沿研究。
利用k-Wave进行超声CT仿真的核心工作流程:

k-Wave仿真核心步骤与代码框架
基于k-Wave进行透射式超声CT(重建声速分布)仿真的简化代码框架和说明。这里以最常见的2D仿真为例。
-
初始化仿真网格与定义介质
这是设置"虚拟实验环境"的第一步,定义计算区域和介质属性。
matlab% 清除环境并添加k-Wave路径 clear; close all; addpath(genpath('path_to_your_kWave_toolbox')); % 替换为你的k-Wave路径 % 1. 定义模拟的物理网格(单位:米) dx = 1e-4; % 网格间距 (决定空间分辨率) Nx = 256; % x方向网格数 Ny = 256; % y方向网格数 kgrid = kWaveGrid(Nx, dx, Ny, dx); % 2. 定义背景介质属性(例如水) medium.sound_speed = 1500 * ones(Nx, Ny); % 声速矩阵 (m/s) medium.density = 1000 * ones(Nx, Ny); % 密度矩阵 (kg/m^3) % 3. 定义待成像目标(例如一个高声速圆形体) [X, Y] = meshgrid(1:Nx, 1:Ny); circle_mask = (X - Nx/2).^2 + (Y - Ny/2).^2 < (Nx/8).^2; medium.sound_speed(circle_mask) = 1600; % 目标声速更高 % medium.density(circle_mask) = 1200; % 可同时修改密度 -
设置声源与传感器
模拟CT扫描中围绕物体的发射和接收换能器阵列。
matlab% 1. 定义超声源(发射换能器) - 采用平面波源阵列 source_mask = zeros(Nx, Ny); source_mask(1:2, Ny/4:3*Ny/4) = 1; % 左侧一条线作为源 source.p_mask = source_mask; source.p = createCWSignals(kgrid.t_array, 1e6, 1e6, 1); % 生成1MHz脉冲信号 % 2. 定义传感器阵列(接收换能器) - 分布在物体另一侧 sensor_mask = zeros(Nx, Ny); sensor_mask(end-1:end, Ny/4:3*Ny/4) = 1; % 右侧一条线作为接收阵列 sensor.mask = sensor_mask; % 记录压力随时间变化的全波形数据 sensor.record = {'p'}; -
运行k-Wave仿真
执行声波传播的数值计算,这是计算量最大的部分。
matlab% 设置模拟时间(要保证声波穿过整个区域) kgrid.t_array = makeTime(kgrid, medium.sound_speed_min); % 输入参数并运行模拟 input_args = {'PlotLayout', true, 'PlotSim', true}; % 可选:实时绘图 sensor_data = kspaceFirstOrder2D(kgrid, medium, source, sensor, input_args{:}); % sensor_data.p 包含了每个传感器位置记录的压力时间序列 -
从数据中重建图像
对于透射CT,最直接的方法是计算飞行时间来重建声速。
matlab% 1. 从传感器数据中提取飞行时间 (ToF) % 例如,找到每个接收通道信号首次到达的峰值时间 tof_data = zeros(size(sensor_data.p, 2), 1); for i = 1:size(sensor_data.p, 2) signal = sensor_data.p(:, i); [~, idx] = max(envelope(signal)); % 使用包络检测峰值 tof_data(i) = kgrid.t_array(idx); end % 2. 将ToF数据转换为投影数据(正弦图) % 这里需要根据你的源-传感器几何关系来组织数据。 % 一个简单例子:对于多个角度,重复仿真并收集ToF % 3. 使用CT重建算法(如滤波反投影FBP)重建声速扰动图 angles = 0:1:179; % 假设旋转了180个角度 sinogram = []; % 这里应将每个角度的tof_data排列成sinogram % ... (数据排列代码) reconstructed_image = iradon(sinogram, angles, 'linear', 'Ram-Lak', 1.0, Nx); % reconstructed_image 即为重建的声速分布图像参考代码 超声CT成像仿真 www.youwenfan.com/contentcsn/95802.html
要点与进阶
-
模式选择 :上述框架是透射模式 。若想仿真反射/散射模式 ,需将源和传感器放在同侧,并重建反射体图像,通常使用合成孔径聚焦技术。
matlab% 反射模式SAFT重建的核心思路(伪代码) for each 发射源位置 for each 接收传感器位置 计算从源到成像点到传感器的双程时间 将接收信号中对应时间的幅值叠加到成像点 end end -
计算资源 :k-Wave仿真(特别是3D或高分辨率)非常消耗内存和计算时间。务必从小网格(如128x128) 开始测试。
-
学习路径:
- 从官方示例开始 :运行
k-Wave Toolbox/Examples下的示例,特别是example_xxx_tomography相关文件,这是最快的学习方式。 - 理解每个参数 :仔细阅读
help kspaceFirstOrder2D和文档,理解medium.alpha_coeff(衰减)、PML(吸收边界)等参数的影响。 - 进阶-全波形反演 :这是k-Wave最强大的应用之一。你可以基于k-Wave的正演引擎,构建目标函数,利用优化工具箱(如
fmincon)或专门的FWI代码包进行反演,但这需要深厚的数值优化功底。
- 从官方示例开始 :运行