Patent Description:
Three hundred sixty degree (<NUM>°) video is emerging as a new way of experiencing immersive video due to the ready availability of powerful handheld devices such as smartphones. <NUM>° video enables immersive "real life," "being there" experience for consumers by capturing the <NUM>° view of the world. Users can interactively change their viewpoint and dynamically view any part of the captured scene or object they desire. Display and navigation sensors can track head movement of the user in real-time to determine the region of the <NUM>° video that the user wants to view. Multimedia data that is three-dimensional (3D) in nature, such as point clouds can be used in the immersive environment.

Point clouds are a set of 3D points that represent an object's surface. Point clouds are common in a variety of applications such as gaming, 3D maps, visualizations, medical applications, augmented reality, virtual reality, autonomous driving, multi-view replay, 6DoF immersive media, to name a few. Point clouds, if uncompressed, generally require a large amount of bandwidth for transmission. Due to the large bitrate requirement, point clouds are often compressed prior to transmission. Compressing a 3D object such as a point cloud often requires specialized hardware. To avoid specialized hardware to compress a 3D point cloud, a 3D point cloud can be manipulated onto traditional two-dimensional (2D) frames and that can be compressed such that the compressed frames can be transmitted to another device without specialized hardware.

The following publications are related to encoding 3D point cloud:.

This disclosure provides image padding in video-based point-cloud compression codec.

In one embodiment, an encoder for point cloud encoding is provided as per the appended claims.

In another embodiment, a method for point cloud encoding is provided as per the appended claims.

Those skilled in the art will understand that the principles of the present disclosure may be implemented in any suitably-arranged system or device.

Augmented reality (AR) is an interactive experience of a real world environment where objects that reside in the real-world environment are augmented with virtual objects, virtual information, or both. Virtual reality (VR) is a rendered version of a visual scene, where the entire scene is computer generated. In certain embodiments, AR and VR include both visual and audio experiences. A visual rendering is designed to mimic the visual stimuli, and if available audio sensory stimuli, of the real world as naturally as possible to an observer or user as the user moves within the limits defined by the application or the AR or VR scene. For example, VR places a user into immersive worlds that respond to the head movements of a user. At the video level, VR is achieved by providing a video experience that covers as much of the field of view (FOV) as possible together with the synchronization of the viewing angle of the rendered video with the head movements.

Many different types of devices are able to provide the immersive experience associated with AR or VR. One example device is a head-mounted display (HMD). A HMD is a device that enables a user to view the VR scene and adjust the displayed content based on movements of the head of the user. A HMD represent one of many types of devices that provide AR and VR experiences to a user. Typically, a HMD relies either on a dedicated screen that is integrated into a device and connected with an external computer (tethered) or on a device, such as a smartphone, that is inserted into the HMD (untethered). The first approach utilizes one or more lightweight screens and benefits from a high computing capacity. In contrast, the smartphone-based systems utilize higher mobility and can be less expensive to produce. In both instances, the video experience generated is the same. It is noted that as used herein, the term "user" may denote a human or another device (such as an artificial intelligent electronic device) using the electronic device.

A point cloud is a virtual representation of an object in three dimensions. For example, a point cloud is a collection of points in 3D space, and each point is positioned in a particular position within 3D space and includes one or more attributes, such as color. A point cloud can be similar to a virtual object in a VR or AR environment. A point mesh is another type of a virtual representation of an object in a VR or AR environment. A point cloud or a point mesh can be an object, multiple objects, a virtual scene (which includes multiple objects), and the like. Point clouds are commonly used in a variety of applications, including gaming, 3D mapping, visualization, medicine, AR, VR, autonomous driving, multi-view replay, <NUM> degrees of freedom immersive media, to name a few.

Point clouds represent volumetric visual data. Point clouds consist of multiple 3D points positioned in 3D space. Each point in a 3D point cloud includes an attribute such as a geometric position, represented by <NUM>-tuple (X,Y,Z) coordinate values. When each point is identified by the three coordinates, a precise location in 3D environment or space is identified. The location in a 3D environment or space of each point can be relative to an origin, other points of the point cloud, or a combination thereof. The origin is a location where the X, Y, and Z axis intersect. In certain embodiments, the points are positioned on the external surface of the object. In certain embodiments, the points are positioned throughout the internal structure and external surfaces of the object. In addition to the geometry component, each point in the point cloud can also include one or more attributes, such as color, texture, reflectance, intensity, surface normal, and the like. In some embodiments, a single point of a 3D point cloud can have multiple attributes. For example, a single point can include a geometric position (such as a location of the point in 3D space), as well as one or more attributes that specifies various aspects of the point such as the color or texture of the point, the reflectiveness of the point the intensity of the point, the surface normal of the point, and the like. In some applications, point clouds can also be used to approximate light field data in which, each point includes multiple view-dependent, color information (R, G, B triplets).

A single point cloud can include billions of points, with each point associated with a geometric position and one or more attributes. A geometric position and each additional attribute that is associated with a point occupy a certain number of bits. For example, a geometric position of a single point in a point cloud can consume thirty bits. For instance, if each geometric position of a single point is defined with an X value, a Y value, and a Z value, then each coordinate (the X, the Y, and the Z) uses ten bits, totaling the thirty bits. Similarly, an attribute that specifies the color of a single point can consume twenty-four bits. For instance, if a color component of a single point is defined based on a Red value, Green value, and Blue value, then each color component (Red, Green, and Blue) uses eight bits, totaling the twenty-four bits. As a result, a single point with a ten bit geometric attribute data, per coordinate, and an eight bit color attribute data, per color value, occupies fifty-four bits. Each additional attribute increases the bits required for a single point. If a frame includes one million points, the number of bits per frame is fifty-four million bits (fifty-four bits per point times one million points per frame). If the frame rate is thirty frames per second and undergoes no compression, then <NUM> gigabytes per second (fifty-four million bits per frame times thirty frames per second) are to be transmitted from one electronic device to another in order for the second device to display the point cloud. Therefore, transmitting an uncompressed point cloud from one electronic device to another uses significant bandwidth due to the size and complexity of the data associated with a single point cloud. As a result, the point cloud is compressed prior to the transmission.

Embodiments of the present disclosure take into consideration that compressing a point cloud is necessary to expedite and improve transmission of the point cloud from one device (such as a source device) to another device (such as a display device) due to the bandwidth necessary to transmit the point cloud. Certain dedicated hardware components can be used to meet the real-time demands or reduce delays or lags in the transmitting and rendering a 3D point cloud; however such hardware components are often expensive. Additionally, many video codecs are not able to encode and decode 3D video content, such as a point cloud. Compressing and decompressing a point cloud by leveraging existing 2D video codecs enables the encoding and decoding of a point cloud to be widely available without the need for new or specialized hardware. According to embodiments of the present disclosure, leveraging existing video codecs can be used to compress and reconstruct a point cloud, when the point cloud is converted from a 3D state to a 2D state. In certain embodiments, the conversion of a point cloud includes projecting the clusters of points of the 3D point cloud onto 2D frames by creating patches that represent the point cloud. Thereafter, video codecs such as HEVC, AVC, VP9, VP8, VVC, and the like can be used to compress the 2D frames representing the 3D point cloud similar to a 2D video.

Converting the point cloud includes projecting the point cloud to generate multiple patches and packing the patches onto one or more 2D frames, such that the frames can be compressed, and then transmitted to a display device. The frames can represent projections at different layers of the point cloud. The frames can also represent different attributes of the point cloud, such as one frame includes values representing geometry positions of the points and another frame includes values representing color information associated with each of the points. A decoder reconstructs the patches within the 2D frames into the 3D point cloud, such that the point cloud can be rendered, displayed, and then viewed by a user. When the point cloud is deconstructed to fit on multiple 2D frames and compressed, the frames can be transmitted using less bandwidth than used to transmit the original point cloud. <FIG>, which are described in greater detail below, illustrate a 3D point cloud that is projected onto 2D frames by creating patches of the point cloud and two attributes.

Embodiments of the present disclosure provide systems and methods for converting a point cloud into a 2D state that can be transmitted and then reconstructed into the point cloud. In certain embodiments, a point cloud is deconstructed into multiple patches, and multiple frames are generated that include the patches. In certain embodiments, a frame includes patches of the same attributes. The points of the 3D point cloud that are represented in one patch in one frame correspond to the same points that are represented in another patch in a second frame. In other embodiments, the patches on one frame represent multiple attributes associated with the points of the point cloud, such as a geometric position of the points in 3D space and color.

An encoder projects the 3D point cloud onto the multiple 2D frames and generates a bitstream. The encoder or another device then transmits the bitstream to different device(s). The frames can be compressed by leveraging various video compression codecs, image compression codecs, or both. A decoder receives the bitstream, decompresses the bitstream into the frames, and reconstructs the point cloud based on the information within the frames. After the point cloud is reconstructed, the 3D point cloud can be rendered and displayed for a user to observe. In certain embodiments, frames representing different attributes (including the geometric positions of the points) are encoded and decoded separately. In other embodiments, frames representing different attributes (including the geometric positions of the points) are encoded and decoded together.

During projection the encoder decomposes the point cloud into a set of patches by clustering the points. The geometry and attribute information of these patches are packed into geometry video frames and attribute video frames, respectively. The geometry video frames are used to encode the geometry information, and the corresponding attribute video frames are used to encode the various attributes of the point cloud, such as color, texture, reflectance, and the like. Each pixel within a patch in the geometry video frame corresponds to a point in 3D space. The two transverse coordinates (with respect to the projection plane) of a 3D point corresponds to the column and row indices in the geometry video frame (u,v) plus a transverse-offset which determines the location of the entire patch within the video frame. The depth of the 3D point is encoded as the value of the pixel in the video frame plus a depth-offset for the patch. The depth of the 3D point cloud depends on whether the projection of the 3D point cloud is taken from the XY, YZ, or XZ coordinates.

As discussed in great detail below, when a frame is generated an occupancy map is also generated. Generally, the occupancy map indicates, for each pixel within a frame, whether the pixel is a valid pixel or an invalid pixel. For example, if a pixel in occupancy map at coordinate (u,v) is valid, then the corresponding pixel in a geometry frame or attribute frame at the coordinate (u,v) is valid. If the pixel in occupancy map at coordinate (u,v) is invalid, then the decoder skips the corresponding pixel in a geometry frame or attribute frame at the coordinate (u,v). In certain embodiments, the occupancy map at a position (u,v) can be one or zero. When the value of a pixel at position (u,v) of the occupancy map is one indicates that a pixel at (u,v) of an attribute frame and the geometry frame is valid. In contrast, when the value of a pixel at position (u,v) of the occupancy map is zero indicates that a pixel at (u,v) of the attribute frame and the geometry frame is invalid.

Embodiments of the present disclosure provide systems and methods for improving the compression of a point cloud by reducing the bitrate. Reducing the bitrate can improve the overall performance of a point cloud compression codec. According to embodiments of the present disclosure, architecture and methods for including padding in a frame representing a 3D point cloud are provided. The areas between projected patches of the 3D point cloud are filled using a padding mechanism to reduce the number of sharp edges in the projected video frame. Reducing the number of sharp edges in the projected video frame reduces the compression bitrate.

<FIG> illustrates an example communication system <NUM> in accordance with an embodiment of this disclosure. The embodiment of the communication system <NUM> shown in <FIG> is for illustration only. Other embodiments of the communication system <NUM> can be used without departing from the scope of this disclosure.

