0

I took 200 projections at a step angle of 1.8 degrees using LabVIEW software. The size of the image is 2748 x 2748 pixels, uint16. Then using Matlab, I load the projection images, do the flat field correction, resize the image by 1/3 and save the images as .mat file. Then I run the code below for the filtered backprojection.

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

If I used a filter in this code, I will get negative pixel values.

But, if I run the code without the filter, I will get positive pixel values.

Any idea why iradon returns negative pixel values in filtered back projection?

Thank you.

Nurul

Ander Biguri
  • 35,140
  • 11
  • 74
  • 120

1 Answers1

1

Yes, the FBP (filtered back-projection) algorithm will do that. It can wrongly reconstruct voxels as having negative values, due to noise and discretization on the data. Nothing you can do about it than just crop those values generally.

As my PhD is about tomography reconstruction algorithms I feel contractually obligated (joking) to suggest the use of iterative algorithms to possibly obtain better images (never worse, often considerably better). Check SART/SIRT or CGLS for this problem.

However, you are calling your function wrong! In tomography, the step size is not enough to reconstruct an image, you generally need the exact angles, thus iradon doesnt accept a step size as an input, it accepts an array of angles.

in your case, theta should be theta=linspace(0,360-200/360,200), and you should call iradon(a,theta,...)

Ander Biguri
  • 35,140
  • 11
  • 74
  • 120
  • Thank you very much for your suggestion. Can you share with me any papers/journals that explain how FBP produces negative values? –  Aug 14 '17 at 03:07
  • @NurulR. There is none.... Because its not a thing that is "research" worthy. It just does. I have been working on this 2 years, it just *can* happen, as you certainly just tested. Specially when using real noisy data, as sometimes the only way of mathematically describing the noise (e.g. dead pixels in the detector) is having negative values in the image. However now that you know how to correctly input the angles, you should barely get any negative. – Ander Biguri Aug 14 '17 at 07:09
  • Unfortunately, I still get negative values when I used filter even though I have changed the theta. Is it because of my image has a lot of noise? –  Aug 14 '17 at 07:25
  • Yes, exactly. Actually, I want to reconstruct cylinder images with different concentration. Low concentration images show positive values but as concentration increases, the values become negative, if I used the filter. If without the filter, I will get positive values for all concentrations. –  Aug 14 '17 at 08:57
  • @NurulR. have you applied the Beer-Lambert law to your data? – Ander Biguri Aug 14 '17 at 08:59
  • Yes, I did. First, I measured the mean pixel value. Then, using Beer-Lambert law, I calculated the attenuation coefficient using Excel. –  Aug 14 '17 at 09:30
  • @NurulR. the *mean* value??? Nope, wrong. In excel? Did you apply a logarithmic normalisation equation *in excel* instead of using MATLAB? – Ander Biguri Aug 14 '17 at 09:32
  • Is it wrong to use the mean pixel value? Yes, I used Excel after I saw some example from the internet. –  Aug 14 '17 at 09:40
  • @NurulR. yes it is..... Just, read the literature. Its the maximum possible value. Apologies if I stop helping now, as you seem to be still a bit lost and need some reading. Also, Please, learn how to use MATLAB. Having MATLAB and using excel for maths is like choosing to travel on donkey when you already have plane tickets! – Ander Biguri Aug 14 '17 at 09:45