CT算法,radon变换基于MATLAB的CT算法,radon变换的三维建模仿真

Posted fpga&matlab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CT算法,radon变换基于MATLAB的CT算法,radon变换的三维建模仿真相关的知识,希望对你有一定的参考价值。

1.软件版本

MATLAB2021a

2.本算法理论知识

1.输入:T(x,y,z)

使用stl读取函数完成T的导入工作

2.做Radon变换,得投影图:P

正常Radon变换即可。

3.对P:应用斜坡滤波器,截断负数 p+(i)

 

该式为打印成型原理,核心是CT算法,I为阈值函数,α吸光率,Ω旋转速率,Dc为成型阈值,暂不考虑这些参数。f(r,z)即是模型的几何形状。

则对于一个横截面z,有:

有 f(r)= [g](r),  f(r)即截面图形状,是指数型反向radon变换,[g](r)是光线投影的线积分(即检测到的投影强度)。

现在我们的算法是逆过来的,即已知模型几何形状f(r),去求所需的投影强度g的过程,由下式给出:

此式为傅里叶中心切片定理,F-1为傅里叶逆变换,其中

为f()函数的二维傅里叶变换。

,是一斜坡滤波器,同时去除频域中频率k在阈值α以下的部分。

由投影强度图g(r,z),通过反向radon变换(即反向投影)可以得到几何图形。由于这一理论值存在负数,实际的投影强度却只能为正,这里采用Otsu()方法迭代优化:

算法的优化部分见补充材料S12,S13,

具体的流程图(见补充材料figure.s6)如下:

1.对输入的截面信息做radon变换

2.滤波+截断(傅里叶频域)

3.反radon变换

4.迭代优化Otsu()部分

5.输出投影所用图像

3.核心代码

clc;
clear
close all;
warning off;
addpath 'func\\'

%DLP
theta = 1;%设置1~180之间






load R3.mat

%这里,根据各截面投影图;然后反投影得到物体几何结构,非常消耗内存,我这里进行间隔抽样,降低计算机资源消耗
%如果电脑配置高,则直接设置1即可
Skip = 2;

V=ones(512/Skip,512/Skip,520/Skip);

idx=0;
for k = 1:Skip:520
    idx=idx+1;
    tmps = imresize(Pnewk,1/Skip);
    [X,Y]= find(tmps==0);
    for j = 1:length(X)
        v(X(j),Y(j),idx) = NaN;
    end
end

[x,y,z]=meshgrid(1:Skip:512,1:Skip:512,520:-Skip:1);
figure;
slice(x,y,z,v,[1:Skip:512],[1:Skip:512],[520:-Skip:1]) 
shading interp                             
colorbar                                   
                         
set(gca,'zdir','reverse');                 
grid on 
box on       
colormap(bone);
axis equal
view([135,15]);
camlight('infinite');
 



for i = SETS
    E   = P0i;
    F   = Pi;
    for j = 1:length(E(:,theta))
        E2(521-i,j)= [E(end+1-j,theta)];
        F2(521-i,j)= [F(end+1-j,theta)]; 
    end
end

C=[2,1000];
figure;
subplot(121)
imagesc(E2,C);title('E');
colormap('hot');

subplot(122)
imagesc(F2,C);title('F');
colormap('hot');







function level=func_ostu(I); 

I        = im2uint8(I(:));
num_bins = 256;
counts   = imhist(I,num_bins);
num_bins = numel(counts);
counts   = double( counts(:) );
p        = counts / sum(counts);
omega    = cumsum(p);
mu       = cumsum(p .* (1:num_bins)');
mu_t     = mu(end);

sigma_b_squared = (mu_t * omega - mu).^2 ./ (omega .* (1 - omega));
 
maxval          = max(sigma_b_squared);
isfinite_maxval = isfinite(maxval);

if isfinite_maxval
    idx  = mean(find(sigma_b_squared == maxval));
    level = (idx - 1) / (num_bins - 1);
else
    level = 0;
end
 
end

4.操作步骤与仿真结论

 

 

5.参考文献

 

A19-26

6.完整源码获得方式

方式1:微信或者QQ联系博主

方式2:订阅MATLAB/FPGA教程,免费获得教程案例以及任意2份完整源码

以上是关于CT算法,radon变换基于MATLAB的CT算法,radon变换的三维建模仿真的主要内容,如果未能解决你的问题,请参考以下文章

图像重建基于matlab布雷格曼迭代算法集合ART算法CT图像重建含Matlab源码 1905期

Radon变换——MATLAB

图像重建图像重建之ASTRA算法

图像融合基于平移不变小波变换实现CT图像融合matlab源码

图像融合基于平移不变小波变换实现CT图像融合matlab源码

图像分割基于FCM和改进的模糊聚类FCM实现脑部CT图像分割matlab源码