【转】由投影重建图像:滤波反投影、FDK、TFDK三维重建算法理论基础

转自:由投影重建图像:滤波反投影、FDK、TFDK三维重建算法理论基础_m0_37357063的博客-CSDN博客_fdk算法

1. 基础理论从:
[1] RafaelC.Gonzalez, RichardE.Woods, Gonzalez,等. 阮秋琦等译.数字图像处理(第三版)[M]. 电子工业出版社, 2011.P232

[2] RafaelC.Gonzalez, RichardE.Woods, StevenL.Eddins. 阮秋琦译.数字图像处理:MATLAB版:本科教学版[M]. 电子工业出版社, 2014. (第二版)P102

参考文献[1]从P228-P245

了解:

1.    由投影重建图像

1.     计算机断层(CT)的原理

2.     投影和Radon(雷登)变换(radontransform)

3.     正弦图(sinogram)和Shepp-Logan幻影

4.     傅里叶切片定理

5.     使用平行射线束滤波反投影的重建

6.     Ram-Lak滤波器与Hamming、Hann等窗函数

7.     使用扇形射线束滤波反投影的重建

1. 由投影重建图像

利用Matlab来复现参考文献[1]中的处理流程:

首先生成一幅原始图像:

%代码如下:
I=zeros(512,512);
for i=1:512for j=1:512if ((i-256)*(i-256)+(j-256)*(j-256))<1024I(i,j)=1;endend
end
imshow(I,[]);

得到1°和90°两个方向上的投影(一维),并回抹得到反投影图像(二维)

         

这两个方向的反投影相叠加:

%代码如下:(这里参考了MATLAB自带的函数说明输入:doc iradon打开该参考说明)
%就是怎么得到特定角度下的一个投影,并形成反投影图像:
R=radon(I,0:179);
r1=R(:,2);
II1=iradon([r1 r1],[1 1])/2; %得到1°角度下的投影图像
imshow(II1);r90=R(:,91);
II90=iradon([r90 r90],[90 90])/2; %得到90°角度下的投影图像
imshow(II90);II1_90=II1+II90;%二者叠加
imshow(II1_90);

同理,得到45°和135°方向的反投影图像,并将这四幅反投影图像相叠加:

%代码如下:
r45=R(:,46);
II45=iradon([r45 r45],[45 45])/2;
imshow(II45);r135=R(:,136);
II135=iradon([r135 r135],[135 135])/2;
imshow(II135);II_1_90_45_135=II1+II45+II90+II135;%四个反投影图像相叠加!
imshow(II_1_90_45_135);

当反投影的角度采样增多时,这里从0°到179°每隔1°共采180个反投影,相叠加后形成反投影图像:(不使用滤波器时的反投影重建图像如下:)

%这里用了iradon函数,线性插值,不使用滤波器。
ii2=iradon(R,0:179,'linear','none');
imshow(ii1,[]);

ii1=iradon(R,0:179,'linear','Ram-Lak');%默认使用线性插值,Ram-Lak滤波器!

该结果如下:

将重建后的图像与原图像进行对比:(左边是原图、右边是重建得到的图像,注意模糊与振铃现象)

  

我们再使用MATLAB自带的一头部幻影图像Shepp-Logan:

原图:

未使用滤波器的重建图像:

使用Ram-Lak滤波器  :

使用Shepp-Logan滤波器:

%生成以上图像的代码如下:
P=phantom(512);
theta=0:179;
[R,xp]=radon(P,theta);
I1P=iradon(R,0:179,'linear','none');
I2P=iradon(R,0:179,'linear','Ram-Lak');
I3P=iradon(R,0:179,'linear','Hamming');

以下内容参考文献[1]将滤波反投影的基础知识过一遍:

笛卡尔坐标系的一条直线由它的斜截式描述: ;或由其法线方程来描述:

平行射线束的投影可以由一组这样的直线建模。如图5.37所示,投影信号中的任意一点由沿着直线 的射线和给出。连续变量的情况下,线求个变为线积分,由下式给出:

该式是沿xy平面内任意一条直线的f(x,y)的投影(线积分)的公式,就是雷登(Radon)变换。

符号R{f(x,y)}或R{f}有时用于代替(3)式中的 来表示f的雷登变换。雷登变换是由投影重建图像的基石,计算机断层(CT)是其在图像处理领域的主要应用。在离散情况下,(3)式变为

正弦图与雷登变换:

    

正弦图包含了重建图像f(x,y)所需的信息。

正弦图的视觉分析仅限于实际应用、但有时对于算法开发是有帮助的。

CT的关键目的是从投影得到物体的三维表示。其方法是反投影每一个投影,然后对反投影求和以产生一幅图像(切片),再堆积所有的结果以产生三维物体的再现。(这里是指用二维切片堆积成三维体,与FDK/TFDK直接就是三维重建是不同的!)

5.11.4傅里叶切片定理

傅里叶切片定理即投影的一维傅里叶变换和被投影区域图像的二维傅里叶变换间的关系。

投影 的一维傅里叶变换为:

