[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