[ITK Community] Resampling and origin patient for DICOM files
Guillaume Lemaître
g.lemaitre58 at gmail.com
Mon Mar 17 11:59:39 EDT 2014
Thanks Luis,
I didn't think yet about suggestion A) and it solves already one of the
issue that I observed.
Regarding the other orientation problem, I think I see the problem more
clearly. The relevant thing that I didn't consider at first is:
1. Extract Image
<http://www.itk.org/Doxygen/html/classitk_1_1Image.html> Orientation
& Image <http://www.itk.org/Doxygen/html/classitk_1_1Image.html> Position
from DICOM images, and then calculate the ordering based on the 3D
coordinate of the slice
And I saw that the last image in the serie becomes the origin so it should
be something related with the acquisition performed in the "reverse way"
when considering the 3D coordinates.
Probably, I could start by receiving all the series using GDCM, which would
avoid any trouble with the header after.
Thanks,
Best regards,
On 17 March 2014 16:36, Luis Ibanez <luis.ibanez at kitware.com> wrote:
> Hi Guillaume,
>
>
> Thanks for the detailed description of what you are trying to do.
>
>
> A) When resampling an image mask, please make sure to use the
>
> NearestNeighbor interpolator,
>
> so that the values of the mask are not blended in the borders.
>
>
> B) Your expectation on the behavior of the origin is correct.
>
> You are correctly feeding to the ResampleImageFilter the
> parameters of the target image:
>
> Origin
> Spacing
> Direction
> Size
>
> C) Make sure that the "targetVolume" source of the image
> has been updated BEFORE you take the values from
> it output. That is, if the targetVolume class is a file reader,
> then you may want to do something like:
>
> targetVolume->Update();
> const TargetImageType * targetImage = targetVolume->GetOutput();
>
> resampler->SetOutputOrigin( targetImage->GetOrigin() );
> resampler->SetOutputSpacing( targetImage->GetSpacing() );
> resampler->SetOutputDirection(
> targetImage->GetOutput()->GetDirection() );
> resampler->SetSize( targetImage->GetLargestPossibleRegion().GetSize()
> );
>
> resampler->Update();
>
>
> D) At the moment of registering, what really matters is the Origin value
> inside ITK, regardless of whether it matches the one in the DICOM tags.
>
> E) At the moment of saving the resampled mask into a DICOM file(s),
> you can then cross check whether the origin tags in the resampled
> mask DICOM file, matches the ones from the targetVolume DICOM files.
>
> That is, give ITK and GDCM the opportunity to the the proper magic
> in the process of reading and writing the image.
>
>
> Please let us know if you run into any questions, as you do this.
>
>
> Thanks
>
>
> Luis
>
>
>
>
> On Mon, Mar 17, 2014 at 7:38 AM, Guillaume Lemaître <
> g.lemaitre58 at gmail.com> wrote:
>
>> Hi all,
>>
>> I am currently working on the following task. I got two DICOM series from
>> different modality with different spacing, and origin. A third DICOM serie
>> correspond to binary segmentation of one the previous serie. I would like
>> to "project" this segmentation into the other serie. I think that the
>> resampling filter should make this work quite well. It should look
>> something like that:
>>
>> ResampleFilterType::Pointer resampler = ResampleFilterType::New();
>> resampler->SetInput( maskVolume->GetOutput() );
>> resampler->SetTransform( transform );
>> resampler->SetInterpolator( interpolator );
>> resampler->SetOutputOrigin( targetVolume->GetOutput()->GetOrigin() );
>> resampler->SetOutputSpacing( targetVolume->GetOutput()->GetSpacing() );
>> resampler->SetOutputDirection(
>> targetVolume->GetOutput()->GetDirection() );
>> resampler->SetSize(
>> targetVolume->GetOutput()->GetLargestPossibleRegion().GetSize() );
>> resampler->Update();
>>
>> However, I got trapped with what seems to be a problem of origin. I
>> search around and different discussions and got quite confused. From what I
>> found is the following:
>> Using gdcminfo to read the origin of targetVolume will give me the same
>> information than the tag (0020,0032) of the DICOM header. However, it will
>> be different from targetVolume->GetOuput()->GetOrigin() which imply a shift
>> when saving my data later.
>>
>> What should the proper way to do such task?
>>
>> Thanks in advance,
>>
>> Best regards,
>> --
>>
>>
>>
>>
>> *LEMAÎTRE Guillaume PhD CandiateMSc Erasmus Mundus ViBOT
>> (Vision-roBOTic)MSc Business Innovation and Technology Management (in
>> progress) *
>> g.lemaitre58 at gmail.com
>>
>> *ViCOROB - Computer Vision and Robotic Team*
>> Universitat de Girona, Campus Montilivi, Edifici P-IV 17071 Girona
>> Tel. +34 972 41 98 12 - Fax. +34 972 41 82 59
>> http://vicorob.udg.es/
>>
>> *LE2I - Le Creusot*IUT Le Creusot, Laboratoire LE2I, 12 rue de la
>> Fonderie, 71200 Le Creusot
>> Tel. +33 3 85 73 10 90 - Fax. +33 3 85 73 10 97
>> http://le2i.cnrs.fr
>>
>> https://sites.google.com/site/glemaitre58/
>> Vice - Chairman of A.S.C. Fours UFOLEP
>> Chairman of A.S.C. Fours FFC
>> Webmaster of http://ascfours.free.fr
>>
>> _______________________________________________
>> Community mailing list
>> Community at itk.org
>> http://public.kitware.com/cgi-bin/mailman/listinfo/community
>>
>>
>
--
*LEMAÎTRE GuillaumePhD CandiateMSc Erasmus Mundus ViBOT (Vision-roBOTic)MSc
Business Innovation and Technology Management (in progress)*
g.lemaitre58 at gmail.com
*ViCOROB - Computer Vision and Robotic Team*
Universitat de Girona, Campus Montilivi, Edifici P-IV 17071 Girona
Tel. +34 972 41 98 12 - Fax. +34 972 41 82 59
http://vicorob.udg.es/
*LE2I - Le Creusot*IUT Le Creusot, Laboratoire LE2I, 12 rue de la Fonderie,
71200 Le Creusot
Tel. +33 3 85 73 10 90 - Fax. +33 3 85 73 10 97
http://le2i.cnrs.fr
https://sites.google.com/site/glemaitre58/
Vice - Chairman of A.S.C. Fours UFOLEP
Chairman of A.S.C. Fours FFC
Webmaster of http://ascfours.free.fr
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/community/attachments/20140317/81a248ba/attachment-0001.html>
More information about the Community
mailing list