Mesh decoding device, mesh decoding method, and program

The mesh decoding device corrects submesh boundaries using vertex coordinates, addressing the issue of improper boundary alignment in non-Mid-edge subdivision methods, enhancing decoding accuracy and reducing code size.

JP2026077502APending Publication Date: 2026-05-13KDDI CORP
View PDF 0 Cites 0 Cited by

Patent Information

Authority / Receiving Office
JP · JP
Patent Type
Applications
Current Assignee / Owner
KDDI CORP
Filing Date
2024-10-25
Publication Date
2026-05-13

AI Technical Summary

Technical Problem

Conventional mesh decoding technologies fail to properly correct submesh boundaries when a subdivision method other than the Mid-edge division method is used, lacking necessary constraints.

Method used

A mesh decoding device and method that corrects submesh boundaries using vertex coordinates of adjacent submeshes, even when the number of subdivisions differs for each submesh or edge, employing a boundary correction unit to ensure accurate alignment.

Benefits of technology

Enables proper correction of submesh boundaries regardless of the subdivision method, reducing code size and improving mesh decoding accuracy.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure 2026077502000001_ABST
    Figure 2026077502000001_ABST
Patent Text Reader

Abstract

Even when using a subdivision method other than the mid-edge subdivision method, ensure that the submesh boundaries are appropriately corrected. [Solution] The mesh decoding device 200 according to the present invention includes a boundary correction unit 208 configured to correct the submesh boundary using the vertex coordinates of adjacent submeshes, even when the number of subdivisions differs for each submesh.
Need to check novelty before this filing date? Find Prior Art

Description

Technical Field

[0001] The present invention relates to a mesh decoding device, a mesh decoding method, and a program.

Background Art

[0002] In Non-Patent Document 1, a mesh is divided into a basic mesh representing rough information and a displacement amount representing detailed information for decoding, and the displacement amount is decoded by a video codec.

Prior Art Documents

Non-Patent Documents

[0003]

Non-Patent Document 1

Non-Patent Document 2

Summary of the Invention

Problems to be Solved by the Invention

[0004] However, conventional technology has the problem that, despite only being able to properly correct submesh boundaries using the Mid-edge division method, there are no constraints on the subdivision method, and therefore, when a subdivision method other than the Mid-edge division method is set, the submesh boundaries cannot be properly corrected. Therefore, the present invention has been made in view of the above-mentioned problems, and aims to provide a mesh decoding device, mesh decoding method, and program that can properly correct submesh boundaries even when a subdivision method other than the Mid-edge division method is set. [Means for solving the problem]

[0005] The first feature of the present invention is a mesh decoding device that includes a boundary correction unit configured to correct the submesh boundaries using the vertex coordinates of adjacent submeshes, even when the number of subdivisions differs for each submesh.

[0006] The second feature of the present invention is a mesh decoding device that includes a boundary correction unit configured to correct the submesh boundary using the vertex coordinates of adjacent submeshels, even when the number of subdivisions differs for each edge.

[0007] The third feature of the present invention is a mesh decoding method that includes a step of correcting the submesh boundary using the vertex coordinates of adjacent submeshes, even when the number of subdivisions differs for each submesh.

[0008] A fourth feature of the present invention is a program that causes a computer to function as a mesh decoding device, wherein the mesh decoding device includes a boundary correction unit configured to correct the submesh boundaries using the vertex coordinates of adjacent submeshes, even when the number of subdivisions differs for each submesh. [Effects of the Invention]

[0009] According to the present invention, it is possible to provide a mesh decoding device, a mesh decoding method, and a program that can appropriately correct submesh boundaries even when a subdivision method other than the mid-edge division method is set. [Brief explanation of the drawing]

