[Insight-developers] bug 6558
Tom Vercauteren
tom.vercauteren at m4x.org
Wed Nov 19 05:36:20 EST 2008
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