[Insight-users] RGB images from Visible Human Dataset
   
    Stefan Lindenau
     
       stefan . lindenau at gmx . de
       
    Wed, 29 Oct 2003 14:58:17 -0500
    
    
  
Hello,
I have a problem to read the data of the Visible Human Dataset right 
into ITK. I have just coded a little sample that reads the data of one 
file via MetaIO and should write it as PNG.
When I am executing the program I get a mirror-inverted PNG in Greyscale 
that displays all 3 RGB channels seperately from top down and as an 
addition these 3 channels are drawn from left to right for 3 times.
I would think I should get a normal RGB PNG as output. What is wrong?
This is the program:
#include "itkRGBPixel.h"
#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkPNGImageIO.h"
#include "itkMetaImageIO.h"
int main(int argc, char ** argv) {
   
    typedef itk::RGBPixel<unsigned char>    PixelType;
    typedef itk::Image<PixelType, 2>        ImageType;
    typedef itk::ImageFileReader< ImageType> ReaderType;
    typedef itk::ImageFileWriter< ImageType> WriterType;
    typedef itk::PNGImageIO                     WriterImageIOType;
    typedef itk::MetaImageIO                 ReaderImageIOType;
    ReaderType::Pointer reader = ReaderType::New();
    WriterType::Pointer writer = WriterType::New();
   
    WriterImageIOType::Pointer writerImageIO = WriterImageIOType::New();
    ReaderImageIOType::Pointer readerImageIO = ReaderImageIOType::New();
    strcpy(input,"a.mhd");
    strcpy(output,"a.png");
    reader->SetFileName(input);
    writer->SetFileName(output);
   
    writerImageIO->SetUseCompression(true);
    writerImageIO->SetPixelType(itk::ImageIOBase::IODataType::RGB);
    readerImageIO->SetPixelType(itk::ImageIOBase::IODataType::RGB);
    writer->SetImageIO(writerImageIO);
    reader->SetImageIO(readerImageIO);
   
    writer->SetInput(reader->GetOutput());
    try {
        writer->Update();
    } catch (itk::ExceptionObject &err) {
        std::cout<< "Exception caught:" << std::endl;
        std::cout<< err <<std::endl;
        return -1;
    }
    return 0;
}
and that is the Content of a.mhd
NDims = 2
DimSize = 2048 1216
ElementSpacing = 0.333 0.333
Position = 0 0
ElementByteOrderMSB = True
ElementNumberOfChannels = 3
ElementType = MET_UCHAR
ElementDataFile = h:\stefan\avf1402b.raw
Thank you for your help
stefan