The communication system <NUM> includes a network <NUM> that facilitates communication between various components in the communication system <NUM>. For example, the network <NUM> can communicate IP packets, frame relay frames, Asynchronous Transfer Mode (ATM) cells, or other information between network addresses. The network <NUM> includes one or more local area networks (LANs), metropolitan area networks (MANs), wide area networks (WANs), all or a portion of a global network such as the Internet, or any other communication system or systems at one or more locations.

In this example, the network <NUM> facilitates communications between a server <NUM> and various client devices <NUM>-<NUM>. The client devices <NUM>-<NUM> may be, for example, a smartphone, a tablet computer, a laptop, a personal computer, a wearable device, a HMD, or the like. The server <NUM> can represent one or more servers. Each server <NUM> includes any suitable computing or processing device that can provide computing services for one or more client devices, such as the client devices <NUM>-<NUM>. Each server <NUM> could, for example, include one or more processing devices, one or more memories storing instructions and data, and one or more network interfaces facilitating communication over the network <NUM>. As described in more detail below, the server <NUM> can transmit a compressed bitstream, representing a point cloud, to one or more display devices, such as a client device <NUM>-<NUM>. In certain embodiments, each server <NUM> can include an encoder.

Each client device <NUM>-<NUM> represents any suitable computing or processing device that interacts with at least one server (such as the server <NUM>) or other computing device(s) over the network <NUM>. The client devices <NUM>-<NUM> include a desktop computer <NUM>, a mobile telephone or mobile device <NUM> (such as a smartphone), a PDA <NUM>, a laptop computer <NUM>, a tablet computer <NUM>, and a HMD <NUM>. However, any other or additional client devices could be used in the communication system <NUM>. Smartphones represent a class of mobile devices <NUM> that are handheld devices with mobile operating systems and integrated mobile broadband cellular network connections for voice, short message service (SMS), and Internet data communications. The HMD <NUM> can display a <NUM>° scene including one or more 3D point clouds. In certain embodiments, any of the client devices <NUM>-<NUM> can include an encoder, decoder, or both. For example, the mobile device <NUM> can record a video and then encode the video enabling the video to be transmitted to one of the client devices <NUM>-<NUM>. In another example, the laptop computer <NUM> can be used to generate a virtual 3D point cloud, which is then encoded and transmitted to one of the client devices <NUM>-<NUM>.

In this example, some client devices <NUM>-<NUM> communicate indirectly with the network <NUM>. For example, the mobile device <NUM> and PDA <NUM> communicate via one or more base stations <NUM>, such as cellular base stations or eNodeBs (eNBs). Also, the laptop computer <NUM>, the tablet computer <NUM>, and the HMD <NUM> communicate via one or more wireless access points <NUM>, such as IEEE <NUM> wireless access points. Note that these are for illustration only and that each client device <NUM>-<NUM> could communicate directly with the network <NUM> or indirectly with the network <NUM> via any suitable intermediate device(s) or network(s). In certain embodiments, the server <NUM> or any client device <NUM>-<NUM> can be used to compress a point cloud, generate a bitstream that represents the point cloud, and transmit the bitstream to another client device such as any client device <NUM>-<NUM>.

In certain embodiments, any of the client devices <NUM>-<NUM> transmit information securely and efficiently to another device, such as, for example, the server <NUM>. Also, any of the client devices <NUM>-<NUM> can trigger the information transmission between itself and the server <NUM>. Any of the client devices <NUM>-<NUM> can function as a VR display when attached to a headset via brackets, and function similar to HMD <NUM>. For example, the mobile device <NUM> when attached to a bracket system and worn over the eyes of a user can function similarly as the HMD <NUM>. The mobile device <NUM> (or any other client device <NUM>-<NUM>) can trigger the information transmission between itself and the server <NUM>.

In certain embodiments, any of the client devices <NUM>-<NUM> or the server <NUM> can create a 3D point cloud, compress a 3D point cloud, transmit a 3D point cloud, receive a 3D point cloud, render a 3D point cloud, or a combination thereof. For example, the server <NUM> receives a 3D point cloud, decompose the 3D point cloud to fit on 2D frames, compressed the frames to generate a bitstream that can be transmitted to a storage device, such as an information repository, or one or more of the client devices <NUM>-<NUM>. For another example, one of the client devices <NUM>-<NUM> can receive a 3D point cloud, decompose the 3D point cloud to fit on 2D frames, compressed the frames to generate a bitstream that can be transmitted to a storage device, such as an information repository, another one of the client devices <NUM>-<NUM>, or to the server <NUM>.

Although <FIG> illustrates one example of a communication system <NUM>, various changes can be made to <FIG>. For example, the communication system <NUM> could include any number of each component in any suitable arrangement. In general, computing and communication systems come in a wide variety of configurations, and <FIG> does not limit the scope of this disclosure to any particular configuration. While <FIG> illustrates one operational environment in which various features disclosed in this patent document can be used, these features could be used in any other suitable system.

<FIG> and <FIG> illustrate example electronic devices in accordance with an embodiment of this disclosure. In particular, <FIG> illustrates an example server <NUM>, and the server <NUM> could represent the server <NUM> in <FIG>. The server <NUM> can represent one or more encoders, decoders, local servers, remote servers, clustered computers, and components that act as a single pool of seamless resources, a cloud-based server, and the like. The server <NUM> can be accessed by one or more of the client devices <NUM>-<NUM> of <FIG> or another server.

The server <NUM> can represent one or more local servers, one or more compression servers, or one or more encoding servers, such as an encoder. In certain embodiments, the encoder can perform decoding. As shown in <FIG>, the server <NUM> includes a bus system <NUM> that supports communication between at least one processing device (such as a processor <NUM>), at least one storage device <NUM>, at least one communications interface <NUM>, and at least one input/output (I/O) unit <NUM>.

The processor <NUM> executes instructions that can be stored in a memory <NUM>. The processor <NUM> can include any suitable number(s) and type(s) of processors or other devices in any suitable arrangement. Example types of processors <NUM> include microprocessors, microcontrollers, digital signal processors, field programmable gate arrays, application specific integrated circuits, and discrete circuitry. In certain embodiments, the processor <NUM> can encode a 3D point cloud stored within the storage devices <NUM>. In certain embodiments, encoding a 3D point cloud also decodes the 3D point cloud to ensure that when the point cloud is reconstructed at a decoder, the reconstructed 3D point cloud matches the original 3D point cloud.

The memory <NUM> and a persistent storage <NUM> are examples of storage devices <NUM> that represent any structure(s) capable of storing and facilitating retrieval of information (such as data, program code, or other suitable information on a temporary or permanent basis). The memory <NUM> can represent a random access memory or any other suitable volatile or non-volatile storage device(s). For example, the instructions stored in the memory <NUM> can include instructions for decomposing a point cloud into patches, instructions for packing the patches on 2D frames, instructions for compressing the 2D frames, as well as instructions for encoding 2D frames in a certain order in order to generate a bitstream. The instructions stored in the memory <NUM> can also include instructions for rendering a <NUM>° scene, as viewed through a VR headset, such as HMD <NUM> of <FIG>. The persistent storage <NUM> can contain one or more components or devices supporting longer-term storage of data, such as a read only memory, hard drive, Flash memory, or optical disc.

The communications interface <NUM> supports communications with other systems or devices. For example, the communications interface <NUM> could include a network interface card or a wireless transceiver facilitating communications over the network <NUM> of <FIG>. The communications interface <NUM> can support communications through any suitable physical or wireless communication link(s). For example, the communications interface <NUM> can transmit a bitstream containing a 3D point cloud to another device such as one of the client devices <NUM>-<NUM>.

The I/O unit <NUM> allows for input and output of data. For example, the I/O unit <NUM> can provide a connection for user input through a keyboard, mouse, keypad, touchscreen, or other suitable input device. The I/O unit <NUM> can also send output to a display, printer, or other suitable output device. Note, however, that the I/O unit <NUM> can be omitted, such as when I/O interactions with the server <NUM> occur via a network connection.

In certain embodiments, the server <NUM> can receive a 3D point cloud via the communication interface <NUM> or access a 3D point cloud stored in one of the storage devices <NUM>. The server <NUM> can also generate a bitstream representing the 3D point cloud. When encoding media content, such as a point cloud, the server <NUM> can project the point cloud into multiple patches. For example, a cluster of points of the point cloud can be grouped together to generate a patch. A patch can represent a single attribute of the point cloud, such as geometry, color, and the like. Patches that represent the same attribute can be packed into individual 2D frames, respectively. <FIG>, which are described in greater detail below, illustrate a 3D point cloud that is represented by patches on different frames.

For example, the geometry coordinates are segmented into patches and packed into 2D frames. The 2D frames can be video frames. The areas between the projected patches are filled in by padding which reduces the number of sharp edges in the projected frames. The geometry video is then compressed using a 2D video codec such as HEVC. To encode the color attribute, the frames representing the geometry are decoded to reconstruct the 3D coordinates. Thereafter, the reconstructed geometry coordinates are smoothed, and the corresponding color values are interpolated from the color values of input coordinates. The generated colors are then packed into 2D frames and encoded. A binary occupancy map is generated to indicate the location of projected points in the 2D frames is also created and encoded. The compressed frames and occupancy map are multiplexed together with auxiliary information that is used for patch creation to make the output bitstream. For example, during the encoding process additional content such as metadata, flags, occupancy maps, and the like can be included in the bitstream as auxiliary information.

Note that while <FIG> is described as representing the server <NUM> of <FIG>, the same or similar structure could be used in one or more of the various client devices <NUM>-<NUM>. For example, a desktop computer <NUM> or a laptop computer <NUM> could have the same or similar structure as that shown in <FIG>.

<FIG> illustrates an example electronic device <NUM>, and the electronic device <NUM> could represent one or more of the client devices <NUM>-<NUM> in <FIG>. The electronic device <NUM> can be a mobile communication device, such as, for example, a mobile station, a subscriber station, a wireless terminal, a desktop computer (similar to the desktop computer <NUM> of <FIG>), a portable electronic device (similar to the mobile device <NUM>, the PDA <NUM>, the laptop computer <NUM>, the tablet computer <NUM>, or the HMD <NUM> of <FIG>), and the like. In certain embodiments, one or more of the client devices <NUM>-<NUM> of <FIG> can include the same or similar configuration as the electronic device <NUM>. In certain embodiments, the electronic device <NUM> is an encoder, a decoder, or both. For example, the electronic device <NUM> is usable with data transfer, image or video compression, image or video decompression, encoding, decoding, and media rendering applications.

As shown in <FIG>, the electronic device <NUM> includes an antenna <NUM>, a radio-frequency (RF) transceiver <NUM>, transmit (TX) processing circuitry <NUM>, a microphone <NUM>, and receive (RX) processing circuitry <NUM>. The RF transceiver <NUM> can include, for example, a RF transceiver, a BLUETOOTH transceiver, a WI-FI transceiver, a ZIGBEE transceiver, an infrared transceiver, and various other wireless communication signals. The electronic device <NUM> also includes a speaker <NUM>, a processor <NUM>, an input/output (I/O) interface (IF) <NUM>, an input <NUM>, a display <NUM>, a memory <NUM>, and a sensor(s) <NUM>. The memory <NUM> includes an operating system (OS) <NUM>, and one or more applications <NUM>.

