[Rtk-users] positioning of the reconstructed volume and some questions on filtering

Padraig Looney padraig.looney at gmail.com
Wed Dec 10 06:59:36 EST 2014


Dear list,

We have been using RTK to reconstruct some digital breast tomosynthesis
images. The reconstruction using BackProjectionImageFilter looks good. The
only issue we are having is in specifying the coordinates of the
reconstructed volume. The coordinate system is attached and the code we use
to reconstruct is below. I expected the origin of the first slice in the
reconstructed volume to be at (w,-h/2,offset). What I find is that the
reconstructed volume is shifted in the y direction by about half the height
(but not exactly). The X position looks correct for this phantom.

rtkBackProjectionImageFilter is described as “implementation of the back
projection step of the FDK also for *filtered* back projection
reconstruction for cone-beam CT images with a circular source trajectory”.
However, I could not find any filtering of data in the code. Could you
please confirm if there is filtering in this code and what type of filters
there are (ramp, Hann etc)? Also, is the difference
with rtkBackProjectionImageFilter that rtkFDKBackProjectionImageFilter is
for cone beam while rtkBackProjectionImageFilter is not?


    // Create reconstructed image
    typedef rtk::ConstantImageSource< FloatImageType >
ConstantImageSourceType;
    ConstantImageSourceType::PointType origin;
    ConstantImageSourceType::SpacingType spacing;
    ConstantImageSourceType::SizeType sizeOutput;
    ConstantImageSourceType::DirectionType direction;
    direction.SetIdentity();

    sizeOutput[0] = 1890; //1747; //1890; as found in dicom info
    sizeOutput[1] = 2457; //as found in dicom info
    sizeOutput[2] = 1;  //as found in dicom info

    double offset(26.27); // Gap between detector and sample
    origin[0] = 171.99;
    origin[1] = -223/2; //223 is the height of the reconstructed volume
    origin[2] = offset+0;

    spacing[0] = 0.091;
    spacing[1] = 0.091;
    spacing[2] = 1;

    direction [0][0] = -1;
    direction [0][1] = 0;
    direction [0][2] = 0;
    direction [1][0] = 0;
    direction [1][1] = 1;
    direction [1][2] = 0;
    direction [2][0] = 0;
    direction [2][1] = 0;
    direction [2][2] = 1;

    ConstantImageSourceType::Pointer constantImageSource =
ConstantImageSourceType::New();

    constantImageSource->SetOrigin( origin );
    constantImageSource->SetSpacing( spacing );
    constantImageSource->SetSize( sizeOutput );
    constantImageSource->SetConstant( 0. );
    constantImageSource->SetDirection(direction);

    const ImageType::DirectionType& direct =
constantImageSource->GetDirection();

    std::cout <<"Direction3DZeroMatrix= " << std::endl;
    std::cout << direct << std::endl;

    std::cout << "Performing reconstruction" << std::endl;

    //BackProjection recontruction (no filtering)
    typedef rtk::ProjectionGeometry<3> ProjectionGeometry;
    ProjectionGeometry::Pointer baseGeom = geometry.GetPointer();
    typedef rtk::BackProjectionImageFilter< ImageType ,ImageType>
FDKCPUType;
    FDKCPUType::Pointer feldkamp = FDKCPUType::New();
    feldkamp->SetInput( 0, constantImageSource->GetOutput() );
    feldkamp->SetInput( 1, imageStack);
    feldkamp->SetGeometry( baseGeom );
    feldkamp->Update();
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/rtk-users/attachments/20141210/ccc25fef/attachment-0008.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: reconstruct.pdf
Type: application/pdf
Size: 12356 bytes
Desc: not available
URL: <http://public.kitware.com/pipermail/rtk-users/attachments/20141210/ccc25fef/attachment-0008.pdf>


More information about the Rtk-users mailing list