<div dir="ltr"><div><div><br></div>I just tried your code on two different dicom datasets, a ct and an mr.<br><br></div>Both worked for me.<br>./DICOMTest ~/Data/itkTestcases/Back\ to\ Front/ .<br>ITK Version: 4.5<br>Stats for file: /home/lorensen/Data/itkTestcases/Back to Front//i24389.MRDC.34<br>
Min: 0, Max: 293, Mean: 28.7654, Sigma: 37.2513, Variance: 1387.66, Sum: 1.88517e+06<br>Stats for file: ./file00.dcm<br>Min: 0, Max: 293, Mean: 28.7654, Sigma: 37.2513, Variance: 1387.66, Sum: 1.88517e+06<br>[build] ./DICOMTest ~/Data/NAV/CT/ ./<br>
ITK Version: 4.5<br>Stats for file: /home/lorensen/Data/NAV/CT//ct.1<br>Min: -1024, Max: 31744, Mean: 6277.24, Sigma: 13249.9, Variance: 1.75559e+08, Sum: 1.64554e+09<br>Stats for file: .//file00.dcm<br>Min: -1024, Max: 31744, Mean: 6277.24, Sigma: 13249.9, Variance: 1.75559e+08, Sum: 1.64554e+09<br>
<br><br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Aug 12, 2013 at 11:46 AM, Constantine Zakkaroff <span dir="ltr">&lt;<a href="mailto:mnkz@leeds.ac.uk" target="_blank">mnkz@leeds.ac.uk</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Brad,<br>
<br>
Yes, here&#39;s the minimal code:<br>
<br>
******************************<u></u>******************************<u></u>************<br>
#include &lt;cstdlib&gt;<br>
#include &lt;itkImage.h&gt;<br>
#include &lt;itkMetaImageIO.h&gt;<br>
#include &lt;itkGDCMImageIO.h&gt;<br>
#include &lt;itkGDCMSeriesFileNames.h&gt;<br>
#include &lt;itkImageFileReader.h&gt;<br>
#include &lt;itkImageFileWriter.h&gt;<br>
#include &lt;itkStatisticsImageFilter.h&gt;<br>
<br>
int main(int argc, char *argv[])<br>
{<br>
        std::clog &lt;&lt; &quot;ITK Version: &quot; &lt;&lt; ITK_VERSION_STRING &lt;&lt; std::endl;<br>
<br>
        typedef itk::GDCMSeriesFileNames NamesGeneratorType;<br>
        typedef itk::Image&lt;short, 3&gt; ImageType;<br>
<br>
        NamesGeneratorType::Pointer namesGenerator = NamesGeneratorType::New();<br>
        namesGenerator-&gt;<u></u>SetUseSeriesDetails(true);<br>
        namesGenerator-&gt;<u></u>SetInputDirectory(argv[1]);<br>
<br>
        typedef itk::StatisticsImageFilter&lt;<u></u>ImageType&gt; StatsFilterType;<br>
        typedef itk::ImageFileReader&lt;<u></u>ImageType&gt; ImageReaderType;<br>
        typedef itk::ImageFileWriter&lt;<u></u>ImageType&gt; ImageWriterType;<br>
<br>
        ImageReaderType::Pointer imageReader0 = ImageReaderType::New();<br>
        imageReader0-&gt;SetImageIO(itk::<u></u>GDCMImageIO::New());<br>
        StatsFilterType::Pointer statsFilter0 = StatsFilterType::New();<br>
        imageReader0-&gt;SetFileName(<u></u>namesGenerator-&gt;<u></u>GetInputFileNames()[0]);<br>
        statsFilter0-&gt;SetInput(<u></u>imageReader0-&gt;GetOutput());<br>
        statsFilter0-&gt;Update();<br>
<br>
        std::clog &lt;&lt; &quot;Stats for file: &quot; &lt;&lt; namesGenerator-&gt;<u></u>GetInputFileNames()[0] &lt;&lt; std::endl;<br>
        std::clog &lt;&lt;<br>
                &quot;Min: &quot; &lt;&lt; statsFilter0-&gt;GetMinimum() &lt;&lt; &quot;, &quot;<br>
                &quot;Max: &quot; &lt;&lt; statsFilter0-&gt;GetMaximum() &lt;&lt; &quot;, &quot;<br>
                &quot;Mean: &quot; &lt;&lt; statsFilter0-&gt;GetMean() &lt;&lt; &quot;, &quot;<br>
                &quot;Sigma: &quot; &lt;&lt; statsFilter0-&gt;GetSigma() &lt;&lt; &quot;, &quot;<br>
                &quot;Variance: &quot; &lt;&lt; statsFilter0-&gt;GetVariance() &lt;&lt; &quot;, &quot;<br>
                &quot;Sum: &quot; &lt;&lt; statsFilter0-&gt;GetSum()<br>
                &lt;&lt; std::endl;<br>
<br>
        ImageWriterType::Pointer imageWriter0 = ImageWriterType::New();<br>
        imageWriter0-&gt;SetInput(<u></u>imageReader0-&gt;GetOutput());<br>
        imageWriter0-&gt;SetImageIO(itk::<u></u>GDCMImageIO::New());<br>
        std::string fileName0 = std::string(argv[2]) + &quot;/file00.dcm&quot;;<br>
        imageWriter0-&gt;SetFileName(<u></u>fileName0);<br>
        imageWriter0-&gt;Update();<br>
<br>
        ImageReaderType::Pointer imageReader1 = ImageReaderType::New();<br>
        imageReader1-&gt;SetImageIO(itk::<u></u>GDCMImageIO::New());<br>
        StatsFilterType::Pointer statsFilter1 = StatsFilterType::New();<br>
        imageReader1-&gt;SetFileName(<u></u>fileName0);<br>
        statsFilter1-&gt;SetInput(<u></u>imageReader1-&gt;GetOutput());<br>
        statsFilter1-&gt;Update();<br>
<br>
        std::clog &lt;&lt; &quot;Stats for file: &quot; &lt;&lt; fileName0 &lt;&lt; std::endl;<br>
        std::clog &lt;&lt;<br>
                &quot;Min: &quot; &lt;&lt; statsFilter1-&gt;GetMinimum() &lt;&lt; &quot;, &quot;<br>
                &quot;Max: &quot; &lt;&lt; statsFilter1-&gt;GetMaximum() &lt;&lt; &quot;, &quot;<br>
                &quot;Mean: &quot; &lt;&lt; statsFilter1-&gt;GetMean() &lt;&lt; &quot;, &quot;<br>
                &quot;Sigma: &quot; &lt;&lt; statsFilter1-&gt;GetSigma() &lt;&lt; &quot;, &quot;<br>
                &quot;Variance: &quot; &lt;&lt; statsFilter1-&gt;GetVariance() &lt;&lt; &quot;, &quot;<br>
                &quot;Sum: &quot; &lt;&lt; statsFilter1-&gt;GetSum()<br>
                &lt;&lt; std::endl;<br>
<br>
        system(&quot;pause&quot;);<br>
<br>
        return EXIT_SUCCESS;<br>
}<br>
******************************<u></u>******************************<u></u>************<br>
<br>
Many thanks,<br>
Constantine<div class="HOEnZb"><div class="h5"><br>
<br>
On 12/08/2013 14:48, Bradley Lowekamp wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Do you have the code to share so that it can be easily reproduced?<br>
<br>
<br>
Thanks,<br>
Brad<br>
<br>
On Aug 12, 2013, at 9:33 AM, Constantine Zakkaroff &lt;<a href="mailto:mnkz@leeds.ac.uk" target="_blank">mnkz@leeds.ac.uk</a>&gt; wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hello ALL,<br>
<br>
I&#39;m wondering if anyone can explain what&#39;s going on with the changing image intensities in a read-write-read round-trip. I think it&#39;s a bug, but the <a href="http://issues.itk.org" target="_blank">issues.itk.org</a> is unresponsive at the moment. Another bug? ;)<br>