[0010] [Figure 1] Figure 1 shows an example of the configuration of a mesh processing system 1 according to one embodiment. [Figure 2] Figure 2 shows an example of a functional block of a mesh decoding device 200 according to one embodiment. [Figure 3] Figure 3 shows an example of the syntax structure for displ_sequence_parameter_set_rbsp. [Figure 4] Figure 4 shows an example of the syntax structure for displ_frame_parameter_set_rbsp. [Figure 5] Figure 5 shows an example of the syntax structure of displ_header. [Figure 6] Figure 6 shows an example of the syntax structure of displ_quantization_parameters. [Figure 7] Figure 7 shows an example of the syntax structure of Zippering. [Figure 8] Figure 8 shows an example of a basic mesh. [Figure 9] Figure 9 is a diagram illustrating an example of a decoding method for the subdivided mesh in the subdivided section 203. [Figure 10] Figure 10 shows an example of the functional blocks of the boundary correction unit 208. [Figure 11] Figure 11 is a flowchart illustrating an example of a boundary correction method when the number of subdivisions differs for each submesh. [Figure 12] Figure 12 is a schematic representation of the correction in step S208B-13 of Figure 11.

Mode for Carrying Out the Invention

[0011] Hereinafter, embodiments of the present invention will be described with reference to the drawings. Note that the components in the following embodiments can be replaced with existing components, etc., as appropriate, and various variations including combinations with other existing components are possible. Therefore, the description of the following embodiments does not limit the content of the invention described in the claims.

[0012] <First Embodiment> Hereinafter, the mesh processing system 1 according to this embodiment will be described with reference to FIGS. 1 to 12.

[0013] FIG. 1 is a diagram showing an example of the configuration of the mesh processing system 1 according to this embodiment. As shown in FIG. 1, the mesh processing system 1 includes a mesh encoding device 100 and a mesh decoding device 200.

[0014] FIG. 2 is a diagram showing an example of the functional blocks of the mesh decoding device 200 according to this embodiment.

[0015] As shown in FIG. 2, the mesh decoding device 200 includes a multiplex separation unit 201, a basic mesh decoding unit 202, a sub-division unit 203, a mesh decoding unit 204, a displacement amount decoding unit 205, a video decoding unit 206, an atlas data decoding unit 207, a boundary correction unit 208, and an SEI message decoding unit 209.

[0016] The multiplex separation unit 201 is configured to separate the multiplexed bit stream into an SEI bit stream, an atlas bit stream, a basic mesh bit stream, a displacement amount bit stream, and a texture bit stream.

[0017] The basic mesh decoding unit 202 is configured to decode the basic mesh bit stream and generate and output a basic mesh.

[0018] The base mesh is a simplified mesh obtained by reducing the number of faces compared to the mesh before encoding, and is used to represent the basic shape of the mesh.

[0019] Furthermore, the basic mesh consists of one or more submeshes. A submesh is defined as a region of the basic mesh.

[0020] The subdivision unit 203 is configured to generate and output a subdivided mesh from the basic mesh decoded by the basic mesh decoding unit 202 using a subdivision method indicated by the atlas control information.

[0021] Here, the basic mesh, the added subdivided vertices, and their connection information are collectively referred to as the "subdivided mesh."

[0022] The mesh decoding unit 204 is configured to generate and output a decoded mesh using the atlas control information decoded by the atlas data decoding unit 207, the subdivided mesh generated by the subdivided mesh unit 203, and the displacement amount decoded by the displacement amount decoding unit 205.

[0023] The displacement amount decoding unit 205 is configured to decode the displacement amount bitstream, generate the displacement amount, and output it.

[0024] The video decoding unit 206 is configured to generate and output a decoded texture using a video codec.

[0025] The Atlas data decoding unit 207 is configured to decode the Atlas bitstream and output Atlas control information.

[0026] The boundary correction unit 208 is configured to decode and output a boundary correction decoded mesh using the atlas control information decoded by the atlas data decoding unit 207 and the decoded mesh decoded by the mesh decoding unit 204.

[0027] The SEI message decoding unit 209 is configured to decode the SEI bitstream, decode the SEI control information, and output it.

[0028] (Displacement decoding unit 205) The displacement amount decoding unit 205 is configured to decode the displacement amount bitstream and output the displacement amount.

[0029] The displacement amount may be defined to be decoded independently for each submesh.

[0030] The control information decoded by the displacement decoding unit 205 will be explained with reference to Figures 3 to 6.

[0031] Firstly, the displacement bitstream includes a sequence displacement parameter set, displ_sequence_parameter_set_rbsp, which is a set of control signals for the displacement amount per sequence.

