参考资料:

高上凯.医学成像系统 [M] .清华大学出版社,2000.

CT图像重构方法详解——傅里叶逆变换法、直接反投影法、滤波反投影法_Absolute Zero-CSDN博客

一、实验目的

了解X-CT工作原理,通过MATLAB R2018b使用卷积反投影法实现X-CT图像重建。

二、实验原理

X射线穿过人体时,人体的各种组织对X射线有不同程度的吸收,即不同的组织有不同的线性衰减系数μ。假设强度为I0的X射线穿过均匀分布衰减系数为μ的物体,行进了x的距离,强度变为1,按Beer-Lambert 定律有:

  或  

若物体是分段均匀的,系数分别是μ1、μ2、μ3…,相应的长度为x1, x2, x3…,则下式成立:

本实验就是用程序来实现下述的过程,得到投影的数值。

X射线投影分平行束和扇束投影,扇束又分为等角射线型和等距射线型。

平行束扫描就是X光束平移+旋转扫描,由于扫描时间太长,该方法一般只在第一代CT中使用。扇束扫描就是单X射线源多检测器,等角射线型就是检测器分布在等角的弧线上,等距射线型就是检测器在直线上作等距分布。相应结构如下图:

三、算法原理

A2.1 仿真头模型

在研究从投影重建图像的算法时,为了比较客观地评价各种重建算法的有效性,人们常选用公认的Sheep Logan头模型(以下简称S-L模型)作为研究对象。该模型由10个位置、大小、方向、密度各异的椭圆组成,象征一个脑断层图像,见图A2.1所示。其中,图 A2.1(a)为10个椭圆的分布图,图中英文字母是10个椭圆的编号,数字表示该区域内的密度。图 A2.1(b)是S-L模型的灰度显示图像。 

表A2-1给出了S-L头模型中10个椭圆的中心位置、长轴、短轴、旋转角度及折射指数。

表A2-1 头模型中的椭圆参数

序号

中心坐标

长轴

短轴

旋转角度

折射指数

a

(0,0)

0.92

0.69

90°

2.0

b

(0,-0.0184)

0.874

0.6624

90°

-0.98

c

(0.22,0)

0.31

0.11

72°

-0.02

d

(-0.22,0)

0.41

0.16

108°

0.01

e

(0,0.35)

0.25

0.21

90°

0.01

f

(0,0.1)

0.046

0.046

0.01

g

(0,-0.1)

0.046

0.046

0.01

h

(-0.08,-0.605)

0.046

0.023

0.01

i

(0,-0.605)

0.023

0.023

0.01

j

(0.06,-0.605)

0.046

0.023

90°

0.01

A2.2 仿真投影数据的产生

用S-L头模型进行计算机仿真研究的主要好处之一是可以获得该模型投影数据的解析表达式。

图A2.2所示是一个中心位置在原点且未经旋转的椭圆,其长轴与x轴重合,短轴与y轴重合。假设椭圆内的密度为ρ,椭圆外密度为零,则该椭圆图像可用以下方程表示:

式中A,B分别为椭圆长轴与短轴的长度。

图A2.2中gθ(R)是椭圆图像的投影函数。实际上,把投影线在椭圆内的线段长度乘以密度ρ就是该投影线上的投影值。以图A2.2中所示投影线MN为例,

已知直线MN的法线式为

联立(A2-1)和(A2-3)式求解即可得到投影线与椭圆交点M,N的坐标:

其中

于是可得线段MN长度为

进而可得投影函数的一般表达式为

图A2.3所示是一个更为一般的情况:椭圆的中心o’位于坐标(x0, y0)处,椭圆的长轴相对于x轴沿逆时针方向旋转了α角,投影函数的坐标轴R与x轴的夹角仍为θ。经过适当的坐标变换,可求得该椭圆图像的投影函数。方法如下:

在坐标系x1o’y1中,椭圆方程为

根据坐标旋转关系可得

于是,椭圆在坐标系x2o’y2中的方程为

