[ITK-users] Problem writing RGB Nifti Image

Bradley Lowekamp blowekamp at mail.nih.gov
Tue May 13 08:34:12 EDT 2014


Hello,

I don't see anything obviously wrong with your code fragment. However, you didn't indicate what the problem is. Are you getting a compilation error or a run-time error or a segmentation fault? And what is the error?

I myself would use the CompositeImageFilter to accomplish what you have done there with iterators.

Hope that helps,
Brad

On May 13, 2014, at 6:34 AM, Nicola Magnabosco <nick.magnabosco at gmail.com> wrote:

> /Hi,
> I've found some problems writing a Nifti Image. What I want to do, is to
> read an RGB image (Nifti-3D), works separately on every channel and then
> "merge" the three channels, composing a new output image.
> 
> For 2D image this approach works fine, but for Nifti images I get stuck on
> writing. I can read the input image (.nii extension), separate the three
> channels without problems (i can write every channels).
> 
> Some code of what I've done:/
> 
> /// CHANNEL types/
> typedef itk::Image<float, 3> ImageType;
> typedef itk::ImageFileWriter<ImageType> WriterType;
> WriterType::Pointer writer = WriterType::New();
> 
> /// RGB types/
> typedef itk::RGBPixel<unsigned char> RGBPixel; // problem also with float,
> unsigned int/short
> typedef itk::Image<RGBPixel,3> RGBImageType;
> typedef itk::ImageFileReader<RGBImageType> RGBReaderType;
> typedef itk::ImageFileWriter<RGBImageType> RGBWriterType;
> typedef itk::NiftiImageIO NiftiIOType;
> 
> RGBReaderType::Pointer rgbreader = RGBReaderType::New();
> RGBWriterType::Pointer rgbwriter = RGBWriterType::New();
> 
> NiftiIOType::Pointer niftiIO = NiftiIOType::New();
> niftiIO->SetPixelType(itk::ImageIOBase::RGB);
> niftiIO->SetComponentType(itk::ImageIOBase::UCHAR);
> 
> /// Read a nifti image/
> rgbreader->SetFileName("brain.nii");
> rgbreader->Update();
> 
> /// then I split the RGB image into three ImageType. I can write/view these
> images without problems./
> ... ... ...
> /// try to merge the three image into a new output RGB image/
> ...
> RGBImageType::Pointer merged = RGBImageType::New();
> merged->SetRegions(greenImage->GetLargestPossibleRegion());
> merged->Allocate();
> itk::ImageRegionIterator<RGBImageType> It(merged,
> merged->GetLargestPossibleRegion());
> 
> for(It.GoToBegin(), redIt.GoToBegin(), greenIt.GoToBegin(),
> blueIt.GoToBegin();
>        !It.IsAtEnd();
>        ++It, ++redIt, ++greenIt, ++blueIt, j++){
> 
>        RGBPixel onePixel;
>        onePixel.Set(redIt.Get(),greenIt.Get(),blueIt.Get());
>        It.Set(onePixel);
>    }
> 
> // write output image without success
> rgbwriter->SetFileName("vector.nii");
> rgbwriter->SetImageIO(niftiIO);
> rgbwriter->SetInput(merged);
> rgbwriter->Update();
> 
> 
> Thanks for anyone who will reply this post.
> Nicola M
> 
> 
> 
> --
> View this message in context: http://itk-insight-users.2283740.n2.nabble.com/Problem-writing-RGB-Nifti-Image-tp7585572.html
> Sent from the ITK Insight Users mailing list archive 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://www.itk.org/mailman/listinfo/insight-users



More information about the Insight-users mailing list