[Rtk-users] SIRT Reconstruction
Lotte Schyns
lotte.schyns at maastro.nl
Mon Jul 24 06:21:36 EDT 2017
Hi Cyril. I performed a SIRT reconstruction with 100 iterations as you
suggested. After a whopping 80 hours of calculation time on 64 cores,
the result was a bit disappointing (in the dropbox:
https://www.dropbox.com/sh/7a4bkyjg43zjmy7/AAAp4tJrk9HedMEEuIKsGYDSa?dl=0).
If anything, it looks worse than 3 iterations. Do you think we need even
more iterations? Another question, you said the conjugate gradient
method minimizes the same cost function as the SIRT method, but in the
doxygen documentation I find that the conjugate gradient is similar to
SART (not SIRT). Could you elaborate a bit on this please? Thanks again!
On 18-07-17 14:28, Cyril Mory wrote:
> The weights are a way to adapt the cost function if you know that some
> pixels of your projection data are more reliable than others (you then
> give them a larger weight than the others). This is called Weighted
> Least Squares (WLS), you can easily find a lot of theory on it. IYou
> should only do this if you have a reliable way to estimate the
> variance of the noise on your projection data, and use the inverse
> variances as weights. There is one weight per pixel, so the weights
> image should be exactly the same size as the full projection dataset.
> Note that this input is mandatory for the
> rtk::ConjugateGradientConeBeamReconstructionFilter, so if you do not
> want to use it, you still have to generate an image full of ones and
> pass it as the weights. Clearly that behavior is not optimal, but that
> is the way it works at the moment.
>
> The support mask enforces a support constraint. It should be a binary
> volume (ones in the ROI you are interested in reconstructing, zeros
> outside). If it is provided, over the course of the iterations, the
> iterates are multiplied by the mask, leaving the voxels inside the ROI
> unchanged, and setting the ones outside the ROI to zero.
> Mathematically, it is a special case of preconditioner (a diagonal,
> binary preconditioner). Not passing a mask yields the same result (but
> faster) as passing a mask full of ones.
>
> Hope this helps,
> Cyril
>
> PS: If at some point you decide to use the "Weights" input of the
> conjugate gradient filter, in order to perform WLS reconstructions, do
> write another email on this list: I have a lot of advice to share on
> this topic.
>
> On 18/07/2017 14:02, Lotte Schyns wrote:
>> Thanks! I will try both the SIRT with 100 iterations and the conjugate
>> gradient method. What exactly are the weights (input 2) and input
>> support mask in rtkConjugateGradientConeBeamReconstructionFilter?
>>
>> On 18-07-17 11:31, Cyril Mory wrote:
>>> Hi Lotte,
>>>
>>> I had a very quick look at what you are doing. It looks fine to me,
>>> you just need to perform way more iterations in the SIRT case. 100
>>> would be a good start. SIRT is more stable than SART when there are
>>> inconsistencies in the projection data, but converges slowly.
>>>
>>> An alternative to SIRT, which minimizes the same cost function with a
>>> faster algorithm, is the conjugate gradient algorithm. You should
>>> obtain nice results with something like 30-40 iterations (look for
>>> rtk::ConjugateGradientConeBeamReconstructionFilter if you want to give
>>> it a try).
>>>
>>> Best regards,
>>> Cyril
>>>
>>>
>>> On 18/07/2017 11:17, Lotte Schyns wrote:
>>>> Hello,
>>>>
>>>> We are having problems with the SIRT reconstructions. They seem very
>>>> strange and blurry. However, other reconstructions (SART, FDK,
>>>> iterativeFDK) look perfect. I uploaded an example of a SART and a SIRT
>>>> reconstruction (same parameters) to
>>>> https://www.dropbox.com/sh/7a4bkyjg43zjmy7/AAAp4tJrk9HedMEEuIKsGYDSa?dl=0.
>>>>
>>>>
>>>> I also uploaded a minimalistic version of the code that I used (the
>>>> paths in CMakeLists.txt probably need to be adapted to your
>>>> system). You
>>>> can alternate between SART and SIRT by changing line 143. The raw data
>>>> is also available on dropbox. I didn't use
>>>> rtkXRadRawToAttenuationImageFilter, because our projections are
>>>> already
>>>> corrected for the dark field and flood field, so
>>>> (signal-dark)/(flood-dark). I just take the natural logarithm and
>>>> multiply by -1. Do you know what could be the problem with the SIRT
>>>> reconstructions? Are we using wrong parameters? Thanks for your time.
>>>>
>>>> Lotte
>>>> _______________________________________________
>>>> Rtk-users mailing list
>>>> Rtk-users at public.kitware.com
>>>> http://public.kitware.com/mailman/listinfo/rtk-users
>> _______________________________________________
>> Rtk-users mailing list
>> Rtk-users at public.kitware.com
>> http://public.kitware.com/mailman/listinfo/rtk-users
>
More information about the Rtk-users
mailing list