[Insight-users] read a meta image and write a volume to DICOM
Luis Ibanez
luis.ibanez at kitware.com
Thu Sep 15 22:44:36 EDT 2005
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