再利用坐标平移关系

即可得到椭圆在坐标系xoy中的方程

联立(A2-3)式与(A2-9)式求解可得出投影线与椭圆的交点P,Q的坐标及线段PQ的长度:

式中:

进而得出相应的投影函数gθ,α(R)

对于由10个椭圆组成的S-L头模型,可以按照(A2-11)式进行组合,得到该模型的投影数据。

A2.3 卷积反投影方法的计算机仿真实验研究

由于在用计算机重建图像时,投影数据与重建的图像都是离散的数字量,因此,本节将采用离散的数字信号与数字图像的表征方法来描述卷积反投影方法重建图像的过程。利用本节所介绍的方法可在计算机上完成卷积反投影法的仿真实验研究。

图A2.4所示是S-L头模型图像f(x,y)对应的坐标系。其中f(x,y)在x,y两方向上的范围都是从-1.0到1.0。当我们将f(x,y)离散化为一幅N×N的数字化图像时,原图像就可以用一个N×N的二维数组F(i,j)来表示,其中i=1,2,…, N ;j=1,2,…,N二维数组中元素的值与图中小方块中心点处的图像灰度值对应。小方块间的步距Δx= Δy=2.0/N。如果规定数字图像左下角的像素标号为(1,1),右下角为(N,1),左上角为 (1,N),右上角为(N,N),则二维数组中每个元素的灰度值为

我们取同样大步长Δ=Δx=Δy对投影数据采样,如图A2.5所示,共采集N点。也就是说,根据椭圆函数线积分解算出的连续形式的投影函数gθ(R)将被离散化为gθ(nΔ), n= -N/2,…,0,…,N/2(以下简写为gθ(n)),投影函数的坐标原点为xoy坐标系原点在n轴上的垂足。

相应地,R-L卷积函数h(R)也应离散化。R-L卷积函数的离散形式可表示为

图A2.6是h(nΔ)(以下简写为h(n))的示意图。

将投影函数gθ(n)与卷积函数h(n)做卷积时,投影函数将向两边分别延伸N点(如图A2. 7(a)所示),卷积函数对称地截取2N点(如图A2.7(b)所示)。卷积运算的结果为Qθ(n)示意于图A2.7(c)中。

图A2.8所示是反投影过程的示意图。

对于图像平面中的一个像素F(i,j),如果其在xoy坐标系中的坐标为(x0,y0),则其对应的投影坐标R0可表示为

其中,(x0,y0)与(i,j)的关系是

于是可得

指定最左边与图像平面中直径为N/2的圆相切的第一根射线为0"射线,即0"射线在R坐标轴上的垂足为函数Qθ(n)的原点,则(x0,y0)点在R轴上的垂足坐标R'0为

上式大括号中右边第三、四两项在N与θ确定后为常数,令

假设Δ=1,则有

上式中n0为R0的整数部分,δ为R'0小数部分。于是,n0将与投影函数Qθ(n)中的序号对应,0<δ<1表示(x0,y0)的垂足坐标相对于n0的偏移量。因此,在反投影过程中,(x0,y0)点上图像F(i,j)像素的取值应为

在整个反投影的过程中,是从(i,j)=(1,1)开始计算,像素F(1,1)在R轴上对应的坐标是Cθ,以后x方向的序号每增加1,则R'0增加cosθ;y方向的序号每增加1,则R'0增加sinθ。

A2.3 卷积反投影方法的计算机仿真实验研究

此方法可参考CT图像重构方法详解——傅里叶逆变换法、直接反投影法、滤波反投影法_Absolute Zero-CSDN博客,有完整的文字与代码解释。

四、实验软件

本实验相对来说,使用基本的常用编程语言/软件即可实现功能。

实验初期尝试使用微软公司的Visual Studio 2013进行C++语言编程,但该软件需要通过Cmake编译配置QT+VTK的视觉化函数工具库,实现实验的最终的图像输出,但环境配置较为困难,最终放弃。