[0032] Secondly, the displacement bitstream includes the frame displacement parameter set displ_frame_parameter_set_rbsp, which is a set of control signals for the displacement amount per frame.

[0033] Thirdly, the displacement bitstream includes a header displacement parameter set, displ_header, which is a set of control signals for the displacement of each header.

[0034] `displ_header` is a header for displacement amounts defined by submesh units, LoD units, etc.

[0035] Here, LoD represents the degree of fineness, and this degree changes depending on the number of subdivisions, etc.

[0036] Figure 3 shows an example of the syntax structure for displ_sequence_parameter_set_rbsp. Note that different syntax names may be used if the functionality of the syntax is similar.

[0037] In the syntax configuration of displ_sequence_parameter_set_rbsp shown in Figure 3, the Description column indicates how each syntax is encoded, where ue(v) means it is an unsigned zero-order exponential Golomb code, and u(n) means it is an n-bit flag.

[0038] The Description is merely an example, and you may choose an encoding scheme other than the Description for the diagram, such as u(n), ue(v), or ae(v).

[0039] displ_sequence_parameter_set_rbsp includes the control signal dsps_subdivision_flag, which represents the subdivision flag, a flag indicating whether or not to perform subdivision for each sequence.

[0040] Instead of using a subdivision method, encoding a flag to indicate whether or not to perform subdivision is expected to reduce the amount of code in the displacement bitstream.

[0041] When dsps_subdivision_flag is 1, displ_sequence_parameter_set_rbsp includes a control signal dsps_subdivision_iteration_count_minus1 which represents the number of subdivisions per sequence.

[0042] When dsps_subdivision_flag is 1, the number of subdivisions per sequence, DspsSubdivisionCount, is configured to be decoded by adding 1 to dsps_subdivision_iteration_count_minus1.

[0043] DspsSubdivisionCount may be configured to be decoded by adding an integer N to dsps_subdivision_iteration_count_minus1.

[0044] By adding an integer N to dsps_subdivision_iteration_count_minus1, the range of subdivision counts can be expanded, which is expected to reduce the amount of code in the displacement bitstream.

[0045] When dsps_subdivision_flag is 0, the DspsSubdivisionCount, the number of subdivisions per sequence, is configured to be 0 when decrypted.

[0046] displ_sequence_parameter_set_rbsp includes the displacement quantization parameter set displ_quantization_parameters(0,DspsSubdivisionCount).

[0047] Figure 4 shows an example of the syntax structure for displ_frame_parameter_set_rbsp. Note that different syntax names may be used if the functionality of the syntax is similar.

[0048] In the syntax configuration of displ_frame_parameter_set_rbsp shown in Figure 4, the Description field is the same as that of displ_sequence_parameter_set_rbsp.

[0049] displ_frame_parameter_set_rbsp includes the control signal dfps_subdivision_flag, which represents the subdivision flag, a flag indicating whether or not to perform subdivision on a per-frame basis.

[0050] Instead of using a subdivision method, encoding a flag to indicate whether or not to perform subdivision is expected to reduce the amount of code in the displacement bitstream.

[0051] When dfps_subdivision_flag is 1, displ_frame_parameter_set_rbsp includes the control signal dfps_subdivision_iteration_count_minus1, which represents the number of subdivisions per frame.

[0052] When dfps_subdivision_flag is 1, the number of subdivisions per frame, DfpsSubdivisionCount, is configured to be decoded by adding 1 to dfps_subdivision_iteration_count_minus1.

[0053] DfpsSubdivisionCount may be configured to be decoded by adding an integer N to dfps_subdivision_iteration_count_minus1.

[0054] By adding an integer N to dfps_subdivision_iteration_count_minus1, the range of subdivision counts can be expanded, which is expected to reduce the amount of code in the displacement bitstream.

[0055] When dfps_subdivision_flag is 0, the number of subdivisions per frame, DfpsSubdivisionCount, is configured to decode with 0.

[0056] Figure 5 shows an example of the syntax structure of displ_header. Here, if the functionality of the syntax is the same, different syntax names may be used than those shown in Figure 5.

[0057] In the syntax configuration of displ_header shown in Figure 5, the Description field is the same as that of displ_sequence_parameter_set_rbsp.

