You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Size type consistency.
Updated containers and adaptors.
CMake qol update.
Sequence renamed to Point.
SearchBox ReportNode update. Small 3-5% benchark performance improvement.
Moved KdTree functors to their own header files.
Split KdTree unit tests.
Removed the KdTree Dim template argument.
KdTree Splitter argument type replaced.
Google Code Guide update for output function arguments.
Added SpaceWrapper to simplify interfacing with a Space.
Minimum required C++ standard updated from C++11 to C++17.
kDynamicDim to kDynamicSize.
Minor KdTreeBuilder rework.
Moved KdTreeData to its own header file.
Renamed StdPointTraits to PointTraits.
PointTraits moved to its own header file.
Eigen and OpenCV header files renamed.
Map and its traits moved into PicoTree from PycoTree.
CvTraits now uses PointMap instead of CvMatRow.
Metrics now use iterators instead of points.
Trait dependency removed for metrics.
Eigen metrics removed.
Added PointWrapper to simplify interfacing with a Point.
Split space and point related traits.
Updated Aknn functions to be overloads of the Knn functions.
Added the SE2Squared metric.
Added the Midpoint splitting rule.
Code reduction/reuse of point classes.
Traits PointTraitsFor requirement removed. PointTraits used directly.
Traits IndexType requirement removed. Moved (back) to the KdTree.
Traits PointSdim and PointCoords requirement removed. PointTraits used directly.
Created SpaceTraits and updated Eigen, OpenCV, Vector and Map traits accordingly.
KdTree and CoverTree now take a Space as template argument, not the traits.
Split up the CoverTree.
Added default SpaceTraits overload for reference_wrapper<SpaceType>.
More consistent interface between points, spaces and their traits.
Using SpaceWrapper and PointWrapper in unit tests.
Version updated to 8.0.0.
It compares the performance of the build and query algorithms using two [LiDAR](./docs/benchmark.md) based point clouds of sizes 7733372 and 7200863. The first point cloud is used to compare build times and both are used to compare query times. All benchmarks were generated with the following parameters: `max_leaf_size=10`, `knn=1` and `OMP_NUM_THREADS=1`. A more detailed [C++ comparison](./docs/benchmark.md) of PicoTree is available with respect to [nanoflann][nano].
19
19
@@ -27,22 +27,27 @@ Available under the [MIT](https://en.wikipedia.org/wiki/MIT_License) license.
27
27
28
28
# Capabilities
29
29
30
-
* KdTree
31
-
* Nearest neighbors, approximate nearest neighbors, radius, and box searches.
32
-
* Customizable nearest neighbor searches, [metrics](https://en.wikipedia.org/wiki/Metric_(mathematics)) and tree splitting techniques.
33
-
* Support for topological spaces with identifications. E.g., points on the circle `[-pi, pi]`.
* Support for topological spaces with identifications. E.g., points on the circle `[-pi, pi]`.
35
+
* Available metrics: `L1`, `L2Squared`, `SO2`, and `SE2Squared`. Metrics can be customized.
34
36
* Compile time and run time known dimensions.
35
37
* Static tree builds.
36
38
* Thread safe queries.
37
-
* PicoTree can interface with different types of points or point sets through a traits class. This can be a custom implementation or one of the traits classes provided by this library:
38
-
*`pico_tree::StdTraits<>` supports interfacing with any `std::vector<PointType>`. It requires a specialization of `pico_tree::StdPointTraits<>` for each `PointType`. There are default `pico_tree::StdPointTraits<>` available for Eigen and OpenCV point types.
39
-
*`pico_tree::EigenTraits<>` supports interfacing with Eigen matrices.
40
-
*`pico_tree::CvTraits<>` supports interfacing with OpenCV matrices.
39
+
* PicoTree can interface with different types of points or point sets through traits classes. These can be custom implementations or one of the `pico_tree::PointTraits<>` and `pico_tree::SpaceTraits<>` classes provided by this library. There is default support for the following data types:
40
+
*`std::vector<PointType>`.
41
+
* A specialization of `pico_tree::PointTraits<>` is required for each `PointType`. There are traits available for Eigen and OpenCV point types.
42
+
*`pico_tree::SpaceMap<PointType>` and `pico_tree::PointMap<>`.
43
+
* These classes allow interfacing with raw pointers. It is assumed that points and their coordinates are laid out contiguously in memory.
44
+
*`Eigen::Matrix` and `Eigen::Map<Eigen::Matrix>`.
45
+
*`cv::Mat`.
41
46
42
47
# Examples
43
48
44
-
*[Minimal working example](./examples/kd_tree/kd_tree_point_traits.cpp)for building and querying a KdTree using a custom point type.
45
-
* Creating a [traits](./examples/kd_tree/kd_tree_traits.cpp)class for a custom type of point set.
49
+
*[Minimal working example](./examples/kd_tree/kd_tree_minimal.cpp) using an std::vector of points.
50
+
* Creating [traits](./examples/kd_tree/kd_tree_traits.cpp)classes for a custom point and point set.
46
51
* Using the KdTree's [search](./examples/kd_tree/kd_tree_search.cpp) options and creating a custom search visitor.
47
52
* Support for [Eigen](./examples/eigen/eigen.cpp) and [OpenCV](./examples/opencv/opencv.cpp) data types.
48
53
* How to use the [KdTree with Python](./examples/python/kd_tree.py).
@@ -51,7 +56,7 @@ Available under the [MIT](https://en.wikipedia.org/wiki/MIT_License) license.
51
56
52
57
Minimum:
53
58
54
-
* A compiler that is compliant with the C++11 standard or higher.
59
+
* A compiler that is compliant with the C++17 standard or higher.
55
60
*[CMake](https://cmake.org/). It is also possible to just copy and paste the [pico_tree](./src/pico_tree/) directory into an include directory.
56
61
57
62
Optional:
@@ -60,7 +65,7 @@ Optional:
60
65
*[Google Test](https://github.com/google/googletest). Used for running unit tests.
61
66
*[Eigen](http://eigen.tuxfamily.org). To run the example that shows how Eigen data types can be used in combination with PicoTree.
62
67
*[OpenCV](https://opencv.org/). To run the OpenCV example that shows how to work with OpenCV data types.
63
-
*[Google Benchmark](https://github.com/google/benchmark)and a compiler that is compliant with the C++17 standard are needed to run any of the benchmarks. The [nanoflann](https://github.com/jlblancoc/nanoflann) and [OpenCV](https://opencv.org/) benchmarks also require their respective libraries to be installed.
68
+
*[Google Benchmark](https://github.com/google/benchmark)is needed to run any of the benchmarks. The [nanoflann](https://github.com/jlblancoc/nanoflann) and [OpenCV](https://opencv.org/) benchmarks also require their respective libraries to be installed.
64
69
65
70
Python bindings:
66
71
*[Python](https://www.python.org/). Version 3.7 or higher.
Copy file name to clipboardExpand all lines: docs/benchmark.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -18,7 +18,7 @@ The different KdTree implementations are compared to each other with respect to
18
18
* Nanoflann Midpoint variation.
19
19
* PicoTree Sliding Midpoint (along the longest axis).
20
20
* Radius search algorithm: The radius in meters divided by 10 (i.e. 1.5m and 3.0m).
21
-
* Knn algorithm: The amount of neighbors searched.
21
+
* Knn algorithm: The number of neighbors searched.
22
22
23
23
The running time of the benchmark was kept reasonable by using two subsets of points and storing those in a simple binary format. The final point cloud sizes were as follows:
0 commit comments