MATLAB具有高效的数值计算及符号计算功能,自身带有完备的图形处理功能,实现计算结果和编程的可视化。对于本次实验的灰度图像与原理, 只需要调用imshow函数即可对二维矩阵进行图像输出,编程较简单,无需安装配置其他函数库。

在进行MATLAB编程时,只需当做最基本的函数命令调用与输出即可实现,可直接与实验原理进行嫁接转换。

本次实验仿真中,利用MATLAB自定义函数功能,自定义函数CTj进行卷积反投影法图像重建运算,自定义函数CTz进行直接反投影法图像重建运算,两个自定义函数从主函数依次接收a-j十个椭圆数据,运算并返回十个二维矩阵,主函数依次对接收到的十个二维矩阵进行叠加并以灰度凸显在窗口中显示。

受限于二维矩阵可能会集中出现在一定的范围内,而显示器硬件受限于技能无法清晰的显示,通过在主函数尾部加一个hist函数,将矩阵中的元素绘制出在直方图判断出所集中出现的区域,人工选择窗口使用imshow函数进行图像调制,直至显示出合适的图形。

五、实验程序代码

1.卷积反投影法子程序代码:

function y= CTj(x0,y0,a,b,q,p)
%单个椭圆卷积反投影函数,中心坐标(x0.y0),长轴a,短轴b,倾斜角q,折射系数p,返回值是N*N矩阵
N=700;
g=zeros(1,N+1);%初始化椭圆的投影函数g(投影宽度为包含从-N/2到N/2共N+1个数,共计N个△)
h=zeros(1,N+1);%R-L卷积函数的离散形式初始化
Q=zeros(1,N+1);%初始化投影函数g与R-L卷积函数进行卷积运算后的滤波投影函数Q
F=zeros(N,N);%灰度显示的图像二维数组初始化
for theta=0:1:360  %绕坐标系旋转的投影的角度θ,每次旋转1度,共旋转360度,最终叠加数组形成图像数据%求椭圆的投影函数gfor n=-N/2:1:N/2%在坐标轴上循环求得每个像素块对应的投影函数值g(R)r=a^2*(cosd(theta-q))^2+b^2*(sind(theta-q))^2;% 求r^2值R=n*2/N;%投影函数中自变量RRa=R-x0*cosd(theta)-y0*sind(theta);%Ra值Ra2=Ra*Ra;%Ra的平方if Ra2<=rg(n+N/2+1)=p*2*a*b*sqrt(r-Ra2)/r;%计算出投影函数g值,式A2-11elseg(n+N/2+1)=0;endend%求R-L卷积函数hfor n=-N/2:1:N/2  if n==0   h(n+1+N/2)=1/(4*(2/N)^2);elseif mod(n,2)==0h(n+1+N/2)=0;elseh(n+1+N/2)=-1/(n*(2/N)*pi)^2;endend%求滤波投影函数Q(n)Q=conv(g,h,'same');%调用matlab卷积函数conv得到滤波投影函数Q(n)   %求反投影矩阵FC=N/2-(N-1)*(cosd(theta)+sind(theta))/2;%求垂足坐标R0'中的常数项for i=1:1:Nfor j=1:1:N          R0=((i-1)*cosd(theta)+(j-1)*sind(theta)+C);%求R0'n0=floor(R0);    %取整deta=R0-n0;      %取小数if n0<=0         %防止n0值超过Q矩阵范围n0=1;            elseif n0>Nn0=N;end            F1(i,j)=(1-deta)*Q(n0)+deta*Q(n0+1);           endendF=F+F1;%把F1中的像素值累加到F中,生成反投影矩阵
end
y=F;%返回一个椭圆的反投影的二维矩阵数据
end

2.直接反投影法子程序代码:

