[Insight-users] Image Intensities Changed During DICOM Read-Write-Read in ITK 3.20 vs. ITK 4.4.1
Bill Lorensen
bill.lorensen at gmail.com
Mon Aug 12 14:51:28 EDT 2013
I also tried VTK3.20 and got the same good results.
You could try one of these:
http://placid.nlm.nih.gov/community/21
If your data is anonymized, perhaps you can send me a link or just a few
slices.
Bill
On Mon, Aug 12, 2013 at 2:45 PM, Constantine Z <mnkz at leeds.ac.uk> wrote:
> Thanks. Yes, I can see it all looks completely legit.
>
> Perhaps I can send you my data? MR from a Philips scanner. Or maybe on Win
> it might work differently?
>
> Regards,
> Constartine
>
>
> On 12/08/2013 7:38 p.m., Bill Lorensen wrote:
>
>>
>> I just tried your code on two different dicom datasets, a ct and an mr.
>>
>> Both worked for me.
>> ./DICOMTest ~/Data/itkTestcases/Back\ to\ Front/ .
>> ITK Version: 4.5
>> Stats for file: /home/lorensen/Data/**itkTestcases/Back to
>> Front//i24389.MRDC.34
>> Min: 0, Max: 293, Mean: 28.7654, Sigma: 37.2513, Variance: 1387.66, Sum:
>> 1.88517e+06
>> Stats for file: ./file00.dcm
>> Min: 0, Max: 293, Mean: 28.7654, Sigma: 37.2513, Variance: 1387.66, Sum:
>> 1.88517e+06
>> [build] ./DICOMTest ~/Data/NAV/CT/ ./
>> ITK Version: 4.5
>> Stats for file: /home/lorensen/Data/NAV/CT//**ct.1
>> Min: -1024, Max: 31744, Mean: 6277.24, Sigma: 13249.9, Variance:
>> 1.75559e+08, Sum: 1.64554e+09
>> Stats for file: .//file00.dcm
>> Min: -1024, Max: 31744, Mean: 6277.24, Sigma: 13249.9, Variance:
>> 1.75559e+08, Sum: 1.64554e+09
>>
>>
>>
>>
>> On Mon, Aug 12, 2013 at 11:46 AM, Constantine Zakkaroff
>> <mnkz at leeds.ac.uk <mailto:mnkz at leeds.ac.uk>> wrote:
>>
>> Hi Brad,
>>
>> Yes, here's the minimal code:
>>
>> ********************************__******************************
>> **__************
>>
>> #include <cstdlib>
>> #include <itkImage.h>
>> #include <itkMetaImageIO.h>
>> #include <itkGDCMImageIO.h>
>> #include <itkGDCMSeriesFileNames.h>
>> #include <itkImageFileReader.h>
>> #include <itkImageFileWriter.h>
>> #include <itkStatisticsImageFilter.h>
>>
>> int main(int argc, char *argv[])
>> {
>> std::clog << "ITK Version: " << ITK_VERSION_STRING <<
>> std::endl;
>>
>> typedef itk::GDCMSeriesFileNames NamesGeneratorType;
>> typedef itk::Image<short, 3> ImageType;
>>
>> NamesGeneratorType::Pointer namesGenerator =
>> NamesGeneratorType::New();
>> namesGenerator->__**SetUseSeriesDetails(true);
>> namesGenerator->__**SetInputDirectory(argv[1]);
>>
>> typedef itk::StatisticsImageFilter<__**ImageType>
>> StatsFilterType;
>> typedef itk::ImageFileReader<__**ImageType> ImageReaderType;
>> typedef itk::ImageFileWriter<__**ImageType> ImageWriterType;
>>
>>
>> ImageReaderType::Pointer imageReader0 =
>> ImageReaderType::New();
>> imageReader0->SetImageIO(itk::**__GDCMImageIO::New());
>>
>> StatsFilterType::Pointer statsFilter0 =
>> StatsFilterType::New();
>>
>> imageReader0->SetFileName(__**namesGenerator->__**
>> GetInputFileNames()[0]);
>> statsFilter0->SetInput(__**imageReader0->GetOutput());
>>
>> statsFilter0->Update();
>>
>> std::clog << "Stats for file: " <<
>> namesGenerator->__**GetInputFileNames()[0] << std::endl;
>>
>> std::clog <<
>> "Min: " << statsFilter0->GetMinimum() << ", "
>> "Max: " << statsFilter0->GetMaximum() << ", "
>> "Mean: " << statsFilter0->GetMean() << ", "
>> "Sigma: " << statsFilter0->GetSigma() << ", "
>> "Variance: " << statsFilter0->GetVariance() << ", "
>> "Sum: " << statsFilter0->GetSum()
>> << std::endl;
>>
>> ImageWriterType::Pointer imageWriter0 =
>> ImageWriterType::New();
>> imageWriter0->SetInput(__**imageReader0->GetOutput());
>> imageWriter0->SetImageIO(itk::**__GDCMImageIO::New());
>>
>> std::string fileName0 = std::string(argv[2]) + "/file00.dcm";
>> imageWriter0->SetFileName(__**fileName0);
>>
>> imageWriter0->Update();
>>
>> ImageReaderType::Pointer imageReader1 =
>> ImageReaderType::New();
>> imageReader1->SetImageIO(itk::**__GDCMImageIO::New());
>>
>> StatsFilterType::Pointer statsFilter1 =
>> StatsFilterType::New();
>> imageReader1->SetFileName(__**fileName0);
>> statsFilter1->SetInput(__**imageReader1->GetOutput());
>>
>> statsFilter1->Update();
>>
>> std::clog << "Stats for file: " << fileName0 << std::endl;
>> std::clog <<
>> "Min: " << statsFilter1->GetMinimum() << ", "
>> "Max: " << statsFilter1->GetMaximum() << ", "
>> "Mean: " << statsFilter1->GetMean() << ", "
>> "Sigma: " << statsFilter1->GetSigma() << ", "
>> "Variance: " << statsFilter1->GetVariance() << ", "
>> "Sum: " << statsFilter1->GetSum()
>> << std::endl;
>>
>> system("pause");
>>
>> return EXIT_SUCCESS;
>> }
>> ********************************__******************************
>> **__************
>>
>>
>> Many thanks,
>> Constantine
>>
>>
>> On 12/08/2013 14:48, Bradley Lowekamp wrote:
>>
>>
>> Do you have the code to share so that it can be easily reproduced?
>>
>>
>> Thanks,
>> Brad
>>
>> On Aug 12, 2013, at 9:33 AM, Constantine Zakkaroff
>> <mnkz at leeds.ac.uk <mailto:mnkz at leeds.ac.uk>> wrote:
>>
>> Hello ALL,
>>
>> I'm wondering if anyone can explain what's going on with the
>> changing image intensities in a read-write-read round-trip.
>> I think it's a bug, but the issues.itk.org
>> <http://issues.itk.org> is unresponsive at the moment.
>>
>> Another bug? ;)
>>
>> 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.
>>
>> I use to StatisticsImageFilter to examine the intensity
>> values. Here's what happens, when I simply read a DICOM
>> image, print stats, save the image and read it again,
>> followed by printing the stats:
>>
>> ITK Version: 3.20
>> Stats for original file:
>> Min: 0, Max: 2474, Mean: 169.236, Sigma: 256.719, Variance:
>> 65904.7, Sum: 1.40371e+007
>> Stats for saved file:
>> Min: 0, Max: 2471, Mean: 167.132, Sigma: 256.125, Variance:
>> 65600.1, Sum: 1.38626e+007
>>
>> ITK Version: 4.4
>> Stats for original file:
>> Min: 0, Max: 2474, Mean: 169.236, Sigma: 256.719, Variance:
>> 65904.7, Sum: 1.40371e+007
>> Stats for saved file:
>> Min: 0, Max: 7446, Mean: 509.114, Sigma: 772.59, Variance:
>> 596895, Sum: 4.22279e+007
>>
>> In both cases the code is identical. Just compiled against
>> different versions of ITK. The images are read and written
>> as itk::Image<unsigned short, 3>, with no processing, no
>> changes to any aspect of the images.
>>
>> So, ITK 3.20 introduces a small change, which I'm pretty
>> sure shouldn't be there. But in ITK 4.4.1 the scale of
>> intensities changes three-fold.
>>
>> I'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'm not
>> understanding here?
>>
>> None of this happens with
>> read(DICOM)-write(MHD)-read(__**MHD), where the original and
>>
>> round-trip values are identical:
>> Stats for saved file: file0.mhd
>> Min: 0, Max: 2474, Mean: 169.236, Sigma: 256.719, Variance:
>> 65904.7, Sum: 1.40371e+007
>>
>> Many thanks,
>> Constantine
>>
>> ______________________________**_________
>>
>> Powered by www.kitware.com <http://www.kitware.com>
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/__**opensource/opensource.html<http://www.kitware.com/__opensource/opensource.html>
>>
>> <http://www.kitware.com/**opensource/opensource.html<http://www.kitware.com/opensource/opensource.html>
>> >
>>
>> Kitware offers ITK Training Courses, for more information
>> visit:
>> http://www.kitware.com/__**products/protraining.php<http://www.kitware.com/__products/protraining.php>
>>
>> <http://www.kitware.com/**products/protraining.php<http://www.kitware.com/products/protraining.php>
>> >
>>
>> Please keep messages on-topic and check the ITK FAQ at:
>> http://www.itk.org/Wiki/ITK___**FAQ<http://www.itk.org/Wiki/ITK___FAQ>
>>
>> <http://www.itk.org/Wiki/ITK_**FAQ<http://www.itk.org/Wiki/ITK_FAQ>
>> >
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.itk.org/mailman/__**listinfo/insight-users<http://www.itk.org/mailman/__listinfo/insight-users>
>> <http://www.itk.org/mailman/**listinfo/insight-users<http://www.itk.org/mailman/listinfo/insight-users>
>> >
>>
>>
>> ______________________________**_________
>>
>> Powered by www.kitware.com <http://www.kitware.com>
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/__**opensource/opensource.html<http://www.kitware.com/__opensource/opensource.html>
>>
>> <http://www.kitware.com/**opensource/opensource.html<http://www.kitware.com/opensource/opensource.html>
>> >
>>
>> Kitware offers ITK Training Courses, for more information visit:
>> http://www.kitware.com/__**products/protraining.php<http://www.kitware.com/__products/protraining.php>
>>
>> <http://www.kitware.com/**products/protraining.php<http://www.kitware.com/products/protraining.php>
>> >
>>
>> Please keep messages on-topic and check the ITK FAQ at:
>> http://www.itk.org/Wiki/ITK___**FAQ<http://www.itk.org/Wiki/ITK___FAQ><
>> http://www.itk.org/Wiki/ITK_**FAQ <http://www.itk.org/Wiki/ITK_FAQ>>
>>
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.itk.org/mailman/__**listinfo/insight-users<http://www.itk.org/mailman/__listinfo/insight-users>
>>
>> <http://www.itk.org/mailman/**listinfo/insight-users<http://www.itk.org/mailman/listinfo/insight-users>
>> >
>>
>>
>>
>>
>> --
>> Unpaid intern in BillsBasement at noware dot com
>>
>
>
--
Unpaid intern in BillsBasement at noware dot com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20130812/1c9217df/attachment.htm>
More information about the Insight-users
mailing list