[ITK] [ITK-users] Rotating image results in last slices being half empty

Matias Montroull matimontg at gmail.com
Sat Apr 15 10:27:45 EDT 2017


Dzenan,
The center of rotation is set to use milimeters or image coordinates?
Thanks

Matias

On Apr 14, 2017 2:17 PM, "Dženan Zukić" <dzenanz at gmail.com> wrote:

> Here is the code I used:
>
> #include <itkImageFileReader.h>
> #include <itkImageFileWriter.h>
> #include <itkResampleImageFilter.h>
> #include <itkEuler3DTransform.h>
>
> template< typename TImage >
> itk::SmartPointer<TImage> ReadImage(const char *filename)
> {
>     typedef itk::ImageFileReader<TImage> ReaderType;
>     typename ReaderType::Pointer r = ReaderType::New();
>     r->SetFileName(filename);
>     r->Update();
>     return r->GetOutput();
> }
>
> template< typename TImage >
> void WriteImage(itk::SmartPointer<TImage> out, const char *filename)
> {
>     typedef itk::ImageFileWriter<TImage> WriterType;
>     typename WriterType::Pointer w = WriterType::New();
>     w->SetInput(out);
>     w->SetFileName(filename);
>     //w->SetUseCompression(true);
>     w->Update();
> }
>
> int main(int argc, char *argv[])
> {
>     const unsigned int dimension = 3;
>     typedef itk::Image<short, dimension> ImageType;
>     ImageType::Pointer inputImage = ReadImage<ImageType>("C:/CBCT.nrrd");
>
>     typedef itk::ResampleImageFilter<ImageType, ImageType> FilterType;
>     FilterType::Pointer FiltroResample = FilterType::New();
>     FiltroResample->SetInput(inputImage);
>     typedef itk::LinearInterpolateImageFunction<ImageType, double>
> InterpolatorType;
>     InterpolatorType::Pointer interpolator = InterpolatorType::New();
>     FiltroResample->SetInterpolator(interpolator);
>     FiltroResample->SetOutputDirection(inputImage->GetDirection());
>     FiltroResample->SetOutputOrigin(inputImage->GetOrigin());
>     ImageType::SizeType inputSize = inputImage->
> GetLargestPossibleRegion().GetSize();
>     FiltroResample->SetSize(inputSize);
>     const ImageType::SpacingType& inputSpacing = inputImage->GetSpacing();
>     FiltroResample->SetOutputSpacing(inputSpacing);
>     FiltroResample->SetDefaultPixelValue(-1000);
>     typedef itk::Euler3DTransform<double> TransformType;
>     TransformType::Pointer transform = TransformType::New();
>     transform->SetRotation(0.2, 0.3, 0.5);
>     double centro[3] = { 10,20,30 };
>     transform->SetCenter(centro);
>     FiltroResample->SetTransform(transform);
>     FiltroResample->Update();
>     WriteImage<ImageType>(FiltroResample->GetOutput(),
> "C:/cbctResampled.nrrd");
> }
>
> On Fri, Apr 14, 2017 at 1:15 PM, Dženan Zukić <dzenanz at gmail.com> wrote:
>
>> Hi Matias,
>>
>> I didn't compile to use with Slicer. I only open the input and output
>> image in Slicer to visualize them.
>>
>> But making a Slicer CLI module is fairly easy. You can take a look at one
>> <https://github.com/Slicer/Slicer/tree/master/Modules/CLI/AddScalarVolumes/>
>> of the existing modules, docs
>> <https://www.slicer.org/wiki/Documentation/Nightly/Developers/Modules> including
>> extension wizard
>> <https://www.slicer.org/wiki/Documentation/Nightly/Developers/ExtensionWizard>
>> .
>>
>> Regards,
>> Dženan Zukić, PhD, Senior R&D Engineer, Kitware (Carrboro, N.C.)
>>
>> On Fri, Apr 14, 2017 at 12:26 PM, Matias <matimontg at gmail.com> wrote:
>>
>>> Thanks Dzenan. I actually use OrigenX and OrigenY to assign it to the
>>> DCM tags. Just curious, how did you compile to use with Slicer?
>>>
>>> El jue., 13 de abr. de 2017 a la(s) 12:14, Dženan Zukić [via ITK -
>>> Users] <[hidden email]
>>> <http:///user/SendEmail.jtp?type=node&node=38121&i=0>> escribió:
>>>
>>>> Hi Matias,
>>>>
>>>> you are not using origenX or origenY after they are defined. But your
>>>> program (with modifications to make it compile) works for me:
>>>> [image: Inline image 1]
>>>>
>>>> Regards,
>>>> Dženan Zukić, PhD, Senior R&D Engineer, Kitware (Carrboro, N.C.)
>>>>
>>>> On Sat, Apr 8, 2017 at 6:08 PM, Matias <[hidden email]
>>>> <http:///user/SendEmail.jtp?type=node&node=38116&i=0>> wrote:
>>>> Hi, I'm rotating a volume (Using the Euler3DTransform) and the final
>>>> set of slices are half black or empty. here's an example when rotating a
>>>> volume of 10 slices: Am I missing something such as changing the origin or
>>>> maybe computing the center incorrectly? (The center is passed as parameter
>>>> from another program) And here's the code I'm using: typedef
>>>> itk::ResampleImageFilter<ImageType, ImageType> FilterType;
>>>> FilterType::Pointer FiltroResample = FilterType::New();
>>>> FiltroResample->SetInput(reader->GetOutput()); typedef
>>>> itk::LinearInterpolateImageFunction<ImageType, double >
>>>> InterpolatorType; InterpolatorType::Pointer interpolator =
>>>> InterpolatorType::New(); FiltroResample->SetInterpolator(interpolator);
>>>> FiltroResample->SetOutputDirection(inputImage->GetDirection());
>>>> FiltroResample->SetOutputOrigin(inputImage->GetOrigin());
>>>> ImageType::SizeType inputSize = inputImage->GetLargestPossibleRegion().GetSize();
>>>> FiltroResample->SetSize(inputSize); const ImageType::SpacingType&
>>>> inputSpacing = inputImage->GetSpacing(); FiltroResample->SetOutputSpacing(inputSpacing);
>>>> FiltroResample->SetDefaultPixelValue(-1000); typedef
>>>> itk::Euler3DTransform< double > TransformType; //Transform
>>>> TransformType::Pointer transform = TransformType::New(); double alfa, beta,
>>>> gamma, centro_rotacion_X, centro_rotacion_Y, centro_rotacion_Z,
>>>> origenX,origenY; gamma = atof(argv[2]); beta = atof(argv[3]); alfa =
>>>> atof(argv[4]); centro_rotacion_X = atof(argv[5]); centro_rotacion_Y =
>>>> atof(argv[6]); centro_rotacion_Z = atof(argv[7]); origenX = atof(argv[8]);
>>>> origenY = atof(argv[9]); transform->SetRotation(gamma, beta, alfa); double
>>>> centro[3] = { centro_rotacion_X, centro_rotacion_Y, centro_rotacion_Z };
>>>> transform->SetCenter(centro); FiltroResample->SetTransform(transform);
>>>> FiltroResample->Update();
>>>> ------------------------------
>>>> View this message in context: Rotating image results in last slices
>>>> being half empty
>>>> <http://itk-users.7.n7.nabble.com/Rotating-image-results-in-last-slices-being-half-empty-tp38081.html>
>>>> Sent from the ITK - Users mailing list archive
>>>> <http://itk-users.7.n7.nabble.com/> at Nabble.com.
>>>>
>>>> _____________________________________
>>>> Powered by www.kitware.com
>>>>
>>>> Visit other Kitware open-source projects at
>>>> http://www.kitware.com/opensource/opensource.html
>>>>
>>>> Kitware offers ITK Training Courses, for more information visit:
>>>> http://www.kitware.com/products/protraining.php
>>>>
>>>> Please keep messages on-topic and check the ITK FAQ at:
>>>> http://www.itk.org/Wiki/ITK_FAQ
>>>>
>>>> Follow this link to subscribe/unsubscribe:
>>>> http://public.kitware.com/mailman/listinfo/insight-users
>>>>
>>>>
>>>
>>> _____________________________________
>>> Powered by www.kitware.com
>>>
>>> Visit other Kitware open-source projects at
>>> http://www.kitware.com/opensource/opensource.html
>>>
>>> Kitware offers ITK Training Courses, for more information visit:
>>> http://www.kitware.com/products/protraining.php
>>>
>>> Please keep messages on-topic and check the ITK FAQ at:
>>> http://www.itk.org/Wiki/ITK_FAQ
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://public.kitware.com/mailman/listinfo/insight-users
>>>
>>>
>>> ------------------------------
>>> If you reply to this email, your message will be added to the discussion
>>> below:
>>> http://itk-users.7.n7.nabble.com/Rotating-image-results-in-l
>>> ast-slices-being-half-empty-tp38081p38116.html
>>> To unsubscribe from Rotating image results in last slices being half
>>> empty, click here.
>>> NAML
>>> <http://itk-users.7.n7.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>>> --
>>> Matias
>>>
>>> ------------------------------
>>> View this message in context: Re: [ITK-users] Rotating image results in
>>> last slices being half empty
>>> <http://itk-users.7.n7.nabble.com/Rotating-image-results-in-last-slices-being-half-empty-tp38081p38121.html>
>>>
>>> Sent from the ITK - Users mailing list archive
>>> <http://itk-users.7.n7.nabble.com/> at Nabble.com.
>>>
>>> _____________________________________
>>> Powered by www.kitware.com
>>>
>>> Visit other Kitware open-source projects at
>>> http://www.kitware.com/opensource/opensource.html
>>>
>>> Kitware offers ITK Training Courses, for more information visit:
>>> http://www.kitware.com/products/protraining.php
>>>
>>> Please keep messages on-topic and check the ITK FAQ at:
>>> http://www.itk.org/Wiki/ITK_FAQ
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://public.kitware.com/mailman/listinfo/insight-users
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/community/attachments/20170415/bb8a71b0/attachment-0001.html>
-------------- next part --------------
_____________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/insight-users


More information about the Community mailing list