光声成像领域里应用最广泛的就是延迟求和算法,Delay and Sum 简称DAS, 由于该算法较其他反投影算法具有运算速度快的优势,所以多用于实时光声成像设备中。
下面结合项目场景来简单介绍DAS算法的代码实现:
有一台发射1064nm激光脉冲的激光器,每发射一次激光脉冲照射生物组织(比如女性胸部进行光声成像,以有助于乳腺癌的检查),那么激发的超声波就被一个半环形的超声阵列所接收。
该半环形阵列共有128个超声阵元,半环的半径是15cm,用来对女性胸部进行光声成像,以有助于乳腺癌的检查。
采样频率为40MHz, 每通道采样3000点,那么每帧采样数据采用DAS算法来进行二维成像,DAS算法伪代码如下所示:
% 重建频率,单位:MHz
fs = 40;
% 阵列阵元数量
sensor_num = 128;
% 每通道采样点
sample_num = 3000;
% 重建图像的x,y长度,单位:mm
x_size = 90;
y_size = 30;
% 设置声速, 单位:mm/ms
sound = 1.500;
% 重建图像的x,y轴的分辨率,单位:每毫米像素数
x_resolution_factor = 10;
y_resolution_factor = 10;
% 根据重建范围和分辨率,计算出重建图像的x,y坐标区域,分别保存到x_img, y_img;
% 构建半环形阵列的阵元x-y坐标, 分别保存在x_sensors, y_sensors
% 分配一个二维图像数组,用来保存DAS算法重建出的光声图像
one_img = zeros(x_pixel, y_pixel, 'single', 'gpuArray');
% 采样的一帧数据为pa_data, 格式是二维数组,sample_num * sensor_num大小
% 该圈上的所有换能器参与图像重建计算
for i_sensor = 1:sensor_num
% 计算每个成像的像素点到超声阵元的距离
dx = x_img - x_sensors(i_sensor);
dy = y_img - y_sensors(i_sensor);
distance = sqrt(dx.^2 + dy.^2 + dz.^2);
% 根据距离计算出对应的延时,再结合采样率和超声波在生物组织中传播的声速计算出对应的采样下标
idx = round(distance * fs / sound) + delay;
idx(idx > sample_num) = 1;
idx(idx < 1) = 1;
% 根据采样下标去反投影生物组织
img_tmp = pa_data(idx);
one_img = one_img + img_tmp;
end
% 显示重建的光声图像
figure; imshow(one_img);