[Insight-developers] bug 6558
Hans Johnson
hans-johnson at uiowa.edu
Fri Nov 28 09:53:59 EST 2008
All,
I think this would be a good item to target for 3.12 release.
Hans
On 11/27/08 8:38 PM, "Simon Warfield" <simon.warfield at childrens.harvard.edu>
wrote:
>
> 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=28392e8b0811190226i
>>> 20ab46a5m2a72a5d9518ce557%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=28392e8b08080
>>>>>>>>> 50138r31574c90wddd19c0072a7da3c%40mail.gmail.com&forum_name=vxl-mainta
>>>>>>>>> iners
>>>>>>>>>
>>>>>>>>> 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
>>>>
>>>>
>>>>
>
>
> _______________________________________________
> 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