The RF transceiver <NUM> receives, from the antenna <NUM>, an incoming RF signal transmitted from an access point (such as a base station, WI-FI router, or BLUETOOTH device) or other device of the network <NUM> (such as a WI-FI, BLUETOOTH, cellular, <NUM>, LTE, LTE-A, WiMAX, or any other type of wireless network). The RF transceiver <NUM> down-converts the incoming RF signal to generate an intermediate frequency or baseband signal. The intermediate frequency or baseband signal is sent to the RX processing circuitry <NUM> that generates a processed baseband signal by filtering, decoding, and/or digitizing the baseband or intermediate frequency signal.

The TX processing circuitry <NUM> receives analog or digital voice data from the microphone <NUM> or other outgoing baseband data from the processor <NUM>. The outgoing baseband data can include web data, e-mail, or interactive video game data. The TX processing circuitry <NUM> encodes, multiplexes, and/or digitizes the outgoing baseband data to generate a processed baseband or intermediate frequency signal. The RF transceiver <NUM> receives the outgoing processed baseband or intermediate frequency signal from the TX processing circuitry <NUM> and up-converts the baseband or intermediate frequency signal to an RF signal that is transmitted via the antenna <NUM>.

The processor <NUM> can include one or more processors or other processing devices. The processor <NUM> can execute instructions that are stored in the memory <NUM>, such as the OS <NUM> in order to control the overall operation of the electronic device <NUM>. The processor <NUM> can include any suitable number(s) and type(s) of processors or other devices in any suitable arrangement. For example, in certain embodiments, the processor <NUM> includes at least one microprocessor or microcontroller. Example types of processor <NUM> include microprocessors, microcontrollers, digital signal processors, field programmable gate arrays, application specific integrated circuits, and discrete circuitry.

The processor <NUM> is also capable of executing other processes and programs resident in the memory <NUM>, such as operations that receive and store data. The processor <NUM> can move data into or out of the memory <NUM> as required by an executing process. In certain embodiments, the processor <NUM> is configured to execute the one or more applications <NUM> based on the OS <NUM> or in response to signals received from external source(s) or an operator. Example, applications <NUM> can include an encoder, a decoder, a VR or AR application, a camera application (for still images and videos), a video phone call application, an email client, a social media client, a SMS messaging client, a virtual assistant, and the like. In certain embodiments, the processor <NUM> is configured to receive and transmit media content.

The processor <NUM> is also coupled to the I/O interface <NUM> that provides the electronic device <NUM> with the ability to connect to other devices, such as client devices <NUM>-<NUM>. The I/O interface <NUM> is the communication path between these accessories and the processor <NUM>.

The processor <NUM> is also coupled to the input <NUM> and the display <NUM>. The operator of the electronic device <NUM> can use the input <NUM> to enter data or inputs into the electronic device <NUM>. The input <NUM> can be a keyboard, touchscreen, mouse, track ball, voice input, or other device capable of acting as a user interface to allow a user in interact with the electronic device <NUM>. For example, the input <NUM> can include voice recognition processing, thereby allowing a user to input a voice command. In another example, the input <NUM> can include a touch panel, a (digital) pen sensor, a key, or an ultrasonic input device. The touch panel can recognize, for example, a touch input in at least one scheme, such as a capacitive scheme, a pressure sensitive scheme, an infrared scheme, or an ultrasonic scheme. The input <NUM> can be associated with the sensor(s) <NUM> and/or a camera by providing additional input to the processor <NUM>. In certain embodiments, the sensor <NUM> includes one or more inertial measurement units (IMUs) (such as accelerometers, gyroscope, and magnetometer), motion sensors, optical sensors, cameras, pressure sensors, heart rate sensors, altimeter, and the like. The input <NUM> can also include a control circuit. In the capacitive scheme, the input <NUM> can recognize touch or proximity.

The display <NUM> can be a liquid crystal display (LCD), light-emitting diode (LED) display, organic LED (OLED), active matrix OLED (AMOLED), or other display capable of rendering text and/or graphics, such as from websites, videos, games, images, and the like. The display <NUM> can be sized to fit within a HMD. The display <NUM> can be a singular display screen or multiple display screens capable of creating a stereoscopic display. In certain embodiments, the display <NUM> is a heads-up display (HUD). The display <NUM> can display 3D objects, such as a 3D point cloud.

The memory <NUM> can include persistent storage (not shown) that represents any structure(s) capable of storing and facilitating retrieval of information (such as data, program code, and/or other suitable information). The memory <NUM> can contain one or more components or devices supporting longer-term storage of data, such as a read only memory, hard drive, Flash memory, or optical disc. The memory <NUM> also can contain media content. The media content can include various types of media such as images, videos, three-dimensional content, VR content, AR content, 3D point clouds, and the like.

The electronic device <NUM> further includes one or more sensors <NUM> that can meter a physical quantity or detect an activation state of the electronic device <NUM> and convert metered or detected information into an electrical signal. For example, the sensor <NUM> can include one or more buttons for touch input, a camera, a gesture sensor, an IMU sensors (such as a gyroscope or gyro sensor and an accelerometer), an eye tracking sensor, an air pressure sensor, a magnetic sensor or magnetometer, a grip sensor, a proximity sensor, a color sensor, a bio-physical sensor, a temperature/humidity sensor, an illumination sensor, an Ultraviolet (UV) sensor, an Electromyography (EMG) sensor, an Electroencephalogram (EEG) sensor, an Electrocardiogram (ECG) sensor, an IR sensor, an ultrasound sensor, an iris sensor, a fingerprint sensor, a color sensor (such as a Red Green Blue (RGB) sensor), and the like. The sensor <NUM> can further include control circuits for controlling any of the sensors included therein.

As discussed in greater detail below, one or more of these sensor(s) <NUM> may be used to control a user interface (UI), detect UI inputs, determine the orientation and facing the direction of the user for three-dimensional content display identification, and the like. Any of these sensor(s) <NUM> may be located within the electronic device <NUM>, within a secondary device operably connected to the electronic device <NUM>, within a headset configured to hold the electronic device <NUM>, or in a singular device where the electronic device <NUM> includes a headset.

The electronic device <NUM> can create media content such as generate a 3D point cloud or capture (or record) content through a camera. The electronic device <NUM> can encode the media content to generate a bitstream (similar to the server <NUM>, described above), such that the bitstream can be transmitted directly to another electronic device or indirectly such as through the network <NUM> of <FIG>. The electronic device <NUM> can receive a bitstream directly from another electronic device or indirectly such as through the network <NUM> of <FIG>.

For example, when encoding media content, such as a point cloud, the electronic device <NUM> can project the point cloud into multiple patches. For example, a cluster of points of the point cloud can be grouped together to generate a patch. A patch can represent a single attribute of the point cloud, such as geometry, color, and the like. Patches that represent the same attribute can be packed into individual 2D frames, respectively. <FIG>, which are described in greater detail below, illustrate a 3D point cloud that is represented by patches on different frames.

When decoding media content included in a bitstream that represents a 3D point cloud, the electronic device <NUM> decodes the received bitstream into frames. For example, the electronic device <NUM> can demultiplex the received bitstream into multiple video bitstreams, occupancy map bitstream, and auxiliary information. The video bitstream represents the 2D frames. The video and occupancy map bitstreams are decoded and combined with the auxiliary information to reconstruct the output point cloud. For example, the decoded video stream can include geometry frames and color frames. The geometry frames include pixels indicating geographic coordinates of points of the point cloud in 3D space, while the color frames include pixels indicating the RGB color of each geometric point in 3D space. The auxiliary information can include one or more flags, or quantization parameter size, or any combination thereof. After reconstructing the 3D point cloud, the electronic device <NUM> can render the 3D point cloud in three dimensions via the display <NUM>.

Although <FIG> and <FIG> illustrate examples of electronic devices, various changes can be made to <FIG> and <FIG>. For example, various components in <FIG> and <FIG> could be combined, further subdivided, or omitted and additional components could be added according to particular needs. In addition, as with computing and communication, electronic devices and servers can come in a wide variety of configurations, and <FIG> and <FIG> do not limit this disclosure to any particular electronic device or server. In yet another example, the encoding and decoding of a 3D point cloud can be performed by the server <NUM>, the electronic device <NUM>, or both the server <NUM> and the electronic device <NUM>.

<FIG>, <FIG> illustrate an example 3D point cloud and 2D frames that represent the 3D point cloud in accordance with an embodiment of this disclosure. In particular, <FIG> illustrates a 3D point cloud <NUM>, and <FIG> and <FIG> each illustrate a 2D frame that includes patches representing the 3D point cloud <NUM>. The <FIG> illustrates an example 2D frame <NUM> that represents the geometric position of the points of the 3D point cloud <NUM>. The <FIG> illustrates an example 2D frame <NUM> that represents an attribute (such as color) that is associated with the points of the 3D point cloud <NUM>. The <FIG> illustrates an example 2D frame <NUM> that includes padding and represents a color attribute associated with the points of the 3D point cloud <NUM>. It is noted that <FIG> are similar as both illustrate an attribute frame depicting color of the points, but <FIG> includes padding as compared to FIGUIRE 4C. The embodiment of <FIG>, <FIG> are for illustration only and other embodiments could be used without departing from the scope of this disclosure.

The 3D point cloud <NUM> is a set of data points in 3D space. Each point of the 3D point cloud <NUM> includes a geometric position that provides the structure of the 3D point cloud and one or more attributes that provide information about each point such as color, reflectiveness, material, and the like.

Generally, the attributes of the 3D point cloud <NUM> are clustered and projected on to different planes. The attributes of the 3D point cloud <NUM> are projected using predefined criteria such as normal direction, distance to the projected frames, contiguity, and the like. The different plans can be the XY plane, the YZ plane, or the XZ plane. Each of the clusters corresponds to a patch when projected onto a plane.

The frame <NUM> depicts multiple patches (such as a patch <NUM>) representing geometry of the points of the 3D point cloud <NUM>. In particular, the patches within the frame <NUM> depict the depth values of the 3D point cloud <NUM> from different projection planes. In certain embodiments, the level of illumination of each pixel in the frame <NUM> indicates the distance that the represented point is from the projection plane.

The frame <NUM>, depicts multiple patches (such as a patch <NUM>) representing the color attribute of the 3D point cloud <NUM>. For example, each pixel in the frame <NUM> includes color values indicating the color of each of the points of the 3D point cloud <NUM>. That is a pixel can include a red value, a green value and a blue value.

The patches (such as the patches <NUM> and <NUM>) are sorted and packed into a different 2D frame. For example, the patch <NUM> (representing geometric positions of a cluster of points of the 3D point cloud <NUM>) is packed into a frame <NUM>. Similarly, the patch <NUM> (representing a color component of a cluster of points of the 3D point cloud <NUM>) is packed into the frame <NUM>.

Each pixel in the frame <NUM> corresponds to a pixel at the same location in the frame <NUM>. For example, a mapping is generated between each pixel in the frame <NUM> and the frame <NUM>. The location of the patches within the 2D frames <NUM> and <NUM> can be similar for a single position of the 3D point cloud. Similarly, a coordinate (u,v) of a pixel within the frame <NUM> corresponds to a similar pixel at the same coordinate (u,v) in the frame <NUM>. As the 3D point cloud <NUM> changes, new frames can be generated with different patches based on the new position the 3D point cloud.

