A point cloud fragmentation compression method based on adaptive geometric partitioning
Through the combination of adaptive geometric partitioning and multi-forktree structure, point cloud data is sliced and compressed, solving the problem of low point cloud data processing efficiency in the existing technology, and achieving a more efficient point cloud compression effect.
Patent Information
- Application Number
- CN202411479292.1
- Authority / Receiving Office
- CN · China
- Patent Type
- Patents(China)
- Current Assignee / Owner
- Filing Date
- 2024-10-23
- Publication Date
- 2024-12-17
- Estimated Expiration
- 2044-10-23
AI Technical Summary
The existing point cloud compression method fails to fully utilize the flexibility of tree structure and adaptive sharding technology, resulting in low point cloud data processing efficiency and large storage resource utilization.
Using the point cloud shard compression method based on adaptive geometric partitioning, the normal vector and curvature of point cloud data are segmented to generate flat point cloud slices, and space division is used by octave, quad-tree and binary trees, combined with arithmetic Encoding for compression.
It effectively reduces the average length of spatial redundancy and occupancy codes, improves the accuracy and efficiency of point cloud compression, and is suitable for adaptive point cloud partitioning methods.
Smart Images

Figure CN119006619B_ABST
Abstract
Description
Technical Field
[0001] The present invention belongs to the technical field of point cloud compression, and in particular relates to a point cloud fragmentation compression method based on adaptive geometric partitioning. Background Art
[0002] The most basic information contained in point cloud is the spatial three-dimensional coordinate information of each data point, and it may also contain additional attribute information such as the color, normal vector, reflectivity, etc. of the object surface. It has been widely used in emerging industries such as virtual reality, augmented reality, autonomous driving, and industrial design. However, point cloud models usually contain hundreds of thousands to tens of millions of points. Without compression, the massive amount of point cloud data has a great impact on the processing efficiency of point cloud data, and often requires extremely high storage resources and transmission bandwidth. Therefore, the research on point cloud data compression coding is of great significance.
[0003] The commonly used tree-based point cloud coding algorithm is an octree-based coding algorithm, which recursively divides the space into eight subspaces evenly. However, the number of bits required for the octree code increases significantly as the depth of the tree increases. The multi-tree-based coding algorithm introduces quadtrees and binary trees on the basis of octrees, which means that only four or two bits are needed to represent certain node partitioning processes, thereby greatly reducing the average length of the occupied code. However, the existing point cloud compression methods have not fully utilized this flexible tree structure, and have not performed operations such as point cloud slicing to be more suitable for adaptive point cloud partitioning methods. Summary of the invention
[0004] In view of the above technical problems, in order to make point cloud segmentation more suitable for using an adaptive point cloud partitioning method, reduce spatial redundancy and the average length of occupied codes, and perform more accurate neighbor prediction and arithmetic coding based on a multi-tree structure, the present invention provides a point cloud segmentation compression method based on adaptive geometric partitioning.
[0005] The technical solution adopted by the present invention is:
[0006] A point cloud fragmentation compression method based on adaptive geometric partitioning, the method comprising the following steps:
[0007] S1. Point cloud segmentation: The given 3D point cloud data is segmented according to the normal vector and curvature of each point to generate multiple non-intersecting and flat point cloud slices;
[0008] S2, point cloud slice preprocessing: preprocessing each point cloud slice, the preprocessing comprising: rotating the point cloud slice in a main direction so that each point cloud slice is in a flat rectangular bounding box, and all data points in each point cloud slice are allocated to corresponding unit cube voxels;
[0009] S3, adaptive geometric partitioning: adaptive geometric partitioning is performed on the point cloud slices preprocessed in step S2, and the spatial partitioning is completed using octree, quadtree and binary tree according to the distribution of data points in each point cloud slice to construct a tree structure;
[0010] S4, neighbor prediction and arithmetic coding: For the tree structure constructed in step S3, the occupancy probability of the current node is predicted using the occupancy information of the adjacent nodes in the tree structure that has been encoded, and arithmetic coding is performed to complete the point cloud fragment compression.
[0011] Furthermore, the specific process of step S1 includes:
[0012] S11, calculating the normal vector and curvature of each data point in the original point cloud data to be segmented, sorting the points according to the curvature values of the points, finding the point with the minimum curvature value as the seed point, and adding the seed point to the seed point set of the current point cloud slice;
[0013] S12, take a seed point in the seed point set of the current point cloud piece and the surrounding Compare the nearest points.
[0014] Set the normal vector angle threshold and calculate the angle between the seed point and The normal vector angle of the neighboring points is calculated. If the normal vector angle of a neighboring point is less than the set normal vector angle threshold, the corresponding neighboring point is added to the current point cloud slice; and a curvature threshold is set to check the curvature of the neighboring points added to the current point cloud slice. If the curvature of the neighboring points added to the current point cloud slice is less than the set curvature threshold, the corresponding neighboring point is added as a new seed point to the seed point set of the current point cloud slice;
[0015] The points added to the point cloud slice are removed from the original point cloud data;
[0016] S13. Set the maximum number of points in the point cloud If the number of points in the current point cloud is greater than or equal to the maximum number of points set , stop growing, the current point cloud segmentation is completed, and go to step S15;
[0017] If the number of points in the current point cloud is less than the maximum number of points set , proceed to step S14;
[0018] S14: Determine whether the seed point set of the current point cloud is empty. If it is not empty, repeat step S12 to select a new seed point from the seed point set and compare it with the surrounding The neighboring points are compared until the number of points in the current point cloud is greater than or equal to the maximum number of points set. , proceed to step S15;
[0019] If the seed point set of the current point cloud slice is empty, the segmentation of the current point cloud slice is completed, and the process goes to step S15;
[0020] S15. When a point cloud slice is segmented, continue to look for a point with the smallest curvature and not segmented as a new seed point, repeat steps S12 to S14, segment the next point cloud slice, and segment the point cloud slices that have not been successfully segmented until all points in the original point cloud data are segmented.
[0021] Furthermore, in step S15, the minimum number of points in the point cloud is set. If the number of points in the point cloud is less than the minimum number of points set , is regarded as the point cloud piece that failed to be segmented successfully.
[0022] Furthermore, in step S15, the point cloud pieces that have not been successfully segmented are segmented by: separating the points in the point cloud pieces that have not been successfully segmented from the surrounding The successfully segmented points among the neighboring points are compared, and the normal vector angle between the current point and the neighboring point is calculated. If the normal vector angle is less than the set normal vector angle threshold, the current point is added to the point cloud piece where the neighboring point is located; this step can ensure that the shape of each point cloud piece is flatter and each point in the original point cloud is successfully segmented.
[0023] Furthermore, in step S3, the point cloud slices preprocessed in step S2 are adaptively geometrically partitioned, and the octree, quadtree and binary tree are dynamically used to complete the spatial partition according to the distribution of data points in each point cloud slice to construct a tree structure. The specific method includes:
[0024] When adaptive geometric partitioning is performed on each point cloud piece, the size of the current subspace to be divided each time is , assuming ;
[0025] if , perform octree partitioning along the x, y, and z axes;
[0026] if , perform quadtree partitioning along the y and z axes;
[0027] if , perform binary tree partition along the z-axis;
[0028] in, , , are the logarithmic sizes of the current subspace in the x, y, and z directions with base 2, respectively;
[0029] For each tree node, a binary occupancy code is used to indicate the occupancy of all child nodes. Each bit of the occupancy code indicates whether the corresponding child node contains a data point. If it contains a data point, the corresponding bit in the occupancy code is marked as 1, otherwise it is marked as 0. When performing octree partitioning, the corresponding non-empty tree nodes are assigned an 8-bit occupancy code; when performing quadtree partitioning, the corresponding non-empty tree nodes are assigned a 4-bit occupancy code; when performing binary tree partitioning, the corresponding non-empty tree nodes are assigned a 2-bit occupancy code. By judging the size of the current subspace, the octree, quadtree and binary tree are adaptively selected for space partitioning, avoiding the over-division that may occur in the traditional octree partitioning method and reducing the average length of the node occupancy code.
[0030] Furthermore, the specific process of step S4 includes:
[0031] S41, after the point cloud piece is converted into a tree structure in step S3, for each node in the tree, the occupancy of the corresponding neighboring node is obtained, and the neighbor configuration NC of the node is calculated;
[0032] S42, for the bit currently to be encoded in the node occupation code b , get the occupation code The state of the previous encoded bits ;use Reduced information uncertainty.
[0033] S43, NC value and The occupancy information of the bit is used as context, and each bit to be encoded is obtained according to the context information. The predicted status :
[0034] ;
[0035] S44, designing N fixed binary arithmetic encoders, wherein the internal probability of each encoder is continuously updated according to the occupancy of the encoded bits;
[0036] S45, according to each bit to be encoded The predicted status Mapping generates an encoder index, using the encoder index to obtain the optimal encoder from N encoders, using the internal probability of the optimal encoder Perform arithmetic coding. Through precise calculation of neighbor configuration and context prediction, combined with an adaptive arithmetic encoder, the accuracy and efficiency of point cloud compression are improved, while the neighbor configuration is simplified and the computational complexity is reduced.
[0037] Furthermore, for each node in the tree, the state of each neighbor node coplanar with the node is empty or non-empty, and different numerical values are assigned to the neighbor nodes. The neighbor configuration NC of each node is equal to the sum of the numerical values of the non-empty neighbor nodes; due to the invariance of spatial rotation, the number of neighbor configurations NC can be reduced by rotating or symmetric the nodes.
[0038] Through the above technical solution, the point cloud slicing compression method based on adaptive geometric partitioning provided by the present invention has the following beneficial effects: (1) The point cloud slicing compression method provided by the present invention segments the point cloud data to generate flat point cloud slices, effectively reducing spatial redundancy and being more suitable for the adaptive geometric partitioning method. (2) The point cloud slicing compression method provided by the present invention adaptively selects an octree, a quadtree or a binary tree for partitioning according to the distribution characteristics of the data points in the point cloud slices. The partitioning process of some nodes only requires four or two bits to represent, which greatly reduces the average length of the occupied code.
[0039] (3) The point cloud fragmentation compression method provided by the present invention makes full use of the spatial correlation of geometric information and combines it with the probability coding method to perform neighbor prediction and arithmetic coding on the octree, quadtree or binary tree respectively, which effectively improves the coding accuracy and reduces the bit rate overhead. BRIEF DESCRIPTION OF THE DRAWINGS
[0040] In order to more clearly illustrate the embodiments of the present invention or the technical solutions in the prior art, the drawings required for use in the embodiments or the description of the prior art are briefly introduced below.
[0041] Figure 1 A flow chart of a point cloud fragmentation compression method based on adaptive geometric partitioning disclosed in an embodiment of the present invention.
[0042] Figure 2 This is a flow chart of the point cloud segmentation stage in the present invention.
[0043] Figure 3 This is a flow chart of the point cloud neighbor prediction and arithmetic coding stage in the present invention. DETAILED DESCRIPTION
[0044] In order to make the purpose, technical solution and advantages of the present invention more clearly understood, the present invention is further described in detail below in conjunction with the accompanying drawings and embodiments. It should be understood that the specific embodiments described herein are only used to explain the present invention and are not used to limit the present invention.
[0045] On the contrary, the present invention covers any substitution, modification, equivalent method and scheme made on the essence and scope of the present invention as defined by the claims. Further, in order to make the public have a better understanding of the present invention, some specific details are described in detail in the detailed description of the present invention below. Those skilled in the art can fully understand the present invention without the description of these details.
[0046] The present invention provides a point cloud fragmentation compression method based on adaptive geometric partitioning, such as Figure 1 As shown, the following steps are included:
[0047] S1. Point cloud segmentation: The given 3D point cloud data is segmented according to the normal vector and curvature of each point to generate multiple non-intersecting and flat point cloud slices;
[0048] S2, point cloud slice preprocessing: preprocess each point cloud slice, the preprocessing includes: rotating the point cloud slice in the main direction, so that each point cloud slice is in a flat rectangular bounding box, and all data points in each point cloud slice are assigned to the corresponding unit cube voxel; in this step, the bounding box is the smallest rectangular box that determines the boundary range of the point cloud in three-dimensional space, and the actual distribution of the data points of each point cloud slice generated in step S1 can be a rectangular cuboid of any size. In the example, the size of the bounding box in each direction can be expressed as a power of 2.
[0049] S3, adaptive geometric partitioning: adaptive geometric partitioning is performed on the point cloud slices preprocessed in step S2, and the spatial partitioning is completed using octree, quadtree and binary tree according to the distribution of data points in each point cloud slice to construct a tree structure;
[0050] In this step, when adaptive geometric partitioning is performed on each point cloud piece, the size of the current subspace to be divided each time is , assuming ;
[0051] if , perform octree partitioning along the x, y, and z axes;
[0052] if , perform quadtree partitioning along the y and z axes;
[0053] if , perform binary tree partition along the z-axis;
[0054] in, , , are the logarithmic sizes of the current subspace in the x, y, and z directions with base 2, respectively;
[0055] For each tree node, a binary occupancy code can be used to represent the occupancy status of all child nodes. Each bit of the occupancy code represents whether the corresponding child node contains a data point. If it contains a data point, the corresponding bit in the occupancy code is marked as 1, otherwise it is marked as 0. When performing octree partitioning, the corresponding non-empty tree nodes are assigned an 8-bit occupancy code; when performing quadtree partitioning, the corresponding non-empty tree nodes are assigned a 4-bit occupancy code; when performing binary tree partitioning, the corresponding non-empty tree nodes are assigned a 2-bit occupancy code.
[0056] S4, neighbor prediction and arithmetic coding stage: for the tree structure constructed in step S3, the occupancy probability of the current node is predicted using the occupancy information of the adjacent nodes in the tree structure that has been encoded, and arithmetic coding is performed to complete the point cloud fragment compression.
[0057] In this embodiment, Figure 2 As shown, the specific process of step S1 is as follows:
[0058] S11, calculating the normal vector and curvature of each data point in the original point cloud data to be segmented, sorting the points according to the curvature values of the points, finding the point with the minimum curvature value as the seed point, and adding the seed point to the seed point set of the current point cloud slice;
[0059] S12, take a seed point in the seed point set of the current point cloud piece and the surrounding Compare the nearest points.
[0060] Set the normal vector angle threshold and calculate the angle between the seed point and The normal vector angle of the neighboring points is calculated. If the normal vector angle of a neighboring point is less than the set normal vector angle threshold, the corresponding neighboring point is added to the current point cloud slice; and a curvature threshold is set to check the curvature of the neighboring points added to the current point cloud slice. If the curvature of the neighboring points added to the current point cloud slice is less than the set curvature threshold, the corresponding neighboring point is added as a new seed point to the seed point set of the current point cloud slice;
[0061] The points added to the point cloud slice are removed from the original point cloud data;
[0062] S13. Set the maximum number of points in the point cloud If the number of points in the current point cloud is greater than or equal to the maximum number of points set , stop growing, the current point cloud segmentation is completed, and go to step S15;
[0063] If the number of points in the current point cloud is less than the maximum number of points set , proceed to step S14;
[0064] S14: Determine whether the seed point set of the current point cloud is empty. If it is not empty, repeat step S12 to select a new seed point from the seed point set and compare it with the surrounding The neighboring points are compared until the number of points in the current point cloud is greater than or equal to the maximum number of points set. , proceed to step S15;
[0065] If the seed point set of the current point cloud slice is empty, the segmentation of the current point cloud slice is completed, and the process goes to step S15;
[0066] S15. When a point cloud slice is segmented, continue to look for a point with the smallest curvature and not segmented as a new seed point, repeat steps S12 to S14, segment the next point cloud slice, and segment the point cloud slices that have not been successfully segmented until all points in the original point cloud data are segmented.
[0067] Among them, set the minimum number of points in the point cloud If the number of points in the point cloud is less than the minimum number of points set , is regarded as the point cloud piece that failed to be segmented successfully.
[0068] The method for segmenting the point cloud slices that failed to be segmented is as follows: the points in the point cloud slices that failed to be segmented are separated from the surrounding points. The successfully segmented points among the neighboring points are compared, and the normal vector angle between the current point and the neighboring point is calculated. If the normal vector angle is less than the set normal vector angle threshold, the current point is added to the point cloud where the neighboring point is located.
[0069] like Figure 3 As shown, the specific process of step S4 is as follows:
[0070] S41, after the point cloud piece is converted into a tree structure in step S3, for each node in the tree, the occupancy of the corresponding neighboring node is obtained, and the neighbor configuration NC of the node is calculated;
[0071] S42, for the bit currently to be encoded in the node occupation code b , get the occupation code The state of the previous encoded bits ;
[0072] S43, NC value and The occupancy information of the bit is used as context, and each bit to be encoded is obtained according to the context information. The predicted status :
[0073] ;
[0074] S44, designing N fixed binary arithmetic encoders, wherein the internal probability of each encoder is continuously updated according to the occupancy of the encoded bits;
[0075] S45, according to each bit to be encoded The predicted status Mapping generates an encoder index, using the encoder index to obtain the optimal encoder from N encoders, using the internal probability of the optimal encoder Perform arithmetic coding. For each node in the tree, the state of each coplanar neighbor node is empty or non-empty, and different values (1, 2, 4, 16, etc.) are assigned to the neighbor nodes. The neighbor configuration NC is equal to the sum of the values of the non-empty neighbor nodes; due to the invariance of spatial rotation, the number of neighbor configurations NC can be reduced by rotating or symmetric the nodes.
[0076] If it is an octree node, the neighbor configuration NC is equal to the sum of the values of the 6 neighbor nodes, with a total of 64 different modes, which can be reduced to 10 through rotation or symmetry; if it is a quadtree or binary tree node, ignoring the neighbor nodes on the x-axis, the neighbor configuration NC is equal to the sum of the values of the 4 neighbor nodes, with a total of 16 different modes, which can be reduced to 6 through rotation or symmetry.
[0077] The method provided by the present invention reduces spatial redundancy by rotating point cloud slices, introduces adaptive geometric partitioning of point cloud slices to reduce the average length of occupied codes, and makes full use of the spatial correlation of geometric information, reduces bit rate overhead, and improves compression efficiency.
[0078] The above description of the disclosed embodiments enables professionals in the field to implement or use the present invention: the specific implementation of the present invention can still be modified or replaced by equivalents, and any modification or equivalent replacement that does not deviate from the spirit and scope of the present invention should be covered by the protection scope of the claims of the present invention. This patent is not limited to the above-mentioned best implementation mode. Anyone can derive other forms under the inspiration of this patent. All equivalent changes and modifications made according to the scope of the patent application of the present invention should be covered by this patent.
Claims
1. A point cloud fragmentation compression method based on adaptive geometric partitioning, characterized in that: The method comprises the following steps: S1. Point cloud segmentation: The given 3D point cloud data is segmented according to the normal vector and curvature of each point to generate multiple non-intersecting and flat point cloud slices; S2, point cloud slice preprocessing: preprocessing each point cloud slice, the preprocessing comprising: rotating the point cloud slice in a main direction so that each point cloud slice is in a flat rectangular bounding box, and all data points in each point cloud slice are allocated to corresponding unit cube voxels; S3, adaptive geometric partitioning: adaptive geometric partitioning is performed on the point cloud slices preprocessed in step S2, and the spatial partitioning is completed using octree, quadtree and binary tree according to the distribution of data points in each point cloud slice to construct a tree structure; S4, neighbor prediction and arithmetic coding: for the tree structure constructed in step S3, the occupancy probability of the current node is predicted using the occupancy information of the adjacent nodes in the tree structure that has been encoded, and arithmetic coding is performed to complete the point cloud fragment compression; The specific process of step S1 includes: S11, calculating the normal vector and curvature of each data point in the original point cloud data to be segmented, sorting the points according to the curvature values of the points, finding the point with the minimum curvature value as the seed point, and adding the seed point to the seed point set of the current point cloud slice; S12, taking a seed point in the seed point set of the current point cloud piece and comparing it with the surrounding K neighboring points; A normal vector angle threshold is set, and the normal vector angles between the seed point and the K neighboring points are calculated. If the normal vector angle of the neighboring point is less than the set normal vector angle threshold, the corresponding neighboring point is added to the current point cloud slice; and a curvature threshold is set, and the curvature of the neighboring point added to the current point cloud slice is checked. If the curvature of the neighboring point added to the current point cloud slice is less than the set curvature threshold, the corresponding neighboring point is added as a new seed point to the seed point set of the current point cloud slice; The points added to the point cloud slice are removed from the original point cloud data; S13, setting the maximum number of points maxNum of the point cloud slice. If the number of points of the current point cloud slice is greater than or equal to the set maximum number of points maxNum, stop growing, the current point cloud slice segmentation is completed, and enter step S15; If the number of points in the current point cloud is less than the set maximum number of points maxNum, proceed to step S14; S14, determine whether the seed point set of the current point cloud is empty. If not, repeat step S12, take a new seed point from the seed point set and compare it with the surrounding K neighboring points until the number of points of the current point cloud is greater than or equal to the set maximum number of points maxNum, and then enter step S15; If the seed point set of the current point cloud slice is empty, the current point cloud slice segmentation is completed, and the process goes to step S15; S15, when a point cloud slice is segmented, continue to find a point with the smallest curvature and not segmented as a new seed point, repeat steps S12 to S14, segment the next point cloud slice, and segment the point cloud slices that have not been successfully segmented until all points in the original point cloud data are segmented; The specific process of step S4 includes: S41, after the point cloud piece is converted into a tree structure in step S3, for each node in the tree, the occupancy of the corresponding neighboring node is obtained, and the neighbor configuration NC of the node is calculated; S42, for the bit b currently to be encoded in the node occupation code b i , get the occupied code b i The states of the previously encoded bits b0, ..., b i-1 ; S43, NC value and b0, ..., b i-1 The occupancy information of the bit b is used as the context, and each bit b to be encoded is obtained according to the context information. i The predicted state D i : D i ={b0…b i-1 ,NC}; S44, designing N fixed binary arithmetic encoders, wherein the internal probability of each encoder is continuously updated according to the occupancy of the encoded bits; S45, according to each bit b to be encoded i The predicted state D i Mapping generates an encoder index, using the encoder index to obtain the optimal encoder from N encoders, using the internal probability of the optimal encoder b i Perform arithmetic coding.
2. The point cloud fragmentation compression method based on adaptive geometric partitioning according to claim 1, characterized in that: In S15, a minimum point number minNum of a point cloud piece is set. If the point number of a point cloud piece is less than the set minimum point number minNum, it is regarded as a point cloud piece that has not been successfully segmented.
3. The point cloud fragmentation compression method based on adaptive geometric partitioning according to claim 1, characterized in that: In S15, the point cloud pieces that have not been successfully segmented are segmented, and the specific method is as follows: Compare the points in the point cloud that failed to be segmented successfully with the successfully segmented points in the surrounding K neighboring points, calculate the normal vector angle between the current point and the neighboring point, and if the normal vector angle is less than the set normal vector angle threshold, add the current point to the point cloud where the neighboring point is located.
4. The point cloud fragmentation compression method based on adaptive geometric partitioning according to claim 1, characterized in that: In S3, the point cloud slices preprocessed in step S2 are adaptively geometrically partitioned, and the octree, quadtree and binary tree are dynamically used to complete the spatial division according to the distribution of data points in each point cloud slice to construct a tree structure. The specific method includes: When adaptive geometric partitioning is performed on each point cloud piece, the size of the current subspace to be divided each time is Assumption d x ≤d y ≤d z : If d x =d y =d z , perform octree partitioning along the x, y, and z axes; If d x =d y <d z , perform quadtree partitioning along the y and z axes; If d x <d y <d z , perform binary tree partition along the z-axis; Among them, d x d y d z are the logarithmic sizes of the current subspace in the x, y, and z directions with base 2, respectively; For each tree node, a binary occupancy code is used to indicate the occupancy status of all child nodes. Each bit of the occupancy code indicates whether the corresponding child node contains a data point. If it contains a data point, the corresponding bit in the occupancy code is marked as 1, otherwise it is marked as 0. When performing octree partitioning, the corresponding non-empty tree nodes are assigned an 8-bit occupancy code; when performing quadtree partitioning, the corresponding non-empty tree nodes are assigned a 4-bit occupancy code; when performing binary tree partitioning, the corresponding non-empty tree nodes are assigned a 2-bit occupancy code.
5. The point cloud fragmentation compression method based on adaptive geometric partitioning according to claim 1, characterized in that: For each node in the tree, the state of each neighbor node coplanar with the node is empty or non-empty, and different values are assigned to the neighbor nodes. The neighbor configuration NC of each node is equal to the sum of the values of the non-empty neighbor nodes.
Citation Information
Patent Citations
Live-action three-dimensional reconstruction method and system
CN111629193A
Point cloud geometric information compression system and method and computer system
CN115065822A
Volume video fragment compression method based on deep learning
CN117119203A
Point cloud coding method based on geometric sampling
CN118018766A
Point cloud compression using hybrid transforms
US20190122393A1