[0058] The `displ_header` contains a control signal `dh_subdivision_flag`, which represents a subdivision flag that indicates whether or not to perform subdivision for each header.

[0059] Instead of using a subdivision method, encoding a flag to indicate whether or not to perform subdivision is expected to reduce the amount of code in the displacement bitstream.

[0060] When dh_subdivision_flag is 1, displ_header includes a control signal dh_subdivision_iteration_count_minus1 which represents the number of subdivisions per header.

[0061] When dh_subdivision_flag is 1, the number of subdivisions per header, DhSubdivisionCount, is configured to be decoded by adding 1 to dh_subdivision_iteration_count_minus1.

[0062] DhSubdivisionCount may be configured to be decoded by adding an integer N to dh_subdivision_iteration_count_minus1.

[0063] By adding an integer N to dh_subdivision_iteration_count_minus1, the range of subdivision counts can be expanded, which is expected to reduce the amount of code in the displacement bitstream.

[0064] Furthermore, the control signal representing the number of subdivisions included in the Atlas bitstream may also be configured to decode the number of subdivisions by adding an integer N.

[0065] When dh_subdivision_flag is 0, the DhSubdivisionCount, which is the number of subdivisions per header, is configured to be 0 when decrypted.

[0066] Figure 6 shows an example of the syntax structure of displ_quantization_parameters. Note that different syntax names may be used if the functionality of the syntax is similar.

[0067] In the syntax configuration of displ_quantization_parameters shown in Figure 6, the Description field is the same as that of displ_sequence_parameter_set_rbsp.

[0068] The displ_quantization_parameters(qpIndex, subdivisionCount) includes the control signal dsps_displacement_reference_qp_minus49, which represents the displacement reference quantization value, when the quantization value index qpIndex is 0.

[0069] By encoding a control signal that represents the displacement reference quantization value only when qpIndex is 0, it is expected that the amount of code in the displacement bitstream can be reduced.

[0070] Similarly, the control signal representing the displacement reference quantization value included in the Atlas bitstream may also be configured to encode only when qpIndex is 0.

[0071] displ_quantization_parameters includes the LoD quantization difference value dqp_lod_delta_quantization_parameter_value.

[0072] displ_quantization_parameters includes the LoD quantization difference sign value dqp_lod_delta_quantization_parameter_sign.

[0073] When qpIndex is 0, QuantizationParameter is calculated using the following formula:

[0074] QuantizationParameter[qpIndex][i][k]=dsps_displacement_reference_qp_minus49+49+(1-2*dqp_lod_delta_quantization_parameter_sign[qpIndex][i][k])*dqp_lod_delta_quantization_parameter_value[qpIndex][i][k] When qpIndex is not 0, QuantizationParameter is calculated using the following formula:

[0075] QuantizationParameter[qpIndex][i][k]=QuantizationParameter[qpIndex-1][i][k]+(1-2*dqp_lod_delta_quantization_parameter_sign[qpIndex][i][k])*dqp_lod_delta_quantization_parameter_value[qpIndex][i][k]

[0076] (SEI message decoding unit 209) The SEI message decoding unit 209 is configured to decode the SEI bitstream and output SEI control information.

[0077] Referring to Figure 7, the SEI control information decoded by the SEI message decoding unit 209 will be explained.

[0078] Firstly, the SEI bitstream includes a correction syntax called Zippering, which is a set of control information related to submesh boundary correction.

[0079] Zippering can be defined for each individual mesh data, or it can be defined at a finer granularity such as frames, patches, or tiles.

[0080] The following describes the structure of the syntax decoded by the SEI message decoding unit 209 and the decoding method thereof, with reference to Figure 7.

[0081] Figure 7 shows an example of the syntax structure of Zippering. Note that different syntax names may be used if the functionality of the syntax is the same as those shown in Figure 7.

[0082] In the Zippering syntax configuration shown in Figure 7, the Description column indicates how each syntax is encoded. Furthermore, ue(v) means it is an unsigned zero-order exponential Golomb code, and u(n) means it has a fixed code length of n bits.

[0083] The Description is merely an example, and other encoding schemes besides the Description for figures and tables, such as u(n), ue(v), and ae(v), may be selected.