function y = CTz(x0,y0,a,b,q,p)
%单个椭圆卷积反投影函数,中心坐标(x0.y0),长轴a,短轴b,倾斜角q,折射系数p,返回值是N*N矩阵
N=700;
g=zeros(1,N+1);%初始化椭圆的投影函数g(投影宽度为包含从-N/2到N/2共N+1个数,共计N个△)
Q=zeros(1,N+1);%初始化投影函数g与R-L卷积函数进行卷积运算后的滤波投影函数Q
F=zeros(N,N);%灰度显示的图像二维数组初始化
for theta=0:1:360  %绕坐标系旋转的投影的角度θ,每次旋转1度,共旋转360度,最终叠加数组形成图像数据%求投影函数gfor n=-N/2:1:N/2%在坐标轴上循环求得每个像素块对应的投影函数值g(R)r=a^2*(cosd(theta-q))^2+b^2*(sind(theta-q))^2;% 求r^2值R=n*2/N;%投影函数中自变量RRa=R-x0*cosd(theta)-y0*sind(theta);%Ra值Ra2=Ra*Ra;%Ra的平方if Ra2<=rg(n+N/2+1)=p*2*a*b*sqrt(r-Ra2)/r;%计算出投影函数g值,式A2-11elseg(n+N/2+1)=0;endend%求反投影矩阵FC=N/2-(N-1)*(cosd(theta)+sind(theta))/2;%求垂足坐标R0'中的常数项for i=1:1:Nfor j=1:1:N          R0=((i-1)*cosd(theta)+(j-1)*sind(theta)+C);%求R0'n0=floor(R0);    %取整deta=R0-n0;      %取小数if n0<=0         %防止n0值超过矩阵范围n0=1;            elseif n0>Nn0=N;end            F1(i,j)=(1-deta)*g(n0)+deta*g(n0+1);           endendF=F+F1;%把F1中的像素值累加到F中,生成反投影矩阵
end
y=F;%返回一个椭圆的反投影的二维矩阵数据
end

3.主函数程序代码

