<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>