图形处理中,从点云中查找指定位置的最近点是一个经常使用的操作。vtk中提供了不同的算法实现,作为使用者,面临怎么选择的问题。vtk测试代码里面提供了一个最近点(Closest point)搜索性能比较代码 TimePointLocators.cxx,
这个测试代码的功能是用两组随机点,以一组点为目标,从另外一组点中搜索最近点、最近N个点、指定半径范围内最近点,计算任务耗时。代码分别使用了vtkPointLocator、vtkStaticPointLocator、vtkKdTreePointLocator、vtkOctreePointLocator。
同样任务耗时:vtkStaticPointLocator明显优于其他几种。其他几个Locator再不同任务中排序有变化。
这是一次的运算输出,在不同计算机上测试结果基本一致。其中Uniform使用vtkPointLocator,Static使用vtkStaticPointLocator,Octree使用vtkOctreePointLocator,KD Tree使用vtkKdTreePointLocator。
Timing for 1000000 points, 100000 queries
Build and delete tree
Uniform: 0.194
Static: 0.0740001
Octree: 0.14
KD Tree: 0.239
Closest point queries
Uniform: 0.227
Static: 0.143
Octree: 0.286
KD Tree: 0.207
Closest N points queries
Uniform: 0.821
Static: 0.697
Octree: 2.21
KD Tree: 1.733
Closest points within radius queries
Uniform: 0.137
Static: 0.0899999
Octree: 0.13
KD Tree: 0.134
Total time
Uniform: 1.379
Static: 1.004
Octree: 2.766
KD Tree: 2.313
这个比较不一定说明算法本身优劣,只是体现了vtk库中算法实现的性能差异。