[0084] Zippering includes a control signal zp_persistence_flag that indicates whether to use the correction syntax from the previous frame.

[0085] Zippering includes a control signal zp_send_distance_per_submesh that indicates whether to send a correction distance threshold for each submesh.

[0086] Zippering includes a control signal zp_number_of_submeshes_minus1 which represents the number of corrected submeshes.

[0087] zp_number_of_submeshes_minus1 may be configured to be defined when zp_send_distance_per_submesh is 1.

[0088] Zippering includes a control signal zp_send_distance_per_border_point that indicates whether to send a correction distance threshold for each vertex.

[0089] zp_send_distance_per_border_point may be configured to be defined when zp_send_distance_per_submesh is 1.

[0090] Zippering includes a control signal zp_number_of_border_points which represents the number of boundary vertices within the same submesh that defines the correction distance threshold.

[0091] zp_number_of_border_points may be configured to be defined only when zp_send_distance_per_border_point is 1.

[0092] Zippering includes a control signal zp_border_point_distance_bitdepth, which represents the bit depth of the correction distance threshold for each vertex.

[0093] zp_border_point_distance_bitdepth may be configured to be defined when zp_send_distance_per_border_point is 1.

[0094] By encoding zp_border_point_distance_bitdepth only when zp_send_distance_per_border_point is 1, it is expected that the amount of code in the SEI bitstream can be reduced.

[0095] zp_border_point_distance_bitdepth may be configured to be defined when the index of a boundary vertex is 0.

[0096] By encoding zp_border_point_distance_bitdepth only when the index of a boundary vertex is 0, it is expected that the code size of the SEI bitstream can be reduced.

[0097] zp_border_point_distance_bitdepth may be configured to be defined as an integer.

[0098] zp_border_point_distance_bitdepth may be configured to be defined as a base-2 logarithm.

[0099] zp_border_point_distance_bitdepth may be constructed to be defined as a logarithm with base N of a natural number.

[0100] This is expected to reduce the amount of code in the SEI bitstream.

[0101] Zippering includes a control signal zp_border_point_distance that represents the correction distance threshold for each vertex.

[0102] zp_border_point_distance may be configured to be defined when zp_send_distance_per_border_point is 1.

[0103] The bit depth of zp_border_point_distance may also be defined by zp_border_point_distance_bitdepth.

[0104] The bit depth of zp_border_point_distance_bitdepth may be configured to be represented by the control signal zp_border_submesh_distance_bitdepth, which represents the bit depth of the correction distance threshold for each submesh.

[0105] Zippering includes a control signal zp_border_submesh_distance_bitdepth, which represents the bit depth of the correction distance threshold for each submesh.

[0106] zp_border_submesh_distance_bitdepth may be configured to be defined when zp_send_distance_per_submesh is 1.

[0107] zp_border_submesh_distance_bitdepth may be configured to be defined when zp_send_distance_per_border_point is 0.

[0108] zp_border_submesh_distance_bitdepth may be configured to be defined only when the submesh index is 0.

[0109] Only when the above conditions are met can encoding zp_border_submesh_distance_bitdepth be expected to reduce the amount of code in the SEI bitstream.

[0110] The bit depth of zp_border_submesh_distance_bitdepth may be configured to be equal to zp_border_frame_distance_bitdepth.

[0111] zp_border_submesh_distance_bitdepth may be configured to be defined as a base-2 logarithm.

[0112] zp_border_submesh_distance_bitdepth may be constructed to be defined as a logarithm with base N of a natural number.

[0113] This is expected to reduce the amount of code in the SEI bitstream.

[0114] Zippering includes a control signal zp_max_match_distance_per_submesh, which represents the correction distance threshold for each submesh.

[0115] The bit depth of zp_max_match_distance_per_submesh may also be defined by zp_border_submesh_distance_bitdepth.

[0116] The bit depth of zp_border_submesh_distance_bitdepth may be configured to be represented by the control signal zp_border_frame_distance_bitdepth, which represents the bit depth of the correction distance threshold for each frame.

[0117] zp_max_match_distance_per_submesh may be configured to be defined when zp_send_distance_per_submesh is 1.

[0118] zp_max_match_distance_per_submesh may be configured to be defined when zp_send_distance_per_border_point is 0.