%X-CT图像重建计算机仿真实验研究
%定义卷积反投影法函数为CTj
%定义直接反投影法函数为CTjz
%N×N的数字化图像用N×N的二维数组F(i,j)来表示,不通的N所对应的窗口位置不同
%此时另N=700
N=700;
F=zeros(N,N);%初始化卷积反投影的二维矩阵
Fa=zeros(N,N);%初始化椭圆a矩阵
Fb=zeros(N,N);%初始化椭圆b矩阵
Fc=zeros(N,N);%初始化椭圆c矩阵
Fd=zeros(N,N);%初始化椭圆d矩阵
Fe=zeros(N,N);%初始化椭圆e矩阵
Ff=zeros(N,N);%初始化椭圆f矩阵
Fg=zeros(N,N);%初始化椭圆g矩阵
Fh=zeros(N,N);%初始化椭圆h矩阵
Fi=zeros(N,N);%初始化椭圆i矩阵
Fj=zeros(N,N);%初始化椭圆j矩阵
%定义主函数对载入函数的输入值格式为:[]=fun(x0,y0,a,b,q,p)[中心坐标(x0.y0),长轴a,短轴b,倾斜角q,折射系数p]
Fa=CTj(0,0,0.92,0.69,90,2);%调用函数CTj求得反回椭圆a卷积反投影矩阵
Fb=CTj(0,-0.0184,0.874,0.6624,90,-0.98);%椭圆b
Fc=CTj(0.22,0,0.31,0.11,72,-0.02);%椭圆c
Fd=CTj(-0.22,0,0.41,0.16,108,-0.02);%椭圆d
Fe=CTj(0,0.35,0.25,0.21,90,0.01);%椭圆e
Ff=CTj(0,0.1,0.046,0.046,0,0.01);%椭圆f
Fg=CTj(0,-0.1,0.046,0.046,0,0.01);%椭圆g
Fh=CTj(-0.08,-0.605,0.046,0.023,0,0.01);%椭圆h
Fi=CTj(0,-0.605,0.023,0.023,0,0.01);%椭圆i
Fj=CTj(0.06,-0.605,0.046,0.023,90,0.01);%椭圆j
F=Fa+Fb+Fc+Fd+Fe+Ff+Fg+Fh+Fi+Fj;%得到总图像F为各个分圆的叠加
figure('NumberTitle', 'off', 'Name', '卷积反投影法');%创建窗口
F=imrotate(F,90);%直接求得的图像F为默认长轴在水平的,需要逆时针旋转90度获得与书中相符合的图像
imshow(F,[32000,45000]);%灰度显示二维数组F,将灰度低于32000的像素显示为黑色,高于45000的显示为白色
title('卷积反投影法');Fa=CTz(0,0,0.92,0.69,90,0.02);%调用函数CTz求得反回椭圆a直接反投影矩阵
Fb=CTz(0,-0.0184,0.874,0.6624,90,-0.01);%椭圆b
Fc=CTz(0.22,0,0.31,0.11,72,-0.02);%椭圆c
Fd=CTz(-0.22,0,0.41,0.16,108,-0.02);%椭圆d
Fe=CTz(0,0.35,0.25,0.21,90,0.01);%椭圆e
Ff=CTz(0,0.1,0.046,0.046,0,0.01);%椭圆f
Fg=CTz(0,-0.1,0.046,0.046,0,0.01);%椭圆g
Fh=CTz(-0.08,-0.605,0.046,0.023,0,0.01);%椭圆h
Fi=CTz(0,-0.605,0.023,0.023,0,0.01);%椭圆i
Fj=CTz(0.06,-0.605,0.046,0.023,90,0.01);%椭圆j
Fz=Fa+Fb+Fc+Fd+Fe+Ff+Fg+Fh+Fi+Fj;%得到总图像F为各个分圆的叠加
figure('NumberTitle', 'off', 'Name', '直接反投影法');
Fz=imrotate(Fz,90);
imshow(Fz,[1.5,5.8]);
title('直接反投影法');%调用hist函数可以看出矩阵数据的分布规律,选择合适的窗位进行图像调制
figure('NumberTitle', 'off', 'Name', '卷积反投影法的矩阵数据的分布规律')
hist(Fj);
title('卷积反投影法的矩阵数据的分布规律')
figure('NumberTitle', 'off', 'Name', '直接反投影法的矩阵数据的分布规律')
hist(Fz);
title('直接反投影法的矩阵数据的分布规律')
  • 六、实验运行结果

1.卷积反投影法图像与二维矩阵分布直方图

2.直接反投影法图像与二维矩阵分布直方图