The frame <NUM> is similar to the frame <NUM>, as both frames represent a color attribute of the 3D point cloud <NUM>. For example, a similar mapping relates the pixels of the frame <NUM> to corresponding pixels within the frame <NUM>. For another example, the frame <NUM> includes a patch <NUM> which is similar to the patch <NUM> of the frame <NUM> and corresponds to the patch <NUM> of the frame <NUM>. That is, the patch <NUM> represents the color attributes for the points represented in the patch <NUM>.

A difference between the frame <NUM> and the frame <NUM> is with respect to the padding. As illustrated, the frame <NUM> does not include padding <NUM> while the frame <NUM> includes padding <NUM>. Embodiments of the present disclosure, fills the area between the patches, referred to as inter-patch space. The padding <NUM> reduces the bitrate of the compressed videos. For example, the number of sharp edges between patches in the projected frame <NUM> is less than the number of sharp edges between patches in the projected frame <NUM>. The padding <NUM> reduces a sharp transition from the boundary of one of the patches to empty space within the frame. Reducing the sharp transition from the boundary of one of the patches to an area of the frame that does not represent the points of the point cloud improves the compression performance of the encoder. The process of adding the padding <NUM> is described in greater detail below in <FIG> and <FIG>.

The frames, such the frame <NUM> and the frame <NUM> are then encoded with a video codec such as HEVC, AVC, VP9, VP8, VVC, AVC, and the like. A decoder can receive the frames <NUM> and <NUM> and reconstructs the geometry of the 3D point cloud from the frame <NUM> and colors the geometry of the point cloud based on the frame <NUM> in order to generate the reconstructed point cloud.

Although <FIG>, <FIG> illustrate example point cloud and 2D frames representing a point cloud, various changes can be made to <FIG>, <FIG>. For example, a point cloud or mesh can represent a single object, whereas in other embodiments, a point cloud or mesh can represent multiple objects, scenery (such as a landscape), a virtual object in AR, and the like. In another example, the patches included in the 2D frames can represent other attributes, such as luminance, material, and the like. <FIG>, <FIG> do not limit this disclosure to any particular 3D object(s) and 2D frames representing the 3D object(s).

<FIG>, <FIG>, and <FIG> illustrate block diagrams in accordance with an embodiment of this disclosure. In particular, <FIG> illustrates a block diagram of an example environment-architecture <NUM> in accordance with an embodiment of this disclosure. <FIG> illustrates an example block diagram of the encoder <NUM> of <FIG> in accordance with an embodiment of this disclosure. <FIG> illustrates an example block diagram of the decoder <NUM> of <FIG> in accordance with an embodiment of this disclosure. The embodiments of <FIG>, <FIG>, and <FIG> are for illustration only. Other embodiments can be used without departing from the scope of this disclosure.

As shown in <FIG>, the example environment-architecture <NUM> includes an encoder <NUM> and a decoder <NUM> in communication over a network <NUM>. The network <NUM> can be the same as or similar to the network <NUM> of <FIG>. In certain embodiments, the network <NUM> represents a "cloud" of computers interconnected by one or more networks, where the network is a computing system utilizing clustered computers and components that act as a single pool of seamless resources when accessed. Also, in certain embodiments, the network <NUM> is connected with one or more servers (such as the server <NUM> of <FIG>, the server <NUM>), one or more electronic devices (such as the client devices <NUM>-<NUM> of <FIG>, the electronic device <NUM>), the encoder <NUM>, and the decoder <NUM>. Further, in certain embodiments, the network <NUM> can be connected to an information repository (not shown) that contains a VR and AR media content that can be encoded by the encoder <NUM>, decoded by the decoder <NUM>, or rendered and displayed on an electronic device.

In certain embodiments, the encoder <NUM> and the decoder <NUM> can represent the server <NUM>, one of the client devices <NUM>-<NUM> of <FIG>, the server <NUM> of <FIG>, the electronic device <NUM> of <FIG>, or another suitable device. In certain embodiments, the encoder <NUM> and the decoder <NUM> can be a "cloud" of computers interconnected by one or more networks, where each is a computing system utilizing clustered computers and components to act as a single pool of seamless resources when accessed through the network <NUM>. In some embodiments, a portion of the components included in the encoder <NUM> or the decoder <NUM> can be included in different devices, such as multiple servers <NUM> or <NUM>, multiple client devices <NUM>-<NUM>, or other combination of different devices. In certain embodiments, the encoder <NUM> is operably connected to an electronic device or a server while the decoder <NUM> is operably connected to an electronic device. In certain embodiments, the encoder <NUM> and the decoder <NUM> are the same device or operably connected to the same device.

The encoder <NUM> is described with more detail below in <FIG>. Generally, the encoder <NUM> receives 3D media content, such as a point cloud, from a device such as a server (similar to the server <NUM> of <FIG>, the server <NUM> of <FIG>), an information repository (such as a database), or one of the client devices <NUM>-<NUM>. In certain embodiments, the encoder <NUM> can receive media content from multiple cameras and stitch the content together to generate a 3D scene that includes one or more point clouds.

In certain embodiments, the encoder <NUM> projects a point cloud into two dimensions which create patches that represent the projection. The encoder <NUM> clusters points of a point cloud into groups which are projected onto different planes such as an XY plane, an YZ plane, and an XZ plane. Each cluster of points is represented by a patch when projected onto a plane. The encoder <NUM> can project a point cloud into two dimensions. It is noted that a point of the 3D point cloud is located in 3D space based on a (X,Y,Z) coordinate value. When the point is projected onto a 2D frame the pixel, representing the projected point, is denoted by the column and row index in the frame indicated by the coordinate (u,v). Additionally, 'u' and 'v' can range from zero to the number of rows or columns in the depth image, respectively.

The encoder <NUM> packs the patches representing the point cloud onto 2D video frames. Each of the 2D video frames represents a particular attribute, such as one set of frames can represent geometry and another set of frames can represent an attribute. It should be noted that additional frames can be generated based on more layers as well as each additionally defined attribute.

The encoder <NUM> adds additional pixels in the inter-patch space to reduce the harsh transition from the boundary of one patch to the empty unfilled area between two patches. For example, in a frame representing color, additional pixels are added to the inter-patch space, where the color of the additional pixels are blended from one patch to an adjacent patch, creating a smooth transition between patches. Even though additional pixels are added to the frame representing color, the decoder <NUM>, using the occupancy map, disregards the additionally added pixels when reconstructing the point cloud, since the added pixels do not correspond to the points of a 3D point cloud.

The encoder <NUM> transmits frames representing the point cloud as a compressed bitstream. The bitstream can be transmitted to an information repository (such as a database), an electronic device that includes a decoder (such as the decoder <NUM>), or the decoder <NUM> itself through the network <NUM>. The encoder <NUM> is described in greater detail below in <FIG>.

The decoder <NUM> can receive a bitstream that represents media content, such as a point cloud. The bitstreams can include data representing a 3D point cloud. In certain embodiments, the decoder <NUM> can decode the bitstream and generate multiple frames such as geometry and attribute. The decoder <NUM> reconstructs the point cloud from multiple frames. The decoder <NUM> is described with more detail below in <FIG>.

<FIG> illustrates the encoder <NUM> that receives a 3D point cloud <NUM> and generates a bitstream <NUM>. The bitstream <NUM> includes data representing a received 3D point cloud <NUM>. The bitstream <NUM> can include multiple bitstreams and can be transmitted via the network <NUM> of <FIG> to another device, such as the decoder <NUM> or an information repository. The encoder <NUM> includes a patch generator <NUM>, a frame packing <NUM>, various frames (such as one or more geometry frames <NUM>, one or more attribute frames <NUM>, and one or more occupancy map frames <NUM>), a padding engine <NUM> one or more encoding engines <NUM>, and a multiplexer <NUM>.

The 3D point cloud <NUM> can be stored in memory (not shown) or received from another electronic device (not shown). The 3D point cloud <NUM> can be a single 3D object, or a grouping of 3D objects. The 3D point cloud <NUM> can be a stationary object or an object which moves.

The patch generator <NUM> generates patches by taking projections of the 3D point cloud <NUM>. In certain embodiments, the patch generator <NUM> splits the geometry attribute and each attribute of each point of the 3D point cloud <NUM>. The patch generator <NUM> can use two or more projection planes, to cluster the points of the 3D point cloud <NUM> to generate the patches. The geometry attribute and each attribute are eventually packed into respective geometry frames <NUM> or the attribute frames <NUM>, by the frame packing <NUM>.

For each input point cloud, such as the 3D point cloud <NUM>, the geometry attribute and one or more attributes (such as color) are clustered using one or more criteria. The criteria include a normal direction, a distance to projected frames, contiguity, and the like. After the points are clustered, the geometry attribute and a corresponding attribute for each point are projected onto planes, such as the XY plane, the YZ plane, or the XZ plane.

When projected, each cluster of points of the 3D point cloud <NUM> appears as a patch. Each patch (also referred to as a regular patch) represents a particular attribute of the point cloud. For example, a single cluster of points can be represented as a patch on multiple frames, where each patch represents a different attribute. It is noted that patches representing different attributes of the same cluster of points include a correspondence or a mapping, such a pixel in one patch corresponds to the same pixel in another patch.

In certain embodiments, multiple frames of the same 3D point cloud using two or more projection planes can be generated. In certain embodiments, the patch generator <NUM> splits geometry aspects of each point of the 3D point cloud <NUM> and the color components of each point of the 3D point cloud <NUM>, which are placed on respective geometry frames <NUM> and the attribute frames <NUM> that correspond to color.

The frame packing <NUM> sorts and packs the patches (both the geometry and color patches) into respective frames, such as the geometry frames <NUM> and the attribute frames <NUM>. As illustrated in <FIG> and <FIG>, the frame packing <NUM> organizes the attributes and places the patches within corresponding frames, such as the patch <NUM> representing geometry is included in the frame <NUM> and the patch <NUM> representing an attribute such as color is included in the frame <NUM>. The frame packing <NUM> also generates one or more occupancy map frames <NUM> based on the placement of the patches within the geometry frames <NUM> and the attribute frames <NUM>.

The geometry frames <NUM> include pixels representing the geometry values of the 3D point cloud <NUM>. The geometry frames <NUM> represent the geographic location of each point of the 3D point cloud <NUM>. The attribute frames <NUM> include pixels representing values of a particular attribute such as color of the 3D point cloud <NUM>. Color represents a single aspect of each point of the 3D point cloud <NUM>. For example, if the geometry frame <NUM> indicates where each point of the 3D point cloud <NUM> is in 3D space, then the corresponding attribute frame <NUM> indicates the color of each corresponding point. Additional frames can be created that represent the other attributes. For example, if another set of frames is generated, such as reflectance frames (not shown), then the corresponding reflectance frame indicates the level of reflectance of each corresponding point represented by the geometry frame <NUM>. In certain embodiments, each geometry frame <NUM> has at least one corresponding attribute frame <NUM>.

The occupancy map frames <NUM> represent occupancy maps that indicate the valid pixels in the frames (such as the geometry frames <NUM> and the attribute frames <NUM>). For example, the occupancy map frames <NUM> indicate whether each point in a frame is a valid pixel or an invalid pixel. The valid pixels correspond to pixels that represent points of the 3D point cloud <NUM>. The invalid pixels are pixels within a frame that do not represent a point of the 3D point cloud <NUM> and correspond to inter-patch spaces. In certain embodiments, one of the occupancy map frames <NUM> can correspond to the both a geometry frame <NUM> and an attribute frame <NUM>.

