[Insight-users] Strange behavior when reading RGB .mhd files

Rhazes Spell rus1 at duke.edu
Fri Apr 8 16:18:15 EDT 2005


I get strange results when I read an .mhd file specifying a stack of  
RGB tif images.  The output images have the color channels swapped (R=B  
and G=R.  There is no blue channel in the original image).  To isolate  
my problem I changed the mhd to only specify one slice.  I then read  
the slice in through the mhd format and as  a tif.  When I read it in  
as a tif it writes out properly (RGB = RGB).  However, when I read the  
mhd file and writ it out the color swapping problem occurs.  I have  
included my test code and the mhd file.      Any assistance that you  
can provide would be GREATLY appreciated.


NDims = 3
DimSize = 2048 2048 1
ElementSpacing = 1 1 1
Position = 0 0 0
ElementByteOrderMSB = False
ElementNumberOfChannels = 3
ElementType = MET_UCHAR
ElementDataFile = 10x-CZ1197%03d.tif 8 8 1  (So that I only read in one  
slice.  The problem still occurs when I read in more than one):


=-=-=-=-=-==-=-=-=-=-=-=-=-=
/* *****************
  * Test reading and processing 3D RGB images (I only want the green  
channel for now)
  *
  * To run: input file; output file; resample dimensionx; resample  
dimensiony; 3d flag (optional)
  * ./Preprocess cz1197/10xCZ1197.mhd test3d.tif 2 2 3d
  *
  * ***************** */

#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkRGBPixel.h"

#include <unistd.h>

using namespace std;

//Pixel Types
typedef unsigned char charPixelType;
typedef itk::RGBPixel<charPixelType> rgbPixelType;

//Image Types
typedef itk::Image<rgbPixelType, 3> Image3DType;
typedef itk::Image<rgbPixelType, 2> Image2DType;

//IO Types
typedef itk::ImageFileReader<Image3DType> Reader3D;
typedef itk::ImageFileReader<Image2DType> Reader2D;

typedef itk::ImageFileWriter<Image3DType> Writer3D;
typedef itk::ImageFileWriter<Image2DType> Writer2D;


int main(int argc, char * argv[]) {
	if(atoi(argv[3]) == 3) {
		Reader3D::Pointer inputReader3D = Reader3D::New();
		Writer3D::Pointer outputWriter3D = Writer3D::New();

		inputReader3D->SetFileName(argv[1]);
		try {
			inputReader3D->Update();
		}catch( itk::ExceptionObject &err ) {
			cout << "Exception while reading file " << endl;
			cout << err << endl;
		}

		Image3DType::Pointer inputImage = inputReader3D->GetOutput();
		cout << inputImage << endl;

		outputWriter3D->SetFileName(argv[2]);
		outputWriter3D->SetInput(inputImage);
		try{
			outputWriter3D->Update();
		}catch (itk::ExceptionObject &err) {
			cout << "Exception while writing file " << endl;
			cout << err << endl;
		}
	} else {
		cout << "Running 2D.... " << endl;

		Reader2D::Pointer inputReader2D = Reader2D::New();
		Writer2D::Pointer outputWriter2D = Writer2D::New();

		inputReader2D->SetFileName(argv[1]);
		try {
			inputReader2D->Update();
		}catch( itk::ExceptionObject &err ) {
			cout << "Exception while reading file " << endl;
			cout << err << endl;
		}

		Image2DType::Pointer inputImage = inputReader2D->GetOutput();
		cout << inputImage << endl;

		outputWriter2D->SetFileName(argv[2]);
		outputWriter2D->SetInput(inputImage);
		try{
			outputWriter2D->Update();
		}catch (itk::ExceptionObject &err) {
			cout << "Exception while writing file " << endl;
			cout << err << endl;
		}



	}






************************************************************************ 
****
Rhazes Spell, Ph.D.
Duke University,
          -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=
Visualization Technology Group - http://vis.duke.edu
Ctr. for Environmental Genomics - http://www.envgenomics.duke.edu
Ctr. for Computational Science Engineering and Medicine -  
http://csem.duke.edu
          -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=
rhazes.spell at alumni.duke.edu
919.660.5595 (office)
************************************************************************ 
****



More information about the Insight-users mailing list