[0119] Zippering may include a control signal zp_border_frame_distance_bitdepth that represents the bit depth of the correction distance threshold for each frame.

[0120] zp_border_frame_distance_bitdepth may be configured to be defined when zp_send_distance_per_submesh is 0.

[0121] zp_border_frame_distance_bitdepth may be configured to be defined when zp_send_distance_per_border_point is 0.

[0122] Only when the above conditions are met can we expect to reduce the amount of code in the SEI bitstream by encoding zp_border_frame_distance_bitdepth.

[0123] zp_border_frame_distance_bitdepth may be configured to be defined as a base-2 logarithmic value.

[0124] zp_border_frame_distance_bitdepth may be constructed to be defined as a logarithm with base N.

[0125] This is expected to reduce the amount of code in the SEI bitstream.

[0126] Zippering includes a control signal zp_max_match_distance, which represents the correction distance threshold for each frame.

[0127] The encoding bit depth of zp_max_match_distance may also be defined by zp_border_frame_distance_bitdepth.

[0128] zp_max_match_distance may be configured to be defined when zp_send_distance_per_submesh is 0.

[0129] zp_max_match_distance may be configured to be defined when zp_send_distance_per_border_point is 0.

[0130] (Basic mesh decoding unit 202) The basic mesh decoding unit 202 is configured to decode the basic mesh bitstream, generate a basic mesh, and output it.

[0131] Here, the basic mesh consists of one or more submeshes.

[0132] A submesh consists of multiple vertices in three-dimensional space and edges that connect these vertices.

[0133] As shown in Figure 8, the basic mesh is constructed by combining basic faces, each represented by three vertices.

[0134] The basic mesh decoding unit 202 may be configured to decode the basic mesh bitstream using, for example, Draco as shown in Non-Patent Document 2 or other known mesh decoding techniques.

[0135] Multiple submeshes may be configured to be decoded independently using Draco or other known mesh decoding techniques.

[0136] (Subdivision section 203) Referring to Figure 9, the decoding method for the subdivided mesh in the subdivided section 203 will be explained.

[0137] The subdivision unit 203 is configured to output a subdivided mesh, subdivided vertex normals, and subdivision information based on the basic mesh.

[0138] Figure 9 shows an example of a subdivided mesh obtained by subdividing once using the mid-edge subdivision method. In the mid-edge subdivision method, a subdivided mesh is generated by subdividing the midpoints of the edges that make up the mesh.

[0139] By repeating the above process, it is possible to generate finer subdivided meshes.

[0140] The subdivision section 203 may be configured to decode independently for each submesh.

[0141] (Mesh decoding unit 204) The mesh decoding unit 204 is configured to output a decoded mesh based on the input atlas control information, subdivided mesh, and displacement amount.

[0142] The mesh decoding unit 204 decodes the decoded mesh by adding displacement amounts to the vertices of the input subdivided mesh.

[0143] In this case, the mesh decoding unit 204 may output multiple decoded meshes for each submesh based on the displacement amount and subdivision mesh corresponding to the submesh.

[0144] Furthermore, the mesh decoding unit 204 may be configured to calculate and output a decoded mesh by setting a coordinate system for the displacement amount based on a control signal representing a coordinate system for the displacement amount defined for each submesh, and adding the displacement amount to the subdivided vertices on the set coordinate system.

[0145] (Boundary correction unit 208) Referring to Figures 10 to 12, the decoding method of the boundary correction decoded mesh in the boundary correction unit 208 will be explained.

[0146] As shown in Figure 10, the boundary correction unit 208 comprises an initial boundary correction unit 208A and a sub-mesh boundary correction unit 208B that is not consistent with the subdivision.

[0147] (Initial boundary correction section 208A) The initial boundary correction unit 208A is configured to correct the submesh boundary for the input decoded mesh and output an initial boundary correction decoded mesh and a boundary pair.

[0148] The boundary pair is represented by a set of pairs of vertices (v(i,j), v(k,l)) to be corrected.

[0149] Here, v(i,j) indicates the vertex with vertex index j belonging to submesh i.