For example, when the frame packing <NUM> generates the occupancy map frames <NUM>, the occupancy map frames include predefined values, such as zero or one, for each pixel. When the value of a pixel in the occupancy map at position (u,v) is zero, then the pixel at (u,v) in the geometry frame <NUM> and the pixel at (u,v) in the attribute frame <NUM> are invalid. When the value of a pixel in the occupancy map at position (u,v) is one, then the pixel at (u,v) in the geometry frame <NUM> and the pixel at (u,v) in the attribute frame <NUM> are valid.

The padding engine <NUM> fills the inter-patch spaces of the attribute frames <NUM> with pixels. Another padding engine (or the padding engine <NUM>), not shown, can fill the inter-patch spaces of the geometry frames <NUM> with pixels. The padding engine <NUM> fills the inter-patch spaces of the attribute frames <NUM> using the corresponding occupancy map frame <NUM>.

To add the padding, the padding engine <NUM> incrementally down samples the resolution of both the attribute frame <NUM> and the occupancy map frame <NUM>. That is, the padding engine <NUM> performs a bottom-up traversal to incrementally reduce the resolution of the attribute frame <NUM> and the occupancy map frame <NUM>. For example, the padding engine <NUM> incrementally reduces the resolution of the attribute frame <NUM> and the occupancy map frame <NUM>. Each step that the resolution of the attribute frame <NUM> and the occupancy map frame <NUM> is reduced, corresponds to new levels of details (LoD). In certain embodiments, at each incremental step that the resolution of the frames is reduced, the padding engine <NUM> can apply a filter to smooth the results of the down sampling. The resolution of the attribute frame <NUM> and the occupancy map frame <NUM> is decreased multiple times until both frames are at a predetermined size. In certain embodiments, the predetermined size is a 4x4 resolution. <FIG> and <FIG>, describe the process of reducing the resolution of the attribute frame <NUM> and the occupancy map frame <NUM> over a number of sequential steps.

During each incremental step, the resolution of the attribute frame <NUM> and the occupancy map frame <NUM> is reduced. Generally a block combines the pixels within itself to generate the next LoD. The pixels within the block are modified to create a single pixel. For example, the block can be 2x2, where the pixels within the 2x2 block modified to create a single pixel. In other examples, the block can be any size, (square or rectangular) such as a 3x3, 2x4, 4x4, and the like. In certain embodiments, the size of the block changes at each subsequent step (generate of a new LoD). For example, the first iteration of down sampling can use a first block size, while the second iteration of down sampling can use a second block size, and so on. The size of the block is less than the size of the frames.

In certain embodiments, the padding engine <NUM> sets the size of the block by which the resolution of the attribute frame <NUM> and the occupancy map frame <NUM> is reduced based on a predetermined number of steps to reduce the frame size. For example, the padding engine <NUM> sets the block size such that the frames are incrementally down sampled the predetermined number of times until the resolution corresponds to the predetermined size. In certain embodiments, the size of the block is based on (i) the resolution of the frames, (ii) the predetermined resolution of the smallest size of the frames, and (iii) a predetermined number of steps to reduce the frames. In certain embodiments, the size of the block is based on (i) the resolution of the frame at the current LoD and (ii) the predetermined resolution of the next LoD.

Once the resolution of the attribute frame <NUM> and the occupancy map frame <NUM> reach the predetermined size, the padding engine <NUM> up samples both the attribute frame <NUM> and the occupancy map frame <NUM>. That is, the padding engine <NUM> performs a top-down traversal to iteratively increase the resolution of the attribute frame <NUM> and the occupancy map frame <NUM> while filling the inter-patch space. The padding engine <NUM> incrementally increases the resolution of the attribute frame <NUM> and the occupancy map frame <NUM> to the original size. For example, the padding engine <NUM> incrementally increases the resolution of the attribute frame <NUM> and the occupancy map frame <NUM> which creates multiple LoDs.

During each incremental step that the resolution of the attribute frame <NUM> and the occupancy map frame <NUM> is increased the padding engine <NUM> fills the inter-patch area of the attribute frame <NUM>. For example, after each incremental step that the resolution of the attribute frame <NUM> and the occupancy map frame <NUM> is increased, the padding engine <NUM> performs multiple iterations of smoothing, to the pixels in the attribute frame <NUM>. The padding engine <NUM> identifies the pixels in the attribute frame <NUM> at each LoD to smooth based on the occupancy map frame <NUM> at the same LoD. <FIG> and <FIG>, describe the process of increasing the resolution of the attribute frame <NUM> and the occupancy map frame <NUM> over a number of sequential steps while filling the inter-patch area and smoothing the filled inter-patch area over a number of iterations.

Each step that the resolution of the attribute frame <NUM> and the occupancy map frame <NUM> is increased corresponds to a particular LoD. During each incremental step, the resolution of the attribute frame <NUM> and the occupancy map frame <NUM> is increased. In certain embodiments, the sizes of the attribute frame <NUM> and the occupancy map frame <NUM> are increased at the same ratio between the LoDs. For example, if a block size of 2x2 was used to down sample the frames from a first LoD to a second LoD, then the same block size (2x2) is used to up sample the frames from the second LoD to the first LoD. As such, the same number of steps that are used to down sample are also used to up sample the frames.

At each step that the resolution of the attribute frame <NUM> and the occupancy map frame <NUM> is increased, the padding engine <NUM> smooths the attribute frame <NUM>. That is, at each LoD, the padding engine <NUM> smooths the attribute frame <NUM>. At each LoD the padding engine <NUM> performs multiple iterations of smoothing. A first iteration of smoothing at a given LoD is based on the values of the pixels in attribute frame <NUM>. A subsequent iteration of smoothing is based on the values of the pixels in the attribute frame <NUM> after the previous iteration of smoothing. For instance, for three iterations of smoothing, the first iteration is based on the values of the pixels in the attribute frame <NUM> after the resolution is increased. The second iteration of smoothing is based on the values of the pixels in the attribute frame <NUM> after the first iteration of smoothing. The third iteration of smoothing is based on the values of the pixels in the attribute frame <NUM> after the second iteration of smoothing. Thereafter, the padding engine <NUM> up samples the attribute frame <NUM> based on the third iteration of smoothing.

The number of iterations that the padding engine <NUM> performs smoothing increases at each subsequent LoD. For example, the padding engine <NUM> performs smoothing four times when then attribute frame <NUM> is the predetermined size (the smallest size). At each larger LoD the padding engine <NUM> increases the number of iterations that smoothing is performed. In certain embodiments, the padding engine <NUM> does not perform smoothing over sixteen different intervals.

In certain embodiments, the number of iterations that the padding engine <NUM> performs smoothing is based on a residual error. For example, after performing an iteration of smoothing, the padding engine <NUM> identifies the residual error between the attribute frame <NUM> prior to the iteration of smoothing and the attribute frame <NUM> after the iteration of smoothing is performed. The padding engine <NUM> compares the residual error to a threshold. Based on the comparison, the padding engine <NUM> determines to perform another iteration of smoothing or increase the resolution of the attribute frame <NUM> by up sampling. For instance, as more iterations of smoothing are performed with respect to the texture frame at a single LoD, the difference between a previous iteration of smoothing and the current iteration of smoothing decreases. When the difference between a previous iteration of smoothing and the current iteration of smoothing decreases to a certain level, as indicated by comparing the residual error to a threshold, additional iterations of smoothing will not increase the amount of padding.

The padding engine <NUM> performs the smoothing using a filter. For example, the padding engine <NUM> uses a 3x3 filter to smooth the pixels in the attribute frame <NUM>. In certain embodiments, the padding engine <NUM> can also change the weights assigned to a filter change at each subsequent LoD. In certain embodiments, the padding engine <NUM> uses an <NUM>-tap filter for smoothing. <FIG>, illustrates an example, <NUM>-tap filter.

In addition to performing multiple iterations of the smoothing at each LoD, the padding engine <NUM> can also change the size of the filter that performs the smoothing. In certain embodiments, the filter size increases at each subsequent (larger) LoD. For example, a 3x3 filter is used at the predetermined size and the filter size increases incrementally at each larger LoD.

After the padding engine <NUM> increases the resolution of the attribute frame <NUM> to its original size, the attribute frame <NUM>, the geometry frames <NUM>, and the occupancy map frame <NUM> are encoded using the encoding engines <NUM>. In certain embodiments, the padding engine <NUM> also generates padding in the geometry frames <NUM>, using corresponding occupancy map frames.

The encoding engines <NUM> encode the geometry frames <NUM>, the attribute frames <NUM>, and the occupancy map frames <NUM>. In certain embodiments, the frames (such as the geometry frames <NUM>, the attribute frames <NUM>, and the occupancy map frames <NUM>) are encoded by independent encoders. For example, one encoding engine <NUM> can encode the geometry frames <NUM>, another encoding engine <NUM> can encode the attribute frames <NUM>, and yet another encoding engine <NUM> can encode the occupancy map frames <NUM>. In certain embodiments, the encoding engines <NUM> can be configured to support an <NUM>-bit, a <NUM>-bit, a <NUM>-bit, a <NUM>-bit, or a <NUM>-bit, precision of data. The encoding engine <NUM> can be a video or image codec such as HEVC, AVC, VP9, VP8, VVC, and the like to compress the 2D frames representing the 3D point cloud.

The multiplexer <NUM> combines the multiple frames (such as the geometry frames <NUM>, the attribute frames <NUM>, and the occupancy map frames <NUM>) which are encoded, to create a bitstream <NUM>.

<FIG> illustrates the decoder <NUM> that includes a demultiplexer <NUM>, one or more decoding engines <NUM>, and a reconstruction engine <NUM>. The decoder <NUM> receives a bitstream <NUM>, such as the bitstream that was generated by the encoder <NUM>. The demultiplexer <NUM> separates bitstream <NUM> into one or more bitstreams representing the different frames. For example, the demultiplexer <NUM> separates various streams of data such as the geometry frame information <NUM> (originally the geometry frames <NUM> of <FIG>), attribute frame information <NUM> (originally the attribute frames <NUM> of <FIG>), and the occupancy map information <NUM> (originally the occupancy map frames <NUM> of <FIG>).

The decoding engines <NUM> decode the geometry frame information <NUM> to generate the geometry frames. The decoding engines <NUM> decode the attribute frame information <NUM> to generate the attribute frames. Similarly, the decoding engines <NUM> decode the occupancy map information <NUM> to generate the occupancy map frames. In certain embodiments, a single decoding engine <NUM> decodes the geometry frame information <NUM>, the attribute frame information <NUM>, and the occupancy map information <NUM>.

After the geometry frame information <NUM>, the attribute frame information <NUM>, and the occupancy map information <NUM> are decoded, the reconstruction engine <NUM> generates a reconstructed point cloud <NUM> by reconstructing the decoded geometry frame information <NUM>, the decoded attribute frame information <NUM>, and the decoded occupancy map information <NUM>. The reconstructed point cloud <NUM> is similar to the 3D point cloud <NUM>.

Although <FIG> illustrates one example of transmitting a point cloud, various changes may be made to <FIG>. For example, additional components can be included in the encoder <NUM> and the decoder <NUM>.

