[Rtk-users] Model-based image reconstruction based on the RTK modules

Cyril Mory cyril.mory at creatis.insa-lyon.fr
Wed Nov 2 02:53:39 EDT 2016


Hi Vahid,

Welcome to RTK :)

Indeed, there are several iterative methods already implemented in RTK, 
but none of the filters allows you to easily extract the gradient of the 
least squares function there are minimizing.
If you need to minimize the classical non-regularized tomographic cost 
function, ie || R f - p ||², with R the forward projection operator, f 
the volume you are looking for, and p the measured projections, my best 
advice would be to copy some part of the pipeline of 
rtkSARTConeBeamReconstructionFilter to get the job done, ie the 
following part (copy-paste this into webgraphviz.com)

digraph SARTConeBeamReconstructionFilter {

Input0 [ label="Input 0 (Volume)"];
Input0 [shape=Mdiamond];
Input1 [label="Input 1 (Projections)"];
Input1 [shape=Mdiamond];

node [shape=box];
ForwardProject [ label="rtk::ForwardProjectionImageFilter" URL="\ref 
rtk::ForwardProjectionImageFilter"];
Extract [ label="itk::ExtractImageFilter" URL="\ref 
itk::ExtractImageFilter"];
MultiplyByZero [ label="itk::MultiplyImageFilter (by zero)" URL="\ref 
itk::MultiplyImageFilter"];
AfterExtract [label="", fixedsize="false", width=0, height=0, shape=none];
Subtract [ label="itk::SubtractImageFilter" URL="\ref 
itk::SubtractImageFilter"];
MultiplyByLambda [ label="itk::MultiplyImageFilter (by lambda)" 
URL="\ref itk::MultiplyImageFilter"];
Divide [ label="itk::DivideOrZeroOutImageFilter" URL="\ref 
itk::DivideOrZeroOutImageFilter"];
GatingWeight [ label="itk::MultiplyImageFilter (by gating weight)" 
URL="\ref itk::MultiplyImageFilter", style=dashed];
Displaced [ label="rtk::DisplacedDetectorImageFilter" URL="\ref 
rtk::DisplacedDetectorImageFilter"];
ConstantProjectionStack [ label="rtk::ConstantImageSource" URL="\ref 
rtk::ConstantImageSource"];
ExtractConstantProjection [ label="itk::ExtractImageFilter" URL="\ref 
itk::ExtractImageFilter"];
RayBox [ label="rtk::RayBoxIntersectionImageFilter" URL="\ref 
rtk::RayBoxIntersectionImageFilter"];
ConstantVolume [ label="rtk::ConstantImageSource" URL="\ref 
rtk::ConstantImageSource"];
BackProjection [ label="rtk::BackProjectionImageFilter" URL="\ref 
rtk::BackProjectionImageFilter"];
OutofInput0 [label="", fixedsize="false", width=0, height=0, shape=none];
OutofBP [label="", fixedsize="false", width=0, height=0, shape=none];
BeforeBP [label="", fixedsize="false", width=0, height=0, shape=none];
BeforeAdd [label="", fixedsize="false", width=0, height=0, shape=none];
Input0 -> OutofInput0 [arrowhead=none];
OutofInput0 -> ForwardProject;
ConstantVolume -> BeforeBP [arrowhead=none];
BeforeBP -> BackProjection;
Extract -> AfterExtract[arrowhead=none];
AfterExtract -> MultiplyByZero;
AfterExtract -> Subtract;
MultiplyByZero -> ForwardProject;
Input1 -> Extract;
ForwardProject -> Subtract;
Subtract -> MultiplyByLambda;
MultiplyByLambda -> Divide;
Divide -> GatingWeight;
GatingWeight -> Displaced;
ConstantProjectionStack -> ExtractConstantProjection;
ExtractConstantProjection -> RayBox;
RayBox -> Divide;
Displaced -> BackProjection;
BackProjection -> OutofBP [arrowhead=none];
}

As you can see, it is a very large part of the SART reconstruction 
filter, so yoiu might be better off just copying the whole 
SARTConeBeamReconstructionFilter and modifying it.

Of course, you could also look into ITK's cost function class, and see 
if one of the classes inherited from it suits your needs, implement your 
cost function this way, and use ITK's off-the-shelf solvers to minimize 
it. See the inheritance diagram in 
https://itk.org/Doxygen/html/classitk_1_1CostFunctionTemplate.html if 
you want to try this approach.

Best regards,
Cyril

On 11/01/2016 05:50 PM, vahid ettehadi via Rtk-users wrote:
> Hello RTK users and developers,
>
> I already implemented the RTK and reconstructed some images with the 
> FDK algorithm implemented in RTK. It works well. Thanks to RTK developers.
> Now, I am trying to develop a model-based image reconstruction for our 
> cone-beam micro-CT. I see already that some iterative algorithms like 
> ART and its modifications and conjugate-gradient (CG) method are 
> implemented in the RTK. I want to develop a model-based reconstruction 
> through the Newton/quasi-Newton optimizations methods. I was wondering 
> is it possible to extract the gradient of least square function from 
> implemented algorithms like CG module? Any recommendation will be 
> appreciated.
>
> Best Regards,
> Vahid
>
>
>
> _______________________________________________
> Rtk-users mailing list
> Rtk-users at public.kitware.com
> http://public.kitware.com/mailman/listinfo/rtk-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/rtk-users/attachments/20161102/2d2582ae/attachment-0010.html>


More information about the Rtk-users mailing list