[Insight-developers] point locator for kd tree
Nicholas Tustison
ntustison at gmail.com
Tue May 31 18:13:02 EDT 2011
Perfect. That all makes sense. I'll put the patch together using the
second option sometime later tonight (hopefully) and you can take
a look and make comments. I plan on pulling your point locator
class from the IJ article unless there's another version I should use.
On May 31, 2011, at 6:06 PM, Luis Ibanez wrote:
> Hi Nick,
>
>
> On Mon, May 30, 2011 at 1:23 PM, Nicholas Tustison <ntustison at gmail.com> wrote:
>> Hi Luis,
>>
>> I don't know if you saw my response to your code review but in case you
>> hadn't, I wanted to raise some of the issues I mentioned there. I really
>> don't care what route we go, I just want to put something in place so I can
>> potentially submit a couple of point set metrics before the release date.
>>
>> I had seen your PointLocator2 class with the same functionality that I
>> wanted, namely to be able to locate the nearest neighbors of a user-specified
>> point within a given point set. However, there were a couple of issues
>> which led me to implement the point set location functionality within the
>> point set itself. Geometric information, in the form of the bounding box,
>> is already being computed in the point set as requested by the user so
>> adding the kd-tree does not seem incongruous.
>
>
> Here are some more considerations:
>
> The itkPointSet is in the Core/Common Module
> The itkKdTree is in the Numerics/Statistics Module
>
>
> Currently ITK-Common only depends on
>
> * ITK-VNLInstantiation
> * ITK-KWSys
>
>
> To implement the closest point location in the
> itkPointSet directly we would have to move the
> KdTree and the KdTreeGenerator to Core/Common.
>
> (your patch currently works because the Tests in Common
> can have additional dependencies beyond the ones of
> the ITK-Common module itself. That however will not work
> in an application).
>
>
> ...relocating the classes is not impossible...
> but it is something to keep in mind...
>
>
> Implementing the closest point location in a
> helper class enable us to put this class out
> of Common and out of Statistics (if we want).
>
>
>
>> Additionally, you already have the function FindClosestPoint() in the
>> point set class, although it isn't implemented properly, and that's very similar
>> to wanting the nearest N neighbors. So if you look at my submission, I
>> have
>>
>> FindClosestPoint()
>> FindClosetsNPoints()
>> FindPointsWithinRadius()
>>
>> all based on the kd-tree.
>>
>
>
> Agree.
>
> However, they don't have to be methods of the PointSet itself.
>
> For example, the itkImage doesn't have a function that gives
> your the index of pixel with the maximum value or minimum
> value.
>
> We implement such services in calculators.
>
> DataObjects should be only "containers of data"
>
>
>> Also, I believe the code entanglements that you mention is what led me to
>> implement the VectorContainerToListSampleAdaptor class which seems a
>> much better use of the data then the PointSetToListSampleAdaptor class
>> which ignores everything in the point set class except for what is housed in the
>> PointSetContainer class which is a VectorContainer type.
>>
>
> I certainly agree.
>
> for the purpose of the KdTree we only
> need the point coordinates information.
>
> Your adaptor is better suited for this goal.
>
>
>> So, although what I propose is one possible solution, another solution would
>> be to submit the PointSetLocator2 class (with a possible deletion of the
>> FindClosestPoint() function in the PointSet class?). What are your thoughts
>> in favoring one over the other?
>>
>
>
> I would vote for this second option.
>
>
> Namely:
>
> 1) Add the PointSetLocator2 (renamed as PointSetLocator)
> Based on the KdTree.
>
> 2) Adopt the use of your new Adaptor, so that the PointSet
> Locator focuses on the point coordinates.
>
> 3) Put the computation of the PointSet Bounding box in the
> PointLocator or another helper class.
>
> 4) Remove the FindClosestPoint() from the PointSet,
> and make it available in the PointLocator.
>
> Since the method was never functional in the PointSet,
> this is not a backward compatibility concern.
>
>
> I'm happy to put such patch together,
> or to assist you in doing so.
>
>
> Luis
More information about the Insight-developers
mailing list