滤波反投影重建算法(FBP)实现及应用(matlab)

滤波反投影重建算法实现及应用(matlab)

1. 滤波反投影重建算法原理

滤波反投影重建算法常用在CT成像重建中,背后的数学原理是傅立叶变换:对投影的一维傅立叶变换等效于对原图像进行二维的傅立叶变换。(傅立叶中心切片定理)

CT重建算法大致分为解析重建算法和迭代重建算法,随着CT技术的发展,重建算法也变得多种多样,各有各的有特点。本文使用目前应用最广泛的重建算法——滤波反投影算法(FBP)作为模型的基础算法。FBP算法是在傅立叶变换理论基础之上的一种空域处理技术。它的特点是在反投影前将每一个采集投影角度下的投影进行卷积处理,从而改善点扩散函数引起的形状伪影,重建的图像质量较好。

这里写图片描述

上图应可以清晰的描述傅立叶中心切片定理的过程:对投影的一维傅立叶变换等效于对原图像进行二维的傅立叶变换

傅立叶切片定理的意义在于,通过投影上执行傅立叶变换,可以从每个投影中得到二维傅立叶变换。从而投影图像重建的问题,可以按以下方法进行求解:采集不同时间下足够多的投影(一般为180次采集),求解各个投影的一维傅立叶变换,将上述切片汇集成图像的二维傅立叶变换,再利用傅立叶反变换求得重建图像。

投影相关知识请参考fbp的matlab实现

2. 滤波反投影重建算法过程(以平行束为例)

投影重建的过程是,先把投影由线阵探测器上获得的投影数据进行一次一维傅立叶变换,再与滤波器函数进行卷积运算,得到各个方向卷积滤波后的投影数据;然后把它们沿各个方向进行反投影,即按其原路径平均分配到每一矩阵单元上,进行重叠后得到每一矩阵单元的CT值;再经过适当处理后得到被扫描物体的断层图像
算法步骤如下:
1. 将原始投影进行一次一维傅立叶变换
2. 设计合适的滤波器,在φ_i的角度下将得到原始投影p(x_r,φ_i)进行卷积滤波,得到滤波后的投影。
3. 将滤波后的投影进行反投影,得到满足x_r=r cos⁡((θ - φ_i))方向上的原图像的密度。
4. 将所有反投影进行叠加,得到重建后的投影。

3. 滤波器(滤波函数)和内插函数的选取

由于直接使用反投影算法会存在两个对实验结果影响很不好的因素:

  1. 不准确的数据重建图像就会产生各种伪影。
  2. 投影的数据是天然离散的,处理不当的话会产生很大的误差。

常见的滤波器有R-S滤波函数和S-L滤波函数。R-L滤波函数滤波计算简单,避免了大量的正弦、余弦计算,得到的采样序列分是分段现行的,并没有明显的降低图像质量,所以重建图像轮廓清楚,空间分辨率高。

常见的插值方法有最近邻插值和双线插值,最近邻插值即将离散点中间的缺失值用离它最近的整数处的投影值来替代。

4. FBP的matlab实现

使用R-L滤波器和最近邻插值方法

clc,clear;
%% 各个参数信息
%重建后图片像素个数
M=512;%建议先和接收传感器的个数一样

%旋转的角度 180次旋转
theta=xlsread('angles_180_3.xlsx','Sheet1','a2:a181');

%投影为512行,180列的数据,列的数据对应每一次旋转,512个接收传感器
R=xlsread('Accessory_A.xls','附件3');

%由投影进行反变换
size(R,1);%512

% 设置快速傅里叶变换的宽度
width = 2^nextpow2(size(R,1));  

%% 对投影做快速傅里叶变换并滤波
%傅立叶变换
proj_fft = fft(R, width);

% filter 滤波
% R-L是一种基础的滤波算法
filter = 2*[0:(width/2-1), width/2:-1:1]'/width;

% 滤波后结果 proj_filtered
proj_filtered = zeros(width,180);
for i = 1:180
    proj_filtered(:,i) = proj_fft(:,i).*filter;
