为什么iradon会返回负像素值?

时间:2017-08-10 06:54:50

标签: matlab 3d-reconstruction tomography-reconstruction back-projection

我使用LabVIEW软件以1.8度的步进角度进行了200次投影。图像的大小为2748 x 2748像素,uint16。然后使用Matlab,我加载投影图像,进行平场校正,将图像大小调整1/3并将图像保存为.mat文件。然后我运行下面的代码进行过滤反投影。

interp='linear'; %set interpolation: nearest, linear, spline, pchip, v5cubic
filter='Hann'; %set filter: Ram-Lak, Shepp-Logan, Cosine, Hamming, Hann, None

for s=1:916

   for i=1:200
   a(i,:)=proj065(:,s,i);
   end
   a=a';
   %figure(3), imagesc(a)
   b=iradon(a,1.8,interp,filter);
   imagesc(b);
   recon(:,:,s)=b;
   s
   clear a
end

如果我在此代码中使用过滤器,我将获得负像素值。

但是,如果我在没有滤镜的情况下运行代码,我将获得正像素值。

知道为什么iradon会在滤波反投影中返回负像素值吗?

谢谢。

努鲁

1 个答案:

答案 0 :(得分:1)

是的,FBP(滤波反投影)算法会做到这一点。由于噪声和数据的离散化,它可能错误地将体素重建为具有负值。除了通常只是裁剪这些值之外,你无能为力。

由于我的博士学位是关于层析成像重建算法,我觉得合约义务(开玩笑)建议使用迭代算法来获得更好的图像(从来没有更糟,通常更好)。检查SART / SIRT或CGLS是否存在此问题。

但是,你正在调用你的功能错误!在层析成像中,步长不足以重建图像,通常需要精确的角度,因此iradon不接受步长作为输入,它接受一个角度数组。

在您的情况下,theta应为theta=linspace(0,360-200/360,200),您应致电iradon(a,theta,...)