[Insight-developers] bug 6558

Simon Warfield simon.warfield at childrens.harvard.edu
Thu Nov 27 21:38:24 EST 2008


Thanks Tom, the patch looks great.
If the patch is applied and some testing machines are configured with 
ITK_USE_CENTERED_PIXEL_COORDINATES_CONSISTENTLY
then we will quickly find the code that doesn't work and needs updating 
to use the pixel coordinates consistently.

--
Simon


Tom Vercauteren wrote:
> Hi Simon,
>
> I have written a new patch from the patches that you proposed. It now
> includes the flag to turn consistent use of centered pixels on or off.
>
> Note that many tests will start failing or crashing. For example
> linear interpolation is not yet capable of handling the interpolation
> of points that are outside the "strict range". Thus, asking for an
> interpolation at continuous index [-0.4  5.2  8.8] will likely lead to
> a segfault.
>
> Anyhow, this patch might be a good starting point.
>
> Tom
>
> P.S. The patch can now also be found on the bug tracker:
> http://www.itk.org/Bug/view.php?id=6558
>
> On Wed, Nov 19, 2008 at 11:36 AM, Tom Vercauteren
> <tom.vercauteren at m4x.org> wrote:
>   
>> Hi Simon,
>>
>> Thanks for this patch which I believe is important. For the record, I
>> have just proposed a patch  to vxl to get a fast implementation of
>> vnl_math_rnd:
>> http://sourceforge.net/mailarchive/forum.php?thread_name=28392e8b0811190226i20ab46a5m2a72a5d9518ce557%40mail.gmail.com&forum_name=vxl-maintainers
>>
>> I hope both patches get accepted.
>>
>> Best regards,
>> Tom Vercauteren
>>
>> On Tue, Nov 18, 2008 at 9:36 PM, Simon Warfield
>> <simon.warfield at childrens.harvard.edu> wrote:
>>     
>>> Attached are two patches that modify the transformation of physical points
>>> to indexes to use rounding.
>>> This ensures the index selected corresponds to the extent of the voxel.
>>>
>>>       
>>>>>>> ------------------------
>>>>>>> Tom Vercauteren wrote:
>>>>>>>
>>>>>>>               
>>>>>>>> Hi Luis (and others),
>>>>>>>>
>>>>>>>> I saw the recent refactoring done on the Index <--> Point transforms.
>>>>>>>>
>>>>>>>> It looks great and easier to maintain (once we get rid of the ifdef
>>>>>>>> blocks). I'm just wondering whether this couldn't be a great
>>>>>>>> opportunity to fix this bug:
>>>>>>>> http://www.itk.org/Bug/view.php?id=6558
>>>>>>>>
>>>>>>>> What bothers me most is the casts that are similar to:
>>>>>>>>  index[i] = static_cast<typename IndexType::IndexValueType>(
>>>>>>>> continuous_index[i] );
>>>>>>>>
>>>>>>>> Using something similar to
>>>>>>>>  index[i] = static_cast<typename IndexType::IndexValueType>(
>>>>>>>> vnl_math_rnd( continuous_index[i] ) );
>>>>>>>> would make more sense to me.
>>>>>>>>
>>>>>>>> Then could do a performance optimization on vnl_math_rnd. I did such a
>>>>>>>> proposition to the vnl team but for some reason, it remained a
>>>>>>>> discussion only:
>>>>>>>>
>>>>>>>>
>>>>>>>> http://sourceforge.net/mailarchive/forum.php?thread_name=28392e8b0808050138r31574c90wddd19c0072a7da3c%40mail.gmail.com&forum_name=vxl-maintainers
>>>>>>>>
>>>>>>>> Best,
>>>>>>>> Tom
>>>>>>>>
>>>>>>>> P.S.: For the record, optimizing vnl_math_rnd & co would also allow
>>>>>>>> for fixing these bugs
>>>>>>>> http://www.itk.org/Bug/view.php?id=2078
>>>>>>>> http://www.itk.org/Bug/view.php?id=5692
>>>>>>>> which have long been waiting for a fix
>>>>>>>>
>>>>>>>>
>>>>>>>>                 
>>>>
>>>>         
>>> --
>>> Simon
>>>
>>>
>>> --- itkImageTransformHelper.h.orig      2008-11-17 12:10:37.000000000 -0500
>>> +++ itkImageTransformHelper.h   2008-11-17 13:54:09.000000000 -0500
>>> @@ -20,6 +20,7 @@
>>>  #include "itkConceptChecking.h"
>>>  #include "itkPoint.h"
>>>  #include "itkMatrix.h"
>>> +#include "vnl/vnl_math.h"
>>>
>>>  namespace itk
>>>  {
>>> @@ -173,7 +174,8 @@
>>>     const DoublePoint &, DoublePoint &rindex, IndexType &index,
>>>     const UniqueTypeBoolTrue& )
>>>     {
>>> -     index[R] = static_cast<typename IndexType::IndexValueType>(rindex[R]);
>>> +     index[R] = static_cast<typename IndexType::IndexValueType>(
>>> +                    vnl_math_rnd(rindex[R]) );
>>>     }
>>>
>>>   //
>>> @@ -308,7 +310,8 @@
>>>     const FloatPoint &, FloatPoint &rindex, IndexType &index,
>>>     const UniqueTypeBoolTrue& )
>>>     {
>>> -     index[R] = static_cast<typename IndexType::IndexValueType>(rindex[R]);
>>> +     index[R] = static_cast<typename IndexType::IndexValueType>(
>>> +                    vnl_math_rnd(rindex[R]) );
>>>     }
>>>
>>>  };
>>>
>>> --- itkImageBase.h.orig 2008-11-17 12:15:07.000000000 -0500
>>> +++ itkImageBase.h      2008-11-17 12:17:25.000000000 -0500
>>> @@ -344,8 +344,8 @@
>>>   virtual void SetSpacing (const float spacing[VImageDimension]);
>>>
>>>
>>> -  /** Get the index (discrete) from a physical point.
>>> -   * Floating point index results are truncated to integers.
>>> +  /** Get the index (discrete) of a voxel from a physical point.
>>> +   * Floating point index results are rounded to integers.
>>>    * Returns true if the resulting index is within the image, false
>>> otherwise
>>>    * \sa Transform */
>>>  #ifdef ITK_USE_TEMPLATE_META_PROGRAMMING_LOOP_UNROLLING
>>> @@ -374,7 +374,7 @@
>>>         {
>>>         sum += this->m_PhysicalPointToIndex[i][j] * (point[j] -
>>> this->m_Origin[j]);
>>>         }
>>> -      index[i] = static_cast< IndexValueType>( sum );
>>> +      index[i] = static_cast< IndexValueType>( vnl_math_round(sum) );
>>>       }
>>>
>>>     // Now, check to see if the index is within allowed bounds
>>>
>>> _______________________________________________
>>> Insight-developers mailing list
>>> Insight-developers at itk.org
>>> http://www.itk.org/mailman/listinfo/insight-developers
>>>
>>>
>>>       




More information about the Insight-developers mailing list