[Insight-users] read a meta image and write it to DICOM

Bill Lorensen wlorens1 at nycap.rr.com
Sun Sep 11 15:03:20 EDT 2005


You can specify any integral type for dicom. The problem is your input and 
output types are not consistent.

You can:

1) Declare the ImageType for the reader to be short. However if your input 
range exceeds that which a short can hold you will have problems.

2) Declare the WriteType to be signed int. However, most dicom images are 
with short or unsigned short.

3) Insert a CastImageFilter<ImageType,WriteType>. Here you will have the 
same problems as 1).

4) Rescale your input data to fit within the range of the WriteType. 
Several options are available.

Bill

At 01:21 PM 9/11/2005, =?BIG5?B?s6+sRt5t?= wrote:
>Hi,all ITK user:
>
>I want to read a meta image(.mhd) and write it to DICOM format.
>
>This is my code for this question:
>
>========================================================
>#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<signed int, 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<short, 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;
>
>}
>
>========================================================
>I get a error message as follows:
>
>error C2664: 'SetInput' : cannot convert parameter 1 from 'class
>itk::Image<int,3> *' to 'const class itk::Image<short,3> *'
>Types pointed to are unrelated; conversion requires reinterpret_cast,
>C-style cast or function-style cast
>
>
>My question is:
>
>what format can specify when I  read a META image and write it to DICOM?
>_______________________________________________
>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