Class Octree


  • public class Octree
    extends java.lang.Object
    Octree for 3D vision. In 3D vision filed, the Octree is used to process and accelerate the pointcloud data. The class Octree represents the Octree data structure. Each Octree will have a fixed depth. The depth of Octree refers to the distance from the root node to the leaf node.All OctreeNodes will not exceed this depth.Increasing the depth will increase the amount of calculation exponentially. And the small number of depth refers low resolution of Octree. Each node contains 8 children, which are used to divide the space cube into eight parts. Each octree node represents a cube. And these eight children will have a fixed order, the order is described as follows: For illustration, assume, rootNode: origin == (0, 0, 0), size == 2 Then, children[0]: origin == (0, 0, 0), size == 1 children[1]: origin == (1, 0, 0), size == 1, along X-axis next to child 0 children[2]: origin == (0, 1, 0), size == 1, along Y-axis next to child 0 children[3]: origin == (1, 1, 0), size == 1, in X-Y plane children[4]: origin == (0, 0, 1), size == 1, along Z-axis next to child 0 children[5]: origin == (1, 0, 1), size == 1, in X-Z plane children[6]: origin == (0, 1, 1), size == 1, in Y-Z plane children[7]: origin == (1, 1, 1), size == 1, furthest from child 0
    • Field Detail

      • nativeObj

        protected final long nativeObj
    • Constructor Detail

      • Octree

        protected Octree​(long addr)
    • Method Detail

      • getNativeObjAddr

        public long getNativeObjAddr()
      • __fromPtr__

        public static Octree __fromPtr__​(long addr)
      • createWithDepth

        public static Octree createWithDepth​(int maxDepth,
                                             double size,
                                             Point3 origin,
                                             boolean withColors)
        Creates an empty Octree with given maximum depth
        Parameters:
        maxDepth - The max depth of the Octree
        size - bounding box size for the Octree
        origin - Initial center coordinate
        withColors - Whether to keep per-point colors or not
        Returns:
        resulting Octree
      • createWithDepth

        public static Octree createWithDepth​(int maxDepth,
                                             double size,
                                             Point3 origin)
        Creates an empty Octree with given maximum depth
        Parameters:
        maxDepth - The max depth of the Octree
        size - bounding box size for the Octree
        origin - Initial center coordinate
        Returns:
        resulting Octree
      • createWithDepth

        public static Octree createWithDepth​(int maxDepth,
                                             double size)
        Creates an empty Octree with given maximum depth
        Parameters:
        maxDepth - The max depth of the Octree
        size - bounding box size for the Octree
        Returns:
        resulting Octree
      • createWithDepth

        public static Octree createWithDepth​(int maxDepth,
                                             Mat pointCloud,
                                             Mat colors)
        Create an Octree from the PointCloud data with the specific maxDepth
        Parameters:
        maxDepth - Max depth of the octree
        pointCloud - point cloud data, should be 3-channel float array
        colors - color attribute of point cloud in the same 3-channel float format
        Returns:
        resulting Octree
      • createWithDepth

        public static Octree createWithDepth​(int maxDepth,
                                             Mat pointCloud)
        Create an Octree from the PointCloud data with the specific maxDepth
        Parameters:
        maxDepth - Max depth of the octree
        pointCloud - point cloud data, should be 3-channel float array
        Returns:
        resulting Octree
      • createWithResolution

        public static Octree createWithResolution​(double resolution,
                                                  double size,
                                                  Point3 origin,
                                                  boolean withColors)
        Creates an empty Octree with given resolution
        Parameters:
        resolution - The size of the octree leaf node
        size - bounding box size for the Octree
        origin - Initial center coordinate
        withColors - Whether to keep per-point colors or not
        Returns:
        resulting Octree
      • createWithResolution

        public static Octree createWithResolution​(double resolution,
                                                  double size,
                                                  Point3 origin)
        Creates an empty Octree with given resolution
        Parameters:
        resolution - The size of the octree leaf node
        size - bounding box size for the Octree
        origin - Initial center coordinate
        Returns:
        resulting Octree
      • createWithResolution

        public static Octree createWithResolution​(double resolution,
                                                  double size)
        Creates an empty Octree with given resolution
        Parameters:
        resolution - The size of the octree leaf node
        size - bounding box size for the Octree
        Returns:
        resulting Octree
      • createWithResolution

        public static Octree createWithResolution​(double resolution,
                                                  Mat pointCloud,
                                                  Mat colors)
        Create an Octree from the PointCloud data with the specific resolution
        Parameters:
        resolution - The size of the octree leaf node
        pointCloud - point cloud data, should be 3-channel float array
        colors - color attribute of point cloud in the same 3-channel float format
        Returns:
        resulting octree
      • createWithResolution

        public static Octree createWithResolution​(double resolution,
                                                  Mat pointCloud)
        Create an Octree from the PointCloud data with the specific resolution
        Parameters:
        resolution - The size of the octree leaf node
        pointCloud - point cloud data, should be 3-channel float array
        Returns:
        resulting octree
      • insertPoint

        public boolean insertPoint​(Point3 point,
                                   Point3 color)
        Insert a point data with color to a OctreeNode.
        Parameters:
        point - The point data in Point3f format.
        color - The color attribute of point in Point3f format.
        Returns:
        Returns whether the insertion is successful.
      • insertPoint

        public boolean insertPoint​(Point3 point)
        Insert a point data with color to a OctreeNode.
        Parameters:
        point - The point data in Point3f format.
        Returns:
        Returns whether the insertion is successful.
      • isPointInBound

        public boolean isPointInBound​(Point3 point)
        Determine whether the point is within the space range of the specific cube.
        Parameters:
        point - The point coordinates.
        Returns:
        If point is in bound, return ture. Otherwise, false.
      • empty

        public boolean empty()
      • clear

        public void clear()
        Reset all octree parameter. Clear all the nodes of the octree and initialize the parameters.
      • deletePoint

        public boolean deletePoint​(Point3 point)
        Delete a given point from the Octree. Delete the corresponding element from the pointList in the corresponding leaf node. If the leaf node does not contain other points after deletion, this node will be deleted. In the same way, its parent node may also be deleted if its last child is deleted.
        Parameters:
        point - The point coordinates, comparison is epsilon-based
        Returns:
        return ture if the point is deleted successfully.
      • getPointCloudByOctree

        public void getPointCloudByOctree​(Mat restoredPointCloud,
                                          Mat restoredColor)
        restore point cloud data from Octree. Restore the point cloud data from existing octree. The points in same leaf node will be seen as the same point. This point is the center of the leaf node. If the resolution is small, it will work as a downSampling function.
        Parameters:
        restoredPointCloud - The output point cloud data, can be replaced by noArray() if not needed
        restoredColor - The color attribute of point cloud data, can be omitted if not needed
      • getPointCloudByOctree

        public void getPointCloudByOctree​(Mat restoredPointCloud)
        restore point cloud data from Octree. Restore the point cloud data from existing octree. The points in same leaf node will be seen as the same point. This point is the center of the leaf node. If the resolution is small, it will work as a downSampling function.
        Parameters:
        restoredPointCloud - The output point cloud data, can be replaced by noArray() if not needed
      • radiusNNSearch

        public int radiusNNSearch​(Point3 query,
                                  float radius,
                                  Mat points,
                                  Mat squareDists)
        Radius Nearest Neighbor Search in Octree. Search all points that are less than or equal to radius. And return the number of searched points.
        Parameters:
        query - Query point.
        radius - Retrieved radius value.
        points - Point output. Contains searched points in 3-float format, and output vector is not in order, can be replaced by noArray() if not needed
        squareDists - Dist output. Contains searched squared distance in floats, and output vector is not in order, can be omitted if not needed
        Returns:
        the number of searched points.
      • radiusNNSearch

        public int radiusNNSearch​(Point3 query,
                                  float radius,
                                  Mat points)
        Radius Nearest Neighbor Search in Octree. Search all points that are less than or equal to radius. And return the number of searched points.
        Parameters:
        query - Query point.
        radius - Retrieved radius value.
        points - Point output. Contains searched points in 3-float format, and output vector is not in order, can be replaced by noArray() if not needed can be omitted if not needed
        Returns:
        the number of searched points.
      • radiusNNSearch

        public int radiusNNSearch​(Point3 query,
                                  float radius,
                                  Mat points,
                                  Mat colors,
                                  Mat squareDists)
        Radius Nearest Neighbor Search in Octree. Search all points that are less than or equal to radius. And return the number of searched points.
        Parameters:
        query - Query point.
        radius - Retrieved radius value.
        points - Point output. Contains searched points in 3-float format, and output vector is not in order, can be replaced by noArray() if not needed
        colors - Color output. Contains colors corresponding to points in pointSet, can be replaced by noArray() if not needed
        squareDists - Dist output. Contains searched squared distance in floats, and output vector is not in order, can be replaced by noArray() if not needed
        Returns:
        the number of searched points.
      • KNNSearch

        public void KNNSearch​(Point3 query,
                              int K,
                              Mat points,
                              Mat squareDists)
        K Nearest Neighbor Search in Octree. Find the K nearest neighbors to the query point.
        Parameters:
        query - Query point.
        K - amount of nearest neighbors to find
        points - Point output. Contains K points in 3-float format, arranged in order of distance from near to far, can be replaced by noArray() if not needed
        squareDists - Dist output. Contains K squared distance in floats, arranged in order of distance from near to far, can be omitted if not needed
      • KNNSearch

        public void KNNSearch​(Point3 query,
                              int K,
                              Mat points)
        K Nearest Neighbor Search in Octree. Find the K nearest neighbors to the query point.
        Parameters:
        query - Query point.
        K - amount of nearest neighbors to find
        points - Point output. Contains K points in 3-float format, arranged in order of distance from near to far, can be replaced by noArray() if not needed can be omitted if not needed
      • KNNSearch

        public void KNNSearch​(Point3 query,
                              int K,
                              Mat points,
                              Mat colors,
                              Mat squareDists)
        K Nearest Neighbor Search in Octree. Find the K nearest neighbors to the query point.
        Parameters:
        query - Query point.
        K - amount of nearest neighbors to find
        points - Point output. Contains K points in 3-float format, arranged in order of distance from near to far, can be replaced by noArray() if not needed
        colors - Color output. Contains colors corresponding to points in pointSet, can be replaced by noArray() if not needed
        squareDists - Dist output. Contains K squared distance in floats, arranged in order of distance from near to far, can be replaced by noArray() if not needed
      • finalize

        protected void finalize()
                         throws java.lang.Throwable
        Overrides:
        finalize in class java.lang.Object
        Throws:
        java.lang.Throwable