[Insight-users] strange dicom output file
Bill Lorensen
bill.lorensen at gmail.com
Wed Nov 4 10:56:01 EST 2009
Try making the InputPIxelType short
typedef short InputPixelType;
On Wed, Nov 4, 2009 at 10:38 AM, Ming Chao <mingchao2005 at gmail.com> wrote:
> Hi ITKers.
> Recently I was asking questions here about how to write out an multiframe
> dicom file. Thanks for all the help.
> As a matter of fact, it is not so hard to save a 3D volumetric image into a
> multiframe dicom file. Please see the attached code. But I do encounter a
> problem in the output dicom file. Basically the range of the voxel values of
> the output file much narrower than expected ( I attached the images from
> the output dicom and original dicom). I double checked the data types and
> they seemed fine. Could anyone help? thanks.
> Ming
>
> int main( int argc, char* argv[] ) {
> // Verify the number of parameters in the command line
> if( argc < 4 ) {
> std::cerr << "Usage: " << std::endl;
> std::cerr << argv[0] << " vtkImage InputDicomImage ";
> std::cerr << " OutputImage \n";
> return EXIT_FAILURE;
> }
> // the following is for an input 2D dicom file
> typedef unsigned short InputPixelType;
> const unsigned int InputDimension = 3;
> typedef itk::Image< InputPixelType, InputDimension > InputImageType;
> typedef itk::ImageFileReader< InputImageType > InputReaderType;
> InputReaderType::Pointer reader1 = InputReaderType::New();
> reader1->SetFileName( argv[1] );
> typedef itk::GDCMImageIO InputImageIOType;
> InputImageIOType::Pointer gdcmImageIO = InputImageIOType::New();
> reader1->SetImageIO( gdcmImageIO );
> reader1->Update();
> std::cout << " (1) first dicom file is read in successfully ...." <<
> std::endl;
> // The following is a print out of the tag info
> typedef itk::MetaDataDictionary DictionaryType;
> const DictionaryType & dictionary = gdcmImageIO->GetMetaDataDictionary();
> typedef itk::MetaDataObject< std::string > MetaDataStringType;
> DictionaryType::ConstIterator itr = dictionary.Begin();
> DictionaryType::ConstIterator end = dictionary.End();
> while( itr != end )
> {
> itk::MetaDataObjectBase::Pointer entry = itr->second;
> MetaDataStringType::Pointer entryvalue =
> dynamic_cast<MetaDataStringType *>( entry.GetPointer() ) ;
> if( entryvalue )
> {
> std::string tagkey = itr->first;
> std::string tagvalue = entryvalue->GetMetaDataObjectValue();
> std::cout << tagkey << " = " << tagvalue << std::endl;
> }
> ++itr;
> }
> // the following is for a 3D volume file
> typedef float PixelType;
> const unsigned int Dimension = 3;
> typedef itk::Image< PixelType, Dimension > ImageType;
> typedef itk::ImageFileReader< ImageType > ReaderType;
> ReaderType::Pointer reader2 = ReaderType::New();
> reader2->SetFileName( argv[2] );
> reader2->Update();
> std::cout << " (2) the 3D volume file is read in successfully ...." <<
> std::endl;
> // the following is for an output 3D dicom file
> typedef float OutputPixelType;
> const unsigned int OutputDimension = 3;
> typedef itk::Image< OutputPixelType, OutputDimension > OutputImageType;
> typedef itk::ImageSeriesWriter< ImageType, OutputImageType >
> OutputWriterType;
> OutputWriterType::Pointer writer = OutputWriterType::New();
> writer->SetFileName( argv[3] );
> writer->SetInput( reader2->GetOutput() );
> writer->SetMetaDataDictionary( reader1->GetMetaDataDictionary() );
> gdcmImageIO->KeepOriginalUIDOn();
> writer->SetImageIO( gdcmImageIO );
> writer->Update();
> std::cout << " (3) the output dicom file is saved successfully and we are
> done...." << std::endl;
>
> return 0;
>
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.html
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.itk.org/mailman/listinfo/insight-users
>
>
More information about the Insight-users
mailing list