基于MATLAB 的X-CT图像重建计算机仿真实验研究实验相关推荐

  1. matlab 2ask,(最新整理)基于MATLAB的2ASK和2FSK调制仿真(通信原理实验报告)

    <(最新整理)基于MATLAB的2ASK和2FSK调制仿真(通信原理实验报告)>由会员分享,可在线阅读,更多相关<(最新整理)基于MATLAB的2ASK和2FSK调制仿真(通信原理实 ...

  2. matlab中基于cdma的锁相环,答辩-基于MATLAB的CDMA通信系统设计与仿真.ppt

    基于MATLAB的CDMA通信系统设计与仿真 目录 研究背景 研究方法 CDMA各部分仿真 CDMA系统仿真总图 结果分析 致谢 * 研究背景 20世纪60年代以来,随着民用通信事业的发展,频带拥挤问 ...

  3. 用matlab画出TFT,基于Matlab的TFT-LCD解码电路的仿真设计(含程序)

    基于Matlab的TFT-LCD解码电路的仿真设计(含程序)(17300字) 摘要: TFT-LCD技术是微电子技术和 LCD技术巧妙结合的高新技术.TFT-LCD代表了一个新的技术时代,一个比CRT ...

  4. matlab m语言电路仿真,基于Matlab的TFT-LCD解码电路的仿真设计(含程序)

    基于Matlab的TFT-LCD解码电路的仿真设计(含程序)(17300字) 摘要: TFT-LCD技术是微电子技术和 LCD技术巧妙结合的高新技术.TFT-LCD代表了一个新的技术时代,一个比CRT ...

  5. matlab自耦变压器,基于MATLAB的500kV自耦变压器建模及仿真.pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspmatlab 基于MATLAB的500kV自耦变压器建模及仿真. ...

  6. 基于matlab数字基带,基于MATLAB的数字基带传输系统的仿真设计

    基于MATLAB的数字基带传输系统的仿真设计 绵阳师范学院 本科生毕业设计(论文) 题 目 基于MATLAB的数字基带 传输系统的仿真设计 专 业 电子信息科学与技术 院 部 物理与电子工程学院 学 ...

  7. 太阳电池仿真模块 matlab 程序,基于MATLAB的月球车锂离子电池充放电过程仿真

    [实例简介] 基于MATLAB的月球车锂离子电池充放电过程仿真 第三届学术会议论文集 究电量 敢电电滩 negro 向电量 充电系俊 克电电浪 最大放电硅 Raon』 Operatoe 敛电 Cons ...

  8. 电镀用整流电源设计matlab,基于MATLAB的三相整流电路的仿真研究毕业设计论文

    基于MATLAB的三相整流电路的仿真研究毕业设计论文 西安航空职业技术学院 毕业设计论文西安航空职业技术学院毕 业 设 计(论 文)论文题目:基于 MATLAB 的三相整流电路仿真研究 所属系部:自动 ...

  9. 传输预编码matlab,基于MATLAB的MIMO系统预编码性能仿真教程.doc

    基于MATLAB的MIMO系统预编码性能仿真教程 PAGE \* MERGEFORMAT - 33 - 摘要在现今的移动通信系统中,被极多的国际通信标准采纳为基础性关键技术的一种方法是多输入多输出的技 ...

  10. 基于matlab的智能天线波束方向图仿真,基于MATLAB的智能天线波束方向图仿真

    第29卷第6期孝感学院学报V OL,基于M AT LA B的智能天线波束方向图仿真,汪 睿1,(1,3,摘 要:结合一种直线阵智能天线模型,关键词:智能天线,中图分类号:T N911,随着移动通信技术 ...

最新文章

  1. 传感器的未来: 10年后我们将会生活在一个极端透明的世界
  2. windows程序消息机制(Winform界面更新有关)--转
  3. java停车收费系统 源码开源_Java开源商城源码推荐,从菜鸡到大神,永远绕不开的商城系统
  4. Android Studio Problems
  5. 平板电脑可以插u盘吗_电视TV盒子安装app的六个方法,u盘/电脑/手机都可以安装...
  6. 服务器c的环境配置文件,配置linux服务器环境(jdk+tomcat+mysql+nginx+redis+svn+nexus的maven私服)...
  7. python selenium--常用函数3
  8. MyEclipse8.5默认工作区间修改
  9. @vue-cli的安装及vue项目创建
  10. ARCENGINE 10 开发遇到的一些问题
  11. MS SQL入门基础:数据库 统计函数
  12. 1.Java学习笔记第一节(尚硅谷视频整理)
  13. vue alexa:_免费下载:在任何PC上使用Alexa免提
  14. 机器学习实例—手写体识别
  15. 源码阅读分析 - Window底层原理与系统架构
  16. [EventKit] Error getting default calendar for new reminders: Error Domain=EKCADErrorDomain Code=1013
  17. Tiled 编辑地形后 输出简化
  18. 云堡垒机和软件堡垒机哪个好?区别是什么?
  19. [问题]浏览器主页被劫持为2345
  20. DevOps基础-2.5-持续改善

热门文章

  1. HTML页面中显示时间
  2. Linux驱动 | DS18B20驱动编程
  3. String类型getBytes方法
  4. html 页面怎么打印很小,网页上的内容打印出来太小怎么处理
  5. android smb同步,SMBsync安卓下最好的同步备份工具
  6. 心上莲花:佛教简介(上)
  7. YOLOX安装及训练
  8. LCD1602自定义符号的使用
  9. css样式中的border-radius属性
  10. TOEFL wordlist 26