news 2026/6/10 23:45:57

CT成像仿真,采用滤波反投影算法,Matlab代码,主要包括生成投影信号,信号傅立叶变换,滤波...

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CT成像仿真,采用滤波反投影算法,Matlab代码,主要包括生成投影信号,信号傅立叶变换,滤波...

CT成像仿真,采用滤波反投影算法,Matlab代码,主要包括生成投影信号,信号傅立叶变换,滤波,反变换等步骤,代码有详细注释


手把手实现CT滤波反投影仿真

CT成像的核心在于如何从投影数据重建出物体切片。滤波反投影(FBP)算法是经典方法之一,今天咱们用Matlab从零实现整个过程,顺便聊聊代码里的门道。


生成投影信号:Radon变换打底

CT投影的本质是获取物体在不同角度的线积分。Matlab自带的radon函数能快速生成仿真投影数据。这里我们构造一个包含椭圆和矩形的测试模型:

% 创建仿真模型(512x512像素) phantomSize = 512; model = phantom(phantomSize); % 设置0-179度共180个投影角度 theta = 0:179; % 生成投影数据(sinogram) [sinogram, sensorPos] = radon(model, theta);

这里phantom函数生成的标准模型包含不同密度的椭圆,radon输出的sinogram矩阵行代表传感器位置,列对应不同角度。生成的投影数据长这样:

![Sinogram示例图]


傅立叶变换:投影进频域

滤波反投影的关键步骤是对投影做傅立叶变换。这里有个细节:每条投影单独做一维FFT。

% 对每条投影做FFT(补零到2的整数次幂) nfft = 2^nextpow2(size(sinogram,1)); projection_fft = fft(sinogram, nfft);

补零操作(nextpow2)是为了加速FFT计算。此时projection_fft的每列存储的是对应角度投影的频谱。这一步相当于把投影数据从时域搬到频域,为后续滤波做准备。


滤波操作:Ram-Lak滤波器上场

频域滤波是为了抑制星状伪影。这里实现最常用的Ram-Lak(斜坡)滤波器:

% 生成斜坡滤波器 rampFilter = abs(linspace(-1,1,nfft)).'; % 频率轴修正(避免直流分量偏移) rampFilter = fftshift(rampFilter); % 频域相乘实现滤波 filtered_proj = projection_fft .* rampFilter;

滤波器的形状像个三角形,高频部分增益更大。fftshift的作用是让滤波器中心对应零频率点。注意这里是频域乘法,相当于时域的卷积操作。


反变换与反投影:空间域重建

滤波后的数据需要先做逆傅立叶变换,再通过反投影累加:

% 逆FFT取实部 filtered_proj_spatial = real(ifft(filtered_proj)); % 裁剪回原始长度 filtered_proj_spatial = filtered_proj_spatial(1:size(sinogram,1), :); % 反投影重建 reconImage = iradon(filtered_proj_spatial, theta, 'linear','Ram-Lak', 1, phantomSize);

这里iradon函数实现了反投影的积分操作。自己写反投影循环其实更直观:

% 手动反投影(核心代码段) recon = zeros(phantomSize); for i = 1:length(theta) proj = filtered_proj_spatial(:,i); recon += backproject(proj, theta(i), phantomSize); end

其中backproject函数需要实现将投影值沿角度反方向散布到图像网格的操作。这部分涉及坐标变换,代码略长但逻辑清晰。


结果对比与调参心得

运行完整代码后,重建图像与原始模型的对比:

![重建结果对比图]

几个踩坑经验:

  1. 滤波时未做fftshift会导致相位错位,图像出现重影
  2. 投影数据补零不足会引入高频振荡伪影
  3. 反投影时的插值方法(线性 vs 最邻近)显著影响边缘清晰度

完整代码已在GitHub开源(地址示例:github.com/xxx/ct-fbp-demo),包含交互式参数调节模块。修改滤波器类型(试试Shepp-Logan)、调整投影角度数,立马能看到重建效果的变化——动手试试才是理解算法的最佳姿势!


后记

虽然现在深度学习在CT重建中很火,但掌握传统FBP算法依然重要。通过自己写代码,才能真正理解那些公式背后的物理意义。下次咱们可以聊聊怎么用GPU加速反投影——毕竟180个角度循环跑起来,Matlab还是挺吃力的...

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 15:47:59

还在用传统MLOps?Open-AutoGLM 云带来的6大颠覆性变革

第一章:还在用传统MLOps?Open-AutoGLM 云带来的6大颠覆性变革随着生成式AI与大模型技术的迅猛发展,传统MLOps在模型训练、部署和运维方面逐渐暴露出流程僵化、迭代缓慢、资源利用率低等问题。Open-AutoGLM 云平台应运而生,基于全链…

作者头像 李华
网站建设 2026/6/10 13:52:23

Vue3重点突破09,Suspense组件:轻松搞定异步组件加载与加载状态管理

在前端开发中,异步组件加载是优化页面性能的常用手段——通过按需加载非首屏必要的组件,减少初始加载体积,提升页面打开速度。但随之而来的问题是:异步加载过程中,如何优雅地展示加载状态?如何处理加载失败…

作者头像 李华
网站建设 2026/6/10 15:58:01

(Open-AutoGLM 2.0下载安装全流程):从获取权限到运行成功的终极教程

第一章:Open-AutoGLM 2.0安装前的准备工作在部署 Open-AutoGLM 2.0 之前,必须确保系统环境满足其运行依赖。该框架对硬件资源、操作系统版本及核心依赖库有明确要求,准备不当可能导致安装失败或运行异常。系统与硬件要求 操作系统&#xff1a…

作者头像 李华
网站建设 2026/6/10 15:50:53

安卓/iOS如何流畅运行Open-AutoGLM?这3种方案你必须掌握

第一章:手机部署Open-AutoGLM的挑战与前景在移动设备上部署大型语言模型(LLM)如 Open-AutoGLM,正成为边缘计算与人工智能融合的重要方向。尽管手机算力持续提升,但受限于内存容量、功耗控制与散热能力,直接…

作者头像 李华
网站建设 2026/6/10 11:42:27

云安全的灵魂:责任共担模型详解与新手避坑指南

云安全是网络安全领域目前需求最旺盛、技术迭代最快的方向之一。简单说,它专为保护云上的一切(数据、应用、基础设施)而生。 为了让你快速建立系统认知,下图揭示了其核心架构与关键领域: #mermaid-svg-6KaMFiSdunApyX…

作者头像 李华