[Insight-users] read a meta image and write a volume to DICOM
wordon
m9421001 at gmail.com
Sun Sep 18 22:30:05 EDT 2005
Luis and Diego:
thanks for your help.
I have read the section about 'Reading and Writing Images' in the softwareguide,
and try to write a program based on ' ImageReadImageSeriesWrite.cxx '
and ' DicomSeriesReadSeriesWrite.cxx '.
The code as follows: (the goal is read a meta image and write to DICOM series)
int main( int argc, char *argv[] )
{
if (argc < 2 )
{
std::cout << "Usage: EXE_Name InputFile" << std::endl;
return EXIT_FAILURE;
}
typedef itk::Image< unsigned char, 3 > ImageType;
typedef itk::ImageFileReader< ImageType > ReaderType;
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileName( argv[1] );
try
{
reader->Update();
}
catch (itk::ExceptionObject &excp)
{
std::cerr << "Exception thrown while writing the image" << std::endl;
std::cerr << excp << std::endl;
return EXIT_FAILURE;
}
typedef itk::Image< unsigned char, 2 > Image2DType;
typedef itk::ImageSeriesWriter< ImageType, Image2DType > WriterType;
WriterType::Pointer writer = WriterType::New();
typedef itk::GDCMImageIO ImageIOType;
ImageIOType::Pointer gdcmImageIO=ImageIOType::New();
writer->SetImageIO(gdcmImageIO);
writer->SetInput( reader->GetOutput() );
typedef itk::GDCMSeriesFileNames NamesGeneratorType;
NamesGeneratorType::Pointer namesGenerator=NamesGeneratorType::New();
writer->SetFileNames(namesGenerator->GetOutputFileNames());
writer->SetMetaDataDictionaryArray(reader->GetMetaDataDictionaryArray());
try
{
writer->Update();
}
catch( itk::ExceptionObject & excp )
{
std::cerr << "Exception thrown while writing the series " << std::endl;
std::cerr << excp << std::endl;
}
return EXIT_SUCCESS;
}
But this code has a error message:
error C2039: 'GetMetaDataDictionaryArray' : is not a member of
'ImageFileReader<class itk::Image<unsigned char,3>,class
itk::DefaultConvertPixelTraits<unsigned char> >'
Error executing cl.exe.
My question is :
1)if I want to read image using ImageFileReader<> directly,the
GetMetaDataDictionaryArray can't use in writer.In this situation,how
should I write the meta image to DICOM series as Luis said previously?
2)If I can get the DICOM series,can I use the code as
DicomSeriesReadImageWrite2.cxx to read series and write it to DICOM
volume?
Thanks
Wordon
2005/9/16, Luis Ibanez <luis.ibanez at kitware.com>:
>
> Hi Wordon,
>
> 1) Yes, it is correct to read a MetaImage with just an ImageFileReader<>
>
> 2) No, it is not right to write a volume as a DICOM file by using only
> the ImageFileWriter. You MUST use the ImageSeriesWriter as explained
> in detail in the ITK Software Guide
>
> http://www.itk.org/ItkSoftwareGuide.pdf
>
> in the Chapter "Reading and Writing Images".
>
> Note that you must also connect the GDCMImageIO.
>
> You will find the relevant source code examples in the directory
>
> Insight/Examples/IO
>
>
> 3) A Series is when you store an N-Dimensional image by using
> multiple files that have dimensions inferior to N.
> The typical case is to use many 2D files for saving the slices
> of a 3D volume.
>
> It is also common to have many 3D files for saving a 4D image,
> like for functional MRI, or PET studies, or Cardiac CT
>
> With ITK you can write an N-Dimensional image as a series of
> files with image of Dimension M, where M < N.
>
>
> 4) If you store a volume (a 3D image) in DICOM, it will be stored
> in a series of 2D images.
>
>
> Please read the ITK Software Guide,
>
>
> Regards,
>
>
> Luis
>
>
> ----------------------------
> 陳政煒 wrote:
> > Hi,Luis and all ITK user:
> >
> > I want to read a meta image and use the data '
> > BrainProtonDensity3Slices.mha' & ' BrainProtonDensity3Slices.raw ' in
> > Insight\Examples\Data.
> > ( I want to read a 3D raw image )
> >
> > And then wirte the meta image into a volume of DICOM format.
> > (.mhd or .mha --> .dcm)
> >
> >
> > My code as follows :
> >
> > #include "itkImageFileReader.h"
> > #include "itkImageFileWriter.h"
> > #include "itkImage.h"
> > #include "itkRescaleIntensityImageFilter.h"
> > #include "itkMetaDataDictionary.h"
> > #include "itkMetaDataObject.h"
> > #include "itkGDCMImageIO.h"
> >
> > #include <list>
> > #include <fstream>
> >
> > int main(int ac, char* av[])
> > {
> >
> > if(ac < 3)
> > {
> > std::cerr << "Usage: " << av[0] << " InputMETAFile OutputDICOM\n";
> > return EXIT_FAILURE;
> > }
> >
> > typedef itk::Image<unsigned char, 3> ImageType;
> >
> > typedef itk::ImageFileReader< ImageType > VolumeReaderType;
> >
> > VolumeReaderType::Pointer reader = VolumeReaderType::New();
> >
> > reader->SetFileName( av[1] );
> >
> > try
> > {
> > reader->Update();
> > }
> > catch (itk::ExceptionObject & e)
> > {
> > std::cerr << "exception in file reader " << std::endl;
> > std::cerr << e.GetDescription() << std::endl;
> > std::cerr << e.GetLocation() << std::endl;
> > return EXIT_FAILURE;
> > }
> >
> >
> > typedef itk::GDCMImageIO ImageIOType;
> >
> > ImageIOType::Pointer gdcmImageIO = ImageIOType::New();
> >
> >
> > typedef itk::Image<unsigned char, 3> WriteType;
> > typedef itk::ImageFileWriter<WriteType> Writer1Type;
> > Writer1Type::Pointer writer1=Writer1Type::New();
> >
> > writer1->SetFileName( av[2] );
> > writer1->SetImageIO( gdcmImageIO );
> > writer1->SetInput( reader->GetOutput() );
> >
> >
> > try
> > {
> > writer1->Update();
> > }
> > catch (itk::ExceptionObject & e)
> > {
> > std::cerr << "exception in file writer " << std::endl;
> > std::cerr << e.GetDescription() << std::endl;
> > std::cerr << e.GetLocation() << std::endl;
> > return EXIT_FAILURE;
> > }
> >
> >
> >
> > return EXIT_SUCCESS;
> >
> > }
> >
> > My code can run,but the DICOM image in output is not correctly.
> > It has a problem like loss some information in output file.
> >
> > My questions:
> > 1)Is it right to read the 3D meta image use ImageFileReader directly?
> > 2)Is it right to write the data into a volume of DICOM use
> > ImageFileWriter directly?
> > 3)What are difference between series and volume?
> > 4)If I want to get a 3D DICOM file in one file.Is it a volume?
> >
> > Thanks a lot. : -)
> > Wordon
> > _______________________________________________
> > Insight-users mailing list
> > Insight-users at itk.org
> > http://www.itk.org/mailman/listinfo/insight-users
> >
> >
>
>
>
More information about the Insight-users
mailing list