- 06 Feb, 2019 5 commits
-
-
This partitioning method (--partitionMethod=2) finds the longest edge of the point cloud and divides it into --partitionNumUniformGeom=n slices along the longest edge. If n = 0, the ratio of longest edge to shortest edge determines the number of slices.
-
David Flynn authored
This commit provides a basic frame work for partitioning a frame into multiple slices, with the continued assumption of single-frame sequences. The decoder is modified to independently decode each slice and accumulate decoded points in a buffer for output. The encoder is updated to support partitioning the input point cloud into slices and to independently code each slice. Points from reconstructed slices are accumulated and output at the end of the frame period. The partitioning process (partitioning methods are defined in partitioning.cpp) proceeds as follows: - quantise the input point cloud without duplicate point removal or reordering points. - apply the partitioning function to produce a list of tiles and slices, each slice having an origin, id, and list of point indexes that identify points in the input point cloud. - producing a source point cloud for each partition as a subset of the input point cloud. - compressing each partition (slice) as normal by quantising the partitioned input. Recolouring is necessarily performed against the partitioned input since the recolouring method cannot correctly handle recolouring a partition from a complete point cloud. NB: this commit does not provide any partitioning methods.
-
David Flynn authored
This commit provides support for each slice to have an origin specified relative to the sequence bounding box. Reconstructed points are offset by the slice origin prior to inverse scaling and translation.
-
David Flynn authored
With slice/tile-based coding, it is necessary to build an output point cloud from independent slice/tiles. An append operation allows the points of two point clouds to be concatenated.
-
This uses a binary-tree to generate the levels-of-details for the lifting/predicting transforms as an alternative to Euclidean distance thresholding methods.
-
- 05 Feb, 2019 17 commits
-
-
This simplified attribute prediction scheme avoids computing the LoD structure in order to reduce the computational complexity of both the encoder and the decoder. It is activated by setting levelOfDetailCount=0. NB: this is only configured for lossless/near-lossless predictive attribute coding of cat3 sequences.
-
This replaces the previous floating point transform implementation with a fixed-point alternative with essentially identical compression performance.
-
This commit provides an integer approximation of atan2().
-
This replaces the previous floating point version. The number of fractional bits is set to 8, allowing 24bit (unsigned) geometry to be represented in 32bit calculations with negligible effects on the reconstruction.
-
David Flynn authored
- calculates the sequence bounding box at the start of encoding (in original coordinates as a decoder may reconstruct it) - signals bounding box in SPS - disables signalling of geometry box origin (always 0)
-
David Flynn authored
The configuration parameters seq_bounding_box_xyz0 and seq_bounding_box_whd allow overriding the automatic derivation of frame (sequence) bounding box, forcing the depth of the geometry tree. NB: seq_bounding_box_xyz0 and seq_bounding_box_whd are specified using unscaled co-ordinates. NB: this patch does not signal these parameters in the SPS.
-
David Flynn authored
Define po-lite option traits to handle PCCVector3<T> as a container to permit using PCCVector3<T> types as command / config parameters.
-
David Flynn authored
-
David Flynn authored
-
David Flynn authored
- signal geom_slice_id / attr_geom_slice_id in geometry / attribute header. - attr_geom_slice_id set to current geom_slice_id to maintain relationship between attribute and geometry. - increment geom_slice_id after each round of encoding. - decoder checks that the attribute payload's attr_geom_slice_id corresponds to the most recently decoded geometry payload.
-
David Flynn authored
Each occupancy bit is contextualised based on the number of occupied (directly) adjacent child nodes in the (x-1), (y-1), and (z-1) neighbour nodes used to generate the neighbour pattern. Three contextualisation states are added: - no adjacent neighbours - one adjacent neigbour (=adjacencyGt0) - two adjacent neighoburs (=adjacencyGt1)
-
David Flynn authored
The neighbour pattern for a node indicates occupied neighbouring nodes. This commit updates the definition of occupancy for the (x-1), (y-1), and (z-1) neighbours to be occupied if the neighbour's adjoining children (ie sharing a face with the current node) are occupied. In the 1-D figure below, at a depth d, the node 'X' has two occupied neighbours 'R' and 'L'. When determining the neighbour pattern of X, the (x-1) state of the neighbour's adjoining child ('r') is used instead. For completeness, nodes marked with '?' are not causally available. d+0: R|X|L d+1: Rr|??|??
-
David Flynn authored
Replaces the existing map update tables (generated from (L*p+s)/(L+1), memory L=10) with an adaptive memory (L=max(5, 1/p, 1/(1-p)) clipped to 200) represented as delta transitions and quantised to 16 entries.
-
David Flynn authored
This commit provides trisoup_node_size_log2 as a replacement for the following HLS syntax variables: - geom_codec_type (redundant wrt. triangle node size derivation) - trisoup_depth (redundant wrt. bounding box) - trisoup_triangle_level (semantics simplified) The following config options have been removed: - geometryCodec (redundant wrt. trisoup_node_size_log2) - triSoupLevel (replaced by trisoup_node_size_log2) - triSoupDepth (unnecessary) - triSoupIntToOrigScale (redundant wrt. positionQuantizationScale)
-
David Flynn authored
-
Using the Rec.709 colour matrix with full range RGB signals, it is necessary to clip the output to avoid exceeding the attribute bitdepth.
-
David Flynn authored
A leaf node by definition contains at least one point. Therefore the single point flag indicates if there are one or two points in the leaf. The remainder should be signalled as numpoints - 2 as per the working draft text.
-
- 14 Nov, 2018 1 commit
-
-
David Flynn authored
-
- 02 Nov, 2018 1 commit
-
-
David Flynn authored
-
- 01 Nov, 2018 2 commits
-
-
Replace the k-d tree based nearest neighbour search with an approximate search based upon the points in Morton order.
-
This commit provides an ability to vary the number of direct neighbours used in the predicting transform. Mode 0 corresponds to the existing averaging, and mode n selects the n-th nearest neighbour for direct prediction. The provided code has been reworked to: - rewrite unary coding to be a little more obvious - tidy the mode decision path - add configuration for max_num_direct_predictors (renamed from MaxNumPredCand) - now counts the number of single predictors, rather than prediction modes.
-
- 31 Oct, 2018 14 commits
-
-
David Flynn authored
This commit provides an implementation of the entropy coding interface using the dirac (schroedinger) arithmetic codec. In order to handle any remaining m-ary symbols, a naïve unary binarisation is employed.
-
David Flynn authored
This commit adds an arithmetic codec interface class that allows a compile time choice of arithmetic codec implementation. Context types are renamed to support compile time selection, and existing support functions that were added to the third-party arithmetic codec are moved to the wrapper.
-
David Flynn authored
This commit provides a method to predict the child occupancy bits of a node based on the node's 26 neighbours. The prediction is used to contextualise coding of each occupancy bit. This tool requires the use of the occupancyAtlas for neighbour lookup. NB: a restriction in the current implementation requires that the atlas size is at most 8³. intra_pred_max_node_size_log2: 6
-
David Flynn authored
This commit provides the ability to contextualise occupancy bits using a prediction. Three context sets cover the not predicted, predicted unoccupied and predicted occupied cases.
-
When restricted neighbour contextualisation is used, this modification introduces an alternative neighbour reduction table. NB: the integrated table has been updated to remove the need to add additional remapping tables. This is a non-normative change.
-
David Flynn authored
Bitwise geometry occupancy coding uses a mapping table to select entropy contexts. This commit employs a dynamic mapping which is updated after each coding operation, replacing the previous static mapping tables. NB: the proposed version used a context with a halving period (max_count) of 64 symbols. However, this conflicts with another adoption (512 symbols), and a wholesale replacement of the arithmetic codec and context model. To resolve the conflict, the existing halving period (128) is used.
-
This commit replaces the m-ary coding of transform coefficient values with a binary coding using the dual-lut coder. Reworked to include a bug fix where the maximum attribute symbol value used by the dual lut coder is 64 rather than 255
-
This commit allows bytewise encoding of occupancy symbols using the dual-lut coder.
-
This commit provides an m-ary entropy coder based on a fixed-size dictionary with periodic updates, a cache of recently used symbols (updated using an LRU eviction policy), and a fallback direct binary coding of any unhandled symbols. NB: the proposed version used a context with a halving period (max_count) of 64 symbols. However, this conflicts with another adoption (512 symbols), and a wholesale replacement of the arithmetic codec and context model. To resolve the conflict, the existing halving period (128) is used.
-
David Flynn authored
This commit provides an encapsulated interface to the fast update option of the o3dgc context models with a statistic halving period of 128 symbols (max_count).
-
David Flynn authored
This commit prepares for the introduction of selectable bitwise and bytewise occupancy coding methods.
-
This commit uses a direct intersection check between the trisoup triangles and point cloud unit vectors. This avoids the need to upsample the triangles with dense sampling and then performing voxelisation.
-
This commit integrates a c++ trisoup codec, replacing the previous matlab implementation. The provided code has been reworked to avoid duplicating code, dead code, and operate with the current HLS.
-
When trisoup was completely independent, trisoup handled lossless geometry coding by using a leaf size of 1 and no triangles. This commit replaces that mode with the better performing octree geometry coder.
-