Laser angle coding of angular and azimuthal patterns in geometry-based point cloud compression
Patent Information
- Application Number
- CN202180023586.1
- Authority / Receiving Office
- CN · China
- Patent Type
- Patents(China)
- Current Assignee / Owner
- Priority Date
- 2021-04-07
- Filing Date
- 2021-04-08
- Publication Date
- 2026-10-27
- Estimated Expiration
- 2041-04-08
Smart Images

Figure CN115315725B_ABST
Abstract
Description
[0001] This application claims priority to U.S. Patent Application No. 17 / 224,551, filed April 7, 2021; U.S. Provisional Patent Application No. 63 / 007,282, filed April 8, 2020; U.S. Provisional Patent Application No. 63 / 009,940, filed April 14, 2020; and U.S. Provisional Patent Application No. 63 / 036,799, filed June 9, 2020, the entire contents of each of which are incorporated herein by reference. Technical Field
[0002] This disclosure relates to point cloud encoding and decoding. Background Technology
[0003] A point cloud is a collection of points in three-dimensional space. These points can correspond to points on objects within that space. Therefore, point clouds can be used to represent the physical content of three-dimensional space. Point clouds are useful in many situations. For example, point clouds can be used to represent the location of objects on a road in the context of an autonomous vehicle. In another example, point clouds can be used to represent the physical content of an environment in order to locate virtual objects in augmented reality (AR) or mixed reality (MR) applications. Point cloud compression is the process of encoding and decoding point clouds. Encoding point clouds reduces the amount of data required to store and transmit them. Summary of the Invention
[0004] Generally, this disclosure describes techniques for decoding laser angles in angular and azimuthal modes within the Geometry-Based Point Cloud Compression (G-PCC) standard (which is being developed within the 3D Graphics (3DG) working group of the Moving Picture Experts Group (MPEG)). The G-PCC standard provides syntax elements associated with angular and azimuthal modes. These syntax elements include syntax elements indicating the laser angles of individual laser beams and syntax elements indicating the number of probes in the azimuthal direction (e.g., during a complete rotation of the laser beam or other angular ranges of the laser beam). This disclosure describes techniques that can improve the decoding efficiency of these syntax elements.
[0005] In one example, this disclosure describes an apparatus including: a memory configured to store point cloud data; and one or more processors coupled to the memory and implemented in circuitry, the one or more processors being configured to: obtain a first laser angle; obtain a second laser angle; obtain a laser angle difference of a third laser angle; determine a predicted value based on the first laser angle and the second laser angle; and determine a third laser angle based on the laser angle difference between the predicted value and the third laser angle.
[0006] In another example, this disclosure describes an apparatus including: a memory configured to store point cloud data; and one or more processors coupled to the memory and implemented in circuitry, the one or more processors being configured to: obtain a first laser angle; obtain a second laser angle; determine a prediction value based on the first laser angle and the second laser angle; and encode a laser angle difference of a third laser angle, wherein the laser angle difference is equal to the difference between the third laser angle and the prediction value.
[0007] In another example, this disclosure describes a method comprising: obtaining a first laser angle; obtaining a second laser angle; obtaining a laser angle difference of a third laser angle; determining a predicted value based on the first laser angle and the second laser angle; and determining a third laser angle based on the laser angle difference between the predicted value and the third laser angle.
[0008] In another example, this disclosure describes a method comprising: obtaining a first laser angle; obtaining a second laser angle; determining a predicted value based on the first laser angle and the second laser angle; and encoding a laser angle difference of a third laser angle, wherein the laser angle difference is equal to the difference between the third laser angle and the predicted value.
[0009] In another example, this disclosure describes an apparatus comprising: components for obtaining a first laser angle; components for obtaining a second laser angle; components for obtaining a laser angle difference of a third laser angle; components for determining a predicted value based on the first laser angle and the second laser angle; and components for determining a third laser angle based on the predicted value and the laser angle difference of the third laser angle.
[0010] In another example, this disclosure describes an apparatus including: components for obtaining a first laser angle; components for obtaining a second laser angle; components for determining a predicted value based on the first laser angle and the second laser angle; and components for encoding a laser angle difference of a third laser angle, wherein the laser angle difference is equal to the difference between the third laser angle and the predicted value.
[0011] In another example, this disclosure describes a computer-readable storage medium having instructions thereon that, when executed, cause one or more processors to: obtain a first laser angle; obtain a second laser angle; obtain a laser angle difference syntax element for a third laser angle, wherein the laser angle difference syntax element indicates the laser angle difference of the third laser angle; determine a predicted value based on the first laser angle and the second laser angle; and determine a third laser angle based on the predicted value and the laser angle difference of the third laser angle.
[0012] In another example, this disclosure describes a computer-readable storage medium having instructions thereon that, when executed, cause one or more processors to: obtain a first laser angle; obtain a second laser angle; determine a predicted value based on the first and second laser angles; and encode a laser angle difference of a third laser angle, wherein the laser angle difference is equal to the difference between the third laser angle and the predicted value.
[0013] In another example, this disclosure describes an apparatus including: a memory configured to store point cloud data; and one or more processors coupled to the memory and implemented in circuitry, the one or more processors being configured to: obtain a value of a first laser, the value of the first laser indicating the number of probes in the azimuth direction of the first laser; decode a syntax element of a second laser, wherein the syntax element of the second laser indicates the difference between the value of the first laser and the value of the second laser, the value of the second laser indicating the number of probes in the azimuth direction of the second laser; determine a value of a second laser indicating the number of probes in the azimuth direction of the second laser based on the first value and the indication of the difference between the value of the first laser and the value of the second laser; and decode points in the point cloud data based on the number of probes in the azimuth direction of the second laser.
[0014] In another example, this disclosure describes an apparatus including: a memory configured to store point cloud data; and one or more processors coupled to the memory and implemented in circuitry, the one or more processors being configured to: acquire the point cloud data; determine the value of a first laser, the value of the first laser indicating the number of probes in the azimuth direction of the first laser; encode syntax elements of a second laser, wherein the syntax elements of the second laser indicate the difference between the value of the first laser and the value of the second laser, the value of the second laser indicating the number of probes in the azimuth direction of the second laser; and encode points in the point cloud data based on the number of probes in the azimuth direction of the second laser.
[0015] In another example, this disclosure describes a method for encoding point cloud data, the method comprising: obtaining point cloud data; determining a value of a first laser, the value of the first laser indicating the number of probes in the azimuth direction of the first laser; encoding a syntax element of a second laser, wherein the syntax element of the second laser indicates the difference between the value of the first laser and the value of the second laser, the value of the second laser indicating the number of probes in the azimuth direction of the second laser; and encoding points in the point cloud data based on the number of probes in the azimuth direction of the second laser.
[0016] In another example, this disclosure describes an apparatus for decoding point cloud data, comprising: means for obtaining a value of a first laser, the value of which indicates the number of probes in the azimuth direction of the first laser; means for decoding a syntax element of a second laser, wherein the syntax element of the second laser indicates the difference between the value of the first laser and the value of the second laser, the value of the second laser indicating the number of probes in the azimuth direction of the second laser; means for determining a value of the second laser indicating the number of probes in the azimuth direction of the second laser based on the first value and the indication of the difference between the value of the first laser and the value of the second laser; and means for decoding points in the point cloud data based on the number of probes in the azimuth direction of the second laser.
[0017] In another example, this disclosure describes an apparatus for encoding point cloud data, the apparatus comprising: components for acquiring the point cloud data; components for determining the value of a first laser, the value of the first laser indicating the number of probes in the azimuth direction of the first laser; components for encoding syntax elements of a second laser, wherein the syntax elements of the second laser indicate the difference between the value of the first laser and the value of the second laser, the value of the second laser indicating the number of probes in the azimuth direction of the second laser; and components for encoding points in the point cloud data based on the number of probes in the azimuth direction of the second laser.
[0018] In another example, this disclosure describes a computer-readable storage medium having instructions thereon that, when executed, cause one or more processors to: obtain a value of a first laser, the value of the first laser indicating the number of probes in the azimuth direction of the first laser; decode a syntax element of a second laser, wherein the syntax element of the second laser indicates the difference between the value of the first laser and the value of the second laser, the value of the second laser indicating the number of probes in the azimuth direction of the second laser; determine a value of a second laser indicating the number of probes in the azimuth direction of the second laser based on the first value and the indication of the difference between the value of the first laser and the value of the second laser; and decode points in point cloud data based on the number of probes in the azimuth direction of the second laser.
[0019] In another example, this disclosure describes a computer-readable storage medium having instructions thereon that, when executed, cause one or more processors to: acquire point cloud data; determine a value of a first laser, the value of which indicates the number of probes in the azimuth direction of the first laser; encode a syntax element of a second laser, wherein the syntax element of the second laser indicates the difference between the value of the first laser and the value of the second laser, the value of which indicates the number of probes in the azimuth direction of the second laser; and encode points in the point cloud based on the number of probes in the azimuth direction of the second laser.
[0020] Details of one or more examples are set forth in the accompanying drawings and the following description. Other features, objects, and advantages will become apparent from the specification, drawings, and claims. Attached Figure Description
[0021] Figure 1 This is a block diagram illustrating an example encoding and decoding system that can perform the techniques of this disclosure.
[0022] Figure 2 This is a block diagram illustrating an example geometric point cloud compression (G-PCC) encoder.
[0023] Figure 3 This is a block diagram showing an example G-PCC decoder.
[0024] Figure 4 This is a conceptual diagram illustrating the occupancy of an example plane in the vertical direction.
[0025] Figure 5 This is a conceptual diagram illustrating a light detection and ranging (LiDAR) sensor that scans points in three-dimensional space.
[0026] Figure 6 This is a conceptual diagram illustrating an example of the angular suitability of a node.
[0027] Figure 7A This is a flowchart illustrating example operation of a G-PCC encoder according to one or more technologies of this disclosure.
[0028] Figure 7B This is a flowchart illustrating an example operation of a G-PCC decoder according to one or more techniques of this disclosure.
[0029] Figure 8A This is a flowchart illustrating example operation of a G-PCC encoder according to one or more technologies of this disclosure.
[0030] Figure 8B This is a flowchart illustrating an example operation of a G-PCC decoder according to one or more techniques of this disclosure.
[0031] Figure 9 This is a conceptual diagram illustrating an example ranging system that can be used with one or more techniques disclosed herein.
[0032] Figure 10 This is a conceptual diagram illustrating an example vehicle-based scenario in which one or more of the technologies disclosed herein may be used.
[0033] Figure 11 This is a conceptual diagram illustrating an example extended reality system in which one or more techniques of this disclosure can be used.
[0034] Figure 12 This is a conceptual diagram illustrating an example mobile device system in which one or more technologies of this disclosure may be used. Detailed Implementation
[0035] A point cloud is a collection of points in three-dimensional (3D) space. Geometry-based point cloud compression (G-PCC) is a method for reducing the amount of data required to store point clouds. A G-PCC encoder can generate an octree as part of the encoding of the point cloud. Each node of the octree corresponds to a cuboid space. For ease of interpretation, this disclosure may, in some cases, refer to a node and the cuboid space corresponding to that node interchangeably. An octree node can have zero or eight child nodes. The child nodes of a parent node correspond to cuboids of the same size within the cuboid space corresponding to the parent node. The positions of the individual points in the point cloud can be decoded relative to the nodes containing those points. If a node does not contain any points of the point cloud, the node is said to be unoccupied. If the node is unoccupied, it may not be necessary to decode additional data about the node. Conversely, if a node contains one or more points of the point cloud, the node is said to be occupied. Nodes can be further subdivided into voxels. The G-PCC encoder can indicate the position of each point in a point cloud by indicating the position of the voxel occupied by the point in the point cloud.
[0036] G-PCC provides several decoding tools to decode the positions occupied by voxels within a node. These decoding tools include an angle decoding mode and an azimuth decoding mode. The angle decoding mode is based on a set of laser beams arranged in a fan-shaped pattern. The laser beams can correspond to actual laser beams (e.g., the laser beams of a lidar device) or can be conceptual. The G-PCC encoder can encode the angles between the laser beams using a high-level syntax structure. If only one laser beam intersects the node, the position of a point within that node can be decoded using only the angle decoding mode. When decoding the position of a point in a node using the angle decoding mode, the G-PCC encoder determines the vertical offset between the point's position and the node's origin. The G-PCC encoder can determine the context based on the position of the laser beams relative to a marker point (e.g., the center point) of the node. The G-PCC encoder can use the determined context to apply context-adaptive arithmetic decoding (CABAC) to encode one or more binary numbers of the syntax element indicating that vertical offset.
[0037] When decoding the position of a point using azimuth decoding mode, the G-PCC encoder can determine the context based on the azimuth sampling position of the laser beam within the node. The G-PCC encoder can then use the determined context to apply CABAC to encode the syntax elements indicating the azimuth offset of the point.
[0038] In some cases, using angle and azimuth modes can lead to higher decoding efficiency because information about how the laser beam intersects with the nodes can improve the selection of context for encoding syntax elements indicating vertical and azimuth offsets. This improved selection of context can result in greater compression during CABAC encoding.
[0039] However, the use of angular modes may depend on knowing the perpendicular angles of the laser beams relative to each other. Therefore, the G-PCC encoder may need to decode the angles between the laser beams. Similarly, the use of azimuth modes may depend on knowing the angles between the azimuth sampling positions. Therefore, the G-PCC encoder may need to decode the number of azimuth sampling positions per rotation for each laser beam. However, decoding the angles between the laser beams and decoding the number of azimuth sampling positions per rotation for each laser beam may increase the decoding overhead of the G-PCC geometry bitstream.
[0040] This disclosure describes techniques that can improve decoding efficiency when decoding the number of sampling positions per azimuth angle and / or rotation angle. For example, this disclosure describes a method for decoding point cloud data, wherein a G-PCC decoder obtains a first laser angle, a second laser angle, and a laser angle difference of a third laser angle. In this example, the G-PCC decoder can determine a prediction value based on the first and second laser angles. The G-PCC decoder can determine the third laser angle based on the prediction value and the laser angle difference of the third laser angle. Based on one of the first, second, and third laser angles, the G-PCC decoder can decode points in the point cloud data. For example, the G-PCC decoder can be arranged to decode point cloud data using the third laser angle. In some examples, the G-PCC decoder can determine the vertical position of points in the point cloud data based on the third laser angle. By determining the third laser angle based on the first and second laser angles, the amount of data required to specify the laser angle difference can be reduced compared to when the G-PCC decoder does not determine the third laser angle based on the first and second laser angles. Therefore, the laser angle difference can be decoded more efficiently.
[0041] In another example, this disclosure describes a method for decoding point cloud data, wherein a G-PCC decoder obtains a value for a first laser. The value of the first laser indicates the number of probes in the azimuth direction of the first laser (e.g., for a complete rotation or other range of the first laser). The G-PCC decoder can also decode a syntax element for a second laser. The syntax element for the second laser indicates the difference between the value of the first laser and the value of the second laser. The value of the second laser indicates the number of probes in the azimuth direction of the second laser (e.g., for a complete rotation or other range of the first laser). Additionally, the G-PCC decoder can determine a value for a second laser indicating the number of probes in the azimuth direction of the second laser based on the first value and the indication of the difference between the first laser value and the second laser value. In other words, based on the value of the first laser and the indication of the difference between the first laser value and the second laser value, the G-PCC decoder can determine a value for a second laser indicating the number of probes in the azimuth direction of the second laser. The G-PCC decoder can decode points in the point cloud data based on the number of probes in the azimuth direction of the second laser. For example, a G-PCC decoder can be configured to decode point cloud data using the number of probes in the azimuth direction of the second laser. By determining the number of probes in the azimuth direction of the second laser based on the difference between the values of the first and second lasers, the amount of data required to specify the number of probes in the azimuth direction of the second laser becomes smaller, and therefore more efficient than directly indicating the number of probes.
[0042] Although this disclosure describes lasers, laser beams, laser candidates, and other terms relating to lasers, these terms are not necessarily limited to instances using physical lasers. Rather, these terms can be used with respect to physical lasers or other ranging techniques. Furthermore, these terms can be used with respect to beams that do not physically exist, but the concept of a beam is used for the purpose of decoding point clouds.
[0043] Figure 1 This is a block diagram illustrating an example encoding and decoding system 100 capable of implementing the techniques of this disclosure. The techniques of this disclosure generally relate to decoding (encoding and / or decoding) point cloud data, i.e., supporting point cloud compression. Generally, point cloud data includes any data used for processing point clouds. This decoding is effective in compressing and / or decompressing point cloud data.
[0044] like Figure 1 As shown, system 100 includes a source device 102 and a target device 116. The source device 102 provides encoded point cloud data to be decoded by the target device 116. Specifically, in... Figure 1In this example, source device 102 provides point cloud data to target device 116 via computer-readable medium 110. Source device 102 and target device 116 can include any of a variety of devices, including desktop computers, laptops, tablets, set-top boxes, mobile phones (such as smartphones), televisions, cameras, display devices, digital media players, video game consoles, video streaming devices, land or sea vehicles, spacecraft, aircraft, robots, lidar equipment, satellites, surveillance or security equipment, etc. In some cases, source device 102 and target device 116 may be equipped for wireless communication.
[0045] exist Figure 1 In the example, source device 102 includes a data source 104, a memory 106, a G-PCC encoder 200, and an output interface 108. Target device 116 includes an input interface 122, a G-PCC decoder 300, a memory 120, and a data consumer 118. The G-PCC encoder 200 of source device 102 and the G-PCC decoder 300 of target device 116 can be configured to apply the techniques disclosed herein related to the simplification of G-PCC corner patterns. Thus, source device 102 represents an example of an encoding device, while target device 116 represents an example of a decoding device. In other examples, source device 102 and target device 116 may include other components or arrangements. For example, source device 102 may receive data (e.g., point cloud data) from an internal or external source. Similarly, target device 116 may interface with an external data consumer, rather than including the data consumer in the same device.
[0046] like Figure 1 The system 100 shown is merely an example. Generally, other digital encoding and / or decoding devices can perform the techniques disclosed herein related to the simplification of G-PCC corner modes. Source device 102 and target device 116 are merely examples of such devices, wherein source device 102 generates decoded data for transmission to target device 116. This disclosure refers to a “decoding” device as a device that performs data decoding (encoding and / or decoding). Thus, G-PCC encoder 200 and G-PCC decoder 300 represent examples of decoding devices, specifically, an encoder and a decoder, respectively. Similarly, the term “decoding” can refer to either encoding or decoding. In some examples, source device 102 and target device 116 can operate in a substantially symmetrical manner, such that each of source device 102 and target device 116 includes both encoding and decoding components. Therefore, system 100 can support unidirectional or bidirectional transmission between source device 102 and target device 116, for example, for streaming, playback, broadcasting, telephone, navigation, and other applications.
[0047] Generally, data source 104 represents the source of data (i.e., raw, unencoded point cloud data) and can provide a sequential series of "frames" of data to G-PCC encoder 200, which encodes the data in the frames. Data source 104 of source device 102 may include point cloud capture devices, such as any of various cameras or sensors, such as a 3D scanner or a light detection and ranging (LiDAR) device, one or more video cameras, an archive containing previously captured data, and / or a data feed interface for receiving data from a data content provider. In this way, data source 104 can generate point clouds. Alternatively or additionally, point cloud data may be generated by a computer from scanners, cameras, sensors, or other data. For example, data source 104 may generate computer-graphics-based data as source data, or produce a combination of real-time data, archived data, and computer-generated data. In each case, G-PCC encoder 200 encodes the captured, pre-captured, or computer-generated data. The G-PCC encoder 200 can rearrange frames from the receiving order (sometimes referred to as the "display order") to a decoding order for decoding. The G-PCC encoder 200 can generate one or more bit streams including encoded data. The source device 102 can then output the encoded data to a computer-readable medium 110 via the output interface 108 for reception and / or retrieval, for example, by the input interface 122 of the target device 116.
[0048] The memory 106 of source device 102 and the memory 120 of target device 116 can represent general-purpose memory. In some examples, memory 106 and memory 120 can store raw data, such as raw data from data source 104 and raw decoded data from G-PCC decoder 300. Additionally or alternatively, memory 106 and memory 120 can store software instructions executable by, for example, G-PCC encoder 200 and G-PCC decoder 300, respectively. Although memory 106 and memory 120 are shown separately from G-PCC encoder 200 and G-PCC decoder 300 in this example, it should be understood that G-PCC encoder 200 and G-PCC decoder 300 may also include internal memory for functionally similar or equivalent purposes. Furthermore, memory 106 and memory 120 can store, for example, encoded data output from G-PCC encoder 200 and input to G-PCC decoder 300. In some examples, portions of memory 106 and memory 120 may be allocated as one or more buffers, for example, to store raw, decoded, and / or encoded data. For instance, memory 106 and memory 120 may store data representing point clouds. In other words, memory 106 and memory 120 may be configured to store point cloud data.
[0049] Computer-readable medium 110 can represent any type of medium or device capable of transmitting encoded data from source device 102 to target device 116. In one example, computer-readable medium 110 represents a communication medium enabling source device 102 to transmit encoded data (e.g., encoded point cloud) directly to target device 116 in real time, for example via a radio frequency network or a computer-based network. According to a communication standard such as a wireless communication protocol, output interface 108 can modulate the transmitted signal including the encoded data, and input interface 122 can demodulate the received transmitted signal. The communication medium can include any wireless or wired communication medium, such as radio frequency (RF) spectrum or one or more physical transmission lines. The communication medium can form part of a packet-based network, such as a local area network, a wide area network, or a global network such as the Internet. The communication medium can include a router, switch, base station, or any other equipment that facilitates communication from source device 102 to target device 116.
[0050] In some examples, source device 102 can output encoded data from output interface 108 to storage device 112. Similarly, target device 116 can access encoded data from storage device 112 via input interface 122. Storage device 112 can include any of a variety of distributed or locally accessed data storage media, such as hard disks, Blu-ray discs, DVDs, CD-ROMs, flash memory, volatile or non-volatile memory, or any other suitable digital storage medium for storing encoded data.
[0051] In some examples, source device 102 may output encoded data to file server 114 or another intermediate storage device that can store the encoded data generated by source device 102. Target device 116 may access the stored data from file server 114 via streaming or downloading. File server 114 may be any type of server device capable of storing and sending encoded data to target device 116. File server 114 may represent, for example, a web server (e.g., for a website), a file transfer protocol (FTP) server, a content delivery network device, or a network attached storage (NAS) device. Target device 116 may access the encoded data from file server 114 via any standard data connection including an Internet connection. This may include wireless channels (e.g., Wi-Fi connections), wired connections (e.g., digital subscriber line (DSL), cable modems, etc.), or a combination of both suitable for accessing encoded data stored on file server 114. File server 114 and input interface 122 may be configured to operate according to streaming protocols, download protocols, or a combination thereof.
[0052] Output interface 108 and input interface 122 may represent a wireless transmitter / receiver, a modem, a wired networking component (e.g., an Ethernet card), a wireless communication component operating according to any of the various IEEE 802.11 standards, or other physical components. In examples where output interface 108 and input interface 122 include wireless components, output interface 108 and input interface 122 may be configured to transmit data such as encoded data according to cellular communication standards such as 4G, 4G-LTE (Long Term Evolution), LTE Advanced, 5G, or similar standards. In some examples where output interface 108 includes a wireless transmitter, output interface 108 and input interface 122 may be configured to transmit data such as encoded data according to other wireless standards, such as the IEEE 802.11 specification, the IEEE 802.15 specification (e.g., ZigBee™), Bluetooth™ standards, etc. In some examples, source device 102 and / or target device 116 may include their respective system-on-a-chip (SoC) devices. For example, source device 102 may include a SoC device to perform functions belonging to G-PCC encoder 200 and / or output interface 108, and target device 116 may include a SoC device to perform functions belonging to G-PCC decoder 300 and / or input interface 122.
[0053] The technology disclosed herein can be applied to encoding and decoding of any application supporting a variety of applications, such as communication between autonomous vehicles, communication between scanners, cameras, sensors and processing devices such as local or remote servers, geographic mapping, or other applications.
[0054] In some examples, source device 102 and / or target device 116 are mobile devices, such as mobile phones, augmented reality (AR) devices, or mixed reality (MR) devices. In these examples, source device 102 may generate and encode point clouds as part of a process of mapping the local environment of source device 102. Regarding AR and MR examples, target device 116 may use the point clouds to generate a virtual environment based on the local environment of source device 102. In some examples, source device 102 and / or target device 116 are land or sea vehicles, spacecraft, or aircraft. In such examples, source device 102 may generate and encode point clouds as part of a process of mapping the environment of the source device, for example, for autonomous navigation, crash investigation, and other purposes.
[0055] The input interface 122 of the target device 116 receives an encoded bitstream from a computer-readable medium 110 (e.g., a communication medium, storage device 112, file server 114, etc.). The encoded bitstream may include signaling information defined by the G-PCC encoder 200 and also used by the G-PCC decoder 300, such as syntax elements having values describing the characteristics and / or processing of decoding units (e.g., slices, pictures, picture groups, sequences, etc.). The data consumer 118 uses the decoded data. For example, the data consumer 118 may use the decoded data to determine the location of a physical object. In some examples, the data consumer 118 may include a display that renders an image based on a point cloud. For example, the data consumer 118 may use points from the point cloud as vertices of a polygon and may use the color attributes of the points from the point cloud to shade the polygon. In this example, the data consumer 118 may then rasterize the polygon to render a computer-generated image based on the shaded polygon.
[0056] The G-PCC encoder 200 and G-PCC decoder 300 can each be implemented as any of a variety of suitable encoder and / or decoder circuits, such as one or more microprocessors, digital signal processors (DSPs), application-specific integrated circuits (ASICs), field-programmable gate arrays (FPGAs), discrete logic, software, hardware, firmware, or any combination thereof. When the technology is implemented in part in software, the device may store instructions for the software in a suitable non-transitory computer-readable medium and use one or more processors to execute those instructions in hardware to perform the technology of this disclosure. Each of the G-PCC encoder 200 and G-PCC decoder 300 may be included in one or more encoders or decoders, either of which may be integrated as part of a combined encoder / decoder (CODEC) in the respective device. Devices including the G-PCC encoder 200 and / or G-PCC decoder 300 may include one or more integrated circuits, microprocessors, and / or other types of devices.
[0057] The G-PCC encoder 200 and G-PCC decoder 300 can operate according to decoding standards, such as the Video Point Cloud Compression (V-PCC) standard or the Geometric Point Cloud Compression (G-PCC) standard. This disclosure generally relates to the decoding (e.g., encoding and decoding) of images, including the process of encoding or decoding data. The encoded bitstream generally includes a series of values for syntax elements representing decoding decisions (e.g., decoding modes).
[0058] Generally, this disclosure may relate to "signaling notification" of certain information, such as syntax elements. The term "signaling notification" can generally refer to communication of values for syntax elements and / or other data used to decode encoded data. That is, the G-PCC encoder 200 may signal the values of syntax elements in the bitstream. Generally, signaling notification refers to generating values in the bitstream. As described above, the source device 102 may transmit the bitstream to the target device 116 substantially in real time (or non-real time, such as when syntax elements are stored in storage device 112 for later retrieval by the target device 116).
[0059] ISO / IEC MPEG (JTC 1 / SC 29 / WG11) is investigating the potential need for standardization of point cloud decoding techniques with compression capabilities significantly exceeding current methods, with the goal of establishing a standard. This exploratory activity is being undertaken collaboratively with the 3D Graphics Group (3DG) to evaluate compression technology designs proposed by experts in the field.
[0060] Point cloud compression activities fall into two distinct categories. The first is “Video Point Cloud Compression” (V-PCC), which segments a 3D object and projects these segments onto multiple 2D planes (represented as “patches” in a 2D frame). These planes are then decoded by a conventional 2D video decoder, such as an Efficient Video Coding (HEVC) (ITU-T H.265) decoder. The second method is “Geometry-Based Point Cloud Compression” (G-PCC), which directly compresses the 3D geometry (i.e., the location of a set of points in 3D space) and the associated attribute values (for each point associated with the 3D geometry). G-PCC addresses the compression problems of Class 1 (static point clouds) and Class 3 (dynamically acquired point clouds). The latest draft of the G-PCC standard is available in January 2020, Brussels, Belgium, G-PCC DIS, ISO / IEC JTC1 / SC29 / WG11w19088 (hereinafter referred to as "w19088"), and the description of the decoder is available in January 2020, Brussels, Belgium, G-PCC Codec Description v6, ISO / IEC JTC1 / SC29 / WG11 w19091 (hereinafter referred to as "w19091").
[0061] A point cloud is a collection of points in three-dimensional space and can have properties associated with those points. These properties can be color information such as R, G, B or Y, Cb, Cr, or reflectivity information, or other attributes. Point clouds can be captured by various cameras or sensors, such as LiDAR sensors and 3D scanners, and can also be computer-generated. Point cloud data is used in a variety of applications, including but not limited to architecture (modeling), graphics (3D models for visualization and animation), the automotive industry (LiDAR sensors for navigation), and in mobile phones, tablets, and other scenarios.
[0062] The 3D space occupied by point cloud data can be enclosed by virtual bounding boxes. The positions of points within the bounding box can be represented with a certain precision; therefore, the positions of one or more points can be quantized based on this precision. At the smallest level, the bounding box is divided into voxels, which are the smallest spatial units represented by a unit cube. A voxel within the bounding box can be associated with zero, one, or more points. The bounding box can be subdivided into multiple cubic / cuboid regions, which can be called tiles. Each tile can be decoded into one or more stripes. The subdivision of the bounding box into stripes and tiles can be based on the number of points in each part, or on other considerations (e.g., a specific region can be decoded into a tile). Strip regions can be further subdivided using a splitting decision similar to that in a video decoder.
[0063] Figure 2 Provides an overview of the G-PCC encoder 200. Figure 3 This provides an overview of the G-PCC decoder 300. The modules shown are logical and do not necessarily correspond one-to-one with the implementation code in the reference implementation of the G-PCC decoder, namely the TMC13 test model software studied by ISO / IEC MPEG (JTC1 / SC 29 / WG11).
[0064] In both the G-PCC encoder 200 and the G-PCC decoder 300, the point cloud locations are decoded first. Attribute decoding depends on the decoded geometry. Figure 2 and Figure 3 In the diagram, the gray-shaded modules are typically used for Category 1 data. The diagonally shaded modules are typically used for Category 3 data. All other modules are interchangeable between Category 1 and Category 3.
[0065] For Category 3 data, the compressed geometry is typically represented as an octree, extending from the root down to the leaf level of each voxel. For Category 1 data, the compressed geometry is typically represented by a pruned octree (i.e., an octree extending from the root down to the leaf level of blocks larger than voxels) plus a model of the surface within each leaf of the pruned octree. Thus, both Category 1 and Category 3 data share the octree decoding mechanism, while Category 1 data can also be approximated by a surface model to approximate the voxels within each leaf. The surface model used is triangulation, with each block containing 1-10 triangles, resulting in a triangle soup. Therefore, the Category 1 geometry decoder is called a trisoup geometry decoder, while the Category 3 geometry decoder is called an octree geometry decoder.
[0066] At each node of the octree, the occupancy of one or more of its child nodes (up to eight nodes) is signaled (if not inferred). Multiple neighborhoods are specified, including (a) nodes sharing a face with the current octree node, (b) nodes sharing a face, edge, or vertex with the current octree node, etc. Within each neighborhood, the occupancy of a node and / or its child nodes can be used to predict the occupancy of the current node or its child nodes. For points sparsely populated in some nodes of the octree, the decoder (e.g., implemented by G-PCC encoder 200 and G-PCC decoder 300) also supports a direct decoding mode, where the 3D position of the point is directly encoded. A flag can be signaled to indicate that the direct mode is signaled. At the lowest level, the number of points associated with an octree node / leaf node can also be decoded.
[0067] Once the geometry is decoded, the attributes corresponding to the geometric points are also decoded. When multiple attribute points correspond to a single reconstructed / decoded geometric point, the attribute values representing the reconstructed point can be derived.
[0068] G-PCC employs three attribute decoding methods: Region Adaptive Hierarchical Transformation (RAHT) decoding, interpolation-based hierarchical nearest neighbor prediction (prediction transform), and interpolation-based hierarchical nearest neighbor prediction (lifting transform) with update / lifting steps. RAHT and lifting transform are typically used for Class 1 data, while prediction transform is typically used for Class 3 data. However, any method can be used for any data, and, similar to the geometry decoder in G-PCC, the attribute decoding method used to decode point clouds is specified in the bitstream.
[0069] Attribute decoding can be performed at the level of detail (LoD), where a finer representation of the point cloud attributes can be obtained for each level of detail. Each level of detail can be specified based on a distance metric to neighboring nodes or based on sampling distance.
[0070] At the G-PCC encoder 200, the residuals obtained as the output of the decoding method for attributes are quantized. Context-adaptive arithmetic decoding can be used to decode the quantized residuals. To apply CABAC encoding to syntax elements, the G-PCC encoder 200 can binary the values of the syntax elements to form a series of one or more bits, referred to as "bins". Additionally, the G-PCC encoder 200 can identify the decoding context (i.e., "context"). The decoding context can identify the probability of a binary number having a specific value. For example, the decoding context can indicate a probability of 0.7 for decoding a binary number with a value of 0 and a probability of 0.3 for decoding a binary number with a value of 1. After identifying the decoding context, the G-PCC encoder 200 can divide the interval into lower and higher sub-intervals. One of these sub-intervals can be associated with the value 0, and another sub-interval can be associated with the value 1. The width of the sub-interval can be proportional to the probability indicated by the associated value by the identified decoding context. If the binary number of a syntax element has a value associated with a lower sub-interval, the encoded value can be equal to the lower boundary of the lower sub-interval. If the same binary number of a syntax element has a value associated with a higher sub-interval, the encoded value can be equal to the lower boundary of the higher sub-interval. To encode the next binary number of a syntax element, the G-PCC encoder 200 can repeat these steps at intervals of sub-intervals associated with the value of the encoded bit. When the G-PCC encoder 200 repeats these steps for the next binary number, it can use a probability modified based on the probability indicated by the recognized decoding context and the actual value of the encoded binary number.
[0071] When the G-PCC decoder 300 performs CABAC decoding on the value of a syntax element, it can identify the decoding context. The G-PCC decoder 300 can then divide an interval into lower and higher sub-intervals. One sub-interval can be associated with the value 0, and the other with the value 1. The width of these sub-intervals can be proportional to the probability indicated by the associated value from the identified decoding context. If the encoded value is within the lower sub-interval, the G-PCC decoder 300 can decode the binary number having the value associated with the lower sub-interval. If the encoded value is within the higher sub-interval, the G-PCC decoder 300 can decode the binary number having the value associated with the higher sub-interval. To decode the next binary number of the syntax element, the G-PCC decoder 300 can repeat these steps using intervals that are sub-intervals containing the encoded value. When the G-PCC decoder 300 repeats these steps for the next binary number, it can use probabilities modified based on the probabilities indicated by the recognized decoding context and the decoded binary number. The G-PCC decoder 300 can then debind the binary number to recover the values of the syntax elements.
[0072] exist Figure 2 In the example, the G-PCC encoder 200 may include a coordinate transformation unit 202, a color transformation unit 204, a voxelization unit 206, an attribute transfer unit 208, an octree analysis unit 210, a surface approximation analysis unit 212, an arithmetic coding unit 214, a geometric reconstruction unit 216, a RAHT unit 218, a LOD generation unit 220, a lifting unit 222, a coefficient quantization unit 224, and an arithmetic coding unit 226.
[0073] like Figure 2 As shown in the example, the G-PCC encoder 200 can receive the location set and attribute set of points in a point cloud. The G-PCC encoder 200 can receive data from data source 104 ( Figure 1 The G-PCC encoder 200 obtains the location set and attribute set of the points in the point cloud. The location can include the coordinates of the points in the point cloud. The attributes can include information about the points in the point cloud, such as the color associated with the points in the point cloud. The G-PCC encoder 200 can generate a geometric bitstream 203, which includes an encoded representation of the locations of the points in the point cloud. The G-PCC encoder 200 can also generate an attribute bitstream 205, which includes an encoded representation of the attribute set.
[0074] The coordinate transformation unit 202 can apply transformations to the coordinates of a point to transform the coordinates from the initial domain to the transformation domain. The transformed coordinates can be referred to as transformed coordinates. The color transformation unit 204 can apply transformations to transform the color information of an attribute to a different domain. For example, the color transformation unit 204 can transform color information from the RGB color space to the YCbCr color space.
[0075] In addition, Figure 2 In the example, voxelization unit 206 can voxelize the transformed coordinates. Voxelization of the transformed coordinates can include quantization and removal of some points in the point cloud. In other words, multiple points in the point cloud can be subsumed into a single "voxel," which can then be considered as a single point in some respects. Furthermore, octree analysis unit 210 can generate an octree based on the voxelized transformed coordinates. Additionally, in Figure 2 In the example, surface approximation analysis unit 212 can analyze points to potentially determine a surface representation of the set of points. Arithmetic coding unit 214 can entropy-encode syntax elements representing information about the octree and / or surface determined by surface approximation analysis unit 212. G-PCC encoder 200 can output these syntax elements in geometric bitstream 203. Geometric bitstream 203 may also include other syntax elements, including syntax elements that are not arithmetic-coded.
[0076] The geometric reconstruction unit 216 can reconstruct the transformed coordinates of points in the point cloud based on an octree, data representing the surface determined by the surface approximation analysis unit 212, and / or other information. Due to voxelization and surface approximation, the number of transformed coordinates reconstructed by the geometric reconstruction unit 216 may differ from the original number of points in the point cloud. The resulting points may be referred to as reconstructed points. The attribute transfer unit 208 can transfer attributes of the original points in the point cloud to the reconstructed points.
[0077] Furthermore, RAHT unit 218 can apply RAHT decoding to the attributes of the reconstructed points. Alternatively or additionally, LOD generation unit 220 and lifting unit 222 can apply LOD processing and lifting to the attributes of the reconstructed points, respectively. RAHT unit 218 and lifting unit 222 can generate coefficients based on the attributes. Coefficient quantization unit 224 can quantize the coefficients generated by RAHT unit 218 or lifting unit 222. Arithmetic coding unit 226 can apply arithmetic decoding to the syntax elements representing the quantized coefficients. G-PCC encoder 200 can output these syntax elements in attribute bitstream 205. Attribute bitstream 205 may also include other syntax elements, including non-arithmically coded syntax elements.
[0078] exist Figure 3In the example, the G-PCC decoder 300 may include a geometric arithmetic decoding unit 302, an attribute arithmetic decoding unit 304, an octree synthesis unit 306, an inverse quantization unit 308, a surface approximation synthesis unit 310, a geometric reconstruction unit 312, a RAHT unit 314, an LOD generation unit 316, an inverse lifting unit 318, an inverse coordinate transformation unit 320, and an inverse color transformation unit 322.
[0079] The G-PCC decoder 300 can obtain a geometric bitstream 203 and an attribute bitstream 205. The geometric arithmetic decoding unit 302 of the decoder 300 can apply arithmetic decoding (e.g., context-adaptive binary arithmetic decoding (CABAC) or other types of arithmetic decoding) to the syntax elements in the geometric bitstream. Similarly, the attribute arithmetic decoding unit 304 can apply arithmetic decoding to the syntax elements in the attribute bitstream.
[0080] Octree synthesis unit 306 can synthesize octrees based on syntax elements parsed from the geometric bitstream. In the case of using surface approximation in the geometric bitstream, surface approximation synthesis unit 310 can determine the surface model based on syntax elements parsed from the geometric bitstream and based on the octree.
[0081] Furthermore, the geometric reconstruction unit 312 can perform reconstruction to determine the coordinates of points in the point cloud. The inverse coordinate transformation unit 320 can apply an inverse transformation to the reconstructed coordinates to transform the reconstructed coordinates (positions) of points in the point cloud from the transformation domain back to the initial domain.
[0082] Additionally, in Figure 3 In the example, the inverse quantization unit 308 can inverse quantize the attribute value. The attribute value can be based on syntax elements obtained from the attribute bitstream (e.g., including syntax elements decoded by the attribute arithmetic decoding unit 304).
[0083] Depending on how the attribute values are encoded, RAHT unit 314 can perform RAHT decoding to determine the color values of the points in the point cloud based on the inverse quantized attribute values. Alternatively, LOD generation unit 316 and inverse lifting unit 318 can use level-of-detail techniques to determine the color values of the points in the point cloud.
[0084] In addition, Figure 3 In the example, the inverse color transformation unit 322 can apply an inverse color transformation to the color value. The inverse color transformation can be the inverse of the color transformation applied by the color transformation unit 204 of the encoder 200. For example, the color transformation unit 204 can transform color information from the RGB color space to the YCbCr color space. Correspondingly, the inverse color transformation unit 322 can transform color information from the YCbCr color space to the RGB color space.
[0085] Show Figure 2 and Figure 3 Various units help understand the operations performed by the encoder 200 and decoder 300. These units can be implemented as fixed-function circuits, programmable circuits, or a combination thereof. A fixed-function circuit is a circuit that provides a specific function and is pre-programmed for the operations it can perform. A programmable circuit is a circuit that can be programmed to perform various tasks and provides flexible functionality in the operations it can perform. For example, a programmable circuit can execute software or firmware that causes the programmable circuit to operate in a manner defined by the instructions of the software or firmware. A fixed-function circuit can execute software instructions (e.g., to receive or output parameters), but the type of operation performed by a fixed-function circuit is typically immutable. In some examples, one or more units may be different circuit blocks (fixed-function or programmable), and in some examples, one or more units may be integrated circuits.
[0086] The G-PCC encoder 200 and G-PCC decoder 300 can support corner decoding mode. Corner decoding mode was adopted at the 129th MPEG conference in Brussels, Belgium. The following description is based on the original MPEG contribution documents: October 2019, Geneva, Switzerland, ISO / IEC JTC1 / SC29 / WG11 MPEG / M50642, “[GPCC][CE 13.22 related] An improvement of the planar coding mode” by Sébastien Lasserre and Jonathan Taquet; and w19088.
[0087] Angular decoding mode can be used in conjunction with planar mode (e.g., as in July 2019, Gothenburg, Sweden, ISO / IEC JTC1 / SC29 / WG11 MPEG / M48906, Sébastien Lasserre and David Flynn, “[GPCC] Planarmode in octree-based geometry coding”), and the decoding of vertical (z) plane position syntax elements can be improved by using knowledge of the position and angle of the sensed laser beam in a typical lidar sensor (see, for example, June 2020, Brussels, Belgium, ISO / IEC JTC1 / SC29 / WG11 MPEG / M51594, Sébastien Lasserre and Jonathan Taquet, “[GPCC] CE 13.22 report on angular mode”).
[0088] Planar mode is a technique that can improve the decoding of occupied nodes. Planar mode can be used when all occupied child nodes of a node are adjacent to a plane and on one side of the plane associated with coordinate values in the dimension orthogonal to that plane. For example, a planar mode can be used on a node when all occupied child nodes are above or below a horizontal plane passing through the node's center point, or when all occupied child nodes are near or far from a vertical plane passing through the node's center point. The G-PCC encoder 200 can encode planar position syntax elements (i.e., syntax elements indicating planar positions) for each of the x, y, and z dimensions. The planar position syntax element for a dimension indicates whether the plane orthogonal to that dimension is in a first position or a second position. If the plane is in the first position, it corresponds to the node's boundary. If the plane is in the second position, it passes through the node's 3D center. Therefore, for the z-dimensional dimension, the G-PCC encoder 200 or the G-PCC decoder 300 can decode the vertical plane position of the planar pattern of the nodes of the octree representing the three-dimensional position of points in the point cloud.
[0089] Figure 4 This is a conceptual diagram illustrating the occupancy of an example plane in the vertical direction. Figure 4 In the example, node 400 is divided into eight child nodes 402A to 402HH (collectively referred to as "child node 402"). Child node 402 can be occupied or unoccupied. Figure 4 In the example, occupied child nodes are shown in shaded areas. When one or more child nodes 402A to 402HD are occupied and no child nodes 402E to 402H are occupied, the G-PCC encoder 200 can encode the plane position syntax element with a value of 0 to indicate that all occupied child nodes are adjacent on the positive side of the plane at the minimum z-coordinate of node 400 (i.e., the side with the increasing z-coordinate). When one or more child nodes 402E to 402H are occupied and no child nodes 402A to 402HD are occupied, the G-PCC encoder 200 can encode the plane position syntax element with a value of 1 to indicate that all occupied child nodes are adjacent on the positive side of the plane at the midpoint z-coordinate of node 400. In this way, the plane position syntax element can indicate the vertical plane position of the planar pattern in node 400.
[0090] Figure 5 This is a conceptual diagram illustrating a laser package 500 (such as a lidar sensor or other system including one or more lasers) scanning points in three-dimensional space. (Data source 104) Figure 1 This can include laser encapsulation 500. For example... Figure 5As shown, a laser-encapsulated 500 can be used to capture point clouds, i.e., the sensor scans points in 3D space. However, it should be understood that some point clouds are not generated by the actual lidar sensor, but can be encoded to appear as if they were generated by a lidar sensor. Figure 5 In the example, laser package 500 includes a lidar head 502 comprising multiple lasers 504A to 504E (collectively referred to as "lasers 504") arranged in a vertical plane at different angles relative to the origin. Laser package 500 can rotate about a vertical axis 508. Laser package 500 can use the returned laser light to determine the distance and position of points in a point cloud. Laser beams 506A to 506E (collectively referred to as "laser beams 506") emitted by lasers 504 of laser package 500 can be characterized by a set of parameters. The distances indicated by arrows 510 and 512 represent example laser correction values for lasers 504B and 504A, respectively.
[0091] The angle decoding mode can sense the position and elevation angle of the laser beam 506 using a typical lidar sensor (in... Figure 5 The knowledge of θ representation is used to improve the decoding of position syntax elements in the vertical (z) plane (see, for example, "[GPCC]CE 13.22 report on angular mode", Sébastien Lasserre and Jonathan Taquet, ISO / IEC JTC1 / SC29 / WG11 MPEG / M51594, Brussels, Belgium, January 2020).
[0092] Furthermore, angular decoding mode can optionally be used to improve the decoding of vertical z-position bits in Inference Direct Decoding Mode (IDCM) (January 2020, Brussels, Belgium, ISO / IEC JTC1 / SC29 / WG11 MPEG / M51594, Sébastien Lasserre and Jonathan Taquet, “[GPCC]CE 13.22 report on angular mode”). IDCM is a mode in which the position of a point within a node is explicitly (directly) signaled relative to other points within the node. In angular decoding mode, the offset of a point can be signaled relative to the origin of the node.
[0093] like Figure 5As shown, simultaneously with the capture point, each laser 504 of the laser package 500 rotates about the z-axis 508. Information about how many probes (scanning moments) each laser 504 performs in one full rotation (360 degrees) (i.e., information about scanning in the azimuth or phi direction) can be used to improve the x and y plane positions of the planar mode, and similarly for the x and y position bits of the IDCM (see, for example, "[GPCC][CE 13.22 related] The newazimuthal coding mode", Sébastien Lasserre and Jonathan Taquet, ISO / IEC JTC1 / SC29 / WG11MPEG / M51596, Brussels, Belgium, January 2020).
[0094] Angle decoding mode can be applied where the "angle size" (i.e., node_size / r) is small enough for nodes with sufficient aptitude (where r indicates the radial distance between the origin of the octree node and the lidar head position, so r is relative to the lidar head position). , , In other words, if the angle is less than the minimum angular increment between the two lasers (i.e., |tan(θ)) L1 ) - tan(θ) L2 )|, where θ L1 The angle of laser L1 is indicated by θ. L2 If the angle of the indicator laser L2 is specified, then the angle decoding mode can be applied to the node. Otherwise, for larger nodes, multiple lasers may pass through the node. When multiple lasers pass through the node, the angle mode may not be efficient.
[0095] Figure 6 This is a conceptual diagram illustrating an example of angular suitability for a node. Figure 6 In the example, node 600 is determined to be ineligible because at least two laser beams 506 intersect with node 600. However, node 602 is ineligible for corner decoding because node 602 is not intersected by two or more laser beams 506.
[0096] As mentioned above, only some nodes in an octree are eligible for decoding using angular mode. The procedure for determining node eligibility for angular mode in w19088 is described below. This procedure is applied to child nodes (Child) to determine the child node's angular eligibility (angular_eligible[Child]). In w19088, the syntax element `geometry_angular_mode_flag` indicates whether angular mode is active. If `geometry_angular_mode_flag` equals 0, then `angular_eligible[Child]` is set to 0. Otherwise, the following rules apply: midNodeX = 1 << (ChildNodeSizeXLog2 - 1) midNodeY = 1 << (ChildNodeSizeXLog2 - 1) xLidar = abs( ((xNchild - lidar_head_position[0] + midNodeX) << 8) –128 ) yLidar = abs( ((yNchild - lidar_head_position[1] + midNodeY) << 8) –128 ) rL1 = (xLidar + yLidar) >> 1 deltaAngleR = deltaAngle rL1 midNodeZ = 1 << (ChildNodeSizeZLog2 - 1) if (deltaAngleR <= (midNodeZ << 26)) angular_eligible[Child] = 0 else angular_eligible[Child] = 1 Where deltaAngle is the minimum angular distance between laser beams, determined by the following formula: deltaAngle = min { | laser_angle [i] – laser_angle [j] | ; 0 ≤ i <j < number_lasers} Where (xNchild, yNchild, zNchild) specifies the position of the geometric octree child node Child in the current stripe.
[0097] The following procedure, described in w19088, is applied to the child node to determine the IDCM angular eligibility idcm4angular[Child] and laser index laserIndex[Child] associated with the child node. If the angular eligibility angular_eligible[Child] equals 0, then idcm4angular[Child] is set to 0, and the laserIndex[Child] index is set to the pre-set value UNKNOWN_LASER. Otherwise, if the angular eligibility angular_eligible[Child] equals 1, the following procedure is applied as a continuation of the procedure described in Section 8.2.5.1 of w19088. First, the inverse rInv of the radial distance from the child node to the lidar is determined as follows: r2 = xLidar xLidar + yLidar yLidar rInv = invSqrt(r2) Then, determine the angle theta32 for the child nodes: zLidar = ((zNchild - lidar_head_position [2] + midNodeY) << 1) - 1 theta = zLidar rInv theta32 = theta >= 0 ? theta >> 15 : -((-theta) >> 15) Finally, based on the parent node of the child node, the angular suitability and laser associated with the child node are determined, as shown in Table 3 below: Table 3
[0098] The following describes the decoding of sensor laser beam parameters for angle mode in W19088. Table 4 below uses...<!----> …<!--!--> The labels indicate the syntax elements that carry angle-mode decoding information from lidar laser sensors, which may be beneficial for improving decoding efficiency. Table 4 lists the angle-mode syntax elements using a set of geometric parameters.<!----> …<!--!--> Labels are used to indicate this.
[0099] The syntax for the geometric parameter set in Table 4-W19088.
[0100]
[0101] The semantics of these syntax elements are specified in W19088 as follows: A geometry_planar_mode_flag value of 1 indicates that the planar decoding mode is activated. A geometry_planar_mode_flag value of 0 indicates that the planar decoding mode is not activated.
[0102] `geom_planar_mode_th_idcm` specifies the activation threshold value for the direct decoding mode. `geom_planar_mode_th_idcm` is an integer in the range of 0 to 127 (inclusive). When it does not exist, `geom_planar_mode_th_idcm` is inferred to be 127.
[0103] `geom_planar_mode_th[i]` specifies, for any `i` in the range 0…2, the activation threshold value for the planar coding mode along the i-th most probable direction of the planar decoding mode that will be efficient. `geom_planar_mode_th[i]` is an integer in the range 0…127.
[0104] A `geometry_angular_mode_flag` value of 1 indicates that the angle decoding mode is activated. A `geometry_angular_mode_flag` value of 0 indicates that the angle decoding mode is not activated.
[0105] `lidar_head_position[ia]` specifies the `ia`-th coordinate of the lidar head in the coordinate system associated with the inner axis, for values in the range 0…2. If `ia` does not exist, `lidar_head_position[ia]` is inferred to be 0.
[0106] number_lasers specifies the number of lasers used in corner decoding mode. When it does not exist, number_lasers is inferred to be 0.
[0107] laser_angle[i], for i in the range 1…number_lasers, specifies the tangent of the elevation angle of the i-th laser relative to the horizontal plane defined by the 0th and 1st inner axes.
[0108] laser_correction[i], for i in the range 1…number_lasers, specifies the correction of the i-th laser position along the second inner axis relative to the lidar head position lidar_head_position[2]. When it does not exist, laser_correction[i] is inferred to be 0.
[0109] A `planar_buffer_disabled` value of 1 indicates that a buffer is not used to track the nearest node during the decoding of the planar pattern flags and planar positions in the planar pattern. A `planar_buffer_disabled` value of 0 indicates that a buffer is used to track the nearest node. When it does not exist, `planar_buffer_disabled` is inferred to be 0.
[0110] `implicit_qtbt_angular_max_node_min_dim_log2_to_split_z` specifies the log2 value of the node size; nodes smaller than this value are preferred for horizontal splitting over vertical splitting. When this value is not present, `implicit_qtbt_angular_max_diff_to_split_z` is inferred to be 0.
[0111] `implicit_qtbt_angular_max_diff_to_split_z` specifies the log2 value of the maximum allowed vertical to horizontal node size ratio. When it does not exist, `implicit_qtbt_angular_max_node_min_dim_log2_to_split_z` is inferred to be 0.
[0112] In June 2020, in Alpbach, Austria, G-PCC DIS, ISO / IEC JTC1 / SC29 / WG11 w19328 (hereinafter referred to as "w19328_d2") updated the syntax and semantics of the syntax elements in the geometry parameter set. Table 2 below shows the syntax elements.<!----> …<!--!--> The label indicates the syntax elements of the lidar laser sensor information that carry angle decoding mode and azimuth angle decoding mode to improve decoding efficiency.
[0113] Table 2. Geometric parameter set syntax in w19329.
[0114]
[0115]
[0116] The semantics of these syntax elements are specified in w19328_d2 as follows: Incrementing 1 by 1 to number_lasers_minus1 specifies the number of lasers used in corner decoding mode. When it does not exist, number_lasers_minus1 is inferred to be 0.
[0117] laser_angle[i] and laser_angle_diff[i], for i in the range 0..number_lasers_minus1, specify the tangent of the elevation angle of the i-th laser relative to the horizontal plane defined by the first and second encoding axes. When not present, laser_angle[i] is inferred to be 0.
[0118] laser_correction[i] and laser_correction_diff[i] specify the correction of the i-th laser position along the second inner axis relative to geomAngularOrigin[2] for i in the range 0..number_lasers_minus1. When not present, laser_correction[i] is inferred to be 0.
[0119] An array of LaserAngle and LaserCorrection elements LaserAngle[i] and LaserCorrection[i] is derived as follows for i in the range 0..number_lasers_minus1: LaserAngle[0] = laser_angle[0]
[0120] LaserCorrection[0] = laser_correction[0]
[0121] for (i = 1; i <= number_lasers_minus1; i++) {
[0122] LaserAngle[i] = LaserAngle[i - 1] + laser_angle_diff[i]
[0123] LaserCorrection[i] = LaserCorrection[i - 1] + laser_correction_diff[i]
[0124] }
[0125] laser_numphi_perturn[i] specifies the number of probes in the azimuth direction of a fully rotated laser for i in the range of 0 to number_lasers_minus1. When it does not exist, laser_numphi_perturn[i] is inferred to be 0.
[0126] As described in the previous section, the laser angle is predicted, and the predicted value is actually the laser angle of the previous laser; that is, for laser_angle[i], the predicted value is laser_angle[i-1] (except when i=0, in which case the predicted value is zero). The difference, laser_angle_diff[i] (= laser_angle[i] – predicted value), is then decoded. However, this "copy" prediction (copying the immediately preceding encoded value for prediction) is not optimal. The technique disclosed herein demonstrates an improvement to the predicted value of laser_angle[i], further enhancing the decoding efficiency of the syntax laser_angle_diff[i].
[0127] In W19088, for each laser, the corresponding laser angle and laser offset (laser position relative to the head position) are decoded (e.g., using the values contained in...).<!----> …<!--!--> The text instructions in the label are as shown in Table 5 below.
[0128] Table 5
[0129] Therefore, in some examples, the G-PCC encoder 200 can decode the corresponding laser angle and corresponding laser offset (i.e., laser correction) for each laser pair in the laser candidate set.
[0130] The laser angles can be arranged in a sorted format, for example, these angles monotonically increasing or decreasing with the array index. If not arranged in this format, the input preprocessing can sort the angles before decoding. It is observed that the laser angles are very similar to each other. In this case, the angle at array index i can be predicted from the angle at index i-1, and only the difference can be encoded, i.e., incremental decoding can be applied.
[0131] It is observed that the angle of a particular laser is very similar to that of its neighboring lasers. In this case, the angle of the i-th laser can be predicted from the angle of the (i-1)-th laser, and only the difference can be encoded, that is, incremental decoding can be applied together with se(v) decoding.
[0132] Similar incremental decoding can also be applied to laser correction, as shown in Table 6 below.
[0133] Table 6
[0134] At G-PCC decoder 300, the laser angle [i] and laser_correction [i] can be derived from laser_angle_delta [i] and laser_correction_delta [i], respectively, as shown below: pred_angle = 0; pred_correction = 0; For(i=0;i <number_lasers;i++){ If (i>0){ pred_angle = laser_angle[i -1]; pred_correction = laser_correction[i -1]; } laser_angle[i] = laser_angle_delta[i] + pred_angle; laser_correction[i] = laser_correction_delta[i] + pred_correction; } In some examples, if the laser angles are sorted (monotonically increasing and decreasing), laser_angle_delta[i] (except laser_angle_delta[0]) can be decoded as unsigned integers because the increments are either all positive or all negative.
[0135] Therefore, for laser_angle_delta[0], se(v) decoding is used (i.e., left-bit-first (i.e., most significant bit-first) signed integer zero-order exponent Golomb-coded decoding), while for the other laser_angle_delta[i] (i>0), ue(v) decoding is used. laser_offset_deltas are decoded using se(v), for example, as shown in Table 7 below.
[0136] Table 7
[0137] In another example, laser_angle_delta[i] and laser_correction_delta[i] can be decoded using exponential Golomb decoding of order k. k can be adaptive (based on the magnitude of the increment value), fixed and encoder-configurable, or fixed and predetermined. In another example, incremental decoding might only apply to the laser angle and not to laser correction.
[0138] The techniques disclosed herein demonstrate that improvements to the predicted value of laser_angle[i] further enhance the decoding efficiency of the syntax laser_angle_diff[i]. The ordered laser angles to be decoded (in a lidar acquisition scenario) increase approximately linearly. For example, the laser angles for the 'Ford1' sequence are shown in Table 8 below.
[0139] Table 8
[0140] A partial list of sorted laser angles in the Ford1 sequence and the resulting increments to be decoded.
[0141] As a result, it can be observed that the increments obtained from using the "copy" predictor (i.e., for the i-th angle, the predicted value is the (i-1)-th angle), called the old increments (delta_old), are correlated with each other.
[0142] Since the angle increases linearly, in one example, performing a linear prediction using the last two samples yields a simple yet effective prediction, referred to as the increment (delta) in Table 8. Clearly, the delta value is smaller than the delta_old value.
[0143] Therefore, semantic changes are used<!----> …<!--!--> Label instructions: LaserAngle[0] = laser_angle[0]
[0144] LaserCorrection[0] = laser_correction[0]
[0145] for (i = 1; i <= number_lasers_minus1; i++) {
[0146] LaserAngle[i] =<!----> (i==1)? LaserAngle[i - 1]: (2 LaserAngle[i-1] –LaserAngle[i-2])<!--!-->+ laser_angle_diff[i]
[0147] LaserCorrection[i] = LaserCorrection[i - 1] + laser_correction_diff[i]
[0148] }
[0149] Therefore, when determining the predicted value, the G-PCC decoder can determine the predicted value as 2. First laser angle plus -1 The second laser angle (i.e., 2) LaserAngle[i-1]-LaserAngle[i-2])).
[0150] Because the proposed linear prediction requires the existence of the last two decoded angles, the proposed linear prediction is invoked for i>=2. Therefore, the prediction process remains unchanged for i=0 (predicted value = 0) and i=1 ("copy" predictor). Furthermore, when the linear prediction is invoked, the corresponding predicted value may exceed the actual laser angle (unlike the "copy" prediction where laser angles are ordered in ascending order), so laser_angle_diff[] can be negative, positive, or zero, thus requiring decoding of laser_angle_diff[] using se(v). se(v) indicates the left-first signed integer exponent 0-order Golomb decoding syntax element. The modified syntax changes are shown in Table 9 below.<!----> …<!--!--> The label shows: Table 9
[0151] Therefore, in some examples, the G-PCC encoder 200 can determine a first laser angle (e.g., similar to LaserAngle[0] in the semantics above); determine a second laser angle (e.g., similar to LaserAngle[i] for (i==1) in the semantics above); and determine a predicted value based on the first and second laser angles (e.g., similar to 2 in the semantics above). LaserAngle[i-1]-LaserAngle[i-2]); and the laser angle difference that determines the third laser angle (e.g., similar to laser_angle_diff[i] in the semantics above). Furthermore, the G-PCC encoder 200 can encode the syntax elements for the first laser angle (e.g., laser_angle[0] in Table 9) and the syntax elements for the laser angle difference of the third laser angle (e.g., laser_angle_diff[i] for (i==1) in Table 9). The syntax elements for the laser angle difference indicate the laser angle difference of the third laser angle, allowing the third laser angle to be determined at the G-PCC decoder 300 based on the laser angle difference between the first, second, and third laser angles. The G-PCC encoder 200 can encode points in the point cloud (in some examples, their vertical positions) based on the third laser angle.
[0152] Similarly, the G-PCC decoder 300 can determine the first laser angle (e.g., LaserAngle[0] in the semantics above); determine the second laser angle (e.g., LaserAngle[i] for (i==1) in the semantics above); preferably determine the laser angle difference of the third laser angle by decoding the syntax element of the laser angle difference specifying the third laser angle (e.g., laser_angle_diff[i] in the semantics above); and predict the third laser angle based on the first laser angle and the second laser angle (e.g., 2 in the semantics above). LaserAngel[i-1]-LaserAngel[i-2]), and based on the prediction of the third laser angle and the laser angle difference of the third laser angle (e.g., (2 in the above semantics)). The third laser angle is determined by the formula LaserAngel[i-1] - LaserAngel[i-2] + laser_angle_diff[i]). Furthermore, the G-PCC decoder 300 can decode points in the point cloud (in some examples, their vertical positions) based on the third laser angle.
[0153] Related to the previous example, alternatively, the laser angle difference (i==1) can be decoded using ue(v), since the laser angle difference still uses "copy" prediction, while the other angle differences are decoded using se(v). The changes are shown in Table 10.<!----> …<!--!--> The label is shown.
[0154] Table 10
[0155] In another example, a more general weighted prediction using the last p decoded angles can be used to generate a predicted value for the laser angle. The coefficients of the weighted prediction and the value of p can be fixed, predetermined, or decoded.
[0156] In some examples, the syntax element (laser_info_pred_idc) that specifies the model used to derive the laser angle and laser correction from the syntax element is decoded. For example, the first value of the syntax element can specify that the predicted value of the i-th laser is the value of the (i-1)-th laser (or derived from that value); the second value of the syntax element can specify that the predicted value of the i-th laser is derived from the (i-1)-th and (i-2)-th lasers; and the third value can specify that the predicted value of the i-th laser is a fixed value (such as 0). More generally, different values of the syntax element can be used to specify different methods for deriving the predicted values. The value of the syntax element can be decoded once for all lasers (for some laser indices, one or more default values can be selected regardless of the value of the syntax element), or it can be decoded for each laser (i.e., each index i). For some lasers, the syntax element may not be decoded, and a default value can be specified (e.g., for the first laser, the predicted value can be derived as 0). The syntax below shows how laser_info_pred_idc is decoded for each laser. Changes are shown in Table 11.<!----> …<!--!--> The label is shown.
[0157] Table 11
[0158] In some examples, the value laser_info_pred_idc[i] is decoded as ue(v).
[0159] `laser_info_pred_idc[i]` specifies the method for deriving laser information from the syntax elements `laser_angle_diff[i]` and `laser_correction_diff[i]`. `laser_info_pred_idc[i]` equal to 0 indicates that the (i-1)th laser information was used to derive the information for the i-th laser. `laser_info_pred_idc[i]` equal to 1 indicates that the (i-1)th and (i-2)th laser information were used to derive the information for the i-th laser. `laser_info_pred_idc[i]` equal to 2 indicates that the prediction information was not used to derive the information for the i-th laser. The value of `laser_info_pred_idc[0]` is inferred to be 2, and the value of `laser_info_pred_idc[1]` is inferred to be equal to 0.
[0160] The laser information is exported as follows: LaserAngle[0] = laser_angle[0]
[0161] LaserCorrection[0] = laser_correction[0]
[0162] for (i = 1; i <= number_lasers_minus1; i++) {
[0163] LaserAngle[i] =<!----> (laser_info_pred_idc[i] == 0)? LaserAngle[i -1]: (laser_info_pred_idc[i] == 1)? (2 LaserAngle[i-1] – LaserAngle[i-2]): 0<!--!--> + laser_angle_diff[i]
[0164] LaserCorrection[i] = LaserCorrection[i - 1] + laser_correction_diff[i]
[0165] }
[0166] In some examples, the presence of `laser_info_pred_idc` (or `laser_info_pred_flag`) can be conditional upon the presence of a flag. When `laser_info_pred_idc` does not exist, one or more default values can be selected to specify the model used for laser information prediction. Therefore, the G-PCC encoder 200 can encode a laser information prediction indicator syntax element that specifies the method for deriving laser information from a laser angle difference syntax element at a third laser angle. Similarly, in some examples, the G-PCC decoder 300 can decode a laser information prediction indicator syntax element (e.g., `laser_info_pred_idc`) that specifies the method for deriving laser information from a laser angle difference syntax element at a laser angle.
[0167] Figure 7A This is a flowchart illustrating example operation of a G-PCC encoder 200 according to one or more technologies of this disclosure. Figure 7AIn the example, the G-PCC encoder 200 can obtain (e.g., determine) a first laser angle (700). The first laser angle can indicate the tangent of the elevation angle of the first laser beam relative to a horizontal plane defined by a first inner axis (e.g., x) and a second axis (e.g., y) of the point cloud data. Additionally, the G-PCC encoder 200 can obtain a second laser angle (702). The second laser angle can indicate the tangent of the elevation angle of the second laser beam relative to a horizontal plane defined by the first and second axes of the point cloud data. The G-PCC encoder 200 can obtain the first and second laser angles based on configuration information about the lidar system (or other system) provided to the G-PCC encoder 200.
[0168] The G-PCC encoder 200 can determine the predicted value (704) based on a first laser angle and a second laser angle. For example, the G-PCC encoder 200 can determine the predicted value by performing a linear prediction based on the first laser angle and the second laser angle. In other examples, the G-PCC encoder 200 can determine the predicted value by applying a weighted prediction using the first laser angle and the second laser angle.
[0169] exist Figure 7A In the example, the G-PCC encoder 200 can encode the laser angle difference of the third laser angle (e.g., the laser_angle_diff syntax element) (706). The laser angle difference is equal to the difference between the third laser angle and the predicted value. The third laser angle can specify the elevation angle of the third laser relative to the tangent of the horizontal plane.
[0170] In some examples, the G-PCC encoder 200 can encode syntax elements for one or more of the laser angle differences of a first laser angle, a second laser angle, and a third laser angle. For example, the G-PCC encoder 200 can encode the syntax element specifying the laser angle difference of the third laser angle as a left-first signed integer zero-order exponent Golomb decoded syntax element. In some examples, the G-PCC encoder 200 can encode the laser angle difference syntax element for the second laser angle (e.g., laser_angle_diff). In this example, the laser angle difference syntax element for the second laser angle indicates the difference between the second laser angle and the first laser angle, and the laser angle difference syntax element for the second laser angle can be encoded as a left-first signed integer zero-order exponent Golomb decoded syntax element.
[0171] Furthermore, in some examples, the G-PCC encoder 200 can encode points in point cloud data based on one of a first laser angle, a second laser angle, and a third laser angle. For example, the G-PCC encoder 200 can encode the vertical position of a point in the point cloud based on the third laser angle. For example, the G-PCC encoder 200 can determine the context associated with the location where the third laser (i.e., a laser with a third laser angle) intersects with the current node containing that point. For example, the G-PCC encoder 200 can determine, based on the third laser angle, whether the third laser is above or below a specific threshold defined relative to a marker point (e.g., the center point) of the current node. The G-PCC encoder 200 can use the third laser angle and a laser correction value for the third laser to determine the position of the third laser beam. The range between and beyond the threshold can correspond to different contexts. The G-PCC encoder 200 can then encode one or more binary numbers of syntax elements (e.g., point_offset) indicating the vertical offset of a point by applying CABAC encoding using the determined context. The vertical offset of a point can indicate the vertical difference between that point and the origin of the current node. A G-PCC encoder (such as G-PCC encoder 200 or G-PCC decoder 300) can use the procedure in Table 12 to determine the context (idcmIdxAngular) for CABAC decoding of the binary number of the syntax element point_offset. When the procedure in Table 12 is executed, the G-PCC decoder can determine whether the third laser is above or below a specific threshold defined relative to the marker point (e.g., the center point) of the current node, based on the third laser angle.
[0172] Table 12
[0173] The terms in Table 12 can be defined as follows: This process is performed after point_offset_x[i][] and point_offset_y[i][] are decoded so that PointOffsetX[i] and PointOffsetY[i] are known. The x and y positions of point i relative to the LiDAR are derived by the following formula: posXlidar[i] = xNchild - lidar_head_position[0] + PointOffsetX[ i ] posYlidar[i] = yNchild - lidar_head_position[1] + PointOffsetY[ i ] Where (xNchild, yNchild, zNchild) specifies the position of the geometric octree child node Child in the current stripe.
[0174] The inverse of the radial distance rInv between this point and the lidar is determined by the following: xLidar = (posXlidar[i] << 8) - 128 yLidar = (posYlidar[i] << 8) - 128 r2 = xLidar xLidar + yLidar yLidar rInv = invSqrt(r2) The corrected laser angle ThetaLaser associated with the child node is derived as follows: Hr = laser_correction [laserIndex [Child]] rInv ThetaLaser = laser_angle [laserIndex [Child]] + (Hr >= 0 ? -(Hr >>17) : ((-Hr) >> 17)) Assuming that the bit point_offset_z[i][j2] of the range j2 in the range 0…j-1 is known, then this point is known to belong to the virtual vertical interval, half of which is given by the following formula: halfIntervalSize[j] = (1 << (EffectiveChildNodeSizeZLog2-1)) >> j It also provides the partial z-point position posZlidarPartial[i][j] at the lower end of the interval, which is derived from the following formula: PointOffsetZpartial = 0 for( j2 = 0; j2 < j; j2++ ) PointOffsetZpartial [ i ] += point_offset_z[ i ][ j2 ] << j2 PointOffsetZpartial[ i ] <<= (EffectiveChildNodeSizeZLog2-j) posZlidarPartial[i][j] = zNchild - lidar_head_position[2] +PointOffsetZpartial[ i ] In some examples of decoding nodes using a planar mode, the G-PCC encoder 200 uses a third laser angle to determine the context for CABAC decoding of syntax elements (e.g., plane_position) that indicate the position of the current node across a horizontal plane. For example, a G-PCC decoder (such as G-PCC encoder 200 or G-PCC decoder 300) can determine the context (contextAngular) for CABAC decoding of the plane_position of a node (Child), as shown in Table 13 below.
[0175] Table 13
[0176] In Table 13, rInv can be determined as: r2 = xLidar xLidar + yLidar yLidar rInv = invSqrt(r2) in midNodeX = 1 << (ChildNodeSizeXLog2 - 1) midNodeY = 1 << (ChildNodeSizeXLog2 - 1) xLidar = abs( ((xNchild - lidar_head_position[0] + midNodeX) << 8) –128 ) yLidar = abs( ((yNchild - lidar_head_position[1] + midNodeY) << 8) –128 ) Where ChildNodeSizeXLog2 represents the logarithm of 2 in the x-dimension of the child node. The angle theta32 of the child node can be determined as: zLidar = ((zNchild - lidar_head_position [2] + midNodeY) << 1) – 1 theta = zLidar rInv theta32 = theta >= 0 ? theta >> 15 : -((-theta) >> 15) Where zNchild specifies the z-position of the geometric child node (Child) in the current stripe.
[0177] Figure 7B This is a flowchart illustrating example operation of a G-PCC decoder 300 according to one or more technologies of this disclosure. Figure 7B In the example, the G-PCC decoder 300 (e.g., the geometry reconstruction unit 312 of the G-PCC decoder 300) can obtain (e.g., determine) a first laser angle (750). The first laser angle can be the tangent of the elevation angle of the first laser beam relative to a horizontal plane defined by the first and second axes of the point cloud data. Additionally, the G-PCC decoder 300 can obtain a second laser angle (752). The second laser angle can be the tangent of the elevation angle of the second laser beam relative to a horizontal plane defined by the first and second axes of the point cloud data. In some examples, the G-PCC decoder 300 can determine the first laser angle from the value of a syntax element (e.g., laser_angle) encoded in the geometry bitstream 203. In some examples, the G-PCC decoder 300 can determine the first laser angle and / or the second laser angle from a previously determined laser angle and an additional syntax element (e.g., laser_angle_diff) encoded in the geometry bitstream 203. In other words, the G-PCC decoder 300 can determine the laser angle of laser i as: LaserAngle[i] = LaserAngle[i – 1] + laser_angle_diff[i] In some examples, the G-PCC decoder 300 can decode the laser angle difference syntax element for the second laser angle (e.g., laser_angle_diff), where the laser angle difference syntax element for the second laser angle is a left-first signed integer zero-order exponent Columbus decoding syntax element.
[0178] In addition, Figure 7BIn the example, the G-PCC decoder 300 can obtain the laser angle difference of the third laser angle (e.g., the laser_angle_diff syntax element) (754). The third laser angle is the tangent of the elevation angle of the third laser beam relative to the horizontal plane defined by the first and second axes of the point cloud data. In some examples, the laser angle difference is encoded as a signed integer 0th-order exponent Golomb code in the geometric bitstream 203, and the G-PCC decoder 300 can determine the value corresponding to this code. In other words, the G-PCC encoder 300 can decode the laser angle difference of the third laser angle into a left-bit-first signed integer 0th-order exponent Golomb decode syntax element.
[0179] The G-PCC decoder 300 can determine the predicted value (756) based on a first laser angle and a second laser angle. For example, the G-PCC decoder 300 can determine the predicted value by performing a linear prediction based on the first laser angle and the second laser angle. In other examples, the G-PCC decoder 300 can determine the predicted value by applying a weighted prediction using the first laser angle and the second laser angle.
[0180] The G-PCC decoder 300 can determine the third laser angle based on the difference between the predicted value and the third laser angle (758). For example, the G-PCC decoder 300 can add the difference between the third laser angle and the predicted value to determine the third laser angle.
[0181] In some examples, the G-PCC decoder 300 can decode points in point cloud data based on one of a first laser angle, a second laser angle, and a third laser angle. For example, the G-PCC decoder 300 can decode the vertical position of points in the point cloud based on the third laser angle, and in some examples, based on the laser correction value of the laser with the third laser angle. For example, the G-PCC decoder 300 can decode the position of the third laser beam relative to a marker point (e.g., center point, origin, etc.) containing the current node based on the third laser angle (and in some examples, the laser correction value of the laser with the third laser angle). The G-PCC decoder 300 can determine the context based on the position of the third laser beam relative to the current node. For example, the G-PCC decoder 300 can determine the context based on whether the third laser beam is within a specific interval defined by distance thresholds above and below the marker point, for example, as described above with respect to Table 12. Then, the G-PCC decoder 300 (e.g., the geometric arithmetic decoding unit 302 of the G-PCC decoder 300) can decode one or more binary numbers of syntax elements (e.g., point_pos) indicating the vertical offset of a point relative to the origin of the current node by applying CABAC decoding with the determined context. The G-PCC decoder 300 can then determine the vertical position of the point based on the vertical offset of the point and the origin of the current node. For example, the G-PCC decoder 300 can add the vertical offset of the point to the vertical coordinates of the origin of the current node to determine the vertical position of the point.
[0182] In some examples of encoding the current node containing the point using a planar pattern, the G-PCC decoder 300 can decode the syntax element indicating the vertical plane position (e.g., `plane_position`) based on a third laser angle, and in some examples, based on a laser correction value of the laser with the third laser angle, as part of decoding the position of the point in the point cloud based on the third laser angle. For example, the G-PCC decoder 300 can determine the context based on whether the third laser beam is within a specific interval defined by distance thresholds above and below the current node's marker point, as described above with respect to Table 13. The G-PCC decoder 300 can determine the position of the third laser beam using the third laser angle and, in some examples, a laser correction value of the laser with the third laser angle. The G-PCC decoder 300 can decode one or more binary numbers of the syntax element indicating the vertical plane position by applying CABAC decoding using the determined context. The G-PCC decoder 300 can then decode the position of the point based on the syntax element indicating the vertical plane position. For example, the G-PCC decoder 300 can determine the location of the horizontal plane that divides the current node into upper and lower layers of child nodes. The G-PCC decoder 300 can determine that the point is among the child nodes in the child node layer immediately above the horizontal plane.
[0183] For azimuth mode decoding, the G-PCC encoder 200 can encode a syntax element (e.g., laser_numphi_perturn) representing the number of probes in a specified azimuth direction of the laser beam (e.g., for a complete rotation or other range of the laser beam). The syntax element laser_numphi_perturn[i] is directly encoded using ue(v). ue(v) indicates a left-first unsigned integer zero-order exponent Golomb decoding syntax element. However, the value of this syntax element (e.g., laser_numphi_perturn) for a particular laser is strongly correlated with the values of the same syntax element for adjacent lasers. Therefore, utilizing this correlation can improve the efficiency associated with decoding these syntax elements (e.g., the laser_numphi_perturn syntax element).
[0184] This disclosure describes a technique that can utilize the correlation between the values of syntax elements indicating the number of probes in the azimuth direction of a laser beam (e.g., for a complete rotation or other range of the laser beam). For example, in some examples of this disclosure, instead of directly decoding the laser_numphi_perturn[i] syntax element, the G-PCC encoder 200 can predict the value of laser_numphi_perturn[i] from laser_numphi_perturn[i-1] for i>=1. In other words, the G-PCC encoder can predict the number of probes in the azimuth direction of laser i (e.g., a complete rotation or other range of laser i) from the number of probes in the azimuth direction of laser i-1 (e.g., a complete rotation or other range of laser i-1). The G-PCC encoder 200 can derive a difference equal to (laser_numphi_per_turn[i] - laser_numphi_perturn[i-1]) (e.g., laser_numphi_perturn_diff[i]), and then encode that difference. The G-PCC decoder 300 can use the number of probes in the azimuth direction of laser beam i-1 (e.g., for a complete rotation or other range of the laser beam) plus the value of laser_numphi_perturn_diff[i] to determine the number of probes in the azimuth direction of laser beam i (e.g., for a complete rotation or other range of the laser beam). The syntactic and semantic changes to w19328_d2 corresponding to this example are shown in Table 14 below.<!----> …<!--!--> As indicated by the label.
[0185] Table 14
[0186] laser_numphi_perturn[i] and laser_numphi_perturn_diff[i], for i in the range 0..number_lasers_minus1, specify the correction of the i-th laser position along the second inner axis relative to geomAngularOrigin[2]. When it does not exist, laser_correction[i] is inferred to be 0.
[0187] An array of LaserAngle and LaserCorrection elements LaserAngle[i] and LaserCorrection[i] is derived as follows for i in the range 0..number_lasers_minus1: LaserAngle[0] = laser_angle[0]
[0188] LaserCorrection[0] = laser_correction[0]
[0189] for (i = 1; i <= number_lasers_minus1; i++) {
[0190] LaserAngle[i] = LaserAngle[i - 1] + laser_angle_diff[i]
[0191] LaserCorrection[i] = LaserCorrection[i - 1] + laser_correction_diff[i]
[0192] }
[0193] `laser_numphi_perturn[i]` and `laser_numphi_perturn_diff[i]` specify the number of probes in the azimuth direction of a fully rotated laser for the i-th laser, within the range of 0 to number_lasers_minus1. When not present, `laser_numphi_perturn[i]` is inferred to be 0.
[0194] LaserAngle[0] = laser_angle[0]
[0195] LaserCorrection[0] = laser_correction[0]
[0196] <!----> LaserNumPhiPerTurn[0] = laser_numphi_perturn[0]<!--!-->
[0197] for (i = 1; i <= number_lasers_minus1; i++) {
[0198] LaserAngle[i] = LaserAngle[i - 1] + laser_angle_diff[i]
[0199] LaserCorrection[i] = LaserCorrection[i - 1] + laser_correction_diff[i]
[0200] <!----> LaserNumPhiPerTurn [i] = LaserNumPhiPerTurn [i - 1] + laser_numphi_perturn_diff[i]<!--!-->
[0201] }
[0202] Therefore, in some examples, the G-PCC encoder 200 may encode a syntax element specifying the value of a first laser (e.g., similar to laser_numphi_perturn[0] in Table 14), the value of the first laser indicating the number of probes in an azimuth direction with respect to a full rotation of the first laser; encode a syntax element for a second laser (e.g., similar to laser_numphi_perturn_diff[i] in Table 14), wherein the syntax element for the second laser indicating the difference between the value of the first laser and the value of the second laser, the value of the second laser indicating the number of probes in an azimuth direction with respect to a full rotation of the second laser; and encode one or more points of the point cloud data based on one of the number of probes in the azimuth direction of the first laser and the number of probes in the azimuth direction with respect to a full rotation of the second laser.
[0203] Similarly, the G-PCC decoder 300 can determine the value of the first laser (e.g., LaserNumPhiPerTurn[0] in the syntax above), which indicates the number of probes in the azimuth direction of a complete rotation of the first laser. Additionally, the G-PCC decoder 300 can decode the syntax elements of the second laser (e.g., laser_numphi_perturn_diff[i] in Table 14). The syntax elements of the second laser indicate the difference between the value of the first laser and the value of the second laser, where the value of the second laser can indicate the number of probes in the azimuth direction of a complete rotation of the second laser. The G-PCC decoder 300 can determine the value of the second laser indicating the number of probes in the azimuth direction of the second laser based on the value of the first laser and the indication of the difference between the value of the first laser and the value of the second laser (e.g., LaserNumPhiPerTurn[i] = LaserNumPhiPerTurn[i-1] + laser_numphi_perturn_diff[i] in the syntax above). Furthermore, the G-PCC decoder 300 can decode one or more points of point cloud data based on the number of probes in an azimuth direction that is a complete rotation of the second laser.
[0204] Figure 8A This is a flowchart illustrating example operation of a G-PCC encoder 200 according to one or more technologies of this disclosure. Figure 8A In the example, the G-PCC encoder 200 can acquire point cloud data (800). For example, the G-PCC encoder 200 can acquire point cloud data from data source 104 ( Figure 1 Point clouds can be obtained. Data source 104 can use a LiDAR sensor, one or more cameras, a computer graphics program, or other sources to generate point clouds.
[0205] The G-PCC encoder 200 can determine the value of a first laser (e.g., LaserNumPhiPerTurn) (802). The value of the first laser indicates the number of probes in the azimuth direction of the first laser (e.g., for a full rotation or other range of the first laser). For example, the G-PCC encoder 200 can determine the value of the first laser based on configuration information about the lidar system (or other system) provided to the G-PCC encoder 200. In some examples, the G-PCC encoder 200 can encode syntax elements (e.g., laser_num_phi_perturn) that specify the value of the first laser.
[0206] In addition, Figure 8AIn the example, the G-PCC encoder 200 may encode the syntax elements (e.g., laser_numphi_perturn_diff) of the second laser (804). The syntax elements of the second laser indicate the difference between the value of the first laser and the value of the second laser. The value of the second laser indicates the number of probes in the azimuth direction of the second laser (e.g., for a full rotation or other range of the second laser). The G-PCC encoder 200 may determine the value of the second laser based on configuration information about the lidar system (or other system) provided to the G-PCC encoder 200. In some examples, the G-PCC encoder 200 may encode the syntax elements as syntax elements of zero-order exponential Golomb decoding. The G-PCC encoder 200 may include the encoded syntax elements in the geometric bitstream 203.
[0207] The G-PCC encoder 200 can encode one or more points in the point cloud data based on the number of probes in the azimuth direction of the second laser (e.g., for a complete rotation or other range of the second laser) (806). For example, the G-PCC encoder 200 can determine the sampling position of the second laser within the node containing the point based on the number of probes in the azimuth direction of the second laser (e.g., for a complete rotation or other range of the second laser). The G-PCC encoder 200 can then determine the context based on the sampling position of the second laser within the node. For example, the G-PCC encoder 200 can determine the context using the azimuth angle instead of the elevation angle (z) in the same or similar process as described in Table 12 above. The G-PCC encoder 200 can then encode one or more binary numbers of the azimuth offset syntax element (e.g., point_offset) indicating the azimuth offset of the point by applying CABAC encoding using the determined context.
[0208] In some examples where the G-PCC encoder 200 uses an angular pattern to encode a node containing a point, the G-PCC encoder 200 can determine the sampling position of the second laser in the node containing one or more points based on the number of probes in the azimuth direction of the second laser (e.g., for a complete rotation or other range of the second laser). Additionally, in this example, the G-PCC encoder 200 can determine the context based on the sampling position. For example, the G-PCC encoder 200 can determine the context using the azimuth angle instead of the elevation angle (z) in a process identical or similar to that described in Table 13 above. The G-PCC encoder 200 can encode the syntax elements indicating the position of the plane through the node containing the point by applying CABAC encoding using the determined context. The G-PCC encoder 200 can determine the position of the point based on the position of the plane.
[0209] Figure 8B This is a flowchart illustrating example operation of a G-PCC decoder 300 according to one or more technologies of this disclosure. Figure 8B In the example, the G-PCC decoder 300 can obtain the value of the first laser (e.g., LaserNumPhiPerTurn) (850). The value of the first laser indicates the number of probes in the azimuth direction of the first laser (e.g., for a full rotation or other range of the first laser). For example, the G-PCC decoder 300 can determine the value of the first laser as the value of a syntax element (e.g., laser_numphi_perturn[0]) that specifies the number of probes in the azimuth direction of the first laser (e.g., for a full rotation or other range of the first laser). In some examples, the G-PCC decoder 300 can obtain the value of the first laser by adding the value of a syntax element (e.g., laser_numphi_perturn_diff) to a value indicating the number of probes in the azimuth direction of the previous laser.
[0210] Additionally, the G-PCC decoder 300 can decode the syntax elements of the second laser (e.g., laser_numphi_perturn_diff) (852). The syntax elements of the second laser indicate the difference between the value of the first laser and the value of the second laser (e.g., LaserNumPhiPerTurn). The value of the second laser indicates the number of probes in the azimuth direction of the second laser (e.g., for a full rotation or other range of the second laser). In some examples, decoding the syntax elements of the second laser involves converting the 0th-order exponent Golomb code into the value of the syntax elements of the second laser.
[0211] The G-PCC decoder 300 can determine the value of the second laser (854) based on a first value and an indication of the difference between the value of the first laser and the value of the second laser. For example, the G-PCC decoder 300 can add the value of the first laser to the syntax element of the second laser to determine the value of the second laser.
[0212] The G-PCC decoder 300 can determine one or more points in the point cloud based on the number of probes in the azimuth direction for a complete rotation of the laser (e.g., a complete rotation of the second laser or other ranges). For example, the G-PCC decoder 300 can determine the sampling position of the second laser in the current node containing the point (e.g., predPhi) based on the number of probes in the azimuth direction for a complete rotation of the laser (e.g., a complete rotation of the second laser or other ranges). The G-PCC decoder 300 can then determine the context (e.g., idcmIdxAzimuthal) based on the sampling position. The G-PCC decoder 300 can determine the context using the azimuth angle instead of the elevation angle (z) in the same or similar process as determining the context idcmIdxAngular as shown in Table 12 above. In this example, the G-PCC decoder 300 can then decode one or more binary numbers of the azimuth offset syntax element (e.g., point_offset) indicating the azimuth offset of the point by applying CABAC decoding with the determined context. The azimuth offset can indicate the offset of the azimuth coordinates of the point relative to the origin of the current node. The G-PCC decoder 300 can determine the position of a point based on the azimuth offset syntax element. For example, the G-PCC decoder 300 can convert the cylindrical coordinates (including azimuth coordinates) of a point to Cartesian coordinates.
[0213] In some examples of encoding nodes using angular patterns, the G-PCC decoder 300 can determine the sampling position of the second laser in a node containing one or more points based on the number of probes in the azimuth direction of the second laser (e.g., for a complete rotation or other range of the second laser). Additionally, the G-PCC decoder 300 can determine the context based on the sampling position. For example, the G-PCC decoder 300 can determine the context based on whether the sampling position is before or after the midpoint of the node in the rotation direction of the second laser. The G-PCC decoder 300 can determine the context using the azimuth angle instead of the elevation angle (z) in the same or similar process as determining the context in Table 13 above. Furthermore, in this example, the G-PCC decoder 300 can decode syntax elements (e.g., plane_position) that indicate the position of a plane containing a node by applying CABAC decoding using the determined context. The G-PCC decoder 300 can determine the position of a point based on the position of the plane. For example, the G-PCC decoder 300 can determine that the point is in a child node layer immediately following the plane.
[0214] As described above, the number_lasers syntax element can be decoded in a parameter set such as a geometry parameter set. The number_lasers syntax element indicates the number of lasers used for the corner-coded mode. However, according to one or more techniques of this disclosure, the number of lasers used for the corner-coded mode can be decoded as number_lasers_minusL (e.g., in a parameter set such as a geometry parameter set or other syntax header) so that the number of lasers is obtained by adding the value L to the decoded number_lasers_minusL value. Thus, in some examples, a G-PCC decoder (e.g., G-PCC encoder 200 or G-PCC decoder 300) can encode a syntax element having a first value, where the first value plus a second value indicates the number of lasers, and where the second value is the minimum number of lasers.
[0215] In some examples, the value L equals 1 because an angular pattern should have at least one laser for it to be useful in decoding, such as the planar position of a planar pattern or the point position offset of an IDCM. The number_lasers_minus1 syntax element can be used for decoding in the bitstream using variable-length codes (such as k-order exponential Golomb codes) or fixed-length codes. In some examples, the value L can be equal to the minimum number of lasers required for an angular pattern to be useful in decoding. In some examples, the number_lasers_minusL syntax element can be used for decoding in the bitstream using variable-length codes (such as k-order exponential Golomb codes) or fixed-length codes.
[0216] The modifications to the geometry parameter set syntax table for w19328_d2 are shown in Table 15 below. The modified text uses...<!----> …<!--!--> Label indication. More specifically, Table 15 shows the decoding of number_of_lasers_minus1 in the geometric parameter set. In Table 15, <#>…< / #> Tags represent syntax elements related to corner patterns.
[0217] Table 15
[0218] The semantics of the number_lasers_minus1 syntax element are as follows: The value of number_lasers_minus1 plus 1 specifies the number of lasers used in corner decoding mode. When it does not exist, number_lasers_minus1 is inferred to be -1.
[0219] In Table 15, `num_lasers_minus1` plus 1 specifies the number of lasers. Therefore, in Table 15, it is assumed that the minimum number of lasers is 1. However, corner mode accreditation requires deriving a minimum angular increment, which is not possible if the number of lasers is 1. In other words, corner mode may only be used when there are two or more lasers. Therefore, in the first example, because corner mode accreditation requires a minimum angular difference between two lasers, the minimum number of lasers is 2. Therefore, the syntax element `num_lasers_minus1` can be replaced with `num_lasers_minus2`. Thus, corner mode cannot be applied when the number of lasers is 1. The changes to `w19328_d2` are shown in Table 16.<!----> …<!--!--> The label is shown.
[0220] Table 16
[0221] number_lasers_minus<!----> 2<!--!--> add<!----> 2<!--!--> Specifies the number of lasers used in corner decoding mode. If not specified, `number_lasers_minus`.<!----> 2<!--!--> It is inferred to be 0.
[0222] Therefore, in some examples, the G-PCC encoder 200 or the G-PCC decoder 300 can encode or decode a syntax element (e.g., number_lasers_minus2), where the value of the syntax element plus 2 specifies the number of lasers used for the corner decoding mode; and use the corner decoding mode to encode or decode point cloud data.
[0223] In the second example, when using a single laser decoder, it is recommended to make all nodes eligible (skipping eligibility criteria). The following modification is recommended for determining angular eligibility: The following procedure is applied to child nodes to determine the angular eligibility of the child node, `angular_eligible[Child]`. If `geometry_angular_mode_flag` is equal to 0, then `angular_eligible[Child]` is set to 0. Otherwise, the following rules apply: midNodeS = 1 << (ChildNodeSizeLog2[0] - 1)
[0224] midNodeT = 1 << (ChildNodeSizeLog2[1] - 1)
[0225] sLidar = Abs(((sNchild - geomAngularOrigin[0] + midNodeS) << 8) –128)
[0226] tLidar = Abs(((tNchild - geomAngularOrigin[1] + midNodeT) << 8) –128)
[0227] rL1 = (sLidar + tLidar) >> 1
[0228] deltaAngleR = deltaAngle × rL1
[0229] midNodeV = 1 << (ChildNodeSizeLog2[2] - 1)
[0230] if (<!----> num_lasers_minus1 &&<!--!--> deltaAngleR <= (midNodeV << 26))
[0231] angular_eligible[Child] = 0
[0232] else
[0233] angular_eligible[Child] = 1
[0234] Where deltaAngle is the minimum angular distance between laser beams, determined by the following formula: <!----> if(num_lasers_minus1)<!--!--> deltaAngle = Min{ Abs(LaserAngle[i] –LaserAngle[j]) ; 0 ≤ i < j <= number_lasers_minus1}, The (sNchild, tNchild, vNchild) parameter specifies the position of the child node Child in the current stripe.
[0235] Figure 9 This is a conceptual diagram illustrating an example ranging system 900 that can be used with one or more technologies disclosed herein. Figure 9In one example, the ranging system 900 includes an illuminator 902 and a sensor 904. The illuminator 902 can emit light 906. In some examples, the illuminator 902 can emit light 906 as one or more laser beams. Light 906 can be one or more wavelengths, such as infrared wavelengths or visible light wavelengths. In other examples, light 906 is not a coherent laser. When light 906 encounters an object such as object 908, light 906 produces a return light 910. The return light 910 can include backscattered and / or reflected light. The return light 910 can be guided by lens 911, lens 1411, to create an image 912 of object 908 on sensor 904. Sensor 904 generates a signal 914 based on image 912. Image 912 can include a set of points (e.g., as shown by...). Figure 9 (Represented by points in image 912).
[0236] In some examples, illuminator 902 and sensor 904 can be mounted on a rotating structure, allowing illuminator 902 and sensor 904 to capture a 360-degree view of the environment. In other examples, ranging system 900 may include one or more optical components (e.g., mirrors, collimators, diffraction gratings, etc.) that enable illuminator 902 and sensor 904 to detect objects within a specific range (e.g., up to 360 degrees). Although Figure 9 The example shows only a single illuminator 902 and sensor 904, but the ranging system 900 may include multiple sets of illuminators and sensors.
[0237] In some examples, illuminator 902 generates a structured light pattern. In these examples, ranging system 900 may include multiple sensors 904 on which corresponding images of the structured light pattern are formed. Ranging system 900 can use the differences between the images of the structured light pattern to determine the distance to object 908 from which the structured light pattern is backscattered. When object 908 is relatively close to sensor 904 (e.g., 0.2 meters to 2 meters), structured light-based ranging systems can have a high level of accuracy (e.g., sub-millimeter accuracy). This high level of accuracy can be used in facial recognition applications, such as unlocking mobile devices (e.g., mobile phones, tablets, etc.), and for security applications.
[0238] In some examples, the ranging system 900 is a time-of-flight (ToF) based system. In some examples of the TOF-based ranging system 900, an illuminator 902 generates a light pulse. In other words, the illuminator 902 can modulate the amplitude of the emitted light 906. In these examples, the sensor 904 detects the return light 910 from the light pulse 906 generated by the illuminator 902. The ranging system 900 can then determine the distance to the object 908 from which the light 906 is backscattered based on the delay between when the light 906 is emitted and detected, and the known speed of light in air. In some examples, the illuminator 902 can modulate the phase of the emitted light 906 instead of (or add to) modulating the amplitude of the emitted light 1404. In these examples, sensor 904 can detect the phase of the return light 910 from object 908 and use the speed of light and the time difference between when illuminator 902 generates light 906 at a specific phase and when sensor 904 detects the return light 910 at a specific phase to determine the distance to a point on object 908.
[0239] In other examples, point clouds can be generated without using illuminator 902. For example, in some examples, sensor 904 of ranging system 900 may include two or more optical cameras. In such examples, ranging system 900 can use the optical cameras to capture a stereo image of the environment (including object 908). Ranging system 900 (e.g., point cloud generator 920) can then calculate the differences between positions in the stereo image. Ranging system 900 can then use this difference to determine the distance to the position shown in the stereo image. From these distances, point cloud generator 920 can generate a point cloud.
[0240] Sensor 904 can also detect other properties of object 908, such as color and reflectivity information. Figure 9 In the example, point cloud generator 920 can generate a point cloud based on signal 918 generated by sensor 904. Ranging system 900 and / or point cloud generator 920 can form data source 104 ( Figure 1 Part of ).
[0241] Figure 10 This is a conceptual diagram illustrating an example vehicle-based scenario in which one or more technologies of this disclosure can be used. Figure 10 In the example, vehicle 1000 includes a laser package 1002, such as a lidar system. This can be combined with laser package 500 (… Figure 5 The same method is used to achieve laser encapsulation 1002. Although not in Figure 10 The example shows, but vehicle 1000 may also include a data source (such as data source 104). Figure 1 )) and G-PCC encoders (such as G-PCC encoder 200 ( Figure 1 )).exist Figure 10 In the example, laser package 1002 emits laser beams 1004, which are reflected from pedestrian 1006 or other objects in the road. The data source of vehicle 1000 can generate a point cloud based on the signal generated by laser package 1002. The G-PCC encoder of vehicle 1000 can encode the point cloud to generate a bitstream 1008, such as a geometric bitstream 203. Figure 2 ) and attribute bitstream 205 ( Figure 2 Bitstream 1008 may include far fewer bits than the uncoded point cloud obtained by the G-PCC encoder. The output interface of vehicle 1000 (e.g., output interface 108) Figure 1 The bitstream 1008 can be sent to one or more other devices. Therefore, the vehicle 1000 is able to send the bitstream 1008 to other devices faster than uncoded point cloud data. Additionally, the bitstream 1008 may require less data storage capacity.
[0242] The techniques disclosed herein can also reduce the number of bits in bitstream 1008. For example, determining a predicted value based on a first laser angle and a second laser angle, and determining a third laser angle based on the difference between the predicted value and the laser angle, can reduce the number of bits in bitstream 1008 associated with the third laser angle. Similarly, when the G-PCC decoder determines the value of the first laser, the bitstream 1008 can include fewer bits, the value of the first laser indicating the number of probes in the azimuth direction of the first laser, decoding the syntax elements of the second laser, wherein the syntax elements of the second laser indicating the difference between the value of the first laser and the value of the second laser, the value of the second laser indicating the number of probes in the azimuth direction of the second laser; and determining one or more points of point cloud data based on the number of probes in the azimuth direction of the second laser.
[0243] exist Figure 10 In the example, vehicle 1000 can send bitstream 1008 to another vehicle 1010. Vehicle 1010 may include a G-PCC decoder (such as G-PCC decoder 300). Figure 1 The G-PCC decoder of vehicle 1010 can decode bitstream 1008 to reconstruct a point cloud. Vehicle 1010 can use the reconstructed point cloud for various purposes. For example, vehicle 1010 can determine, based on the reconstructed point cloud, that pedestrian 1006 is in the road ahead of vehicle 1000, and thus begin to decelerate, for example, before the driver of vehicle 1010 becomes aware that pedestrian 1006 is in the road. Therefore, in some examples, vehicle 1010 can perform autonomous navigation operations, generate notifications or warnings, or perform another action based on the reconstructed point cloud.
[0244] Additionally or alternatively, vehicle 1000 may send bitstream 1008 to server system 1012. Server system 1012 may use bitstream 1008 for various purposes. For example, server system 1012 may store bitstream 1008 for subsequent reconstruction of the point cloud. In this example, server system 1012 may use the point cloud and other data (e.g., vehicle telemetry data generated by vehicle 1000) to train an autonomous driving system. In other examples, server system 1012 may store bitstream 1008 for reconstruction in subsequent forensic collision investigations (e.g., if vehicle 1000 collides with pedestrian 1006).
[0245] Figure 11 This is a conceptual diagram illustrating an example extended reality system in which one or more of the technologies disclosed herein may be used. Extended reality (XR) is a term used to encompass a range of technologies, including augmented reality (AR), mixed reality (MR), and virtual reality (VR). Figure 11 In the example, a first user 1100 is located at a first location 1102. User 1100 wears an XR headset 1104. Alternatively, user 1100 may use a mobile device (e.g., a mobile phone, tablet, etc.). The XR headset 1104 includes a depth sensor (such as a LiDAR system) that detects the position of a point on an object 1106 at location 1102. The data source of the XR headset 1104 may use signals generated by the depth sensor to generate a point cloud representation of the object 1106 at location 1102. The XR headset 1104 may include a G-PCC encoder (e.g., Figure 1 The G-PCC encoder 200 is configured to encode point clouds to generate a bitstream 1108.
[0246] The techniques disclosed herein can also reduce the number of bits in bitstream 1108. For example, determining a predicted value based on a first laser angle and a second laser angle, and determining a third laser angle based on the difference between the predicted value and the laser angle, can reduce the number of bits in bitstream 1108 associated with the third laser angle. Similarly, bitstream 1108 can include fewer bits when the G-PCC decoder determines the value of the first laser, the value of which indicates the number of probes in the azimuth direction of the first laser, decoding the syntax elements of the second laser, wherein the syntax elements of the second laser indicate the difference between the value of the first laser and the value of the second laser, the value of which indicates the number of probes in the azimuth direction of the second laser; and determining one or more points of point cloud data based on the number of probes in the azimuth direction of the second laser.
[0247] XR headset 1104 can send bitstream 1108 (e.g., via a network such as the Internet) to XR headset 1110 worn by user 1112 at a second location 1114. XR headset 1110 can decode bitstream 1108 to reconstruct a point cloud. XR headset 1110 can use the point cloud to generate an XR visualization (e.g., AR, MR, VR visualization) representing object 1106 at location 1102. Thus, in some examples, such as when XR headset 1110 generates a VR visualization, user 1112 at location 1114 can have a 3D immersive experience at location 1102. In some examples, XR headset 1110 can determine the location of a virtual object based on the reconstructed point cloud. For example, XR headset 1110 can determine, based on the reconstructed point cloud, that the environment (e.g., location 1102) includes a flat surface, and then determine that a virtual object (e.g., a cartoon character) will be positioned on that flat surface. XR headset 1110 can generate XR visualizations in which virtual objects are located in defined positions. For example, XR headset 1110 can display a cartoon character sitting on a flat surface.
[0248] Figure 12 This is a conceptual diagram illustrating an example mobile device system in which one or more technologies of this disclosure may be used. Figure 12 In one example, a mobile device 1200, such as a mobile phone or tablet computer, includes a depth detection sensor, such as a LiDAR system, that detects the position of points on an object 1202 in the environment of the mobile device 1200. The data source of the mobile device 1200 can use signals generated by the depth detection sensor to generate a point cloud representation of the object 1202. The mobile device 1200 may include a G-PCC encoder (e.g., Figure 1 The G-PCC encoder 200 is configured to encode point clouds to generate a bitstream 1204. Figure 12 In the example, mobile device 1200 can send a bitstream to remote device 1206 (such as a server system or other mobile device). Remote device 1206 can decode the bitstream 1204 to reconstruct a point cloud. Remote device 1206 can use the point cloud for various purposes. For example, remote device 1206 can use the point cloud to generate an environment map of mobile device 1200. For example, remote device 1206 can generate a map of the interior of a building based on the reconstructed point cloud. In another example, remote device 1206 can generate an image (e.g., computer graphics) based on the point cloud. For example, remote device 1206 can use the points of the point cloud as vertices of a polygon and use the color attributes of the points as the basis for coloring the polygon. In some examples, remote device 1206 can use the point cloud to perform facial recognition.
[0249] The techniques disclosed herein can also reduce the number of bits in bitstream 1204. For example, determining a predicted value based on a first laser angle and a second laser angle, and determining a third laser angle based on the difference between the predicted value and the laser angle, can reduce the number of bits in bitstream 1204 associated with the third laser angle. Similarly, bitstream 1204 can include fewer bits when the G-PCC decoder determines the value of the first laser, the value of the first laser indicating the number of probes in the azimuth direction of the first laser, decoding the syntax elements of the second laser, wherein the syntax elements of the second laser indicating the difference between the value of the first laser and the value of the second laser, the value of the second laser indicating the number of probes in the azimuth direction of the second laser; and determining one or more points of point cloud data based on the number of probes in the azimuth direction of the second laser.
[0250] Examples in various aspects of this disclosure may be used individually or in any combination.
[0251] The following is a non-limiting list of aspects of one or more technologies that can be used according to this disclosure.
[0252] Aspect 1A: A method for processing point clouds, comprising decoding the vertical plane position of a planar pattern in a node of an octree, the octree representing the three-dimensional position of points in the point cloud, wherein decoding the vertical plane position of the planar pattern comprises: determining a laser index of a laser candidate in a laser candidate set, wherein the determined laser index indicates the position of a laser beam intersecting the node; determining a context index based on the intersection of the laser beam and the node; and using the context indicated by the determined context index to perform arithmetic decoding of the vertical plane position of the planar pattern.
[0253] Aspect 2A: According to the method of aspect 1A, determining the context index includes determining the context index based on whether the laser beam is above or below the marker point, where the marker point is the center of the node.
[0254] Aspect 3A: According to the method of aspect 1A, determining the context index includes determining the context index based on whether the laser beam is above a first distance threshold, below a second distance threshold, or between the first and second distance thresholds.
[0255] Aspect 4A: According to the method of aspect 1A, determining the context index includes determining the context index based on whether the laser beam is placed above a first distance threshold, or between the first distance threshold and a second distance threshold, or between the second distance threshold and a third distance threshold, or below a third distance threshold.
[0256] Aspect 5A: A method for processing point clouds includes: decoding vertical point position offsets within nodes of an octree, the tree representing the three-dimensional positions of points in the point cloud, wherein decoding the vertical point position offsets includes: determining a laser index of a laser candidate in a laser candidate set, wherein the determined laser index indicates the position of a laser beam intersecting the node; determining a context index based on the intersection of the laser beam and the node; and arithmetically decoding a binary number of vertical point position offsets using the context indicated by the determined context index.
[0257] Aspect 6A: According to the method of aspect 5A, determining the context index includes determining the context index based on whether the laser beam is above or below the marker point, where the marker point is the center of the node.
[0258] Aspect 7A: According to the method of aspect 5A, determining the context index includes determining the context index based on whether the laser beam is above a first distance threshold, below a second distance threshold, or between the first and second distance thresholds.
[0259] Aspect 8A: According to the method of aspect 5A, determining the context index includes determining the context index based on whether the laser beam is placed above a first distance threshold, or between the first distance threshold and a second distance threshold, or between the second distance threshold and a third distance threshold, or below a third distance threshold.
[0260] Aspect 9A: A method for processing point clouds includes: decoding a syntax element having a first value, wherein the first value plus a second value indicates the number of lasers, wherein the second value is a minimum number of lasers.
[0261] Aspect 10A: According to the method of Aspect 9A, wherein the syntax element is a first syntax element, the method further includes: determining a laser index of a laser candidate in a laser candidate set, wherein the laser candidate set has the number of lasers, and the determined laser index indicates the position of a laser beam intersecting with a node of an octree, the tree representing the three-dimensional position of a point in a point cloud; determining a context index based on the intersection of the laser beam with the node; and using the context indicated by the determined context index to perform arithmetic decoding on the binary number of the second syntax element.
[0262] Aspect 11A: A method for processing point clouds includes: determining laser indices of laser candidates in a laser candidate set, wherein the determined laser indices indicate the positions of laser beams intersecting with nodes of an octree, the tree representing the three-dimensional positions of points in the point cloud; determining context indices based on the intersection of laser beams with nodes using an angle pattern; and using the context indicated by the determined context indices to perform arithmetic decoding on a binary number of a second syntax element.
[0263] Aspect 12A: A method for processing point clouds includes: for each laser signaling in the laser candidate set, notifying the corresponding laser angle and the corresponding laser offset.
[0264] Aspect 13A: The method according to aspect 12A also includes the method of any one of aspects 1A to 11A.
[0265] Aspect 14A: The method according to any one of Aspects 1A-13A also includes generating point clouds.
[0266] Aspect 15A: An apparatus for processing point clouds, the apparatus comprising one or more components for performing a method of any one of Aspects 1A-14A.
[0267] Aspect 16A: A device according to aspect 15A, wherein one or more components include one or more processors implemented in a circuit.
[0268] Aspect 17A: The device according to any one of aspect 15A or aspect 16A further includes a memory for storing data representing a point cloud.
[0269] Aspect 18A: A device according to any one of aspects 15A-17A, wherein the device includes a decoder.
[0270] Aspect 19A: A device according to any one of aspects 15A-18A, wherein the device includes an encoder.
[0271] Aspect 20A: The apparatus according to any one of aspects 15A-19A further includes apparatus for generating point clouds.
[0272] Aspect 21A: The device according to any one of aspects 15A-20A further includes a display for presenting a point cloud-based image.
[0273] Aspect 22A: A computer-readable storage medium having instructions stored thereon, which, when executed, cause one or more processors to perform any one of aspects 1A-14A.
[0274] Aspect 1B. A method for decoding a point cloud, the method comprising: determining a first laser angle; determining a second laser angle; decoding a laser angle difference syntax element of a third laser angle, wherein the laser angle difference syntax element indicates the laser angle difference of the third laser angle; and predicting a third laser angle based on the laser angle difference of the first laser angle, the second laser angle, and the third laser angle.
[0275] Aspect 2B. According to the method of aspect 1B, the decoding of the laser angle difference syntax element of the third laser angle includes decoding the laser angle difference syntax element of the third laser angle as a left-first signed integer zero-order exponent Columbus decoding syntax element.
[0276] Aspect 3B. The method according to any one of Aspects 1B-2B, wherein determining the second laser angle includes decoding the laser angle difference syntax element of the second laser angle, wherein the laser angle difference syntax element of the second laser angle is a left-first signed integer zero-order exponent Columbus decoding syntax element.
[0277] Aspect 4B. The method according to any one of Aspects 1B-3B, wherein predicting the third laser angle includes performing linear prediction to determine the third laser angle based on the laser angle difference between the first laser angle, the second laser angle, and the third laser angle.
[0278] Aspect 5B. The method according to any one of Aspects 1B-4B, wherein determining the position of a point in a point cloud based on a third laser angle includes: decoding a vertical plane position syntax element based on a third laser angle; and determining the position of a point based on a vertical plane position syntax element.
[0279] Aspect 6B. The method according to any one of Aspects 1B-5B, wherein the method further includes decoding a laser information prediction indicator syntax element that specifies a method for deriving laser information from a laser angle difference syntax element of a third laser angle.
[0280] Aspect 7B. The method according to any one of Aspects 1B-6B further includes determining the position of a point in the point cloud based on a third laser angle.
[0281] Aspect 8B. A method for encoding a point cloud, the method comprising: determining a first laser angle; determining a second laser angle; using a laser having a third laser angle to determine the position of a point in the point cloud; and encoding a laser angle difference syntax element for the third laser angle, wherein: the laser angle difference syntax element indicates the laser angle difference of the third laser angle, and the third laser angle is predicted based on the laser angle difference of the first laser angle, the second laser angle, and the laser angle difference of the third laser angle.
[0282] Aspect 9B. According to the method of aspect 8B, the encoding of the laser angle difference syntax element of the third laser angle includes encoding the laser angle difference syntax element of the third laser angle as a left-first signed integer zero-order exponent Columbus decode syntax element.
[0283] Aspect 10B. The method according to any one of Aspects 8B-9B, wherein the method further comprises encoding a laser angle difference syntax element of a second laser angle, wherein: the laser angle difference syntax element of the second laser angle indicates the difference between the second laser angle and the first laser angle, and the laser angle difference syntax element of the second laser angle is a left-first signed integer zero-order exponent Golomb decode syntax element.
[0284] Aspect 11B. The method of any one of Aspects 8B-10B, wherein the third laser angle is predicted based on a linear prediction of the laser angle difference between the first laser angle, the second laser angle, and the third laser angle.
[0285] Aspect 12B. The method according to any one of Aspects 8B-11B, wherein the method further includes encoding a laser information prediction indicator syntax element that specifies a method for deriving laser information from a laser angle difference syntax element of a third laser angle.
[0286] Aspect 13B. A method for decoding a point cloud, the method comprising: determining a value of a first laser, the value of the first laser indicating the number of probes in an azimuth direction with respect to a fully rotated first laser; and decoding a syntax element of a second laser, wherein the syntax element of the second laser indicates the difference between the value of the first laser and the value of the second laser, the value of the second laser indicating the number of probes in an azimuth direction with respect to a fully rotated second laser.
[0287] Aspect 14B. The method according to aspect 13B further includes determining one or more points in the point cloud based on the number of probes in an azimuth direction of a complete rotation of the second laser.
[0288] Aspect 15B. The method according to aspect 13B also includes the method of any one of aspects 1B to 7B.
[0289] Aspect 16B. A method for encoding a point cloud, the method comprising: determining a value of a first laser, the value of the first laser indicating the number of probes in an azimuth direction of a complete rotation of the first laser; and encoding syntax elements of a second laser, wherein the syntax elements of the second laser indicate the difference between the value of the first laser and the value of the second laser, the value of the second laser indicating the number of probes in an azimuth direction of a complete rotation of the second laser.
[0290] Aspect 17B. The method according to aspect 16B further includes encoding one or more points in the point cloud based on the number of probes in an azimuth direction of a complete rotation of the second laser.
[0291] Aspect 18B. The method according to aspect 16B also includes the method of any one of aspects 8-12.
[0292] Aspect 19B. A method for decoding a point cloud, the method comprising: decoding a syntax element, wherein the value of the syntax element plus 2 specifies the number of lasers used for an angle decoding mode; and using the angle decoding mode to decode the point cloud.
[0293] Aspect 20B. An apparatus for decoding point clouds, the apparatus comprising one or more components for performing a method of any one of Aspects 1B-7B, Aspects 13B-15B or Aspect 19B.
[0294] Aspect 21B. An apparatus for encoding point clouds, the apparatus comprising one or more components for performing a method of any one of Aspects 8B-12B or Aspects 16B-19B.
[0295] Aspect 22B. An apparatus according to any one of Aspect 20B or Aspect 21B, wherein one or more components include one or more processors implemented in a circuit.
[0296] Aspect 23B. The apparatus according to any one of aspects 20B-22B further includes a memory for storing data representing a point cloud.
[0297] Aspect 24B. An apparatus according to any one of aspects 20B-23B, wherein the apparatus includes a decoder.
[0298] Aspect 25B. An apparatus according to any one of aspects 20B-24B, wherein the apparatus includes an encoder.
[0299] Aspect 26B. The apparatus according to any one of Aspects 20B-25B further includes apparatus for generating point clouds.
[0300] Aspect 27B. The apparatus according to any one of aspects 20B-26B further includes a display for presenting a point cloud-based image.
[0301] Aspect 28B. A computer-readable storage medium having instructions stored thereon, which, when executed, cause one or more processors to perform any one of aspects 1B-19B.
[0302] Aspect 1C. An apparatus comprising: a memory configured to store point cloud data; and one or more processors coupled to the memory and implemented in circuitry, the one or more processors being configured to: obtain a first laser angle; obtain a second laser angle; obtain a laser angle difference of a third laser angle; determine a prediction value based on the first laser angle and the second laser angle; and determine a third laser angle based on the laser angle difference between the prediction value and the third laser angle.
[0303] Aspect 2C. According to the device of aspect 1C, one or more processors are further configured to decode the vertical position of points in point cloud data based on a third laser angle.
[0304] Aspect 3C. According to the device of aspect 2C, one or more processors are configured to decode the vertical position of a point based on a third laser angle and a laser correction value of a laser having the third laser angle.
[0305] Aspect 4C. A device according to any one of Aspects 1C-3C, wherein one or more processors are configured to decode a syntax element of the laser angle difference specifying a third laser angle as a left-first signed integer zero-order exponent Columbus decoding syntax element as part of obtaining the laser angle difference of the third laser angle.
[0306] Aspect 5C. A device according to any one of Aspects 1C-4C, wherein one or more processors are configured to decode a syntax element of a laser angle difference specifying a second laser angle, as part of obtaining the second laser angle, the syntax element comprising a left-first signed integer zero-order exponent Columbus decode syntax element.
[0307] Aspect 6C. An apparatus according to any one of Aspects 1C-5C, wherein one or more processors are configured to perform linear prediction to determine a predicted value based on a first laser angle and a second laser angle as part of determining the predicted value.
[0308] Aspect 7C. According to the device of aspect 6C, one or more processors are configured to determine the predicted value as 2. First laser angle plus -1 The second laser angle is used as part of performing linear prediction to determine the predicted value.
[0309] Aspect 8C. A device according to any one of Aspects 1C-7C, wherein one or more processors are further configured to decode a syntax element indicating the position of a vertical plane based on a third laser angle.
[0310] Aspect 9C. An apparatus according to any one of Aspects 1C-8C, wherein: a first laser angle specifies the elevation angle of a first laser as tangent to a horizontal plane defined by a first axis and a second axis of point cloud data, a second laser angle specifies the elevation angle of a second laser as tangent to the horizontal plane, and a third laser angle specifies the elevation angle of a third laser as tangent to the horizontal plane.
[0311] Aspect 10C. The apparatus according to aspect 9C, wherein the first laser, the second laser, and the third laser are included in a laser package.
[0312] Aspect 11C. The device according to any one of aspects 1C-9C further includes a display for presenting an image based on point cloud data.
[0313] Aspect 12C. An apparatus comprising: a memory configured to store point cloud data; and one or more processors coupled to the memory and implemented in circuitry, the one or more processors being configured to: obtain a first laser angle; obtain a second laser angle; determine a prediction value based on the first laser angle and the second laser angle; and encode a laser angle difference of a third laser angle, wherein the laser angle difference is equal to the difference between the third laser angle and the prediction value.
[0314] Aspect 13C. According to the device of 12C, one or more processors are configured to encode the vertical position of points in point cloud data based on a laser with a third laser angle.
[0315] Aspect 14C. According to the device of aspect 13C, one or more processors are configured to encode the vertical position of a point based on a third laser angle and a laser correction value of a laser having the third laser angle.
[0316] Aspect 15C. A device according to any one of Aspects 12C-14C, wherein one or more processors are configured to encode a syntax element of a laser angle difference specifying a third laser angle as a left-first signed integer zero-order exponent Columbus decoded syntax element.
[0317] Aspect 16C. The apparatus according to any one of Aspects 12C-15C, wherein one or more processors are further configured to encode a syntax element of a laser angle difference specifying a second laser angle, wherein: the laser angle difference of the second laser angle indicates the difference between the second laser angle and the first laser angle, and the syntax element specifying the laser angle difference of the second laser angle is encoded as a left-first signed integer zero-order exponent Golomb decoded syntax element.
[0318] Aspect 17C. An apparatus according to any one of Aspects 12C-16C, wherein one or more processors are configured to perform linear prediction to determine a predicted value based on a first laser angle and a second laser angle as part of determining the predicted value.
[0319] Aspect 18C. According to the device of aspect 17C, one or more processors are configured to determine the predicted value as 2. First laser angle plus -1 The second laser angle is used as part of performing linear prediction to determine the predicted value.
[0320] Aspect 19C. An apparatus according to any one of Aspects 12C-18C, wherein: a first laser angle specifies the elevation angle of a first laser as tangent to a horizontal plane defined by a first axis and a second axis of point cloud data, a second laser angle specifies the elevation angle of a second laser as tangent to the horizontal plane, and a third laser angle specifies the elevation angle of a third laser as tangent to the horizontal plane.
[0321] Aspect 20C. The apparatus according to aspect 19C also includes a laser package, which includes a first laser, a second laser and a third laser.
[0322] Aspect 21C. The apparatus according to any one of Aspects 12C-20C further includes a sensor for generating point cloud data.
[0323] Aspect 22C. A method comprising: obtaining a first laser angle; obtaining a second laser angle; obtaining a laser angle difference of a third laser angle; determining a predicted value based on the first laser angle and the second laser angle; and determining a third laser angle based on the laser angle difference between the predicted value and the third laser angle.
[0324] Aspect 23C. The method according to aspect 22C also includes decoding the vertical position of points in the point cloud data based on a third laser angle.
[0325] Aspect 24C. According to the method of aspect 22C, the decoding of the vertical position of a point in point cloud data includes decoding the vertical position of the point based on a third laser angle and a laser correction value of a laser having the third laser angle.
[0326] Aspect 25C. The method according to any one of Aspects 22C-24C, wherein obtaining the laser angle difference of the third laser angle includes decoding the syntax element of the laser angle difference specifying the third laser angle as a left-first signed integer zero-order exponent Columbus decoding syntax element.
[0327] Aspect 26C. The method according to any one of Aspects 22C-25C, wherein obtaining the predicted value includes performing a linear prediction to determine the predicted value based on a first laser angle and a second laser angle.
[0328] Aspect 27C. The method according to any one of Aspects 22C-26C further includes decoding the syntax element indicating the position of the vertical plane based on a third laser angle.
[0329] Aspect 28C. A method according to any one of Aspects 22C-27C, wherein: a first laser angle specifies the elevation angle of a first laser as tangent to a horizontal plane defined by a first axis and a second axis of point cloud data, a second laser angle specifies the elevation angle of a second laser as tangent to the horizontal plane, and a third laser angle specifies the elevation angle of a third laser as tangent to the horizontal plane.
[0330] Aspect 29C. A method comprising: obtaining a first laser angle; obtaining a second laser angle; determining a predicted value based on the first laser angle and the second laser angle; and encoding a laser angle difference of a third laser angle, wherein the laser angle difference is equal to the difference between the third laser angle and the predicted value.
[0331] Aspect 30C. The method according to aspect 29C also includes encoding the vertical position of points in the point cloud data based on a laser with a third laser angle.
[0332] Aspect 31C. The method of any one of Aspects 29C-30C, wherein determining the predicted value comprises determining the predicted value by performing a linear prediction based on a first laser angle and a second laser angle.
[0333] Aspect 32C. An apparatus comprising: components for obtaining a first laser angle; components for obtaining a second laser angle; components for obtaining a laser angle difference of a third laser angle; components for determining a predicted value based on the first laser angle and the second laser angle; and components for determining a third laser angle based on the predicted value and the laser angle difference of the third laser angle.
[0334] Aspect 33C. An apparatus comprising: means for obtaining a first laser angle; means for obtaining a second laser angle; means for determining a predicted value based on the first laser angle and the second laser angle; and means for encoding a laser angle difference of a third laser angle, wherein the laser angle difference is equal to the difference between the third laser angle and the predicted value.
[0335] Aspect 34C. A computer-readable storage medium having instructions stored thereon, which, when executed, cause one or more processors to: obtain a first laser angle; obtain a second laser angle; obtain a laser angle difference syntax element for a third laser angle, wherein the laser angle difference syntax element indicates a laser angle difference of the third laser angle; determine a predicted value based on the first laser angle and the second laser angle; and determine a third laser angle based on the predicted value and the laser angle difference of the third laser angle.
[0336] Aspect 35C. A computer-readable storage medium having instructions thereon that, when executed, cause one or more processors to: obtain a first laser angle; obtain a second laser angle; determine a predicted value based on the first laser angle and the second laser angle; and encode a laser angle difference of a third laser angle, wherein the laser angle difference is equal to the difference between the third laser angle and the predicted value.
[0337] It should be recognized that, based on the examples, certain actions or events of any technique described herein may be performed in a different sequence, and may be added together, combined, or omitted (e.g., not all described actions or events are necessary for technical practice). Furthermore, in some examples, actions or events may be performed concurrently rather than sequentially, for example, through multithreading, interrupt handling, or multiple processors.
[0338] In one or more examples, the described functionality may be implemented in hardware, software, firmware, or any combination thereof. If implemented in software, the functionality may be stored or transmitted as one or more instructions or code on or through a computer-readable medium and executed by a hardware-based processing unit. A computer-readable medium may include a computer-readable storage medium, which corresponds to a tangible medium such as a data storage medium, or a communication medium, including, for example, any medium that facilitates the transfer of a computer program from one place to another according to a communication protocol. In this way, a computer-readable medium may generally correspond to (1) a non-transitory tangible computer-readable storage medium, or (2) a communication medium such as a signal or carrier wave. A data storage medium may be any available medium that can be accessed by one or more computers or one or more processors to retrieve instructions, code, and / or data structures to implement the techniques described in this disclosure. A computer program product may include a computer-readable medium.
[0339] By way of example and not limitation, such computer-readable storage media may include RAM, ROM, EEPROM, CD-ROM or other optical disc storage, disk storage or other magnetic storage devices, flash memory, or any other medium that can be used to store required program code in the form of instructions or data structures and that can be accessed by a computer. Moreover, any connection is appropriately referred to as a computer-readable medium. For example, the definition of medium includes coaxial cable, fiber optic cable, twisted pair, DSL, or wireless technologies (such as infrared, radio, and microwave) if instructions are sent from a website, server, or other remote source using coaxial cable, fiber optic cable, twisted pair, DSL, or wireless technologies (such as infrared, radio, and microwave). However, it should be understood that computer-readable storage media and data storage media do not include connections, carrier waves, signals, or other transient media, but rather refer to non-transient tangible storage media. As used herein, disks and optical discs include compact optical discs (CDs), laser optical discs, optical discs, digital versatile optical discs (DVDs), floppy disks, and Blu-ray discs, wherein disks typically reproduce data magnetically, while optical discs reproduce data optically using lasers. Combinations of the above should also be included within the scope of computer-readable media.
[0340] Instructions can be executed by one or more processors, such as one or more digital signal processors (DSPs), general-purpose microprocessors, application-specific integrated circuits (ASICs), field-programmable gate arrays (FPGAs), or other equivalent integrated or discrete logic circuits. Therefore, the terms "processor" and "processing circuit" as used herein can refer to any of the foregoing structures or any other structures suitable for implementing the techniques described herein. Additionally, in some aspects, the functionality described herein can be provided within dedicated hardware and / or software modules configured for encoding and decoding, or incorporated into a combinational decoder. Similarly, the technique can be fully implemented in one or more circuit or logic elements.
[0341] The techniques disclosed herein can be implemented in various devices or apparatuses, including wireless mobile phones, integrated circuits (ICs), or a set of ICs (e.g., chipsets). Various components, modules, or units are described in this disclosure to emphasize functional aspects of a device configured to perform the disclosed techniques, but they do not necessarily need to be implemented by different hardware units. Rather, as described above, various units can be combined in a decoder hardware unit or provided by a collection of interoperable hardware units, including one or more processors as described above, combined with suitable software and / or firmware.
[0342] Various examples have been described. These and other examples are within the scope of the appended claims.
Claims
1. An apparatus comprising: The storage device is configured to store point cloud data. as well as One or more processors coupled to the memory and implemented in the circuit, the one or more processors being configured to: Obtain a first laser angle, wherein the first laser angle specifies the elevation angle of the first laser relative to the tangent of the horizontal plane defined by the first axis and the second axis of the point cloud data; Obtain a second laser angle, wherein the second laser angle specifies the elevation angle of the second laser relative to the tangent of the horizontal plane; The laser angle difference of the third laser angle is obtained, wherein the third laser angle specifies the tangent of the elevation angle of the third laser relative to the horizontal plane; Perform linear prediction to determine the predicted value based on the first laser angle and the second laser angle; and The third laser angle is determined based on the difference between the predicted value and the third laser angle.
2. The device according to claim 1, wherein, The one or more processors are also configured to decode the vertical position of points in the point cloud data based on the third laser angle.
3. The device according to claim 2, wherein, The one or more processors are configured to decode the vertical position of the point based on the third laser angle and a laser correction value of the laser having the third laser angle.
4. The device according to claim 1, wherein, The one or more processors are configured to decode the syntax element specifying the laser angle difference of the third laser angle as a left-first signed integer zero-order exponent Columbus decoding syntax element as part of obtaining the laser angle difference of the third laser angle.
5. The device according to claim 1, wherein, The one or more processors are configured to decode a syntax element of a laser angle difference specifying the second laser angle, the syntax element including a left-first signed integer zero-order exponent Columbus decoding syntax element as part of obtaining the second laser angle.
6. The device according to claim 1, wherein, The one or more processors are configured to determine the predicted value as 2. The first laser angle plus -1 The second laser angle is used as part of performing a linear prediction to determine the predicted value.
7. The device according to claim 1, wherein, The one or more processors are also configured to decode syntax elements indicating vertical plane positions based on the third laser angle.
8. The device according to claim 1, wherein, The first laser, the second laser, and the third laser are included in a laser package.
9. The device of claim 1, further comprising a display for presenting an image based on the point cloud data.
10. An apparatus comprising: The storage device is configured to store point cloud data. as well as One or more processors coupled to the memory and implemented in the circuit, the one or more processors being configured to: Obtain a first laser angle, wherein the first laser angle specifies the elevation angle of the first laser relative to the tangent of the horizontal plane defined by the first axis and the second axis of the point cloud data; Obtain a second laser angle, wherein the second laser angle specifies the elevation angle of the second laser relative to the tangent of the horizontal plane; Perform linear prediction to determine the predicted value based on the first laser angle and the second laser angle; and The laser angle difference of the third laser angle is encoded, wherein the third laser angle specifies the tangent of the elevation angle of the third laser relative to the horizontal plane, and the laser angle difference is equal to the difference between the third laser angle and the predicted value.
11. The device according to claim 10, wherein, The one or more processors are configured to encode the vertical position of points in the point cloud data based on a laser with the third laser angle.
12. The device according to claim 11, wherein, The one or more processors are configured to encode the vertical position of the point based on the third laser angle and a laser correction value of the laser having the third laser angle.
13. The device according to claim 10, wherein, The one or more processors are configured to encode the syntax element of the laser angle difference specifying the third laser angle as a left-first signed integer zero-order exponent Columbus decoded syntax element.
14. The device according to claim 10, wherein, The one or more processors are further configured to encode a syntax element specifying the laser angle difference for the second laser angle, wherein: The laser angle difference of the second laser angle indicates the difference between the second laser angle and the first laser angle, and The syntax element specifying the laser angle difference of the second laser angle is encoded as a left-first signed integer zero-order exponent Columbus decoded syntax element.
15. The device according to claim 10, wherein, The one or more processors are configured to determine the predicted value as 2. The first laser angle plus -1 The second laser angle is used as part of performing a linear prediction to determine the predicted value.
16. The device of claim 10 further includes laser packaging, the laser packaging comprising the first laser, the second laser, and the third laser.
17. The device of claim 10, further comprising a sensor for generating the point cloud data.
18. A method comprising: Obtain a first laser angle, wherein the first laser angle specifies the elevation angle of the first laser relative to the tangent of the horizontal plane defined by the first axis and the second axis of the point cloud data; Obtain a second laser angle, wherein the second laser angle specifies the elevation angle of the second laser relative to the tangent of the horizontal plane; The laser angle difference of the third laser angle is obtained, wherein the third laser angle specifies the tangent of the elevation angle of the third laser relative to the horizontal plane; Perform linear prediction to determine the predicted value based on the first laser angle and the second laser angle; and The third laser angle is determined based on the difference between the predicted value and the third laser angle.
19. The method of claim 18, further comprising decoding the vertical position of points in the point cloud data based on the third laser angle.
20. The method according to claim 19, wherein, Decoding the vertical position of the point in the point cloud data includes decoding the vertical position of the point based on the third laser angle and the laser correction value of the laser having the third laser angle.
21. The method according to claim 18, wherein, Obtaining the laser angle difference of the third laser angle includes decoding the syntax element specifying the laser angle difference of the third laser angle as a left-first signed integer zero-order exponent Columbus decoding syntax element.
22. The method of claim 18, further comprising decoding the syntax element indicating the vertical plane position based on the third laser angle.
23. A method comprising: Obtain a first laser angle, wherein the first laser angle specifies the elevation angle of the first laser relative to the tangent of the horizontal plane defined by the first axis and the second axis of the point cloud data; Obtain a second laser angle, wherein the second laser angle specifies the elevation angle of the second laser relative to the tangent of the horizontal plane; Perform linear prediction to determine the predicted value based on the first laser angle and the second laser angle; and The laser angle difference of the third laser angle is encoded, wherein the third laser angle specifies the tangent of the elevation angle of the third laser relative to the horizontal plane, and the laser angle difference is equal to the difference between the third laser angle and the predicted value.
24. The method of claim 23, further comprising encoding the vertical position of points in the point cloud data based on a laser having the third laser angle.
25. An apparatus comprising: A component for obtaining a first laser angle, wherein the first laser angle specifies the elevation angle of the first laser relative to the tangent of a horizontal plane defined by a first axis and a second axis of the point cloud data; A component for obtaining a second laser angle, wherein the second laser angle specifies the elevation angle of the second laser relative to the tangent of the horizontal plane; A component for obtaining a laser angle difference of a third laser angle, wherein the third laser angle specifies the tangent of the elevation angle of the third laser relative to the horizontal plane; Components for performing linear prediction to determine a predicted value based on the first laser angle and the second laser angle; and A component for determining the third laser angle based on the difference between the predicted value and the third laser angle.
26. An apparatus comprising: A component for obtaining a first laser angle, wherein the first laser angle specifies the elevation angle of the first laser relative to the tangent of a horizontal plane defined by a first axis and a second axis of the point cloud data; A component for obtaining a second laser angle, wherein the second laser angle specifies the elevation angle of the second laser relative to the tangent of the horizontal plane; Components for performing linear prediction to determine a predicted value based on the first laser angle and the second laser angle; and A component for encoding the laser angle difference of a third laser angle, wherein the third laser angle specifies the tangent of the elevation angle of the third laser relative to the horizontal plane, and the laser angle difference is equal to the difference between the third laser angle and the predicted value.
27. A computer-readable storage medium having instructions stored thereon, the instructions causing one or more processors to: Obtain the first laser angle, where, The first laser angle specifies the elevation angle of the first laser relative to the tangent of the horizontal plane defined by the first and second axes of the point cloud data; Obtain a second laser angle, wherein the second laser angle specifies the elevation angle of the second laser relative to the tangent of the horizontal plane; A syntax element for obtaining the laser angle difference of the third laser angle is provided, wherein the third laser angle specifies the tangent of the elevation angle of the third laser relative to the horizontal plane, and the laser angle difference syntax element indicates the laser angle difference of the third laser angle. Perform linear prediction to determine the predicted value based on the first laser angle and the second laser angle; and The third laser angle is determined based on the difference between the predicted value and the third laser angle.
28. A computer-readable storage medium having instructions stored thereon, the instructions causing one or more processors to: Obtain the first laser angle, where, The first laser angle specifies the elevation angle of the first laser relative to the tangent of the horizontal plane defined by the first and second axes of the point cloud data; Obtain a second laser angle, wherein the second laser angle specifies the elevation angle of the second laser relative to the tangent of the horizontal plane; Perform linear prediction to determine the predicted value based on the first laser angle and the second laser angle; and The laser angle difference of the third laser angle is encoded, wherein the third laser angle specifies the tangent of the elevation angle of the third laser relative to the horizontal plane, and the laser angle difference is equal to the difference between the third laser angle and the predicted value.