平行束投影数据的仿真(matlab)

平行束投影数据的仿真(matlab),第1张

1.Shepp-Logan头模型显示仿真
clc;
clear all;
close all;
I = phantom(256);

%phantom函数用于生成一个Shepp-Logan头模型;
%方法一:phantom(DEF,N); DEF为‘Shepp-Logan'和'Modified Shepp-Logan'(默认);
%方法二:phantom(E,N); E为自定义头模型参数,可不填;N为生成图像大小,默认256;

figure;
imshow(I, []); 

%imshow函数用于显示图像(主要为灰度图像);
%imshow(I); 显示灰度图像I;
%imshow(I, [low high]);  显示介于low和high之间的灰度图像(0-255),大于high显白,小于low显黑;  

2.平行束投影原理

3.仿真实验 方法一:利用radon变换产生投影数据 
clc;
clear all;
close all;
I = phantom(256);
theta = 0: 179; %投影角度从0到179°;
P = radon(I, theta); 
%radon函数:返回灰度图像I在theta角度下的radon变换;

figure;
imshow(I, []);

figure;
imagesc(P), colormap(gray), colorbar;
%imagesc:自动缩放读入的图像;
%colormap:定义图像显示的颜色;
%colorbar:用于显示色彩条;

 

方法二:利用第二章内容计算投影数据
%edit medfuncParallelBeamForwardProjection;创建子程序
function P = medfuncParallelBeamForwardProjection(theta, N, N_d)
theta_num = length(theta);
P = zeros(N_d, theta_num);

%     椭圆密度rho  长轴ae   短轴be     xe     ye   旋转角度alpha
shep = [1         .69       .92       0      0        0
        -.8       .6624     .8740     0     -.0184    0
        -.2       .1100     .3100     .22    0        -18
        .1        .2100     .2500     0      .35      0
        .1        .0460     .0460     0      .1       0
        .1        .0460     .0230    -.08   -.605     0
        .1        .0230     .0230     0     -.606     0
        .1        .0230     .0460     .06   -.605     0];

rho = shep(: , 1).';
ae = 0.5 * N * shep(:, 2).';
be = 0.5 * N * shep(:, 3).';
xe = 0.5 * N * shep(:, 4).';
ye = 0.5 * N * shep(:, 5).';
alpha = shep(: , 6).';
alpha = alpha * pi/180;
theta = theta * pi/180;
TT = -(N_d-1)/2: (N_d-1)/2;      %探测器坐标-183到183,总计367个
for k1 = 1: theta_num            %theta_num(k1)代表t
    P_theta = zeros(1, N_d);     %一维向量[1, 367]
    for k2 = 1: max(size(xe))    %k2代表第几个椭圆
        a = (ae(k2)*cos(theta(k1)-alpha(k2)))^2 +  (be(k2)*sin(theta(k1)-alpha(k2)))^2;
        temp = a - (TT-xe(k2)*cos(theta(k1))-ye(k2)*sin(theta(k1))).^2;
        ind = temp > 0;          %保证根号>0,temp为根号内结果
        P_theta(ind) = P_theta(ind) + rho(k2) * (2*ae(k2)*be(k2)*sqrt(temp(ind)))./a;
    end
    P(: , k1) = P_theta.';
end

以上实验内容均学习整理于黄力宇老师等著《医学断层图像重建仿真实验》。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/729111.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存