<FIG> describe the process of adding padding to the attribute frames <NUM> of <FIG> that correspond to color (or texture) of the point cloud <NUM>. For example, <FIG> illustrate example diagrams <NUM> and <NUM> for adding padding to a 2D frame representing a 3D point cloud by down sampling and up sampling the 2D frame in accordance with an embodiment of this disclosure. <FIG> illustrates an example flowchart 630a for adding padding to a 2D frame representing a 3D point cloud by down sampling and up sampling the 2D frame in accordance with an embodiment of this disclosure. <FIG> illustrates an example flowchart 630b for down sampling a 2D frame in accordance with an embodiment of this disclosure. <FIG> illustrates an example process <NUM> for down sampling a 2D frame in accordance with an embodiment of this disclosure. <FIG> illustrates an example flowchart 630c for adding padding to a 2D frame by up sampling the 2D frame in accordance with an embodiment of this disclosure. <FIG> illustrates an example process <NUM> for adding padding to a 2D frame by up sampling the 2D frame in accordance with an embodiment of this disclosure. The embodiment of <FIG> are for illustration only and other embodiments could be used without departing from the scope of this disclosure.

The diagram <NUM> describes the multiple LoDs that correspond to the number of sequential steps. During the down sampling <NUM>, the resolution of the original LoD is incrementally reduced until the predetermined size is reached. After the resolution reaches the predetermined size, the padding engine <NUM> of <FIG> incrementally up samples <NUM> the frames until the original size is reached. In certain embodiments, the frames pass through the same resolution at each LoD during the down sampling <NUM> and the up sampling <NUM>.

The diagram <NUM> illustrates the padding engine <NUM> of <FIG> down sampling a frame that includes the attribute of color over multiple steps until the predetermined size is reached. After the predetermined size is reached the padding engine <NUM> up samples the frame and adds padding to modify some pixels in the attribute frame. For example, the frame <NUM> is similar to the frame <NUM> of <FIG> and the frame <NUM> is similar to the frame <NUM> of <FIG>.

The frame <NUM> represents one of the attribute frames <NUM> of <FIG> (that specifies the color of the points of a point cloud), and the frame <NUM> of <FIG> that does not include any padding <NUM>. The padding engine <NUM> reduces the resolution of the frame <NUM> over a number of sequential steps. As illustrated in the diagram <NUM>, the padding engine <NUM> uses three sequential steps to down sample the resolution of the frame <NUM>. During the first step, the padding engine <NUM> down samples the frame <NUM> to generate the frame <NUM>. During the second step, the padding engine <NUM> down samples the frame <NUM> to generate the frame <NUM>. During the third step, the padding engine <NUM> down samples the frame <NUM> to generate the frame <NUM>. The frame <NUM> is the predetermined size. In certain embodiments, the frame <NUM> has a resolution that is less than or equal to four pixels in height and four pixels in width.

After the padding engine <NUM> incrementally reduces the resolution of the frame <NUM> to the predetermined size, the padding engine <NUM> then increases the frame <NUM> over a number of sequential steps until the original resolution is obtained. In certain embodiments, the padding engine <NUM> then increases the frame <NUM> over the same number of sequential steps that were used to down sample the frame <NUM>.

During the first step, the padding engine <NUM> up samples the frame <NUM> to generate the frame <NUM> and adds pixels (padding) in the inter-patch space of the frame <NUM>. Smoothing (multiple iterations of filtering) is applied to the added pixels. The added pixels do not represent points of the 3D point cloud, as indicated by the occupancy map frame <NUM>, at the same LoD. During the second step, the padding engine <NUM> up samples the frame <NUM> to generate the frame <NUM> and adds pixels (padding) in the inter-patch space of the frame <NUM>. After the padding engine <NUM> performs the second iteration of up sampling, the padding engine <NUM> performs smoothing (multiple iterations of filtering) to the added (invalid) pixels in the frame <NUM>. The smoothing is applied to the pixels that do not represent points of the 3D point cloud, as indicated by the occupancy map frame <NUM>, at the same LoD. During the third step, the padding engine <NUM> up samples the frame <NUM> to generate the frame <NUM> and adds pixels (padding) in the inter-patch space of the frame <NUM>. After the padding engine <NUM> performs the third iteration of up sampling, the padding engine <NUM> performs smoothing (multiple iterations of filtering) to the (invalid) pixels in the frame <NUM>. The smoothing is applied to the pixels that do not represent points of the 3D point cloud, as indicated by the occupancy map frame <NUM>, at the same LoD. The process of up sampling, adding padding, and smoothing the pixels that do not represent points of the 3D point cloud generates a smooth padding in the inter-patch space of the frame <NUM>.

<FIG> illustrates the example flowchart 630a. The flowchart 630a is the overall process of adding padding to a 2D frame representing a 3D point cloud by down sampling and then up sampling the 2D frame. The flowchart 630b of <FIG> illustrates the process of down sampling a 2D, while the flowchart 630c of <FIG> illustrates the process for adding padding to a 2D frame by up sampling the 2D frame. The flowchart 630b for down sampling a 2D frame is described in greater detail in the process <NUM> of <FIG>. Similarly, the flowchart 630c for adding padding to a 2D frame by up sampling the 2D frame is described in greater detail in the process <NUM> of <FIG>.

The flowcharts 630a-630c and the processes <NUM> and <NUM>, can be performed by the server <NUM> or any of the client devices <NUM>-<NUM> of <FIG>, the server <NUM> of <FIG>, the electronic device <NUM> of <FIG>, the encoder <NUM> of <FIG> and <FIG>, or any other suitable device or system. For ease of explanation, the flowcharts 630a-630c and the processes <NUM> and <NUM> are described as being performed by the encoder <NUM> of <FIG> and <FIG>.

The flowchart 630a describes the overall process of adding padding to a 2D frame representing a 3D point cloud. In step <NUM>, the encoder <NUM> receives a texture (or color) frame and a corresponding occupancy map frame. In certain embodiments, the encoder <NUM> selects a texture frame and a corresponding occupancy map frame. The texture frame can be any of the attribute frames <NUM> (such as an attribute frame that specifies the color of the geometry points) of <FIG> and the occupancy map frame can be similar to any of the occupancy map frames <NUM> of <FIG>. The received texture frame and the corresponding occupancy map frame represent the original frames generated by the frame packing <NUM> of <FIG>.

In step <NUM> the padding engine <NUM> down samples the texture frame and a corresponding occupancy map frame over a number of sequential steps. The padding engine <NUM> performs the down sampling incrementally. For example, the padding engine <NUM> performs a down sampling to the original texture frame and a corresponding occupancy map frame in both height and width. After the first down sampling step, the padding engine <NUM> down samples the previous down sampled frames. The padding engine <NUM> continues incrementally down sample both the texture frame and a corresponding occupancy map frame until the frames are a predetermined size. In certain embodiments, the padding engine <NUM> continues incrementally down sample both the texture frame and a corresponding occupancy map frame until one dimension of the frames are four pixels (in height or width) or smaller.

In certain embodiments, pixels within a block of a predefined size in the ith LoD of the texture frame are averaged together to generate one pixel in the (i+<NUM>) LoD. Similarly, in the occupancy map of the same LoD as the texture frame, for every block (that is the same size as the block in the texture frame of ith LoD), the padding engine <NUM> identifies whether at least one pixel corresponds to a valid pixel of the 3D point cloud. When at least one pixel within the block is a valid pixel, a valid pixel is generated for the (i+<NUM>) LoD. When no pixels within the block are a valid pixel, an invalid pixel is generated for the (i+<NUM>) LoD.

For example, in the ith LoD of the texture frame, the padding engine <NUM> averages the pixels within a 2x2 block and generates a single pixel for the (i+<NUM>) LoD. Similarly, in the ith LoD of the occupancy map frame, the padding engine <NUM> generates a valid pixel in the (i+<NUM>) LoD when any pixel in the 2x2 block is valid, or generates an invalid pixel in the(i+<NUM>) LoD when no pixels within the 2x2 block are valid.

It is noted that the block size can be any size, such as 2x2, 3x2, 3x3, 3x4, 4x4, 5x5, and the like. In certain embodiments, the block need is not a square. The block is smaller than the size of the texture frame and the corresponding occupancy map frame. In certain embodiments, the block can be different size at different LoDs.

In step <NUM>, the padding engine <NUM> incrementally up samples the texture image. After each up sampling step, the padding engine <NUM> filters the results. For example, the i-th LoD image is used to fill the inter-patch space of the i-<NUM> LoD image using the i-<NUM> LoD occupancy map. After filling the inter-patch space of the i-<NUM> LoD image, the padding engine <NUM> filters the inter-patch space one or more iterations. Using the LoD and occupancy map images, the filtering fills the inter-patch space of the image at the first LoD (original projected image).

After the texture frame reaches the predetermined size, the padding engine <NUM> up samples the texture frame. When the texture frame is up sampled a single step, the padding engine <NUM> filters the up sampled texture frame. The padding engine <NUM> performs a number of iterations of the filtering. For example, a single iteration of the filtering process may not be enough to thoroughly and effectively fill the whole inter-patch space. As such filtering of the inter-patch space is repeated multiple times. After the filtering is performed, the padding engine <NUM> up samples the texture frame another step and then filters the resulting texture frame. The process of up sampling a single step, followed by filtering one or more iterations, repeats until the texture frame is up sampled enough times to return to its original size.

The filtering is repeated using a number of iterations for each LoD, the number of iterations for filtering increases at each LoD.

In certain embodiments, the padding engine <NUM> controls the number of filtering iterations at each LoD. For example, the padding engine <NUM> sets the number of iterations to four at the lowest LoD and increase the number of iterations by one at each subsequent LoD up until a predetermined number of iterations is performed, such as <NUM> iterations, <NUM> iterations, and the like, at the highest LoD.

In certain embodiments, the padding engine <NUM> can also change the filter size. For example, the padding engine <NUM> can increase the filter size at each larger LoD.

In certain embodiments, the padding engine <NUM> determines at a particular LoD the number of iterations for filtering based on the residual error. For example, the padding engine <NUM> identifies the residual error between images of the current and previous iterations. The padding engine <NUM> then compares the identified residual error to a threshold. The padding engine <NUM> performs no additional iterations when the residual becomes smaller than the threshold. For example, when the residual becomes is larger than the threshold, the padding engine <NUM> performs another iteration of filtering and then re-identifies the residual error.

<FIG> illustrates the flowchart 630b for down sampling the texture image and the occupancy map frame. As described above, in step <NUM>, the encoder <NUM> receives a texture frame and a corresponding occupancy map frame. The texture frame can be similar to any of the attribute frames <NUM> of <FIG> (such as a frame that specifies color) and the occupancy map frame can be similar to any of the occupancy map frames <NUM> of <FIG>. The received texture frame and the corresponding occupancy map frame represent the original frames generated by the frame packing <NUM> of <FIG>.

At step <NUM>, the padding engine <NUM> incrementally down samples the received texture frame, denoted as "image," and the corresponding occupancy map frame, denoted as "occMap. " In certain embodiments, the padding engine <NUM> generates various parameters such as "iniNumbIters," "incNumIters," and "maxNumIters. " At step <NUM>, the padding engine <NUM> sets the image to ImageVec[<NUM>] and the occMap to occMapVec[<NUM>] and sets the variable "n" to zero. The variable "n" represents the number of steps (number of LoDs that are created) that are used to down sample the received texture frame and corresponding occupancy map frame to the predetermined size.