式(11)就是著名的傅里叶切片定理(或投影切片定理)。它说明了一个投影(一维)的傅里叶是得到这个投影的二维区域f(x,y)的二维傅里叶变换对应角度下的一个切片。正如图5.41所示,任意一个投影的一维傅里叶变换可以沿着一个角度提取一条直线的F(u,v)的值来得到,而该角度就是投影时所用的角度。

下面推导滤波反投影公式,将用到傅里叶切片定理。

F(u,v)的反傅里叶变换为:

当c=0.54时,该函数称为汉明窗(RichardHamming);

当c=0.5时,称为韩窗(Juliusvon Hann)

加了窗函数的滤波器在空域的振铃现象减弱。

我们可以预期,由于使用汉明窗的反投影有较小的振铃,但稍微模糊一点。见下图:

原图  ;使用Ram-Lak滤波器  ;  使用Hamming窗加窗后的滤波器

        

在CT的多数应用中(特别是医学上),像振铃这样的人为缺陷有严重的厉害关系,使其最小化是有意义的工作。调整滤波算法(可以做文章的地方,一些硕士论文就这样自创新的滤波器,发现效果有所改进,好,成文!比如文献

[1] 张銮. 基于平板探测器的锥束CT重建技术研究[D]. 中北大学, 2010.)、和硬件制造方面的改进(如,提供探测器的检测细腻度,即采样粒度)


因为斜坡滤波器(甚至在被加窗时)在频率域的直流项为零,故每一幅反投影图像的均值将为零。这将意味着,每一幅反投影图像都将有正像素和负像素值,当所有的反投影图像相加形成最终的重建图像时,一些负像素值位置可能变成正像素,而平均值可能不为零,但是,典型地,最终的图像将还是有负像素值。

当有关平均值的知识未知时,就使用标定的方法将图像的像素值都归一化到一个区间[0,255]。当典型的平均值的知识是可用的时候,可将该值加到频率域的滤波器上,从而抵消斜波并防止直流项为零。当在空域中使用卷积时,截断空间滤波器的长度(斜坡的反傅里叶变换)的真正效果都将防止其有零均值,这样就完全避免的迫零问题。

滤波反投影算法:

1.     计算每一个投影的一维傅里叶变换;

2.     用滤波函数 乘以每一个傅里叶变换;

3.     得到每一个滤波后的变换的一维反傅里叶变换;

4.     对步骤3得到的所以一维反变换积分(求和)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

How to Use Hive-based Registry IN WINCE.NET

摘要&#xff1a;WINCE本身是一个完全在内存中运行的系统。每次启动都需要把NK.BIN拷贝到内存中相对应的地址。这样的系统就不需要了系统维护&#xff0c;但是如何“永久”的保存设置就成了问题。本文将介绍如何在Wince中实现设置的永久保存。 关键字&#xff1a;WINCE、嵌入式…

【转】libpcap实现机制及接口函数

转自&#xff1a;libpcap实现机制及接口函数 - 简书 1.Libpcap 的工作原理 Libpcap的工作原理可以描述为&#xff0c;当一个数据包到达网卡时&#xff0c;通过网络分接口&#xff08;即旁路机制&#xff09;将数据包发给BPF过滤器&#xff0c;匹配通过的数据包可以被libpcap利…

惊!MySQL官网巨变,下载被取消

随着欧盟的批准&#xff0c;甲骨文宣布收购Sun交易完成&#xff0c;与此同时甲骨文一系列动作也迅速展开。 甲骨文因MySQL被欧盟卡了大半年&#xff0c;在中国&#xff0c;MySQL的用户非常多&#xff0c;MySQL的前途无疑让人牵肠挂肚。并购之前&#xff0c;甲骨文说了很多&…

【转】【C++学习笔记】C++异常处理

转自&#xff1a;【C学习笔记】C异常处理&#xff01;你绝对不能错过的干货&#xff01; - 知乎 合理地使用C异常处理&#xff0c;能够使我们写出来的程序更加稳定强健&#xff0c;不易崩溃。那么&#xff0c;应该如何使用C异常处理呢&#xff1f;下面&#xff0c;我们就来向大…

【转】源码分析C++的string实现

转自&#xff1a;源码分析C的string实现 - 知乎 我们平时使用C开发过程中或多或少都会使用std::string&#xff0c;但您了解string具体是如何实现的吗&#xff0c;这里程序喵给大家从源码角度分析一下。 读完本文相信您可以回答以下问题&#xff1a; string的常见的实现方式…

做一个项目,平时都用到哪些工具提高效率(上)

做.NET 相关项目&#xff0c;Visual Studio 2008,SQL Server 2000/2005是标准的配置&#xff0c;但是&#xff0c;除此之外&#xff0c;还可以应用哪些工具来提高工作效率&#xff0c;让项目做的更轻松。 1 需要一个代码生成工具&#xff0c;生成实体层&#xff0c;数据访问代…

【转】傅里叶分析之掐死教程(完整版)更新于2014.06.06

