<div>Hi all,<br></div><div><br></div><div>I tried to read a pixel value from dicom file.</div><div><br></div><div>It seems good. I made a txt file with the values and I imported in matlab. The new image seems to be good but, paying attention to the values, I discovered that the pixel value are different from value I can read directly in matlab.</div>
<div><br></div><div>I verified also using a dicom viewer. The right values are the matlab ones.</div><div><br></div><div>Could you suggest the right way to read the Pixel? Thanks</div><div><br></div><div>Roberto</div><div>
<br></div><div>Here my code:</div><div><br></div><div>// MAIN FILE<br>#include &quot;itkImageFileReader.h&quot;<br>#include &quot;itkImageFileWriter.h&quot;<br>#include &quot;itkRescaleIntensityImageFilter.h&quot;<br>#include &quot;itkGDCMImageIO.h&quot;<br>
#include &quot;itkIndex.h&quot;<br>#include &lt;list&gt;<br>#include &lt;fstream&gt;<br>#include &lt;iostream&gt;<br><br><br>int main( int argc, char* argv[] )<br>{<br><br>  // Verify the number of parameters in the command line<br>
  if( argc &lt; 2 )<br>    {<br>    std::cerr &lt;&lt; &quot;Usage: &quot; &lt;&lt; std::endl;<br>    std::cerr &lt;&lt; argv[0] &lt;&lt; &quot; OutputDicomImage &quot;;<br>    std::cerr &lt;&lt; &quot; OutputImage\n&quot;;<br>
    return EXIT_FAILURE;<br>    }<br><br>  //PixelType and InputDimension declarations<br>  typedef signed short InputPixelType;<br>  const unsigned int   InputDimension = 2;<br>  typedef itk::Image&lt; InputPixelType, InputDimension &gt; InputImageType;<br>
  typedef itk::ImageFileReader&lt; InputImageType &gt; ReaderType;<br><br>  //reader creation and settings<br>  ReaderType::Pointer reader = ReaderType::New();<br>  reader-&gt;SetFileName( argv[1] );<br>  typedef itk::GDCMImageIO           ImageIOType;<br>
  ImageIOType::Pointer gdcmImageIO = ImageIOType::New();<br>  reader-&gt;SetImageIO( gdcmImageIO );<br><br>  //reading process invocation<br>  try<br>    {<br>    reader-&gt;Update();<br>    }<br>  catch (itk::ExceptionObject &amp; e)<br>
    {<br>    std::cerr &lt;&lt; &quot;exception in file reader &quot; &lt;&lt; std::endl;<br>    std::cerr &lt;&lt; e &lt;&lt; std::endl;<br>    return EXIT_FAILURE;<br>    }<br><br><br><br>  InputImageType::IndexType pixelIndex;<br>
  int i,j;<br>  pixelIndex[0]=0;<br>  pixelIndex[1]=0;<br>  InputImageType::PixelType pixelValue, maxval;<br>  maxval = 0;<br><br>  //row and col numbers search<br>  int rowN = 0;<br>  int colN = 0;<br>  std::string value;<br>
  std::string labelId;<br>  std::string tagkey = &quot;0028|0010&quot;;<br><br>  //typedef itk::GDCMImageIO ImageIOType;<br>  //ImageIOType::Pointer dicomIO = ImageIOType::New();<br>  gdcmImageIO-&gt;SetMaxSizeLoadEntry(0xffff);<br>
<br>  if( itk::GDCMImageIO::GetLabelFromTag( tagkey, labelId ) )<br>  {<br>        std::cout &lt;&lt; labelId &lt;&lt; &quot; (&quot; &lt;&lt; tagkey &lt;&lt; &quot;): &quot;;<br>    if( gdcmImageIO-&gt;GetValueFromTag(tagkey, value) )<br>
    {<br>      std::cout &lt;&lt; value;<br>      rowN = atoi(value.c_str());<br>    }<br>    else<br>    {<br>      std::cout &lt;&lt; &quot;(No Value Found in File)&quot;;<br>    }<br>    std::cout &lt;&lt; std::endl;<br>
  }<br>  else<br>  {<br>    std::cerr &lt;&lt; &quot;Trying to access inexistant DICOM tag.&quot; &lt;&lt; std::endl;<br>  }<br><br>  tagkey = &quot;0028|0011&quot;;<br>  if( itk::GDCMImageIO::GetLabelFromTag( tagkey, labelId ) )<br>
    {<br>          std::cout &lt;&lt; labelId &lt;&lt; &quot; (&quot; &lt;&lt; tagkey &lt;&lt; &quot;): &quot;;<br>      if( gdcmImageIO-&gt;GetValueFromTag(tagkey, value) )<br>      {<br>        std::cout &lt;&lt; value;<br>        colN = atoi(value.c_str());<br>
      }<br>      else<br>      {<br>        std::cout &lt;&lt; &quot;(No Value Found in File)&quot;;<br>      }<br>      std::cout &lt;&lt; std::endl;<br>    }<br>    else<br>    {<br>      std::cerr &lt;&lt; &quot;Trying to access inexistant DICOM tag.&quot; &lt;&lt; std::endl;<br>
    }<br><br><br>  //output preparing<br>  //std::cout &lt;&lt; reader-&gt;GetOutput()-&gt;GetNameOfClass() &lt;&lt; std::endl;<br>  std::cout &lt;&lt; &quot;row -- col -- value&quot; &lt;&lt; std::endl;<br><br><br>  for(i=0; i&lt;rowN; i++){<br>
          pixelIndex[0]=i;<br>          for(j=0; j&lt;colN; j++){<br>                  pixelIndex[1]=j;<br>                  pixelValue = reader-&gt;GetOutput()-&gt;GetPixel(pixelIndex);<br>                  std::cout &lt;&lt; i &lt;&lt; &quot; -- &quot; &lt;&lt; j &lt;&lt; &quot; -- &quot; &lt;&lt;  pixelValue &lt;&lt; std::endl;<br>
                  if (pixelValue&gt;maxval)<br>                          maxval = pixelValue;<br>          }<br><br>  }<br>  std::cout &lt;&lt; &quot;Max Pixel Value: &quot; &lt;&lt;  maxval &lt;&lt; std::endl;<br>  return EXIT_SUCCESS;<br>}<br><br><br><br></div>