At step <NUM>, the padding engine <NUM> inspects the size of the ImageVec[n] in both height and width to determine whether the texture frame is smaller than or equal to the predetermined size. For example, the padding engine <NUM> compares the width of the imageVec[n] to the predetermined size and the height of the imageVec[n] to the predetermined size. As illustrated, the predetermined size is set to four, however other sizes can be used. In certain embodiments, the predetermined size can be a height that differs from the width. For example, the predetermined size can be based on the aspect ratio of the original texture frame.

When the padding engine <NUM> determines that the texture frame is larger than the predetermined size, then in step <NUM> the variable, "n" is increased by one and the imageVec[n] and the occMapVec[n] are down sampled using the texture frame and occupancy map frame of the higher LoD.

After down sampling the texture frame and occupancy map frame, the padding engine <NUM> again determines, in step <NUM> whether the texture frame is smaller than or equal to the predetermined size, in both height and width. This process of steps <NUM> and <NUM> corresponds to reducing the resolution of the texture frame and the occupancy map frame over a number of sequential steps until the size of the texture frame corresponds to the predetermined size.

After determining that the texture frame and the corresponding occupancy map frame are equal to or smaller than the predetermined size, in height and width, then the padding engine <NUM> determines that the texture frame and the corresponding occupancy map frame can be up sampled to fill in the inter-patch spaces in step <NUM>. In certain embodiments, the padding engine <NUM> determines that the texture frame and the corresponding occupancy map frame can be up sampled to fill in the inter-patch spaces in step <NUM> after determining that the height or the width of the texture frame and the corresponding occupancy map frame is equal to or smaller than the predetermined size. <FIG>, below, illustrates the flowchart 630c for up sampling and filling the inter-patch spaces.

<FIG> illustrates the process <NUM> describing the step <NUM> of <FIG> and <FIG>. The process <NUM> can be performed by the padding engine <NUM> of <FIG>. A texture image 660a and a corresponding occupancy map 660b are selected for down sampling. The texture image 660a represents the original LoD, such as LoD-<NUM> which has an original width and height. Similarly, the occupancy map 660b represents the original LoD, such as LoD-<NUM> which has an original width and height.

In step 661a, the padding engine <NUM> down samples the texture image 660a to generate the texture image 662a. The texture image 662a represents a single step that resolution of the texture image 660a is reduced. The LoD of the texture image 662a is the LoD-<NUM> and has a width and height that are half of the texture image 660a. It is noted that the width and height of the texture image 662a is based on the size of the block which down samples and reduces the resolution of the texture image 660a. When the padding engine <NUM> down samples the texture image 660a in step 661a, the padding engine <NUM> uses the occupancy map 660b.

Similarly, in step 661b, the padding engine <NUM> down samples the occupancy map 660b to generate the occupancy map 662b. The occupancy map 662b represents a single step that resolution of the occupancy map 660b is reduced. For example, the LoD of the occupancy map 662b is the LoD-<NUM> and has a width and height that are half of the occupancy map 660b. It is noted that the width and height of the occupancy map 662b is based on the size of the block which down samples and reduces the resolution of the texture image 660a. As illustrated, the size and width of the texture image 662a and the occupancy map 662b are the same after the respective down sampling of steps 661a and 661b.

In step 663a, the padding engine <NUM> down samples the texture image 662a to generate a smaller texture image. Similarly, in step 663b, the padding engine <NUM> down samples the occupancy map 662b to generate a smaller occupancy map. This process continues over multiple steps until the padding engine <NUM> down samples and reduces the resolution of the texture image and occupancy map to generate the texture image 664a and the occupancy map 664b, respectively.

The texture image 664a represents the reduced texture image 660a over multiple sequential steps instance. For example, the LoD of the texture image 664a is the LoD(n-<NUM>) which, as illustrated corresponds to a resolution that is 8x8. Similarly, the occupancy map 664b represents the reduced occupancy map 660b over multiple sequential steps instance. For example, the LoD of the occupancy map 664b is the LoD(n-<NUM>) which, as illustrated corresponds to a resolution that is 8x8.

In step 665a, the padding engine <NUM> down samples the texture image 664a to generate the texture image 666a. The texture image 666a represents multiple steps that the resolution of the texture image 660a is reduced. For example, the LoD of the texture image 666a is the LoD(n-<NUM>) and has a width and height that corresponds to <NUM> pixels. When the padding engine <NUM> down samples the texture image 664a in step 665a, the padding engine <NUM> uses the occupancy map 664b.

Similarly, in step 665b, the padding engine <NUM> down samples the occupancy map 664b to generate the occupancy map 666b. The occupancy map 666b represents multiple steps that the resolution of the occupancy map 660b is reduced. For example, the LoD of the occupancy map 666b is the LoD(n-<NUM>) and has a width and height that corresponds to <NUM> pixels. As illustrated, the size and width of the texture image 666a and the occupancy map 666b are the same after the respective down sampling of steps 661a and 661b. The size of the texture image 666a and the occupancy map 666b represents the predetermined size.

<FIG> illustrates the flowchart 630c for up sampling the texture frame and the corresponding occupancy map and fills in pixels the inter-patch spaces at step <NUM>. That is, after the padding engine <NUM> decreases the resolution of both the texture frame and the corresponding occupancy map frame to a predetermined size in step <NUM>, the padding engine <NUM> in step <NUM> increases the resolution by up sampling both the texture frame and the corresponding occupancy map over multiple steps. Additionally, in step <NUM> the padding engine <NUM> filters the results after each incremental up sampling.

In step <NUM>, the padding engine <NUM> sets the expression "numIters" to "minNumIters. " When the expression "numIters" is set to "minNumIters" sets the expression "numIters" to smallest number of intervals that the filtering is performed on the smallest LoD.

In step <NUM>, the padding engine <NUM> determines whether "n" is greater than zero. For example, during step <NUM> of <FIG>, the variable "n" is incrementally increased, which indicates the number of steps that the texture frame and the corresponding occupancy map are down sampled. When "n" is greater than zero indicates that the texture frame and the corresponding occupancy map are not the original size.

After determining that the texture frame and the corresponding occupancy map are not the original size (based on the value of "n") the padding engine <NUM> decreases the value of "n" by one and up samples texture image and the corresponding occupancy map. For example, the imageVec[n] is up sampled based on the imageVec[n+<NUM>] and the occMapVec[n]. That is, the texture image of the previous LoD is up sampled based on the occupancy map of the current LoD.

In step <NUM>, the padding engine <NUM> performs one or more filtering iterations to the up sampled LoD. For example, the imageVec[n] (which was generated in step <NUM>) is filtered over multiple iterations. The filtering of the texture image is dependent on the occupancy map.

The number of iterations that the filtering is performed is based on the expression "numIters. " After performing the number of filtering iterations indicated by the expression "numIters," the padding engine <NUM> determines whether the number of iterations is less than the previously predefined, denoted as "maxNumIters. " The expression "maxNumIters" corresponds to the maximum number of iterations. In certain embodiments, "maxNumIters" is sixteen.

In step <NUM>, the padding engine <NUM> determines
whether the value of the expression "numIters" is less than the value of the expression "maxNumIters. " When the value of the expression "numIters" is less than or equal to the value of the expression "maxNumlters," then in step <NUM> the padding engine <NUM> increases the expression "numIters. " Thereafter the flowchart 630c returns to step <NUM>. Alternately, when the number of iterations is greater than the maximum number of iterations, the flowchart 630c returns to step <NUM> (skipping step <NUM>). After returning to step <NUM> the padding engine <NUM> determines whether "n" is greater than zero. As the variable "n" decreases in step <NUM>, the padding engine <NUM> determines whether to output the texture frame with the added padding in step <NUM> or continue up sampling the current LoD and add in additional padding.

<FIG> illustrates the process <NUM> describing the step <NUM> of <FIG> and <FIG>. The process <NUM> can be performed by the padding engine <NUM> of <FIG>. The padding engine <NUM> up samples the texture frame using the occupancy map that corresponds to a LoD higher than the texture frame, until the resolution of the texture frame is the original resolution.

The texture image 680a is similar to the texture image 666a of <FIG>. For example, both the texture image 680a and the texture image 666a correspond to the same LoD, that of LoD(n-<NUM>) and have a similar width and height 4x4. That is, the texture image 680a and the texture image 666a correspond to the predetermined size.

To up sample the texture image 680a, the padding engine <NUM> uses the occupancy map 680b. The occupancy map 680b is similar to the occupancy map 664b. Both the occupancy map 680b and the occupancy map 664b correspond to the same LoD, that of LoD(n-<NUM>) and have a similar width and height, 8x8.

In step <NUM>, the padding engine <NUM> up samples and filters the texture image 680a. In certain embodiments, the filtering is a <NUM>-tap filter. In step <NUM>, the padding engine <NUM> then performs the iterative filtering. After up sampling the texture image 680a, the padding engine <NUM> uses the occupancy map 680b to filter the invalid pixels in the texture image 680a. The invalid pixels correspond to the pixels in the inter-patch space. The padding engine <NUM> performs multiple iterations of filtering to smooth the invalid pixels of the texture image 680a.

After the last iteration of filtering is complete, the texture image 683a is generated. The texture image 683a is similar to the texture image 664a of <FIG>. For example, both the texture image 683a and the texture image 664a correspond to the same LoD, that of LoD(n-<NUM>) and have a similar width and height 8x8.

To up sample the texture image 683a, the padding engine <NUM> uses the occupancy map 683b. The occupancy map 683b which corresponds to a LoD higher than that of the texture image 683a. In particular, the LoD of the occupancy map 683b is (n-<NUM>) while the LoD of the texture frame to be up sampled is (n-<NUM>).

In step <NUM>, the padding engine <NUM> up samples and filtering of the texture image 683a using the occupancy map 683b. In certain embodiments, the filtering is a <NUM>-tap filter. In step <NUM>, the padding engine <NUM> then performs the iterative filtering. After up sampling the texture image 683a, the padding engine <NUM> uses the occupancy map 683b to filter the invalid pixels in the texture image 683a. The invalid pixels correspond to the pixels in the inter-patch space. The padding engine <NUM> performs multiple iterations of filtering to smooth the invalid pixels of the texture image 680a.

The process continues until the texture image 686a is generated. The texture image 686a is similar to the texture image 662a of <FIG>. For example, both the texture image 686a and the texture image 662a correspond to the same LoD, that of LoD-<NUM> and have a similar width and height.

To up sample the texture image 686a, the padding engine <NUM> uses the occupancy map 686b which corresponds to a LoD higher than that of the texture image 686a. In particular, the LoD of the occupancy map 686b is the original LoD, while the LoD of the texture frame to be up sampled is LoD-<NUM>. The occupancy map 686b is similar to the occupancy map 660b of <FIG>. Both the occupancy map 686b and the occupancy map 660b correspond to the same LoD, that of the original LoD and have a similar width and height.

In step <NUM>, the padding engine <NUM> up samples and filters the texture image 687a using the occupancy map 686b. In certain embodiments, the filtering is a <NUM>-tap filter. In step <NUM>, the padding engine <NUM> then performs the iterative filtering. After up sampling the texture image 686a, the padding engine <NUM> uses the occupancy map 686b to filter the invalid pixels in the texture image 686a. The invalid pixels correspond to the pixels in the inter-patch space. The padding engine <NUM> performs multiple iterations of filtering to smooth the invalid pixels of the texture image 680a.

