<div dir="ltr"><div><div><div><div><div>Hi,<br></div>Please refer to my previous post to understand the coordinates of your volume:<br><a href="http://public.kitware.com/pipermail/rtk-users/2014-December/000634.html">http://public.kitware.com/pipermail/rtk-users/2014-December/000634.html</a><br></div>That should explain your coordinate system.<br></div><br></div>Cyril is right, there is no filtering in the FDKBackProjectionImageFilter and the BackProjectionImageFilter. Both work for perspective projections but they also work for parallel beams (and give then the same result).<br></div>Simon<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Dec 10, 2014 at 1:35 PM, Cyril Mory <span dir="ltr"><<a href="mailto:cyril.mory@creatis.insa-lyon.fr" target="_blank">cyril.mory@creatis.insa-lyon.fr</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div text="#000000" bgcolor="#FFFFFF">
    Hi Padraig,<br>
    <br>
    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). <br>
    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.<br>
    If you wish to design iterative reconstruction algorithms, on the
    other hand, use the non-FDK back projection filters. <br>
    <br>
    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. <br>
    <br>
    Regards,<br>
    Cyril<div><div class="h5"><br>
    <br>
    <div>On 12/10/2014 12:59 PM, Padraig Looney
      wrote:<br>
    </div>
    </div></div><blockquote type="cite"><div><div class="h5">
      <div dir="ltr">
        <div>Dear list,<br>
          <br>
        </div>
        <div>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.<br>
           <br>
          rtkBackProjectionImageFilter is described as “implementation
          of the back projection step of the FDK also for <b><u>filtered</u></b>
          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?<br>
          <br>
          <br>
              // Create reconstructed image<br>
              typedef rtk::ConstantImageSource< FloatImageType >
          ConstantImageSourceType;<br>
              ConstantImageSourceType::PointType origin;<br>
              ConstantImageSourceType::SpacingType spacing;<br>
              ConstantImageSourceType::SizeType sizeOutput;<br>
              ConstantImageSourceType::DirectionType direction;<br>
              direction.SetIdentity();<br>
          <br>
              sizeOutput[0] = 1890; //1747; //1890; as found in dicom
          info<br>
              sizeOutput[1] = 2457; //as found in dicom info<br>
              sizeOutput[2] = 1;  //as found in dicom info<br>
          <br>
              double offset(26.27); // Gap between detector and sample<br>
              origin[0] = 171.99; <br>
              origin[1] = -223/2; //223 is the height of the
          reconstructed volume<br>
              origin[2] = offset+0;<br>
          <br>
              spacing[0] = 0.091; <br>
              spacing[1] = 0.091;<br>
              spacing[2] = 1;<br>
          <br>
              direction [0][0] = -1;<br>
              direction [0][1] = 0;<br>
              direction [0][2] = 0;<br>
              direction [1][0] = 0;<br>
              direction [1][1] = 1;<br>
              direction [1][2] = 0;<br>
              direction [2][0] = 0;<br>
              direction [2][1] = 0;<br>
              direction [2][2] = 1;<br>
          <br>
              ConstantImageSourceType::Pointer constantImageSource =
          ConstantImageSourceType::New();<br>
          <br>
              constantImageSource->SetOrigin( origin );<br>
              constantImageSource->SetSpacing( spacing );<br>
              constantImageSource->SetSize( sizeOutput );<br>
              constantImageSource->SetConstant( 0. );<br>
              constantImageSource->SetDirection(direction);<br>
          <br>
              const ImageType::DirectionType& direct =
          constantImageSource->GetDirection();<br>
          <br>
              std::cout <<"Direction3DZeroMatrix= " <<
          std::endl;<br>
              std::cout << direct << std::endl;<br>
          <br>
              std::cout << "Performing reconstruction" <<
          std::endl;<br>
          <br>
              //BackProjection recontruction (no filtering)<br>
              typedef rtk::ProjectionGeometry<3>
          ProjectionGeometry;<br>
              ProjectionGeometry::Pointer baseGeom =
          geometry.GetPointer();<br>
              typedef rtk::BackProjectionImageFilter< ImageType
          ,ImageType> FDKCPUType;<br>
              FDKCPUType::Pointer feldkamp = FDKCPUType::New();<br>
              feldkamp->SetInput( 0,
          constantImageSource->GetOutput() );<br>
              feldkamp->SetInput( 1, imageStack);<br>
              feldkamp->SetGeometry( baseGeom );<br>
              feldkamp->Update();<br>
          <br>
          <br>
        </div>
      </div>
      <br>
      <fieldset></fieldset>
      <br>
      </div></div><pre>_______________________________________________
Rtk-users mailing list
<a href="mailto:Rtk-users@public.kitware.com" target="_blank">Rtk-users@public.kitware.com</a>
<a href="http://public.kitware.com/mailman/listinfo/rtk-users" target="_blank">http://public.kitware.com/mailman/listinfo/rtk-users</a><span class="HOEnZb"><font color="#888888">
</font></span></pre><span class="HOEnZb"><font color="#888888">
    </font></span></blockquote><span class="HOEnZb"><font color="#888888">
    <br>
    <pre cols="72">-- 
--
Cyril Mory, Post-doc
CREATIS
Leon Berard cancer treatment center
28 rue Laënnec
69373 Lyon cedex 08 FRANCE

Mobile: <a href="tel:%2B33%206%2069%2046%2073%2079" value="+33669467379" target="_blank">+33 6 69 46 73 79</a></pre>
  </font></span></div>

<br>_______________________________________________<br>
Rtk-users mailing list<br>
<a href="mailto:Rtk-users@public.kitware.com">Rtk-users@public.kitware.com</a><br>
<a href="http://public.kitware.com/mailman/listinfo/rtk-users" target="_blank">http://public.kitware.com/mailman/listinfo/rtk-users</a><br>
<br></blockquote></div><br></div>