<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div><div>David</div><div>Based on some message on this mailing list that now I&#39;m unable to find, we use something like this.</div>
<div>I suppose it can be improved, but the code accomplishes the task of determining the type of data before actually reading the data.</div><div><br></div><div>HTH</div><div><br></div><div><font face="&#39;courier new&#39;, monospace">...</font></div>
<div><font face="&#39;courier new&#39;, monospace">typedef itk::ImageIOBase::IOComponentType ScalarPixelType;</font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace"> itk::ImageIOBase::Pointer imageIO =</font></div>
<div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">                </font></span><font face="&#39;courier new&#39;, monospace">itk::ImageIOFactory::CreateImageIO(</font></div><div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">                        </font></span><font face="&#39;courier new&#39;, monospace">params::filenameIn, itk::ImageIOFactory::ReadMode);</font></div>
<div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">        </font></span><font face="&#39;courier new&#39;, monospace">if (!imageIO) {</font></div>
<div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">                </font></span><font face="&#39;courier new&#39;, monospace">std::cerr &lt;&lt; &quot;Unable to create a valid ImageIO for image &quot; &lt;&lt;</font></div>
<div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">                        </font></span><font face="&#39;courier new&#39;, monospace">params::filenameIn &lt;&lt; &quot;. Exiting.&quot; &lt;&lt; std::endl;</font></div>
<div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">                </font></span><font face="&#39;courier new&#39;, monospace">return -1;</font></div><div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">        </font></span><font face="&#39;courier new&#39;, monospace">}</font></div>
<div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">// Now that we found the appropriate ImageIO class, ask it to</font></div><div><font face="&#39;courier new&#39;, monospace">// read the meta data from the image file.</font></div>
<div><font face="&#39;courier new&#39;, monospace">//</font></div><div><font face="&#39;courier new&#39;, monospace">  imageIO-&gt;SetFileName(params::filenameIn);</font></div><div><font face="&#39;courier new&#39;, monospace">  imageIO-&gt;ReadImageInformation();</font></div>
<div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">        </font></span><font face="&#39;courier new&#39;, monospace">const ScalarPixelType pixelType = imageIO-&gt;GetComponentType();</font></div>
<div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">        </font></span><font face="&#39;courier new&#39;, monospace">if (params::verbose)</font></div><div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">                </font></span><font face="&#39;courier new&#39;, monospace">std::cout &lt;&lt; &quot;Pixel Type is &quot; &lt;&lt; imageIO-&gt;GetComponentTypeAsString(pixelType)</font></div>
<div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">                        </font></span><font face="&#39;courier new&#39;, monospace">&lt;&lt; std::endl;</font></div><div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">        </font></span><font face="&#39;courier new&#39;, monospace">const size_t numDimensions =  imageIO-&gt;GetNumberOfDimensions();</font></div>
<div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">        </font></span><font face="&#39;courier new&#39;, monospace">if (numDimensions != 3) {</font></div><div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">                </font></span><font face="&#39;courier new&#39;, monospace">std::cerr &lt;&lt; &quot;This soft only soports 3D volumes. Exiting&quot;</font></div>
<div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">                        </font></span><font face="&#39;courier new&#39;, monospace">&lt;&lt; std::endl;</font></div><div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">                </font></span><font face="&#39;courier new&#39;, monospace">return -1;</font></div>
<div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">        </font></span><font face="&#39;courier new&#39;, monospace">}</font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div>
<div><font face="&#39;courier new&#39;, monospace">  switch (pixelType) {</font></div><div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">                </font></span><font face="&#39;courier new&#39;, monospace">case itk::ImageIOBase::UCHAR:  DoTheRealThing&lt;UC1d3ITKImgType&gt;(); break; //</font><span style="font-family: &#39;courier new&#39;, monospace; ">UC1d3ITKImgType = unsigned char image of 1 channel, 3 dimensions</span></div>
<div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">                </font></span><font face="&#39;courier new&#39;, monospace">case itk::ImageIOBase::SHORT:  DoTheRealThing&lt;S1d3ITKImgType&gt;();  break; //S1d3 = Short, one chanel, 3dimensions</font></div>
<div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">                </font></span><font face="&#39;courier new&#39;, monospace">case itk::ImageIOBase::USHORT: DoTheRealThing&lt;US1d3ITKImgType&gt;(); break;</font></div>
<div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">                </font></span><font face="&#39;courier new&#39;, monospace">case itk::ImageIOBase::FLOAT:  DoTheRealThing&lt;F1d3ITKImgType&gt;();  break;</font></div>
<div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">                </font></span><font face="&#39;courier new&#39;, monospace">default:</font></div><div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">                        </font></span><font face="&#39;courier new&#39;, monospace">std::cerr &lt;&lt; &quot;Pixel Type (&quot;</font></div>
<div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">                                </font></span><font face="&#39;courier new&#39;, monospace">&lt;&lt; imageIO-&gt;GetComponentTypeAsString(pixelType)</font></div>
<div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">                                </font></span><font face="&#39;courier new&#39;, monospace">&lt;&lt; &quot;) not supported. Exiting.&quot; &lt;&lt; std::endl;</font></div>
<div><span style="white-space: pre-wrap; "><font face="&#39;courier new&#39;, monospace">                        </font></span><font face="&#39;courier new&#39;, monospace">return -1;</font></div><div><font face="&#39;courier new&#39;, monospace">  }</font></div>
<div><font face="&#39;courier new&#39;, monospace"></font><font face="&#39;courier new&#39;, monospace">return 0;</font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><div><font face="&#39;courier new&#39;, monospace">template&lt;typename TITKImgType&gt;</font></div>
<div><font face="&#39;courier new&#39;, monospace">void</font></div><div><font face="&#39;courier new&#39;, monospace">DoTheRealThing()</font></div><div><font face="&#39;courier new&#39;, monospace">{</font></div><div><font face="&#39;courier new&#39;, monospace">  // Read image with standard itkReadImageFilter as now, we know the type of image via template TITKImgType</font></div>
<div><span style="font-family: &#39;courier new&#39;, monospace; ">}</span></div></div><div><div></div><div class="h5"></div></div></div><div><div class="h5"><br><div class="gmail_quote">On Wed, Dec 1, 2010 at 2:37 PM, David Doria <span dir="ltr">&lt;<a href="mailto:daviddoria@gmail.com" target="_blank">daviddoria@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">Recently mhd has been my goto file format for writing non-standard-RGB<br>
type images. For example, I may write a<br>
<br>
itk::Image&lt;float, 4&gt;<br>
<br>
or a<br>
<br>
itk::Image&lt;float, 5&gt;<br>
<br>
To successfully read these files, I need to know ahead of time what<br>
type of pixel they contain so I can do:<br>
<br>
typedef itk::ImageFileReader&lt;itk::Image&lt;float, 5&gt; &gt; ReaderType;<br>
<br>
Is there a better way to read these files where the reader will adapt<br>
and give me back an image of the correct type without me having to<br>
specify the type before hand?<br>
<br>
Thanks,<br>
<br>
David<br>
_____________________________________<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at<br>
<a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Kitware offers ITK Training Courses, for more information visit:<br>
<a href="http://www.kitware.com/products/protraining.html" target="_blank">http://www.kitware.com/products/protraining.html</a><br>
<br>
Please keep messages on-topic and check the ITK FAQ at:<br>
<a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
</blockquote></div><br><br clear="all"><br></div></div><font color="#888888">-- <br>Sergio Vera<br><br> Alma IT Systems<br> C/ Vilana, 4B, 4º 1ª<br> 08022 Barcelona<br> T. (+34) 932 380 592<br> <a href="http://www.alma3d.com" target="_blank">www.alma3d.com</a><br>

</font></blockquote></div><br><br clear="all"><br>-- <br>Sergio Vera<br><br> Alma IT Systems<br> C/ Vilana, 4B, 4º 1ª<br> 08022 Barcelona<br> T. (+34) 932 380 592<br> <a href="http://www.alma3d.com">www.alma3d.com</a><br>