After the last iteration of filtering is complete, the texture image <NUM> is generated. The texture image <NUM> is of a similar resolution similar to the texture image 660a of <FIG>, but includes padding in the inter-patch space. Both the texture image 683a and the texture image 664a correspond to the same LoD and have a similar width and height 8x8.

Although <FIG> illustrates one example of for point adding padding to a frame, various changes may be made to <FIG>. For example, while shown as a series of steps, various steps in <FIG> could overlap, occur in parallel, or occur any number of times.

<FIG>, <FIG> illustrate example filters for smoothing the 2D frame at different levels of detail in accordance with an embodiment of this disclosure. In particular, the <FIG> illustrates <NUM>-tap filter <NUM>. <FIG> illustrates <NUM>-tap filter <NUM>. <FIG> illustrates a <NUM>-tap filter <NUM>. <FIG> illustrate various <NUM> tap filters <NUM>, <NUM>, and <NUM>, respectively. The filters <NUM>-<NUM> are for example filters with other sizes and weights can be implemented as well.

Equation (<NUM>) describes how the encoder <NUM> applies an <NUM>-tap filter, similar to the filter <NUM> and <NUM>. For example, Equation (<NUM>) describes applying the filter <NUM> at each iteration to the c-th color channel of a pixel located in the inter-patch space at the (x,y) position.

Syntax (<NUM>) below describes the process of using a sample <NUM>-tap filter described in Equation (<NUM>). In Syntax (<NUM>) the term "imageLowerLod" corresponds to the image of the lower LoD. The term "occupancyMapLod" corresponds to the occupancy map of the current LoD. The term "numItersLod" corresponds to the number of iterations for the current LoD. The term "smoothingFilterLod" corresponds to the smoothing filter used for the current LoD. The term "imageLod" corresponds to the image of the current LoD.

Syntax (<NUM>) below describes an example of how the number of iterations in the proposed filtering process is determined for each LoD. For example, as described in Syntax (<NUM>) four iterations of filtering is implemented at the lowest LoD, and the number of iterations are increased by one at each higher LoD up to sixteen iterations of filtering is performed at the highest LoD. As shown in Syntax (<NUM>), n-<NUM> is the index of the lowest LoD and <NUM> is the index of the highest LoD.

Embodiments of the present disclosure are not limited to the filter <NUM> and <NUM>. For example, filters of different sizes and weights can be used. Filters can be symmetric or non-symmetric. The filters <NUM>, <NUM>, <NUM>, and <NUM> illustrate example 3x3 filters.

Although <FIG>, <FIG> illustrate various filters, various changes may be made to <FIG>, <FIG>. For example, the sizes and weights of the filters can vary.

<FIG> illustrates example method <NUM> for encoding a point cloud in accordance with an embodiment of this disclosure. The method <NUM> can be performed by the server <NUM> or any of the client devices <NUM>-<NUM> of <FIG>, the server <NUM> of <FIG>, the electronic device <NUM> of <FIG>, the encoder <NUM> of <FIG> and <FIG>, or any other suitable device or system. For ease of explanation, the method <NUM> is described as being performed by the encoder <NUM> of <FIG> and <FIG>.

In step <NUM>, the encoder <NUM> generates for a 3D point cloud an attribute frame and an occupancy map frame. The attribute frame includes pixels that represent texture associated with points of a 3D point cloud. In certain embodiments, the texture is color. The occupancy map indicates which pixels in the attribute frame represent points of the 3D point cloud. The encoder can also generate additional frames such as a geometry frame, or additional texture frames.

At step <NUM> the encoder <NUM> reduces the resolution of the attribute frame and the occupancy map frame. The resolution of the attribute frame and the occupancy map frame is reduced over a number of sequential steps. The attribute frame and the occupancy map frame are reduced until they are a predetermined size. That is, the attribute frame and the occupancy map frame are down sampled in both height and width. In certain embodiments, the attribute frame and the occupancy map frame are reduced until one diminution of the attribute frame and the occupancy map frame would be four pixels or smaller.

To down sample the attribute frame the encoder <NUM> averages the pixels within a particular block size to generate a pixel representing a color value. In certain embodiments, to down sample the attribute frame the encoder <NUM> determines whether any pixel within the particular block size is valid. If a pixel in the block size is valid, then the generated pixel in the down sampled image is valid. If no pixels in the block are valid, then the generated pixel in the down sampled image is invalid. In certain embodiments, to down sample the attribute frame the encoder <NUM> averages the pixels within a particular block size to generate a pixel representing either a valid or invalid pixel.

At a particular LoD, the encoder <NUM> generates a single pixel representing the pixels within a block in the particular LoD. That single pixel is placed in the subsequent LoD. The block then shifts to the adjacent pixels at the particular LoD (pixels that were not yet averaged in the current LoD) and generates another single pixel, based on the pixels, and places that pixel in the subsequent LoD. This process continues until each pixel in at the particular LoD similarly down sampled.

In certain embodiments, the block is 2x2. In the attribute frame, every pixel within the 2x2 block of a current LoD (i LoD) is averaged to generate a single pixel. The generated pixel is placed in a smaller LoD (i+<NUM> LoD). In particular, the 2x2 block of a current LoD (i LoD) averages and generates single pixels that correspond to a color value in the attribute frame. In the occupancy map frame, the encoder <NUM> determines whether any pixel is valid within the 2x2 block. When any pixel is valid within the 2x2 block, a single pixel indicating a valid pixel is generated. When no pixels within the 2x2 block are valid, then a single pixel indicating an invalid pixel is generated. The 2x2 block then moves to the adjacent four pixels at the current LoD (i LoD) and generates another single pixel. The 2x2 block continues to shift until every pixel in the current LoD (i LoD) is used to generate single pixels. Each pixel that is generated is stored at a corresponding position in the smaller LoD. This process continues generating smaller and smaller LoDs until at least one dimension (height or width) of the attribute frame and the occupancy map frame is a predetermined size, such as <NUM> pixels.

In certain embodiments, the size of the block can change from each LoD. For example, the size of the block decreases at each subsequent (smaller) LoD. For another example, the size of the block increases at each subsequent (smaller) LoD. It is noted that based on the size of the block, the number of steps needed to reduce the attribute frame and the occupancy map frame to the predetermined size changes. Similarly the size of the block affects the quality associated with each down sampling.

After the attribute frame and the occupancy map frame are reduced to a predetermined size, in step <NUM>, the encoder <NUM> increases the resolution of the attribute frame and the occupancy map while adding padding. The resolution of the attribute frame and the occupancy map frame is increased over a number of sequential steps. The attribute frame and the occupancy map frame are increased until they are the original size. To up sample pixels in the attribute frame the encoder <NUM> uses the i-th LoD image to fill the inter-patch space of the i-<NUM> LoD image using the i-<NUM> LoD occupancy map.

After each LoD image is generated, in step <NUM>, the encoder <NUM> performs an adaptive iterative filtering process to make the color, intensity, or both, in the inter-patch space as smooth as possible. That is, the iterative filtering process is applied to the pixels in the attribute frame that are identified as invalid pixels by the occupancy map frame. The smoothing increases the padding with respect to the pixels located in the inter-patch space of the attribute frame. When the number of iterations of the filtering is complete at a particular LoD, the encoder <NUM> up samples that LoD (i-LoD), to (i+<NUM> LoD).

A first iteration of smoothing, at any LoD is based on the values of the pixels in the attribute frame after the resolution of the attribute frame is increased. Each subsequent filtering iteration is based on the values of the pixels of the previous filtering iteration.

The number of iterations that the filtering is applied change at each subsequent LoD. In certain embodiments, the number of iterations is set to four at the lowest LoD and incrementally increased to a preset number of iterations at the highest LoD. For example, the number of iterations can increase to eight at the highest LoD. For example, the number of iterations can increase to sixteen at the highest LoD. For yet example, the number of iterations can increase to another predefined number of iterations at the highest LoD.

In certain embodiments, the number of iterations for filtering can be adaptively determined at each LoD based on the residual error between the attribute frame of a current iteration of filtering and the previous iteration of filtering. The encoder <NUM> compares the identified residual error to a threshold. The filtering stops when the residual error is less than a threshold.

The size of the filter can change between different LoDs or remain constant for every LoD. In certain embodiments, the size of the filter is a 3x3 filter for each LoD. In certain embodiments, the size of the filter increases at each subsequent LoD. Additionally, the weights applied at filter can change at different LoDs or remain constant for each LoD.

In step <NUM>, the encoder <NUM> encodes the attribute frame, occupancy map frame and any other generated frames that represent the 3D point cloud. After the frames representing 3D point cloud are encoded, the encoder <NUM> can multiplex the frames into a bitstream. In step <NUM>, the encoder <NUM> transmits the bitstream. The bitstream can be ultimately transmitted to a decoder, such as the decoder <NUM>.

Although <FIG> illustrates one example of a method <NUM> for point cloud encoding, various changes may be made to <FIG>. For example, while shown as a series of steps, various steps in <FIG> could overlap, occur in parallel, or occur any number of times.

Although the figures illustrate different examples of user equipment, various changes may be made to the figures. For example, the user equipment can include any number of each component in any suitable arrangement. In general, the figures do not limit the scope of this disclosure to any particular configuration(s). Moreover, while figures illustrate operational environments in which various user equipment features disclosed in this patent document can be used, these features can be used in any other suitable system.

None of the description in this application should be read as implying that any particular element, step, or function is an essential element that must be included in the claim scope. The scope of patented subject matter is defined only by the claims.

Claim 1:
An encoding device for point cloud encoding, the encoding device comprising:
a transceiver; and
at least one processor coupled with the transceiver and configured to:
generate (<NUM>), for a three-dimensional, 3D, point cloud, an attribute frame that includes pixels, the attribute frame being a 2D array created through the aggregation of patches projected from the 3D point cloud,
generate (<NUM>), for the 3D cloud, an occupancy map frame that identifies, for a pixel within the attribute frame whether the pixel represents a point of the 3D point cloud or not,
reduce (<NUM>) a resolution of the attribute frame and a resolution of the occupancy map frame over a number of sequential steps, until the attribute frame and the occupancy map frame are a predetermined size,
after the attribute frame and the occupancy map frame are reduced to the predetermined size, iteratively (<NUM>) increase a resolution of the attribute frame and a resolution of the occupancy map frame to the original size over a number of up sampling iterations while adding padding in an inter-patch space of the attribute frame, at each up sampling iteration, to modify pixels in the attribute frame that do not represent points of the 3D point cloud,
while the resolution of the attribute frame and the resolution of the occupancy map frame is incrementally increased, at each of the up sampling iterations:
perform (<NUM>) a number of smoothing iterations, wherein:
a first smoothing iteration, at each of the up sampling iteration, is applied to the pixels in the attribute frame that do not represent the points of the 3D point cloud according to the occupancy map frame of a current up sampling iteration after the resolution of the attribute frame and the corresponding occupancy map is increased, and
each subsequent smoothing iteration, after the first smoothing iteration at the current up sampling iteration, is based on values of the pixels corresponding to one previous smoothing iteration on the pixels in the attribute frame that do not represent the points of the 3D point cloud according to the occupancy map frame of the current up scaling iteration,
increase the number of smoothing iterations at a subsequent up sampling iteration,
encode (<NUM>) the up sampled attribute frame and the up sampled occupancy map frame to generate a bitstream; and
transmit (<NUM>) the bitstream.