MantisBT - ITK
View Issue Details
0007027ITKpublic2008-05-15 08:442009-09-19 09:48
Mathieu Malaterre 
Mathieu Malaterre 
normalminoralways
closedfixed 
 
ITK-3-16 
0007027: itkGDCMImageIO does not rescale properly when dealing with floating point images.
In the itkGDCMImageIO code the following code is incorrect for floating point source:

template<class TBuffer, class TSource>
void RescaleFunctionInverse(TBuffer* buffer, TSource *source,
                     double slope, double intercept, size_t size)
{
  size /= sizeof(TSource);

  if (slope != 1.0 && intercept != 0.0)
    {
    DUFF_DEVICE_8(size, *buffer++ = (TBuffer)((*source++ - intercept) / slope) );
    }
  else if (slope == 1.0 && intercept != 0.0)
    {
    TSource sintercept = (TSource)intercept;
    if (sintercept == intercept)
      {
      DUFF_DEVICE_8(size, *buffer++ = (TBuffer)(*source++ - sintercept) );
      }
    else
      {
      DUFF_DEVICE_8(size, *buffer++ = (TBuffer)(*source++ - intercept) );
      }
    }
  else if (slope != 1.0 && intercept == 0.0)
    {
    DUFF_DEVICE_8(size, *buffer++ = (TBuffer)((*source++) / slope) );
    }
  else
    {
    DUFF_DEVICE_8(size, *buffer++ = (TBuffer)(*source++) );
    }
}


  The solution is to use the well-known trick of:

    DUFF_DEVICE_8(size, *buffer++ = (TBuffer)((*source++ - intercept) / slope) + 0.5 );

No tags attached.
Issue History
2008-05-15 08:44Mathieu MalaterreNew Issue
2008-10-06 05:32Mathieu MalaterreStatusnew => assigned
2008-10-06 05:32Mathieu MalaterreAssigned To => Mathieu Malaterre
2008-11-30 08:58Mathieu MalaterreNote Added: 0014234
2008-11-30 08:58Mathieu MalaterreNote Added: 0014235
2008-11-30 08:58Mathieu MalaterreStatusassigned => closed
2008-11-30 08:58Mathieu MalaterreResolutionopen => fixed
2008-11-30 08:58Mathieu MalaterreFixed in Version => ITK-3-10
2008-11-30 11:42Mathieu MalaterreNote Added: 0014256
2008-11-30 11:42Mathieu MalaterreStatusclosed => resolved
2008-11-30 11:42Mathieu MalaterreFixed in VersionITK-3-10 =>
2009-09-19 09:48Mathieu MalaterreNote Added: 0017636
2009-09-19 09:48Mathieu MalaterreStatusresolved => closed
2009-09-19 09:48Mathieu MalaterreFixed in Version => ITK-3-16

Notes
(0014234)
Mathieu Malaterre   
2008-11-30 08:58   
This is fixed in GDCM 2.x code path.
(0014235)
Mathieu Malaterre   
2008-11-30 08:58   
You need GDCM 2.0.10 >
(0014256)
Mathieu Malaterre   
2008-11-30 11:42   
Fixed. See
http://apps.sourceforge.net/mediawiki/gdcm/index.php?title=GDCM_Release_2.0 [^]
(0017636)
Mathieu Malaterre   
2009-09-19 09:48   
You need GDCM 2.x