PSF Deconvolution

Hello Everyone,

Suppose we have already obtained and know PSF and the positron range distribution. May I ask how one can deconvolve the effect of point spread function and positron range in a PET list-mode reconstruction? I mean are there some commands/flags in CASToR that one can use for this?

Best regards,
Seyyed

Has anyone applied positron range correction/PSF with CASToR? There is -conv option, and I am guessing it applies some sort of smoothing. Is there an option for de-convolution which is already implemented in CASToR?

Option “-conv filter:filter.conf::psf”.

If the filter is applied on both forward and backward operations, it obviously acts as a deconvolution.

Read the doc or option “-help-conv” for detailed information about usage.

Simon

Thank you Simon. I have reconstructed some images by CASToR and very happy with it. However there are two things that I would like to ask.

1- Suppose for some reasons, I have two (Gaussian) point spread functions PSF1 and PSF2 (like a point spread function and a positron range distribution). To correct for these two effects, is it correct to pass “-conv gaussian1,X1,X2,X3::psf -conv gaussian2,Y1,Y2,Y3::psf” or for a general case “-conv filter1:filter1.conf::psf -conv filter2:filter2.conf::psf”?

2- First of all, in this case please note that I have not applied any “-conv” and “normalization” for the following images. In my reconstructed image, when a cylindrical source is positioned at the center of the scanner (on the axial axis), in the reconstructed image, it does not look like that it has a round or circular shape, but rather it looks like a regular polygon. But for any cylindrical source positioned a little bit away from the center, it looks like that it has a circular shape. Please see the pictures below.

I checked my simulation, it seems the simulation should be fine since I used two identical cylinders where I placed them at different positions.
Can you please help me to figure out why I am getting this artifact?

1- My detector:

2- Two identical cylindrical sources (radius = 1 mm). The one at the center does not look like a circular shape. (MLEM with -it 10:20)

3- The same two sources at a different slice (z). (MLEM with -it 10:20)

4- The same sources at a different slice (here the central one is not even visible.) - (MLEM with -it 10:20)

5- The same two sources but the upper one has shifted down and got closer to the center. (I (MLEM with -it 2:6)

Best regards,
Seyyed

Hello,

For my first question in the previous post, I used something like “-conv gaussian1,X1,X2,X3::psf -conv gaussian2,Y1,Y2,Y3::psf” I did not get an error, however, I think it just overwrite one of the filters. Do I need to calculate a filter that resemble the effect of both PSFs and then pass it to castor as a single filter?

For my second question, I reduced the radius of the detector to get rid of the gap between the detector blocks. I got better images however, it was not perfect (See below). Can some one help me understand why I get artifacts like above images?

Any help would be appreciated.

Best,
Seyyed

Hello Everyone,

Sorry for repeating the question. Consider a scenario that we have two (Gaussian) point spread functions PSF1 and PSF2 (like a point spread function and a positron range distribution). To correct for these two effects, is it correct to pass “-conv gaussian1,X1,X2,X3::psf -conv gaussian2,Y1,Y2,Y3::psf”?

Regards,
Seyyed

Hi,

Yes it is correct how you use it. You can use as many filters as you want.
However, there is a bug in the public CASToR version not yet corrected in the gitlab: the filters should be a
oImageConvolverManager.cc.txt (24.4 KB)
pplied in a reversed order for backward projections, which is not the case yet. To correct that, please use this “oImageConvolverManager.cc.txt” file. Remove the “.txt” extension (this is used just to be able to share it on this forum), and replace the original “oImageConvolverManager.cc” file in src/image/ folder and recompile.

Filters do not “add” themselves, the square of the resulting FWHM is equal to the sum of the square of the FWHM of all filters.

About the effect you saw in your images with the small cylinders, this is expected if you do not normalize your data (= correct for efficiency variations). The less your detector ressembles a perfect circle, the more the geometric artifacts. Gaps between detector blocks enhance this effect. Also, the efficiency within a single block detector varies due to the energy threshold that affects differently crystals with respect to their distance from the border of the block.

You can read about that in many PET books.

Best
Simon

1 Like

Thank you for the answer, Simon.
I also tried to reconstruct an image by using

  • -conv gaussian,0.1,0.1,3::psf -conv gaussian,1.5,1.5,3::psf
  • -conv gaussian,1.5,1.5,3::psf -conv gaussian,0.1,0.1,3::psf
  • -conv gaussian,1.5,1.5,3::psf
  • -conv gaussian,0.1,0.1,3::psf

and comparing them to conclude that it works. there is some hints in the benchmark script as well.

Unexpectedly, I am reconstructing two different data with high statistics and using psf but for one of them, I get a very nice image (I mean sharp edges - as we expect from deconvolution) but for the other one I get an image that edge are not as sharp as it should be. Here are the two images:

1- Using

astor-recon -df test.cdh -opti MLEM -it 12:4 -proj joseph -conv gaussian,1.5,1.5,3::psf -dim 260,260,260 -vox 0.4,0.4,0.4 -dout seyyedTest_min-angle-diff-30-MLEM-conv-psf

I got

2 - Using

castor-recon -df test.cdh -opti MLEM -it 12:7 -proj joseph -conv gaussian,1.5,1.5,3::psf -dim 240,240,240 -vox 0.4,0.4,0.4 -dout SeyyedTest_min-angle-diff-30-MLEM-conv-psf

I got

I really appreciate if someone can help me understand why I am seeing this difference?

Best regards,
Seyyed

The number of updates (iterations x OS) is greater in the first compared to the second, right? So, it is possible that you would have the same behavior with the same number of updates.

As for why the first has edges, this might be due to incorrect assumptions in the “deconvolution”: if an image was affected by a blur/convolution of “size” A, applying a deconvolution of “size” B, with B > A, would result in artifacts.

1 Like

Thanks you Maxime,

Yes, the number of iterations is different. It was my mistake, I should have uploaded a later iteration. However, that does not change anything. even at a later iteration they behave differently. But the reason is what you mentioned in your second paragraph.

I am uploading an image from the second reconstruction without any conv and and at iteration 5 for a comparison:
(same command as above just removed the -conv flag.)


I think if I continue for around 30 or 40 iterations with -conv option, I will get a good deconvolved image.

Best,
Seyyed