[0150] (Subdivision number inconsistent submesh boundary correction unit 208B) Using FIG. 11, a method for boundary correction when the subdivision number is different for each submesh will be described.

[0151] As shown in FIG. 11, in step S208B-1, the subdivision number inconsistent submesh boundary correction unit 208B initializes the submesh index smIdx to 0 and initializes the adjacent submesh index j to 0, and the method proceeds to step S208B-2.

[0152] In step S208B-2, the subdivision number inconsistent submesh boundary correction unit 208B determines whether smIdx < PostRecMeshFrame.submeshCount is satisfied. If Yes, the method proceeds to step S208B-3; if No, the method ends the process.

[0153] Here, PostRecMeshFrame.submeshCount represents the number of submeshes of the initial boundary correction decoded mesh.

[0154] In step S208B-3, the subdivision number inconsistent submesh boundary correction unit 208B determines whether j < submeshAdjacencyCounts[smIdx] is satisfied. If Yes, the method proceeds to step S208B-4; if No, the method proceeds to step S208B-5.

[0155] Here, submeshAdjacencyCounts[smIdx] represents the submeshes adjacent to the submesh smIdx.

[0156] The submesh boundary correction unit 208B for subdivision mismatch may be configured to skip subsequent correction processing if the submesh smIdx and the adjacent submesh j have different subdivision methods.

[0157] Furthermore, the submesh boundary correction unit 208B for subdivision number mismatch may be configured to skip subsequent correction processing if either the submesh smIdx or the adjacent submesh j is subdivided using a method other than the Mid-Edge subdivision method.

[0158] In step S208B-4, the submesh boundary correction unit 208B, which corrects for submesh subdivision mismatch, determines whether (number of subdivisions of submesh smIdx) - (number of subdivisions of adjacent submesh j) > 0. If yes, the method proceeds to step S208B-6; if no, the method proceeds to step S208B-7.

[0159] In step S208B-5, the sub-mesh boundary correction unit 208B for subdivision number mismatch adds 1 to smIdx, and the method proceeds to step S208B-2.

[0160] In step S208B-6, the sub-mesh boundary correction unit 208B finds the smallest vertex index firstUnmatchedLodVertexIdx of the sub-mesh smIdx belonging to "LoD (number of subdivisions of adjacent sub-mesh j + 1)", initializes i with firstUnmatchedLodVertexIdx, and proceeds to step S208B-8.

[0161] Here, "LoD N" represents the set of vertices generated by the Nth subdivision.

[0162] In step S208B-8, the sub-mesh boundary correction unit 208B for subdivision number inconsistency determines whether i < maxVertexIdx is satisfied. When the answer is Yes, the method proceeds to step S208B-9; when the answer is No, the method proceeds to step S208B-7.

[0163] Here, maxVertexIdx is the maximum value of the vertex indices of the sub-mesh smIdx.

[0164] In step S208B-9, the sub-mesh boundary correction unit 208B for subdivision number inconsistency determines whether the vertex v(smIdx, i) is a boundary vertex. When the answer is Yes, the method proceeds to step S208B-10; when the answer is No, the method proceeds to step S208B-11.

[0165] In step S208B-10, the sub-mesh boundary correction unit 208B for subdivision number inconsistency obtains the boundary vertices v(smIdx, i1) and v(smIdx, i2) adjacent to the vertex v(smIdx, i), and the method proceeds to step S208B-12.

[0166] In step S208B-11, the sub-mesh boundary correction unit 208B for subdivision number inconsistency adds 1 to i, and the method proceeds to step S208B-8.

[0167] In step S208B-12, the sub-mesh boundary correction unit 208B for subdivision number inconsistency searches for a boundary pair to obtain the boundary vertex pair v(smIdx, m1) and v(smIdx, m2) of the boundary vertices v(smIdx, i1) and v(smIdx, i2).

[0168] In step S208B-13, the sub-mesh boundary correction unit 208B for subdivision number inconsistency corrects the coordinates of the vertex v(smIdx, i) using the midpoint between v(smIdx, i) and v(smIdx, m3), and the method proceeds to step S208B-11.

[0169] v(smIdx,m3) is a vertex generated by subdividing the edge E(v(smIdx,m1) and v(smIdx,m2)).

