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