[Insight-users] Bug in itk::kdTree ?

Luis Ibanez luis.ibanez at kitware.com
Thu Nov 26 13:59:43 EST 2009


Hi Motes,

Why are you using such a large radius ?

The method will return ALL the points that are inside
 a hyper-shpere of radius 262.

Do you really anticipate that to be the region of the
space that you need is that large ?


    Luis


--------------------------------------------------------
On Thu, Nov 26, 2009 at 1:55 PM, motes motes <mort.motes at gmail.com> wrote:
> The value is:
>
> m_radius = 262
>
> when I do std::cout << "m_radius" << std::endl; I  have also tried:
>
>            static_cast<double>(m_kernel_radius)/1.0;
>
> But I still get the error.
>
>
>
>
> When I look in the implementation (itkKdTree.txx) in the ::SearchLoop
> function (a recursive function) I see that the radius is used:
>
>
>    // search the other node, if necessary
>    tempValue = lowerBound[partitionDimension];
>    lowerBound[partitionDimension] = partitionValue;
>    if ( this->BoundsOverlapBall(query, lowerBound, upperBound,
>                           m_SearchRadius) )
>      {
>      SearchLoop(node->Right(), query, lowerBound, upperBound);
>      }
>    lowerBound[partitionDimension] = tempValue;
>
>
> My thought was therefore (under the assumption that a "bad" radius is
> supplied) that the function never terminates since its a recursive
> function.
>
>
>
>
>
>
>
>
> On Thu, Nov 26, 2009 at 7:46 PM, Luis Ibanez <luis.ibanez at kitware.com> wrote:
>> Hi Motes,
>>
>> What is the value of m_radius   ?
>>
>> Please report this to the mailing list.
>>
>>
>>     Thanks
>>
>>
>>           Luis
>>
>>
>> -----------------------------------------
>> On Thu, Nov 26, 2009 at 1:32 PM, motes motes <mort.motes at gmail.com> wrote:
>>> For the last couple of days I have tried to find a solution for a
>>> segmentation fault that happens when I use the itk::kdTree.
>>>
>>> I am using the version of search where the radius is specified:
>>>
>>>  /** Searches the neighbors fallen into a hypersphere */
>>>  void Search(const MeasurementVectorType &query,
>>>              double radius,
>>>              InstanceIdentifierVectorType& result) const;
>>>
>>>
>>>
>>>
>>> From my function I call it with:
>>>
>>>    VectorType vectorPoint;
>>>    for (int i=0; i<NDimensions; i++) {
>>>      vectorPoint[i] = point[i];
>>>    }
>>>
>>>    NeighborsType neighbors;
>>>    tree->Search(vectorPoint, m_radius, neighbors);
>>>
>>>
>>>
>>>
>>>
>>> Where radius is computed like:
>>>
>>>  unsigned int FVOrder = 3;
>>>  double Order = (double)(FVOrder+1.0);
>>>  double  m_radius =  (1.0*maxValue * Order)/2.0;
>>>
>>>
>>> Now if I do:
>>>
>>>    tree->Search(vectorPoint, 5.0, neighbors);
>>>
>>> it works fine without any segmentation errors. But if I do:
>>>
>>>    tree->Search(vectorPoint, m_radius, neighbors);
>>>
>>> where m_radius is compted as above I get the segmentation error (after
>>> a few thousand calls).
>>>
>>> Could this be a bug or am I doing something wrong here?
>>> _____________________________________
>>> Powered by www.kitware.com
>>>
>>> Visit other Kitware open-source projects at
>>> http://www.kitware.com/opensource/opensource.html
>>>
>>> Kitware offers ITK Training Courses, for more information visit:
>>> http://www.kitware.com/products/protraining.html
>>>
>>> Please keep messages on-topic and check the ITK FAQ at:
>>> http://www.itk.org/Wiki/ITK_FAQ
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://www.itk.org/mailman/listinfo/insight-users
>>>
>>
>


More information about the Insight-users mailing list