当前位置: 首页 > news >正文

超声原始数据重构成B扫成像的MATLAB实现

基本原理

  1. 原始RF数据:超声探头接收的原始射频信号
  2. 包络检测:提取RF信号的幅度信息
  3. 对数压缩:压缩动态范围以适应显示
  4. 时间增益补偿(TGC):补偿深度相关的信号衰减
  5. 扫描转换:将数据映射到图像坐标系

MATLAB代码

function ultrasound_bscan_reconstruction()% 超声B扫成像重建close all; clc;% 生成模拟超声RF数据[rf_data, fs, c] = simulate_ultrasound_data();% 显示原始RF数据display_raw_rf(rf_data, fs, c);% 重建B超图像b_mode_image = reconstruct_bscan(rf_data, fs, c);% 显示最终B超图像display_bscan_image(b_mode_image);
endfunction [rf_data, fs, c] = simulate_ultrasound_data()% 模拟超声RF数据生成c = 1540;               % 声速 (m/s)fs = 100e6;             % 采样频率 (Hz)num_samples = 1500;     % 每条扫描线采样点数num_lines = 128;        % 扫描线数量depth = 0.04;           % 成像深度 (m)% 创建时间和空间轴t = (0:num_samples-1)/fs;   % 时间轴z = t * c / 2;              % 深度轴% 生成扫描线位置 (线性阵列)x_pos = linspace(-0.02, 0.02, num_lines);% 初始化RF数据矩阵rf_data = zeros(num_samples, num_lines);% 添加组织模型中的散射点scatterers = [% x(m), z(m), 反射强度0.000, 0.010, 1.0;0.005, 0.015, 0.8;-0.004, 0.020, 0.9;0.000, 0.030, 1.2;0.008, 0.025, 0.7;-0.007, 0.018, 0.6;];% 添加高反射界面 (模拟器官边界)z_boundary = 0.012:0.002:0.038;for i = 1:length(z_boundary)scatterers = [scatterers; linspace(-0.015, 0.015, 20)', repmat(z_boundary(i), 20, 1), repmat(1.5, 20, 1)];end% 为每条扫描线生成RF信号for line = 1:num_lines% 探头脉冲响应 (高斯调制正弦波)t_pulse = (-10:10)/fs * 5;pulse = exp(-(t_pulse*1e6).^2) .* sin(2*pi*5e6*t_pulse);% 初始化扫描线信号line_signal = zeros(num_samples, 1);% 添加散射点响应for s = 1:size(scatterers, 1)dx = scatterers(s, 1) - x_pos(line);dz = scatterers(s, 2);distance = sqrt(dx^2 + dz^2);  % 到散射点的距离% 计算往返时间time_of_flight = 2 * distance / c;% 找到最近的采样点sample_idx = round(time_of_flight * fs) + 1;% 确保在有效范围内if sample_idx > 10 && sample_idx < num_samples - 10% 添加脉冲响应start_idx = sample_idx - 10;end_idx = sample_idx + 10;line_signal(start_idx:end_idx) = line_signal(start_idx:end_idx) + ...scatterers(s, 3) * pulse';endend% 添加噪声和系统增益变化line_signal = line_signal + 0.02 * randn(size(line_signal));rf_data(:, line) = line_signal;end% 添加系统增益随深度变化 (模拟TGC效果)tgc_gain = linspace(1, 5, num_samples)';rf_data = rf_data .* repmat(tgc_gain, 1, num_lines);
endfunction display_raw_rf(rf_data, fs, c)% 显示原始RF数据figure('Name', '原始RF数据', 'Position', [100, 100, 900, 600]);% 计算深度轴num_samples = size(rf_data, 1);t = (0:num_samples-1)/fs;depth = t * c / 2;% 显示单条RF信号subplot(2, 2, [1, 3]);plot(t*1e6, rf_data(:, round(size(rf_data, 2)/2)));xlabel('时间 (\mus)');ylabel('幅度');title('单条扫描线RF信号');grid on;% 显示RF数据图像subplot(2, 2, 2);imagesc([], depth*1000, rf_data);colormap(gray);colorbar;title('RF数据矩阵');ylabel('深度 (mm)');xlabel('扫描线索引');axis tight;% 显示RF数据幅度谱subplot(2, 2, 4);[pxx, f] = pwelch(rf_data(:, round(size(rf_data, 2)/2)), [], [], [], fs);plot(f/1e6, 10*log10(pxx));xlabel('频率 (MHz)');ylabel('功率谱密度 (dB/Hz)');title('RF信号频谱');grid on;xlim([0, 20]);
endfunction b_mode_image = reconstruct_bscan(rf_data, fs, c)% 重建B超图像% 参数设置f0 = 5e6;       % 中心频率 (Hz)bw = 0.7;       % 带宽系数% 获取数据尺寸[num_samples, num_lines] = size(rf_data);% 步骤1: 带通滤波rf_filtered = bandpass_filter(rf_data, fs, f0, bw);% 步骤2: 包络检测 (希尔伯特变换)analytic_signal = hilbert(rf_filtered);envelope = abs(analytic_signal);% 步骤3: 对数压缩log_compressed = 20 * log10(envelope + eps);  % 加eps避免log(0)% 步骤4: 时间增益补偿 (TGC)depth = ((0:num_samples-1)/fs) * c / 2;tgc = 1.0 + 1.5 * depth / max(depth);  % 线性增益补偿tgc_corrected = log_compressed .* tgc';% 步骤5: 降采样 (可选)dec_factor = 2;b_mode_downsampled = tgc_corrected(1:dec_factor:end, :);% 步骤6: 扫描转换 (此处为线性阵列,直接显示)b_mode_image = b_mode_downsampled;
endfunction filtered_data = bandpass_filter(data, fs, f0, bw)% 带通滤波器设计nyquist = fs/2;f_low = max(0, f0*(1 - bw/2));    % 低频截止f_high = min(nyquist, f0*(1 + bw/2)); % 高频截止% 设计滤波器[b, a] = butter(4, [f_low, f_high]/nyquist, 'bandpass');% 应用滤波器filtered_data = filtfilt(b, a, data);
endfunction display_bscan_image(b_mode_image)% 显示B超图像figure('Name', 'B超图像重建', 'Position', [100, 100, 1000, 800]);% 归一化图像img = b_mode_image - min(b_mode_image(:));img = img / max(img(:));% 显示图像imagesc(img);colormap(gray);title('重建的B超图像');xlabel('扫描线索引');ylabel('深度采样点');% 添加深度刻度 (示例值)depth_ticks = linspace(0, size(b_mode_image, 1), 6);depth_labels = round(linspace(0, 40, 6)); % 假设最大深度40mmset(gca, 'YTick', depth_ticks, 'YTickLabel', depth_labels);ylabel('深度 (mm)');% 添加颜色条colorbar;% 添加图像处理选项uicontrol('Style', 'pushbutton', 'String', '增强对比度', ...'Position', [20 20 100 30], 'Callback', @enhance_contrast);uicontrol('Style', 'pushbutton', 'String', '平滑处理', ...'Position', [140 20 100 30], 'Callback', @apply_smoothing);uicontrol('Style', 'pushbutton', 'String', '边缘增强', ...'Position', [260 20 100 30], 'Callback', @edge_enhancement);% 回调函数function enhance_contrast(~, ~)img_enhanced = imadjust(img);imagesc(img_enhanced);colormap(gray);title('对比度增强的B超图像');endfunction apply_smoothing(~, ~)h = fspecial('gaussian', [5 5], 1.5);img_smoothed = imfilter(img, h);imagesc(img_smoothed);colormap(gray);title('平滑处理后的B超图像');endfunction edge_enhancement(~, ~)img_edges = img - imgaussfilt(img, 2) + 0.5;img_edges(img_edges < 0) = 0;img_edges(img_edges > 1) = 1;imagesc(img_edges);colormap(gray);title('边缘增强的B超图像');end
end

1. 模拟超声原始数据生成

  • 创建模拟组织环境(散射点模型)
  • 生成超声脉冲响应(高斯调制正弦波)
  • 模拟扫描线采集过程
  • 添加时间增益补偿(TGC)和随机噪声

2. 原始RF数据显示

  • 单条扫描线RF信号波形
  • RF数据矩阵图像
  • RF信号频谱分析

3. B扫成像重建处理

  • 带通滤波:提取探头频带内的信号
  • 包络检测:使用希尔伯特变换提取信号幅度
  • 对数压缩:压缩动态范围(40-60dB)
  • 时间增益补偿:补偿深度相关的信号衰减
  • 降采样:减少数据量(可选步骤)

4. B超图像显示

  • 显示重建的B超图像
  • 添加深度刻度
  • 交互式图像处理按钮:1对比度增强 2平滑处理 3边缘增强

参考 超声原始数据的重构成B扫成像的方法 www.youwenfan.com/contentcno/65820.html

重建过程关键步骤详解

  1. 带通滤波

    • 目的:去除低频噪声和高频干扰
    • 方法:设计Butterworth带通滤波器
    • 实现:bandpass_filter函数
  2. 包络检测

    • 目的:提取RF信号的幅度信息

    • 方法:希尔伯特变换获取解析信号

    • 数学表达:

      analytic_signal = hilbert(rf_signal);
      envelope = abs(analytic_signal);
      
  3. 对数压缩

    • 目的:将大动态范围压缩到适合显示的0-255范围

    • 方法:取对数并缩放

    • 公式:

      log_compressed = 20 * log10(envelope + eps);
      
  4. 时间增益补偿(TGC)

    • 目的:补偿深度增加导致的信号衰减

    • 方法:应用与深度成正比的增益曲线

    • 实现:

      tgc = 1.0 + 1.5 * depth / max_depth;
      tgc_corrected = log_compressed .* tgc';
      
  5. 扫描转换

    • 目的:将数据映射到图像坐标系
    • 注意:本代码模拟线性阵列探头,直接显示数据矩阵
    • 对于扇形扫描,需要插值到笛卡尔坐标系

运行结果

运行此代码将生成四个图形窗口:

  1. 原始RF数据显示(包含RF信号波形、数据矩阵和频谱)
  2. 重建的B超图像(显示组织结构和散射点)
  3. 交互式界面(提供图像增强选项)

B超图像将显示模拟的器官边界和散射点,您可以使用界面上的按钮进行图像增强处理。

这个实现提供了超声成像的基本原理演示,实际临床应用中的系统会更加复杂,包含更多优化和校正步骤。

http://www.rkmt.cn/news/153234.html

相关文章:

  • Open-AutoGLM插件下载难点解析,99%人忽略的3个关键步骤
  • stm32的PID控制算法
  • 专科生必看!9个高效降AI率工具推荐,轻松应对AIGC检测
  • 【Open-AutoGLM同类AI全景解析】:2024年最值得关注的5大国产自研智能引擎
  • Java毕设项目:基于springboot的学生军训管理系统(源码+文档,讲解、调试运行,定制等)
  • 2025 运动地板厂家综合实力排名 产能・专利・服务三维对比 - 爱采购寻源宝典
  • Java毕设选题推荐:基于springboot的校园传统文化交流系统整合诗词、书法、戏曲、传统节日等多元文化资源【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 2025年广东院校办公室搬迁公司权威推荐榜单:广东办公室搬家/广东搬家/广东长途搬运服务商精选 - 品牌推荐官
  • 程序员必须掌握的7个Open-AutoGLM高级用法(错过等于 losing next-gen coding edge)
  • 终于找到我想要的远程工具了!
  • 2025年混合气体IG541灭火系统批发厂家权威推荐榜单:混合气体灭火系统ig541/氮气IG100灭火系统/高压二氧化碳灭火系统源头厂家精选 - 品牌推荐官
  • 项目管理工具Kanass:轻量、简洁、开源、免费
  • 2025年处理青少年叛逆学校服务推荐:青少年叛逆学校推荐几家? - 深度智识库
  • 知识管理工具sward:轻量、简洁、开源、免费
  • Open-AutoGLM部署难题全解析:从依赖配置到服务启动一文搞懂
  • 2026届校招AI人才争夺战:互联网大厂提前开启“抢人大战”,争夺未来十年竞争格局的关键力量!
  • ‌从业务测试到测试开发:我的转岗心得与面试准备
  • 2025年AI界传奇职位揭秘:前沿部署工程师需求暴增800%——AI巨头争抢的复合型人才,你准备好了吗?
  • 测试开发工程师的核心竞争力是什么?不是只会写脚本
  • python学生公寓宿舍管理系统m46cm--lw
  • 钡铼技术:物联网软网关推荐,哪款才是适合你的
  • Libuv 从入门到精通完整教程
  • Linux下的SVN归档操作(仅针对内容的归档操作)
  • Open-AutoGLM核心技术拆解,一文看懂智能代码生成背后的秘密
  • 市场快评 · 今日复盘要点20251225
  • 从功能测试到顶尖SDET的跃迁路径
  • AI大模型时代品牌增长新引擎:GEO优化营销白皮书 - 速递信息
  • 智能打气泵设计pcba方案开发
  • 手把手教你部署Open-AutoGLM(附完整脚本+配置模板下载)
  • 2025年广州外贸获客公司权威推荐榜单:海外geo营销/geo海外推广/海外社媒营销源头公司精选 - 品牌推荐官