I think we need to provide some help to users in setting parameters. The unit-less parameters have natural default values
T = 1
p = 1.2
q = 2
However, it's really difficult for people to set sigma_x and sigma_y . Here is how we might handle it for the case when weight_type=0 and the weighting is just 1/sigma_y for all sinogram entries. It would need to be generalized to handle more general weightings.
We define the new svmbir input parameters:
avg_y
sigma_y_rel
sigma_x
sigma_x_rel
Given by
avg_y [ value>0, default = 1 , This parameter can be set by the user to the approximate average sinogram value]
sigma_y_rel [ value>0, default = 1 ]
This interface would default to reasonable parameter values as long as avg_y is equal to something close to the average sinogram value. Once they get a reasonable reconstruction, they can adjust the regularization by changing sigma_x_rel. Increasing sigma_x_rel >1 would make the reconstruction sharper, and decreasing 0< sigma_x_rel <1 would make it blurrier.
So for example, if they want to make the image sharper, they would do something like:
I think we need to provide some help to users in setting parameters. The unit-less parameters have natural default values T = 1 p = 1.2 q = 2
However, it's really difficult for people to set sigma_x and sigma_y . Here is how we might handle it for the case when weight_type=0 and the weighting is just 1/sigma_y for all sinogram entries. It would need to be generalized to handle more general weightings.
We define the new svmbir input parameters: avg_y sigma_y_rel sigma_x sigma_x_rel
Given by
avg_y [ value>0, default = 1 , This parameter can be set by the user to the approximate average sinogram value] sigma_y_rel [ value>0, default = 1 ]
sigma_x [ value>0, default = (0.1 avg_y)/(delta_channel num_channels * min(img_size_x_rel, img_size_y_rel) ) ] sigma_x_rel [ value>0, default = 1 ]
Then we call the sv-mbir C code parameters to the following values:
When they call svmbir, they would do something like:
sino_average = numpy.average(sino), x = svmbir.recon(sino, angles, weight, num_threads=20, avg_y = sino_average, center_offset=-6, img_downsamp=4, max_iterations=10)
This interface would default to reasonable parameter values as long as avg_y is equal to something close to the average sinogram value. Once they get a reasonable reconstruction, they can adjust the regularization by changing sigma_x_rel. Increasing sigma_x_rel >1 would make the reconstruction sharper, and decreasing 0< sigma_x_rel <1 would make it blurrier.
So for example, if they want to make the image sharper, they would do something like:
x = svmbir.recon(sino, angles, weight, num_threads=20, avg_y = sino_average, sigma_x_rel = 1.2, center_offset=-6, img_downsamp=4, max_iterations=10)
In addition, the interface would still support the original direct syntax of setting the value of sigma_x. For example:
x = svmbir.recon(sino, angles, weight, num_threads=20, avg_y = sino_average, sigma_x=0.6350, center_offset=-6, img_downsamp=4, max_iterations=10)