[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