function [ W_ind, W_dat ] = medfuncSystemMatrix( theta, N, P_num, delta )
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
N2 = N^2;
M = length(theta)*P_num;
W_ind = zeros(M, 2*N);
W_dat = zeros(M, 2*N);
t = (-(P_num-1)/2:(P_num-1)/2)*delta;
if N<=10 && length(theta)<=5
x = (-N/2:1:N/2)*delta;
y = (-N/2:1:N/2)*delta;
plot(x,meshgrid(y,x),'k');
hold on;
plot(x,meshgrid(x,y),y,'k');
axis([-N/2-5, N/2+5, -N/2-5, N/2+5]);
text(0,-0.4*delta, '0');
end
for jj=1:length(theta)
for ii=1:1:P_num
u = zeros(1,2*N);
v = zeros(1,2*N);
th = theta(jj);
if th >= 180 || th<0
error('输入角度有问题');
elseif th==90
if N<=10 && length(theta)<=5
xx = (-N/2-2:0.01:N/2+2)*delta;
yy = t(ii);
plot(xx,yy,'b');
hold on
end
if t(ii)>=N/2*delta || t(ii)<=-N/2*delta
continue;
end
kout = N*ceil(N/2 - t(ii)/delta);
kk = (kout - (N-1)):1:kout;
u(1:N) = kk;
v(1:N) = ones(1,N)*delta;
elseif th==0
if N<=10 && length(theta)<=5
yy = (-N/2-2:0.01:N/2+2)*delta;
xx = t(ii);
plot(xx,yy,'b');
hold on
end
if t(ii)>=N/2*delta || t(ii)<=-N/2*delta
continue;
end
kin = ceil(N/2+t(ii)/delta);
kk = kin:N:(kin+N*(N-1));
u(1:N) = kk;
v(1:N) = ones(1,N)*delta;
else
if th>90
th_temp = th-90;
elseif th<90
th_temp = 90-th;
end
th_temp = th_temp*pi/180;
b = t/cos(th_temp);
m = tan(th_temp);
y1d = -N/2*delta*m + b(ii);
y2d = N/2*delta*m + b(ii);
if N<=10 && length(theta)<=5
xx = (-N/2-2:0.01:N/2+2)*delta;
if th<90
yy = -m*xx + b(ii);
elseif th>90
yy = m*xx + b(ii);
end
plot(xx,yy,'b');
hold on;
end
if y1d<-N/2*delta & y2d<-N/2*delta
continue;
end
if y1d>N/2*delta & y2d>-N/2*delta
continue;
end
if y1d<=N/2*delta & y1d>=-N/2*delta & y2d>N/2*delta
yin = y1d;
d1 = yin - floor(yin/delta)*delta;
kin = N*floor(N/2 - yin/delta) + 1;
yout = N/2*delta;
xout = (yout-b(ii))/m;
kout = ceil(xout/delta) + N/2;
elseif y1d<=N/2*delta & y1d >= -N/2*delta & y2d >= -N/2*delta & y2d<N/2*delta
yin = y1d;
d1 = yin - floor(yin/delta)*delta;
kin = N*floor(N/2-yin/delta) + 1;
yout = y2d;
kout = N * floor(N/2 - yout/delta) + N;
elseif y1d<-N/2*delta & y2d>N/2*delta
yin = -N/2*delta;
xin = (yin-b(ii))/m;
d1 = N/2*delta + (floor(xin/delta)*delta*m + b(ii));
kin = N*(N-1) + N/2 + ceil(xin/delta);
yout = N/2*delta;
xout = (yout - b(ii))/m;
kout = ceil(xout/delta) + N/2;
elseif y1d<-N/2*delta & y2d>=-N/2*delta & y2d<N/2*delta
yin = -N/2*delta;
xin = (yin-b(ii))/m;
d1 = N/2*delta + (floor(xin/delta)*delta*m + b(ii));
kin = N*(N-1) + N/2 + ceil(xin/delta);
yout = y2d;
kout = N*floor(N/2 - yout/delta) + N;
else
continue;
end
k = kin;
c=0;
d2 = d1 + m*delta;
while k>=1 && k<=N2
c = c + 1;
if d1>=0 && d2 >delta
u(c) = k;
v(c) = (delta-d1)*sqrt(m^2+1)/m;
if k>N && k~=kout
k = k - N;
d1 = d1 - delta;
d2 = d1 + m*delta;
else
break;
end
elseif d1>=0 && d2 == delta
u(c) = k;
v(c) = delta*sqrt(m^2 + 1);
if k>N && k~=kout
k = k-N+1;
d1 = 0;
d2 = d1 + m*delta;
else
break;
end
elseif d1>=0 && d2<delta
u(c) = k;
v(c) = delta*sqrt(m^2+1);
if k~=kout
k = k+1;
d1 = d2;
d2 = d1 + m*delta;
else
break;
end
elseif d1<=0 && d2 >=0 && d2<=delta
u(c) = k;
v(c) = d2*sqrt(m^2+1)/m;
if k~=kout
k = k+1;
d1 = d2;
d2 = d1 + m*delta;
else
break;
end
elseif d1<=0 && d2>delta
u(c) = k;
v(c) = delta*sqrt(m^2+1)/m;
if k>N && k~=kout
k = k - N;
d1 = -delta + d1;
d2 = d1 + m*delta;
else
break;
end
end
end
if th < 90
u_temp = zeros(1,2*N);
if any(u) == 0
continue;
end
ind = u>0;
for k=1:length(u(ind))
r = rem(u(k),N);
if r==0
u_temp(k) = u(k) - N + 1;
else
u_temp(k) = u(k) - 2*r + N + 1;
end
end
u = u_temp;
end
end
W_ind((jj-1)*P_num+ii,:) = u;
W_dat((jj-1)*P_num+ii,:) = v;
end
end
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
正电子发射断层扫描仪(Positron Emission Tomography, PET)是当前医学界公认的肿瘤、心脏、脑等疾病诊断与病理生理研究的重要方法。随着核医学影像设备的广泛应用和计算机技术的迅速发展,图像重建方法作为PET成像的一个关键环节,其研究工作也越发受到重视。 PET探测器检测注入人体的示踪剂在湮灭辐射过程中产生的射线,经过符合采集系统处理形成投影线,以SINO的方式存放于计算机硬盘中[1]。计算机调用图像重建模块,生成人体断层图像。目前,PET图像基础重建算法主要包括解析法和迭代法。 1. 解析法 解析法是以中心切片定理为基础的反投影方法,常用的是滤波反投影法(Filtered Back-Projection, FBP)。在FBP中,图像重建主要包含两个步骤:反投影和滤波。 我们在初中就已经学过投影与反投影的概念,从不同角度观察物体可以得到不同的信息,当我们从多种不同角度获取物体的投影,可以反向推出这个物体真实的形态。 图1 光线将物体的形状投射到一个平面称为投影 在成像原理上,PET和CT略有差异。CT是投射成像,X射线旋转360°,采集被扫描物体不
资源推荐
资源详情
资源评论
收起资源包目录
OSEM.rar (4个子文件)
OSEM
medfuncOsem.m 1KB
OSEM.m 1KB
medfuncParallelBeamForwardProjection.m 993B
medfuncSystemMatrix.m 6KB
共 4 条
- 1
资源评论
拉姆哥的小屋
- 粉丝: 6100
- 资源: 132
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功