end
figure
subplot(1,2,1),imshow(proj_fft),title('傅立叶变换')
subplot(1,2,2),imshow(proj_filtered),title('傅立叶变换+滤波')

%% 逆快速傅里叶变换并反投影
% 逆快速傅里叶变换 proj_ifft
proj_ifft = real(ifft(proj_filtered)); 
figure,imshow(proj_ifft),title('逆傅立叶变换')

%反投影到x轴,y轴
fbp = zeros(M); % 假设初值为0
for i = 1:180
    rad = theta(i);%弧度, %这个rad 是投影角,不是投影线与x轴夹角,他们之间相差 pi/2
    for x = 1:M
        for y = 1:M
            %{
            %最近邻插值法
            t = round((x-M/2)*cos(rad)-(y-M/2)*sin(rad));%将每个元素舍X入到最接近的整数。
            if t<size(R,1)/2 && t>-size(R,1)/2
                fbp(x,y)=fbp(x,y)+proj_ifft(round(t+size(R,1)/2),i);
            end
            %}
            t_temp = (x-M/2) * cos(rad) - (y-M/2) * sin(rad)+M/2  ;
             %最近邻插值法
            t = round(t_temp) ;
            if t>0 && t<=512
                fbp(x,y)=fbp(x,y)+proj_ifft(t,i);
            end
        end
    end
end
fbp = (fbp*pi)/180;%512x512 原图像每个像素位置的密度

xlswrite('problem2_origin.xlsx',fbp,'Sheet1');%将得到的重建后的图像数据写入
% 显示结果
figure,imshow(fbp),title('反投影变换后的图像')


其中每一个文件都有作用的说明,如需源文件请留言哈。(如有错误请指正)
fbp算法实现案例

github代码下载 别忘了给star哟~

参考文献:

【1】 范慧赟.CT 图像滤波反投影重建算法的研究[D].硕士学位论文,西北工业大学,2007.
【2】 余晓锷,龚剑,马建华等.CT 原理与技术[M].北京:科学出版社,2013,95-97.
【3】 毛小渊. 二维CT图像重建算法研究[D].南昌航空大学,2016.
【4】 洪虹. CT中金属伪影的校正研究[D].南方医科大学,2013.
【5】 范慧赟. CT图像滤波反投影重建算法的研究[D].西北工业大学,2007.

  • 122
    点赞
  • 480
    收藏
    觉得还不错? 一键收藏
  • 178
    评论
滤波反投影重建算法FBP)是一种常见的图像重建算法,主要用于医学成像技术和计算机断层扫描(CT)等领域。FBP算法通过对投影数据进行滤波反投影操作,重建出原始图像。 FBP算法实现可以用MATLAB编程语言来实现。具体实现步骤如下: 1. 将采集到的投影数据进行预处理,包括去噪、校准和补偿等操作,以提高图像质量。 2. 对预处理后的投影数据进行滤波操作,目的是去除高频噪声和伪影,同时保留图像的低频信息。常用的滤波函数有Ram-Lak滤波、Shepp-Logan滤波和Hann窗滤波等。 3. 将滤波后的投影数据进行反投影操作,即将每个投影线的信息根据其在图像平面上的位置重新分配到图像的像素点上。反投影可以类比为投影的逆过程,将投影数据重新映射到图像上。 4. 对反投影后的图像进行进一步的处理,如去除伪影、增强边缘等。可以根据需求选择不同的图像处理算法进行优化。 5. 最后得到的结果就是通过滤波反投影重建算法重建得到的图像。 MATLAB作为一种强大的科学计算和图像处理工具,提供了丰富的函数和工具箱,适合实现滤波反投影重建算法。可以利用MATLAB中的图像处理函数、数值计算函数和可视化工具等来实现这一算法。 总之,滤波反投影重建算法FBP)是一种常用的图像重建算法,通过MATLAB编程语言可以实现算法,并且可以根据需求进行进一步的优化和处理。
评论 178
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值