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?
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?
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?
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?
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”?
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.
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:
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.
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.)