[ITK-users] Problem writing RGB Nifti Image
Nicola Magnabosco
nick.magnabosco at gmail.com
Tue May 13 06:34:21 EDT 2014
/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.
More information about the Insight-users
mailing list