0

我使用 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 在过滤后的反投影中返回负像素值吗?

谢谢你。

努鲁尔

4

1 回答 1

1

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

由于我的博士学位是关于断层扫描重建算法的,我觉得有合同义务(开玩笑)建议使用迭代算法来可能获得更好的图像(永远不会更糟,通常会好得多)。检查 SART/SIRT 或 CGLS 是否存在此问题。

但是,你调用你的函数是错误的!在断层扫描中,步长不足以重建图像,您通常需要精确的角度,因此iradon不接受步长作为输入,它接受角度数组。

在你的情况下,theta应该是theta=linspace(0,360-200/360,200),你应该打电话iradon(a,theta,...)

于 2017-08-10T07:30:53.737 回答