Voxelization enhancement of TRISOUP triangles
By employing triangle set voxelization and occupancy tree coding techniques, the problem of large-scale storage and transmission of point cloud data is solved, data compression efficiency is improved, and it is suitable for applications such as augmented reality, virtual reality, and mixed reality.
Patent Information
- Application Number
- CN202480019141.X
- Authority / Receiving Office
- CN · China
- Patent Type
- Applications(China)
- Current Assignee / Owner
- Priority Date
- 2023-01-16
- Filing Date
- 2024-01-16
- Publication Date
- 2025-11-14
AI Technical Summary
The large size of point cloud data leads to low transmission and processing efficiency. Existing technologies struggle to effectively compress and decode it, impacting the real-time rendering and storage efficiency of point cloud data in applications such as augmented reality, virtual reality, and mixed reality.
We use a set of triangles as a local model for voxelization, determine voxels by rays and vectors, and encode using occupancy trees and Morton order. We use entropy coding and context-adaptive binary arithmetic coding (CABAC) to optimize the coding process and reduce redundant information.
It improves the compression efficiency of point cloud data, reduces rendering and storage costs, and enables more efficient data transmission and decoding, making it suitable for applications such as augmented reality, virtual reality, and mixed reality.
Smart Images

Figure CN120958487A_ABST
Abstract
Description
[0001] Cross-referencing related applications
[0002] This application claims the benefit of U.S. Provisional Application No. 63 / 439,274, filed January 16, 2023. The entire contents of the application cited above are incorporated herein by reference. Background Technology
[0003] Objects or scenes can be described using volumetric visual data consisting of a series of points. Points can be stored in point cloud format, which includes a set of points in three-dimensional space. Because point cloud data can be quite large, transmitting and processing point cloud data may require data compression schemes specifically designed for the unique characteristics of point cloud data. Summary of the Invention
[0004] The following summary presents a simplified overview of certain features. This summary is not a comprehensive overview and is not intended to identify any important or key elements.
[0005] Modeling the geometry of points can be done using a set of triangles as a local model (e.g., the TriSoup method). Triangles can be voxelized by determining the voxels located within them. For example, rays can be used to determine if a voxel is inside a triangle. During voxelization, occupied voxels may be missed in a model that approximates the number of occupied voxels. To provide continuity for triangles used in this TriSoup modeling method, it may be necessary to quantize the vertices of the triangle. Additional rays can be used to determine voxels at vertices that might be missed due to using a single ray. However, as the number of rays increases, rendering speed may decrease. Voxels within the thickness around a triangle can be determined using a single ray and a vector without correspondingly reducing the rendering speed associated with using multiple rays. Voxels can be determined by adding and / or subtracting vectors from the intersections between the triangle and the ray.
[0006] These and other features and advantages are described in more detail below. Attached Figure Description
[0007] Examples of several embodiments of the various embodiments of this disclosure are described herein with reference to the accompanying drawings.
[0008] Figure 1 An example point cloud coding system is shown.
[0009] Figure 2 An example of Morton order is shown.
[0010] Figure 3 An example scan order is shown.
[0011] Figure 4An example neighborhood of a cuboid with already written occupant bits is shown.
[0012] Figure 5 An example of the dynamically decreasing function DR in an optimal binary writer (OBUF) that can be used to dynamically support instant updates is shown.
[0013] Figure 6 An example method for writing code to the occupancy of a cuboid using dynamic OBUF is shown.
[0014] Figure 7 An example of an occupied cuboid is shown.
[0015] Figure 8A An example cuboid corresponding to a TriSoup node is shown.
[0016] Figure 8B An example refinement of the TriSoup model is shown.
[0017] Figure 9 An example of voxelization is shown.
[0018] Figure 10A and 10B An example of a TriSoup triangle with approximately occupied voxels is shown.
[0019] Figure 11 An example of the coordinates of a point relative to the centroid of the TriSoup triangle is shown.
[0020] Figure 12A and 12B An example of the halo method is shown.
[0021] Figure 13 An example of the halo method for the TriSoup triangle is shown.
[0022] Figure 14 An example of a fine-ray emission method is shown.
[0023] Figure 15 Examples of using the halo method and the fine ray emission method are shown.
[0024] Figure 16 An example of voxelization for enhancing TriSoup triangles is shown.
[0025] Figure 17 An example of voxelization for enhancing TriSoup triangles is shown.
[0026] Figure 18A and 18B An example method for writing code to a point cloud from a TriSoup triangle is shown.
[0027] Figure 19 A block diagram of an example computer system in which instances of the present disclosure may be implemented is shown.
[0028] Figure 20 Example elements of a computing device are shown that can be used to implement any of the various devices described herein. Detailed Implementation
[0029] The accompanying drawings and description provide examples. It should be understood that the examples shown and / or described in the drawings are non-exclusive, and the features shown and described can be practiced in other examples. Examples of operation for point cloud or point cloud sequence encoding or decoding systems are provided. More specifically, the techniques disclosed herein can relate to point cloud compression, such as that used in encoding and / or decoding apparatuses and / or systems.
[0030] At least some visual data can describe an object or scene using a series of points. Each point can contain a position in two-dimensional (x and y) form and one or more optional attributes, such as color. Volumetric visual data can add another positional dimension to these visual data. For example, volumetric visual data can describe an object or scene using a series of points, each point can contain a position in three-dimensional (x, y, and z) form and one or more optional attributes, such as color, reflectivity, timestamp, etc. For example, volumetric visual data can provide a more immersive way to experience visual data than the aforementioned at least some visual data. For example, an object or scene described by volumetric visual data can be viewed from any (or more) angles, while an object or scene described by the aforementioned at least some visual data can typically only be viewed from the angle from which the object or scene is captured or rendered.
[0031] Volumetric visual data can be used in many applications, including augmented reality (AR), virtual reality (VR), and mixed reality (MR). Sparse volumetric visual data can be used in the automotive industry to represent three-dimensional (3D) maps (e.g., cartography) or as input to driver assistance systems. In the case of driver assistance systems, volumetric visual data can often be fed into driving decision-making algorithms. Volumetric visual data can be used to digitally store valuable objects. In applications for the protection of cultural heritage, the goal can be to maintain a representation of objects that may be threatened by natural disasters. For example, statues, vases, and temples can be fully scanned and stored as volumetric visual data with billions of samples. This use case for volumetric visual data may be particularly relevant to valuable objects in locations prone to earthquakes, tsunamis, and typhoons. Volumetric visual data can be in the form of volumetric frames. A volumetric frame can describe an object or scene captured at a specific time instance. Volumetric visual data can also be in the form of a sequence of volumetric frames (referred to as a volumetric sequence or volumetric video). A sequence of volumetric frames can describe an object or scene captured at multiple different time instances.
[0032] Volumetric visual data can be stored in various formats. One format for storing volumetric visual data is a point cloud. A point cloud can contain a collection of points in 3D space. Each point in the point cloud can contain geometric information that indicates the point's position in 3D space. For example, the geometric information can indicate the point's position in 3D space using, for example, three Cartesian coordinates (x, y, and z) and / or spherical coordinates (r, φ, θ) (e.g., if acquired by a rotation sensor). The positions of points in the point cloud can be quantized according to spatial precision. Spatial precision can be the same or different in each dimension. The quantization process can create a grid in 3D space. One or more points residing within each sub-grid volume can be mapped to the sub-grid center coordinates, called voxels. A voxel can be viewed as a 3D extension of pixels corresponding to 2D image grid coordinates. Points in the point cloud can contain one or more types of attribute information. Attribute information can indicate the nature of the point's visual appearance. For example, attribute information can indicate the texture of a point (e.g., color), the material type of the point, the transparency information of the point, the reflectivity information of the point, the surface normal vector of the point, the velocity at the point, the acceleration at the point, a timestamp indicating when the point was captured, or an indication of how the point's modality was captured (e.g., running, walking, or flying). Points in a point cloud can contain light field data in the form of multi-view related texture information. Light field data can be another type of optional attribute information.
[0033] Points in a point cloud can describe objects or scenes. For example, points in a point cloud can describe the external surfaces and / or internal structures of an object or scene. Objects or scenes can be generated synthetically by computer. Objects or scenes can be generated from captures of real-world objects or scenes. Geometric information of real-world objects or scenes can be obtained through 3D scanning and / or photogrammetry. 3D scanning can include different types of scanning, such as laser scanning, structured light scanning, and / or modulated light scanning. 3D scanning can obtain geometric information. 3D scanning can obtain geometric information, for example, by moving one or more laser heads, structured light cameras, and / or modulated light cameras relative to the scanned object or scene. Photogrammetry can obtain geometric information. Photogrammetry can obtain geometric information, for example, by triangulating the same features or points in 2D photographs at different spatial displacements. Point cloud data can be in the form of point cloud frames. Point cloud frames can describe objects or scenes captured at a specific time instance. Point cloud data can be in the form of a sequence of point cloud frames. A sequence of point cloud frames can be referred to as a point cloud sequence or point cloud video. Point cloud frame sequences can describe objects or scenes captured at multiple different time instances.
[0034] In many applications, the data size of a point cloud frame or sequence of point clouds may be too large for storage and / or transmission (e.g., too big). For example, a single point cloud may contain, for example, more than one million points or even billions of points. Each point may contain geometric information as well as one or more optional types of attribute information. The geometric information of each point may contain three Cartesian coordinates (x, y, and z) and / or spherical coordinates (r, φ, θ), each Cartesian and / or spherical coordinate may be represented, for example, using at least 10 bits per component or 30 bits in total. The attribute information of each point may contain textures corresponding to multiple (e.g., three) color components (e.g., R, G, and B color components). Each color component may be represented, for example, using 8-10 bits per component or 24-30 bits in total. For example, a single point may contain at least 54 bits of information, with at least 30 bits of geometric information and at least 24 bits of texture. If a point cloud frame includes one million such points, each point cloud frame may require 54 million bits or 54 megabits to represent. For dynamic point clouds that change over time, at a frame rate of 30 frames per second, a data rate of 1.32 gigabits per second may be required to send (e.g., transmit) the points of a point cloud sequence. The raw representation of the point cloud may require a large amount of data, and the practical deployment of point cloud-based technologies may require compression techniques that enable the storage and distribution of point clouds at a reasonable cost.
[0035] Encoding can be used to compress and / or reduce the data size of point cloud frames or sequences to provide more efficient storage and / or transmission. Decoding can be used to decompress compressed point cloud frames or sequences for display and / or other forms of consumption (e.g., other forms of consumption by machine learning-based devices, neural network-based devices, artificial intelligence-based devices, or other types of consumption by other types of machine-based processing algorithms and / or devices). For example, distribution to and visualization by end users on AR or VR glasses or any other 3D-enabled devices, point cloud compression may be lossy (introducing differences relative to the original data). Lossy compression can allow high compression ratios but may imply a trade-off between compression and visual quality perceived by the end user. Other frameworks, such as those used in medical applications or autonomous driving, may require lossless compression to avoid altering decisions obtained, for example, based on analysis of sent (e.g., transmitted) and decompressed point cloud frames.
[0036] Figure 1An example point cloud coding (e.g., encoding and / or decoding) system 100 is illustrated. The point cloud coding system 100 may include a source device 102, a transmission medium 104, and a destination device 106. The source device 102 may encode a point cloud sequence 108 into a bit stream 110 for more efficient storage and / or transmission. The source device 102 may store the bit stream 110 and / or send (e.g., transmit) the bit stream to the destination device 106 via the transmission medium 104. The destination device 106 may decode the bit stream 110 to display the point cloud sequence 108 or for other forms of consumption (e.g., further analysis, storage, etc.). The destination device 106 may receive the bit stream 110 from the source device 102 via the storage medium or the transmission medium 104. The source device 102 and the destination device 106 may include any number of different devices. Source device 102 and destination device 106 may include, for example, interconnected clusters of computer systems, servers, desktop computers, laptop computers, tablet computers, smartphones, wearable devices, televisions, cameras, video game consoles, set-top boxes, video streaming devices, vehicles (e.g., autonomous vehicles), or head-mounted displays that act as seamless resource pools (also known as computer clouds or cloud computing). Head-mounted displays may allow users to view VR, AR, or MR scenes and adjust the view of the scene, for example, based on the movement of the user's head. Head-mounted displays may be connected (e.g., tethered) to processing devices (e.g., servers, desktop computers, set-top boxes, or video game consoles) or may be completely independent.
[0037] Source device 102 may include point cloud source 112, encoder 114, and output interface 116. For example, to encode point cloud sequence 108 into bitstream 110, source device 102 may include point cloud source 112, encoder 114, and output interface 116. For example, point cloud source 112 may provide (e.g., generate) point cloud sequence 108 from captures of natural scenes and / or synthetically generated scenes. Synthetically generated scenes may be scenes containing computer-generated graphics. Point cloud source 112 may include one or more point cloud capture devices, a point cloud archive containing previously captured natural scenes and / or synthetically generated scenes, a point cloud feed interface for receiving captured natural scenes and / or synthetically generated scenes from a point cloud content provider, and / or a processor for generating synthetic point cloud scenes. Point cloud capture devices may include, for example, one or more laser scanning devices, structured light scanning devices, modulated light scanning devices, and / or passive scanning devices.
[0038] Point cloud sequence 108 may contain a series of point cloud frames 124 (e.g., Figure 1(Example shown). A point cloud frame can describe an object or scene captured at a specific time instance. A point cloud sequence 108 can achieve the impression of motion by continuously presenting point cloud frames 124 of the point cloud sequence 108 using constant or variable time. A point cloud frame can contain a set of points (e.g., voxels) 126 in 3D space. Each point 126 can contain geometric information that can indicate the position of the point in 3D space. The geometric information can use three Cartesian coordinates (x, y, and z) to indicate, for example, the position of the point in 3D space. One or more points 126 can contain one or more types of attribute information. Attribute information can indicate the nature of the visual appearance of the point. For example, attribute information can indicate, for example, the texture of the point (e.g., color), the material type of the point, the transparency information of the point, the reflectivity information of the point, the surface normal of the point, the velocity at the point, the acceleration at the point, a timestamp indicating when the point was captured, a modality indicating how the point was captured (e.g., running, walking, or flying), etc. One or more points 126 can contain light field data, for example, in the form of multi-view related texture information. The light field data can be another type of optional attribute information. The color attribute information of one or more points 126 can include a lightness value and two chromaticity values. The lightness value can represent the brightness of the point (e.g., the lightness component Y). The chromaticity values can represent the blue and red components of the point, separate from the lightness (e.g., chromaticity components Cb and Cr). Other color attribute values can be represented, for example, based on different color schemes (e.g., RGB or monochrome color schemes).
[0039] Encoder 114 can encode point cloud sequence 108 into bitstream 110. To encode point cloud sequence 108, encoder 114 can use one or more lossless or lossy compression techniques to reduce redundant information in point cloud sequence 108. To encode point cloud sequence 108, encoder 114 can use one or more prediction techniques to reduce redundant information in point cloud sequence 108. Redundant information is information that can be predicted at decoder 120 and may not need to be sent (e.g., transmitted) to decoder 120 for accurate decoding of point cloud sequence 108. For example, the Movie Experts Group (MPEG) introduced the Geometry-Based Point Cloud Compression (G-PCC) standard (ISO / IEC Standard 23090-9: Geometry-Based Point Cloud Compression). G-PCC specifies the syntax and semantics of the encoded bitstream for transmission and / or storage of compressed point cloud frames, and the decoder operations for reconstructing compressed point cloud frames from the bitstream. During the standardization of G-PCC, reference software (ISO / IEC Standard 23090-21: Reference Software for G-PCC) was developed to encode the geometric and attribute information of point cloud frames. To encode the geometric information of point cloud frames, the G-PCC reference software encoder can perform voxelization. The G-PCC reference software encoder can perform voxelization, for example, by quantizing the positions of points in the point cloud. Quantizing the positions of points in the point cloud can create a mesh in 3D space. The G-PCC reference software encoder can map points to the center coordinates of the sub-mesh volume (e.g., voxel) where their quantized positions are located. The G-PCC reference software encoder can use occupancy trees to perform geometric analysis to compress the geometric information. The G-PCC reference software encoder can entropy encode the results of the geometric analysis to further compress the geometric information. To encode the attribute information of the point cloud, the G-PCC reference software encoder can use transformation tools such as Region Adaptive Hierarchical Transformation (RAHT), predictive transformation, and / or lifting transformation. Lifting transformation can be built on top of predictive transformation. Lifting transformation can include additional update / lifting steps. The lift transform and the predictive transform can be referred to as predictive / lift transform or predictive lift. Encoder 114 can operate in the same or similar manner as the encoder provided in the G-PCC reference software.
[0040] Output interface 116 can be configured to write and / or store bit stream 110 onto transmission medium 104. Bit stream 110 can be sent (e.g., transmitted) to destination device 106. Alternatively or concurrently, output interface 116 can be configured to send (e.g., transmit), upload, and / or stream bit stream 110 to destination device 106 via transmission medium 104. Output interface 116 may include wired and / or wireless transmitters configured to send (e.g., transmit), upload, and / or stream bit stream 110 according to one or more proprietary, open-source, and / or standardized communication protocols. One or more proprietary, open-source, and / or standardized communication protocols may include, for example, the Digital Video Broadcasting (DVB) standard, the Advanced Television Systems Committee (ATSC) standard, the Integrated Services Digital Broadcasting (ISDB) standard, the Cable Data Service Interface Specification (DOCSIS) standard, the 3rd Generation Partnership Project (3GPP) standard, the Institute of Electrical and Electronics Engineers (IEEE) standard, the Internet Protocol (IP) standard, the Wireless Application Protocol (WAP) standard, and / or any other communication protocol.
[0041] The transmission medium 104 may comprise wireless, wired, and / or computer-readable media. For example, the transmission medium 104 may comprise one or more wires, cables, air interfaces, optical discs, flash memory, and / or magnetic storage. Alternatively or additionally, the transmission medium 104 may comprise one or more networks (e.g., the Internet) or file servers configured to store and / or transmit (e.g., transfer) encoded video data.
[0042] Destination device 106 can decode bitstream 110 into point cloud sequence 108 for display or other forms of consumption. Destination device 106 may include one or more of input interface 118, decoder 120, and / or point cloud display 122. Input interface 118 may be configured to read bitstream 110 stored on transmission medium 104. Bitstream 110 may be stored on transmission medium 104 by source device 102. Alternatively, input interface 118 may be configured to receive, download, and / or stream bitstream 110 from source device 102 via transmission medium 104. Input interface 118 may include wired and / or wireless receivers configured to receive, download, and / or stream bitstream 110 according to one or more proprietary, open-source, standardized communication protocols and / or any other communication protocols. Examples of protocols include the Digital Video Broadcasting (DVB) standard, the Advanced Television Systems Committee (ATSC) standard, the Integrated Services Digital Broadcasting (ISDB) standard, the Cable Data Services Interface Specification (DOCSIS) standard, the 3rd Generation Partnership Project (3GPP) standard, the Institute of Electrical and Electronics Engineers (IEEE) standard, the Internet Protocol (IP) standard, and the Wireless Application Protocol (WAP) standard.
[0043] Decoder 120 can decode the point cloud sequence 108 from the encoded bit stream 110. For example, decoder 120 can operate in the same or similar manner as the decoder provided in the G-PCC reference software. Decoder 120 can decode a point cloud sequence that approximates the point cloud sequence 108. Decoder 120 can decode a point cloud sequence that approximates the point cloud sequence 108 due to, for example, lossy compression of the point cloud sequence 108 by encoder 114 and / or errors introduced into the encoded bit stream 110, for example, in the event of transmission to destination device 106.
[0044] The point cloud display 122 can display the point cloud sequence 108 to a user. The point cloud display 122 may include, for example, a cathode rate tube (CRT) display, a liquid crystal display (LCD), a plasma display, a light-emitting diode (LED) display, a 3D display, a holographic display, a head-mounted display, or any other display device suitable for displaying the point cloud sequence 108.
[0045] Point cloud coding (e.g., encoding / decoding) system 100 is presented by way of example and not limitation. Point cloud coding systems different from and / or modified versions of point cloud coding system 100 may perform the methods and processes described herein. For example, point cloud coding system 100 may include other components and / or arrangements. Point cloud source 112 may be, for example, external to source device 102. Point cloud display device 122 may be, for example, external to destination device 106 or omitted entirely (e.g., if point cloud sequence 108 is intended to be consumed by a machine and / or storage device). Source device 102 may further include, for example, a point cloud decoder. Destination device 106 may include, for example, a point cloud encoder. For example, source device 102 may be configured to further receive an encoded bit stream from destination device 106. Receiving an encoded bit stream from destination device 106 can support bidirectional point cloud transfer between devices.
[0046] As described in this paper, an encoder can quantize the position of points in a point cloud with spatial precision, which can be the same or different in each dimension of the point. The quantization process can create a grid in 3D space. The encoder can map any point residing within each sub-grid volume to the coordinates of the sub-grid center, referred to as a voxel or volume pixel. A voxel can be viewed as a 3D extension of the pixels corresponding to the 2D image grid coordinates.
[0047] An encoder can represent or write to a voxelized point cloud. For example, an encoder can use an occupied tree to represent or write to a voxelized point cloud. For instance, an encoder can subdivide an initial volume or cuboid containing a voxelized point cloud into sub-cuboids. The initial volume or cuboid can be referred to as a bounding box. The cuboid can be, for example, a cube. The encoder can recursively subdivide each sub-cuboid containing at least one point of the point cloud. The encoder may not further subdivide sub-cuboids that do not contain at least one point of the point cloud. A sub-cuboid containing at least one point of the point cloud can be referred to as an occupied sub-cuboid. A sub-cuboid that does not contain at least one point of the point cloud can be referred to as an unoccupied sub-cuboid. The encoder can subdivide an occupied sub-cuboid into, for example, two sub-cuboids (to form a binary tree), four sub-cuboids (to form a quadtree), or eight sub-cuboids (to form an octree). The encoder can subdivide occupied sub-cuboids to obtain additional sub-cuboids. Subcubes can have the same size and shape at a given depth level in the occupancy tree. For example, if the encoder splits the occupied subcube along a plane passing through the middle of the subcube's edge, the subcube can have the same size and shape at a given depth level in the occupancy tree.
[0048] An initial volume or cuboid containing a voxelized point cloud can correspond to the root node of the occupancy tree. Each occupied sub-cuboid split from the initial volume can correspond to a node (of the root node) in the second level of the occupancy tree. Each occupied sub-cuboid split from the occupied sub-cuboids in the second level can correspond to a node in the third level of the occupancy tree (outside the occupied sub-cuboids in the second level from which it splits). For each recursive splitting iteration, the occupancy tree structure can continue to form in this manner until, for example, a maximum depth level of the occupancy tree is reached or each occupied sub-cuboid has a volume corresponding to a voxel.
[0049] Each non-leaf node of the occupancy tree may contain an occupancy word or be associated with an occupancy word representing the occupancy status of the cuboid corresponding to the node. For example, a node in the occupancy tree corresponding to a cuboid split into eight sub-cubicles may contain a 1-byte occupancy word or be associated with a 1-byte occupancy word. Each bit of the 1-byte occupancy word (referred to as an occupancy bit) may represent or indicate the occupancy of a different sub-cubicle among the eight sub-cubicles. Occupied sub-cubicles may each be represented or indicated by a binary "1" in the 1-byte occupancy word. Unoccupied sub-cubicles may each be represented or indicated by a binary "0" in the 1-byte occupancy word. Occupied and unoccupied sub-cubicles may be represented or indicated by the opposite 1-bit binary value in the 1-byte occupancy word (e.g., a binary "0" representing or indicating an occupied sub-cubicle and a binary "1" representing or indicating an unoccupied sub-cubicle).
[0050] Each bit of the occupancy word can represent or indicate the occupancy of a different sub-cube among the eight sub-cubes. For example, the least significant bit of the occupancy word can represent or indicate the occupancy of the first sub-cube among the eight sub-cubes following the so-called Merton order. The second least significant bit of the occupancy word can represent or indicate the occupancy of the second sub-cube among the eight sub-cubes following the Merton order, and so on.
[0051] Figure 2 An example of Morton's order is shown. More specifically, Figure 2 The Morton order of the eight sub-cubes 202-216 split from cuboid 200 is shown. Sub-cubes 202-216 can be labeled, for example, based on their Morton order, where child node 202 is the first in the Morton order and child node 216 is the last. The Morton order of sub-cubes 202-216 can be a local lexicographical order in xyz.
[0052] The geometry of the voxelized point cloud can be represented by the initial volume and occupancy word of the nodes in the occupancy tree, and can be determined from the initial volume and the occupancy word. The encoder can send (e.g., transmit) the initial volume and occupancy word of the nodes in the occupancy tree to the decoder in a bitstream for reconstructing the point cloud. The encoder can entropy encode the occupancy word. The encoder can entropy encode the occupancy word, for example, before sending (e.g., transmitting) the initial volume and occupancy word of the nodes in the occupancy tree. The encoder can encode the occupancy bit of the occupancy word of the node corresponding to the cuboid. The encoder can encode the occupancy bit of the occupancy word of the node corresponding to the cuboid that is adjacent to or spatially close to the cuboid whose occupancy bit is being encoded, for example, based on one or more occupancy bits of the occupancy word of another node corresponding to the cuboid that is adjacent to or spatially close to the cuboid whose occupancy bit is being encoded.
[0053] The encoder and / or decoder can write (e.g., encode and / or decode) the occupancy bits of occupancy words in scan order. Scan order can also be referred to as scanning order. For example, the encoder and / or decoder can scan the occupancy tree in breadth-first order. All occupancy words of nodes at a given depth (e.g., level) within the occupancy tree can be scanned. All occupancy words of nodes at a given depth (e.g., level) within the occupancy tree can be scanned, for example, before scanning the occupancy words of nodes at the next depth (e.g., level). Within a given depth, the encoder and / or decoder can scan the occupancy words of nodes in Morton order. Within a given node, the encoder and / or decoder can further scan the occupancy bits of the node's occupancy words in Morton order.
[0054] Figure 3 An example scan order is shown. Figure 3 An example scan order (e.g., breadth-first order as described herein) is shown for an occupied tree of 300. More specifically, Figure 3 The scan order for the first three example levels of the occupies tree 300 is shown. Figure 3 In the diagram, the cuboid (e.g., cube) 302 corresponding to the root node of the occupying tree 300 can be divided into eight sub-cuboids (e.g., sub-cuboids). Two of the eight sub-cuboids, 304 and 306, may be occupied. The other six sub-cuboids may be unoccupied. Following Merton order, the first eight occupying words (e.g., occW) are... 1,1 The first eight bits of the placeholder can be constructed to represent the root node. 1,1 Each occupancy bit can represent or indicate the occupancy of a sub-cube in eight sub-cubes in Morton order. For example, the first eight-bit occupancy word occW 1,1 The least significant occupant can represent or indicate the occupancy of the first sub-cube in the eight sub-cubes in Morton order. The first eight-bit occupancy word is occW. 1,1 The second least effective occupant can indicate or indicate the occupancy of the second sub-cube in the eight sub-cubes in Morton order, and so on.
[0055] Each of the occupied subcubes (e.g., the two occupied subcubes 304 and 306) can correspond to a node other than the root node in the second level of the occupancy tree 300. Each of the occupied subcubes (e.g., the two occupied subcubes 304 and 306) can be further subdivided into eight subcubes. For example, one subcube 308 from the eight subcubes subdivided from subcube 304 may be occupied, and the other seven subcubes may be unoccupied. Three subcubes 310, 312, and 314 from the eight subcubes subdivided from subcube 306 may be occupied, and the other five subcubes from the eight subcubes subdivided from subcube 306 may be unoccupied. Two second octet occWs can be constructed in this order. 2,1 and occW 2,2 , to represent the occupancy word corresponding to the node of subcube 304 and the occupancy word corresponding to the node of subcube 306, respectively.
[0056] Each of the occupied subcubes (e.g., four occupied subcubes 308, 310, 312, and 314) corresponds to a node in the third level of the occupancy tree 300. Each of the occupied subcubes (e.g., four occupied subcubes 308, 310, 312, and 314) can be further subdivided into eight subcubes, or a total of 32 subcubes. For example, four third-level occupancy words (occW) can be constructed in this order. 3,1 occW 3,2 occW 3,3 and occW 3,4 , respectively representing the occupancy word corresponding to the node of sub-cube 308, the occupancy word corresponding to the node of sub-cube 310, the occupancy word corresponding to the node of sub-cube 312 and the occupancy word corresponding to the node of sub-cube 314.
[0057] The occupants of the example occupant tree 300 can be entropy-written coded (e.g., entropy-encoded by the encoder and / or entropy-decoded by the decoder) following, for example, the scan order discussed herein (e.g., Morton order). The occupants of the example occupant tree 300 can be entropy-written coded (e.g., entropy-encoded by the encoder and / or entropy-decoded by the decoder) into a sequence of seven occupants, for example, following the scan order discussed herein. 1,1 to occW 3,4 The scanning order discussed in this paper can be a breadth-first scanning order. For example, if the occupied word of the current child node belonging to the current parent node is being entropy-coded, then the occupied words of all nodes with the same depth (e.g., level) as the current parent node may have already been entropy-coded. For example, the occupied words of all nodes with the same depth (e.g., level) as the current child node and with a lower Morton order than the current child node may also have already been entropy-coded. A portion of the already-coded occupied words can be used to entropy-code the occupied word of the current child node. The already-coded occupied words of adjacent parent and child nodes can be used, for example, to entropy-code the occupied word of the current child node. For example, if a specific occupied bit of the occupied word of the current child node is being coded (e.g., entropy-coded), then the occupied bits of occupied words with a lower Morton order than that specific occupied bit may have already been entropy-coded and can be used to code the occupied bits of the occupied word of the current child node.
[0058] Figure 4 An example neighborhood of a cuboid is shown for entropy-coding of the occupancy of a sub-cuboid. More specifically, Figure 4 An example neighborhood of a cuboid with already coded occupants is shown. The neighborhood of a cuboid with already coded occupants can be used for entropy coding of the occupants of the current child cuboid 400. This can be based, for example, on the representation as discussed herein. Figure 4The scanning order of the occupancy tree of the cuboid geometry determines the neighborhood of the cuboid with the occupant bit already written. The neighborhood of a cuboid, i.e., the neighborhood of the current child cuboid, can include one or more of the following: cuboids adjacent to the current child cuboid, cuboids sharing vertices with the current child cuboid, cuboids sharing edges with the current child cuboid, cuboids sharing faces with the current child cuboid, parent cuboids adjacent to the current child cuboid, parent cuboids sharing vertices with the current child cuboid, parent cuboids sharing edges with the current child cuboid, parent cuboids sharing faces with the current child cuboid, parent cuboids adjacent to the current parent cuboid, parent cuboids sharing vertices with the current parent cuboid, parent cuboids sharing edges with the current parent cuboid, parent cuboids sharing faces with the current parent cuboid, etc. Figure 4 As shown, the current child cuboid 400 can belong to the current parent cuboid 402. Following the scanning order of the occupancy words and occupancy bits of the occupancy tree nodes, the occupancy bits of the four child cuboids 404, 406, 408, and 410 belonging to the same current parent cuboid 402 may have already been written. The occupancy bits of the previous parent cuboid's child cuboid 412 may have already been written. The occupancy bits of the parent cuboid 414 may have already been written, while the occupancy bits of its child cuboids have not yet been written. The already written occupancy bits of cuboids 404, 406, 408, 410, 412, and 414 can be used to write the occupancy bits of the current child cuboid 400.
[0059] The number (e.g., quantity) of possible occupancy configurations (e.g., a set of one or more occupancy words and / or occupancy bits) in the neighborhood of the current sub-cuboid can be 2. N , where N is the number (e.g., quantity) of cuboids in the neighborhood of the current child cuboid that have already written occupant bits. The neighborhood of the current child cuboid can contain dozens of cuboids. The neighborhood of the current child cuboid (e.g., dozens of cuboids) can contain 26 neighboring parent cuboids that share faces, edges, and / or vertices with the parent cuboid of the current child cuboid, and several neighboring child cuboids that share faces, edges, and / or vertices with the current child cuboid and have already written occupant bits. The occupant configuration of the neighborhood of the current child cuboid can have billions of possible occupant configurations, or even be limited to a subset of neighboring cuboids, making its direct use impractical. Encoders and / or decoders can use the occupant configuration of the neighborhood of the current child cuboid to select a context (e.g., a probabilistic model) from the context set for a binary entropy writer (e.g., a binary arithmetic writer) that can write occupant bits to the current child cuboid. Context-based binary entropy coding can be similar to the context-adaptive binary arithmetic coder (CABAC) used in MPEG-H Part 2 (also known as High Efficiency Video Coding (HEVC)).
[0060] The encoder and / or decoder can use several methods to reduce the occupancy configuration of the neighborhood of the current child cuboid being coded to an actual number (e.g., quantity) of reduced occupancy configurations. This includes the six neighboring parent cuboids sharing a face with the current child cuboid. 6 Alternatively, 64 occupied configurations can be reduced to 9 occupied configurations. This reduction can be achieved by using geometric invariants. It can be reduced from 26 neighboring parent cuboids. 26 Each occupancy configuration yields the occupancy score of the current sub-cube. The score can be further reduced to a ternary occupancy prediction (e.g., "predicted occupancy", "uncertain", or "predicted unoccupancy") by using a score threshold. The individual occupancy of these sub-cubes can be replaced by the number of occupied neighboring sub-cubes (e.g., quantity) and the number of unoccupied neighboring sub-cubes (e.g., quantity).
[0061] Using / employing one or more of the methods described herein, the encoder and / or decoder can reduce the number (e.g., quantity) of possible occupancy configurations of the current subcube's neighborhood to a more manageable number (e.g., thousands). It has been observed that instead of directly associating the reduced number (e.g., quantity) of contexts (e.g., probabilistic models) with the reduced occupancy configuration, another mechanism, namely the Optimal Binary Writer (OBUF) that supports on-the-fly updates, can be used. The encoder and / or decoder can implement the OBUF to limit the number (e.g., quantity) of contexts to a lower number (e.g., 32 contexts).
[0062] OBUF can use a finite number (e.g., 32) of contexts (e.g., probabilistic models). The number of contexts in OBUF (e.g., quantity) can be a fixed number (e.g., fixed quantity). Contexts used by OBUF can be sorted, indexed by context indices (e.g., context indices in the range of 0 to 31), and associated from the lowest virtual probability to the highest virtual probability to write code "1". A lookup table (LUT) for context indices can be initialized at the start of the point cloud coding process. For example, the LUT can initially point to a context with a median virtual probability (e.g., with context index 15) to write code "1" for all inputs. The LUT can initially point to a context with a median virtual probability to write code "1" for all inputs in a finite number (e.g., quantity) of contexts. This LUT can take the occupancy configuration of the neighborhood of the current subcube as input and output the context index associated with the occupancy configuration. The LUT can have as many entries as the reduced occupancy configuration (e.g., approximately several thousand entries). The write-code of the current child cuboid's occupant bit can include the following steps: determining the reduced occupancy configuration of the current child node; obtaining a context index by using the reduced occupancy configuration as an entry in the LUT; writing the current child cuboid's occupant bit using the context pointed to (e.g., indicated by) the context index; and updating the LUT entry corresponding to the reduced occupancy configuration, for example, based on the value of the written-code occupant bit of the current child cuboid. For example, if a binary "0" (e.g., indicating that the current child cuboid is not occupied) is being written, the LUT entry can be reduced to a lower context index value. For example, if a binary "1" (e.g., indicating that the current child cuboid is occupied) is being written, the LUT entry can be increased to a higher context index value. The context index update process can, for example, be based on a theoretical model of the optimal distribution of virtual probabilities associated with a finite number (e.g., quantity) of contexts. This virtual probability can be fixed by the model and can differ from the internal probabilities of the context that may evolve, for example, when the write-code of a data bit occurs. The evolution of the internal context can follow a well-known process similar to that in CABAC.
[0063] The encoder and / or decoder can implement a “dynamic OBUF” scheme. For example, compared to a general OBUF, a “dynamic OBUF” scheme allows the encoder and / or decoder to handle a much larger number (e.g., quantity) of occupancy configurations in the neighborhood of the current sub-cube. The use of a larger number (e.g., quantity) of occupancy configurations in the neighborhood of the current sub-cube can result in improved compression capabilities while keeping complexity within reasonable limits. By using an occupancy tree compressed by OBUF, the encoder and / or decoder can achieve lossless compression performance as good as 1 bit / point (bpp) for writing geometry to dense point clouds. The encoder and / or decoder can implement dynamic OBUF to potentially further reduce the bit rate by more than 25%, to 0.7 bpp.
[0064] OBUF may not take into account the various reduced occupancy configurations of the current child cuboid's neighborhood as input, and may potentially lead to a loss of useful relevance. With OBUF, the size of the LUT with the context index can be increased to handle more diverse occupancy configurations of the current child cuboid's neighborhood as input. Due to this increase, statistics can be diluted, and compression performance may deteriorate. For example, if the LUT has millions of entries and the point cloud has hundreds of thousands of points, most entries may never be accessed (e.g., lookup, access, etc.). Many entries may only be accessed a few times, and their associated context indexes may not be updated enough to reflect any meaningful correlation between the current child cuboid's occupancy configuration value and occupancy probability. Dynamic OBUF can be implemented to mitigate the dilution of statistics due to the increase in the number (e.g., quantity) of occupancy configurations of the current child cuboid's neighborhood. This mitigation can be performed through a "dynamic reduction" of the occupancy configuration in dynamic OBUF.
[0065] Dynamic OBUF can, for example, add an extra step to reduce the occupancy configuration of the current child cuboid's neighborhood before using a context-indexed LUT. This step can be called dynamic reduction because it evolves, for example, based on the progress of writing code to the point cloud, or more precisely, based on the occupancy configuration that has already been visited (e.g., looked up in the LUT).
[0066] As discussed in this paper, there may be many possible occupancy configurations potentially involving the neighborhood of the current sub-cube, but only a subset can be accessed if a write-code of the point cloud occurs. This subset can characterize the type of point cloud. For example, most accessed occupancy configurations may represent the occupied neighboring cuboids of the current sub-cube, e.g., if an AR or VR dense point cloud is being written-coded. On the other hand, for example, if a sparse point cloud acquired by a sensor is being written-coded, most accessed occupancy configurations may only represent a few occupied neighboring cuboids of the current sub-cube. The effect of dynamic reduction can be, for example, to obtain a more accurate correlation by simultaneously shelving (e.g., actively reducing) other occupancy configurations accessed much less frequently based on the most accessed occupancy configuration. Dynamic reduction can be updated on an ad-hoc basis. For example, if a write-code of occupancy data occurs, dynamic reduction can be updated on an ad-hoc basis, e.g., after each access to an occupancy configuration (e.g., a lookup in a LUT).
[0067] Figure 5 An example of the dynamic decrease function DR that can be used in a dynamic OBUF is shown. The dynamic decrease function DR can be used by masking the bit β of configuration 500. j To obtain,
[0068] β = β1 … β K
[0069] The occupancy configuration consists of K bits. For example, if the occupancy configuration is accessed (e.g., looked up in the LUT) a certain number of times (e.g., a quantity), the mask size can be reduced. The initial dynamic reduction function DR... 0 It can mask all bits of all occupied configurations, such that for all occupied configurations β, it is a constant function DR. 0 (β) = 0. The dynamically decreasing function can be derived from the function DR. n Evolved to the update function DR n+1 The dynamic decrement function can, for example, be applied after each write operation of the occupying bit from the function DR. n Evolved to the update function DR n+1 A function can be defined as follows:
[0070] β' = DR n (β) = β1 … β kn(β)
[0071] Where k n (β) 510 is the number of unmasked bits (e.g., quantity). DR 0 The initialization can correspond to k0(β)=0, and the natural evolution of the decreasing function toward finer statistics can cause an increase in the number (e.g., quantity) of unmasked bits, k n (β) ≤ k n+1(β). The dynamic reduction function can be completely determined by all k occupying the configuration β. n The value is determined.
[0072] For all dynamically decreasing occupancy configurations β' = DR n Access to the occupied configuration (β), such as an instance lookup in a LUT, can be tracked by the variable NV(β'). For example, in a LUT based on the occupied configuration β... V After each instance of writing to the placeholder bit, the corresponding access count (e.g., number) NV(β) V ') can be increased by one. If this number of visits (e.g., quantity) NV(β) V ') greater than the threshold th V ,
[0073] NV(β V ') > th V
[0074] Then for dynamically decreasing to β V 'All occupied configurations β, the number (e.g., quantity) of unmasked bits k n (β) can be increased by one. This corresponds to using two new dynamically decreasing occupancy configurations β. 0 'and β 1 'Replace the dynamically decreasing occupied configuration β' V The two new dynamically reduced occupancy configurations are defined as follows:
[0075] β 0 ' = β V '0 = β V 1 … β V kn(β) 0 and β 1 ' = β V '1 = β V 1 … β V kn(β) 1.
[0076] In other words, for all occupied configurations β, the number (e.g., quantity) of unmasked bits has increased by one, k n+1 (β) =k n (β) + 1, such that DR n (β) = β V The access count (e.g., quantity) of two new dynamically decreasing occupied configurations can be initialized to zero.
[0077] NV(β 0 ') = NV(β 1 ') = 0. (I)
[0078] At the start of writing code, the initial dynamic decrease function DR 0 The initial number of visits (e.g., quantity) can be set to
[0079] NV(DR 0 (β)) = NV(0) = 0,
[0080] Furthermore, the evolution of NV with dynamically decreasing occupancy configuration can be fully defined.
[0081] The corresponding LUT entry LUT[β] V '] can be derived from β V 'Two new entries LUT[β] initialized with the associated writer index 0 '] and LUT[β] 1 Replacement. For example, if the dynamically decreasing occupancy configuration β V 'By two new dynamically reduced occupied configurations β 0 'and β 1 'Replace, then the corresponding LUT entry LUT[β] V '] can be derived from β V 'Two new entries LUT[β] initialized with the associated writer index 0 '] and LUT[β] 1 ']replace,
[0082] LUT[β 0 '] = LUT[β 1 '] = LUT[β V '],(II)
[0083] And then it evolves independently. The evolution of the LUT with dynamically decreasing occupancy configuration writer index can be fully defined.
[0084] Decrease function DR n It can be formed by a series of growing binary trees T n Model 520, whose leaf node 530 is a reduced-occupancy configuration β' = DR n (β). The initial tree can be 0 = DR 0 (β) The associated single root node. This will be dynamically reduced to β. V Replace with β 0 'and β 1 'Can correspond to from β V 'Associated leaf node growth tree T' n For example, by using β 0 'and β 1 Two new nodes associated with each other are attached to the leaf node. Tree T n+1This can be obtained through such growth. The LUTs for the number of visits (e.g., quantity) NV and the context index can be defined on the leaf nodes and evolve as the tree grows via equations (I) and (II).
[0085] The practical implementation of dynamic OBUF can be achieved by storing an array NV[β'] and a LUT[β'] of context indexes, as well as a tree T. n 520 is used for this. An alternative to storing the tree could be an array k storing the number (e.g., quantity) of the unmasked bits. n [β]510.
[0086] One limitation of implementing dynamic OBUF is its memory footprint. In some applications, millions of occupied configurations can be handled, resulting in approximately 20-bit beta. i The entries β constitute the configuration for the decrease function DR. Each bit β i It can correspond to the occupancy state of the adjacent cuboids of the current sub-cube or the set of adjacent cuboids of the current sub-cube.
[0087] The higher (e.g., higher effective) bit β i (For example, β0, β1, etc.) can be the first bit without masking. Higher (e.g., higher-active) bits β i (For example, β0, β1, etc.) could be, for example, the first unmasked bit during the evolution of the dynamically decreasing function DR. Place bit β... i The order of neighbor-based information in compression can affect compression performance. Neighbor information can be ordered from highest (e.g., highest) priority to lowest priority, and then placed into bit β in this order from highest weight to lowest weight. i In this context, priority is ranked from most important to least important: occupancy of adjacent child cuboids, followed by adjacent child cuboids, then adjacent parent cuboids, then non-adjacent child nodes, and finally non-adjacent parent nodes. A neighboring node sharing a face with the current child node can have a higher priority than a neighboring node sharing an edge (but not a face) with the current child node. Similarly, a neighboring node sharing an edge with the current child node can have a higher priority than a neighboring node sharing only a vertex with the current child node.
[0088] Figure 6 An example method for writing code to the occupancy of a cuboid using dynamic OBUF is shown. More specifically, Figure 6 An example method for writing the occupant bits of the current child cuboid using dynamic OBUF is shown. Figure 6 One or more steps can be performed by an encoder and / or decoder (e.g., Figure 1The encoder 114 and / or decoder 120 in the flowchart are executed. All or part of the flowchart can be executed by a writer (e.g., Figure 1 (encoder 114 and / or decoder 120 in the middle) Figure 20 The example computer system 2000 in Figure 2000 and / or the example computing device 2130 in Figure 21 are used to implement this.
[0089] At step 602, the occupancy configuration of the current sub-cuboid (e.g., occupancy configuration β) can be determined. The occupancy configuration of the current sub-cuboid (e.g., occupancy configuration β) can be determined, for example, based on the occupancy bits of already coded cuboids in the neighborhood of the current sub-cuboid. At step 604, the occupancy configuration (e.g., occupancy configuration β) can be dynamically reduced. For example, a dynamic reduction function DR can be used. n This allows for dynamic reduction of the occupancy configuration. For example, the occupancy configuration β can be dynamically reduced to a reduced occupancy configuration β' = DR. n (β). At step 606, the context index can be looked up in a lookup table (LUT), for example. For example, the encoder and / or decoder can look up the context index LUT[β'] in the LUT of the dynamic OBUF. At step 608, a context (e.g., a probabilistic model) can be selected. For example, the context pointed to by the context index (e.g., a probabilistic model) can be selected. At step 610, the occupancy of the current sub-cube can be entropy-coded. For example, the occupancy of the current sub-cube can be entropy-coded (e.g., arithmetic coding) based on the context. The occupancy of the current sub-cube can be coded based on the occupancy of the adjacent cuboids that have already been coded.
[0090] although Figure 6 Not shown, but the encoder and / or decoder can update the reduction function and / or update the context index. For example, the encoder and / or decoder can update the reduction function DR. n Updated to DR n+1 And / or, for example, update the context index LUT[β'] based on the current child cuboid's occupancy. Figure 6 The method can be based on the scanning order, as discussed in this article. Figure 3 The scanning order discussed repeats for the additional or all child cuboids of the parent cuboid corresponding to the node occupying the tree.
[0091] Occupation tree is typically a lossless compression technique. Occupation tree can be adapted to provide lossy compression, for example, by modifying the point cloud on the encoder side (e.g., downsampling, removing points, moving points, etc.). Lossy compression performance can be weak. For dense point clouds, lossy compression can be a useful lossless compression technique.
[0092] One approach to lossy compression of point cloud geometry could be to set the maximum depth of the occupancy tree to stop at a larger volume size (e.g., an NxNxN cuboid (e.g., a cube), where N > 1) instead of reaching the minimum volume size of a single voxel. The geometry of points belonging to each occupied leaf node associated with this larger volume can then be modeled. This approach may be particularly well-suited for dense and smooth point clouds that can be locally modeled using smoothing functions such as planes or polynomials. The coding cost can be reduced to the cost of the occupancy tree plus the cost of the local model within each occupied leaf node.
[0093] A scheme for modeling the geometry of points belonging to each occupied leaf node associated with a volume larger than one voxel can use a set of triangles as a local model. This scheme can be called a "TriSoup" scheme. TriSoup is short for "triangle soup" because the connections between triangles may not be part of the model. An occupied leaf node corresponding to a cuboid with a volume larger than one voxel in the tree can be called a TriSoup node. An edge belonging to at least one cuboid corresponding to a TriSoup node can be called a TriSoup edge. A TriSoup node can contain an existence flag (s) for each TriSoup edge of its corresponding occupied cuboid. k The existence flag of a TriSoup edge (s) k ) can indicate the TriSoup vertex (V k Does a vertex exist on a TriSoup edge? At most one TriSoup vertex (V) exists. k A vertex (V) can exist on a TriSoup edge. For each vertex (V) existing on a TriSoup edge of an occupied cuboid... k The TriSoup node corresponding to the occupied cuboid can further contain vertices (V). k ) along the position of TriSoup edge (p k ).
[0094] In addition to the occupation word of the occupation tree, the encoder can also entropy encode the TriSoup vertex presence flag and position for each TriSoup edge belonging to the TriSoup node of the occupation tree. Similarly, in addition to the occupation word of the occupation tree, the decoder can also entropy decode the TriSoup vertex presence flag and position for each TriSoup edge and the vertices along the corresponding TriSoup edges belonging to the TriSoup nodes of the occupation tree.
[0095] Figure 7 An example of an occupied cuboid (e.g., cube) 700 is shown. More specifically, Figure 7An example of an occupied cuboid (e.g., a cube) 700 of size NxNxN (where N > 1) corresponding to a TriSoup node in the occupied tree is shown. The occupied cuboid 700 may contain edges (e.g., TriSoup edges 710-721). The TriSoup node corresponding to the occupied cuboid 700 may contain an existence flag (s) for each edge (e.g., each TriSoup edge in TriSoup edges 710-721). k For example, the presence flag of TriSoup edge 714 can indicate that TriSoup vertex V1 exists on TriSoup edge 714. The presence flag of TriSoup edge 715 can indicate that TriSoup vertex V2 exists on TriSoup edge 715. The presence flag of TriSoup edge 716 can indicate that TriSoup vertex V3 exists on TriSoup edge 716. The presence flag of TriSoup edge 717 can indicate that TriSoup vertex V4 exists on TriSoup edge 717. The presence flags of the remaining TriSoup edges can each indicate that no TriSoup vertex exists on its corresponding TriSoup edge. A TriSoup node corresponding to the occupied cuboid 700 can contain the position of each TriSoup vertex that exists along one of its TriSoup edges 710-721. More specifically, a TriSoup node corresponding to the occupied cuboid 700 can contain the position p1 of TriSoup vertex V1, the position p2 of TriSoup vertex V2, the position p3 of TriSoup vertex V3, and the position p4 of TriSoup vertex V4. TriSoup vertices can be shared among TriSoup nodes along common TriSoup edges.
[0096] The existence of the current TriSoup edge can be flagged (s) k ) and (in the presence of signs (s k (The location (p) can indicate the existence of a vertex) k Entropy coding is performed. Existence flag (s) k ) and location (p k The information can be referred to individually or collectively as vertex information or TriSoup vertex information. For example, the existence flag (s) of the current TriSoup edge can be determined based on the existence flags and positions of the existing TriSoup vertices of the TriSoup edges adjacent to the current TriSoup edge. k ) and (in the presence of signs (s k (indicating the presence of a vertex) position (p) k Entropy coding is performed on the current TriSoup edge. Alternatively, the existence flag (s) of the current TriSoup edge can be added separately or alternatively. k ) and (in the presence of signs (sk (The location (p) can indicate the existence of a vertex) k (e.g., indicating the position of the vertex along which the edge is located) is entropy-coded. The presence flag of the current TriSoup edge (s) k ) and location (p k Entropy coding can be performed alternatively, for example, based on the occupancy of cuboids adjacent to the current TriSoup edge. Similar to the entropy coding of occupancy bits in an occupancy tree, the configuration β of the neighborhood of the current TriSoup edge can be obtained. TS (Also known as neighborhood configuration β) TS ), and for example, by using TriSoup's dynamic OBUF scheme to dynamically reduce it to a reduced configuration β. TS ' = DR n (β TS ). Context index LUT[β TS The information can be obtained from the OBUF LUT. At least a portion of the vertex information for the current TriSoup edge can be entropy-coded using the context pointed to by the context index (e.g., a probabilistic model).
[0097] The position of the TriSoup vertex along its TriSoup edge (p k (If it exists) can be binarized. The position of the TriSoup vertex along its TriSoup edge (p k (If present) can be binarized, for example, by using a binary entropy writer to entropy-code at least a portion of the vertex information of the current TriSoup edge. The number of bits (e.g., quantity) N can be set. b To quantize the TriSoup vertex positions (p) along a TriSoup edge of length N. k A TriSoup edge of length N can be uniformly divided into 2. Nb Quantization interval. By doing so, the TriSoup vertex position (p k (This can be written separately by N using a dynamic OBUF scheme) b p k j , j=1, …, N b ) and corresponding to the existence flag (s) k The bit representation of ). Neighborhood configuration β TS、 OBUF decrease function DR n The context index can depend on the written code points (e.g., the presence flag). k ), highest position (p) k1 ), second highest position (p) k2The written code points (e.g., presence flags) of the code (s) k ), highest position (p) k 1 ), second highest position (p) k 2 Properties, characteristics, and / or attributes of vertex information. In reality, there may be several dynamic OBUF schemes, each dedicated to specific bits of vertex information (e.g., presence flags). k ) or position (p) k j )).
[0098] Figure 8(a) shows an example cuboid (e.g., cube) 800 corresponding to TriSoup nodes. The cuboid 800 can correspond to a TriSoup vertices V with a number of K vertices. k The TriSoup node. Within the cuboid 800, the TriSoup triangle can be formed by the TriSoup vertex V. k Construction. For example, if there are at least three (K≥3) TriSoup vertices on the TriSoup edges of a cuboid 800, then a TriSoup triangle can be constructed from TriSoup vertex V. k Construction. For example, regarding Figure 8(a), there can be four TriSoup vertices, and a TriSoup triangle can be constructed. The TriSoup triangle can be constructed around the centroid vertex C, which is defined as the TriSoup vertex V. k The mean of the values. The primary direction can be determined, and then the vertex V can be adjusted by rotating around this direction. k Sort the data and construct the following K TriSoup triangles: V1V2C, V2V3C, ..., V K V1C. For example, if a triangle is projected along a principal direction, the principal direction can be selected from three directions that are respectively parallel to the axes of 3D space to increase or maximize the 2D surface of the triangle. By doing so, the principal direction can be slightly perpendicular to the local surface defined by the points of the point cloud belonging to the TriSoup node.
[0099] Figure 8(b) shows an example refinement of the TriSoup model. The TriSoup model can be refined by writing the centroid residual values. Centroid residual value C res It can be written into the bitstream. Centroid residual value C res It can be written to a bitstream, for example, to use C+C++. res Instead of using C as the pivot vertex of the triangle, it is done by using C+C. res As the pivot vertex of the triangle, vertex C+C resPoints can be closer to the point cloud than the centroid C, which can reduce reconstruction error and thus reduce distortion, but at the cost of writing more code to C. res The required bit rate will increase slightly.
[0100] Figure 9 An example of voxelization is shown. Voxelization can refer to reconstructing a decoded point cloud from a set of TriSoup triangles. Voxelization can be performed by ray tracing each triangle individually. For example, voxelization can be performed by ray tracing each triangle individually before removing duplicate points between voxelized triangles. Figure 9 As shown, ray 900 can be emitted parallel to one of the three axes in 3D space. Ray 900 can originate from integer coordinates P. 开始 The emission begins at point 905 (e.g., the origin). The intersection point P of ray 900 and the TriSoup triangle 901 belonging to the cuboid (e.g., cube) 902 corresponding to the TriSoup node can be rounded. int 904 (if it exists) to obtain the decoded point. This intersection point P can be found, for example, using the Möller-Trumbore algorithm. int .
[0101] TriSoup vertices of TriSoup nodes may need to be quantized to certain acceptable vertex positions to ensure continuity in triangle-based modeling between TriSoup nodes. Therefore, TriSoup modeling approximating occupied voxels within a TriSoup node may not match occupied voxels determined to be located within TriSoup triangles with quantized TriSoup vertices. For example, if voxelization of TriSoup triangles occurs, some voxels may be missed. As described in this paper, techniques including the “halo” method and the “fine ray emission” method have been introduced to enhance the voxelization process, thereby attempting to improve voxel reconnection between triangles.
[0102] Both the halo method and the fine ray emission method attempt to increase the possible intersections between the emitted rays and the triangle in order to “recapture” missed voxels resulting from quantizing the vertices of the TriSoup triangle. While the halo method does not significantly increase complexity and processing cost, the fine ray emission method can significantly increase processing cost because it additionally emits multiple rays at non-integer coordinates (called fine rays) for each ray at integer coordinates to increase the possible intersections between the rays and the TriSoup triangle. Implementing the fine ray emission method not only significantly increases processing cost, but it also overlaps with the halo method and may recapture some of the same missed voxels, which may reduce its effectiveness. Examples of this disclosure include enhancing the voxelization process by adding one or more additional points near each defined point (e.g., intersection) of the TriSoup triangle and quantizing or voxelizing said one or more additional points, as well as the defined points of the TriSoup triangle. The one or more additional points may extend from the defined points, for example, in a direction not aligned with the plane of the TriSoup triangle. The computational intensity of this quantization process is lower than that of the fine ray emission method, and the quantization of these one or more additional points can recapture voxels that may not have been recognized by the halo method, and thus can be implemented using the halo method to enhance voxelization.
[0103] Figure 10A An example of a TriSoup triangle with approximately occupied voxels is shown. More specifically, Figure 10A An example of the TriSoup method is shown, which approximates a triangle (e.g., triangle 1020) within a cuboid corresponding to a TriSoup node (e.g., occupied voxel 1030). For ease of illustration, as... Figure 10A As shown, the boundary 1000 of the cuboid associated with the TriSoup node is depicted in two dimensions (2D) rather than three dimensions (3D), and is shown to be 8×8 in size. The cuboid and the associated TriSoup node can have a size of 8×8×8 (represented as 8×8 in Figure 10(a)) and can cover points or voxels with integer coordinates between 0 and 7 (e.g., voxel 1010). By constructing the TriSoup node, the boundary 1000 of the TriSoup node can be located between voxels (e.g., at coordinates -0.5 and 7.5). The TriSoup method can approximate the occupied voxel 1030 of the point cloud, for example, by using at least one triangle 1020.
[0104] Figure 10B An example of a TriSoup triangle with approximately occupied voxels is shown. More specifically, Figure 10B An approximation for Figure 10AThe example shown is an instance of the TriSoup method for triangles defined by a cuboid (e.g., triangle 1050). To ensure continuity of triangle-based modeling between TriSoup nodes, Figure 10A The approximate triangle 1020 shown can be modeled using a TriSoup triangle 1050 having at least one vertex V1, V2, and / or V3 belonging to the node boundary 1000 of the cuboid. For example, the vertices V1, V2, and / or V3 on the node boundary 1000 of the TriSoup triangle 1050 can be modeled using a quantization function. i Quantization is performed along certain acceptable vertex positions 1040 of the cuboid's edges (e.g., belonging to a discrete set of dequantized positions). Modeling the TriSoup triangle 1050 may result in some voxel omissions. For example, modeling the TriSoup triangle 1050 may result in voxel omissions, such as in... Figure 10A Voxel 1060b exists and is shown as voxel 1060a. Missing voxels (e.g., voxel 1060b) are not covered by the intersection of the light rays and the TriSoup triangle 1050, but can still correspond to points in the original point cloud.
[0105] A halo method has been introduced, for example, to capture a portion of these mixed voxels. The halo method can be based on the Möller-Trumbore algorithm, which can be used to voxelize TriSoup triangles via ray tracing, as described in this paper.
[0106] Figure 11 An example of the coordinates of a point relative to the centroid of the TriSoup triangle is shown. More specifically, Figure 11 An example of the barycentric coordinates (u, v, w) of point 1102 (e.g., P) relative to TriSoup triangle 1100 is shown. The Möller-Trumbore algorithm uses these barycentric coordinates to determine whether a ray intersects TriSoup triangle 1100. Figure 11 The vertices of the example TriSoup triangle 1100 shown are labeled A, B, and C. The Möller-Trumbore algorithm can determine the intersection point between the ray and the plane defined by (or passing through) vertices A, B, and C. The intersection point between the ray and the plane can be determined as point 1102, and can be uniquely represented, for example, as the sum of the three vertices:
[0107] P = uA + vB + wC
[0108] The condition is that u + v + w = 1. The convex hull of the three vertices A, B, and C (i.e., the TriSoup triangle 1100) can be equal to the set of all points P such that the barycentric coordinates u, v, and w can each be greater than or equal to zero:
[0109] 0 ≤ u, v, w
[0110] Each of the barycentric coordinates u, v, and w determined by the Möller-Trumbore algorithm can be compared to 0, for example, to determine whether a ray intersects TriSoup triangle 1100. For instance, if at least one of the barycentric coordinates is less than 0, it can be determined that the ray does not intersect TriSoup triangle 1100.
[0111] Figure 12A and 12B An example of the halo method is shown. More specifically, Figure 12A and 12B An example of the halo method is shown, where one or more inequalities of the barycentric coordinates u, v, and w are relaxed to allow identification of points within the “halo” of a TriSoup triangle (e.g., triangle 1200). Figure 12A As shown, for a fixed positive parameter ε, relaxing the inequality 0 ≤ u to the less restrictive inequality -ε ≤ u can add a halo 1210 along the side BC of TriSoup triangle 1200. This relaxation of the inequality can allow the determination and / or identification of one or more points (e.g., point 1212) within halo 1210 but outside TriSoup triangle 1200. Figure 12B As shown, relaxing all three inequalities 0 ≤ u, v, w to the less restrictive inequalities -ε ≤ u, v, w can produce a halo 1220 around the perimeter of the TriSoup triangle 1200. The relaxation of all three inequalities can allow for the determination and / or identification of points (e.g., point 1222).
[0112] In the Möller-Trumbore algorithm, the intersection of a ray with the plane containing the TriSoup triangle can be determined based on calculating the values of u, v, and w. For example, the intersection can be determined to be within the TriSoup triangle (e.g., inside or on the sides of the TriSoup triangle) based on verifying that each of the barycentric coordinates u, v, and w is greater than or equal to 0 (e.g., 0 ≤ u, v, w). Otherwise, the intersection can be determined to be outside the TriSoup triangle. The halo method replaces the inequality in the verification with -ε ≤ u, v, w, allowing confirmation that the intersection is within (or belongs to) the TriSoup triangle extending through its halo. Therefore, the halo method does not increase complexity and / or significantly increase processing requirements.
[0113] Figure 13 An example of the halo method for the TriSoup triangle is shown. More specifically, Figure 13 A diagram is shown for the TriSoup triangle 1050 (e.g., as discussed in this article). Figure 10B An example of the halo method for the TriSoup triangle 1050 described herein. By adding a halo 1310 to the TriSoup triangle 1050, voxels 1060 (e.g., those corresponding to the ones described herein) are... Figure 10B The missing voxels (1060B) can be captured by a halo. By adding a halo, better voxel continuity between TriSoup triangles can be obtained through the boundaries of TriSoup nodes, thereby reducing gaps (i.e., missing voxels). In addition, adding a halo can reduce the quantitative geometric measure representing the amount of error between the original point cloud and the modeled and / or decoded point cloud.
[0114] The voxelization process can use ray-triangle intersection algorithms (e.g., the Möller-Trumbore algorithm) that depend on the emitted rays to determine whether a ray intersects a TriSoup triangle. Ray-triangle intersection algorithms can also be used to determine at which points of the TriSoup triangle a ray intersects. Rays can be emitted from integer coordinates that can correspond to the center of a voxel. For example, a ray emitted parallel to the coordinate axes in 3D space can intersect a TriSoup triangle if and only if the projection of the voxel's center along the ray direction belongs to the TriSoup triangle. That is, for example, if the intersection point corresponds to the center of the voxel, it can be determined that the ray intersects the TriSoup triangle. However, if the center of the voxel does not intersect the TriSoup triangle, the emitted ray may miss voxels that clearly intersect the TriSoup triangle in 3D space. Fine ray emission methods can be implemented together with halo methods to further improve the voxelization of TriSoup triangles using ray-triangle intersection.
[0115] Figure 14 An example of a fine-ray emission method is shown. More specifically, Figure 14An example of a fine ray emission method for refining ray emission is shown. Additional rays can be emitted, for example, around each ray emitted from an integer coordinate. The first ray can be emitted along the ray direction from an integer coordinate 1420 corresponding to the center of voxel 1410. The first ray may miss intersecting the TriSoup triangle 1400. Additional rays can be emitted from coordinate 1430, for example, from around the integer coordinate 1420 of the first ray. For example, for each ray emitted from an integer coordinate (e.g., integer coordinate 1420), multiple additional rays (e.g., 8 fine rays) can be emitted at non-integer coordinates (e.g., coordinate 1430) around each ray. Thus, intersection with the TriSoup triangle 1400 can be obtained where the voxel centered on the first ray clearly intersects the TriSoup triangle 1400. For example, eight additional rays can be emitted from coordinate 1430 located at ± 1 / 8 of the integer coordinate interval relative to the integer coordinate 1420 of the first ray. For example, based on the fact that the intersection of the voxel and the TriSoup triangle 1400 is within a threshold amount (e.g., ± 1 / 8) of the center of the voxel, it can be determined that the voxel "clearly" intersects the TriSoup triangle 1400.
[0116] Because at most three inequality tests relative to 0 in the Möller-Trumbore algorithm can be changed to inequality tests relative to -ε, the halo method described in this paper does not significantly increase the complexity of voxelization. For example, for voxelization, the complexity of the Möller-Trumbore algorithm plus the halo method may not increase compared to using the Möller-Trumbore algorithm alone. In contrast, the fine ray emission method increases the number of emitted rays and is computationally expensive. The benefits of the fine ray emission method may be further reduced because the benefits of the halo method and the fine ray emission method are not additive.
[0117] Figure 15 Examples of using the halo method and the fine ray emission method are shown. More specifically, Figure 15An example of the superimposed effect of implementing both the halo method and the fine ray emission method is shown. Voxelization of TriSoup triangle 1500 can cause voxel 1510 to be added to the list of decoded voxels in the decoded point cloud, for example, because voxel 1510 can be identified as belonging to the halo 1520 surrounding TriSoup triangle 1500. Alternatively, voxelization of TriSoup triangle 1500 can cause voxel 1510 to be added to the list of decoded voxels in the decoded point cloud, for example, because an additional ray 1530 emitted relative to the first ray 1540 passing through the center of voxel 1510 can intersect triangle 1500. For example, if both the halo method and the fine ray emission method are used, voxel 1510 can be added twice. This superimposed effect may be caused by two methods of extending the points to be voxelized along the plane of TriSoup triangle 1500. For example, extending the halo parameter ε and extending the distance between the additional rays (e.g., thin rays) and the first ray can make it possible to determine additional points along the plane of the TriSoup triangle 1500.
[0118] Figure 16 An example of voxelization for enhancing the TriSoup triangle is shown. More specifically, Figure 16 An example of enhancing the voxelization of TriSoup triangle 1600 by adding one or more points is shown. The addition of one or more points can be based on points determined in TriSoup triangle 1600. Enhancing voxelization in this way can be referred to as the “thickness” of using (e.g., applying) the TriSoup triangle method. The points can be, for example, the intersection of ray 1620 and TriSoup triangle 1600. TriSoup triangle 1600 can belong to cuboid 1610 corresponding to TriSoup nodes. One or more points 1632 and / or 1634 can be determined, for example, based on point 1630 in TriSoup triangle 1600 (e.g., inside or on its edges), as described herein. Points determined in TriSoup triangles (e.g., TriSoup triangle 1600) can refer to points inside or on the edges of TriSoup triangles. One or more points (e.g., points 1632 and / or 1634) can be determined using point 1630, but, for example, may not be in the same plane as TriSoup triangle 1600 containing point 1630. As described in this paper, by identifying one or more of these points to be voxelized (e.g., points 1632 and / or 1634), without increasing processing complexity, the fine ray emission method can be replaced, and the halo method can be enhanced without producing redundant effects.
[0119] Point 1630 can be the intersection point P between ray 1620 and TriSoup triangle 1600. intRay 1620 may be emitted, for example, from integer coordinates and in a direction that may be parallel to a coordinate axis in 3D space (e.g., the x-axis, y-axis, or z-axis). Ray 1620 may be emitted, for example, along one or more coordinate axes in 3D space. Rays may be emitted, for example, from one or more coordinate axes. Rays may be emitted in the order of the coordinate axes that are determined to be most perpendicular to the plane of TriSoup triangle 1600. Rays (e.g., ray 1620) may be emitted, for example, from at most two of the three coordinate axes that are determined to be most perpendicular or most parallel to the normal of TriSoup triangle (e.g., TriSoup triangle 1600).
[0120] As described herein, intersection points can be determined based on calculated centroid coordinates (e.g., the Möller-Trumbore algorithm). Point 1630 can be voxelized (e.g., rounded and / or quantized to the nearest voxel along ray 1620) and / or added to a list of decoded points or voxels in the decoded point cloud. One or more points (e.g., point 1632 and / or point 1634) can be determined from point 1630. The determination can be based, for example, on adding and / or subtracting a quantity value equal to a certain value (e.g., a thickness value). The vector from point 1630 determines one or more points (e.g., point 1632 and / or point 1634). Point 1634 ( ) and / or point 1632 ( The value can be equal to the value obtained by subtracting and / or adding. The following vectors determine this:
[0121]
[0122] in It is a quantity value The vector. Point 1632 ( ) can be, for example, derived from a vector The shift value in the first direction (e.g., distance). Point 1630 is indicated. Point 1634 ( This can be achieved, for example, by shifting a value (e.g., distance) in a second direction that may be opposite to the first direction. Point 1630 is indicated. Vector. It can be parallel to ray 1620, and ray 1620 can be emitted parallel to the coordinate axes. In addition to point 1630, there are two additional points (e.g., 1634 and 1632) can also be voxelized (e.g., quantized or rounded) and added to a list of decoded points (e.g., corresponding voxels) of the decoded point cloud. Three points (e.g., P) int 1630 1632 and Voxelization of 1634 can produce the same voxelization via decoded points or voxels. For example, based on If the value is less than a predetermined value (e.g., 1 / 4), then the three points P can be... int 1630 1632 and 1634 voxels are converted into at most two voxels.
[0123] point 1634 and / or points 1632 can be obtained by subtracting and / or adding the value as follows: The vector is used to determine this, and the vector can be perpendicular to the TriSoup triangle at angle 160°.
[0124]
[0125] in It is perpendicular to the TriSoup triangle at 160° and has a magnitude. The vector. Point TriSoup triangle 1630 can be determined, for example, through voxelization methods different from ray tracing. For instance, rasterization can be used, where TriSoup triangle 1600 can be transformed into a triangle in 2D. The points of the 2D triangle can then be determined. The determined points of the 2D triangle can be projected back into 3D. Alternatively, voxelization methods based on the Digital Differential Analyzer (DDA) algorithm or the Bresenham algorithm can be used.
[0126] The value τ can be a predetermined value (e.g., 1 / 8 of the voxel size). The value τ can be defined relative to the voxel size. The value τ can be a parameter that can be determined by the encoder and can be transmitted to the decoder as an indication signal (e.g., a "thickness" parameter).
[0127] One or two extension points can be determined. For example, one or two extension points can be determined for each point (e.g., intersection) defined in TriSoup triangle 1600. TriSoup triangle 1600 can be extended by two parallel point planes and can be considered equivalent to replacing TriSoup triangle 1600 with a prism of height 2τ. For example, by determining the distance / value above or below a point in TriSoup triangle 1600. For multiple points, TriSoup triangle 1600 can be extended by two parallel point planes and can be considered equivalent to replacing TriSoup triangle 1600 with a prism of height 2τ. For example, if two additional points... and It is based on a vector parallel to the ray at 1620 degrees. If the obtained light ray is not perpendicular to TriSoup triangle 160°, then the prism can be an oblique prism. For example, if two additional points and It is based on a vector perpendicular to the TriSoup triangle at 160°. If obtained, the prism can be a right-hand prism. Therefore, the height or prism can indicate the "thickness" of the TriSoup triangle 1600. Thus, the value τ can also be called the thickness parameter or thickness value. For example, if the value τ is small, the voxelization of the intersection of the ray and the prism can be equivalent to based on three points P. int、 and The method of voxelization.
[0128] As described in this article, the thin-ray emission method can be replaced by the "thickness" method using the TriSoup triangle. Figure 17 An example of voxelization for enhancing the TriSoup triangle is shown. More specifically, Figure 17 This illustrates an example of how the "thickness" method using the TriSoup triangle can achieve results similar to emitting thin rays. This can be achieved, for example, based on point P. int 1630 to determine the point 1632. For example... Figure 16 As shown, point P int 1630 indicates the intersection between TriSoup triangle 1600 and a ray 1620 emitted along a specific direction (e.g., the z-axis). For example... Figure 16 As shown, the same intersection point P can be determined based on the horizontally emitted perpendicular ray 1720 (e.g., the y-axis) perpendicular to ray 1620. int 1630. The fine ray emission method can emit an additional perpendicular ray 1730 that is parallel to and perpendicular to the perpendicular ray 1720. For example, if the distance between the perpendicular ray 1720 and the additional perpendicular ray 1730 is equal to the value τ, then the perpendicular ray 1730 can determine the same intersection point. 1632, the intersection point is determined based on point 1630 using a value τ (e.g., "thickness"). Using the "thickness" method of the TriSoup triangle to add one or more additional points can advantageously replace the fine ray emission method because it eliminates the need to emit additional rays, thus reducing the computational intensity of the process. Furthermore, this method using the "thickness" of the TriSoup triangle can be combined with a halo method that operates on the plane containing the TriSoup triangle, since the additional one or more points are not added along the plane of the TriSoup triangle. In contrast, the benefits of the fine ray emission method are reduced when combined with halo techniques, as both methods are effective in the plane containing the TriSoup triangle.
[0129] The parameters of value τ and / or the basic halo parameter ε can be predetermined. The parameters of value τ and / or the basic halo parameter ε can be fixed, for example, in the codec specification. The parameters of value τ and / or the basic halo parameter ε can depend on the properties of the original point cloud. The parameters of value τ and / or the basic halo parameter ε can be determined, for example, by the encoder and / or sent to the decoder. The parameters of value τ and / or the basic halo parameter ε can be encoded into a bitstream and / or decoded by the decoder.
[0130] The parameters of value τ and / or the underlying halo parameter ε can be encoded in the bitstream, for example, at the sequence level (e.g., encoded into a sequence parameter set [SPS]), at the frame level (e.g., encoded into a geometry parameter set [GPS]), and / or at a more local level. The parameters of value τ and / or the underlying halo parameter ε can be encoded into the geometry brick head (GBH), for example, at a more local level, slice-by-slice or brick-by-brick.
[0131] The encoder can signal an activation flag indicating, for example, whether the decoder executes the proposed value-τ-based mechanism during voxelization of the TriSoup triangle. The encoder can also signal an activation flag indicating, for example, whether the decoder does not execute the proposed value-τ-based mechanism during voxelization of the TriSoup triangle. The activation flag can be encoded into SPS, GPS, and / or GBH. The decoder can receive and / or decode the activation flag from the bitstream.
[0132] Figure 18A An example method for writing (e.g., encoding and / or decoding) point clouds from TriSoup triangles is shown. More specifically, Figure 18A A flowchart 1800A illustrates the steps of an example method for writing code to a point cloud from TriSoup triangles. One or more steps of the example flowchart 1800A can be performed by a decoder and / or encoder (e.g., as described herein). Figure 1 The decoder 120 and / or encoder 114 are implemented as described above. Figure 18A At step 1802, the decoder and / or encoder can determine a first point that may be located within the TriSoup triangle. The first point can be in three-dimensional (3D) space. A point located within the TriSoup triangle can be located on an edge of the TriSoup triangle or within (e.g., inside) the TriSoup triangle defined by its boundaries. The TriSoup triangle can contain three vertices, with at least two vertices along the two TriSoup edges of the cuboid corresponding to the TriSoup node (e.g., as described herein with respect to Figures 8, 9, and 16). Regarding Figures 8, Figure 9 and Figure 16 An example of a TriSoup triangle is shown in 3D.
[0133] The first point can be determined as the intersection of a ray and a triangle. For example, this can be determined based on using a ray casting or ray tracing algorithm (e.g., the Möller-Trumbore algorithm). For example, the first point within a TriSoup triangle can be determined based on the intersection of a point between the TriSoup triangle and a ray extending parallel to a coordinate axis in 3D space (e.g., one of the x, y, or z axes). The decoder and / or encoder can convert the coordinates of the three TriSoup vertices of the TriSoup triangle into barycentric coordinates, for example, to determine the intersection of the TriSoup triangle and the ray. The intersection can be determined, for example, based on using (e.g., applying) the Möller-Trumbore algorithm with the three vertices of the TriSoup triangle and the ray, as discussed in this paper. Figure 11 To determine the intersection point between the TriSoup triangle and a ray extending parallel to the coordinate axes, the ray can be emitted from a ray having an origin at integer coordinates, or can extend from a ray having an origin at integer coordinates. The ray can extend or be emitted in a direction that can be toward the interior of the cuboid containing the TriSoup triangle (e.g., corresponding to a TriSoup node).
[0134] The first point can be determined based on rasterization or related methods. Related methods may include, for example, a Digital Differential Analyzer (DDA) algorithm or a Bressenham algorithm. The decoder and / or encoder may perform rasterization, for example, by transforming a TriSoup triangle into a triangle in 2D space. The decoder and / or encoder may determine 2D points (e.g., pixels) located, for example, within the 2D triangle (e.g., on an edge or within a 2D triangle defined by a boundary). The decoder and / or encoder may, for example, project the 2D points into 3D space after determining them to determine the first point. The first point in the TriSoup triangle may correspond, for example, to the 2D point projected into 3D space. The first point and / or the 2D point may be determined, for example, based on the use of a DDA algorithm, a Bressenham algorithm, etc.
[0135] exist Figure 18A At step 1804, the decoder and / or encoder can determine the second point. The second point can be determined, for example, as a point on a vector whose shift value from the first point is equal to a certain value (e.g., τ). The second point can be located outside the TriSoup triangle. The second point may not belong to the plane of the TriSoup triangle.
[0136] A point can be determined as the intersection of a ray and a TriSoup triangle (e.g., as described with respect to step 1802). A vector can be parallel to the ray, and the ray can be parallel to the coordinate axes in 3D space. A vector can be perpendicular to the plane of the TriSoup triangle. This type of vector can be determined based on rasterization methods. Vectors can be used, for example, based on intersections determined using ray tracing or ray casting.
[0137] The value (e.g., τ) can be predetermined. The value τ can be defined relative to the size of the voxel (e.g., 1 / 8, 1 / 4, 1 / 16, etc. of the voxel size). The value can be 1 / 8 of the voxel size, for example, to achieve performance similar to fine-ray emission methods with reduced computational cost. The decoder and / or encoder can receive indications (e.g., syntax elements) that can indicate the value.
[0138] exist Figure 18A At step 1806, the decoder and / or encoder may voxelize the first point and the second point. The decoder and / or encoder may voxelize the first point and the second point, for example, to determine at least one voxel of the decoded point cloud. The first point and the second point may, for example, be voxelized into at most two voxels of the decoded point cloud. The at least one voxel may be at most two voxels of the decoded point cloud (e.g., two different voxels). Voxelizing the first point and the second point may include quantizing and / or rounding the first point and the second point to a first voxel and a second voxel, respectively.
[0139] Voxelization of the first and second points may include voxelizing the first point to determine a first voxel, and voxelizing the second point to determine a second voxel. At least one voxel may include at least one of the first and / or second voxels. For example, if the first and second voxels are the same, then at least one voxel may include either the first or the second voxel. For example, if the first and second voxels are different, then at least one voxel may include both the first and the second voxels.
[0140] A first voxel (e.g., the corresponding first decoded voxel) and a second voxel (e.g., the corresponding second decoded voxel) can be added to the list of rendered voxels (e.g., decoded voxels). If any duplicates exist, the decoder and / or encoder can remove duplicate voxels from the list of rendered voxels to represent the decoded point cloud.
[0141] One or more additional points can be determined based on the first point determined at step 1802. For example, a second point can be determined based on the first point by adding a vector to it. Similarly, for example, by subtracting a vector from the first point (e.g., as described herein regarding...) Figure 16 The third point can be determined based on the first point. The first, second, and third points can be voxelized. The first, second, and third points can be voxelized, for example, to determine at least one voxel of the decoded point cloud. The first, second, and third points can, for example, be voxelized into at most two voxels of the decoded point cloud.
[0142] The second point can be indicated as a point shifted by a certain value from the first point along a first direction of the vector. The decoder and / or encoder can determine a third point, indicated as a point shifted by the value from the first point along a second direction that can be opposite to the first direction. The first, second, and third points can be voxelized to determine at least one voxel of the decoded point cloud. The first, second, and third points can be voxelized into at most two voxels of the decoded point cloud. The first and / or second directions can be parallel to the coordinate axes in 3D space. The first and / or second directions can be perpendicular to the plane of the TriSoup triangle (e.g., parallel to the normal of the TriSoup triangle).
[0143] The decoder and / or encoder can determine the intersection points between the TriSoup triangle and light rays extending parallel to the coordinate axes in 3D space (e.g., as discussed in this paper). Figure 16The decoder and / or encoder can determine points indicated by vectors parallel to the ray shift and containing a magnitude equal to a certain value. This value (e.g., value τ) can be a predetermined value (e.g., 1 / 8 of the voxel size). The value can be indicated by a signal received from and / or decoded from the bitstream. The decoder and / or encoder can voxelize the intersection and / or a second point to determine at least one voxel of the decoded point cloud. The at least one voxel can be at most two voxels of the decoded point cloud.
[0144] Figure 18B An example method for writing (e.g., encoding and / or decoding) point clouds from TriSoup triangles is shown. More specifically, Figure 18B A flowchart 1800B illustrates example method steps for decoding a point cloud from TriSoup triangles. One or more steps of example flowchart 1800B can be performed by a decoder and / or encoder (e.g., as described herein). Figure 1 The decoder 120 and / or encoder 114 are implemented as described above. Two or more additional points may be determined for each point identified in the TriSoup triangle, for example, as described herein. Figure 18A As stated above. Figure 18B At step 1812, the decoder and / or encoder can determine the first point in 3D space that may be located within the TriSoup triangle. The first point can be determined as the intersection of light rays parallel to the coordinate axes and the TriSoup triangle. Figure 18B At step 1814, the decoder and / or encoder can determine a second point, which is the point where the magnitude of the shift vector in the first direction is valued. This value can be a predetermined value and / or received as an indication in the bit stream. Figure 18B At step 1816, the decoder and / or encoder can determine a third point, which is the point where the value of the shift vector can be shifted in a second direction opposite to the first direction. Figure 18B At step 1818, the decoder and / or encoder may voxelize the first point, the second point, and the third point to determine at least one voxel of the decoded point cloud.
[0145] although Figure 18A and Figure 18B A TriSoup triangle can be described with respect to a specific point (e.g., an intersection point), but the decoder and / or encoder can determine multiple such points within the TriSoup triangle. Ray-triangle intersection methods can be used to determine the intersection points between multiple rays and the TriSoup triangle. Additionally, although... Figure 18A and Figure 18BIt can be described in terms of extending and / or emitting rays in a single coordinate axis, but multiple rays can be emitted from more than one coordinate axis and / or a set of coordinate axes, and multiple intersections between the multiple rays and the TriSoup triangle can be determined.
[0146] Figure 19 An example computer system in which instances of this disclosure may be implemented is shown. For example, Figure 19 The example computer system 1900 shown can implement one or more of the methods described herein. For example, various apparatuses and / or systems described herein (e.g., in...) Figure 1 , 2 (3) can be implemented in the form of one or more computer systems 1900. Furthermore, each step in the flowchart described in this disclosure can be implemented on one or more computer systems 1900.
[0147] Computer system 1900 may include one or more processors, such as processor 1904. Processor 1904 may be a dedicated processor, a general-purpose processor, a microprocessor, and / or a digital signal processor. Processor 1904 may be connected to communication infrastructure 1902 (e.g., a bus or network). Computer system 1900 may also include main memory 1906 (e.g., random access memory (RAM)) and / or secondary memory 1908.
[0148] Secondary memory 1908 may include hard disk drive 1910 and / or removable storage drive 1912 (e.g., magnetic tape drive, optical disc drive, etc.). Removable storage drive 1912 can read from and / or write to removable storage unit 1916. Removable storage unit 1916 may include magnetic tape, optical disc, etc. Removable storage unit 1916 can read from and / or write to removable storage drive 1912. Removable storage unit 1916 may contain computer-usable storage medium with computer software and / or data stored therein.
[0149] Secondary memory 1908 may include other similar means for allowing computer programs or other instructions to be loaded into computer system 1900. Such means may include removable memory cell 1918 and / or interface 1914. Examples of such means may include program boxes and / or box interfaces (such as in video game devices), removable memory chips (such as erasable programmable read-only memory (EPROM) or programmable read-only memory (PROM)) and associated sockets, thumb drives and USB interfaces and / or other removable memory cells 1918 and interfaces 1914 that allow software and / or data to be transferred from removable memory cell 1918 to computer system 1900.
[0150] Computer system 1900 may also include communication interface 1920. Communication interface 1920 allows software and data to be transferred between computer system 1900 and external devices. Examples of communication interface 1920 may include modems, network interfaces (e.g., Ethernet cards), communication ports, etc. Software and / or data transmitted via communication interface 1920 may be in the form of signals, which may be electronic, electromagnetic, optical, and / or other signals that can be received by communication interface 1920. Signals may be provided to communication interface 1920 via communication path 1922. Communication path 1922 may carry signals and may be implemented using wires or cables, optical fibers, telephone lines, cellular telephone links, RF links, and / or any other communication channels.
[0151] Computer program media and / or computer-readable media can be used to refer to tangible storage media, such as removable storage units 1916 and 1918 or a hard disk installed in hard disk drive 1910. The computer program product can be an apparatus for providing software to computer system 1900. The computer program (which may also be referred to as computer control logic) can be stored in main memory 1906 and / or secondary memory 1908. The computer program can be received via communication interface 1920. Such a computer program, when executed, can enable computer system 1900 to implement the present disclosure as discussed herein. Specifically, when executed, the computer program can enable processor 1904 to implement the processes of the present disclosure, such as any of the methods described herein. Therefore, such a computer program can represent a controller of computer system 1900.
[0152] The features of this disclosure can be implemented in hardware using, for example, hardware components such as application-specific integrated circuits (ASICs) and gate arrays. Implementing a hardware state machine to perform the functions described herein will also be apparent to those skilled in the art.
[0153] Figure 20Example elements of a computing device are shown that can be used to implement any of the various devices described herein, including, for example, a source device (e.g., 102), an encoder (e.g., 200), a destination device (e.g., 106), a decoder (e.g., 300), and / or any computing device described herein. The computing device 2030 may include one or more processors 2031 that can execute instructions stored in random access memory (RAM) 2033, removable media 2034 (such as a Universal Serial Bus (USB) drive, a compact disc (CD) or digital versatile disc (DVD) or floppy disk drive), or any other desired storage medium. Instructions may also be stored in an attached (or internal) hard disk drive 2035. The computing device 2030 may also include a security processor (not shown) that can execute instructions of one or more computer programs to monitor processes executing on the processor 2031 and any processes requesting access to any hardware and / or software components of the computing device 2030 (e.g., ROM 2032, RAM 2033, removable media 2034, hard disk drive 2035, device controller 2037, network interface 2039, GPS 2041, Bluetooth interface 2042, WiFi interface 2043, etc.). The computing device 2030 may include one or more output devices, such as a display 2036 (e.g., screen, display device, monitor, television, etc.), and may include one or more output device controllers 2037, such as a video processor. One or more user input devices 2038 may also be present, such as a remote control, keyboard, mouse, touchscreen, microphone, etc. The computing device 2030 may also include one or more network interfaces (e.g., network interface 2039), which may be wired, wireless, or a combination of both. Network interface 2039 can provide the computing device 2030 with an interface to communicate with network 2040 (e.g., RAN or any other network). Network interface 2039 may include a modem (e.g., a cable modem), and external network 2040 may include a communication link, an external network, a home network, a provider's wireless, coaxial cable, fiber optic, or hybrid fiber / coaxial cable distribution system (e.g., a DOCSIS network), or any other desired network. Additionally, computing device 2030 may include a location detection device, such as a Global Positioning System (GPS) microprocessor 2041, which can be configured to receive and process GPS signals and determine the geographic location of computing device 2030 with possible assistance from external servers and antennas.
[0154] Figure 20The examples shown can be hardware configurations, but the components illustrated can also be implemented as software. Modifications can be made to add, remove, combine, divide, etc., components of computing device 2030 as needed. Furthermore, basic computing devices and components can be used to implement components, and the same components (e.g., processor 2031, ROM storage device 2032, display 2036, etc.) can be used to implement any other computing devices and components described herein. For example, the various components described herein can be implemented using computing devices having components such as processors that execute computer-executable instructions stored on a computer-readable medium, such as… Figure 20 As shown. Some or all of the entities described herein may be software-based and may coexist on a common physical platform (e.g., the requesting entity may be a separate software process and program from the relevant entity, both of which may be executed as software on a common computing device).
[0155] In the following text, various features will be highlighted in a set of numbered clauses or paragraphs. These features should not be construed as limitations on the invention or inventive concept, but are merely highlights of certain features described herein, without implying a particular order of importance or relevance of such features.
[0156] Clause 1. A method comprising determining a first point in three-dimensional (3D) space located within a TriSoup triangle.
[0157] Clause 2. The method described in Clause 1 further comprises determining a second point from which a vector is shifted from the first point.
[0158] Clause 3. The method according to any one of Clauses 1 to 2 further comprises determining at least one voxel in a set of voxels representing a point cloud by voxelizing the first point and the second point.
[0159] Clause 4. The method according to any one of Clauses 1 to 3, wherein the point cloud comprises a decoded point cloud.
[0160] Clause 5. The method according to any one of Clauses 1 to 4, wherein the first point is associated with a point cloud video.
[0161] Clause 6. The method according to any one of Clauses 1 to 5 further comprises decoding a video, wherein the first point is associated with a point cloud video.
[0162] Clause 7. The method according to any one of Clauses 1 to 6, wherein the first point being located within the TriSoup triangle includes the point being located on the side of the TriSoup triangle; or being located within the TriSoup triangle.
[0163] Clause 8. The method according to any one of Clauses 1 to 7, wherein the second point is located outside the TriSoup triangle.
[0164] Clause 9. The method according to any one of Clauses 1 to 8, wherein the TriSoup triangle comprises three vertices, and wherein at least two of the three vertices are along the two TriSoup edges of the cuboid associated with the TriSoup node.
[0165] Clause 10. The method according to any one of Clauses 1 to 9, wherein determining the first point located within the TriSoup triangle comprises determining that the first point is located at the intersection of the TriSoup triangle and a ray extending parallel to the coordinate axis in the 3D space.
[0166] Clause 11. The method according to any one of Clauses 1 to 10, wherein the TriSoup triangle comprises three vertices; and wherein the first point is determined using the Möller-Trumbore algorithm with the three vertices of the TriSoup triangle and the ray.
[0167] Clause 12. The method according to any one of Clauses 1 to 11, wherein determining the first point comprises: converting the TriSoup triangle into a triangle in 2D space, determining a 2D point located in the triangle, and projecting the 2D point into 3D space.
[0168] Clause 13. The method according to any one of Clauses 1 to 12, wherein determining at least one voxel comprises: voxelizing the first point to determine a first voxel, voxelizing the second point to determine a second voxel, and wherein the at least one voxel comprises at least one of the first voxel and the second voxel.
[0169] Clause 14. The method according to any one of Clauses 1 to 13, wherein the first point and the second point are voxelized into at most two voxels of the point cloud.
[0170] Clause 15. The method according to any one of Clauses 1 to 14, wherein the vector has a magnitude equal to a predetermined value.
[0171] Clause 16. The method according to any one of Clauses 1 to 15 further comprises receiving an indication of a value, wherein the vector has a magnitude equal to the value.
[0172] Clause 17. The method according to any one of Clauses 1 to 16, wherein the second point is determined based on adding the vector to the first point, and the method further comprises determining a third point based on subtracting the vector from the first point, and wherein the voxelization comprises voxelizing the first point, the second point, and the third point to determine at least one voxel of the point cloud.
[0173] Clause 18. A computing device comprising one or more processors and a memory storing instructions that, when executed by the one or more processors, cause a wireless device to perform a method according to any one of Clauses 1 to 17.
[0174] Clause 19. A system comprising: a computing device configured to perform the method according to any one of Clauses 1 to 17; and a base station configured to encode a point cloud.
[0175] Clause 20. A computer-readable medium storing instructions that, when executed, cause to perform the method according to any one of Clauses 1 to 17.
[0176] Clause 21. A method comprising determining a first point in three-dimensional (3D) space located within a TriSoup triangle.
[0177] Clause 22. The method described in Clause 21 further comprises determining a second point from which a vector is shifted from the first point.
[0178] Clause 23. The method according to any one of Clauses 21 to 22 further comprises determining at least one voxel by voxelizing the first point and the second point.
[0179] Clause 24. The method according to any one of Clauses 21 to 23, comprising a voxel set representing a point cloud of the at least one voxel.
[0180] Clause 25. The method according to any one of Clauses 21 to 24, wherein the first point, the second point, and the third point are voxelized into at most two voxels of a point cloud.
[0181] Clause 26. The method according to any one of Clauses 21 to 25, wherein if the first voxel and the second voxel are the same, then the at least one voxel comprises one of the first voxel and the second voxel, and if the first voxel and the second voxel are different, then the at least one voxel comprises both the first voxel and the second voxel.
[0182] Clause 27. The method according to any one of Clauses 21 to 26, wherein the vector is perpendicular to the plane associated with the TriSoup triangle.
[0183] Clause 28. The method according to any one of Clauses 21 to 27, wherein the second point is determined based on adding the vector to the first point, and the method further comprises determining a third point based on subtracting the vector from the first point, and wherein the voxelization comprises voxelizing the first point, the second point, and the third point to determine the at least one voxel of the point cloud.
[0184] Clause 29. A wireless device comprising one or more processors and a memory storing instructions that, when executed by the one or more processors, cause the computing device to perform a method according to any one of Clauses 21 to 28.
[0185] Clause 30. A system comprising: a first computing device configured to perform a method according to any one of Clauses 21 to 28; and a second computing device configured to encode a point cloud.
[0186] Clause 31. A computer-readable medium storing instructions that, when executed, cause to perform the method according to any one of Clauses 21 to 28.
[0187] Clause 32. A method comprising determining a first point in three-dimensional (3D) space located within a TriSoup triangle.
[0188] Clause 33. The method described in Clause 32 further comprises determining a second point from which a vector is shifted from the first point.
[0189] Clause 34. The method according to any one of Clauses 32 to 33 further comprises voxelizing the first point and the second point to determine at least one voxel of the decoded point cloud.
[0190] Clause 35. The method according to any one of Clauses 32 to 34, wherein the TriSoup triangle comprises three vertices.
[0191] Clause 36. The method according to any one of Clauses 32 to 35, wherein the TriSoup triangle belongs to a TriSoup node.
[0192] Clause 37. The method according to any one of Clauses 32 to 36, wherein determining the first point located inside the TriSoup triangle comprises determining that the first point is located at the intersection of the TriSoup triangle and a ray extending parallel to the coordinate axis in the 3D space.
[0193] Clause 38. The method according to Clause 37, wherein the vector and the ray are parallel.
[0194] Clause 39. The method according to any one of Clauses 32 to 38, wherein the coordinate axes in the 3D space include an x-axis, a y-axis, and a z-axis.
[0195] Clause 40. The method according to any one of Clauses 37 to 38, wherein the light rays extend in a direction toward the interior of the cuboid containing the TriSoup triangle.
[0196] Clause 41. The method according to any one of Clauses 32 to 40, wherein the voxelization comprises: voxelizing the first point to determine a first voxel, voxelizing the second point to determine a second voxel, and wherein the at least one voxel comprises at least one of the first voxel and the second voxel.
[0197] Clause 42. The method according to Clause 41 further comprises adding the first voxel and the second voxel to a list of rendered voxels, and removing one or more duplicate voxels from the list of rendered voxels.
[0198] Clause 43. The method according to any one of Clauses 32 to 42, wherein voxelizing the first point and the second point comprises quantizing the first point and the second point into a first voxel and a second voxel, respectively.
[0199] Clause 44. The method according to any one of Clauses 32 to 43, wherein the vector has a magnitude equal to a predetermined value.
[0200] Clause 45. The method according to any one of Clauses 32 to 44, wherein the vector has a magnitude equal to a predetermined value.
[0201] Clause 46. The method according to Clause 45, wherein the value is 1 / 8 of the size of the voxel.
[0202] Clause 47. The method according to Clause 45, wherein the second point shifts the value from the first point in a first direction of the vector, and wherein the method further comprises determining a third point shifted from the first point that shifted the value in a second direction opposite to the first direction, and wherein the voxelization comprises voxelizing the first point, the second point, and the third point to determine the at least one voxel of the decoded point cloud.
[0203] Clause 48. The method according to Clause 47, wherein both the first direction and the second direction are parallel to the coordinate axes in the 3D space.
[0204] Clause 49. The method according to Clause 47, wherein both the first direction and the second direction are perpendicular to the plane of the TriSoup triangle.
[0205] Clause 50. A computing device comprising one or more processors and a memory storing instructions that, when executed by the one or more processors, cause the computing device to perform a method according to any one of Clauses 32 to 49.
[0206] Clause 51. A system comprising: a first computing device configured to perform a method according to any one of Clauses 32 to 49; and a second computing device configured to encode a point cloud.
[0207] Clause 52. A computer-readable medium storing instructions that, when executed, cause to perform the method according to any one of Clauses 32 to 49.
[0208] The computing device can perform a method comprising multiple operations. The computing device can determine a first point in three-dimensional (3D) space that may lie within a TriSoup triangle. The computing device can determine a second point that can be shifted by a vector from the first point. The computing device can determine at least one voxel in a set of voxels representing a point cloud, for example, by voxelizing the first and second points. The point cloud may contain decoded point clouds. The first point may be associated with a point cloud video. The computing device can decode the video. The video may contain a sequence of point clouds. The first point being located within a TriSoup triangle can include a point located on an edge of the TriSoup triangle or within the TriSoup triangle. The second point may be located outside the TriSoup triangle. The TriSoup triangle may contain three vertices, and at least two of these vertices may be along the two TriSoup edges of a cuboid associated with a TriSoup node. Determining that the first point may be located within a TriSoup triangle can include determining that the first point may be located at the intersection of the TriSoup triangle and a ray extending parallel to a coordinate axis in 3D space. The TriSoup triangle may contain three vertices. The Möller-Trumbore algorithm can be used to determine a first point using the three vertices of a TriSoup triangle and rays. Determining the first point may involve transforming the TriSoup triangle into a triangle in 2D space, identifying 2D points that may lie within the triangle, and projecting the 2D points into 3D space. Determining at least one voxel may involve voxelizing the first point to determine a first voxel and voxelizing the second point to determine a second voxel, and the at least one voxel may contain at least one of the first voxel and / or the second voxel. The first point and / or the second point may be voxelized into at most two voxels of the point cloud. The vector may have a magnitude equal to a predetermined value. A wireless device may receive an indication of the value, and the vector may have a magnitude equal to said value. The second point may be determined based on adding the vector to the first point. A computing device may further determine a third point based on subtracting the vector from the first point. Voxelization may involve voxelizing the first, second, and third points, for example, to determine at least one voxel of the point cloud. A computing device may include one or more processors and a memory storing instructions that, when executed by the one or more processors, cause the computing device to perform the described methods, additional operations, and / or include additional elements. A system may include: a first computing device configured to perform the described methods, additional operations, and / or include additional elements; and a second computing device configured to encode a point cloud. A computer-readable medium may store instructions that, when executed, cause the described methods, additional operations, and / or include additional elements.
[0209] The computing device can perform a method comprising multiple operations. The computing device can determine a first point in three-dimensional (3D) space that may lie within a TriSoup triangle. The computing device can determine a second point that can be shifted by a vector from the first point, and the computing device can determine at least one voxel by voxelizing the first and second points. A set of voxels including at least one voxel can represent a point cloud. The first, second, and third points can be voxelized into at most two voxels of the point cloud. For example, if the first and second voxels are the same, then at least one voxel can contain one of the first and second voxels. Alternatively, for example, if the first and second voxels are different, then at least one voxel can contain both the first and second voxels. The vector can be perpendicular to the plane associated with the TriSoup triangle. The computing device may include one or more processors and a memory storing instructions that, when executed by the one or more processors, cause the computing device to perform the described method, additional operations, and / or include additional elements. The system may include: a first computing device configured to perform the described methods, additional operations, and / or include additional elements; and a second computing device configured to encode a point cloud. A computer-readable medium may store instructions that, when executed, cause the described methods, additional operations, and / or include additional elements.
[0210] The computing device can perform a method comprising multiple operations. The computing device can determine a first point as the intersection of a TriSoup triangle and a ray of light, the ray extending parallel to coordinate axes in three-dimensional (3D) space. The computing device can determine a second point, which can be shifted from the first point by a vector parallel to the ray. The computing device can determine at least one voxel representing a set of voxels in a write-coded point cloud, for example, by voxelizing the first and second points. The intersection of the ray and the plane of the TriSoup triangle can be represented as the centroid coordinates associated with the TriSoup triangle, and the first point can be determined based on the centroid coordinates. The second point can be determined based on adding a vector to the first point, and the computing device can further determine a third point based on subtracting the vector from the first point. The determination of the first point can be based on using either a Digital Differential Analyzer (DDA) algorithm or a Bressenham algorithm. The computing device can include one or more processors and a memory storing instructions that, when executed by the one or more processors, cause the computing device to perform the described method, additional operations, and / or include additional elements. The system may include: a first computing device configured to perform the described methods, additional operations, and / or include additional elements; and a second computing device configured to encode a point cloud. A computer-readable medium may store instructions that, when executed, cause the described methods, additional operations, and / or include additional elements.
[0211] The computing device can perform a method comprising multiple operations. The computing device can determine a first point in three-dimensional (3D) space that may be located inside a TriSoup triangle. The computing device can determine a second point shifted by a vector from the first point, and the computing device can determine at least one voxel of the decoded point cloud, for example, by voxelizing the first and second points. The TriSoup triangle may contain three vertices. The TriSoup triangle may belong to a TriSoup node. Vectors and rays may be parallel. Coordinate axes in 3D space may include an x-axis, a y-axis, and a z-axis. Rays may extend in directions that may be directed toward the interior of the cuboid containing the TriSoup triangle. The computing device may add a first voxel and a second voxel to a list of rendered voxels, and the computing device may remove one or more duplicate voxels from the list of rendered voxels. Voxelizing the first and second points may include quantizing the first and second points into a first voxel and a second voxel, respectively. Vectors may have a magnitude that may be equal to a predetermined value. The value may be 1 / 8 of the voxel size. The first and second directions may both be parallel to the coordinate axes in 3D space. The first and second directions can both be perpendicular to the plane of the TriSoup triangle. The computing device may include one or more processors and a memory storing instructions that, when executed by the one or more processors, cause the computing device to perform the described methods, additional operations, and / or include additional elements. The system may include: a first computing device configured to perform the described methods, additional operations, and / or include additional elements; and a second computing device configured to encode a point cloud. A computer-readable medium may store instructions that, when executed, cause the described methods, additional operations, and / or include additional elements.
[0212] One or more instances in this document can be described as processes that can be depicted as flowcharts, flow diagrams, data flow diagrams, structure diagrams, and / or block diagrams. Although a flowchart can describe operations as a continuous process, one or more of the operations can be executed in parallel or simultaneously. The order of the operations shown can be rearranged. A process can be terminated when its operations are completed, but may have additional steps not shown in the diagram. A process can correspond to a method, function, program, subroutine, subroutines, etc. When a process corresponds to a function, its termination can correspond to the function returning to the calling function or the main function.
[0213] The operations described herein can be implemented using hardware, software, firmware, middleware, microcode, hardware description languages, or any combination thereof. When implemented in software, firmware, middleware, or microcode, program code or code segments for performing necessary tasks (e.g., computer program products) can be stored on a computer-readable or machine-readable medium. A processor can perform the necessary tasks. The features of this disclosure can be implemented in hardware using, for example, hardware components such as application-specific integrated circuits (ASICs) and gate arrays. Implementing a hardware state machine to perform the functions described herein will also be apparent to those skilled in the art.
[0214] One or more features described herein may be implemented in computer-usable data and / or computer-executable instructions, executable by one or more computers or other devices, such as in one or more program modules. Generally, a program module includes routines, programs, objects, components, data structures, etc., that perform a specific task or implement a specific abstract data type when executed by a processor or other data processing device in a computer. Computer-executable instructions may be stored on one or more computer-readable media, such as hard disks, optical disks, removable storage media, solid-state storage, RAM, etc. The functionality of a program module may be combined or distributed as needed. Functionality may be implemented wholly or partially as firmware or hardware equivalents, such as integrated circuits, field-programmable gate arrays (FPGAs), etc. One or more features described herein may be implemented more efficiently using specific data structures, and such data structures are contemplated within the scope of the computer-executable instructions and computer-usable data described herein. Computer-readable media may include, but are not limited to, portable or non-portable storage devices, optical storage devices, and various other media capable of storing, containing, or carrying instructions and / or data. Computer-readable media may include non-transitory media in which data can be stored but do not include carrier waves and / or transient electronic signals propagated wirelessly or via wired connections. Examples of non-transitory media may include, but are not limited to, magnetic disks or magnetic tapes, optical storage media such as CDs or DVDs, flash memory, memory, or memory devices. Computer-readable media may store code and / or machine-executable instructions that can represent any combination of programs, functions, subroutines, routines, subroutines, modules, software packages, classes or instructions, data structures, or program statements. Code segments can be coupled to another code segment or hardware circuitry by passing and / or receiving information, data, arguments, parameters, or memory contents. Information, arguments, parameters, data, etc., can be passed, forwarded, or transmitted via any suitable means, including memory sharing, message passing, token passing, network transmission, etc.
[0215] Non-transitory tangible computer-readable media may contain instructions executable by one or more processors configured to cause the operations described herein. Articles of manufacture may contain non-transitory tangible computer-readable machine-accessible media having instructions encoded thereon for causing programmable hardware to enable devices (e.g., encoders, decoders, transmitters, receivers, etc.) to perform the operations described herein. Devices, or one or more devices such as in a system, may include one or more processors, memories, interfaces, etc.
[0216] The communication described herein can be determined, generated, sent, and / or received using any number of messages, information elements, fields, parameters, values, indications, information, bits, etc. While this document may use any of the terms / phrases message, information element, field, parameter, value, indication, information, bit, etc., to describe one or more instances, those skilled in the art will understand that any one or more of these terms, including other such terms, can be used to perform such communication. For example, one or more parameters, fields, and / or information elements (IEs) may contain one or more information objects, values, and / or any other information. An information object may contain one or more other objects. At least some (or all) of the parameters, fields, IEs, etc., may be used and may be interchangeable depending on the context. Where a meaning or definition is given, such meaning or definition shall prevail.
[0217] One or more elements in the examples described herein can be implemented as modules. A module can be an element that performs a defined function and / or has a defined interface to other elements. Modules can be implemented as hardware, software combined with hardware, firmware, wet hardware (e.g., hardware with biological elements), or a combination thereof, all of which can be behaviorally equivalent. For example, a module can be implemented as software routines written in a computer language configured to be executed by a hardware machine (such as C, C++, Fortran, Java, Basic, Matlab, etc.) or a modeling / simulation program (such as Simulink, Stateflow, GNU Octave, or LabVIEW MathScript). Alternatively or concurrently, modules can be implemented using physical hardware that incorporates discrete or programmable analog, digital, and / or quantum hardware. Examples of programmable hardware can include: computers, microcontrollers, microprocessors, application-specific integrated circuits (ASICs); field-programmable gate arrays (FPGAs); and / or complex programmable logic devices (CPLDs). Computers, microcontrollers, and / or microprocessors can be programmed using languages such as assembly, C, C++, etc. FPGAs, ASICs, and CPLDs are typically programmed using hardware description languages (HDLs), such as VHSIC Hardware Description Language (VHDL) or Verilog. These languages configure connections between internal hardware modules with limited functionality on a programmable device. The techniques mentioned above can be combined to achieve the desired functional modules.
[0218] One or more operations described herein may be conditional. For example, one or more operations may be performed if certain criteria are met in a computing device, communication device, encoder, decoder, network, or a combination thereof. Example criteria may be based on one or more conditions, such as device configuration, traffic load, initial system settings, packet size, service characteristics, or a combination thereof. Various instances may be used if the one or more criteria are met. Any part of the instances described herein may be implemented in any order and based on any conditions.
[0219] Although examples have been described above, features and / or steps of those examples can be combined, divided, omitted, rearranged, modified, and / or expanded in any desired manner. Various changes, modifications, and improvements will readily occur to those skilled in the art. While not expressly stated herein, such changes, modifications, and improvements are intended to be part of this specification and are intended to be within the spirit and scope of the description herein. Therefore, the above description is illustrative only and not restrictive.
Claims
1. A method comprising: Determine the first point in three-dimensional (3D) space that lies within the TriSoup triangle; Determine a second point from which a vector is shifted from the first point; and At least one voxel in the set of voxels representing the point cloud is determined by voxelizing the first point and the second point.
2. The method of claim 1, wherein the point cloud comprises a decoded point cloud.
3. The method of claim 1, wherein the first point located within the TriSoup triangle includes the point: Located on the side of the TriSoup triangle; or It is located within the TriSoup triangle.
4. The method according to any one of claims 1 to 3, wherein the second point is located outside the TriSoup triangle.
5. The method according to any one of claims 1 to 4, wherein the TriSoup triangle comprises three vertices, and wherein at least two of the three vertices are along the two TriSoup edges of the cuboid associated with the TriSoup node.
6. The method according to any one of claims 1 to 5, wherein determining the first point located within the TriSoup triangle comprises: The first point is located at the intersection of the TriSoup triangle and the light rays extending parallel to the coordinate axes in the 3D space.
7. The method according to any one of claims 1 to 6, wherein the TriSoup triangle comprises three vertices; and wherein the first point is determined using the Möller-Trumbore algorithm with the three vertices of the TriSoup triangle and the ray.
8. The method according to any one of claims 1 to 7, wherein determining at least one voxel comprises: The first point is voxelized to determine the first voxel; The second point is voxelized to determine the second voxel; and The at least one voxel includes at least one of the first voxel and the second voxel.
9. The method according to any one of claims 1 to 8, wherein the first point and the second point are voxelized into at most two voxels of the point cloud.
10. The method according to any one of claims 1 to 9, wherein the vector has a magnitude equal to a predetermined value.
11. The method according to any one of claims 1 to 10, further comprising receiving an indication of a value, wherein the vector has a magnitude equal to the value.
12. The method according to any one of claims 1 to 11, wherein the second point is determined based on adding the vector to the first point; and the method further comprises: The third point is determined by subtracting the vector from the first point; The voxelization includes voxelizing the first point, the second point, and the third point to determine at least one voxel of the point cloud.
13. A computing device comprising: One or more processors; and A memory that stores instructions, which, when executed, cause the computing device to perform the method according to any one of claims 1 to 12.
14. A system comprising: A first computing device, the first computing device being configured to perform the method according to any one of claims 1 to 12; and A second computing device is configured to encode the point cloud.
15. A computer-readable medium storing instructions that, when executed, cause the method according to any one of claims 1 to 12 to be performed.