[0170] E(x,y) represents an edge whose endpoints are vertices x and y.

[0171] The submesh boundary correction unit 208B for subdivision number mismatch may perform the correction using a known method such as weighted averaging instead of the midpoint.

[0172] The submesh boundary correction unit 208B for subdivision mismatch may add vertex v(smIdx,i) and vertex v(smIdx,m3) to the boundary pair.

[0173] Figure 12 is a schematic representation of the correction in step S208B-13.

[0174] As shown in Figure 12, the vertex v(smIdx,m3) may generate an edge by connecting to other vertices.

[0175] The submesh boundary correction unit 208B for subdivision mismatch may generate vertices v(smIdx,m3) using known subdivision methods other than the Mid-Edge subdivision method, such as Loop, LS3, or Battery.

[0176] The submesh boundary correction unit 208B may, when the number of subdivisions differs for adjacent edges, generate new vertices and perform corrections using the same procedure as described above.

[0177] This allows for highly accurate correction of submesh boundaries, even when the subdivision method differs for each submesh or edge.

[0178] Furthermore, when the number of subdivisions differs between adjacent submeshes or on an edge-by-edge basis, the submesh may be configured to reduce the number of vertices for the submesh with the higher number of subdivisions.

[0179] In this case, the system may be configured not to perform any processing if the subdivision methods do not match or if neither method is a Mid-Edge subdivision method.

[0180] This allows for highly accurate correction of submesh boundaries, even when the subdivision method differs for each submesh or edge.

[0181] According to this embodiment, a subdivision flag is introduced in the displacement bitstream to indicate whether or not to perform subdivision, and the amount of code can be reduced by deciding whether or not to encode the number of subdivisions according to the subdivision flag.

[0182] Furthermore, according to this embodiment, by performing submesh boundary correction for cases with different subdivision counts only when the subdivision method for each submesh is the same, it is possible to appropriately correct submesh boundaries even when a subdivision method other than the Mid-edge subdivision method is set.

[0183] Furthermore, according to this embodiment, the number of bits can be reduced by encoding the boundary correction distance threshold with the bit depth of the encoded boundary correction distance threshold.

[0184] The mesh coding device 100 and mesh decoding device 200 described above may be implemented as programs that cause a computer to execute each function (each process). [Industrial applicability]

[0185] Furthermore, according to this embodiment, for example, it is possible to achieve an overall improvement in service quality in video communication, thereby contributing to Goal 9 of the United Nations-led Sustainable Development Goals (SDGs), "Build resilient infrastructure, promote sustainable industrialization and foster innovation." [Explanation of Symbols]

[0186] 1…Mesh processing system 100... Mesh coding device 200... Mesh Decoder 201…Demultiplexer 202...Basic Mesh Decoding Unit 203…Subdivision part 204...Mesh decoding section 205...Displacement Decoding Unit 206...Video Decoding Unit 207... Atlas Data Decoding Unit 208...Boundary correction section 209...SEI message decoding unit

Claims

1. A mesh decoding device, A mesh decoding device characterized by having a boundary correction unit configured to correct submesh boundaries using the vertex coordinates of adjacent submeshes, even when the number of subdivisions differs for each submesh.

2. The mesh decoding device according to claim 1, characterized in that the boundary correction unit is configured to skip the correction process of the submesh boundary when the submesh and the adjacent submesh are subdivided using different subdivision methods.

3. The mesh decoding device according to claim 1, characterized in that the boundary correction unit is configured to skip subsequent submesh boundary correction processing if either the submesh or the adjacent submesh is subdivided by a method other than the Mid-Edge subdivision method.

4. A mesh decoding device, A mesh decoding device characterized by having a boundary correction unit configured to correct submesh boundaries using the vertex coordinates of adjacent submeshels, even when the number of subdivisions differs for each edge.

5. A mesh decoding method, A mesh decoding method characterized by having a step of correcting submesh boundaries using the vertex coordinates of adjacent submeshes, even when the number of subdivisions differs for each submesh.

6. A program that makes a computer function as a mesh decoding device, The mesh decoding device is A program characterized by having a boundary correction unit configured to correct submesh boundaries using the vertex coordinates of adjacent submeshes, even when the number of subdivisions differs for each submesh.