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

Cyril Mory cyril.mory at creatis.insa-lyon.fr
Wed Dec 10 07:35:19 EST 2014


Hi Padraig,

I can only answer part of your questions, sorry about the others: 
neither rtkBackProjectionImageFilter nor rtkFDKBackProjectionImageFilter 
perform filtering, and both are cone-beam. In fact, at the moment, 
cone-beam is the only geometry available in RTK. The difference is that 
rtkFDKBackProjectionImageFilter inherits from 
rtkBackProjectionImageFilter, and redefines some methods (I think it 
performs a specific weighting of projection data depending on the 
distance to the central plane, as described in the FDK paper, but I 
cannot say for sure).
As far as I know, there is no all-in-one filter for FDK in RTK. You have 
to plug the filters together yourself, the same way it is done in the 
rtkfdk application, and the back projection filter you must then use is 
either rtkFDKBackProjectionImageFilter or its CUDA ou OPENCL counterpart.
If you wish to design iterative reconstruction algorithms, on the other 
hand, use the non-FDK back projection filters.

Without filtering, your reconstruction is probably very blurry. I would 
advise you to try to convert your data to the ITK standard mhd and raw, 
and to use the rtkfdk application. Once you get a good reconstruction 
out-of-the-box with your data, you can start playing with internal filters.

Regards,
Cyril

On 12/10/2014 12:59 PM, Padraig Looney wrote:
> 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();
>
>
>
>
> _______________________________________________
> Rtk-users mailing list
> Rtk-users at public.kitware.com
> http://public.kitware.com/mailman/listinfo/rtk-users

-- 
--
Cyril Mory, Post-doc
CREATIS
Leon Berard cancer treatment center
28 rue Laënnec
69373 Lyon cedex 08 FRANCE

Mobile: +33 6 69 46 73 79

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/rtk-users/attachments/20141210/8a0c0ef7/attachment-0009.html>


More information about the Rtk-users mailing list