(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024092527
(43)【公開日】2024-07-08
(54)【発明の名称】3Dデータ符号化装置および3Dデータ復号装置
(51)【国際特許分類】
H04N 19/70 20140101AFI20240701BHJP
H04N 19/597 20140101ALI20240701BHJP
H04N 19/85 20140101ALI20240701BHJP
【FI】
H04N19/70
H04N19/597
H04N19/85
【審査請求】未請求
【請求項の数】11
【出願形態】OL
(21)【出願番号】P 2022208534
(22)【出願日】2022-12-26
【国等の委託研究の成果に係る記載事項】(出願人による申告)令和4年度、総務省、「戦略的情報通信研究開発推進事業(国際標準獲得型(5G高度化))/3次元空間データの無線伝送に向けた高能率圧縮技術の研究開発」、産業技術力強化法第17条の適用を受ける特許出願
(71)【出願人】
【識別番号】000005049
【氏名又は名称】シャープ株式会社
(74)【代理人】
【識別番号】100161207
【弁理士】
【氏名又は名称】西澤 和純
(74)【代理人】
【識別番号】100129115
【弁理士】
【氏名又は名称】三木 雅夫
(74)【代理人】
【識別番号】100133569
【弁理士】
【氏名又は名称】野村 進
(74)【代理人】
【識別番号】100131473
【弁理士】
【氏名又は名称】覚田 功二
(72)【発明者】
【氏名】高田 圭一郎
(72)【発明者】
【氏名】徳毛 靖昭
(72)【発明者】
【氏名】猪飼 知宏
(72)【発明者】
【氏名】中條 健
(72)【発明者】
【氏名】青野 友子
【テーマコード(参考)】
5C159
【Fターム(参考)】
5C159LA00
5C159PP03
5C159RC11
(57)【要約】 (修正有)
【課題】カラー画像の符号化による歪を低減し、3Dデータを高品質に符号化・復号できる3Dデータ符号化装置および3Dデータ復号装置を提供する。
【解決手段】符号化データを復号し位置情報と属性情報から構成される3Dデータを復号する3Dデータ復号装置において、符号化データから深層学習ポストフィルタの補助拡張情報を復号するヘッダ復号部と、符号化データからアトリビュート画像を復号するアトリビュート画像復号部と、アトリビュート画像のフィルタ処理を行うアトリビュート画像フィルタ部を備える。ヘッダ復号部は、アトリビュート画像フィルタが、アトリビュート画像に対してフィルタ処理を行うことを示す目的情報を復号する。
【選択図】
図6
【特許請求の範囲】
【請求項1】
符号化データを復号し属性情報を含む3Dデータを復号する3Dデータ復号装置において、
上記符号化データからニューラルネットワークポストフィルタの特性情報とニューラルネットワークポストフィルタのアクティブ化情報を復号するヘッダ復号部と、
上記符号化データからアトリビュート画像を復号するアトリビュート画像復号部と、
上記アトリビュート画像のポストフィルタ処理を行うアトリビュート画像フィルタ部を備え、
上記ヘッダ復号部は、上記アクティブ化情報から、アトラスの識別子と、上記特性情報の識別子と、キャンセルフラグと、持続情報を復号することを特徴とする3Dデータ復号装置。
【請求項2】
上記ヘッダ復号部は、上記アトラスIDに対するポストフィルタ処理のキャンセルフラグを復号することを特徴とする請求項1の3Dデータ復号装置。
【請求項3】
上記ヘッダ復号部は、アトリビュート画像数を復号し、0からアトリビュート画像数-1までの各アトリビュート画像iに対するキャンセルフラグと、各アトリビュート画像iに対する上記特性情報の識別情報と各アトリビュート画像iに対する上記持続情報を復号することを特徴とする請求項1に記載の3Dデータ復号装置。
【請求項4】
上記ヘッダ復号部は、各アトリビュート画像iに対するキャンセルフラグが0以外の場合に、各アトリビュート画像iに対する上記特性情報の識別情報と各アトリビュート画像iに対する上記持続情報を復号することを特徴とする請求項3に記載の3Dデータ復号装置。
【請求項5】
上記ヘッダ復号部は、各アトリビュート画像iに対する上記特性情報の識別情報と、各アトリビュート画像iに対するキャンセルフラグを復号し、上記iに対するキャンセルフラグが0以外の場合に各アトリビュート画像iに対する上記持続情報を復号することを特徴とする請求項3に記載の3Dデータ復号装置。
【請求項6】
上記ヘッダ復号部は、さらに、各アトリビュート画像iに対する有効性フラグを復号し、iに対する有効性フラグが0以外の場合に、各アトリビュート画像iに対する上記特性情報の識別情報と、各アトリビュート画像iに対するキャンセルフラグを復号し、上記iに対するキャンセルフラグが0以外の場合に各アトリビュート画像iに対する上記持続情報を復号することを特徴とする請求項3に記載の3Dデータ復号装置。
【請求項7】
上記ヘッダ復号部は、さらに、各アトリビュート画像iに対する有効性フラグを復号し、iに対する有効性フラグが0以外の場合に、各アトリビュート画像iに対する上記特性情報の識別情報と、各アトリビュート画像iに対するキャンセルフラグを復号し、上記iに対するキャンセルフラグが0以外の場合に各アトリビュート画像iに対する上記持続情報を復号することを特徴とする請求項3に記載の3Dデータ復号装置。
【請求項8】
上記ヘッダ復号部は、アトリビュート画像の識別子と、上記キャンセルフラグ、上記持続情報を復号することを特徴とする請求項1に記載の3Dデータ復号装置。
【請求項9】
上記ヘッダ復号部は、アトリビュート画像単位で、入力テンソルのチャネルとして入力する強度変数を復号することを特徴とする請求項1の3Dデータ復号装置。
【請求項10】
上記ヘッダ復号部は、アトリビュート画像単位で、ニューラルネットワークフィルタ後の画像と、フィルタ前の画像の重みづけをかえるウェイト値を復号することを特徴とする請求項1の3Dデータ復号装置。
【請求項11】
符号化データを復号し属性情報を含む3Dデータを復号する3Dデータ符号化装置において、
上記符号化データからニューラルネットワークポストフィルタの特性情報とニューラルネットワークポストフィルタのアクティブ化情報を符号化するヘッダ符号化部と、
上記符号化データからアトリビュート画像を復号するアトリビュート画像復号部と、
上記アトリビュート画像のポストフィルタ処理を行うアトリビュート画像フィルタ部を備え、
上記ヘッダ符号化部は、上記アクティブ化情報から、アトラスの識別子と、上記特性情報の識別子、と、キャンセルフラグと、持続情報を符号化することを特徴とする3Dデータ符号化装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、3Dデータ符号化装置および3Dデータ復号装置に関する。
【背景技術】
【0002】
3Dデータを効率的に伝送または記録するために、3Dデータを2次元画像に変換し動画像符号化方式で符号化して符号化データを生成する3Dデータ符号化装置、および、当該符号化データから2次元画像を復号して、再構成し、3Dデータを生成する3Dデータ復号装置がある。また、2次元画像に深層学習ポストフィルタの補助拡張情報を用いてフィルタ処理する技術がある。
【0003】
具体的な3Dデータ符号化方式としては、例えば、MPEG-I V3C (Volumetric Video-based Coding) and V-PCC (Video-based Point Cloud Compression)が挙げられる(非特許文献1)。V3Cは、点の位置と属性情報から構成されるポイントクラウドの他、多視点映像を符号化、復号することができる。また、既存の動画像符号化方式としては、例えば、H.266/VVCやH.265/HEVCなどが挙げられる。さらに、画像の性質や、表示方法、タイミングなどを符号化データと同時に伝送するための補助拡張情報SEI(Supplemental Enhancement Information)があり、深層学習ポストフィルタの補助拡張情報も開示されている(非特許文献2)。
【先行技術文献】
【非特許文献】
【0004】
【非特許文献1】ISO/IEC 23090-5
【非特許文献2】“Additional SEI messages for VSEI (Draft 3)”, Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29, JVET-AB2006, 2022
【発明の概要】
【発明が解決しようとする課題】
【0005】
非特許文献1における3Dデータ符号化方式では、3Dデータを構成するアトリビュート(カラー画像)をHEVC、VVCのような動画像符号化方式を用いて符号化・復号する。しかしながら、符号化に起因するカラー画像の歪によって、再構成する3Dデータの精度や画質が低下するという課題がある。また、非特許文献2の深層学習ポストフィルタの補助拡張情報の使用のみではアトリビュート画像ごと、フレームごとの画像の特徴が異なる場合、フィルタ強度の調節が十分にはできないため、画質改善の性能が低下するという課題がある。
【0006】
本発明は、動画像符号化方式を用いた3Dデータの符号化・復号において、符号化歪を低減し、3Dデータを高品質に符号化・復号することを目的とする。
【課題を解決するための手段】
【0007】
上記の課題を解決するために、本発明の一態様に係る3Dデータ復号装置は、符号化データを復号し位置情報と属性情報から構成される3Dデータを復号する3Dデータ復号装置において、上記符号化データから深層学習ポストフィルタの補助拡張情報を復号するヘッダ復号部と、上記符号化データからアトリビュート画像を復号するアトリビュート画像復号部と、上記アトリビュート画像のフィルタ処理を行うアトリビュート画像フィルタ部を備え、上記ヘッダ復号部は、上記アトリビュート画像フィルタが、上記アトリビュート画像に対してフィルタ処理を行うことを示す目的情報を復号することを特徴とする。
【0008】
上記の課題を解決するために、本発明の一態様に係る3Dデータ符号化装置は、3Dデータを符号化する3Dデータ符号化装置において、深層学習ポストフィルタの補助拡張情報を符号化する多重化部と、上記3Dデータのアトリビュート画像のフィルタパラメータを導出するアトリビュート画像フィルタパラメータ導出部と、上記アトリビュート画像を符号化するアトリビュート画像符号化部を備えることを特徴とする。
【発明の効果】
【0009】
本発明の一態様によれば、カラー画像の符号化による歪を低減し、3Dデータを高品質に符号化・復号することができる。
【図面の簡単な説明】
【0010】
【
図1】本実施形態に係る3Dデータ伝送システムの構成を示す概略図である。
【
図2】符号化ストリームのデータの階層構造を示す図である。
【
図3】3Dデータ、オキュパンシマップ、ジオメトリ画像、アトリビュート画像を説明するための図である。
【
図4】ジオメトリ画像及びアトリビュート画像のレイヤ構造を説明するための図である。
【
図5】本発明の実施形態に係る特性SEIと適用SEIの関係を示す図である。
【
図6】本発明の実施形態に係る3Dデータ復号装置31の概略構成を示す機能ブロック図である。
【
図7】3Dデータ復号装置31におけるアトリビュート画像フィルタ部308の構成を示す機能ブロック図である。
【
図8】3Dデータ復号装置31におけるアトリビュート画像フィルタ部308の構成を示す機能ブロック図である。
【
図9】3Dデータ復号装置31におけるアトリビュート画像フィルタ部308の構成を示す機能ブロック図である。
【
図10】本発明の実施形態に係る3Dデータ符号化装置11の概略構成を示す機能ブロック図である。
【
図11】SEIの復号処理を示したフローチャートである。
【
図12】ニューラルネットワークポストフィルタ特性SEIメッセージのシンタックスの例である。
【
図13】ニューラルネットワークポストフィルタ適用SEIメッセージのシンタックスの例である。
【
図14】ニューラルネットワークポストフィルタ適用SEIメッセージのシンタックスの例である。
【
図15】ニューラルネットワークポストフィルタ適用SEIメッセージのシンタックスの例である。
【
図16】ニューラルネットワークポストフィルタ適用SEIメッセージのシンタックスの例である。
【
図17】ニューラルネットワークポストフィルタ適用SEIメッセージのシンタックスの例である。
【
図18】ニューラルネットワークポストフィルタ適用SEIメッセージのシンタックスの例である。
【
図19】ニューラルネットワークポストフィルタ適用SEIメッセージのシンタックスの例である。
【発明を実施するための形態】
【0011】
以下、図面を参照しながら本発明の実施形態について説明する。
【0012】
図1は、本実施形態に係る3Dデータ伝送システム1の構成を示す概略図である。
【0013】
3Dデータ伝送システム1は、符号化対象3Dデータを符号化した符号化ストリームを伝送し、伝送された符号化ストリームを復号し3Dデータを表示するシステムである。3Dデータ伝送システム1は、3Dデータ符号化装置11、ネットワーク21、3Dデータ復号装置31、及び3Dデータ表示装置41を含んで構成される。
【0014】
3Dデータ符号化装置11には3DデータTが入力される。
【0015】
ネットワーク21は、3Dデータ符号化装置11が生成した符号化ストリームTeを3Dデータ復号装置31に伝送する。ネットワーク21は、インターネット(Internet)、広域ネットワーク(WAN:Wide Area Network)、小規模ネットワーク(LAN:Local Area Network)またはこれらの組み合わせである。ネットワーク21は、必ずしも双方向の通信網に限らず、地上デジタル放送、衛星放送等の放送波を伝送する一方向の通信網であっても良い。また、ネットワーク21は、DVD(Digital Versatile Disc:登録商標)、BD(Blu-ray Disc:登録商標)等の符号化ストリームTeを記録した記憶媒体で代替されても良い。
【0016】
3Dデータ復号装置31は、ネットワーク21が伝送した符号化ストリームTeのそれぞれを復号し、復号した1または複数の復号3DデータTdを生成する。
【0017】
3Dデータ表示装置41は、3Dデータ復号装置31が生成した1または複数の復号3DデータTdの全部または一部を表示する。3Dデータ表示装置41は、例えば、液晶ディスプレイ、有機EL(Electro-luminescence)ディスプレイ等の表示デバイスを備える。ディスプレイの形態としては、据え置き、モバイル、HMD等が挙げられる。また、3Dデータ復号装置31が高い処理能力を有する場合には、画質の高い画像を表示し、より低い処理能力しか有しない場合には、高い処理能力、表示能力を必要としない画像を表示する。
【0018】
<符号化ストリームTeの構造>
3Dデータ符号化装置11によって生成され、3Dデータ復号装置31によって復号される符号化ストリームTeのデータ構造について説明する。
【0019】
図2は、符号化ストリームTeにおけるデータの階層構造を示す図である。符号化ストリームTeは、例示的に、シーケンス、およびシーケンスを構成する複数のピクチャを含む。
図2には、それぞれ、シーケンスSEQを既定する符号化ビデオシーケンス、ピクチャPICTを規定する符号化ピクチャ、スライスSを規定する符号化スライス、スライスデータを規定する符号化スライスデータ、符号化スライスデータに含まれる符号化ツリーユニット、符号化ツリーユニットに含まれる符号化ユニットを示す図が示されている。
【0020】
(符号化ビデオシーケンス)
符号化ビデオシーケンスでは、処理対象のシーケンスSEQを復号するために3Dデータ復号装置31が参照するデータの集合が規定されている。シーケンスSEQは、
図2の符号化ビデオシーケンスに示すように、ビデオパラメータセット(Video Parameter Set)、シーケンスパラメータセットSPS(Sequence Parameter Set)、ピクチャパラメータセットPPS(Picture Parameter Set)、ピクチャPICT、及び、付加拡張情報SEI(Supplemental Enhancement Information)を含んでいる。なお、3次元データではさらに別のパラメータセットを含んでもよい。
【0021】
ビデオパラメータセットVPSは、複数のレイヤから構成されている動画像において、複数の動画像に共通する符号化パラメータの集合および動画像に含まれる複数のレイヤおよび個々のレイヤに関連する符号化パラメータの集合が規定されている。
【0022】
シーケンスパラメータセットSPSでは、対象シーケンスを復号するために3Dデータ復号装置31が参照する符号化パラメータの集合が規定されている。例えば、ピクチャの幅や高さが規定される。なお、SPSは複数存在してもよい。その場合、PPSから複数のSPSの何れかを選択する。
【0023】
ピクチャパラメータセットPPSでは、対象シーケンス内の各ピクチャを復号するために動画像復号装置31が参照する符号化パラメータの集合が規定されている。例えば、ピクチャの復号に用いられる量子化幅の基準値(pic_init_qp_minus26)や重み付き予測の適用を示すフラグ(weighted_pred_flag)が含まれる。なお、PPSは複数存在してもよい。その場合、対象シーケンス内の各ピクチャから複数のPPSの何れかを選択する。
【0024】
(符号化ピクチャ)
符号化ピクチャでは、処理対象のピクチャPICTを復号するために3Dデータ復号装置31が参照するデータの集合が規定されている。ピクチャPICTは、
図2の符号化ピクチャに示すように、スライス0~スライスNS-1を含む(NSはピクチャPICTに含まれるスライスの総数)。
【0025】
(符号化スライス)
符号化スライスでは、処理対象のスライスSを復号するために3Dデータ復号装置31が参照するデータの集合が規定されている。スライスは、
図2の符号化スライスに示すように、スライスヘッダ、および、スライスデータを含んでいる。
【0026】
スライスヘッダには、対象スライスの復号方法を決定するために3Dデータ復号装置31が参照する符号化パラメータ群が含まれる。スライスタイプを指定するスライスタイプ指定情報(slice_type)は、スライスヘッダに含まれる符号化パラメータの一例である。
【0027】
スライスタイプ指定情報により指定可能なスライスタイプとしては、(1)符号化の際にイントラ予測のみを用いるIスライス、(2)符号化の際に単方向予測、または、イントラ予測を用いるPスライス、(3)符号化の際に単方向予測、双方向予測、または、イントラ予測を用いるBスライスなどが挙げられる。なお、インター予測は、単予測、双予測に限定されず、より多くの参照ピクチャを用いて予測画像を生成してもよい。以下、P、Bスライスと呼ぶ場合には、インター予測を用いることができるブロックを含むスライスを指す。
【0028】
(符号化スライスデータ)
符号化スライスデータでは、処理対象のスライスデータを復号するために3Dデータ復号装置31が参照するデータの集合が規定されている。スライスデータは、
図2の符号化スライスヘッダに示すように、CTUを含んでいる。CTUは、スライスを構成する固定サイズ(例えば64x64)のブロックであり、最大符号化単位(LCU:Largest Coding Unit)と呼ぶこともある。
【0029】
(符号化ツリーユニット)
図2の符号化ツリーユニットには、処理対象のCTUを復号するために3Dデータ復号装置31が参照するデータの集合が規定されている。CTUは、再帰的な4分木分割(QT(Quad Tree)分割)、2分木分割(BT(Binary Tree)分割)あるいは3分木分割(TT(Ternary Tree)分割)により符号化処理の基本的な単位である符号化ユニットCUに分割される。
【0030】
(符号化ユニット)
図2の符号化ユニットに示すように、処理対象の符号化ユニットを復号するために3Dデータ復号装置31が参照するデータの集合が規定されている。具体的には、CUは、CUヘッダCUH、予測パラメータ、変換パラメータ、量子化変換係数等から構成される。CUヘッダでは予測モード等が規定される。
【0031】
予測の種類(予測モード)は、イントラ予測と、インター予測の2つがある。イントラ予測は、同一ピクチャ内の予測であり、インター予測は、互いに異なるピクチャ間(例えば、表示時刻間、レイヤ画像間)で行われる予測処理を指す。
【0032】
変換・量子化処理はCU単位で行われるが、量子化変換係数は4x4等のサブブロック単位でエントロピー符号化してもよい。
【0033】
(予測パラメータ)
予測画像は、ブロックに付随する予測パラメータによって導出される。予測パラメータには、イントラ予測とインター予測の予測パラメータがある。
【0034】
(3次元立体情報のデータ構造)
本明細書の3次元立体情報(3Dデータ)は、3次元空間上の位置情報(x, y, z)と属性情報の集合である。例えば3Dデータは、3次元空間上の位置情報と属性情報の点群であるポイントクラウド、三角形の頂点と面からなるメッシュ(もしくはポリゴン)形式で表現される。
【0035】
図3は、3Dデータ、オキュパンシマップ、ジオメトリ画像(位置情報)、アトリビュート画像を説明するための図である。3Dデータを構成するポイントクラウド及びメッシュは、3Dデータ符号化装置11によって、複数の部分(領域)に分割され、各部分に含まれる点群は3D空間上に設定された3Dバウンディングボックス(
図3(a))のいずれかの平面に投影される。3Dデータ符号化装置11は投影した点群から複数のパッチを生成する。3Dバウンディングボックスに関する情報(座標、サイズなど)、投影面へのマッピングに関する情報(各パッチの投影面、座標、サイズ、回転有無など)をアトラス情報と呼ぶ。オキュパンシマップは、各パッチの有効領域(ポイントクラウド、メッシュが存在する領域)を2Dバイナリ画像(例えば有効領域を1、無効領域を0)として示した画像である(
図3(b))。なお有効領域、無効領域の値は255と0など、0、1以外の値を用いてもよい。ジオメトリ画像は、各パッチの投影面に対するデプス値(距離)を示す画像である(
図3(c))。デプス値と画素値の関係は線形であってもよいし、ルックアップテーブルや数式、または、値による分岐の組み合わせによる関係式により、画素値から距離を導出してもよい。アトリビュート画像は、ポイントの属性(例えばRGBの色)を示す画像である。なお、これらオキュパンシマップ画像、ジオメトリ画像、アトリビュート画像、アトラス情報は、異なる投影面からの部分画像(パッチ)をある2次元画像上にマッピングした(貼り合わせた)画像であってもよい。アトラス情報は、パッチの数やパッチに対応する投影面の情報を含む。3Dデータ復号装置12は、アトラス情報、オキュパンシマップ、ジオメトリ画像、アトリビュート画像から、点群もしくはメッシュの座標と属性情報を再構成する。ここではポイントとは、ポイントクラウドの各点もしくはメッシュの頂点である。なお、オキュパンシマップ画像、ジオメトリ画像の代わりに、メッシュの頂点を示すメッシュ情報(位置情報)を符号化、復号、伝送してもよい。またメッシュ情報は、メッシュの部分集合である基本メッシュを構成するベースメッシュと、基本メッシュ以外のメッシュを示すための、ベースメッシュからの変位を示すメッシュ変位に分割して符号化、復号、伝送してもよい。
【0036】
図4は、ジオメトリ画像及びアトリビュート画像のレイヤ構造を説明するための図である。ジオメトリ画像やアトリビュート画像は各々複数の画像(レイヤ)から構成されてもよい。例えばNearレイヤとFarレイヤを備えてもよい。ここで、NearレイヤとFarレイヤは各々、ある投影面からみたデプスが互いに異なるジオメトリ、アトリビュートを構成する映像である。Nearレイヤとは、投影面の各画素に対してデプスが最小となるポイントの集合であってもよい。Farレイヤとは、投影面の各画素に対して所定の範囲(例えばNearレイヤから距離dの範囲)内においてデプスが最大となるポイントの集合であってもよい。
【0037】
後述のジオメトリ画像符号化部106は、Nearレイヤのジオメトリ画像を画面内ピクチャ(Iピクチャ)、Farレイヤのジオメトリ画像を画面間ピクチャ(PピクチャもしくはBピクチャ)として符号化してもよい。また、NearレイヤをLayerID=0、FarレイヤをLayerID=1のように、Network Abstraction Layer(NAL)ユニットのLayerID(nuh_layer_idシンタックス)を用いて、ビットストリーム上で識別できるように符号化してもよい。また、NearレイヤをTemporalID=0、FarレイヤをTemporalID=1のように、NALユニットのTemporalIDを用いて、ビットストリーム上で識別できるように符号化してもよい。
【0038】
(特性SEIと適用SEIの概要)
図5は本発明の実施形態に係るニューラルネットワークポストフィルタ特性SEI(以下特性SEI、NNFPC_SEI、特性情報)とニューラルネットワークポストフィルタ適用SEI(以下適用SEI、NNFPA_SEI、アクティブ化SEI、アクティブ化情報)の関係を示す図である。NNC復号部は、特性SEIで伝送される圧縮されたNNモデルを復号し、NNモデルを導出する。NNフィルタ部611は、導出されたNNモデルを用いたアトリビュート画像にフィルタ処理を行う。NNフィルタ部611の詳細は後述する。フィルタ処理に用いる特性SEIは適用SEIが備えるシンタックス要素、例えば、nnpfa_target_idによって指定される。適用SEIは、持続情報をシンタックス要素を用いて伝送し、持続情報で指定される持続期間においてアトリビュート画像にフィルタ処理を行うことを指定する。なお、NNフィルタ部611は、NNC復号部を備えてもよい。
【0039】
(3Dデータ復号装置の構成)
図6は、本発明の実施形態に係る3Dデータ復号装置31の概略構成を示す機能ブロック図である。
【0040】
3Dデータ復号装置31は、ヘッダ復号部301、アトラス情報復号部302、オキュパンシマップ復号部303、ジオメトリ画像復号部304、ジオメトリ再構成部306、アトリビュート画像復号部307、アトリビュート画像フィルタ部308、アトリビュート再構成部309、3Dデータ再構成部310から構成される。アトリビュート画像フィルタ部308の処理はポストフィルタであってもよい。
【0041】
ヘッダ復号部301は、バイトストリームフォーマット、ISOBMFF(ISO Base Media File Format)などで多重化された符号化データを入力し、逆多重化して、アトラス情報符号化ストリーム、オキュパンシマップ符号化ストリーム、ジオメトリ画像符号化ストリーム、アトリビュート画像符号化ストリーム、フィルタパラメータを出力する。
【0042】
ヘッダ復号部301は、符号化データから、ポストフィルタ処理の特性を示す特性SEIを復号する。さらに、ヘッダ復号部301は、符号化データから、適用SEIを復号する。例えば、ヘッダ復号部301は、特性SEIからnnpfc_id, nnpfc_purposeを復号し、適用SEIからnnpfa_atlas_id, nnpfa_attribute_count、nnpfa_cancel_flagを復号する。また、ヘッダ復号部301は、アトリビュート画像単位でnnpfa_target_id, nnpfa_weight_block_size_idx, nnpfa_weight_map_width_minus1, nnpfa_weight_map_height_minus1, nnpfa_weight_map, nnpfa_strength_block_size_idx, nnpfa_strength_map_width_minus1, nnpfa_strength_map_height_minus1, nnpfa_strength_mapを復号してもよい。 アトラス情報復号部302は、アトラス情報符号化ストリームを入力し、アトラス情報を復号する。
【0043】
オキュパンシマップ復号部303は、VVCやHEVCなどで符号化されたオキュパンシマップ符号化ストリームを復号し、オキュパンシマップを出力する。
【0044】
ジオメトリ画像復号部304は、VVCやHEVCなどで符号化されたジオメトリ画像符号化ストリームを復号し、ジオメトリ画像を出力する。
【0045】
ジオメトリ再構成部306は、アトラス情報、オキュパンシマップ、ジオメトリ画像を入力し、3D空間におけるジオメトリ(デプス情報、位置情報)を再構成する。
【0046】
アトリビュート画像復号部307は、VVCやHEVCなどで符号化された符号化ストリームの復号し、アトリビュート符号化ストリームを入力し、アトリビュート画像を出力する。
【0047】
アトリビュート画像フィルタ部308は、アトリビュート画像と指定されたアトリビュート画像に対するフィルタパラメータを入力する。アトリビュート画像フィルタ部308はNNフィルタ部611を備え、アトリビュート画像とフィルタパラメータに基づきフィルタ処理を行い、アトリビュート画像のフィルタ処理画像を出力する。
【0048】
アトリビュート再構成部309は、アトラス情報、オキュパンシマップ、アトリビュート画像を入力し、3D空間におけるアトリビュート(カラー情報)を再構成する。
【0049】
3Dデータ再構成部310は、再構成されたジオメトリ情報及びアトリビュート情報に基づき、3Dデータのポイントクラウドデータもしくはメッシュデータを再構成する。
(アトリビュート画像フィルタ部308)
図7は、アトリビュート画像フィルタ部308の構成を示す機能ブロック図である。ヘッダ復号部301はnn_post_filter_activation SEI(適用SEI)の符号化データからポストフィルタの適用対象を示す対象アトラス情報を示す識別子nnpfa_atlas_idを復号する。nnpfa_atlas_idは、アトリビュート画像の各パッチを識別するために使用する識別番号である。nnpfa_atlas_idはatlasID(アトラスID)にセットされる。
【0050】
アトリビュート画像フィルタ部308はニューラルネットワークを用いて、アトリビュート画像復号部307で復号された画像の高画質化・高精細化を行う。アトリビュート画像フィルタ部308は、各atlasIDで特定されるアトラス情報に複数のアトリビュート画像がある場合にアトリビュート画像単位で、特性SEI等を切り替えてフィルタ処理を行う。より具体的には、1つ以上のアトリビュート画像のうち番号iで識別されるアトリビュート画像i(i=0..nnpfa_attribute_count-1)に対して、TargetId[i]の示す特性SEIに基づいたフィルタ処理を行う。具体的には、nnpfa_enabled_flag[i]が1のとき、アトリビュート画像iに処理を行い、0の場合にはアトリビュート画像iに処理を行わない。
【0051】
アトリビュート画像フィルタ部308は、DecAttrChromaFormatに応じて以下の変数を導出する。DecAttrChromaFormatはアトリビュート画像の色差フォーマットである。
SW=SubWidthC = 1, SH=SubHeghtC = 1 (DecAttrChromaFormat == 0)
SW=SubWidthC = 2, SH=SubHeghtC = 2 (DecAttrChromaFormat == 1)
SW=SubWidthC = 2, SH=SubHeghtC = 1 (DecAttrChromaFormat == 2)
SW=SubWidthC = 1, SH=SubHeghtC = 1 (DecAttrChromaFormat == 3)
ここでSW=SubWidthC、SH=SubHeightCは輝度コンポーネントに対する色コンポーネントのサブサンプリング比を示す。
【0052】
アトリビュート画像フィルタ部308は、以下のポストフィルタ処理を行う。なお、このポスト処理は、フィルタ対象のアトリビュート画像が補助情報でない場合にのみ行ってもよい。
【0053】
アトリビュート画像フィルタ部308には、attrIdx、mapIdx、frameIdxおよびpartIdxごとにDecAttrFrames[attrIdx][partIdx][mapIdx][frameIdx][cIdx][y][x]を入力し、FilteredAttrFrame[attrIdx][cIdx][y][x]が出力される。出力をDecAttrFrames[attrIdx][partIdx][mapIdx][frameIdx][cIdx][y][x]に格納する。
ここで、cIdx=0..DecAttrNumComp-1, x=0..DecAttrWidth-1, y=0..DecAttrHeight-1である。
【0054】
DecAttrFrames[attrIdx][partIdx][mapIdx][frameIdx][cIdx][y][x]:デコード後のアトリビュート画像を示す7次元配列。各配列の値は、コンポーネントcIdx、位置(x, y)における画素値を示す。ここで、cIdx=0..DecAttrNumComp-1, x=0..DecAttrWidth-1, y=0..DecAttrHeight-1である。
【0055】
DecAttrHeight[attrIdx][partIdx][mapIdx][frameIdx]:アトリビュート画像のパッチの高さ。
【0056】
DecAttrWidth[attrIdx][partIdx][mapIdx][frameIdx]:アトリビュート画像のパッチの幅。
【0057】
DecAttrNumComp[attrIdx][partIdx][mapIdx][frameIdx]:アトリビュート画像のコンポーネント数。
【0058】
DecAttrChromaFormat[attrIdx][partIdx][mapIdx][frameIdx]:アトリビュート画像の色差フォーマット。ここで、DecAttrChromaFormatは、アトリビュート画像のChromaFormatIdcに依存し、例えば1(YUV4:2:0)もしくは3(YUV4:4:4)であってもよい。
【0059】
アトリビュート画像が補助的な情報でない、即ちrawパッチやEOMパッチ以外の情報を含む場合、アトリビュート画像フィルタ部308には、attrIdx、frameIdx、partIdxおよびmapIdxごとに以下が入力され、FilteredAttrFrame[attrIdx][cIdx][y][x][partIdx][mapIdx][frameIdx]が出力される。FilteredAttrFrame[attrIdx][cIdx][y][x][partIdx][mapIdx][frameIdx]は、フィルタ後のアトリビュート画像を示す7次元配列である。各配列の値は、コンポーネントcIdx、位置(x, y)における画素値を示す。ここで、cIdx=0..DecAttrNumComp-1, x=0..DecAttrWidth-1, y=0..DecAttrHeight-1である。
【0060】
TargetId[attrIdx][partIdx][mapIdx][frameIdx]:特性SEIの識別番号を示す。
【0061】
DecAttrHeight[attrIdx][partIdx][mapIdx][frameIdx]:アトリビュート画像のパッチの高さ。
【0062】
DecAttrWidth[attrIdx][partIdx][mapIdx][frameIdx]:アトリビュート画像のパッチの幅。
【0063】
DecAttrNumComp[attrIdx][partIdx][mapIdx][frameIdx]:アトリビュート画像のコンポーネント数。
【0064】
DecAttrChromaFormat[attrIdx][partIdx][mapIdx][frameIdx]:アトリビュート画像の色差フォーマット。ここで、DecAttrChromaFormatは、アトリビュート画像のChromaFormatIdcに依存し、例えば1(YUV4:2:0)もしくは3(YUV4:4:4)であってもよい。
【0065】
上記構成によれば、アトリビュート画像iに対して個別に、適用するネットワークモデル(フィルタの特性)を特性SEIで指定するため画質が向上する効果を奏する。さらに、アトリビュート画像iに対して個別にフィルタ適用の有無を制御できるので画質が向上する効果を奏する。つまり、アトリビュート画像単位でネットワークモデルとフィルタのオンオフを適用する。
【0066】
(NNフィルタ部611)
ニューラルネットワークモデルには、例えば、コンボリューションの数や層の数、カーネルサイズ、接続関係などのトポロジーがある。
【0067】
ここで、ニューラルネットワークモデル(以下、NNモデル)とは、ニューラルネットワークの要素および結合関係(トポロジー)と、ニューラルネットワークのパラメータ(重み、バイアス)を意味する。なお、NNフィルタ部611は、トポロジーを固定して、フィルタ対象画像に応じてパラメータのみを切り替えても良い。
【0068】
アトリビュート画像フィルタ部308はDecAttrFramesからNNフィルタ部611への入力InputTensorを導出し、NNフィルタ部611はinputTensorを用いて、ニューラルネットワークモデルによるフィルタ処理を行う。使用するニューラルネットワークモデルは、nnpfa_target_idに対応するモデルである。入力画像は、コンポーネントごとの画像であってもよいし、複数コンポーネントをそれぞれチャネルとして持つ画像であってもよい。
【0069】
NNフィルタ部611は、以下の処理を繰り返し適用してもよい。
【0070】
NNフィルタ部611は、層の数だけinputTensorとカーネルk[m][n][yy][xx]を畳み込み演算(conv,convolution)し、biasを加算した出力画像outputTensorを生成する。
ここで、mはinputTensorのチャネル数、nはoutputTensorのチャネル数、yyはカーネルkの高さ、xxはカーネルkの幅を示す。
【0071】
各層では、inputTensorからoutputTensorを生成する。
【0072】
outputTensor[nn][yy][xx]=ΣΣΣ(k[mm][nn][i][j]*inputTensor[mm][yy+j-of][xx+i-of]+bias[nn])
ここで、nn=0..n-1、mm=0..m-1、yy=0..height-1、xx=0..width-1、i=0..yy-1、j=0..xx-1である。widthはinputTensorとoutputTensorの幅、heightはinputTensorとoutputTensorの高さである。Σは各々mm=0..m-1、i=0..yy-1、j=0..xx-1の総和である。ofは、outputTensorを生成するために、inputTensorの周囲に必要な領域の幅あるいは高さである。
【0073】
1x1 Convの場合、Σは、各々mm=0..m-1、i=0、j=0の総和を表す。このとき、of=0を設定する。3x3 Convの場合、Σは各々mm=0..m-1、i=0..2、j=0..2の総和を表す。このとき、of=1を設定する。
yy+j-ofの値が0未満またはheight以上のとき、あるいは、xx+i-ofの値が0未満またはwidth以上のとき、inputTensor[mm][yy+j-of][xx+i-of]の値を0としてもよい。あるいは、inputTensor[mm][yy+j-of][xx+i-of]の値をinputTensor[mm][yclip][xclip]としてもよい。ここで、yclipはmax(0, min(yy+j-of, height-1)), xclipは(0, min(xx+i-of, width-1))である。
【0074】
次の層では得られたoutputTensorを新たなinputTensorとして、同様の処理を層の数だけ繰り返す。層と層の間には、activation層を設けてもよい。また、pooling層やスキップ結合を用いてもよい。最後に得られたoutputTensorからOutAttrFrameを導出する。
【0075】
また、カーネルk'[n][yy][xx]を用いて、Depth wise Convと呼ばれる以下の式で示す処理を行ってもよい。ここで、nn=0..n-1、xx=0..width-1、yy=0..height-1である。
【0076】
outputTensor[nn][yy][xx]=ΣΣ(k'[nn][i][j]*inputTensor[nn][yy+j-of][xx+i-of]+bias[nn])
またActivateと呼ばれる非線形処理、たとえばReLUを用いてもよい。
ReLU(x) = x >= 0 ? x : 0
また以下の式に示すleakyReLUを用いてもよい。
【0077】
leakyReLU(x) = x >= 0 ? x : a*x
ここでaは1未満の所定の値、例えば0.1や0.125である。また整数演算を行うために上記の全てのk、bias、aの値を整数として、convの後に右シフトを行ってoutputTensorを生成してもよい。
【0078】
ReLUでは0未満の値に対しては常に0、それ以上の値に対しては入力値がそのまま出力される。一方、leakyReLUでは、0未満の値に対して、aで設定された勾配で線形処理が行われる。ReLUでは0未満の値に対する勾配が消失するため、学習が進みにくくなる場合がある。leakyReLUでは0未満の値に対する勾配が残され、上記問題が起こりにくくなる。また、上記leakyReLU(x)のうち、aの値をパラメータ化して用いるPReLUを用いてもよい。
【0079】
(NNフィルタの基本構成)
NNフィルタ部611は、NNモデルに基づくNNモデルパラメータを用いてフィルタを行うNN処理部を備えてもよい。
【0080】
(アトリビュート画像フィルタ部308の動作)
アトリビュート画像フィルタ部308は、nnpfc_inp_order_idcに応じて、アトリビュート画像復号部307が復号した復号画像DecAttrFramesであるCroppedPicに基づき、NNフィルタ部611への入力データinputTensor[][][]を導出する。さらに、StrengthControlValを入力してもよい。
for( i = 0; i < numInputPics; i++ ) {
if( nnpfc_inp_order_idc = = 0 )
for( yP = -overlapSize; yP < inpPatchHeight+overlapSize; yP++)
for( xP = -overlapSize; xP < inpPatchWidth+overlapSize; xP++ ) {
xIdx = (strengthSizeShift == 0) ? 0 : xP >> strengthSizeShift
yIdx = (strengthSizeShift == 0) ? 0 : yP >> strengthSizeShift
inpVal = InpY( InpSampleVal( cTop + yP, cLef + xP, PicHeight,
PicWidth, CroppedPic[i][0] ) )
if( !nnpfc_component_last_flag )
inputTensor[0][i][0][yP+overlapSize][xP+overlapSize] = inpVal
else
inputTensor[0][i][yP+overlapSize][xP+overlapSize][0] = inpVal
if( nnpfc_auxiliary_inp_idc = = 1 )
if( !nnpfc_component_last_flag )
inputTensor[0][i][1][yP+overlapSize][xP+overlapSize] = StrengthControlVal[yIdx][xIdx]
else
inputTensor[0][i][yP+overlapSize][xP+overlapSize][1] = StrengthControlVal[yIdx][xIdx]
}
else if( nnpfc_inp_order_idc = = 1 )
for( yP = -overlapSize; yP < inpPatchHeight+overlapSize; yP++)
for( xP = -overlapSize; xP < inpPatchWidth+overlapSize; xP++ ) {
inpCbVal = InpC( InpSampleVal( cTop + yP, cLeft + xP, PicHeight / SubHeightC,
PicWidth / SubWidthC, CroppedPic[i][1] ) )
inpCrVal = InpC( InpSampleVal( cTop + yP, cLeft + xP, PicHeight / SubHeightC,
PicWidth / SubWidthC, CroppedPic[i][2] ) )
if( !nnpfc_component_last_flag ) {
inputTensor[0][i][0][yP+overlapSize][xP+overlapSize] = inpCbVal
inputTensor[0][i][1][yP+overlapSize][xP+overlapSize] = inpCrVal
} else {
inputTensor[0][i][yP+overlapSize][xP+overlapSize][0] = inpCbVal
inputTensor[0][i][yP+overlapSize][xP+overlapSize][1] = inpCrVal
}
if( nnpfc_auxiliary_inp_idc = = 1 )
if( !nnpfc_component_last_flag )
inputTensor[0][i][2][yP+overlapSize][xP+overlapSize] = StrengthControlVal[yIdx][xIdx]
else
inputTensor[0][i][yP+overlapSize][xP+overlapSize][2] = StrengthControlVal[yIdx][xIdx]
}
else if( nnpfc_inp_order_idc = = 2 )
for( yP = -overlapSize; yP < inpPatchHeight+overlapSize; yP++)
for( xP = -overlapSize; xP < inpPatchWidth+overlapSize; xP++ ) {
yY = cTop + yP
xY = cLeft + xP
yC = yY / SubHeightC
xC = xY / SubWidthC
inpYVal = InpY( InpSampleVal( yY, xY, PicHeight,
PicWidth, CroppedPic[i][0] ) )
inpCbVal = InpC( InpSampleVal( yC, xC, PicHeight / SubHeightC,
PicWidth / SubWidthC, CroppedPic[i][1] ) )
inpCrVal = InpC( InpSampleVal( yC, xC, PicHeight / SubHeightC,
PicWidth / SubWidthC, CroppedPic[i][2] ) )
if( !nnpfc_component_last_flag ) {
inputTensor[0][i][0][yP+overlapSize][xP+overlapSize] = inpYVal
inputTensor[0][i][1][yP+overlapSize][xP+overlapSize] = inpCbVal
inputTensor[0][i][2][yP+overlapSize][xP+overlapSize] = inpCrVal
} else {
inputTensor[0][i][yP+overlapSize][xP+overlapSize][0] = inpYVal
inputTensor[0][i][yP+overlapSize][xP+overlapSize][1] = inpCbVal
inputTensor[0][i][yP+overlapSize][xP+overlapSize][2] = inpCrVal
}
if( nnpfc_auxiliary_inp_idc = = 1 )
if( !nnpfc_component_last_flag )
inputTensor[0][i][3][yP+overlapSize][xP+overlapSize] = StrengthControlVal[yIdx][xIdx]
else
inputTensor[0][i][yP+overlapSize][xP+overlapSize][3] = StrengthControlVal[yIdx][xIdx]
}
else if( nnpfc_inp_order_idc = = 3 )
for( yP = -overlapSize; yP < inpPatchHeight+overlapSize; yP++)
for( xP = -overlapSize; xP < inpPatchWidth+overlapSize; xP++ ) {
yTL = cTop + yP*2
xTL = cLeft + xP*2
yBR = yTL + 1
xBR = xTL + 1
yC = cTop / 2 + yP
xC = cLeft / 2 + xP
inpTLVal = InpY( InpSampleVal( yTL, xTL, PicHeight,
PicWidth, CroppedPic[i][0] ) )
inpTRVal = InpY( InpSampleVal( yTL, xBR, PicHeight,
PicWidth, CroppedPic[i][0] ) )
inpBLVal = InpY( InpSampleVal( yBR, xTL, PicHeight,
PicWidth, CroppedPic[i][0] ) )
inpBRVal = InpY( InpSampleVal( yBR, xBR, PicHeight,
PicWidth, CroppedPic[i][0] ) )
inpCbVal = InpC( InpSampleVal( yC, xC, PicHeight / 2,
PicWidth / 2, CroppedPic[i][1] ) )
inpCrVal = InpC( InpSampleVal( yC, xC, PicHeight / 2,
PicWidth / 2, CroppedPic[i][2] ) )
if( !nnpfc_component_last_flag ) {
inputTensor[0][i][0][yP+overlapSize][xP+overlapSize] = inpTLVal
inputTensor[0][i][1][yP+overlapSize][xP+overlapSize] = inpTRVal
inputTensor[0][i][2][yP+overlapSize][xP+overlapSize] = inpBLVal
inputTensor[0][i][3][yP+overlapSize][xP+overlapSize] = inpBRVal
inputTensor[0][i][4][yP+overlapSize][xP+overlapSize] = inpCbVal
inputTensor[0][i][5][yP+overlapSize][xP+overlapSize] = inpCrVal
} else {
inputTensor[0][i][yP+overlapSize][xP+overlapSize][0] = inpTLVal
inputTensor[0][i][yP+overlapSize][xP+overlapSize][1] = inpTRVal
inputTensor[0][i][yP+overlapSize][xP+overlapSize][2] = inpBLVal
inputTensor[0][i][yP+overlapSize][xP+overlapSize][3] = inpBRVal
inputTensor[0][i][yP+overlapSize][xP+overlapSize][4] = inpCbVal
inputTensor[0][i][yP+overlapSize][xP+overlapSize][5] = inpCrVal
}
if( nnpfc_auxiliary_inp_idc = = 1 )
if( !nnpfc_component_last_flag )
inputTensor[0][i][6][yP+overlapSize][xP+overlapSize] = StrengthControlVal[yIdx][xIdx]
else
inputTensor[0][i][yP+overlapSize][xP+overlapSize][6] = StrengthControlVal[yIdx][xIdx]
}
}
ここで、以下の設定であってもよい。
PicHeight=DecAttrHeight
CroppedPic[frameIdx][0] = DecAttrFrames[attrIdx][partIdx][mapIdx][frameIdx][0]
CroppedPic[frameIdx][1] = DecAttrFrames[attrIdx][partIdx][mapIdx][frameIdx][1]
CroppedPic[frameIdx][2] = DecAttrFrames[attrIdx][partIdx][mapIdx][frameIdx][2]
BitDepthY = BitDepthC = DecAttrBitDepth
ChromaFormatIdc = DecAttrChromaFormat
nnFilterWeight = nnFilterMap[attrIdx][partIdx][mapIdx][frameIdx]
StrengthControlVal = StrengthMap[attrIdx][partIdx][mapIdx][frameIdx]
ここでnnFilterWeightには後述するnnFilterMap[attrIdx][partIdx][mapIdx][frameIdx]を用いてもよい。同様に、StrengthControlValには後述するStrengthMap[attrIdx][partIdx][mapIdx][frameIdx]を用いてもよい。つまりStrengthMap[attrIdx][partIdx][mapIdx][frameIdx][yIdx][xIdx]の示す強度を入力テンソルの1チャネルとして入力してもよい。
【0081】
なお、関数Reflect(x,y)、Wrap(x,y)は以下で定義される。、
Reflect(x, y)
= Min (-y, x) (if y < 0)
= Min (x-(y-x), x) (if y > x)
= y (それ以外)
Wrap(x, y)
= Max (0, x+y+1) (if y < 0)
= Min (x, y-x-1) (if y > x)
= y (それ以外)
ここでinpTensorBitDepth = nnpfc_inp_tensor_bitdepth_minus8 + 8で導出する。
【0082】
NNフィルタ部611は、NNフィルタ処理を行い、inputTensorからoutputTensorを導出する。下記のようにパッチサイズ(inpPatchWidth x inpPatchHeight)単位で、PostProcessingFilter()で示すフィルタ処理を行ってもよい。
【0083】
nnpfc_out_order_idcの値に応じて、以下のように、復号画像をポストフィルタ処理PostProcessingFilter()でフィルタ処理し、Y、Cb、およびCrの画素配列FilteredPic[0]、FilteredPic[1]、及びFilteredPic[2]を生成する。
【0084】
復号画像のポストフィルタ処理PostProcessingFilter()は以下のとおりである。
【0085】
if(nnpfc_inp_order_idc==0)
for(cTop=0;cTop<InpPicHeightInLumaSamples;cTop+=inpPatchHeight)
for(cLeft=0;cLeft<InpPicWidthInLumaSamples;cLeft+=inpPatchWidth){
DeriveInputTensors()
outputTensor=PostProcessingFilter(inputTensor)
StoreOutputTensors()
}
else if(nnpfc_inp_order_idc==1)
for(cTop=0;cTop<InpPicHeightInLumaSamples/SubHeightC;
cTop+=inpPatchHeight)
for(cLeft=0;cLeft<InpPicWidthInLumaSamples/SubWidthC;
cLeft+=inpPatchWidth){
DeriveInputTensors()
outputTensor=PostProcessingFilter(inputTensor)
StoreOutputTensors()
}
else if(nnpfc_inp_order_idc==2)
for(cTop=0;cTop<InpPicHeightInLumaSamples;cTop+=inpPatchHeight)
for(cLeft=0;cLeft<InpPicWidthInLumaSamples;cLeft+=inpPatchWidth){
DeriveInputTensors()
outputTensor=PostProcessingFilter(inputTensor)
StoreOutputTensors()
}
else if(nnpfc_inp_order_idc==3)
for(cTop=0;cTop<InpPicHeightInLumaSamples;cTop+=inpPatchHeight*2)
for(cLeft=0;cLeft<InpPicWidthInLumaSamples;cLeft+=inpPatchWidth*2){
DeriveInputTensors()
outputTensor=PostProcessingFilter(inputTensor)
StoreOutputTensors()
}
ここで、DeriveInputTensors( )は入力データ設定、StoreOutputTensors( )は出力データ格納を示す関数である。InpWidth,InpHeightは入力データのサイズであり、DecAttrWidth、DecAttrHeightであってもよい。inpPatchWeight、inpPatchHeightはパッチの幅、高さである。
【0086】
アトリビュート画像フィルタ部308は、NNフィルタ部611の出力データである3次元配列のNN出力データoutputTensor[][][]から出力画像OutAttrFrameを導出する。
【0087】
アトリビュート画像フィルタ部308は、以下の疑似コードを用いて出力画像OutAttrFrameを導出してもよい。
【0088】
アトリビュート画像フィルタ部308は、以下の疑似コードを用いて出力画像OutAttrFrameを導出してもよい。ここでiは、フレームの出力順を示す整数である。
for(i=0; i<numInputPics; i++) {
if(nnpfc_out_order_idc==0)
for(yP=0; yP<outPatchHeight; yP++)
for(xP=0; xP<outPatchWidth; xP++) {
yY = cTop * outPatchHeight / inpPatchHeight + yP
xY = cLeft * outPatchWidth / inpPatchWidth + xP
if (yY<nnpfc_pic_height_in_luma_samples && xY<nnpfc_pic_width_in_luma_samples)
if(!nnpfc_component_last_flag)
FilteredPic[i][0][yY][xY] = outputTensor[0][i][0][yP][xP]
else
FilteredPic[i][0][yY][xY]= outputTensor[0][i][yP][xP][0]
}
else if(nnpfc_out_order_idc==1)
for(yP=0; yP<outPatchCHeight; yP++)
for(xP=0; xP<outPatchCWidth; xP++) {
xSrc = cLeft * horCScaling + xP
ySrc = cTop * verCScaling + yP
if (ySrc<nnpfc_pic_height_in_luma_samples / outSubHeightC &&
xSrc<nnpfc_pic_width_in_luma_samples / outSubWidthC)
if(!nnpfc_component_last_flag) {
FilteredPic[i][1][ySrc][xSrc] = outputTensor[0][i][0][yP][xP]
FilteredPic[i][2][ySrc][xSrc] = outputTensor[0][i][1][yP][xP]
} else {
FilteredPic[i][1][ySrc][xSrc] = outputTensor[0][i][yP][xP][0]
FilteredPic[i][2][ySrc][xSrc] = outputTensor[0][i][yP][xP][1]
}
} else if(nnpfc_out_order_idc==2)
for(yP=0; yP<outPatchHeight; yP++)
for(xP=0; xP<outPatchWidth; xP++) {
yY = cTop*outPatchHeight / inpPatchHeight + yP
xY = cLeft*outPatchWidth / inpPatchWidth + xP
yC = yY / outSubHeightC
xC = xY / outSubWidthC
yPc = (yP/outSubHeightC)*outSubHeightC
xPc = (xP/outSubWidthC)*outSubWidthC
if (yY<nnpfc_pic_height_in_luma_samples && xY<nnpfc_pic_width_in_luma_samples)
if(nnpfc_component_last_flag==0) {
FilteredPic[i][0][yY][xY] = OutY(outputTensor[i][0][0][yP][xP])
FilteredPic[i][1][yC][xC] = OutC(outputTensor[i][0][1][yPc][xPc])
FilteredPic[i][2][yC][xC] = OutC(outputTensor[i][0][2][yPc][xPc])
} else {
FilteredPic[i][0][yY][xY][yY][xY] = OutY( outputTensor[i][0][yP][xP][0])
FilteredPic[i][1][yC][xC] = OutC(outputTensor[i][0][yPc][xPc][1])
FilteredPic[i][2][yC][xC] = OutC(outputTensor[i][0][yPc][xPc][2])
}
}
else if(nnpfc_out_order_idc==3)
for(yP=0; yP<outPatchHeight; yP++)
for( xP = 0; xP < outPatchWidth; xP++ ) {
ySrc = cTop / 2*outPatchHeight / inpPatchHeight + yP
xSrc = cLeft / 2*outPatchWidth / inpPatchWidth + xP
if (ySrc<nnpfc_pic_height_in_luma_samples/2 &&
xSrc<nnpfc_pic_width_in_luma_samples/2)
if(nnpfc_component_last_flag==0) {
FilteredPic[i][0][xSrc*2][ySrc*2] = OutY(outputTensor[i][0][0][yP][xP])
FilteredPic[i][0][xSrc*2+1][ySrc*2] = OutY(outputTensor[i][0][1][yP][xP])
FilteredPic[i][0][xSrc*2][ySrc*2+1] = OutY(outputTensor[i][0][2][yP][xP])
FilteredPic[i][0][xSrc*2+1][ySrc*2+1] = OutY(outputTensor[i][0][3][yP][xP])
FilteredPic[i][1][xSrc][ySrc] = OutC(outputTensor[i][0][4][yP][xP])
FilteredPic[i][2][xSrc][ySrc] = OutC(outputTensor[i][0][5][yP][xP])
} else {
FilteredPic[i][0][xSrc**2][ySrc*2] = OutY(outputTensor[i][0][yP][xP][0])
FilteredPic[i][0][xSrc*2+1][ySrc*2] = OutY(outputTensor[i][0][yP][xP][1])
FilteredPic[i][0][xSrc*2][ySrc*2+1] = OutY(outputTensor[i][0][yP][xP][2])
FilteredPic[i][0][xSrc*2+1][ySrc*2+1] = OutY(outputTensor[i][0][yP][xP][3])
FilteredPic[i][1][xSrc][ySrc] = OutC(outputTensor[i][0][yP][xP][4])
FilteredPic[i][2][xSrc][ySrc] = OutC(outputTensor[i][0][yP][xP][5])
}
}
}
OutAttrFrame = FilteredPic
フィルタ画像合成部612は、アトリビュート画像iに対応する適用SEIの符号化データから復号したnnFilterWeightの値に基づいてCroppedPic(=DecAttrFrames)、OutAttrFrameを合成し、FilteredAttrFrameを出力する。
【0089】
FilteredAttrFrameの各画素は、以下のように導出される。
【0090】
FilteredAttrFrame[cIdx][y][x] = (nnFilterWeight[yIdx][xIdx] * OutAttrFrames[cIdx][y][x] + ((1<<shift) - nnFilterWeight[yIdx][xIdx])*CroppedPic[cIdx][y][x]) + offset) >> shift
ここで、cIdx=0..DecAttrNumComp-1、x=0..DecAttrWidth-1、y=0..DecAttrHeight-1である。また以下の設定であってもよい。
xIdx = (weightSizeShift==0) ? 0 : (x>>weightSizeShift)
yIdx = (weightSizeShift==0) ? 0 : (y >> weightSizeShift)
shift=6
offset=1<<(shift-1)
アトリビュート画像iのフィルタの重み係数を示す2次元マップnnFilterWeightの対象アトリビュート画像上でのサイズである。
【0091】
アトリビュート画像フィルタ部308はFilteredAttrFrameとして出力する。
【0092】
上記構成によれば、アトリビュート画像iに対して、個別に適応SEI、及び、フレームの特徴に応じて特性SEI及びNNモデルの適用度合いを変えることで画質が向上する効果を奏する。なお、フレーム単位の特徴に応じて処理を切り替える場合にはPU(Picture Unit、後述)単位で持続する適用SEIを復号してもよい。なおPUは、符号化ピクチャの全てのVCL (Video Coding Layer) NALユニットを含むNALユニットと関連する非VCLのNALユニットの集合である。なおVCL NALとはピクチャの部分であるsliceから構成されるNALである。このSEIメッセージは各CVS(もしくはPU)のアトリビュート画像で復号され、適用されるメッセージである。
【0093】
(適用SEIの復号とフィルタ適用)
図11は、3Dデータ復号装置の処理のフローチャートを示す図である。3Dデータ復号装置は、適用SEIメッセージの復号を含む以下の処理を行う。
【0094】
S6001:へッダ復号部301は適用SEIからcancel_flagを復号する。
【0095】
S6002:cancel_flagが1の場合にはcancel_flagの対象となるアトリビュート画像に対して処理を終了する。cancel_flagが0の場合にはS6003へ進む。
【0096】
S6003:へッダ復号部301は適用SEIからアトリビュート画像iに対するnnpfa_persistence_flagを復号する。
【0097】
S6004:へッダ復号部301は適用SEIからアトリビュート画像iに対するnnpfa_target_idを復号する。
【0098】
S6005:nnpfa_target_idと同じnnpfc_idを有する特性SEIを特定し、特性SEIからNNモデルのパラメータを導出する。
【0099】
S6006:導出されたNNモデルのパラメータを用いてNNフィルタ部611でフィルタ処理を実行する。
【0100】
<シンタックスの構成例
【0101】
(ニューラルネットワークポストフィルタ特性SEI)
図12は、nn_post_filter_characteristics(payloadSize)(特性SEI)のシンタクスを示している。引数のpayloadSizeは、このSEIメッセージのバイト数を表している。
【0102】
特性SEIを適用する持続期間(Persistence scope)はCVS(Coded Video Sequence)である。つまり、CVS毎に適用されるSEIである。なお、CVSとは、IRAP(Intra Random Access Pictures)やGDR(Gradual Decoder Refresh Picute)のようなランダムアクセス可能なアクセスユニットを先頭とする1個以上のアクセスユニットの集合を指す。アクセスユニットは同時刻に表示されるピクチャから構成される。IRAPは、Instantaneous Decoder Refresh (IDR)、Clean Random Access (CRA)、Broken Link Access (BLA)のいずれかであってもよい。
【0103】
この特性SEIでは、以下のシンタックスが符号化・符号化・伝送される。
【0104】
復号画像の幅と高さは、輝度画素の単位で、ここではそれぞれInpPicWidthInLumaSamples及びInpPicHeightInLumaSamplesで示される。
【0105】
InpPicWidthInLumaSamples = pps_pic_width_in_luma_samples - SubWidthC * (pps_conf_win_left_offset + pps_conf_win_right_offset)
InpPicHeightInLumaSamples = pps_pic_height_in_luma_samples - SubHeightC * (pps_conf_win_top_offset + pps_conf_win_bottom_offset)
復号画像は、垂直座標yおよび水平座標xの輝度画素の2次元配列CroppedPic[0][y][x]及び、色差画素の2次元配列CroppedPic[1][y][x]及びCroppedPic[2][y][x]とする。ここで、画素配列の左上隅の座標yが0、xが0とする。
【0106】
復号画像の輝度の画素ビット長BitDepthYとする。復号画像の色差の画素ビット長BitDepthCとする。なお、BitDepthYとBitDepthCはどちらもBitDepthに等しく設定される。
【0107】
変数SubWidthCは、復号画像の水平方向の輝度に対する色差サブサンプリング比とし、変数SubHeightCは、復号画像の水平方向の輝度に対する色差サブサンプリング比とする。なお、SubWidthCは符号化データの変数SubWidthCと等しく設定される。SubHeightCは符号化データの変数SubHeightCに等しく設定される。
【0108】
変数SliceQPYは、符号化データのスライスレベルで更新される量子化パラメータSliceQpYに等しく設定される。
【0109】
nnpfc_out_sub_c_flagを使用して、変数outSubWidthCと変数outSubHeightCをそれぞれ導出する。nnpfc_out_sub_c_flagが1ならば、outSubWidthC=1、かつ、outSubHeightC=1を示す。nnpfc_out_sub_c_flagが0ならばoutSubWidthC=2、かつ、outSubHeightC=1を示す。nnpfc_out_sub_c_flagが存在しない場合、outSubWidthC=SubWidthC、かつ、outSubHeightC=SubHeightCと推定する。outSubWidthC、outSubHeightCは輝度成分に対する色差成分のサブサンプリング比である。
【0110】
if (nnpfc_out_sub_c_flagが存在しない) {
outSubWidthC= SubWidthC
outSubHeightC= SubWidthC
} else if (nnpfc_out_sub_c_flag == 1) {
outSubWidthC= 1
outSubHeightC= 1
} else {
outSubWidthC= 2
outSubHeightC= 1
}
ビットストリーム準拠の要件として、outSubWidthCとoutSubHeightCの両方が0より大きいことが要件である。
【0111】
シンタクス要素nnpfc_pic_width_in_luma_samplesとシンタクス要素nnpfc_pic_height_in_luma_samplesは、nnpfc_idで識別されるポストフィルタ処理を復号画像に適用することによって得られる、画像の輝度画素配列の幅と高さをそれぞれ指定する。nnpfc_pic_width_in_luma_samplesとnnpfc_pic_height_in_luma_samplesが存在しない場合、それらはそれぞれInpPicWidthInLumaSamplesおよびInpPicHeightInLumaSamplesに等しいと推論される。
【0112】
シンタクス要素nnpfc_component_last_flagの値が0の場合は、入力テンソルinputTensorの2番目の次元がポストフィルタ処理に、およびポストフィルタ処理から生じる出力テンソルoutputTensorがチャネルに使用されることを指定する。
【0113】
nnpfc_component_last_flagの値が1の場合は、入力テンソルの最後の次元がポストフィルタ処理に、および、ポストフィルタ処理から生じる出力テンソルoutputTensorがチャネルに使用されることを指定する。
【0114】
シンタクス要素nnpfc_inp_format_idcは、復号画像の画素値をポストフィルタ処理への入力値に変換する方法を示す。nnpfc_inp_format_idcの値が0の場合は、ポストフィルタ処理への入力値は、それぞれ、IEEE754で指定されている浮動小数点値形式であり、関数InpYおよびInpCは次のように指定される。
【0115】
InpY(x)=x÷((1<<BitDepthY)-1)
InpC(x)=x÷((1<<BitDepthC)-1)
nnpfc_inp_format_idcの値が1の場合、ポストフィルタ処理への入力値は符号なしの整数で、関数InpYおよびInpCは次のように指定される。
【0116】
shift=BitDepthY-inpTensorBitDepth
if(inpTensorBitDepth>=BitDepthY)
InpY(x)=x<<(inpTensorBitDepth-BitDepthY)
else
InpY(x)=Clip3(0,(1<<inpTensorBitDepth)-1,(x+(1<<(shift-1)))>>shift)
shift=BitDepthC-inpTensorBitDepth
if(inpTensorBitDepth>=BitDepthC)
InpC(x)=x<<(inpTensorBitDepth-BitDepthC)
else
InpC(x)=Clip3(0,(1<<inpTensorBitDepth)-1,(x+(1<<(shift-1)))>>shift)
変数inpTensorBitDepthは、後述するシンタクス要素nnpfc_inp_tensor_bitdepth_minus8から求める。
【0117】
シンタクス要素nnpfc_inp_tensor_bitdepth_minus8の値に8を加算した値は、入力整数テンソルの輝度画素値の画素ビット長を示す。変数inpTensorBitDepthの値は、次のように導出される。
【0118】
inpTensorBitDepth=nnpfc_inp_tensor_bitdepth_minus8+8
シンタクス要素nnpfc_inp_order_idcは、復号画像の画素配列をポストフィルタ処理への入力として順序付けする方法を示す。0以上3以下の範囲のnnpfc_inp_order_idcのセマンティクスは、nnpfc_inp_order_idcの値毎の入力テンソルinputTensorを導出するプロセスを指定する。また、垂直画素座標cTopと水平画素座標cLeftから、入力テンソルに含まれる画素のパッチの左上の画素位置を指定する。
【0119】
パッチとは、画像のコンポーネント(輝度と色差コンポーネントなど)からの画素の長方形の配列である。
【0120】
シンタクス要素nnpfc_constant_patch_size_flagが0の時、ポストフィルタ処理がnnpfc_patch_width_minus1、nnpfc_patch_height_minus1で示されるパッチサイズの正の整数倍であるパッチサイズを入力として受け入れることを示す。nnpfc_patch_width_minus1が1の場合は、ポストフィルタ処理がnnpfc_patch_height_minus1で示されるパッチサイズを入力として受け入れることを示す。
【0121】
シンタクス要素nnpfc_patch_width_minus1の値に1を加算した値は、nnpfc_constant_patch_size_flagの値が1の場合、ポストフィルタ処理への入力に必要なパッチサイズの水平画素数を示す。nnpfc_constant_patch_size_flagの値が0の場合、(nnpfc_patch_width_minus1+1)の任意の正の整数倍を、ポストフィルタ処理への入力に使用されるパッチサイズの水平画素数として使用できる。
【0122】
シンタクス要素nnpfc_patch_height_minus1に1を加算した値は、nnpfc_constant_patch_size_flagの値が1の場合、ポストフィルタ処理への入力に必要なパッチサイズの垂直画素数を示す。nnpfc_constant_patch_size_flagの値が0の場合、(nnpfc_patch_height_minus1+1)の任意の正の整数倍を、ポストフィルタ処理への入力に使用されるパッチサイズの垂直画素数として使用できる。
【0123】
シンタクス要素nnpfc_overlapは、隣り合う入力テンソルをオーバーラップさせる水平画素数と垂直画素数を指定する。nnpfc_overlapの値は、0以上16383以下の値でなければならない。
【0124】
変数inpPatchWidth、inpPatchHeight、outPatchWidth、outPatchHeight、horCScaling、verCScaling、outPatchCWidth、outPatchCHeight、およびoverlapSizeは、次のように導出する。
【0125】
inpPatchWidth=nnpfc_patch_width_minus1+1
inpPatchHeight=nnpfc_patch_height_minus1+1
outPatchWidth=(nnpfc_pic_width_in_luma_samples*inpPatchWidth)
/InpPicWidthInLumaSamples
outPatchHeight=(nnpfc_pic_height_in_luma_samples*inpPatchHeight)
/InpPicHeightInLumaSamples
horCScaling=SubWidthC/outSubWidthC
verCScaling=SubHeightC/outSubHeightC
outPatchCWidth=outPatchWidth*horCScaling
outPatchCHeight=outPatchHeight*verCScaling
overlapSize=nnpfc_overlap
シンタクス要素nnpfc_padding_typeは、復号画像の境界外の画素位置を参照するときのパディングのプロセスを指定する。
【0126】
nnpfc_padding_typeの値は、0以上15以下の値でなければならない。
【0127】
nnpfc_padding_typeの値が0の場合、復号画像の境界外の画素位置の値を0とする。
【0128】
nnpfc_padding_typeの値が1の場合、復号画像の境界外の画素位置の値を境界値の値とする。
【0129】
nnpfc_padding_typeの値が2の場合、復号画像の境界外の画素位置の値を、境界値を境に鏡面反射させた値とする。より、厳密に値を定義するために、関数InpSampleValを定義する。関数InpSampleVal(y,x,picHeight,picWidth,Pic)は、入力が垂直画素位置y、水平画素位置x、画像の高さpicHeight、画像幅picWidth、および画素配列croppedPicで、次のように導出されたsampleValの値を返す。
InpSampleVal(y, x, picHeight, picWidth, Pic) {
if(nnpfc_padding_type==0)
if(y<0 || x<0 || y>=picHeight || x>=picWidth)
sampleVal = 0
else
sampleVal = Pic[y][x]
else if(nnpfc_padding_type==1)
sampleVal = Pic[Clip3(0, picHeight-1, y)][Clip3(0, picWidth-1, x)]
else /*nnpfc_padding_type==2*/
sampleVal = Pic[Reflect(picHeight-1, y)][Reflect(picWidth-1, x)]
return sampleVal
}
シンタクス要素nnpfc_complexity_idcは、nnpfc_idに関連付けられたポストフィルタ処理の複雑さを示す1つ以上のシンタクス要素が存在する可能性があることを示す。nnpfc_complexity_idcの値が0の場合は、nnpfc_idに関連付けられたポストフィルタ処理の複雑さを示す構文要素が存在しないことを示す。
【0130】
シンタクス要素nnpfc_auxiliary_inp_idcはinputTensorに対して追加データがあるか否かを示す。0の場合、追加データがなく、0より大きい場合にはinputTensorに対して追加データを入力する。
【0131】
シンタクス要素nnpfc_out_format_idcは、0の場合、ポストフィルタ処理によって出力される画素値が、IEEE754-2019で指定されている浮動小数点値であることを示す。後処理によって出力される輝度画素値と色差画素値を、それぞれ画素ビット長の整数値に変換する関数OutYとOutCは、それぞれ画素ビット長BitDepthYとBitDepthCを用いて次のように指定される。
【0132】
OutY(x)=Clip3(0,(1<<BitDepthY)-1,Round(x*((1<<BitDepthY)-1)))
OutC(x)=Clip3(0,(1<<BitDepthC)-1,Round(x*((1<<BitDepthC)-1)))
nnpfc_out_format_idcの値が1の場合、ポストフィルタ処理によって出力される画素値が符号なし整数であることを示す。関数OutYと関数OutCは次のように指定される。
【0133】
shift=outTensorBitDepth-BitDepthY
if(outTensorBitDepth>=BitDepthY)
OutY(x)=Clip3(0,(1<<BitDepthY)-1,(x+(1<<(shift-1)))>>shift)
else
OutY(x)=x<<(BitDepthY-outTensorBitDepth)
shift=outTensorBitDepth-BitDepthC
if(outTensorBitDepth>=BitDepthC)
OutC(x)=Clip3(0,(1<<BitDepthC)-1,(x+(1<<(shift-1)))>>shift)
else
OutC(x)=x<<(BitDepthC-outTensorBitDepth)
なお、変数outTensorBitDepthは、後述するシンタクス要素nnpfc_out_tensor_bitdepth_minus8から導出する。
【0134】
nnpfc_out_tensor_bitdepth_minus8+8は、出力整数テンソルの画素値の画素ビット長を指定する。outTensorBitDepthの値は、次のように導出される。
【0135】
outTensorBitDepth=nnpfc_out_tensor_bitdepth_minus8+8
nnpfc_out_order_idcは、ポストフィルタ処理から得られた画素の出力順序を規定する。0以上3以下の値のnnpfc_out_order_idcのセマンティクスが規定されている。
【0136】
シンタクス要素nnpfc_reserved_zero_bitは0に等しくなければならない。
【0137】
シンタクス要素nnpfc_payload_byte[i]には、ISO/IEC15938-17に準拠するビットストリームのi番目のバイトが含まれる。nnpfc_payload_byte[i]は、すべてISO/IEC15938-17に完全に準拠するビットストリームでなければならない。
【0138】
(ニューラルネットワークポストフィルタ適用SEI)
図13は、適用SEIのシンタックス構成例を示す。
【0139】
この適用SEIに対して、ヘッダ復号部301、アトラス情報符号化部102、ジオメトリ画像符号化部106、アトリビューと画像符号化部109は、以下のシンタックスを復号、符号化する。ヘッダ復号部301は、nnpfa_atlas_idを符号化データから復号し、atlasIDに設定する。
【0140】
nnpfa_atlas_idは、適用SEIの適用対象となるアトラスの識別番号(ID)である。
【0141】
nnpfa_cancel_flagはキャンセルフラグである。nnpfa_cancel_flagが1であるとは、既に復号したNNPFA SEIで、atlasIdで示すアトラスのアトリビュート画像に対して設定されたニューラルネットワークによるポストフィルタの維持をキャンセルすることを示す。nnpfa_cancel_flagが0であるとは、nnpfa_attribute_countが伝送・符号化・復号されることを示す。
【0142】
nnpfa_attribute_countはnnpfa_atlas_idで示されたアトリビュート画像の数を表す。符号化データに含まれる複数のアトリビュート画像は、0からnnpfa_attribute_count-1までの番号iで識別される。
【0143】
nnpfa_enabled_flag[i]は、アトリビュート画像ごとに復号される。そして、アトリビュート画像iに特性SEIが示すニューラルネットワークによるポストフィルタリングを行うか否かを示す。値が1の場合は、ニューラルネットワークによるポストフィルタリングを行い、値が0の場合は行わない。
【0144】
nnpfa_target_id[i]は、アトリビュート画像iに適用する特性SEIのidを示す。nnpfc_idがnnpfa_target_idと等しい特性SEIによって指定されたポストフィルタ処理を、アトリビュート画像iに適用する。
【0145】
nnpfa_persistence_flag[i]は、対象のニューラルネットワークポストフィルタの維持情報(持続性情報)を示す。nnpfa_persistence_flag[i]が0である場合には、対象のニューラルネットワークポストフィルタが現在の符号化アトラスフレームのみに適用されることを示す。nnpfa_persistence_flag[i]が1である場合は、nnpfa_target_id[i]で示される対象のニューラルネットワークポストフィルタが以下のいずれかの条件を満たすまで現在のピクチャと後続の全てのピクチャに適用されることを示す。
・新しいCASが開始される
・ビットストリームが終了する
・現在のSEIメッセージと同じnnpfa_target_idを有するNNPFA SEIメッセージに関連する符号化アトラスユニットとnnpfa_cancel_flag[i]が、出力順で現ピクチャに続いて出力される。
【0146】
なお、CASは符号化アトラス列(coded atlas sequence)の略であり、復号順の符号化アトラスアクセスユニット(coded atlas access unit)の列である。より具体的には、NoOutputBeforeRecoveryFlag==1を持つIRAP符号化アトラスアクセスユニットから開始し、NoOutputBeforeRecoveryFlag==1以外の符号化アトラスアクセスユニットが後続する列である。なおIRAP符号化アトラスアクセスユニットは、IDR(instantaneous decoding refresh)符号化アクセスユニット、BLA(broken link access)符号化アクセスユニット、CRA(clean random access)符号化アクセスユニットであってもよい。
【0147】
ヘッダ復号部301は、nnpfa_atlas_idとnnpfa_cancel_flagを復号する。そして、npfa_cancel_flagが0の場合に、nnpfa_atlas_idに対するnnpfa_attribute_countを復号し、i=0からnnpfa_attribute_count-1のループ変数i(=attrIdx)を用いて、アトリビュート画像iに対するnnpfa_enabled_flag[i]を復号する。さらにヘッダ復号部301は、nnpfa_enabled_flag[i]が0以外の場合に、iのアトリビュート画像に対するnnpfa_target_id[i]とnnpfa_persistence_flag[i]を復号する。
【0148】
上記の構成によれば、符号化データを復号し属性情報を含む3Dデータを復号する3Dデータ復号装置において、上記符号化データからニューラルネットワークポストフィルタの特性情報とニューラルネットワークポストフィルタのアクティブ化情報を復号するヘッダ復号部と、上記符号化データからアトリビュート画像を復号するアトリビュート画像復号部と、上記アトリビュート画像のフィルタ処理を行うアトリビュート画像フィルタ部を備え、上記ヘッダ復号部は、上記アクティブ化情報から、アトラスの識別子と、上記特性情報の識別子、と、キャンセルフラグと、持続情報を復号することを特徴とする。
【0149】
これによりアトリビュート画像単位でニューラルネットワークのポストフィルタ処理をキャンセルできるという効果を奏する。 さらに、上記アトラスIDに対するフィルタ処理のキャンセルフラグを復号することを特徴とする。これにより複数のアトラスがとりえる3次元空間データにおいて、アトラス及びアトリビュート画像単位でニューラルネットワークのポストフィルタ処理をキャンセルできるという効果を奏する。
【0150】
復号された属性ビデオフレームにニューラルネットワークポストフィルタを適用するか否かを示す変数ActivateNNPFを用いて、以下に示す適用処理を行ってもよい。より具体的には、適用SEIを復号する場合に、以下の処理を行う。
【0151】
attrIdx=0..nnpfa_attribute_count[nnpfa_atlas_id]1に対して、もしnnpfa_enabled_flag[i]==1 かつtarget_cancel_flag[attrIdx]==0の場合、ActivateNNPF[attrIdx][partIdx][mapIdx][frameIdx][nnpfa_target_id[attrIdx]] = 2 (NNPF_ACTIVATE)に設定する。
【0152】
それ以外、nnpfa_enabled_flag[i]==0もしくはtarget_cancel_flag[attrIdx]==0の場合、ActivateNNPF[attrIdx][partIdx][mapIdx][frameIdx][nnpfa_target_id[attrIdx]] = -1 (NNPF_CANCEL)に設定する。
【0153】
続いて、属性フレーム(もしくはアトラス)を復号する際に、ActivateNNPF[attrIdx][partIdx][mapIdx][frameIdx][nnpfa_target_id[attrIdx]]を以下のように更新する。
【0154】
もしActivateNNPF[attrIdx][partIdx][mapIdx][frameIdx][nnpfa_target_id[attrIdx]]==2の場合、ActivateNNPF[attrIdx][partIdx][mapIdx][frameIdx][nnpfa_target_id[attrIdx]] = 1(NNPF_APPLY)に設定する。それ以外、もしActivateNNPF[attrIdx][partIdx][mapIdx][frameIdx][nnpfa_target_id[attrIdx]]==-1の場合、ActivateNNPF[attrIdx][partIdx][mapIdx][frameIdx][nnpfa_target_id[attrIdx]] = 0 (NNPF_NOAPPLY)に設定する。
【0155】
それ以外の場合、出力順で前のフレーム(lastFrameIdxで示されるフレーム)であるActivateNN[attrIdx][partIdx][mapIdx][lastFrameIdx][nnfpaIdx]の値を今のframeIdxのActivateNN[attrIdx][partIdx][mapIdx][lastFrameIdx][nnfpaIdx]にコピーする。つまり、ActivateNNPF[attrIdx][partIdx][mapIdx][frameIdx][nnfpaIdx] = ActivateNN[attrIdx][partIdx][mapIdx][lastFrameIdx][nnfpaIdx]と設定する。ここで、lastFrameIdx = frameIdxである。
【0156】
なお、NNPF_ACTIVATEとNNPF_APPLYと区別する理由は、どちらもポストフィルタを適用するが、NNPF_APPLYの場合には以前のlastFrameIdxのActivateNNPFの値に基づいてActivateNNPFを更新するが、NNPF_ACTIVATEの場合には以前のlastFrameIdxの値に関わらずにActivateNNPFに値を設定するためである。
【0157】
nnfpaIdxに対してActivateNN[attrIdx][partIdx][mapIdx][frameIdx][nnfpaIdx]==1となる場合には、復号属性フレームDecAttrFrames[attrIdx][partIdx][mapIdx][frameIdx][nnfpaIdx]に対して、nnpfc_idがnnpfaIdxと等しい特性SEIを用いて、ポストフィルタを適用する。
ここで、以下の関係を用いる。
【0158】
DecFrames = DecAttrFrames[attrIdx][partIdx][mapIdx][frameIdx][nnfpaIdx]
StrengthControlVal = StrengthMap[attrIdx][partIdx][mapIdx][frameIdx]
nnFilterWeight = nnFilterMap[attrIdx][partIdx][mapIdx][frameIdx]
PicWidth = DecAttrWidth
PicHeight = DecAttrHeight
CroppedPic[cIdx] = DecAttrFrames[attrIdx][partIdx][mapIdx][frameIdx][cIdx]
BitDepthY = BitDepthC = DecAttrBitDepth
ChromaFormatIdc = DecAttrChromaForma
【0159】
(適用SEIの他の例1)
図14は、適用SEIの別のシンタックス構成例を示す。iはnnpfa_atlas_idの示す対象アトラスに含まれるアトリビュート画像を識別するための値でありi=attrIdxである。ここでキャンセルフラグnnpfa_cancel_flag[i]は以下の意味を有する。
【0160】
nnpfa_cancel_flag[i]が1であるとは、以前のNNPFA SEIでatlasIdとアトリビュート画像iに対して設定されたニューラルネットワークによるポストフィルタの維持をキャンセルすることを示す。nnpfa_cancel_flag[i]が0であるとは、後続のシンタックスが伝送・符号化・復号されることを示す。
【0161】
ヘッダ復号部301は、nnpfa_atlas_idを復号し、nnpfa_atlas_idに対するnnpfa_attribute_countを復号し、i=0からnnpfa_attribute_count-1のループ変数iを用いて、アトリビュート画像iに対するnnpfa_cancel_flag[i]を復号する。さらにヘッダ復号部301は、nnpfa_cancel_flag[i]が0の場合に、iのアトリビュート画像に対するnnpfa_target_id[i]とnnpfa_persistence_flag[i]を復号する。
【0162】
上記ヘッダ復号部は、アトリビュート画像数を復号し、0からアトリビュート画像数-1までの各アトリビュート画像iに対するキャンセルフラグと、各アトリビュート画像iに対する上記特性情報の識別情報と各アトリビュート画像iに対する上記持続性情報を復号することを特徴とする。
【0163】
上記により、アトリビュート画像単位でニューラルネットワークのポストフィルタ処理をキャンセルしながら、アトリビュート画像単位でニューラルネットワークのポストフィルタ処理を特性情報として指定できるという効果を奏する。
【0164】
本実施例において、上記ヘッダ復号部は、各アトリビュート画像iに対するキャンセルフラグが0の場合に、各アトリビュート画像iに対する上記特性情報の識別情報と各アトリビュート画像iに対する上記持続性情報を復号することを特徴とする。
【0165】
(適用SEIの他の例2)
図15は、適用SEIの別のシンタックス構成例を示す。iはnnpfa_atlas_idの示す対象アトラスに含まれるアトリビュート画像を識別するための値でありi=attrIdxである。ここでnnpfa_cancel_flag[i]は以下の意味を有する。
【0166】
nnpfa_cancel_flag[i]が1であるとは、nnpfa_atlas_id、アトリビュート画像のIDのi、nnpfa_target_id[i]で指定された以前の特性SEIで設定されたニューラルネットワークによるポストフィルタの維持をキャンセルすることを示す。nnpfa_cancel_flag[i]が0であるとは、後続のシンタックスが伝送・符号化・復号されることを示す。
【0167】
ヘッダ復号部301は、nnpfa_atlas_idを復号し、nnpfa_atlas_idに対するnnpfa_attribute_countを復号し、i=0からnnpfa_attribute_count-1のループ変数iを用いて、アトリビュート画像iに対するnnpfa_target_id[i]とnnpfa_cancel_flag[i]を復号する。さらにヘッダ復号部301は、nnpfa_cancel_flag[i]が0の場合に、iのアトリビュート画像に対するnnpfa_persistence_flag[i]を復号する。
【0168】
上記ヘッダ復号部は、各アトリビュート画像iに対する上記特性情報の識別情報と、各アトリビュート画像iに対するキャンセルフラグを復号し、上記iに対するキャンセルフラグが0の場合に各アトリビュート画像iに対する上記持続性情報を復号することを特徴とする。
【0169】
上記により、アトリビュート画像単位で、特性情報により識別されるニューラルネットワークのポストフィルタ処理をキャンセルする場合(nnpfa_cancel_flag[i]==1)には、アトリビュート画像iに対して持続性情報nnpfa_persistence_flag[i]を指定しないため符号量が低減できるという効果を奏する。
【0170】
上記により、アトリビュート画像単位で、特性情報により識別されるニューラルネットワークのポストフィルタ処理をキャンセルしながら、アトリビュート画像単位でニューラルネットワークのポストフィルタ処理を特性情報として指定できるという効果を奏する。
【0171】
本実施例において、上記ヘッダ復号部は、さらに、各アトリビュート画像iに対する有効性フラグを復号し、iに対する有効性フラグが0以外の場合に、各アトリビュート画像iに対する上記特性情報の識別情報と、各アトリビュート画像iに対するキャンセルフラグを復号し、上記iに対するキャンセルフラグが0の場合に各アトリビュート画像iに対する上記持続性情報を復号することを特徴とする。
【0172】
上記により、アトリビュート画像単位で、特性情報により識別されるニューラルネットワークのポストフィルタ処理をキャンセルしながら、アトリビュート画像単位でニューラルネットワークのポストフィルタ処理を特性情報として指定できるという効果を奏する。
【0173】
(適用SEIの他の例3)
図16は、適用SEIの別のシンタックス構成例を示す。iはnnpfa_atlas_idの示す対象アトラスに含まれるアトリビュート画像を識別するための値でありi=attrIdxである。ここでnnpfa_cancel_flag[i]の意味は(適用SEIの他の例2)で既に説明した通りである。
【0174】
nnpfa_cancel_flag[i]が1であるとは、以前のNNPFA SEIで、atlasIdとアトリビュート画像iに対してnnpfa_target_id[i]の特性SEIを用いると設定されたニューラルネットワークによるポストフィルタの維持をキャンセルすることを示す。nnpfa_cancel_flag[i]が0であるとは、後続のシンタックスが伝送・符号化・復号されることを示す。
【0175】
ヘッダ復号部301は、nnpfa_atlas_idを復号し、nnpfa_atlas_idに対するnnpfa_attribute_countを復号し、i=0からnnpfa_attribute_count-1のループ変数iを用いて、アトリビュート画像iに対する有効性フラグnnpfa_enabled_id[i]を復号する。さらにヘッダ復号部301は、nnpfa_enabled_flag[i]が0以外の場合に、アトリビュート画像iに対するnnpfa_target_id[i]とnnpfa_cancel_flag[i]を復号する。さらにヘッダ復号部301は、nnpfa_cancel_flag[i]が0の場合に、iのアトリビュート画像に対するnnpfa_persistence_flag[i]を復号する。
【0176】
本実施例において、上記ヘッダ復号部は、さらに、各アトリビュート画像iに対する有効性フラグを復号し、iに対する有効性フラグが0以外の場合に、各アトリビュート画像iに対する上記特性情報の識別情報と、各アトリビュート画像iに対するキャンセルフラグを復号し、上記iに対するキャンセルフラグが0の場合に各アトリビュート画像iに対する上記持続性情報を復号することを特徴とする。
【0177】
上記により、アトリビュート画像単位と特性情報で識別されるニューラルネットワークのポストフィルタ処理が有効ではない場合(nnpfa_enabled_flag[i]==0)には、アトリビュート画像iに対して特性情報nnpfa_target_id[i]を指定しないため符号量が低減できるという効果を奏する。
【0178】
(適用SEIの他の例4)
図17は、適用SEIの別のシンタックス構成例を示す。ここでnnpfa_cancel_flagは以下の意味を有する。
【0179】
nnpfa_cancel_flagが1であるとは、以前のNNPFA SEIでatlasIdとアトリビュート画像iに対してnnpfa_target_idの特性SEIを用いると設定されたニューラルネットワークによるポストフィルタの維持をキャンセルすることを示す。nnpfa_cancel_flagが0であるとは、後続のシンタックスが伝送・符号化・復号されることを示す。
【0180】
ヘッダ復号部301は、対象アトラスを示すnnpfa_atlas_idと対象アトリビュート画像を示すnnpfa_attribute_idを復号し、nnpfa_atlas_idとnnpfa_attribute_idに対するnnpfa_target_idとnpfa_cancel_flagを復号する。さらに、npfa_cancel_flagが0の場合に、nnpfa_attribute_idのアトリビュート画像に対するnnpfa_persistence_flagを復号する。
【0181】
本実施例において、上記ヘッダ復号部は、アトリビュート画像の識別子と、上記キャンセルフラグ、上記持続性情報を復号することを特徴とする。
【0182】
上記の構成では、対象アトリビュート単位で、ポストフィルタの持続性を指定できる効果を奏する。
【0183】
(構成の詳細説明)
図18は、適用SEIのnn_post_filter_activationのシンタックス構成例を示す。iはnnpfa_atlas_idの示す対象アトラスに含まれるアトリビュート画像を識別するための値でありi=attrIdxである。
【0184】
nnpfa_filter_weight[i]は、アトリビュート画像iに対しアトリビュート画像フィルタ部308で使用するニューラルネットワークポストフィルタの重み係数を示す値である。
【0185】
nnpfa_weight_block_size_idx[i]は、アトリビュート画像iのフィルタの重み係数を示す2次元マップの対象アトリビュート画像上でのサイズを示す。サイズは((1<<weightSizeShift[i]) x (1<<weightSizeShift[i]))と等しい。なおweightSizeShift[i]==0の場合には、アトリビュート画像を画面内で分割せず全面を1単位で処理することを示す。
【0186】
weightSizeShift[i]==nnpfa_weight_block_size_idx==0 ? 0 : nnpfa_weight_block_size_idx[i] + 5
nnpfa_weight_map_width_minus1[i]は、アトリビュート画像iのフィルタの重み係数を示す2次元マップの幅-1を示す。シンタックスに現れない場合にはnnpfa_weight_map_width_minus1[i]=0と推定する。
【0187】
nnpfa_weight_map_height_minus1[i]は、アトリビュート画像iのフィルタの重み係数を示す2次元マップの高さ-1を示す。シンタックスに現れない場合にはnnpfa_weight_map_height_minus1[i]=0と推定する。
【0188】
nnpfa_weight_map[i][yIdx][xIdx]は、アトリビュート画像iのフィルタ処理で用いる2次元の重み係数マップを示す。
【0189】
上記ヘッダ復号部は、アトリビュート画像単位で、ニューラルネットワークフィルタ後の画像と、フィルタ前の画像の重みづけをかえるウェイト値を復号することを特徴とする。
【0190】
図8は、アトリビュート画像フィルタ部308の構成を示す機能ブロック図である。アトリビュート画像フィルタ部308は、NNフィルタ部611とフィルタ画像合成部612から構成される。
【0191】
nnpfa_enabled_flag[i]が0のとき、アトリビュート画像iに対してニューラルネットワークフィルタによる処理を行わない。nnpfa_enabled_flag[i]が1のとき、ヘッダ復号部301はnnpfa_target_id[i]、アトリビュート画像iにおけるニューラルネットワークフィルタの重みの強さを示す値nnpfa_weight_map[i][yIdx][xIdx]を復号し、nnpfa_weight_mapからframeIdxのアトリビュート画像iにおけるニューラルネットワークフィルタの重み係数nnFilterMapを下記のように導出する。nnFilterMapはnnFilterWeightとして用いられる。
nnFilterMap[i][partIdx][mapIdx][frameIdx][yIdx][xIdx] = nnpfa_weight_map[i][yIdx][xIdx]==0 ? 0 : nnpfa_weight_map[i][yIdx][xIdx]+1
ここでnnpfa_weight_map!=0の場合にnnpfa_weight_mapの値に1だけ加算し、nnpfa_weight_map=0..7の値を、0, 2..8の値に割り当てることにより、重み係数のビット量を1bit減らすことができる効果を奏する。
ここでyIdx = 0..nnpfa_weight_map_height_minus1[i]、xIdx = nnpfa_weight_map_width_minus1[i]-1。
【0192】
さらにNNフィルタ後の画像OutAttrFrameとNNフィルタ前の画像DecAttrFramesを用いて以下の重みづけを行う。
FilteredPic[cIdx][y][x] = (nnFilterWeight[yIdx][xIdx] * FilteredPic[cIdx][y][x] + ((1<<shift) - nnFilterWeight[yIdx][xIdx]) * DecAttrFrames[cIdx][y][x] + offset)) >> shift
ここでcIdxは色成分のインデックス、yは0..nnpfc_pic_height_in_luma_samples - 1、xは0.. nnpfc_pic_width_in_luma_samples - 1である。また、以下のように設定される。
xIdx = (weightSizeShift==0) ? 0 : x>>weightSizeShift
yIdx = (weightSizeShift==0) ? 0 : y>>weightSizeShift
shift = 3
導出されたFilteredPic画像は再度DecAttrFramesに代入する。
DecAttrFrames[attrIdx][partIdx][mapIdx][frameIdx][cIdx][y][x] = FilteredPic[cIdx][y][x]
上記構成によれば、アトリビュート画像i毎に、ニューラルネットワークフィルタの重み係数を指定するため、アトリビュート画像単位で異なる強度でフィルタを適用することができ、画質が向上する効果を奏する。
【0193】
図19は、適用SEIのシンタックス構成例を示す。iはアトリビュート画像を識別するための値でありi=attrIdxである。
図19(a)に示すシンタックスをヘッダ復号部301は復号してもよい。
【0194】
上記構成によれば、アトリビュート画像単位及び適用SEIを適用するフレームに応じて、復号されるウェイト変数nnpfa_strength_mapによりニューラルネットワークの出力画像のウェイトが変更される。これにより、画質向上効果の高い好適なフィルタ処理が可能である効果を奏する。
【0195】
nnpfa_strength_block_size_idx[i]は、アトリビュート画像iのフィルタの入力テンソルに設定する強度係数を示す2次元マップの対象アトリビュート画像上でのサイズを示す。サイズは((1<<strengthSizeShift[i]) x (1<<strengthSizeShift[i]))に等しい。なおweightSizeShift[i]==0の場合には、アトリビュート画像を画面内で分割せず全面を1単位で処理することを示す。
【0196】
strengthSizeShift[i] == nnpfa_strength_block_size_idx==0 ? 0 : nnpfa_strength_block_size_idx[i] + 5
nnpfa_strength_map_width_minus1[i]は、アトリビュート画像iのフィルタの強度係数を示す2次元マップの幅-1を示す。シンタックスに現れない場合にはnnpfa_strength_map_height_minus1[i]=0と推定する。
【0197】
nnpfa_strength_map_height_minus1[i]は、アトリビュート画像iのフィルタの強度係数を示す2次元マップの幅-1を示す。シンタックスに現れない場合にはnnpfa_strength_map_height_minus1[i]=0と推定する。
【0198】
nnpfa_strength_map[i][yIdx][xIdx]は、アトリビュート画像iのフィルタ処理で用いる2次元の強度係数マップを示す。
【0199】
アトリビュート画像フィルタ部308は以下のように配列StrengthMapを導出する。
StrengthMap[attrIdx][partIdx][mapIdx][frameIdx][yIdx][xIdx] = nnpfa_strength_map[i][yIdx][xIdx]+1
ここでyIdx = 0..nnpfa_strength_map_height_minus1[i]、xIdx = 0..nnpfa_strength_map_width_minus1[i]。
【0200】
ここでnnpfa_strength_map!=0の場合にnnpfa_weight_mapの値に1だけ加算し、nnpfa_weight_map=0..7の値を、0, 2..8の値に割り当てることにより、重み係数のビット量を1bit減らすことができる効果を奏する。
【0201】
ヘッダ復号部301は対象アトラス情報の備えるアトリビュート画像の数nnpfa_attribute_countを復号する。nnpfa_attribute_count[atlasID]が0のとき、アトリビュート情報が存在しないことを示す。nnpfa_attribute_countが0でないとき、各アトリビュート画像iについて、以下の処理を行う。
【0202】
アトリビュート画像iにニューラルネットワークによるポストフィルタリングを行うか否かを示すnnpfa_enabled_flag[i]を復号する。nnpfa_enabled_flag[i]が0のとき、アトリビュート画像iに対してニューラルネットワークフィルタによる処理を行わない。nnpfa_enabled_flag[i]が0でないとき、ヘッダ復号部301はニューラルネットワークフィルタ処理に関する以下のパラメータの復号を行う。
【0203】
nnpfa_target_id[i]を復号し、現在のアトリビュート画像i(=attrIdx)及びAtlasIDに関する特性SEIのインデックスを示す配列TargetId[i][partIdx][mapIdx][frameIdx]に値をセットする。
【0204】
nnpfa_filter_weight[i]を復号し、NNポストフィルタの強度を示す4次元配列FilterWight[i][partIdx][mapIdx][frameIdx]に値をセットする。
【0205】
nnpfa_strength_block_size_idxを復号する。nnpfa_strength_block_size_idx[i]が0以外のとき、nnpfa_strength_map_width_minus1[i]とnnpfa_strength_map_width_minus1[i]を復号する。nnpfa_strength_map_width_minus1[i]とnnpfa_strength_map_width_minus1[i]に1を加算した値を、強度係数マップの幅と高さを示す配列StrengthMapWidth[i][partIdx][mapIdx][frameIdx]とStrengthMapHeight[i][partIdx][mapIdx][frameIdx]に値をセットする。
【0206】
nnpfa_strength_block_size_idx=0の場合には、nnpfa_strength_map_width_minus1[i]=0、nnpfa_strength_map_height_minus1[i]=0と導入して上記動作を行う。または直接StrengthMapWidth=1、StrengthMapHeight=1に設定してもよい。
nnpfa_strength_map[i][yIdx][xIdx]を復号し、強度マップを示す配列StrengthMap[i][partIdx][mapIdx][frameIdx][yIdx][xIdx]に値をセットする。
StrengthMap[i][partIdx][mapIdx][frameIdx][yIdx][xIdx] = nnpfa_strength_map[i][yIdx][xIdx]
そのほかのシンタックス要素は
図13と同じであり、説明を省略する。
【0207】
図19(b)に示すシンタックスをヘッダ復号部301は復号してもよい。ここでは適用SEIは配列nnpfa_strength_mapの代わりに、値nnpfa_strength_idc[i]を含む。
StrengthMap[i][partIdx][mapIdx][frameIdx][yIdx][xIdx] = nnpfa_strength_idc[i]に設定する。
【0208】
上記ヘッダ復号部は、アトリビュート画像単位で、入力テンソルのチャネルとして入力する強度変数を適用SEIの符号化データから復号することを特徴とする。また、強度変数は画面内位置を示す座標(X座標、Y座標)に応じて定まる配列であってもよい。また、nnpfa_strength_block_size_idxのように、アトリビュート画像単位で、強度変数を変更する領域の大きさ(単位)を、適用SEIの符号化データから復号してもよい。
【0209】
上記構成によれば、アトリビュート画像単位及び適用SEIを適用するフレームに応じて、復号される強度変数によりニューラルネットワークの入力テンソルの値が設定されることにより、画質向上効果の高い好適なフィルタ処理が可能である効果を奏する。
【0210】
図9は、3Dデータ復号装置31におけるアトリビュート画像フィルタ部308の構成を示す機能ブロック図の一例である。アトリビュート画像フィルタ部308は、強度マップ画像生成部3081、NNフィルタ部611から構成される。
【0211】
上記構成によれば、アトリビュート画像i毎に強度を復号し、入力テンソルの1コンポーネント(1チャネル)として指定するため、アトリビュート画像単位で異なる強度でフィルタを適用することができ、画質が向上する効果を奏する。
【0212】
さらに上記の構成によれば、アトリビュート画像単位で単一の強度と2次元の強度を選択可能であるため、画面内での強度変動が大きい場合には2次元、それ以外の場合には単一の強度と使い分けができる。また2次元の強度のサイズ(粒度)も設定できるので符号量と画質のバランスをとることができる。さらに、強度マップのサイズを直接的に指定するため、nnpfa_strength_mapのシンタックス要素の数はアトリビュート画像(DecAttrWidthとDecAttrHeight)を復号することなく定まり、復号が容易になる。
【0213】
NNフィルタ部611にnnpfa_target_id、DecAttrHeight、DecAttrWidth、DecAttrNumComp、DecAttrChromaFormat、DecAttrFramesを入力する。NNフィルタ部611はFilteredAttrFrame[][][]を出力する。
【0214】
(3Dデータ符号化装置の構成)
図10は、本発明の実施形態に係る3Dデータ符号化装置11の概略構成を示す機能ブロック図である。
【0215】
3Dデータ符号化装置11は、パッチ生成部101、アトラス情報符号化部102、オキュパンシマップ生成部103、オキュパンシマップ符号化部104、ジオメトリ画像生成部105、ジオメトリ画像符号化部106、アトリビュート画像生成部108、アトリビュート画像符号化部109、アトリビュート画像フィルタパラメータ導出部110、多重化部111から構成される。3Dデータ符号化装置11は、3Dデータとしてポイントクラウドもしくはメッシュを入力して、符号化データを出力する。
【0216】
パッチ生成部101は、3Dデータを入力し、パッチ(ここでは矩形の画像)の集合を生成し、出力する。具体的には、3Dデータは、複数の領域に分割され、各領域は3D空間上に設定された3Dバウンディングボックス(
図3(a))のいずれかの平面に投影され、複数のパッチを生成する。パッチ生成部101は、3Dバウンディングボックスに関する情報(座標、サイズなど)、投影面へのマッピングに関する情報(各パッチの投影面、座標、サイズ、回転有無など)をアトラス情報として出力する。
【0217】
アトラス情報符号化部102は、パッチ生成部101から出力されるアトラス情報を符号化しアトラス情報符号化ストリームを出力する。アトラス情報符号化部102は、上記SEIを適用するatlasIDの値をnnpfa_atlas_idに設定する。
【0218】
オキュパンシマップ生成部103は、パッチ生成部101から出力されるパッチの集合を入力し、各パッチの有効領域(3Dデータが存在する領域)を2Dバイナリ画像(例えば有効領域を1、無効領域を0)として示したオキュパンシマップを生成する(
図3(b))。なお有効領域、無効領域の値は255と0など別の値を用いてもよい。
【0219】
オキュパンシマップ符号化部104は、オキュパンシマップ生成部103から出力されるオキュパンシマップを入力し、オキュパンシマップ符号化ストリーム、及び符号化オキュパンシマップを出力する。符号化方式としては、VVCやHEVCなどを用いる。
【0220】
ジオメトリ画像生成部105は、3Dデータ、オキュパンシマップ、符号化オキュパンシマップ、及びアトラス情報に基づき、各パッチの投影面に対するデプス値を格納したジオメトリ画像を生成する(
図3(c))。ジオメトリ画像生成部105は、画素g(x,y)に投影されるポイントのうち投影面に対するデプスが最小のポイントをp_min(x,y,z)として導出する。また、画素g(x,y)に投影されp_min(x,y,z)から所定の距離dにあるポイントのうちデプスが最大のポイントをp_max(x,y,z)として導出する。投影面のすべての画素に対してp_min(x,y,z)を投影したジオメトリ画像をNearレイヤのジオメトリ画像(
図4の画像0,2,4,…,2N)に設定する。投影面のすべての画素に対してp_max(x,y,z)を投影したジオメトリ画像をFarレイヤのジオメトリ画像(
図4の画像1,3,5,…,2N+1)に設定する。
【0221】
ジオメトリ画像符号化部106は、ジオメトリ画像を入力し、ジオメトリ画像符号化ストリーム、及び符号化ジオメトリ画像を出力する。符号化方式としては、VVCやHEVCなどを用いる。ジオメトリ画像符号化部106は、Nearレイヤのジオメトリ画像を画面内ピクチャ(Iピクチャ)、Farレイヤのジオメトリ画像を画面間ピクチャ(PピクチャもしくはBピクチャ)として符号化してもよい。
【0222】
アトリビュート画像生成部108は、3Dデータ、符号化オキュパンシマップ、符号化ジオメトリ画像及びアトラス情報に基づき、各パッチの投影面に対するカラー情報(例えば、YUV値、RGB値など)を格納したアトリビュート画像を生成する(
図3(d))。アトリビュート画像生成部108は、ジオメトリ画像生成部106によって算出されたデプスが最小のポイントp_min(x,y,z)に対応するアトリビュートの値を求め、その値を投影したアトリビュート画像をNearレイヤのアトリビュート画像(
図4の画像0,2,4,…,2N)に設定する。p_max(x,y,z)に対しても同様に求めたアトリビュート画像をFarレイヤのアトリビュート画像(
図4の画像1,3,5,…,2N+1)に設定する。
【0223】
アトリビュート画像符号化部109は、アトリビュート画像を入力し、アトリビュート画像符号化ストリーム、及び符号化アトリビュート画像を出力する。符号化方式としては、VVCやHEVCなどを用いる。アトリビュート画像符号化部109は、Nearレイヤのアトリビュート画像をIピクチャ、Farレイヤのアトリビュート画像をPピクチャもしくはBピクチャとして符号化してもよい。アトリビュート画像符号化部109は、上記SEIに、nnpfa_attribute_countの値を設定する。
【0224】
アトリビュート画像フィルタパラメータ導出部110は、符号化アトリビュート画像とオリジナルのアトリビュート画像を入力し、ニューラルネットワークベースのフィルタ処理において最適なフィルタパラメータを選択もしくは導出し、出力する。
アトリビュート画像フィルタパラメータ導出部110は、上記SEIに、nnpfa_enabled_flag, nnpfa_target_id, nnpfa_weight_block_size_idx, nnpfa_weight_map_width_minus1, nnpfa_weight_map_height_minus1, nnpfa_weight_mapの値を設定する。さらにnnpfa_strength_block_size_idx, nnpfa_strength_map_width_minus1, nnpfa_strength_map_height_minus1, nnpfa_strength_mapの値を設定してもよい。
【0225】
多重化部111は、アトリビュート画像フィルタパラメータ導出部110から出力されるフィルタパラメータを入力し、所定のフォーマットで出力する。所定のフォーマットとは、例えば、映像データの補助拡張情報であるSEI、V3C規格におけるデータ構造の指定情報であるASPS、AFPS、メディアファイルフォーマット規格であるISOBMFFなどである。多重化部111は、また、アトラス情報符号化ストリーム、オキュパンシマップ符号化ストリーム、ジオメトリ画像符号化ストリーム、アトリビュート画像符号化ストリーム、および、上記フィルタパラメータを多重化して符号化データとして出力する。多重化方式としては、バイトストリームフォーマット、ISOBMFFなどを用いる。
【0226】
以上、図面を参照してこの発明の一実施形態について詳しく説明してきたが、具体的な構成は上述のものに限られることはなく、この発明の要旨を逸脱しない範囲内において様々な設計変更等をすることが可能である。
【0227】
本発明の実施形態は上述した実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能である。すなわち、請求項に示した範囲で適宜変更した技術的手段を組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【産業上の利用可能性】
【0228】
本発明の実施形態は、3Dデータが符号化された符号化データを復号する3Dデータ復号装置、および、3Dデータが符号化された符号化データを生成する3Dデータ符号化装置に好適に適用することができる。また、3Dデータ符号化装置によって生成され、3Dデータ復号装置によって参照される符号化データのデータ構造に好適に適用することができる。
【符号の説明】
【0229】
11 3Dデータ符号化装置
101 パッチ生成部
102 アトラス情報符号化部
103 オキュパンシマップ生成部
104 オキュパンシマップ符号化部
105 ジオメトリ画像生成部
106 ジオメトリ画像符号化部
108 アトリビュート画像生成部
109 アトリビュート画像符号化部
110 アトリビュート画像フィルタパラメータ導出部
111 多重化部
21 ネットワーク
31 3Dデータ復号装置
301 ヘッダ復号部
302 アトラス情報復号部
303 オキュパンシマップ復号部
304 ジオメトリ画像復号部
306 ジオメトリ再構成部
307 アトリビュート画像復号部
308 アトリビュート画像フィルタ部
309 アトリビュート再構成部
310 3Dデータ再構成部
41 3Dデータ表示装置