<br>
Anyhow, the strange thing is that the results for the round trip read-write-read test are very different for ITK 3.20 and ITK 4.4.1.<br>
<br>
I use to StatisticsImageFilter to examine the intensity values. Here&#39;s what happens, when I simply read a DICOM image, print stats, save the image and read it again, followed by printing the stats:<br>
<br>
ITK Version: 3.20<br>
Stats for original file:<br>
Min: 0, Max: 2474, Mean: 169.236, Sigma: 256.719, Variance: 65904.7, Sum: 1.40371e+007<br>
Stats for saved file:<br>
Min: 0, Max: 2471, Mean: 167.132, Sigma: 256.125, Variance: 65600.1, Sum: 1.38626e+007<br>
<br>
ITK Version: 4.4<br>
Stats for original file:<br>
Min: 0, Max: 2474, Mean: 169.236, Sigma: 256.719, Variance: 65904.7, Sum: 1.40371e+007<br>
Stats for saved file:<br>
Min: 0, Max: 7446, Mean: 509.114, Sigma: 772.59, Variance: 596895, Sum: 4.22279e+007<br>
<br>
In both cases the code is identical. Just compiled against different versions of ITK. The images are read and written as itk::Image&lt;unsigned short, 3&gt;, with no processing, no changes to any aspect of the images.<br>

<br>
So, ITK 3.20 introduces a small change, which I&#39;m pretty sure shouldn&#39;t be there. But in ITK 4.4.1 the scale of intensities changes three-fold.<br>
<br>
I&#39;d not be surprised by a change of this magnitude if I was photocopying those images, but not when using digital software and hardware. :^) Is there something I&#39;m not understanding here?<br>
<br>
None of this happens with read(DICOM)-write(MHD)-read(<u></u>MHD), where the original and round-trip values are identical:<br>
Stats for saved file: file0.mhd<br>
Min: 0, Max: 2474, Mean: 169.236, Sigma: 256.719, Variance: 65904.7, Sum: 1.40371e+007<br>
<br>
Many thanks,<br>
Constantine<br>
<br>
______________________________<u></u>_______<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/<u></u>opensource/opensource.html</a><br>
<br>
Kitware offers ITK Training Courses, for more information visit:<br>
<a href="http://www.kitware.com/products/protraining.php" target="_blank">http://www.kitware.com/<u></u>products/protraining.php</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_<u></u>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/<u></u>listinfo/insight-users</a><br>
</blockquote>
<br>
</blockquote>
______________________________<u></u>_______<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/<u></u>opensource/opensource.html</a><br>
<br>
Kitware offers ITK Training Courses, for more information visit:<br>
<a href="http://www.kitware.com/products/protraining.php" target="_blank">http://www.kitware.com/<u></u>products/protraining.php</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_<u></u>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/<u></u>listinfo/insight-users</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Unpaid intern in BillsBasement at noware dot com<br>
</div>