[Rtk-users] 3D Backprojection using 360 X-ray 2D images

Simon Rit simon.rit at creatis.insa-lyon.fr
Sun Feb 13 16:25:34 EST 2022


Hi,
FDK takes as second input a stack of projections images, not a constant
image. You need to convert your projections to line integrals. Instead of
using an ImageFileReader, you can use rtk::ProjectionsReader
<http://www.openrtk.org/Doxygen/classrtk_1_1ProjectionsReader.html> does
this for you.
The constant image as first input can be left as is and is used to indicate
the characteristics of the reconstructed image (number of pixels, spacing,
origin, etc.).
Simon


On Sat, Feb 12, 2022 at 2:58 AM Fernando Hueso González <
Fernando.Hueso at uv.es> wrote:

> Hello RTK users,
>
> I am a totally newbie here, and wanted to ask for some help.
>
> I have a dataset of 360 raw images, each corresponding to an X-ray of an
> object in steps of 1 degree (rotating around origin). They correspond to a
> flat panel detector and a microfocus X-ray source. I would be interested in
> reconstructing the 3D geometry using FDK backprojection. (I also have all
> the information about detector and source distance, etc.)
>
> I was able to follow the FirstReconstruction.cxx example on GitHub to
> create my geometry object.
>
> using GeometryType = rtk::ThreeDCircularProjectionGeometry;
> GeometryType::Pointer geometry = GeometryType::New();
> for (size_t i = 0; i < 360; i++)
> {
>     geometry->AddProjection(168, 271, i);
> }
>
> I was also able to correctly load the 360x 2D images (a binary array of
> signed shorts) using ITK:
>
> using ImageIOType = itk::RawImageIO<short, 2>;
> using ImageType = itk::Image<short, 2>;
> ImageIOType::Pointer io = ImageIOType::New();
> io->SetDimensions(0,768);
> io->SetDimensions(1,486);
> io->SetByteOrderToLittleEndian();
> itk::ImageFileReader<ImageType>::Pointer reader = itk::ImageFileReader<ImageType>::New();
> reader->SetImageIO(io);
> for (size_t i = 0; i < 360; i++)
> {
>     reader->SetFileName(std::to_string(i)+".raw");
>     reader->Update();
> }
>
> However, now I am struggling with the next step. I am not sure how to
> convert all these 360 imageIO projections to a constant image source, as in
> the FirstReconstruction example.
>
> Or is there a more appropriate way to connect the loaded images to the
> FDKConeBeamReconstructionFilter ?
>
> using FDKCPUType = rtk::FDKConeBeamReconstructionFilter<ImageType>;
> FDKCPUType::Pointer feldkamp = FDKCPUType::New();
> feldkamp->SetGeometry(geometry);
> ???
>
> Thanks in advance,
>
> Fernando.
>
> _______________________________________________
> Rtk-users mailing list
> Rtk-users at public.kitware.com
> https://public.kitware.com/mailman/listinfo/rtk-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://public.kitware.com/pipermail/rtk-users/attachments/20220213/2c678f3a/attachment.htm>


More information about the Rtk-users mailing list