我使用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会在滤波反投影中返回负像素值吗?
谢谢。
努鲁
答案 0 :(得分:1)
是的,FBP(滤波反投影)算法会做到这一点。由于噪声和数据的离散化,它可能错误地将体素重建为具有负值。除了通常只是裁剪这些值之外,你无能为力。
由于我的博士学位是关于层析成像重建算法,我觉得合约义务(开玩笑)建议使用迭代算法来获得更好的图像(从来没有更糟,通常更好)。检查SART / SIRT或CGLS是否存在此问题。
但是,你正在调用你的功能错误!在层析成像中,步长不足以重建图像,通常需要精确的角度,因此iradon
不接受步长作为输入,它接受一个角度数组。
在您的情况下,theta
应为theta=linspace(0,360-200/360,200)
,您应致电iradon(a,theta,...)