Checking the non-overlapping property of patches in mesh compression
By employing processing circuitry to check for non-overlapping patches using bounding boxes and expanded regions, the method addresses the challenge of patch overlap in mesh coding, enhancing data efficiency in mesh compression and decompression.
Patent Information
- Application Number
- JP2023566744
- Authority / Receiving Office
- JP · JP
- Patent Type
- Patents
- Current Assignee / Owner
- Priority Date
- 2022-10-19
- Filing Date
- 2022-10-26
- Publication Date
- 2025-01-22
- Estimated Expiration
- 2042-10-26
AI Technical Summary
Existing mesh coding technologies face challenges in ensuring that patches in 3D meshes do not overlap during compression and decompression, leading to inefficiencies in data storage and transmission.
The method involves processing circuitry that checks for non-overlapping patches by using bounding boxes, patch boundaries, and expanded regions to ensure that 2D patches do not overlap, utilizing UV coordinates and geometric information to determine the absence of intersections and inclusions.
This approach ensures efficient packing of patches without overlap, reducing data redundancy and improving compression efficiency in mesh coding, thereby optimizing data storage and transmission.
Smart Images

Figure 0007619729000001 
Figure 0007619729000002 
Figure 0007619729000003
Abstract
Description
[Technical field]
[0001] Incorporation by Reference This application claims the benefit of priority to U.S. Patent Application No. 17 / 969,580, entitled “CHECKING OVERLAPPING-FREE PROPERTY FOR PATCHES IN MESH COMPRESSION,” filed October 19, 2022, which claims the benefit of priority to U.S. Provisional Application No. 63 / 291,842, entitled “CHECKING OVERLAPPING-FREE PROPERTY FOR PATCHES IN MESH COMPRESSION,” filed December 20, 2021. The disclosures of the prior applications are incorporated herein by reference in their entireties.
[0002] This disclosure generally describes embodiments relating to mesh coding. [Background technology]
[0003] The background discussion provided herein is intended to provide a general overview of the contents of the present disclosure. The work of the presently named inventors is not admitted, expressly or impliedly, as prior art to the present disclosure, to the extent that it is described in this background section, as well as aspects of the description that may not be admitted as prior art at the time of filing.
[0004] Various techniques have been developed to capture and represent the world, including world objects and the world's environment, in three-dimensional (3D) space. The 3D representation of the world enables more immersive interaction and communication. In some examples, point clouds and meshes can be used as the 3D representation of the world. Summary of the Invention
[0005] Aspects of the present disclosure provide methods and apparatus for mesh coding (e.g., compression and decompression). In some examples, the apparatus for mesh coding includes a processing circuit. The processing circuit receives a first UV coordinate associated with a first vertex of a first patch and a second UV coordinate associated with a second vertex of a second patch. The first patch and the second patch are partitions from a three-dimensional (3D) mesh, the 3D mesh representing a surface of an object with polygons and partitioned into patches. The first patch includes a first vertex, the first vertex being mapped to a first 2D vertex of a first 2D patch in a two-dimensional (2D) map according to the first UV coordinate. The second patch includes a second vertex, the second vertex being mapped to a second 2D vertex of a second 2D patch in the 2D map according to the second UV coordinate. In some embodiments, the processing circuit determines a first region surrounding a first 2D patch in the 2D map and determines a second region surrounding a second 2D patch in the 2D map. The processing circuit determines that the first region and the second region have no overlap. In response to the first region and the second region having no overlap, the processing circuit determines that the first 2D patch and the second 2D patch have no overlap.
[0006] In one embodiment, the first region is a first bounding box of the first 2D patch, and the second region is a second bounding box of the second 2D patch. In some examples, the processing circuit determines the first bounding box according to a minimum U coordinate value, a maximum U coordinate value, a minimum V coordinate value, and a maximum V coordinate value in the first UV coordinate, and determines the second bounding box according to a minimum U coordinate value, a maximum U coordinate value, a minimum V coordinate value, and a maximum V coordinate value in the second UV coordinate.
[0007] In another embodiment, the first region is a first enlarged bounding box of a first enlarged 2D patch for the first 2D patch, and the second region is a second enlarged bounding box of a second enlarged 2D patch for the second 2D patch. In some examples, the processing circuit determines the first bounding box according to a minimum U coordinate value, a maximum U coordinate value, a minimum V coordinate value, and a maximum V coordinate value in the first UV coordinate, and determines the second bounding box according to a minimum U coordinate value, a maximum U coordinate value, a minimum V coordinate value, and a maximum V coordinate value in the second UV coordinate. The processing circuit determines the first enlarged bounding box by enlarging a boundary of the first bounding box, and determines the second enlarged bounding box by enlarging a boundary of the second bounding box.
[0008] In some embodiments, the processing circuitry determines whether the point is absent from both the first 2D patch and the second 2D patch. (That is, there is no point that exists in both the first 2D patch and the second 2D patch.) In accordance with the above, the processing circuit determines that the first 2D patch and the second 2D patch do not overlap. In one embodiment, the processing circuit checks whether each first point at an integer pixel position in the first 2D patch is present in the second 2D patch, and checks whether each first point in the first 2D patch is on a boundary of the second 2D patch.
[0009] In another embodiment, the processing circuit checks whether a first boundary vertex of each of the first 2D vertices is in the second 2D patch, and checks whether a second boundary vertex of each of the second 2D vertices is in the first 2D patch. The processing circuit also checks whether the first boundary vertex of each of the first 2D vertices is on the boundary of the second 2D patch, and checks whether the second boundary vertex of each of the second 2D vertices is on the boundary of the first 2D patch.
[0010] In some embodiments, to determine that the first 2D patch and the second 2D patch have no overlap, the processing circuit determines that a first boundary of the first 2D patch and a second boundary of the second 2D patch have no intersection, and determines that neither the first 2D patch nor the second 2D patch is within another of the first 2D patch or the second 2D patch.
[0011] To check whether the first boundary and the second boundary intersect, in some examples, the processing circuit determines, for a first line segment of the first boundary and a second line segment of the second boundary, a first orientation of a first triangle formed by a first starting point of the first line segment, a second starting point of the second line segment, and a second end point of the second line segment, determines a second orientation of a second triangle formed by the first end point of the first line segment, the second starting point of the second line segment, and the second end point of the second line segment, and determines that the first boundary and the second boundary intersect if the first orientation is different from the second orientation.
[0012] In some examples, the processing circuit determines that the first line segment and the second line segment intersect in response to at least one of the first starting point and the first ending point being on the second line segment, and determines that the first line segment and the second line segment intersect in response to at least one of the second starting point and the second ending point being on the first line segment.
[0013] In some examples, the processing circuit determines a third orientation of a third triangle formed by the second starting point of the second line segment, the first starting point of the first line segment, and the first end of the first line segment, and determines a fourth orientation of a fourth triangle formed by the second end point of the second line segment, the first starting point of the first line segment, and the first end of the first line segment. The processing circuit determines that the first line segment and the second line segment intersect in response to the third orientation being different from the fourth orientation.
[0014] In some examples, to determine that neither the first 2D patch nor the second 2D patch is inside the other of the first 2D patch nor the second 2D patch, the processing circuit determines that a first point of the first 2D patch is not inside the second 2D patch and determines that a second point of the second 2D patch is not inside the first 2D patch.
[0015] In some embodiments, the processing circuit determines a first augmented 2D patch by applying a first augmentation of a first size to first boundary pixels of a first boundary of the first 2D patch, and determines a second augmented 2D patch by applying a second augmentation of the first size to second boundary pixels of a second boundary of the second 2D patch. The processing circuit may check whether there is any overlap between the first augmented 2D patch and the second augmented 2D patch.
[0016] To check whether the first and second enlarged 2D patches have no overlap, in some examples, the processing circuit determines a first doubled square by applying a third enlargement of a second size that doubles the first size to a first bounding vertex in the first 2D vertices, and determines a second doubled square by applying a fourth enlargement of the second size to a second bounding vertex in the second 2D vertices. The processing circuit determines a first set of line segments that includes a first bounding edge in the first boundary and a first neighboring bounding edge of the first doubled square, and determines a second set of line segments that includes a second bounding edge of the second boundary and a second neighboring bounding edge of the second doubled square. The processing circuit can then determine whether the first set of line segments and the second set of line segments have no intersection.
[0017] In some examples, the processing circuitry also checks whether the first expanded 2D patch does not exist within the second expanded 2D patch, and whether the second expanded 2D patch does not exist within the first expanded 2D patch.
[0018] In one example, to determine that the first and second augmented 2D patches do not overlap, the processing circuitry may check whether a first bounding box of the first augmented 2D patch and a second bounding box of the second augmented 2D patch do not overlap. In another example, the processing circuitry may determine that the first and second augmented 2D patches do not overlap in response to the point not being present in both the first and second augmented 2D patches.
[0019] Aspects of the present disclosure also provide a non-transitory computer-readable medium storing instructions that, when executed by a computer, cause the computer to perform any one or combination of methods for mesh coding. [Brief description of the drawings]
[0020] Further features, nature and various advantages of the disclosed subject matter will become more apparent from the following detailed description and the accompanying drawings. [Figure 1] 1 is a block diagram of a communication system in some examples. [Diagram 2] FIG. 1 is a block diagram of a streaming system in some examples. [Diagram 3] 1 is a block diagram of an encoder for encoding a point cloud frame in some examples. [Figure 4] FIG. 2 is a block diagram of a decoder for decoding a compressed bitstream corresponding to a point cloud frame in some examples. [Diagram 5] 1 is a block diagram of a video decoder in some examples. [Figure 6] 1 is a block diagram of a video encoder in some examples. [Figure 7] 1 is a block diagram of an encoder for encoding a point cloud frame in some examples. [Figure 8] A block diagram of a decoder for decoding a compressed bitstream carrying a point cloud frame in some examples. [Figure 9]FIG. 1 illustrates mapping of a mesh to an atlas in some examples. [Figure 10A] FIG. 13 illustrates an example of using bounding boxes to check for overlaps in some examples. [Figure 10B] FIG. 13 illustrates an example of using bounding boxes to check for overlaps in some examples. [Figure 11A] FIG. 13 illustrates patch expansion in some examples. [Figure 11B] FIG. 13 illustrates patch expansion in some examples. [Figure 12] FIG. 13 illustrates new line segments in response to patch expansion in one example. [Figure 13A] FIG. 13 illustrates two non-overlapping 2D patches that overlap after patch expansion in some examples. [Figure 13B] FIG. 13 illustrates two non-overlapping 2D patches that overlap after patch expansion in some examples. [Figure 14] 1 is a flowchart outlining an example process according to some examples. [Figure 15] 1 is a flowchart outlining an example process according to some examples. [Figure 16] 1 is a flowchart outlining an example process according to some examples. [Figure 17] FIG. 1 is a schematic diagram of a computer system according to some examples. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS
[0021] Aspects of the present disclosure provide techniques in the field of three-dimensional (3D) media processing.
[0022] Technological developments in three-dimensional (3D) media processing, such as advances in 3D capture, 3D modeling, and 3D rendering, have facilitated the ubiquitous presence of 3D media content across several platforms and devices. In one example, a baby's first steps can be captured on one continent, while media technologies allow grandparents on another continent to watch (and possibly interact with) the baby and enjoy an immersive experience. According to one aspect of the present disclosure, to enhance the immersive experience, 3D models are becoming increasingly sophisticated, and the creation and consumption of 3D models occupies a significant amount of data resources, such as data storage, data transmission resources, etc.
[0023] According to some aspects of the present disclosure, point clouds and meshes can be used as 3D models to represent immersive content.
[0024] A point cloud may generally refer to a set of points in 3D space, where each point has associated attributes such as color, material properties, texture information, intensity attributes, reflectance attributes, motion-related attributes, modality attributes, and various other attributes. Using a point cloud, an object or scene can be reconstructed as a configuration of such points.
[0025] An object's mesh (also called a mesh model) may include polygons that describe the object's surface. Each polygon may be specified by its vertices in 3D space and information about how the vertices connect to the polygon. The information about how the vertices connect to each other is called connectivity information. In some examples, a mesh may also include attributes such as color and normals associated with the vertices.
[0026] According to some aspects of the present disclosure, some coding tools for point cloud compression (PCC) can be used for mesh compression. For example, a mesh can be remeshed to generate a new mesh and connectivity information for the new mesh can be inferred. The vertices of the new mesh and the attributes associated with the vertices of the new mesh can be considered as points in a point cloud and compressed using a PCC codec.
[0027] A point cloud can be used to reconstruct an object or scene as a configuration of points. The points can be captured using multiple cameras, depth sensors, or Lidar in various settings, and can consist of thousands up to billions of points to realistically represent the reconstructed scene or object. A patch can generally refer to a contiguous subset of the surface described by the point cloud. In one example, a patch includes points that have surface normal vectors that deviate from each other by less than a threshold amount.
[0028] PCC can be performed according to various schemes, such as a geometry-based scheme called G-PCC and a video coding-based scheme called V-PCC. According to some aspects of the present disclosure, G-PCC is a purely geometry-based approach that directly encodes 3D geometry and does not share much with video coding, while V-PCC is heavily based on video coding. For example, V-PCC can map points of a 3D cloud to pixels of a 2D grid (image). The V-PCC scheme can utilize a general-purpose video codec for point cloud compression. The PCC codec (encoder / decoder) in the present disclosure can be a G-PCC codec (encoder / decoder) or a V-PCC codec.
[0029] According to one aspect of the present disclosure, the V-PCC scheme can compress the geometry, occupancy, and texture of the point cloud as three separate video sequences using an existing video codec. Additional metadata required to interpret the three video sequences is compressed separately. A small portion of the overall bitstream is the metadata, which in one example can be efficiently encoded / decoded using a software implementation. The majority of the information is handled by the video codec.
[0030] FIG. 1 illustrates a block diagram of a communication system (100) in some examples. The communication system (100) includes a plurality of terminal devices that can communicate with each other, for example, via a network (150). For example, the communication system (100) includes a pair of terminal devices (110) and (120) interconnected via the network (150). In the example of FIG. 1, a first pair of terminal devices (110) and (120) can perform unidirectional transmission of point cloud data. For example, the terminal device (110) can compress a point cloud (e.g., points representing structures) captured by a sensor (105) connected to the terminal device (110). The compressed point cloud can be transmitted, for example, in the form of a bit stream, via the network (150) to another terminal device (120). The terminal device (120) can receive the compressed point cloud from the network (150), decompress the bit stream to reconstruct the point cloud, and display the reconstructed point cloud appropriately. One-way data transmission can be common in media service provision applications, etc.
[0031] In the example of FIG. 1, the terminals (110) and (120) may be shown as a server and a personal computer, although the principles of the present invention are not so limited. The embodiments of the present disclosure find application in laptop computers, tablet computers, smart phones, gaming consoles, media players, and / or dedicated three-dimensional (3D) devices. The network (150) represents any number of networks that transmit compressed point clouds between the terminals (110) and (120). The network (150) may include, for example, wired and / or wireless communication networks. The network (150) may exchange data over circuit-switched and / or packet-switched channels. Exemplary networks include telecommunications networks, local area networks, wide area networks, the Internet, and the like.
[0032] 2 illustrates a block diagram of a streaming system 200 in some example applications of point clouds. The disclosed subject matter is equally applicable to other point cloud-enabled applications, such as 3D telepresence applications and virtual reality applications.
[0033] The streaming system (200) can include an ingestion subsystem (213). The ingestion subsystem (213) can include a point cloud source (201), such as a light detection and ranging (LIDAR) system, a 3D camera, a 3D scanner, a graphics generation component that generates an uncompressed point cloud in software, such as generating an uncompressed point cloud (202). In one example, the point cloud (202) includes points captured by a 3D camera. The point cloud (202) is shown in bold to emphasize the large amount of data when compared to a compressed point cloud (204) (compressed point cloud bitstream). The compressed point cloud (204) can be generated by an electronic device (220) that includes an encoder (203) coupled to the point cloud source (201). The encoder (203) can include hardware, software, or a combination thereof to enable or achieve aspects of the disclosed subject matter, as described in more detail below. The compressed point cloud (204) (or a bitstream of the compressed point cloud (204)), shown with thin lines to emphasize its small amount of data compared to the stream of point cloud (202), can be stored on the streaming server (205) for future use. One or more streaming client subsystems, such as the client subsystems (206) and (208) of FIG. 2, can access the streaming server (205) to obtain copies (207) and (209) of the compressed point cloud (204). The client subsystem (206) can include a decoder (210), for example in the electronic device (230). The decoder (210) decodes the input copy of the compressed point cloud (207) and creates an output stream of a reconstructed point cloud (211) that can be rendered by the rendering device (212).
[0034] It should be noted that electronic devices 220 and 230 may include other components (not shown), for example, electronic device 220 may include a decoder (not shown) and electronic device 230 may also include an encoder (not shown).
[0035] In some streaming systems, the compressed point clouds 204, 207, and 209 (e.g., compressed point cloud bitstreams) may be compressed according to a particular standard. In some examples, a video coding standard is used to compress the point clouds. Examples of these standards include High Efficiency Video Coding (HEVC), Versatile Video Coding (VVC), etc.
[0036] 3 shows a block diagram of a V-PCC encoder (300) for encoding a point cloud frame according to some embodiments. In some embodiments, the V-PCC encoder (300) can be used in the communication system (100) and the streaming system (200). For example, the encoder (203) can be configured and operate in a manner similar to the V-PCC encoder (300).
[0037] The V-PCC encoder (300) receives a point cloud frame as an uncompressed input and generates a bitstream corresponding to the compressed point cloud frame. In some embodiments, the V-PCC encoder (300) can receive the point cloud frame from a point cloud source, such as the point cloud source (201).
[0038] In the example of FIG. 3, the V-PCC encoder (300) includes a patch generation module (306), a patch packing module (308), a geometry image generation module (310), a texture image generation module (312), a patch information module (304), an occupancy map module (314), a smoothing module (336), image padding modules (316) and (318), a group expansion module (320), video compression modules (322), (323), and (332), an auxiliary patch information compression module (338), an entropy compression module (334), and a multiplexer (324).
[0039] According to one aspect of the disclosure, the V-PCC encoder (300) converts the 3D point cloud frame into an image-based representation along with some metadata (e.g., occupancy map and patch information) that is used to convert the compressed point cloud back to a decompressed point cloud. In some examples, the V-PCC encoder (300) converts the 3D point cloud frame into a geometry image, a texture image, and an occupancy map, and then can encode the geometry image, texture image, and occupancy map into a bitstream using video coding techniques. In general, a geometry image is a 2D image that includes pixels filled with geometry values associated with points projected onto pixels, where the pixels filled with geometry values may be referred to as geometry samples. A texture image is a 2D image that includes pixels filled with texture values associated with points projected onto pixels, where the pixels filled with texture values may be referred to as texture samples. An occupancy map is a 2D image that includes pixels filled with values that indicate whether or not they are occupied by a patch.
[0040] The patch generation module (306) segments the point cloud into a set of patches (e.g., a patch is defined as a contiguous subset of the surface described by the point cloud), which may be overlapping or non-overlapping, and each patch may be described by a depth field for a plane in 2D space. In some embodiments, the patch generation module (306) aims to decompose the point cloud into a minimum number of patches with smooth boundaries while minimizing the reconstruction error.
[0041] In some examples, the patch information module (304) may collect patch information indicating the size and shape of the patch. In some examples, the patch information may be packed into an image frame and then encoded by the auxiliary patch information compression module (338) to generate compressed auxiliary patch information.
[0042] In some examples, the patch packing module (308) is configured to map the extracted patches onto a two-dimensional (2D) grid and ensure that every M×M (e.g., 16×16) block of the grid is associated with a unique patch while minimizing unused space. Efficient patch packing can directly impact compression efficiency by minimizing unused space or ensuring temporal consistency.
[0043] The geometry image generation module (310) can generate a 2D geometry image associated with the geometry of the point cloud at a given patch location. The texture image generation module (312) can generate a 2D texture image associated with the texture of the point cloud at a given patch location. The geometry image generation module (310) and the texture image generation module (312) use the 3D to 2D mapping calculated during the packing process to store the geometry and texture of the point cloud as images. To better handle the case where multiple points are projected onto the same sample, each patch is projected onto two images called layers. In one example, the geometry image is represented as a W×H monochrome frame in YUV420-8bit format. To generate the texture image, the texture generation procedure uses the reconstructed / smoothed geometry to calculate the colors associated with the resampled points.
[0044] The occupancy map module (314) can generate an occupancy map that describes the padding information in each unit. For example, the occupancy image includes a binary map that indicates for each cell of the grid whether the cell belongs to free space or to the point cloud. In one example, the occupancy map uses binary information that describes for each pixel whether the pixel is padded or not. In another example, the occupancy map uses binary information that describes for each block of pixels whether the block of pixels is padded or not.
[0045] The occupancy map generated by the occupancy map module (314) can be compressed using lossless or non-lossy coding. If lossless coding is used, the entropy compression module (334) is used to compress the occupancy map. If lossy coding is used, the video compression module (332) is used to compress the occupancy map.
[0046] It should be noted that the patch packing module (308) may leave some empty space between the 2D patches that it packs into the image frame. The image padding modules (316) and (318) may fill the empty space (called padding) to generate an image frame that may be suitable for 2D video and image codecs. Image padding, also known as background filling, may fill the unused space with redundant information. In some examples, proper background filling may result in minimal bitrate increase while not introducing significant coding artifacts near patch boundaries.
[0047] The video compression modules (322), (323), and (332) can encode 2D images, such as padded geometry images, embedded texture images, and occupancy maps, based on an appropriate video coding standard, such as HEVC and VVC. In one example, the video compression modules (322), (323), and (332) are separate components that operate separately. It should be noted that in another example, the video compression modules (322), (323), and (332) can be implemented as a single component.
[0048] In some examples, the smoothing module (336) is configured to generate a smoothed image of the reconstructed geometry image. The smoothed image can be provided to the texture image generation (312). The texture image generation (312) can then adjust the generation of the texture image based on the reconstructed geometry image. For example, if the patch shape (e.g., geometry) is slightly distorted during encoding and decoding, the distortion can be taken into account when generating the texture image to correct the distortion of the patch shape.
[0049] In some embodiments, the group expansion (320) is configured to pad pixels around object boundaries with redundant low-frequency content to improve the coding gain and visual quality of the reconstructed point cloud.
[0050] A multiplexer (324) can multiplex compressed geometry images, compressed texture images, compressed occupancy maps, and compressed auxiliary patch information into a compressed bitstream.
[0051] 4 illustrates a block diagram of a V-PCC decoder (400) for decoding a compressed bitstream corresponding to a point cloud frame in some examples. In some examples, the V-PCC decoder (400) can be used in the communication system (100) and the streaming system (200). For example, the decoder (210) can be configured to operate in a manner similar to the V-PCC decoder (400). The V-PCC decoder (400) receives a compressed bitstream and generates a reconstructed point cloud based on the compressed bitstream.
[0052] In the example of FIG. 4, the V-PCC decoder (400) includes a demultiplexer (432), video decompression modules (434) and (436), an occupancy map decompression module (438), an auxiliary patch information decompression module (442), a geometry reconstruction module (444), a smoothing module (446), a texture reconstruction module (448), and a color smoothing module (452).
[0053] A demultiplexer (432) can receive the compressed bitstream and separate it into compressed texture images, compressed geometry images, compressed occupancy maps, and compressed auxiliary patch information.
[0054] The video decompression modules (434) and (436) can decode compressed images according to an appropriate standard (e.g., HEVC, VVC, etc.) and output decompressed images. For example, the video decompression module (434) can decode compressed texture images and output decompressed texture images, and the video decompression module (436) can decode compressed geometry images and output decompressed geometry images.
[0055] The occupancy map decompression module (438) can decode the compressed occupancy map according to an appropriate standard (e.g., HEVC, VVC, etc.) and output a decompressed occupancy map.
[0056] The auxiliary patch information decompression module (442) can decode the compressed auxiliary patch information according to an appropriate standard (e.g., HEVC, VVC, etc.) and output the decompressed auxiliary patch information.
[0057] A geometry reconstruction module (444) can receive the decompressed geometry image and generate a reconstructed point cloud geometry based on the decompressed occupancy map and the decompressed auxiliary patch information.
[0058] A smoothing module (446) can smooth discrepancies at the edges of the patches. The smoothing procedure aims to reduce potential discontinuities that may occur at patch boundaries due to compression artifacts. In some embodiments, a smoothing filter can be applied to pixels located on patch boundaries to reduce distortions that may be caused by compression / decompression.
[0059] The texture reconstruction module (448) can determine texture information for points in the point cloud based on the decompressed texture image and the smoothed geometry.
[0060] The color smoothing module (452) can smooth out coloring discrepancies. Non-adjacent patches in 3D space are often packed next to each other in 2D video. In some instances, pixel values of non-adjacent patches may be mixed by block-based video codecs. The purpose of color smoothing is to reduce visible artifacts that appear at patch boundaries.
[0061] 5 shows a block diagram of a video decoder (510) in some examples. The video decoder (510) can be used in the V-PCC decoder (400). For example, the video decompression modules (434) and (436) and the occupancy map decompression module (438) can be configured similarly to the video decoder (510).
[0062] The video decoder (510) may include a parser (520) for reconstructing symbols (521) from a compressed image, such as a coded video sequence. These categories of symbols include information used to manage the operation of the video decoder (510). The parser (520) may parse / entropy decode a received coded video sequence. The coding of the coded video sequence may be according to a video coding technique or standard and may follow a variety of principles including variable length coding, Huffman coding, arithmetic coding with or without context dependency, etc. The parser (520) may extract a set of subgroup parameters for at least one subgroup of pixels in the video decoder from the coded video sequence based on at least one parameter corresponding to the group. The subgroups may include a group of pictures (GOP), a picture, a tile, a slice, a macroblock, a coding unit (CU), a block, a transform unit (TU), a prediction unit (PU), etc. The parser (520) may also extract information from the coded video sequence, such as transform coefficients, quantization parameter values, and motion vectors.
[0063] The parser (520) may perform an entropy decoding / parsing operation on the video sequence received from the buffer memory to produce symbols (521).
[0064] The reconstruction of the symbols (521) may involve several different units, depending on the type of video picture or part thereof that has been coded (inter-picture and intra-picture, inter-block and intra-block, etc.), as well as other factors. Which units are involved and how can be controlled by subgroup control information parsed from the coded video sequence by the parser (520). The flow of such subgroup control information between the parser (520) and the following units is not shown for the sake of clarity.
[0065] Beyond the functional blocks already mentioned, the video decoder (510) may be conceptually subdivided into a number of functional units, as described below. In an actual implementation operating under commercial constraints, many of these units may be closely coupled and at least partially integrated with each other. However, for purposes of describing the disclosed subject matter, the following conceptual subdivision into functional units is appropriate:
[0066] The first unit is a scalar / inverse transform unit (551), which receives quantized transform coefficients and control information from the parser (520) including the transform to be used, block size, quantization coefficients, quantization scaling matrix, etc. as symbol(s) (521). The scalar / inverse transform unit (551) can output blocks containing sample values that can be input to an aggregator (555).
[0067] In some cases, the output samples of the scaler / inverse transform (551) may relate to intra-coded blocks, i.e., blocks that do not use prediction information from a previously reconstructed picture, but can use prediction information from a previously reconstructed portion of the current picture. Such prediction information may be provided by an intra-picture prediction unit (552). In some cases, the intra-picture prediction unit (552) generates a block of the same size and shape as the block being reconstructed using surrounding already reconstructed information fetched from a current picture buffer (558). The current picture buffer (558) buffers, for example, a partially reconstructed current picture and / or a fully reconstructed current picture. The aggregator (555) adds, possibly on a sample-by-sample basis, the prediction information generated by the intra-prediction unit (552) to the output sample information provided by the scaler / inverse transform unit (551).
[0068] In other cases, the output samples of the scaler / inverse transform unit (551) may relate to an inter-coded, potentially motion-compensated block. In such cases, the motion compensated prediction unit (553) may access the reference picture memory (557) to fetch samples used for prediction. After motion compensating the fetched samples according to the symbols (521) related to the block, these samples may be added by the aggregator (555) to the output of the scaler / inverse transform unit (551), in this case called residual samples or residual signals, to generate output sample information. The addresses in the reference picture memory (557) from which the motion compensated prediction unit (553) fetches the prediction samples may be controlled by motion vectors available to the motion compensated prediction unit (553), for example in the form of symbols (521), which may have X, Y, and reference picture components. Motion compensation may also include interpolation of sample values fetched from the reference picture memory (557) when sub-sample accurate motion vectors are used, motion vector prediction mechanisms, etc.
[0069] The output samples of the aggregator (555) may be subjected to various loop filtering techniques in a loop filter unit (556). Video compression techniques may include in-loop filter techniques that are controlled by parameters contained in the coded video sequence (also called the coded video bitstream) and made available to the loop filter unit (556) as symbols (521) from the parser (520), but may also be responsive to meta-information obtained during decoding of a previous (in decoding order) portion of the coded picture or coded video sequence, or may be responsive to previously reconstructed loop filtered sample values.
[0070] The output of the loop filter unit (556) may be a sample stream that can be output to a rendering device and also stored in a reference picture memory (557) for use in future inter-picture prediction.
[0071] Once a particular coded picture is fully reconstructed, it can be used as a reference picture for future prediction. For example, once a coded picture corresponding to a current picture is fully reconstructed and the coded picture is identified as a reference picture (e.g., by the parser (520)), the current picture buffer (558) can become part of the reference picture memory (557), and a new current picture buffer can be reallocated before beginning reconstruction of the next coded picture.
[0072] The video decoder (510) may perform decoding operations according to a given video compression technique in a standard such as ITU-T Rec. H.265. The coded video sequence may conform to a syntax specified by the video compression technique or standard being used in the sense that the coded video sequence conforms to both the syntax of the video compression technique or standard and to a profile documented in the video compression technique or standard. In particular, a profile may select a particular tool as the only tool that may be used in the profile among all tools available in the video compression technique or standard. Compliance also requires that the complexity of the coded video sequence falls within a range defined by the level of the video compression technique or standard. In some cases, the level limits the maximum picture size, maximum frame rate, maximum reconstruction sample rate (e.g., measured in megasamples per second), maximum reference picture size, etc. The limits set by the level may be further limited in some cases via a hypothetical reference decoder (HRD) specification and HRD buffer management metadata signaled in the coded video sequence.
[0073] 6 shows a block diagram of a video encoder (603) according to one embodiment of the present disclosure. The video encoder (603) can be used in the V-PCC encoder (300) to compress point clouds. In one example, the video compression modules (322) and (323) and the video compression module (332) are configured similarly to the encoder (603).
[0074] The video encoder (603) can receive images, such as embedded geometry images and embedded texture images, and generate compressed images.
[0075] According to one embodiment, the video encoder (603) can encode and compress pictures of a source video sequence (images) into a coded video sequence (compressed images) in real-time or under other time constraints depending on the application requirements. Enforcing the appropriate coding rate is one function of the controller (650). In some embodiments, the controller (650) controls and is operatively coupled to other functional units as described below. For clarity, coupling is not shown. Parameters set by the controller (650) include rate control related parameters (picture skip, quantizer, lambda value for rate distortion optimization techniques, ...), picture size, group of pictures (GOP) layout, and maximum motion vector search range. The controller (650) can be configured to have other appropriate functions associated with the video encoder (603) to optimize a particular system design.
[0076] In some embodiments, the video encoder (603) is configured to operate in a coding loop. As an oversimplified explanation, in one example, the coding loop can include a source coder (630) (e.g., responsible for creating symbols, such as a symbol stream, and reference pictures based on an input picture to be coded and reference pictures) and a (local) decoder (633) embedded in the video encoder (603). The decoder (633) reconstructs the symbols in a similar manner to how the (remote) decoder would create them, creating sample data (since in the video compression techniques contemplated by the disclosed subject matter, any compression between the symbols and the coded video bitstream is lossless). The reconstructed sample stream (sample data) is input to a reference picture memory (634). Since the decoding of the symbol stream results in bit-accurate results regardless of the location of the decoder (local or remote), the contents in the reference picture memory (634) are also bit-accurate between the local and remote encoders. In other words, the prediction part of the encoder will "see" exactly the same sample values as reference picture samples that the decoder will "see" when using the prediction during decoding. This basic principle of reference picture synchrony (and the resulting drift if synchrony cannot be maintained, e.g., due to channel errors) is used in several related technologies as well.
[0077] The operation of the "local" decoder (633) may be the same as that of a "remote" decoder, such as the video decoder (510) already described in detail in connection with Figure 5, to which we will also briefly refer, except that, because symbols are available and the encoding / decoding of symbols into a coded video sequence by the entropy coder (645) and parser (520) may be lossless, the entropy decoding portion of the video decoder (510) may not include a fully implemented parser (520) in the local decoder (633).
[0078] During operation, in some examples, the source coder (630) may perform motion-compensated predictive coding, which predictively codes an input picture with reference to one or more previously coded pictures from the video sequence designated as “reference pictures.” In this manner, the coding engine (632) codes differences between pixel blocks of the input picture and pixel blocks of reference pictures that may be selected as predictive references for the input picture.
[0079] The local video decoder (633) can decode the coded video data of pictures that may be designated as reference pictures based on the symbols created by the source coder (630). The operation of the coding engine (632) is advantageously a lossy process. When the coded video data is decoded by a video decoder (not shown in FIG. 6), the reconstructed video sequence may be a replica of the source video sequence, which typically includes some errors. The local video decoder (633) can replicate the decoding process that may be performed by the video decoder on the reference pictures and store the reconstructed reference pictures in a reference picture cache (634). In this way, the video encoder (603) can locally store copies of reconstructed reference pictures that have common content as reconstructed reference pictures obtained by a far-end video decoder (free of transmission errors).
[0080] The predictor (635) can perform a prediction search for the coding engine (632). That is, for a new picture to be coded, the predictor (635) can search the reference picture memory (634) for sample data (as candidate reference pixel blocks) or for reference picture motion vectors and specific metadata, such as block shapes, that can serve as suitable prediction references for the new picture. The predictor (635) can operate on a sample block-by-pixel block basis to find suitable prediction references. In some cases, as determined by the search results obtained by the predictor (635), the input picture can have prediction references drawn from multiple reference pictures stored in the reference picture memory (634).
[0081] The controller (650) can manage the coding operations of the source coder (630), including, for example, setting the parameters and subgroup parameters used to encode the video data.
[0082] The output of all the aforementioned functional units may undergo entropy coding in an entropy coder (645), which converts the symbols produced by the various functional units into a coded video sequence by losslessly compressing the symbols according to techniques such as Huffman coding, variable length coding, and arithmetic coding.
[0083] The controller (650) can manage the operation of the video encoder (603). During coding, the controller (650) can assign a particular coding picture type to each coding picture, which can affect the coding technique that can be applied to the respective picture. For example, in many cases, pictures can be assigned as any of the following picture types:
[0084] An intra picture (I-picture) may be a picture that can be coded and decoded without using other pictures in a sequence as a prediction source. Some video codecs allow various types of intra pictures, including, for example, Independent Decoder Refresh (IDR) pictures. Those skilled in the art are aware of these variations of I-pictures and their respective uses and characteristics.
[0085] A predictive picture (P picture) may be a picture that can be coded and decoded using intra- or inter-prediction, which uses at most one motion vector and reference index to predict the sample values of each block.
[0086] A bidirectionally predicted picture (B-picture) may be a picture that can be coded and decoded using intra- or inter-prediction, which uses up to two motion vectors and reference indices to predict the sample values of each block. Similarly, a multi-prediction picture may use more than two reference pictures and associated metadata for the reconstruction of a single block.
[0087] A source picture may generally be spatially subdivided into multiple sample blocks (e.g., blocks of 4x4, 8x8, 4x8, or 16x16 samples each) and coded block by block. Blocks may be predictively coded with reference to other (already coded) blocks as determined by the coding assignment applied to the respective picture of the block. For example, blocks of an I-picture may be non-predictively coded or predictively coded with reference to already coded blocks of the same picture (spatial or intra prediction). Pixel blocks of a P-picture may be predictively coded via spatial or temporal prediction with reference to one previously coded reference picture. Blocks of a B-picture may be predictively coded via spatial or temporal prediction with reference to one or two previously coded reference pictures.
[0088] The video encoder (603) may perform coding operations in accordance with a given video compression technique or standard, such as ITU-T Rec. H.265. In its operations, the video encoder (603) may perform various compression operations, including predictive coding operations that exploit temporal and spatial redundancy in the input video sequence. Thus, the coded video data may conform to a syntax specified by the video coding technique or standard being used.
[0089] Video may be in the form of multiple source pictures (images) arranged in a time sequence. Intra-picture prediction (often abbreviated as intra-prediction) exploits spatial correlation within a given picture, while inter-picture prediction exploits correlation (temporal or other) between pictures. In one example, a particular picture being encoded / decoded (called the current picture) is partitioned into blocks. If a block in the current picture is similar to a reference block in a previously coded and still buffered reference picture in the video, the block in the current picture may be coded by a vector called a motion vector. A motion vector points to a reference block in a reference picture and may have three dimensions that identify the reference picture if multiple reference pictures are used.
[0090] In some embodiments, bidirectional prediction techniques may be used in inter-picture prediction. According to the bidirectional prediction techniques, two reference pictures are used, such as a first reference picture and a second reference picture that are earlier in decoding order than the current picture in the video (but may be earlier and later, respectively, in display order). A block in the current picture may be coded by a first motion vector that points to a first reference block in the first reference picture and a second motion vector that points to a second reference block in the second reference picture. A block may be predicted by a combination of the first and second reference blocks.
[0091] Furthermore, merge mode techniques can be used for inter-picture prediction to improve coding efficiency.
[0092] According to some embodiments of the present disclosure, predictions such as inter-picture prediction and intra-picture prediction are performed on a block-by-block basis. For example, according to the HEVC standard, a picture in a sequence of video pictures is partitioned into coding tree units (CTUs) for compression, and the CTUs in a picture are of the same size (such as 64×64 pixels, 32×32 pixels, or 16×16 pixels). Generally, a CTU includes three coding tree blocks (CTBs), which are one luma CTB and two chroma CTBs. Each CTU can be recursively quad-tree partitioned into one or more coding units (CUs). For example, a CTU of 64×64 pixels can be partitioned into one CU of 64×64 pixels, four CUs of 32×32 pixels, or 16 CUs of 16×16 pixels. In one example, each CU is analyzed to determine the prediction type of the CU, such as an inter prediction type or an intra prediction type. A CU is divided into one or more prediction units (PUs) according to temporal and / or spatial predictability. In general, each PU includes one luma prediction block (PB) and two chroma PBs. In one embodiment, prediction operations in coding (encoding / decoding) are performed on a prediction block basis. Taking a luma prediction block as an example of a prediction block, the prediction block includes a matrix of pixel values (e.g., luma values) of 8×8 pixels, 16×16 pixels, 8×16 pixels, and 16×8 pixels, etc.
[0093] 7 illustrates a block diagram of a G-PCC encoder (700) in some examples. The G-PCC encoder (700) can be configured to receive point cloud data and compress the point cloud data to generate a bitstream carrying the compressed point cloud data. In one embodiment, the G-PCC encoder (700) can include a position quantization module (710), a duplicate point removal module (712), an octree encoding module (730), an attribute transfer module (720), a level of detail (LOD) generation module (740), an attribute prediction module (750), a residual quantization module (760), an arithmetic coding module (770), an inverse residual quantization module (780), an addition module (781), and a memory (790) for storing reconstructed attribute values.
[0094] As shown, an input point cloud (701) may be received at a G-PCC encoder (700). Locations (e.g., 3D coordinates) of the point cloud (701) are provided to a quantization module (710). The quantization module (710) is configured to quantize the coordinates to generate quantized locations. A duplicate point removal module (712) is configured to receive the quantized locations and filter to identify and remove duplicate points. An octree encoding module (730) is configured to receive the filtered locations from the duplicate point removal module (712) and perform an octree-based encoding process to generate a sequence of occupancy codes that describe a 3D grid of voxels. The occupancy codes are provided to an arithmetic coding module (770).
[0095] The attribute transfer module (720) is configured to receive attributes of the input point cloud and perform an attribute transfer process to determine an attribute value for each voxel when multiple attribute values are associated with each voxel. The attribute transfer process may be performed on the reordered points output from the octree encoding module (730). The attributes after the transfer operation are provided to the attribute prediction module (750). The LOD generation module (740) is configured to operate on the reordered points output from the octree encoding module (730) and reconstruct the points into different LODs. The LOD information is provided to the attribute prediction module (750).
[0096] The attribute prediction module (750) processes the points according to the LOD-based order indicated by the LOD information from the LOD generation module (740). The attribute prediction module (750) generates an attribute prediction for the current point based on the reconstructed attributes of a set of neighboring points of the current point stored in the memory (790). A prediction residual can then be obtained based on the original attribute values received from the attribute transfer module (720) and the locally generated attribute prediction. If a candidate index is used in each attribute prediction process, an index corresponding to a selected prediction candidate can be provided to the arithmetic coding module (770).
[0097] The residual quantization module (760) is configured to receive the prediction residual from the attribute prediction module (750) and perform quantization to generate a quantized residual. The quantized residual is provided to the arithmetic coding module (770).
[0098] The inverse residual quantization module (780) is configured to receive the quantized residual from the residual quantization module (760) and generate a reconstructed prediction residual by performing the inverse of the quantization operation performed by the residual quantization module (760). The summation module (781) is configured to receive the reconstructed prediction residual from the inverse residual quantization module (780) and receive the respective attribute predictions from the attribute prediction module (750). The reconstructed prediction residual and the attribute predictions are combined to generate reconstructed attribute values that are stored in the memory (790).
[0099] The arithmetic coding module (770) is configured to receive the occupation codes, the candidate indexes (if used), the quantized residuals (if generated), and other information, and perform entropy coding to further compress the received values or information. As a result, a compressed bitstream (702) conveying the compressed information may be generated. The bitstream (702) may be transmitted or provided to a decoder that decodes the compressed bitstream, or may be stored in a storage device.
[0100] Figure 8 illustrates a block diagram of a G-PCC decoder (800) according to one embodiment. The G-PCC decoder (800) may be configured to receive a compressed bitstream and perform point cloud data decompression to decompress the bitstream and generate decoded point cloud data. In one embodiment, the G-PCC decoder (800) may include an arithmetic decoding module (810), an inverse residual quantization module (820), an octree decoding module (830), an LOD generation module (840), an attribute prediction module (850), and a memory (860) for storing reconstructed attribute values.
[0101] As shown, the compressed bitstream (801) may be received at an arithmetic decoding module (810). The arithmetic decoding module (810) is configured to decode the compressed bitstream (801) to obtain quantized residuals (if generated) and occupation codes of the point cloud. The octree decoding module (830) is configured to determine reconstructed positions of the points in the point cloud according to the occupation codes. The LOD generation module (840) is configured to reorganize the points into different LODs based on the reconstructed positions and determine an order based on the LODs. The inverse residual quantization module (820) is configured to generate reconstructed residuals based on the quantized residuals received from the arithmetic decoding module (810).
[0102] The attribute prediction module (850) is configured to perform an attribute prediction process to determine attribute predictions for the point according to the LOD-based order. For example, the attribute predictions for the current point may be determined based on reconstructed attribute values of neighboring points of the current point stored in the memory (860). In some examples, the attribute predictions may be combined with respective reconstructed residuals to generate reconstructed attributes for the current point.
[0103] The sequence of reconstructed attributes generated from the attribute prediction module (850), together with the reconstructed positions generated from the octree decoding module (830), in one example corresponds to the decoded point cloud (802) output from the G-PCC decoder (800). Additionally, the reconstructed attributes are also stored in memory (860) and can then be used to derive attribute predictions for subsequent points.
[0104] In various embodiments, the encoder (300), the decoder (400), the encoder (700), and / or the decoder (800) may be implemented in hardware, software, or a combination thereof. For example, the encoder (300), the decoder (400), the encoder (700), and / or the decoder (800) may be implemented using processing circuitry, such as one or more integrated circuits (ICs) that operate with or without software, such as application specific integrated circuits (ASICs) and field programmable gate arrays (FPGAs). In another example, the encoder (300), the decoder (400), the encoder (700), and / or the decoder (800) may be implemented as software or firmware that includes instructions stored on a non-volatile (or non-transitory) computer-readable storage medium. The instructions, when executed by a processing circuitry, such as one or more processors, cause the processing circuitry to perform the functions of the encoder (300), the decoder (400), the encoder (700), and / or the decoder (800).
[0105] It should be noted that the attribute prediction modules (750) and (850) configured to implement the attribute prediction techniques disclosed herein may be included in other decoders or encoders that may have similar or different structures to those shown in Figures 7 and 8. Furthermore, the encoder (700) and decoder (800) may be included in the same device or may be included in separate devices in various examples.
[0106] According to some aspects of the present disclosure, mesh compression may use a coding tool different from a PCC coding tool, or may use a PCC coding tool such as the PCC (e.g., G-PCC, V-PCC) encoders described above, and the PCC (e.g., G-PCC, V-PCC) encoders described above.
[0107] An object's mesh (also called a mesh model or mesh frame) may include polygons that describe the object's surface. Each polygon may be defined by the polygon's vertices in 3D space and the edges that connect the vertices to the polygon. Information about how the vertices are connected (e.g., the edge information) is called connectivity information. In some examples, an object's mesh is formed by connected triangles that describe the object's surface. Two triangles that share an edge are called connected triangles. In other examples, an object's mesh is formed by connected quadrilaterals. Two quadrilaterals that share an edge may be called connected quadrilaterals. It should be noted that a mesh may be formed by other suitable polygons.
[0108] In some examples, meshes may also include attributes such as color and normals associated with vertices. Attributes can be associated with the surface of a mesh using mapping information that parameterizes the mesh in a 2D attribute map. The mapping information is typically described by a set of parametric coordinates, called UV coordinates or texture coordinates, associated with the mesh vertices. 2D attribute maps (called texture maps in some examples) are used to store high-resolution attribute information such as textures, normals, displacements, etc. Such information can be used for various purposes such as texture mapping and shading.
[0109] In some embodiments, a mesh can include components called geometric information, connectivity information, mapping information, vertex attributes, and attribute maps. In some examples, the geometric information is described by a set of 3D positions associated with the vertices of the mesh. In one example, (x,y,z) coordinates can be used to describe the 3D positions of the vertices, which are also referred to as 3D coordinates. In some examples, the connectivity information includes a set of vertex indices that describe how to connect the vertices to create a 3D surface. In some examples, the mapping information describes how to map the mesh surface to a planar 2D region. In one example, the mapping information is described by a set of UV parametric / texture coordinates (u,v) associated with the mesh vertices along with the connectivity information. In some examples, the vertex attributes include scalar or vector attribute values associated with the mesh vertices. In some examples, the attribute maps include attributes associated with the mesh surface and stored as a 2D image / video. In one example, the mapping between a video (e.g., a 2D image / video) and the mesh surface is specified by the mapping information.
[0110] According to one aspect of the disclosure, a number of techniques, called UV mapping or mesh parameterization, are used to map the surface of a mesh of a 3D region to a 2D region. In some examples, the mesh is partitioned into patches in the 3D region. A patch is a contiguous subset of the mesh with a boundary formed by boundary edges. A boundary edge of a patch is an edge that belongs to only one polygon of the patch and is not shared by two adjacent polygons in the patch. In some examples, the vertices of the boundary edges in a patch may be referred to as boundary vertices of the patch, and the non-boundary vertices in a patch may be referred to as interior vertices of the patch.
[0111] In some examples, a mesh of an object is formed by connected triangles, and the mesh can be partitioned into patches, where each patch is a subset of the connected triangles. A boundary edge of a patch is an edge that belongs to only one triangle in the patch and is not shared by adjacent triangles in the patch. In some examples, the vertices of a boundary edge in a patch may be referred to as boundary vertices of the patch, and the non-boundary vertices in the patch may be referred to as interior vertices of the patch. A boundary loop contains a sequence of boundary vertices, and the boundary edges formed by a sequence of boundary vertices may form a loop, called a boundary loop.
[0112] According to one aspect of the present disclosure, in some examples, the patches are each parameterized into a 2D shape (also called a 2D patch, UV patch). In some examples, the 2D shapes can be packed (e.g., oriented) into a map, also called an atlas. In some examples, the map can be further processed using 2D image or video processing techniques.
[0113] In one example, the UV mapping technique generates a 2D UV atlas (also called a UV map) and one or more texture atlases (also called texture maps) that correspond to patches of the 3D mesh. The UV atlas includes assignments of 3D vertices of the 3D mesh to 2D points within a 2D region (e.g., a rectangle). The UV atlas is a mapping between the coordinates of the 3D surface and the coordinates of the 2D region. In one example, a point with 2D coordinates (u,v) in the UV atlas has a value formed by the coordinates (x,y,z) of the vertices in the 3D region. In one example, the texture atlas includes color information for the 3D mesh. For example, a point with 2D coordinates (u,v) in the texture atlas (which has 3D values (x,y,z) in the UV atlas) has a color that specifies the color attributes of the point at (x,y,z) in the 3D region. In some examples, the coordinates (x,y,z) in the 3D region are referred to as 3D coordinates or xyz coordinates, and the 2D coordinates (u,v) are referred to as uv coordinates or UV coordinates.
[0114] According to some aspects of the present disclosure, mesh compression may be performed by representing the mesh using one or more 2D maps (also referred to in some examples as 2D atlases) and then encoding the 2D maps using an image or video codec. Various techniques can be used to generate the 2D maps.
[0115] FIG. 9 shows a diagram illustrating the mapping of a 3D mesh (910) to a 2D atlas (920) in some examples. In the example of FIG. 9, the 3D mesh (910) includes four vertices 1-4 that form four patches A-D. Each patch has a set of vertices and associated attribute information. For example, patch A is formed by vertices 1, 2, and 3 that are connected to a triangle. Patch B is formed by vertices 1, 3, and 4 that are connected to a triangle. Patch C is formed by vertices 1, 2, and 4 that are connected to a triangle. Patch D is formed by vertices 2, 3, and 4 that are connected to a triangle. In some examples, vertices 1, 2, 3, and 4 can have respective attributes, and the triangle formed by vertices 1, 2, 3, and 4 can have respective attributes.
[0116] In one example, 3D patches A, B, C, and D are mapped to a 2D region, such as a 2D atlas (920), also referred to as a map (920). For example, patch A is mapped to a 2D shape (also referred to as a UV patch or 2D patch) A' in the map (920), patch B is mapped to a 2D shape (also referred to as a UV patch or 2D patch) B' in the map (920), patch C is mapped to a 2D shape (also referred to as a UV patch or 2D patch) C' in the map (920), and patch D is mapped to a 2D shape (also referred to as a UV patch or 2D patch) D' in the map (920). In some examples, the coordinates of the 3D region are referred to as (x,y,z) coordinates, and the coordinates of the 2D region, such as the map (920), are referred to as UV coordinates. Vertices in the 3D mesh can have corresponding UV coordinates in the map (920).
[0117] The map (920) may be a geometry map having geometric information, or a texture map having color, normal, textile, or other attribute information, or an occupancy map containing occupancy information.
[0118] It should be noted that although each patch is represented by a triangle in the example of Figure 9, a patch may include any suitable number of vertices that are connected to form a contiguous subset of the mesh. In some examples, the vertices in a patch are connected into triangles. It should be noted that the vertices in a patch may be connected using other suitable shapes.
[0119] In one example, the geometric shape information of the vertices can be stored in a 2D geometry map. For example, the 2D geometry map stores the (x,y,z) coordinates of the sampling points of the corresponding points in the 2D geometry map. For example, a point at a (u,v) location in the 2D geometry map has a three-component vector value that corresponds to the x, y, and z values, respectively, of the corresponding sampling point in the 3D mesh.
[0120] According to one aspect of the present disclosure, the regions in the map may not be fully occupied. For example, in FIG. 9, the regions outside the 2D shapes A', B', C', and D' are undefined. Sample values of the regions outside the 2D shapes A', B', C', and D' after decoding can be discarded. In some cases, the occupancy map is used to store some additional information for each pixel, such as storing a binary value to identify whether the pixel belongs to a patch or is undefined.
[0121] According to one aspect of the present disclosure, a dynamic mesh is a mesh in which at least one of the components (geometric information, connectivity information, mapping information, vertex attributes, and attribute maps) changes over time. A dynamic mesh can be described by a series of meshes (also called mesh frames). In some examples, the mesh frames in a dynamic mesh can be representations of an object's surface at different times, with each mesh frame being a representation of the object's surface at a particular time (also called a time instance). Because dynamic meshes can contain a large amount of information that changes over time, dynamic meshes can require a large amount of data. Mesh compression techniques enable efficient storage and transmission of media content in mesh representations.
[0122] In some examples, the dynamic mesh can have constant connectivity information, time-varying geometry, and time-varying vertex attributes. In some examples, the dynamic mesh can have time-varying connectivity information. In one example, digital content creation tools typically generate dynamic meshes that include time-varying attribute maps and time-varying connectivity information. In some examples, volumetric acquisition techniques are used to generate the dynamic meshes. Volumetric acquisition techniques can generate dynamic meshes that include time-varying connectivity information, especially under real-time constraints.
[0123] In some examples, the attribute information and geometric information of a 3D mesh are represented as 2D images, such as attribute maps and geometry maps. In general, a 3D mesh is partitioned into patches, which can be parameterized into 2D shapes, also called UV patches or 2D patches. In general, a 2D image representing the attribute information or geometric information of a 3D mesh includes 2D patches packed within the 2D image, where each 2D patch represents the attribute information or geometric information of a surface region of the 3D mesh. In some examples, the 2D patches are required not to overlap each other in the 2D image.
[0124] Some aspects of the present disclosure provide patch packing that is overlapping-free (not We provide a technique for checking to maintain the overlap-free property. The technique for checking to maintain the overlap-free property can be used in various mesh processing such as patch packing in mesh compression, mesh parameterization, atlas packing in volumetric video, and object packing in general purpose settings. The techniques for checking to maintain the overlap-free property can be categorized into bounding box checking, patch overlap checking, and enlarged patch overlap checking.
[0125] According to one aspect of the present disclosure, a bounding box check can be used to check whether two 2D patches have no overlap. The bounding box of a 2D patch is a rectangle with a minimum area that contains the entire 2D patch. If the bounding boxes of two 2D patches have no overlap, then the two 2D patches have no overlap.
[0126] 10A-10B show examples of using bounding boxes to check for overlaps in some examples. Fig. 10A shows a first 2D patch (1010) and a second 2D patch (1020) in a UV atlas (1000). To check whether the first 2D patch (1010) and the second 2D patch (1020) have overlaps, the bounding boxes of the first 2D patch (1010) and the second 2D patch (1020) are determined.
[0127] FIG. 10B shows a first bounding box (1011) for a first 2D patch (1010) and a second bounding box (1021) for a second 2D patch (1020). The first bounding box (1011) is determined based on the minimum U value of all points in the first 2D patch (1010), the maximum U value of all points in the first 2D patch (1010), the minimum V value of all points in the first 2D patch (1010), and the maximum V value of all points in the first 2D patch (1010). The second bounding box (1021) is determined based on the minimum U value of all points in the second 2D patch (1020), the maximum U value of all points in the second 2D patch (1020), the minimum V value of all points in the second 2D patch (1020), and the maximum V value of all points in the second 2D patch (1020).
[0128] In some examples, the coordinates of the corners of the two bounding boxes are used to check whether the two bounding boxes overlap.
[0129] In general, a first 2D patch is contained in a first region and a second 2D patch is contained in a second region. A first 2D patch and a second 2D patch have no overlap if the first region and the second region have no overlap.
[0130] The bounding box checking technique is computationally efficient. However, two non-overlapping 2D patches may have overlapping bounding boxes.
[0131] According to one aspect of the present disclosure, a patch overlap checking technique can be used to check for overlap of any 2D patch based on geometric information of the 2D patch itself, such as the UV coordinates of the vertices.
[0132] In some examples, some patch overlap checking techniques can perform overlap checking based on the points of two 2D patches. For example, two 2D patches do not overlap if and only if there are no points in the interior of the two 2D patches. A point is considered to be inside a 2D patch if it is on the boundary of the 2D patch or inside the 2D patch.
[0133] In some examples, all points with integer pixel coordinates inside a first 2D patch are checked to see if they are inside a second 2D patch. A first 2D patch and a second 2D patch have no overlap if no points in the first 2D patch are inside the second 2D patch. Ray casting algorithms, winding numbers, etc. You can use various polygon algorithms, such as the 2D patch number algorithm, to check if a point is inside a 2D patch. Some polygon algorithms do not check if a point is on the boundary of the 2D patch. To check if a point is on the boundary of a 2D patch, check the point to determine if it is on one of the boundary edges of the 2D patch. The boundary edges of a 2D patch are the line segments of the boundary of the 2D patch.
[0134] In some examples, some patch overlap checking techniques may perform overlap checking based on the boundaries of the 2D patches. For example, two 2D patches do not overlap if their boundaries do not intersect and one 2D patch does not lie inside the other 2D patch. Thus, in some examples, two tests are performed, a first test tests that the boundaries of the two 2D patches do not intersect and a second test tests that one 2D patch does not lie inside the other 2D patch. If both tests pass, the two 2D patches do not overlap.
[0135] In some examples, during parameterization, a 3D patch is parameterized into a 2D patch, the 3D vertices of the patch are mapped to 2D vertices according to the UV coordinates associated with the 3D vertices, and the boundary of the 2D patch includes boundary edges (edges) that connect the 2D boundary vertices of the 2D patch. Each boundary edge is a line segment with a start point and an end point, which are 2D boundary vertices, and the line segments of the boundary edge are connected in order to form the boundary. For example, the start point of a current line segment is the end point of the previous line segment in the order, and the end point of the current line segment is the start point of the next line segment in the order.
[0136] In one example, to check whether the boundaries of two 2D patches intersect, first boundary edges of a first 2D patch are checked to determine whether any of the first boundary edges intersect with an edge of a second boundary edge of a second 2D patch. For example, for each first boundary edge in the first boundary edge, the first boundary edge is checked with each second boundary edge of the second boundary edge to determine whether the first boundary edge and the second boundary edge intersect.
[0137] An orientation-based technique can be used to determine whether a first boundary edge and a second boundary edge intersect. The first boundary edge is a first line segment having a first starting point and a first end point, and the second boundary edge is a second line segment having a second starting point and a second end point. The orientation-based technique includes two check steps. In the first check step, a first orientation of a first triangle formed by the first starting point, the second starting point, and the second end point is determined, and a second orientation of a second triangle formed by the first end point, the second starting point, and the second end point is determined. The first orientation indicates whether a rotation from the first starting point to the second starting point to the second end point is clockwise or counterclockwise. The second orientation indicates whether a rotation from the first end point to the second starting point to the second end point is clockwise or counterclockwise. The boundary of two 2D patches intersects if the first orientation and the second orientation are different.
[0138] In some examples, a third orientation of a third triangle formed by the second start point, the first start point, and the first end point is determined, and a fourth orientation of a fourth triangle formed by the second end point, the first end point, and the first end point is determined. The third orientation indicates whether a rotation from the second start point to the first start point to the first end point is clockwise or counterclockwise. The fourth orientation indicates whether a rotation from the second end point to the first start point to the first end point is clockwise or counterclockwise. If the third orientation and the fourth orientation are different, then the boundaries of the two 2D patches intersect.
[0139] In some examples, a second checking step is performed if the first orientation and the second orientation are the same and the third orientation and the fourth orientation are the same.
[0140] In a second checking step, the first starting point and the first ending point are checked to determine whether the first starting point and the first ending point are on the second line segment. If neither the first starting point nor the first ending point are on the second line segment, the second starting point and the second ending point are checked to determine whether the second starting point and the second ending point are on the first line segment. If neither the first starting point nor the first ending point are on the second line segment and neither the second starting point nor the second ending point are on the first line segment, the first line segment (e.g., the first boundary edge) and the second line segment (e.g., the second boundary edge) do not intersect.
[0141] One of two 2D patches is completely inside the other 2D patch if none of the first boundary edges of the first 2D patch intersects with the second boundary edges of the second 2D patch, or the two 2D patches have no overlap. To check if one 2D patch is completely inside the other 2D patch, a first point (any point or vertex) of the first 2D patch is checked to determine if the first point is inside the second 2D patch, and a second point (any point or vertex) of the second 2D patch is checked to determine if the second point is inside the first 2D patch.
[0142] A first 2D patch and a second 2D patch have no overlap if the boundary edges of the first and second 2D patches are non-intersecting (do not intersect), the first point is not inside the second 2D patch, and the second point is not within the first 2D patch.
[0143] According to another aspect of the present disclosure, the expanded patch overlap checking technique can be used in application scenarios where a 2D patch is expanded or expanded to check whether the expanded 2D patch has no overlaps.
[0144] The boundary vertices of a 2D patch are defined as the start (and end) points of a boundary edge, and boundary pixels are pixels on the boundary edge, although boundary pixels are not necessarily boundary vertices.
[0145] In some examples, 2D patch expansion is performed for all 2D patches in the 2D image. To expand a 2D patch by size N (N is a positive integer), the pixels in a [2N+1,2N+1] neighborhood of each boundary pixel are included in the 2D patch, and the [2N+1,2N+1] neighborhood is centered on the boundary pixel. For example, if N=1, 2N+1=3, each boundary pixel may have a [3,3] neighborhood centered on the boundary pixel. The pixels in the [3,3] neighborhood of each boundary pixel are included in the expanded 2D patch.
[0146] FIG. 11A shows a diagram of a 2D patch (1110) in a 2D map (1100), and FIG. 11B shows a diagram of an expanded 2D patch (1120) in the 2D map (1100) in one example. In the example of FIG. 11A, the 2D patch (1110) has a triangular shape. In FIG. 11B, the boundary of the expanded 2D patch (1120) is shown with a solid line, and the boundary of the original 2D patch (1110) inside the expanded 2D patch (1120) is shown with a dotted line.
[0147] In one example, new boundary vertices of the augmented 2D patch are determined to check whether the two augmented 2D patches have no overlap. Then, new boundary edges of the augmented 2D patch can be determined and the patch overlap checking technique can be used on the augmented 2D patch.
[0148] In one example, a bounding box checking technique can be used. With the enlargement, a first enlarged bounding box of a first enlarged 2D patch is enlarged by N to the left, right, top, and bottom from a first bounding box of the first 2D patch, respectively. A second enlarged bounding box of a second enlarged 2D patch is enlarged by N to the left, right, top, and bottom from a second bounding box of the second 2D patch, respectively. A bounding box checking technique can then be applied to the first and second enlarged bounding boxes. There is no overlap between the first and second enlarged 2D patches if there is no overlap between the first and second enlarged bounding boxes.
[0149] In another example, checking that two enlarged 2D patches do not overlap can be done based on the points of the two enlarged 2D patches, e.g., two enlarged 2D patches do not overlap if and only if there are no points inside both enlarged 2D patches.
[0150] In some examples, all points with integer pixel coordinates inside the first augmented 2D patch are checked to determine whether they are inside the second augmented 2D patch. If no points inside the first augmented 2D patch are inside the second augmented 2D patch, then the first and second augmented 2D patches have no overlap.
[0151] Note that a boundary pixel is a pixel on the boundary of a 2D patch, not necessarily a boundary vertex. A boundary vertex is the start (or end) point of a boundary edge of a 2D patch.
[0152] One aspect of the present disclosure provides an enlarged patch overlap checking technique based on line segment processing. In some examples, an additional line segment may be added to the original set of boundary edges of the 2D patches to form a new set of boundary edges of the 2D patches. For example, an additional line segment is added to a first original set of boundary edges of a first 2D patch to form a first new set of boundary edges of the first 2D patch, and an additional line segment is added to a second original set of boundary edges of a second 2D patch to form a second new set of boundary edges of the second 2D patch. Checking whether the two enlarged 2D patches of the first 2D patch and the second 2D patch have no overlap can be done by checking whether a line segment from the first set of new boundary edges intersects with a line segment from the second set of new boundary edges.
[0153] In some examples, the additional line segments are the double neighborhood boundary of the 2D boundary vertices of the 2D patch, as shown in FIG.
[0154] FIG. 12 shows a diagram illustrating new line segments for boundary vertices of a 2D patch in one example. FIG. 12 shows a boundary vertex (1201) of a 2D patch (not shown). In one example, patch enlargement of size N (N is a positive integer) is performed to generate an enlarged 2D patch (not shown). FIG. 12 also shows a first neighborhood (1210) of size [2N+1, 2N+1] centered on the boundary vertex (1201) and a second neighborhood (1220) of size [4N+1, 4N+1] centered on the boundary vertex (1201). The first neighborhood (1210) of the boundary vertex (1201) includes pixels included in the enlarged 2D patch. The second neighborhood (1220) is referred to as the 2x neighborhood (1220) of the boundary vertex (1201). The 2x neighborhood (1220) has a square shape and includes four vertices (1221) to (1224).
[0155] In one example, bounding vertex (1201) has UV coordinates (u, v), then respectively vertex (1221) has UV coordinates (u-2N, v+2N), vertex 1224 has UV coordinates (u-2N, v-2N), vertex (1223) has UV coordinates (u+2N, v-2N), and vertex (1222) has UV coordinates (u+2N, v+2N).
[0156] In the example of FIG. 12, the four line segments (1231)-(1234) on the boundary of the 2x neighborhood (1220) are additional line segments that are added to the new set of edges according to the boundary vertex (1201). Line segment (1231) connects vertex (1221) to vertex (1222). Line segment (1232) connects vertex (1222) to vertex (1223). Line segment (1233) connects vertex (1223) to vertex (1224). Line segment (1234) connects vertex (1224) to vertex (1221).
[0157] In some examples, in response to the patch expansion, a first new set of boundary edges of the first 2D patch is updated from a first original set of boundary edges of the first 2D patch with additional line segments based on a 2x expanded neighborhood of boundary vertices of the first 2D patch. A second new set of boundary edges of the second 2D patch is updated from a second original set of boundary edges of the second 2D patch with additional line segments based on a 2x expanded neighborhood of boundary vertices of the second 2D patch. Then, in some examples, two tests are performed. A first test may test that the first new set of boundary edges (including the original boundary edges and the additional line segments based on a 2x expanded neighborhood of boundary vertices of the first 2D patch) and the second new set of boundary edges (including the original boundary edges and the additional line segments based on a 2x expanded neighborhood of boundary vertices of the second 2D patch) do not intersect. A second test may test that one expanded 2D patch does not lie inside the other expanded 2D patch. If both tests pass, the two expanded 2D patches do not overlap.
[0158] 13A-13B show diagrams of two non-overlapping 2D patches, which in some instances overlap after patch expansion. Figure 13A shows a first 2D patch (1310) and a second 2D patch (1320) in a 2D map (1300). The first 2D patch (1310) and the second 2D patch (1320) are two non-overlapping 2D patches.
[0159] FIG. 13B illustrates a first 2D patch (1310) and a second 2D patch (1320) in a 2D map (1300), as well as a 2x enlarged neighborhood of the boundary vertices of the first 2D patch (1310) and a 2x enlarged neighborhood of the boundary vertices of the second 2D patch (1320). For example, the 2x enlarged neighborhood of the boundary vertices of the first 2D patch (1310) includes three squares (1311)-(1313), and the 2x enlarged neighborhood of the boundary vertices of the second 2D patch (1320) includes three squares (1321)-(1323). The overlap of the enlarged 2D patches may be determined by the boundary of the 2x enlarged neighborhood (1313) intersecting with the original boundary edges of the second 2D patch (1320), as shown by 1350.
[0160] FIG. 14 shows a flow chart outlining a process (1400) according to one embodiment of the present disclosure. The process (1400) may be used during mesh processing. In various embodiments, the process (1400) is performed by a processing circuit. In some embodiments, the process (1400) is implemented with software instructions, such that the processing circuit performs the process (1400) when the processing circuit executes the software instructions. Processing begins at (S1401) and proceeds to (S1410).
[0161] At (S1410), a first UV coordinate associated with a first vertex of a first patch and a second UV coordinate associated with a second vertex of a second patch are received. The first patch and the second patch are partitions from a 3D mesh, the 3D mesh representing a surface of an object with polygons and partitioned into patches. The first patch includes a first vertex, the first vertex being mapped to a first 2D vertex of a first 2D patch in the 2D map according to the first UV coordinate. The second patch includes a second vertex, the second vertex being mapped to a second 2D vertex of a second 2D patch in the 2D map according to the second UV coordinate.
[0162] At (S1420), a first region surrounding the first 2D patch in the 2D map is determined.
[0163] At (S1430), a second region surrounding the second 2D patch in the 2D map is determined.
[0164] At (S1440), in response to there being no overlap between the first region and the second region, it is determined that there is no overlap between the first 2D patch and the second 2D patch.
[0165] In some embodiments, the first region is a first bounding box of the first 2D patch and the second region is a second bounding box of the second 2D patch. In some examples, the first bounding box is determined according to a minimum U coordinate value, a maximum U coordinate value, a minimum V coordinate value, and a maximum V coordinate value in the first UV coordinate, and the second bounding box is determined according to a minimum U coordinate value, a maximum U coordinate value, a minimum V coordinate value, and a maximum V coordinate value in the second UV coordinate.
[0166] In some embodiments, the first region is a first expanded bounding box of a first expanded 2D patch for the first 2D patch, and the second region is a second expanded bounding box of a second expanded 2D patch for the second 2D patch. In some examples, the first bounding box is determined according to a minimum U coordinate value, a maximum U coordinate value, a minimum V coordinate value, and a maximum V coordinate value in the first UV coordinates. The second bounding box is determined according to a minimum U coordinate value, a maximum U coordinate value, a minimum V coordinate value, and a maximum V coordinate value in the second UV coordinates. The first expanded bounding box is determined by expanding the boundary of the first bounding box, and the second expanded bounding box is determined by expanding the boundary of the second bounding box.
[0167] Then, the process proceeds to (S1499) and ends.
[0168] The process (1400) may be adapted as appropriate. Steps of the process (1400) may be modified and / or omitted. Additional steps may be added. Any suitable order of implementation may be used.
[0169] FIG. 15 shows a flow chart outlining a process (1500) according to one embodiment of the present disclosure. The process (1500) may be used during mesh processing. In various embodiments, the process (1500) is performed by a processing circuit. In some embodiments, the process (1500) is implemented with software instructions, such that the processing circuit performs the process (1500) when the processing circuit executes the software instructions. The process begins at (S1501) and proceeds to (S1510).
[0170] At (S1510), a first UV coordinate associated with a first vertex of a first patch and a second UV coordinate associated with a second vertex of a second patch are received. The first patch and the second patch are partitions from a 3D mesh, the 3D mesh representing a surface of an object with polygons and partitioned into patches. The first patch includes a first vertex, the first vertex being mapped to a first 2D vertex of a first 2D patch in the 2D map according to the first UV coordinate. The second patch includes a second vertex, the second vertex being mapped to a second 2D vertex of a second 2D patch in the 2D map according to the second UV coordinate.
[0171] In (S1520), in response to the absence of a point in both the first 2D patch and the second 2D patch, it is determined that the first 2D patch and the second 2D patch do not overlap.
[0172] In some embodiments, it is checked whether each first point at an integer pixel position in the first 2D patch is present in the second 2D patch. Furthermore, it is checked whether each first point in the first 2D patch is on the boundary of the second 2D patch. In one example, if none of the first points at integer pixel positions in the first 2D patch are present in the second 2D patch and none of the first points in the first 2D patch are on the boundary of the second 2D patch, there is no overlap between the first 2D patch and the second 2D patch.
[0173] In some embodiments, it is checked whether each first boundary vertex in the first 2D vertex is present in the second 2D patch, and it is checked whether each second boundary vertex in the second 2D vertex is present in the first 2D patch. In one example, if none of the first boundary vertices in the first 2D vertex are present in the second 2D patch, and none of the second boundary vertices in the second 2D vertex are present in the first 2D patch, there is no overlap between the first 2D patch and the second 2D patch. In some examples, it is checked whether each first boundary vertex in the first 2D vertex is on the boundary of the second 2D patch, and it is checked whether each second boundary vertex in the second 2D vertex is on the boundary of the first 2D patch.
[0174] In some embodiments, it is determined that the first boundary of the first 2D patch and the second boundary of the second 2D patch are free of intersection (e.g., do not intersect). Furthermore, neither the first 2D patch nor the second 2D patch is inside another of the first 2D patch or the second 2D patch. In such a case, the first 2D patch and the second 2D patch have no overlap.
[0175] To determine that the first boundary and the second boundary do not intersect, in some examples, for a first line segment of the first boundary and a second line segment of the second boundary, a first orientation of a first triangle formed by a first start point of the first line segment, a second start point of the second line segment, and a second end of the second line segment is determined, and a second orientation of a second triangle formed by a first end point of the first line segment, a second start point of the second line segment, and a second end of the second line segment is determined. The first boundary and the second boundary intersect according to the first orientation being different from the second orientation.
[0176] In some examples, the first line segment and the second line segment intersect in response to at least one of the first starting point and the first ending point being on the second line segment. Similarly, the first line segment and the second line segment intersect in response to at least one of the second starting point and the second ending point being on the first line segment.
[0177] In some examples, the first line segment and the second line segment can switch roles. For example, a third orientation of a third triangle formed by a second start point of the second line segment, a first start point of the first line segment, and a first end of the first line segment is determined, and a fourth orientation of a fourth triangle formed by a second end point of the second line segment, a first start point of the first line segment, and a first end of the first line segment is determined. The first boundary and the second boundary intersect according to the third orientation being different from the fourth orientation.
[0178] In some examples, to determine that neither the first 2D patch nor the second 2D patch is inside the other of the first 2D patch nor the second 2D patch, a first point of the first 2D patch is determined to be not inside the second 2D patch and a second point of the second 2D patch is determined to be not inside the first 2D patch.
[0179] Note that in some examples, the first 2D patch is a first enlarged 2D patch of a third 2D patch, and the second 2D patch is a second enlarged 2D patch of a fourth 2D patch.
[0180] Then, the process proceeds to (S1599) and ends.
[0181] The process (1500) may be adapted as appropriate. Steps of the process (1500) may be modified and / or omitted. Additional steps may be added. Any suitable order of implementation may be used.
[0182] FIG. 16 shows a flow chart outlining a process (1600) according to one embodiment of the present disclosure. The process (1600) may be used during mesh processing. In various embodiments, the process (1600) is performed by a processing circuit. In some embodiments, the process (1600) is implemented with software instructions, such that the processing circuit performs the process (1600) when the processing circuit executes the software instructions. The process begins at (S1601) and proceeds to (S1610).
[0183] At (S1610), a first UV coordinate associated with a first vertex of a first patch and a second UV coordinate associated with a second vertex of a second patch are received. The first patch and the second patch are partitions from a 3D mesh, the 3D mesh representing a surface of an object with polygons and partitioned into patches. The first patch includes a first vertex, the first vertex being mapped to a first 2D vertex of a first 2D patch in the 2D map according to the first UV coordinate. The second patch includes a second vertex, the second vertex being mapped to a second 2D vertex of a second 2D patch in the 2D map according to the second UV coordinate.
[0184] In (S1620), a first enlarged 2D patch is determined by applying a first enlargement of a first size (e.g., a size of N, where N is a positive integer) to a first boundary pixel of a first boundary of the first 2D patch. The first enlargement of the first boundary pixel causes pixels in a neighborhood square centered on the first boundary pixel to be included in the first enlarged 2D patch. A side of the neighborhood square has a size of 2N+1.
[0185] At (S1630), a second enlarged 2D patch is determined by applying a second enlargement of the first size to second boundary pixels of a second boundary of the second 2D patch.
[0186] In (S1640), it is checked whether there is any overlap between the first enlarged 2D patch and the second enlarged 2D patch.
[0187] In some embodiments, to check that the first and second enlarged 2D patches do not overlap, a first double-enlarged square is determined by applying a third enlargement of a second size to a first bounding vertex in the first 2D vertex, and the second size is twice the first size. The first double-enlarged square on the first bounding vertex is centered on the first bounding vertex, and the side size of the first double-enlarged square is 4N+1. Then, a second double-enlarged square is determined by applying a fourth enlargement of a second size to a second bounding vertex in the second 2D vertex. A first set of line segments is determined to include a first boundary edge (side) in the first boundary and a first neighboring boundary edge (side) of the first double-enlarged square. A second set of line segments is determined to include a second boundary edge (side) of the second boundary and a second neighboring boundary edge (side) of the second double-enlarged square. Next, the first set of line segments and the second set of line segments are checked for intersections between the first set of line segments and the second set of line segments. In one example, when the first set of line segments and the second set of line segments do not intersect, there is no overlap between the first and second augmented 2D patches.
[0188] In some examples, the first expanded 2D patch is determined to not be within the second expanded 2D patch, and the second expanded 2D patch is determined to not be within the first expanded 2D patch.
[0189] To check that the first and second augmented 2D patches do not overlap, in one example, a first bounding box of the first augmented 2D patch and a second bounding box of the second augmented 2D patch are checked to determine whether the first and second bounding boxes do not overlap. If the first and second bounding boxes do not overlap, the first and second augmented 2D patches do not overlap. In another example, the first and second augmented 2D patches are determined to not overlap in response to the absence of a point in both the first and second augmented 2D patch.
[0190] Then, the process proceeds to (S1699) and ends.
[0191] The process (1600) may be adapted as appropriate. Steps of the process (1600) may be modified and / or omitted. Additional steps may be added. Any suitable order of implementation may be used.
[0192] The techniques disclosed in this disclosure can be used individually or in combination in any order. Furthermore, each of the techniques (e.g., methods, embodiments), encoders, and decoders can be implemented by processing circuitry (e.g., one or more processors or one or more integrated circuits). In some examples, the one or more processors execute a program stored on a non-transitory computer-readable medium.
[0193] The techniques described above can be implemented as computer software using computer readable instructions and can be physically stored on one or more computer readable media. For example, Figure 17 illustrates a computer system (1700) suitable for implementing certain embodiments of the disclosed subject matter.
[0194] Computer software may be coded using any suitable machine code or computer language and may undergo assembly, compilation, linking, or similar mechanisms to produce code containing instructions that can be executed directly by one or more computer central processing units (CPUs), graphics processing units (GPUs), etc., or through interpretation of microcode.
[0195] The instructions may be executed on various types of computers or components thereof, including, for example, personal computers, tablet computers, servers, smart phones, gaming devices, Internet of Things devices, etc.
[0196] The components of the computer system (1700) illustrated in Figure 17 are exemplary in nature and are not intended to suggest any limitation as to the scope of use or functionality of the computer software implementing the embodiments of the present disclosure, nor should the arrangement of components be interpreted as having any dependency or requirement relating to any one or combination of components illustrated in the exemplary embodiment of the computer system (1700).
[0197] The computer system (1700) may include certain human interface input devices. Such human interface input devices may be responsive to input by one or more human users via, for example, tactile input (keystrokes, swipes, data glove movements, etc.), audio input (voice, clapping, etc.), visual input (gestures, etc.), olfactory input (not shown), etc. The human interface devices may also be used to capture certain media that are not necessarily directly related to conscious human input, such as audio (voice, music, environmental sounds, etc.), images (scanned images, photographic images obtained from a still camera, etc.), video (2D video, 3D video including stereoscopic video, etc.), etc.
[0198] The human interface input devices may include one or more of a keyboard (1701), a mouse (1702), a trackpad (1703), a touch screen (1710), a data glove (not shown), a joystick (1705), a microphone (1706), a scanner (1707), and a camera (1708), only one of each is shown.
[0199] The computer system (1700) may also include certain human interface output devices. Such human interface output devices may stimulate one or more of the senses of a human user, for example, through haptic output, sound, light, and smell / taste. Such human interface output devices may include haptic output devices (e.g., haptic feedback via a touch screen (1710), data gloves (not shown), or joystick (1705), although there may be haptic feedback devices that do not function as input devices), audio output devices (such as speakers (1709), headphones (not shown)), visual output devices (such as screens (1710), such as CRT screens, LCD screens, plasma screens, OLED screens, etc., with or without touch screen input capabilities, with or without haptic feedback capabilities, some of which may provide two-dimensional visual output or three or more dimensional output through means such as stereographic output; virtual reality glasses (not shown), holographic displays, and smoke tanks (not shown)), and printers (not shown).
[0200] The computer system (1700) may also include human accessible storage and associated media such as optical media or similar media (1721) such as CD / DVD ROM / RW (2020) including CDs / DVDs, thumb drives (1722), removable hard drives or solid state drives (1723), legacy magnetic media such as tapes and floppy disks (not shown), specialized ROM / ASIC / PLD based devices such as security dongles (not shown), etc.
[0201] Those skilled in the art should also understand that the term "computer-readable medium" as used in connection with the subject matter disclosed herein does not encompass transmission media, carrier waves, or other transitory signals.
[0202] The computer system (1700) may also include an interface (1754) to one or more communication networks (1755). The networks may be, for example, wireless, wired, optical, etc. Additionally, the networks may be local, wide area, metropolitan, vehicular and industrial, real-time, delay tolerant, etc. Examples of networks include local area networks such as Ethernet, cellular networks including WLAN, GSM, 3G, 4G, 5G, LTE, etc., TV wired or wireless wide area digital networks including cable TV, satellite TV, and terrestrial broadcast TV, vehicular and industrial including CANBus, etc. Certain networks generally require an external network interface adapter that connects to a particular general-purpose data port or peripheral bus (1749) (e.g., a USB port of the computer system (1700)). Others are generally integrated into the core of the computer system (1700) by connecting to a system bus as described below (e.g., integrating an Ethernet interface into a PC computer system, or integrating a cellular network interface into a smartphone computer system). Using any of these networks, the computer system (1700) may communicate with other entities. Such communications may be one-way, receive-only (such as a television broadcast), one-way transmit-only (such as a CANBus to a particular CANBus device), or bidirectional, for example, to other computer systems using local or wide area digital networks. Specific protocols and protocol stacks may be used with each of these networks and network interfaces, as described above.
[0203] The aforementioned human interface devices, human accessible storage, and network interfaces may be attached to a core (1740) of the computer system (1700).
[0204] The cores (1740) may include one or more central processing units (CPUs) (1741), graphics processing units (GPUs) (1742), specialized programmable processing units in the form of field programmable gate areas (FPGAs) (1743), hardware accelerators for specific tasks (1744), and graphics adapters (1750). These devices may be connected via a system bus (1748), along with read only memory (ROM) (1745), random access memory (1746), internal mass storage devices (1747) such as internal hard drives and SSDs that are not accessible to the user. In some computer systems, the system bus (1748) may be accessible in the form of one or more physical plugs to allow expansion with additional CPUs, GPUs, and the like. Peripheral devices may be connected directly to the system bus (1748) of the cores or may be connected via a peripheral bus (1749). In one example, a screen (1710) may be connected to the graphics adapter (1750). Peripheral bus architectures include PCI, USB, and the like.
[0205] The CPU (1741), GPU (1742), FPGA (1743), and accelerator (1744) may combine to execute certain instructions that may constitute the aforementioned computer code. The computer code may be stored in a ROM (1745) or a RAM (1746). Transient data may also be stored in the RAM (1746), while persistent data may be stored in, for example, an internal mass storage device (1747). Rapid storage and retrieval from any memory device may be enabled through the use of cache memories closely associated with one or more of the CPU (1741), GPU (1742), mass storage device (1747), ROM (1745), and RAM (1746), etc.
[0206] The computer-readable medium can have computer code thereon for performing various computer implemented operations. The medium and computer code may be those specially designed and constructed for the purposes of the present disclosure, or they may be of the kind well known and available to those skilled in the computer software arts.
[0207] By way of example and not limitation, a computer system having the architecture (1700), and in particular the cores (1740), may provide functionality as a result of the processors (CPUs, GPUs, FPGAs, accelerators, etc.) executing software embodied in one or more tangible computer-readable media. Such computer-readable media may be media associated with a user-accessible mass storage device as introduced above, or may be specific storage of the cores (1740) that is non-transitory in nature, such as the core internal mass storage device (1747) or ROM (1745). Software implementing various embodiments of the present disclosure may be stored in such devices and executed by the cores (1740). The computer-readable media may include one or more memory devices or chips, depending on the particular needs. The software may cause the cores (1740), and in particular the processors therein (including the CPUs, GPUs, FPGAs, etc.) to perform the particular processes or particular parts of the particular processes described herein, including the definition of data structures stored in RAM (1746) and modifying such data structures according to the processes defined by the software. Additionally, or alternatively, a computer system may provide functionality as a result of logic hardwired or otherwise incorporated into circuitry (e.g., accelerator (1744)), which may operate in place of or together with software to perform particular processes or particular portions of particular processes described herein. References to software may include logic, where appropriate, and vice versa. References to computer-readable media may encompass circuitry (such as an integrated circuit (IC)) that stores software for execution, circuitry embodying logic for execution, or both, where appropriate. The present disclosure encompasses any suitable combination of hardware and software.
[0208] While this disclosure has described several exemplary embodiments, there are alterations, permutations, and various substitute equivalents that fall within the scope of this disclosure. Thus, it will be appreciated that those skilled in the art can conceive of many systems and methods that, while not explicitly shown or described herein, embody the principles of the present disclosure and are thus within the spirit and scope of the present disclosure.
Claims
1. A computer-implemented method for mesh processing, the method comprising: receiving a first UV coordinate associated with a first vertex of a first patch and a second UV coordinate associated with a second vertex of a second patch, the first patch and the second patch being partitions from a three-dimensional (3D) mesh, the 3D mesh representing a surface of an object with polygons and partitioned into patches, the first patch including the first vertex that is mapped to a first 2D vertex of a first 2D patch in a 2D map according to the first UV coordinate, and the second patch including the second vertex that is mapped to a second 2D vertex of a second 2D patch in the 2D map according to the second UV coordinate; determining a first enlarged 2D patch by applying a first enlargement of a first size to first boundary pixels of a first boundary of the first 2D patch; determining a second enlarged 2D patch by applying a second enlargement of a first size to second boundary pixels of a second boundary of the second 2D patch; checking whether there is any overlap between the first and second augmented 2D patches; The step of checking whether the first 2D patch and the second 2D patch have no overlap includes: determining a first double-enlarged square by applying a third enlargement of a second size to a first bounding vertex within the first 2D vertex, the third enlargement being twice the first size; determining a second double-enlarged square by applying a fourth enlargement of the second size to a second bounding vertex within the second 2D vertex; determining a first set of line segments including a first boundary edge of the first boundary and a first neighboring boundary edge of the first doubled scaled square; determining a second set of line segments including a second boundary edge of the second boundary and a second neighboring boundary edge of the second doubled enlarged square; checking whether there are any intersections between the first set of line segments and the second set of line segments. method.
2. determining whether the first augmented 2D patch is not present within the second augmented 2D patch; The method of claim 1 , further comprising: determining whether the second augmented 2D patch is not within the first augmented 2D patch.
3. A non-transitory computer readable medium storing instructions that, when executed by a computer, cause the computer to perform a method according to claim 1 or 2. Non-transitory computer-readable medium.
4. An apparatus having a processor configured to perform the method of claim 1 or 2.
Citation Information
Patent Citations
Video based point cloud compression-patch alignment and size determination in bounding box
US20200314435A1
Methods for timed metadata priority rank signaling for point clouds
US20210019936A1
Mesh compression via point cloud representation
US20210174551A1
Apparatus and method of generating a representation of a virtual environment
WO2020089592A1
An apparatus, a method and a computer program for volumetric video
WO2021136876A1