转自&#xff1a;傅里叶分析之掐死教程&#xff08;完整版&#xff09;更新于2014.06.06 - 知乎 作 者&#xff1a;韩 昊 知 乎&#xff1a;Heinrich 微 博&#xff1a;花生油工人 知乎专栏&#xff1a;与时间无关的故事 谨以此文献给大连海事大学的吴楠老师&#xff0c;柳…

wince6.0编译命令分析

下面从CSDN帮助文档简要说明vs2005下面的系统编译命令&#xff0c;这些命令位于Build->Advanced Build Commonds 一共有六条命令&#xff0c;分别是&#xff1a; 1.Sysgen 2.Clean Sysgen 3.Build and Sysgen 4.Rebuild and Clean Sysgen 5.Build Current BSP and Subprojec…

【转】C,C++宏中#与##的讲解

转自&#xff1a;C,C宏中#与##的讲解 - MoreWindows - 博客园 文中__FILE__与示例1可以参见《使用ANSI C and Microsoft C中常用的预定义宏》 宏中的#的功能是将其后面的宏参数进行字符串化操作&#xff08;Stringizing operator&#xff09;&#xff0c;简单说就是在它引用的…

wince对中文字体的支持

最近情况真的是很糟&#xff0c;小小年纪&#xff0c;得了好几样小毛病&#xff0c;弄得每天都提不起精神来&#xff0c;恍恍惚惚的&#xff0c;幸好有妻子的支持&#xff0c;她不论自己多忙多累&#xff0c;一看到我情绪不好&#xff0c;就给与很多安慰&#xff0c;百般鼓励&a…

提示信息的窗口效果

代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/xhtml"><head><title>提示信息的窗口效果<…

【转】ARM 之七 主流编译器(armcc、iar、gcc for arm、LLVM(clang))详细介绍

转自&#xff1a;ARM 之七 主流编译器&#xff08;armcc、iar、gcc for arm、LLVM(clang)&#xff09;详细介绍_itexp-CSDN博客_armcc 必备 在讲解各编译器之前&#xff0c;必须先了解一下以下文件。这些文件在编译器目录下或者编译生成目标平台的可执行程序时经常见到。此外&a…

【转】深入浅出理解有限状态机

转自&#xff1a;深入浅出理解有限状态机 - 知乎 有限状态机是一种用来进行对象行为建模的工具&#xff0c;其作用主要是描述对象在它的生命周期内所经历的状态序列&#xff0c;以及如何响应来自外界的各种事件。在计算机科学中&#xff0c;有限状态机被广泛用于建模应用行为、…

wince 环境变量

wince工程的环境变量在PBInitEnv.bat文件中存储&#xff0c;经测试&#xff0c;如果在下面增加了新的变量&#xff0c;在此文件中会出现

【转】vs平台工具集介绍,vc6~vs2019各IDE对应的工具集版本

转自&#xff1a;vs平台工具集介绍以及安装 - jack_Meng - 博客园 一、什么是平台工具集&#xff1a; 平台工具集其实是MSBuild其目录所在C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0。VS从2010之后开始支持使用之前的版本进行编译&#xff0c;可以在工程属性->常…

基于FPGA的前向纠错算法

目前&#xff0c;无线产品的广泛应用使无线音频和视频的高质量传输成为可能。蓝牙、无限局域网等无线传输设备比较复杂&#xff0c;成本较高&#xff0c;急需 开发一种简便的、仅用于流媒体的无线传输平台&#xff0c;将音频数据实时地发送到移动终端。由于音频数据的实时性&am…

【转】Windows版本,OS内核版本,Windows SDK之间的关系

转自&#xff1a;Windows版本&#xff0c;OS内核版本&#xff0c;Windows SDK之间的关系 - 知乎 前言&#xff1a;我们经常会会被几个概念弄混淆&#xff0c;什么是Windows版本号&#xff0c;什么又是操作同内核版本&#xff0c;开发C的时候什么又是WindowsSDK&#xff0c;实际…

【转】30分钟学会UML类图

转自&#xff1a;30分钟学会UML类图 - 知乎 30分钟学会UML类图 肖继潮 UML图有很多种&#xff0c;但是并非必须掌握所有的UML图&#xff0c;才能完整系统分析和设计工作。一般说来&#xff0c;在UML图中&#xff0c;只要掌握类图、用例图、时序图的使用&#xff0c;就能完成大…

Microsoft SQL Server 2005数据库安装

Microsoft SQL Server 2005数据库&#xff0c;电脑里原有的mssql2000已经不适用了&#xff0c;到网上寻找SQL Server 2005简体中文开发版的下载地址&#xff0c;一开始下载了个学习版的express&#xff0c;可限制太多&#xff0c;还是决心安装开发版本的。到微软的官方网站寻找…

Wince6.0 cleartype

WinCE6.0下显示宋体毛刺很严重&#xff0c;影响显示效果&#xff0c;打开cleartype以后字体显示平滑&#xff0c;但是不知道为什么wince桌面上的中文字体显示乱码&#xff0c;而且自己的引用程序也变的很卡。 开始以为是字库的原因&#xff0c;后来添加了系统的组件以后一切正常…