Hi there,
We are trying to perform a SPECT reconstruction using our own PSF operator. We have fit the PSF response to a double gaussian mixture in order to better account for the tails. This fitting has given results for FWHM that seem reasonable, yet when we try to incorporate this new operator into the reconstruction the image is very poor.
We did the same method but using a single gaussian operator and obtained satisfactory results.
I was just wondering if we are doing something obviously wrong when defining the double gaussian operator, otherwise the issue may lie with our data or fitting.
See the image below for a comparison between the reconstructions.
When fitting the double gaussian we get weights for each, that sum to 1. The amplitude used when defining the operator is equal to
A = w / [sigma * sqrt(2(pi)]
This amplitude appears to vary as an exponential decay with distance, hence the form of ‘amplitude_fn’ in our code.
I have given our code used to define the double gaussian operator below. Any ideas or suggestions are greatly appreciated,
Thank you
amplitude_fn = lambda d, bs: (bs[0] * torch.exp(-bs[1] * d)) + bs[2]
sigma_fn = lambda d, bs: (bs[0]*d + bs[1])
amp_1_params = torch.tensor([1.497, 0.074, 0.414], device=device, dtype=torch.float32) # Input values from fitting
amp_2_params = torch.tensor([0.066, 0.287, 0.005], device=device, dtype=torch.float32) # Input values from fitting
sigma_1_params = torch.tensor(([0.015, 0.177]), device=device, dtype=torch.float32) # Input m and c from fitting
sigma_2_params = torch.tensor(([0.297, 0.767]), device=device, dtype=torch.float32) # Input m and c from fitting
operator_1 = GaussianOperator(
amplitude_fn,
sigma_fn,
amp_1_params,
sigma_1_params,
)
operator_2 = GaussianOperator(
amplitude_fn,
sigma_fn,
amp_2_params,
sigma_2_params,
)
double_operator = operator_1 + operator_2
double_operator.save(file_path)