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
[email protected]
https://public.kitware.com/mailman/listinfo/rtk-users

Reply via email to