(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024178992
(43)【公開日】2024-12-26
(54)【発明の名称】3Dデータ符号化装置および3Dデータ復号装置
(51)【国際特許分類】
H04N 19/70 20140101AFI20241219BHJP
H04N 19/85 20140101ALI20241219BHJP
【FI】
H04N19/70
H04N19/85
【審査請求】未請求
【請求項の数】11
【出願形態】OL
(21)【出願番号】P 2023097460
(22)【出願日】2023-06-14
【国等の委託研究の成果に係る記載事項】(出願人による申告)令和4年度、総務省、「戦略的情報通信研究開発推進事業(国際標準獲得型(5G高度化))/3次元空間データの無線伝送に向けた高能率圧縮技術の研究開発」、産業技術力強化法第17条の適用を受ける特許出願
(71)【出願人】
【識別番号】000005049
【氏名又は名称】シャープ株式会社
(74)【代理人】
【識別番号】100157200
【弁理士】
【氏名又は名称】野口 茂孝
(72)【発明者】
【氏名】高田 圭一郎
(72)【発明者】
【氏名】徳毛 靖昭
(72)【発明者】
【氏名】猪飼 知宏
(72)【発明者】
【氏名】中條 健
(72)【発明者】
【氏名】青野 友子
【テーマコード(参考)】
5C159
【Fターム(参考)】
5C159LA02
5C159PP03
5C159PP04
5C159PP13
5C159RC11
5C159UA02
5C159UA05
(57)【要約】
【課題】複数の画像を用いる3次元データに対して好適なリファインメントを適用できない。
【解決手段】符号化データを復号しアトリビュート情報を含む3Dデータを復号する3Dデータ復号装置において、リファインメントの特性情報とリファインメントのアクティブ化情報を復号するヘッダ復号部と、属性フレームもしくは幾何フレームのリファイン処理を行うリファイン部を備え、オキュパンシ、ジオメトリ、アトリビュートのいずれかを用いるかを示すリファイン対象情報を上記特性情報の符号化データから復号し、リファイン対象情報に応じて指定された画像を用いてリファインメントを行う。
【選択図】
図5
【特許請求の範囲】
【請求項1】
符号化データを復号しジオメトリとアトリビュートを含む3Dデータを復号する3Dデータ復号装置において、
上記符号化データからリファインメントの特性情報とリファインメントのアクティブ化情報を復号するリファイン情報復号部と、
上記符号化データから幾何フレームを復号するジオメトリ復号部と、
上記符号化データから属性フレームを復号するアトリビュート復号部と、
上記属性フレームもしくは幾何フレームのリファイン処理を行うリファイン部を備え、
上記リファイン情報復号部は、オキュパンシ、ジオメトリ、アトリビュートのいずれを用いるかを示すリファイン対象情報を上記特性情報の符号化データから復号し、リファイン対象情報に応じて指定された画像を用いてリファインメントを行うことを特徴とする3Dデータ復号装置。
【請求項2】
上記リファイン情報復号部は、上記リファイン対象情報がアトリビュートを用いることを示す場合には、さらに、リファイン対象情報として適用するアトリビュートの数を復号し、上記リファイン部は、指定された数のアトリビュートを用いてリファインを行うことを特徴とする請求項1に記載の3Dデータ復号装置。
【請求項3】
上記リファイン情報復号部は、上記リファイン対象情報として、オキュパンシ、ジオメトリ、アトリビュートを用いるかを示すシンタックス要素を個別に復号し、上記リファイン部は、オキュパンシ、ジオメトリ、アトリビュートが指定された場合には、それらを用いてリファインメントを行うことを特徴とする請求項1に記載の3Dデータ復号装置。
【請求項4】
上記リファイン情報復号部は、上記特性情報からさらに、適用対象となるマップIDを示す情報を復号し、上記リファイン部は、指定されたマップIDに対してリファインメントを行うことを特徴とする請求項1に記載の3Dデータ復号装置。
【請求項5】
上記リファイン情報復号部は、上記リファイン対象情報としてジオメトリもしくはアトリビュートを用いることを示す場合には、さらに、適用対象となるマップIDを示す情報を復号することを特徴とする請求項4に記載の3Dデータ復号装置。
【請求項6】
上記リファイン情報復号部は、上記リファイン対象情報として、アトリビュートを用いることを示す場合には、さらに、適用対象となるアトリビュートインデックス、パーティションインデックス、補助フラグを示す情報を復号することを特徴とする請求項4に記載の3Dデータ復号装置。
【請求項7】
上記リファイン情報復号部は、上記アクティブ化情報として、特性情報を示すインデックスと、キャンセルフラグと持続性フラグを復号することを特徴とする請求項1に記載の3Dデータ復号装置。
【請求項8】
上記リファイン情報復号部は、上記アクティブ化情報として、適用対象のマップIDを示す情報を復号し、上記リファイン部は、上記マップIDで指定されたジオメトリもしくはアトリビュートを用いてリファインメントを行うことを特徴とする請求項1に記載の3Dデータ復号装置。
【請求項9】
上記リファイン情報復号部は、上記アクティブ化情報として、適用対象のマップIDを示す情報を復号し、上記リファイン部は、上記マップIDで指定されたジオメトリもしくはアトリビュートを用いてリファインメントを行うことを特徴とする請求項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のISO/IEC 23090-5 V3C (Volumetric Video-based Coding) and V-PCC (Video-based Point Cloud Compression)が挙げられる。V3Cは、点の位置と属性(アトリビュート)情報から構成されるポイントクラウドの符号化、復号に利用される。さらに、ISO/IEC 23090-12 (MPEG Immersive Video、MIV)及び標準化中のISO/IEC 23090-29 (Video-based Dynamic Mesh Coding、V-DMC)により、多視点映像、メッシュ映像の符号化、復号にも利用される。また、非特許文献1のニューラルネットワークポストフィルタの補助拡張情報では、ニューラルネットワークのモデル情報を特性SEIで伝送し、適用SEIで指定したフレームに対して呼び出すことにより、点群データに対して適応的なフィルタ処理を可能にすることができる。
【先行技術文献】
【非特許文献】
【0004】
【非特許文献1】K.Takada, Y.Tokumo, T.Chujoh. T.Ikai,“[V-PCC][EE2.8] V3C neural-network post-filter SEI messages,” ISO/IEC JTC 1/SC 29/WG7, m61805, Jan. 2023
【発明の概要】
【発明が解決しようとする課題】
【0005】
非特許文献1では、アトリビュートに対してのみフィルタ処理を行うため、オキュパンシ、ジオメトリとアトリビュートの関係を利用したフィルタ処理ができないという課題があった。言い換えると複数の画像・映像を用いて3Dデータを復号する方法において、画像間の情報を用いたリファインメントができなかった。
【0006】
本発明は、動画像符号化・復号方式を用いた3Dデータの符号化・復号において、上記課題を解決し、リファインメントの補助情報を用いてさらに符号化歪を低減し、3Dデータを高品質に符号化・復号することを目的とする。
【課題を解決するための手段】
【0007】
上記の課題を解決するために、本発明の一態様に係る3Dデータ復号装置は、符号化データを復号しジオメトリとアトリビュートを含む3Dデータを復号する3Dデータ復号装置において、上記符号化データからリファインメントの特性情報とリファインメントのアクティブ化情報を復号するリファイン情報復号部と、上記符号化データから幾何フレームを復号するジオメトリ復号部と、上記符号化データから属性フレームを復号するアトリビュート復号部と、上記属性フレームもしくは幾何フレームのリファイン処理を行うリファイン部を備え、上記リファイン情報復号部は、オキュパンシ、ジオメトリ、アトリビュートのいずれを用いるかを示すリファイン対象情報を上記特性情報の符号化データから復号し、リファイン対象情報に応じて指定された画像を用いてリファインメントを行うことを特徴と
する。
【発明の効果】
【0008】
本発明の一態様によれば、カラー画像の符号化による歪を低減し、3Dデータを高品質に符号化・復号することができる。
【図面の簡単な説明】
【0009】
【
図1】本実施形態に係る3Dデータ伝送システムの構成を示す概略図である。
【
図2】符号化ストリームのデータの階層構造を示す図である。
【
図3】3Dデータ、オキュパンシ、幾何フレーム、属性フレームを説明するための図である。
【
図4】本発明の実施形態に係る特性SEIと適用SEIの関係を示す図である。
【
図5】本発明の実施形態に係る3Dデータ復号装置31の概略構成を示す機能ブロック図である。
【
図6】リファイン部306の構成を示す機能ブロック図である。
【
図7】本発明の実施形態に係る3Dデータ復号装置31の概略構成を示す機能ブロック図である。
【
図8】リファイン部306の構成を示す機能ブロック図である。
【
図9】SEIの復号処理を示したフローチャートである。
【
図10】リファイン部306の動作を示すフローチャートである。
【
図13】特性SEIのシンタックスの一部を示している。
【
図14】特性SEIのシンタックスの一部を示している。
【
図15】特性SEIのシンタックスの一部を示している。
【
図17】本発明の実施形態に係る3Dデータ符号化装置11の概略構成を示す機能ブロック図である。
【
図18】本発明の実施形態に係る3Dデータ符号化装置、3Dデータ復号装置とSEIメッセ
【
図19】適用SEIのシンタックス構成例を示す。ージの関係を示す図である。
【発明を実施するための形態】
【0010】
以下、図面を参照しながら本発明の実施形態について説明する。
【0011】
図1は、本実施形態に係る3Dデータ伝送システム1の構成を示す概略図である。
【0012】
3Dデータ伝送システム1は、符号化対象3Dデータを符号化した符号化ストリームを伝送し、伝送された符号化ストリームを復号し3Dデータを表示するシステムである。3Dデータ伝送システム1は、3Dデータ符号化装置11、ネットワーク21、3Dデータ復号装置31、及び3Dデータ表示装置41を含んで構成される。
【0013】
3Dデータ符号化装置11には3DデータTが入力される。
【0014】
ネットワーク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を記録した記憶媒体で代替されても良い。
【0015】
3Dデータ復号装置31は、ネットワーク21が伝送した符号化ストリームTeのそれぞれを復号し、復号した1または複数の復号3DデータTdを生成する。
【0016】
3Dデータ表示装置41は、3Dデータ復号装置31が生成した1または複数の復号3DデータTdの全部または一部を表示する。3Dデータ表示装置41は、例えば、液晶ディスプレイ、有機EL(Electro-luminescence)ディスプレイ等の表示デバイスを備える。ディスプレイの形態としては、据え置き、モバイル、HMD等が挙げられる。また、3Dデータ復号装置31が高い処理能力を有する場合には、画質の高い画像を表示し、より低い処理能力しか有しない場合には、高い処理能力、表示能力を必要としない画像を表示する。
【0017】
<演算子>
本明細書で用いる演算子を以下に記載する。
【0018】
>>は右ビットシフト、<<は左ビットシフト、&はビットワイズAND、|はビットワイズOR、|=はOR代入演算子であり、||は論理和を示す。
【0019】
x?y:zは、xが真(0以外)の場合にy、xが偽(0)の場合にzをとる3項演算子である
y..zは、yからzの整数の順序集合を示す。
【0020】
Floor(a)はa以下の最大の整数を返す関数である。
【0021】
<符号化ストリームTeの構造>
3Dデータ符号化装置11によって生成され、3Dデータ復号装置31によって復号される符号化ストリームTeのデータ構造について説明する。
【0022】
図2は、符号化ストリームTeにおけるデータの階層構造を示す図である。符号化ストリームTeは、V3C sample stream、V3C unit streamの何れかのデータ構造を有する。V3C sample streamは、sample stream headerとV3C unitを含むが、V3C unit streamはV3C unitを含む。
【0023】
V3C unitはV3C unit headerとV3C unit payloadを含む。V3C unitの先頭(=V3C unit header)はV3C unitの種類を示すIDであるUnit Typeであり、V3C_VPS、V3C_AD、V3C_AVD、V3C_GVD、V3C_OVDなどのラベルで示す値をとる。
【0024】
Unit TypeがV3C_VPS (Video Parameter Set)の場合には、V3C unit payloadはV3C parameter setを含む。
【0025】
Unit TypeがV3C_AD (Atlas Data、Atlasデータ)の場合には、V3C unit payloadはVPS
ID、atlasID、sample stream nal headerと複数のNAL unitを含む。IDはIdenficationの略であり0以上の整数値をとる。このatlasIDは、適用SEIの要素として利用してもよい。
【0026】
NAL unitはNALUnitTypeとlayerIDとTemporalIDとRBSP (Raw byte sequence payload)を含む。
【0027】
NAL unitはNALUnitTypeにより識別され、ASPS (Atlas Sequence Parameter Set)、AAPS
(Atlas Adaptation Parameter Set)、ATL (Atlas Tile layer)、SEI (Supplemental Enhancement Information)などを含む。
【0028】
ATLは、ATL headerとATL data unitを含み、ATL data unitは、patch information dataなどのパッチの位置、サイズなどの情報を含む。
【0029】
SEIは、SEIの種類を示すpayloadType、SEIのサイズ(バイト数)を示すpayloadSize、SEIのデータのsei_payloadを含む。
【0030】
UnitTypeがV3C_AVD (Attribute Video Data、アトリビュートデータ)の場合には、VPS ID、atlasID、属性フレームのIDのattrIdx(シンタックス名vuh_attribute_index)、パーティションIDのpartIdx(vuh_attribute_partition_index)、マップIDのmapIdx(vuh_map_index)、補助データ(Auxiliaryデータ)か否かを示すフラグauxFlag(vuh_auxiliary_video_flag)、video streamを含む。video streamはHEVCやVVCなどのデータを示す。
【0031】
UnitTypeがV3C_GVD (Geometry Video Data、ジオメトリデータ)の場合には、VPS ID、atlasID、mapIdx、auxFlag、video streamを含む。
【0032】
UnitTypeがV3C_OVD (Occupancy Video Data、オキュパンシデータ)の場合には、VPS ID、atlasID、video streamを含む。
【0033】
(3次元立体情報のデータ構造)
本明細書の3次元立体情報(3Dデータ)は、3次元空間上の位置情報(x, y, z)と属性(アトリビュート)情報の集合である。例えば3Dデータは、3次元空間上の位置情報とアトリビュート情報の点群であるポイントクラウド、三角形の頂点と面からなるメッシュ(もしくはポリゴン)形式で表現される。
【0034】
図3は、3Dデータ、オキュパンシフレーム(占有情報を表す2次元画像、以下占有フレーム)、幾何フレーム(奥行きまたは位置情報を表す2次元画像、以下幾何フレーム)、アトリビュートフレーム(属性情報を表す2次元画像、以下属性フレーム)を説明するための図である。3Dデータを構成するポイントクラウド及びメッシュは、3Dデータ符号化装置11によって、複数の部分(領域)に分割され、各部分に含まれる点群は3D空間上に設定された3Dバウンディングボックス(
図3(a))のいずれかの平面に投影される。3Dデータ符号化装置11は投影した点群から複数のパッチを生成する。3Dバウンディングボックスに関する情報(座標、サイズなど)、投影面へのマッピングに関する情報(各パッチの投影面、座標、サイズ、回転有無など)をアトラス情報と呼ぶ。占有フレームは、各パッチの有効領域(ポイントクラウド、メッシュが存在する領域)を2Dバイナリ画像(例えば有効領域を1、無効領域を0)として示す2次元画像である(
図3(b)。なお有効領域、無効領域の値は255と0など、0、1以外の値を用いてもよい。幾何フレームは、各パッチの投影面に対するデプス値(距離)を示す2次元画像である(
図3(c-1)(c-2))。デプス値と画素値の関係は線形であってもよいし、ルックアップテーブルや数式、または、値による分岐の組み合わせによる関係式により、画素値から距離を導出してもよい。属性フレームは、ポイントのアトリビュート情報(例えばRGBの色)を示す2次元画像である。(
図3(d-0)(d-1))。同じ方向の投影でも、物体表面の深さ(遠景と近景)が異なる場合があり、mapIdxは、どの深さの投影を行うかを示す。
【0035】
これら占有フレーム、幾何フレーム、属性フレーム、アトラス情報は、異なる投影面からの部分画像(パッチ)をある2次元画像上にマッピングした(パッキングした)画像であってもよい。アトラス情報は、パッチの数やパッチに対応する投影面の情報を含む。3Dデータ復号装置31は、アトラス情報、占有フレーム、幾何フレーム、属性フレームから、点群もしくはメッシュの座標とアトリビュート情報を再構成する。ここではポイントとは、ポイントクラウドの各点もしくはメッシュの頂点である。なお、占有フレーム、幾何フレームの代わりに、メッシュの頂点を示すメッシュ情報(位置情報)を符号化、復号、伝
送してもよい。またメッシュ情報は、メッシュの部分集合である基本メッシュを構成するベースメッシュと、メッシュ変位に分割して符号化、復号、伝送してもよい。メッシュ変位は基本メッシュ以外のメッシュを示すための、ベースメッシュからの変位である。
【0036】
<用語>
アトラス:矩形フレームに配置された2Dバウンディングボックスとその関連情報の収集(collection)で、ボリュメトリックデータがレンダリングされる3D空間のボリュームに対応する。
属性:色、反射率、表面法線、透明度、マテリアルIDなど、ボリュメトリックフレームの各ポイントに任意に関連付けられたスカラーまたはベクトルのプロパティ。
属性フレーム:特定の属性の値を含むパッチの集合体として作成される2次元の矩形配列。
属性マップ:対応するジオメトリマップによって示される特定の深さに投影された属性パッチ情報を含む属性フレーム。
ビットストリーム:データのコード化された表現を形成するビットの順序付けられたシリーズ。符号化データ。
CAS(Coded Atlas Sequence):復号順で0以上の1に等しいNoOutputBeforeRecoveryFlagのIRAP符号化アトラスAU(access unit)でない符号化アトラスAUが続く、1に等しいNoOutputBeforeRecoveryFlagのIRAP符号化アトラスAUの符号化アトラスAUの列。1に等しいNoOutputBeforeRecoveryFlagのIRAP符号化アトラスAUまでの後続のすべての符号化アトラスAUが含まれるが、その後の符号化アトラスAUは含まれない。
IRAP符号化アトラスAUはIDR(instantaneous decoding refresh)符号化アクセスユニット、BLA(broken link access)符号化アクセスユニット、CRA(clean random access)符号化アクセスユニットのいずれかであってもよい。
ジオメトリ:ボリュメトリックフレームに関連するデカルト座標のセット。
幾何フレーム:各パッチに関連するジオメトリパッチ情報を集約して作成される2D配列。ジオメトリマップ:特定の深さに投影されたジオメトリパッチ情報を含む幾何フレーム。オキュパンシ:アトラスサンプルが3D空間において関連するサンプルに対応しているかどうかを示す値。
占有フレーム:2D配列を構成するオキュパンシ値の集まりで、1つのアトラスフレームの全オキュパンシを表す。
パッチ:アトラス内の体積情報に関連する矩形領域。
【0037】
(特性SEIと適用SEIの概要)
図4(a)は本発明の実施形態に係るリファイン特性SEI(以下特性SEI、nn_refinement_characteristics SEI、NNRC_SEI、特性情報)とリファイン適用SEI(以下適用SEI、nn_refinement_activation SEI、NNRA_SEI、アクティブ化SEI、アクティブ化情報)の関係を示す図である。NNC復号部は、特性SEIで伝送される圧縮されたNN(ニューラルネットワーク)モデルを復号し、NNモデルを導出する。NNモデルの符号化、復号には、MPEG Neural Network Coding (ISO/IEC 15938-19)を用いてもよい。リファイン部306はNNフィルタ部611を備え、NNフィルタ部611は、導出されたNNモデルを用いたフィルタ処理を行う。NNフィルタ部611の詳細は後述する。リファインに用いる特性SEIは、適用SEIのシンタックス要素、例えば、nnra_target_idによって指定される。適用SEIは、シンタックス要素を用いて持続性情報を伝送し、持続性情報で指定される持続期間において属性フレームにフィルタ処理を行うことを指定する。なお、NNフィルタ部611は、NNC復号部を備えてもよい。適用SEI(アクティブ化情報)は、
図16のSEIに限定されず、NAL unitや、アトラスデータを含むデータであってもよい。
【0038】
図4(b)は本発明の実施形態に係るリファイン特性SEIとリファイン適用SEIの関係を示す別の図である。リファイン部306は線形フィルタ部(ALF部)610を備える。フィルタパラ
メータ復号部は、特性SEIで伝送されるフィルタパラメータのシンタックスを復号し、線形フィルタの係数を導出する。ループフィルタに限定されず、ポストフィルタであってもよい。また、線形と記載するが簡単なクリップや2乗成分などの非線形要素を含んでいてもよい。ALF部610は、導出された線形モデルを用いた属性フレームあるいは幾何フレームにフィルタ処理を行う。
【0039】
(3Dデータ復号装置の構成)
図5、
図7は、本発明の実施形態に係る3Dデータ復号装置31の概略構成を示す機能ブロック図である。
【0040】
3Dデータ復号装置31は、V3Cユニット復号部301、アトラス復号部302(リファイン情報復号部)、オキュパンシ復号部303、ジオメトリ復号部304、アトリビュート復号部305、ポスト復号変換部308、プリ再構築部310、再構成部311、ポスト再構築部312から構成される。
【0041】
V3Cユニット復号部301は、バイトストリーム形式、ISO Base Media File Format(ISOBMFF)等の符号化データ(ビットストリーム)を受け取り、V3CユニットヘッダとV3C VPSの復号を行う。V3Cユニット復号部301は、V3CユニットヘッダのUnitTypeに応じて、アトラス復号部302、オキュパンシ復号部303、ジオメトリ復号部304、アトリビュート復号部305を選択する。UnitTypeがV3C_ADの場合はアトラス復号部302を使用し、同様にUnitTypeがV3C_OVD、V3C_GVD、V3C_AVDの場合はオキュパンシ復号部303、ジオメトリ復号部304、アトリビュート復号部305を用いてそれぞれ占有フレーム、幾何フレーム、属性フレームを復号する。
【0042】
アトラス復号部302は、アトラスデータを受信し、アトラス情報を復号する。
【0043】
アトラス復号部302(リファイン情報復号部)は、符号化データから、リファイン処理の特性を示す特性SEIを復号する。リファイン情報復号部は、リファインメントの適用対象の情報(リファイン対象情報)を復号する。さらに、アトラス復号部302は、符号化データから適用SEIを復号する。
【0044】
アトラス復号部302は適用SEIを含むV3C unitからリファインメントの適用対象を示す対象アトラス情報を示す識別子atlasIDを復号する。
【0045】
オキュパンシ復号部303は、VVC、HEVCなどで符号化された占有データを復号し、占有フレームDecOccFrames[frameIdx][compIdx][y][x]を出力する。ここで、DecOccFrames、frameIdx、compIdx、y、xはそれぞれ、復号された占有フレーム、フレームID、コンポーネントID、行インデックス、列インデックスを示す。DecOccFramesではcompIdx=0であってもよい。
【0046】
ジオメトリ復号部304は、VVC、HEVCなどで符号化されたジオメトリデータを復号し、幾何フレームDecGeoFrames[mapIdx][frameIdx][compIdx][y][x]を出力する。ここで、DecGeoFrames、frameIdx、mapIdx、compIdx、y、xはそれぞれ、復号された幾何フレーム、フレームID、マップID、コンポーネントID、行インデックス、列インデックスを示す。DecGeoBitDepth, DecGeoHeight, DecGeoWidth, DecGeoChromaFormatは、幾何フレームのビット深度、幾何フレームの高さ、幾何フレームの幅、幾何フレームのクロマフォーマットと表記される。復号された幾何フレームは、複数のジオメトリマップ(異なる深度投影を持つ幾何フレーム)を含むことがあり、mapIdxはマップを区別するために使用される。DecGeoFramesではcompIdx=0であってもよい。
【0047】
アトリビュート復号部304は、VVC、HEVC等で符号化されたアトリビュートデータを復号し、属性フレームDecAttrFrames[attrIdx][partIdx][mapIdx][frameIdx][compIdx][y][x]を出力する。ここで、DecAttrFrames、frameIdx、attrIdx、partIdx、mapIdx、compIdx、y、xはそれぞれ、復号された属性フレーム、フレームID、アトリビュートID、パーティションID、マップID、コンポーネントID、行インデックス、列インデックスを示す。DecAttrBitDepth, DecAttrHeight, DecAttrWidth, DecAttrChromaFormatは、属性フレーム、属性フレームのビット深度、属性フレームの高さ、属性フレームの幅、属性フレームのクロマフォーマットとして示される。復号された属性フレームは、複数の属性マップ(異なる深度投影の属性フレーム)を含む場合があり、マップを区別するためにmapIdxが使用される。復号された属性フレームは、色(R、G、B)、反射、アルファ、法線方向などの複数の属性から構成される。そして、複数の属性は、複数のアトリビュートデータで伝送することができ、それらを区別するためにattrIdxが用いられる。例えば、{R、G、B}はアトリビュートデータ0(attrIdx=0)、{反射}はアトリビュートデータ1(attrIdx=1)、{アルファ}はアトリビュートデータ2(attrIdx=2)である。属性は、複数のビットストリームに分割して伝送することができ、partIdxはそれらを区別するために使用される。mapIdxは前述の通りである。
【0048】
ポスト復号変換部308は、復号されたアトラス情報、復号された占有フレームDecOccFramesと復号された幾何フレームDecGeoFramesと復号された属性フレームDecAttrFramesを受けて、それらをノミナル(nominal)フォーマットに変換する。占有フレーム、幾何フレーム、属性フレームのノミナルフォーマットのOccFramesNF[frameIdx][CompTimeIdx][y][x]、GeoFramesNF[mapIdx][CompTimeIdx][frameIdx][y][x]、AttrFramesNF[attrIdx][mapIdx][CompTimeIdx][compIdx][y][x]が出力される。ここで、frameIdx、CompTimeIdx、y、x、mapIdx、attrIdx、compIdxはそれぞれ、フレームID、合成時間のインデックス、行インデックス、列インデックス、マップID、アトリビュートID、コンポーネントIDを示す。
【0049】
ノミナルフォーマットは、復号された映像が変換されるべきノミナルビット深度、解像度、クロマフォーマット、および構成時間インデックスを総称して指す。
各映像サブビットストリーム及びパックされた映像サブビットストリームの各領域は、ノミナルビット深度と関連付けられる。これは再構成のための全ての操作で予想される目標ビット深度である。オキュパンシビット深度のノミナルビット深度OccBitDepthNFは、oi_occupancy_2d_bit_depth_minus1[ConvAtlasID]+1、またはpin_occupancy_2d_bit_depth_minus1[ConvAtlasID]+1に設定される。oi_occupancy_2d_bit_depth_minus1[j]+1は、atlasID=jのアトラスの占有フレームが変換されるべきノミナル2Dビット深度を示す。pin_occupancy_2d_bit_depth_minus1[j]+1は、atlasID=jのアトラスのオキュパンシデータを含む復号領域が変換されるノミナル2Dビット深度を示す。pin_occupancy_present_flag[j]が0に等しい場合、atlasID=jのアトラスのパックされた映像フレームがオキュパンシデータを持つ領域を含まないことを示す。pin_occupancy_present_flag[j]が1に等しい場合、atlasID=jのアトラスのパックされた映像フレームにオキュパンシデータを持つ領域があることを示す。pin_occupancy_present_flag[j]が存在しない場合、その値は0に等しいと推定される。各幾何フレームのノミナルビット深度GeoBitDepthNFは、pin_geometry_present_flag[ConvAtlasID]が1に等しい場合、gi_geometry_2d_bit_depth_minus1[ConvAtlasID]+1またはpin_geometry_2d_bit_depth_minus1[ConvAtlasID]+1に設定する。gi_geometry_2d_bit_depth_minus1[j]+1は、atlasID=jのアトラスのすべての幾何フレームが変換されるノミナル2Dビット深度を示す。pin_geometry_2d_bit_depth_minus1[j]+1は、atlasID=jのアトラスのジオメトリデータを含む復号領域が変換されるノミナル2Dビット深度を示す。pin_geometry_present_flag[j]=0は、atlasID=jのアトラスのパックされた映像フレームにジオメトリデータ付き領域が含まれないことを示す。pin_geometry_present_flag[j]=1は、atlasID=jのアトラスのパックされた映像フレームにジオメトリデータ付き領域があることを示す。pin_geometry_present_flag[j]が存在しない場合、その値は0に等しいと
推論される。最後に、pin_attribute_present_flag[ConvAtlasID]=1の場合、attrIdxを有する各属性フレームのノミナルビット深度AttrBitDepthNF[attrIdx]は、ai_attribute_2d_bit_depth_minus1[ConvAtlasID][attrIdx]+1又はpin_attribute_2d_bit_depth_minus1[ConvAtlasID][attrIdx]に設定する。ai_attribute_2d_bit_depth_minus1[j][i]に1を加えたものは、atlasID=jのアトラスについて、attrIdx=iをもつ全ての属性フレームが変換されるノミナル2次元ビット深度を示す。pin_attribute_2d_bit_depth_minus1[j][i]に1を加えたものは、atlasID=jのアトラスについて、attrIdx=iの属性を含む領域が変換されるノミナル2次元ビット深度を示す。pin_attribute_present_flag[j]=0はatlasID=jのアトラスのパックされた映像フレームがアトリビュートデータの領域を含まないことを示す。pin_attribute_present_flag[j]=1はatlasID=jのアトラスのパックされた映像フレームがアトリビュートデータの領域を含むことを示す。
【0050】
ConvAtlasIDはvuh_atlas_idと等しく設定されるか、V3Cユニットヘッダが利用できない場合、外部手段で決定される。vuh_atlas_idは、V3C_AD、V3C_OVD、V3C_GVD、V3C_AVDなどのV3Cユニットヘッダで示され、現在のV3Cユニットに対応するアトラスのIDを指定する。
【0051】
asps_frame_widthはアトラスのフレーム幅を整数個のサンプル数で表し、サンプルは映像コンポーネントの輝度サンプルに対応するものである。asps_frame_widthは、vps_frame_width[j](jは現在のatlasID)の値と等しいことがV3Cビットストリーム準拠の要件である。asps_frame_heightは、アトラスのフレーム高さを整数のサンプル数で示し、サンプルは映像コンポーネントの輝度サンプルに相当する。asps_frame_heightの値がvps_frame_height[j]の値と等しいことがV3Cビットストリームコンフォーマンスの要件であり、ここでjは現在のatlasIDを示す。補助映像コンポーネントのノミナルフレーム解像度は、変数AuxVideoWidthNF及びAuxVideoHeightNFでそれぞれ指定されるノミナル幅及び高さで定義される。AuxVideoWidthNFとAuxVideoHeightNFは、アトラスに関連する補助映像サブビットストリームから得られる。
【0052】
ノミナルクロマフォーマットは、4:4:4と定義される。
【0053】
ポスト復号変換部308は、ビット深度変換、解像度変換、出力順序変換、アトラスコンポジションアライメント、アトラスディメンションアライメント、クロマアップサンプリング、ジオメトリマップ合成、属性マップ合成からなる。V3C復号部309から提供された映像フレームは、再構成プロセスに入力される前に、追加の処理ステップを必要とする場合がある。そのような処理ステップは、復号されたフレームのノミナルフォーマット(例えば、解像度、ビット深度、クロマフォーマットなど)への変換を含み得る。ノミナルフォーマットの情報は、V3C VPSにおいてシグナリングされる。
【0054】
プリ再構成部310は、復号されたアトラス情報、復号された占有フレームと復号された幾何フレームと復号された属性フレームを受け取り、それらをリファインメント/修正することができる。具体的には、オキュパンシ合成フラグos_method_type[k]がパッチボーダーフィルタリング法(patch border filtering)を示す1に等しい場合、OccFramesNF[compTimeIdx][0]およびGeoFramesNF[0][compTimeIdx][0]を入力、修正された配列OccFramesNF[compTimeIdx][0]を出力としてオキュパンシ合成が起動する。OccFramesNFはノミナルフォーマットで復号された占有フレームを示し、GeoFramesNFはノミナルフォーマットで復号された幾何フレームを示す。compTimeIdxは合成時間のインデックスである。
【0055】
リファイン部306は、プリ再構成部310の内部で、オキュパンシ、ジオメトリ、アトリビュートに対してフレーム単位でリファインメントを行う。リファインメントは、オキュパンシ、ジオメトリ、アトリビュートのいずれかを入力して、オキュパンシ、ジオメトリ、
アトリビュートのいずれかを出力するフィルタであってもよい。リファイン部306は、2次元のオキュパンシ、ジオメトリ、アトリビュートを同時に用いてリファイン処理を行ってもよい。
【0056】
さらに、リファイン部306はNNフィルタ部611もしくはALF部610を備え、伝送されたニューラルネットワークパラメータもしくは線形パラメータに基づきフィルタ処理を行ってもよい。
【0057】
再構成部311は、アトラス情報、オキュパンシ、ジオメトリを入力し、3D空間における頂点もしくは点群の位置、属性もしくはメッシュを再構成する。再構成部311は、再構成されたジオメトリ情報(例えばrecPcGeo)及びアトリビュート情報(例えばrecPcAttr)に基づき、3Dデータのポイントクラウドデータもしくはメッシュを再構成する。具体的には、再構成部311は、プリ再構成部310で導出されたノミナル映像フレーム、OccFramesNF[compTimeIdx][0][y][x]、GeoFramesNF[mapIdx][compTimeIdx][0][y][x]およびAttrFramesNF[attrIdx][mapIdx][compTimeIdx][ch][y][x]を入力して3Dデータの点群データやメッシュを再構築する。AttrFramesNFは、ノミナルフォーマットで復号された属性フレームを示す。再構成部311は、再構成された点群フレームの点数として変数pointCnt、再構成された各点に対応するパッチインデックスとして1次元配列pointToPatch[pointCnt]、再構成された各点に対応するアトラス座標として2次元配列pointToPixel[pointCnt][dimIdx]を導き出す。各再構築点に対応する座標のリストとして2D配列recPcGeo[pointCnt][dimIdx]、再構成された点群フレーム内の点に関連する属性として3D配列recPcAttr[pointCnt][attrIdx][compIdx]がある。ここで、pointCnt、attrIdx、compIdxは、それぞれ、再構成された点のサイズ、属性フレームのID、コンポーネントIDに対応する。dimIdxは再構成された各点の(x,y)成分を表わす。
具体的には、再構成部311は、recPcGeoおよびrecPcAttrを以下のように導出する。
m = 0
for(k=0; k<3; k++) {
for(pointIdx=0; pointIdx<AtlasPatchRawPoints[pIdx]; pointIdx++) {
y = AtlasPatch2dPosY[pIdx] + (m / AtlasPatch2dSizeX[pIdx])
x = AtlasPatch2dPosX[pIdx] + (m % AtlasPatch2dSizeX[pIdx])
rawPos1D[m] = gFrame[mapIdx][y][x]
m++
}
}
for(pointIdx=0; pointIdx<AtlasPatchRawPoints[pIdx]; pointIdx++) {
recPcGeo[pointCnt][0] = rawPos1D[pointIdx] + AtlasPatch3dOffsetU[pIdx]
recPcGeo[pointCnt][1] = rawPos1D[pointIdx + AtlasPatchRawPoints[pIdx]] + AtlasPatch3dOffsetV[pIdx]
recPcGeo[pointCnt][2] = rawPos1D[pointIdx + 2 * AtlasPatchRawPoints[pIdx]] + AtlasPatch3dOffsetD[pIdx]
y = AtlasPatch2dPosY[pIdx] + (pointIdx / AtlasPatch2dSizeX[pIdx])
x = AtlasPatch2dPosX[pIdx] + (pointIdx % AtlasPatch2dSizeX[pIdx])
for(attrIdx=0; attrIdx<ai_attribute_count[RecAtlasID]; attrIdx++) {
attrDim = ai_attribute_dimension_minus1[RecAtlasID][attrIdx] + 1
for(compIdx=0; compIdx<attrDim; compIdx++) {
recPcAttr[pointCnt][attrIdx][compIdx] = aFrame[attrIdx][compIdx][y][x]
}
}
if(ai_attribute_count[RecAtlasID]>0) { attrPresent[pointCnt] = 1
}
pointToPixel[pointCnt][0] = -1
pointToPixel[pointCnt][1] = -1
pointToPatch[pointCnt] = pIdx
pointCnt++
}
ここで、pIdxはパッチのインデックスである。compTimeIdxは合成時間インデックス、rawPos1Dは1次元位置、gFrame, aFrameはそれぞれ幾何フレーム、アトリビュートフレームを表す。TilePatch3dOffsetUは、パッチから関連するタイルパッチパラメータである。ai_attribute_count[j]は、atlasID=jのアトラスに関連する属性の数を示している。AtlasPatch3dOffsetU、AtlasPatch3dOffsetV、AtlasPatch3dOffsetDは
図3(a)の3Dバウンディングボックスの3Dモデル上の位置を示すパラメータである。
【0058】
for(k=0; k<3; k++) {
for(pointIdx=0; pointIdx<AtlasPatchRawPoints[pIdx]; pointIdx++) {
y = AtlasPatch2dPosY[pIdx] + (m / AtlasPatch2dSizeX[pIdx])
x = AtlasPatch2dPosX[pIdx] + (m % AtlasPatch2dSizeX[pIdx])
rawPos1D[m] = gFrame[mapIdx][y][x]
m++
}
}
ここで、AtlasPatchRawPoints、AtlasPatch2dPosX、AtlasPatch2dPosY、AtlasPatch2dSizeX、AtlasPatch2dSizeYはアトラス復号部302でアトラス情報から導出したパッチ情報。配列oFrame[y][x]、gFrame[mapIdx][y][x]、aFrame[mapIdx][attrIdx][compTimeIdx][y][x]は、次のように導出される:
for(j=0; j<asps_frame_height; j++) {
for(i=0; i<asps_frame_width; i++) {
oFrame[j][i] = OccFramesNF[compTimeIdx][0][j][i] for(m=0; m<asps_map_count_minus1+1; m++) {
gFrame[m][j][i] = GeoFramesNF[m][compTimeIdx][0][j][i]
for(a=0; a<ai_attribute_count[RecAtlasID]; a++) {
for(c=0; c<ai_attribute_dimension_minus1[RecAtlasID][a]+1; c++) {
aFrame[m][a][c][j][i] = AttrFramesNF[a][m][compTimeIdx][c][j][i]
}
}
}
}
}
ここで、ai_attribute_dimension_minus1+1は、V3C VPSでシグナリングされ、V3Cユニット復号部301で復号される属性の総次元数(すなわち、チャンネル数)を示す。asps_map_count_minus1+1は現在のアトラスのジオメトリデータとアトリビュートデータの符号化に用いるマップ数を示す。RecAtlasIDは復号されたアトラスのIDを示す。
【0059】
ポスト再構築部312は、再構築部311の処理後の3Dデータ点群データまたはメッシュを変更(更新)する。ポスト再構成部312は、現在のアトラスに関連する現在の点群フレームの再構成された点の数としてのpointCnt、ノミナルビット深度としての1次元配列attrBitDepth[]、oFrame[][]、recPcGeo[][]、recPcAttr[][][]を受けて、幾何学的平滑化を適用し、変更したrecPcGeo[][]、recPcAttr[][][]を出力する。
【0060】
(リファイン部306)
図6は、リファイン部306(306DEC)の構成を示す機能ブロック図である。
【0061】
リファイン部306(306DEC)は、オキュパンシ復号部303、ジオメトリ復号部304、アトリビュート復号部305で復号され、ポスト復号変換部308で変換される前のDecOccFrames、DecGeoFrames、DecAttrFramesにリファインメントを適用する。そして、リファイン後のDecOccFrames、DecGeoFrames、DecAttrFramesをポスト復号変換部308に出力する。
【0062】
リファイン部306は、リファイン対象情報に応じてDecOccFrames[0][frameIdx][y][x]、mapIdx、frameIdxごとのDecGeoFrames[mapIdx][frameIdx][0][y][x]、attrIdx、partIdx、mapIdx、frameIdx、compIdxごとのDecAttrFrames[attrIdx][partIdx][mapIdx][frameIdx][compIdx][y][x]を入力し、修正されたDecOccFrames、DecGeoFrames、DecAttrFramesが出力される。リファイン部306はリファイン対象情報に応じて出力をDecOccFrames[0][frameIdx][y][x]、DecGeoFrames[mapIdx][frameIdx][0][y][x]、DecAttrFrames[attrIdx][partIdx][mapIdx][frameIdx][compIdx][y][x]に格納する。
【0063】
リファイン部306は、asps_frame_height×asps_frame_widthの2次元配列oFrame、asps_frame_height×asps_frame_widthの2次元配列gFrame、(ai_attribute_dimension_minus1[RecAtlasID][attrIdx]+1)の3次元配列aFrameにリファインメント処理を行ってもよい。このとき、oFrame = DecOccFrames[0][frameIdx]、gFrame= DecGeoFrames[mapIdx][frameIdx][0]、aFrame= DecAttrFrames[attrIdx][partIdx][mapIdx][frameIdx]を入力してもよい。ここでattrIdx、mapIdxは、NNRC SEIを復号して得られる値nnrc_map_index、nnrc_attribute_indexでもよい。attrIdx=nnrc_attribute_index、mapIdx=nnra_map_index。frameIdxは合成時間のインデックスであるcompTimeIdxでもよい。
またattrIdx、mapIdxは、NNRA SEIを復号して得られる値nnra_map_index、nnra_attribute_indexでもよい。attrIdx=nnra_attribute_index、mapIdx=nnrc_map_index。以下同様。
【0064】
上記構成によれば、適用するネットワークモデル(フィルタの特性)を特性SEIで指定して、特性SEIに指定されたリファイン対象情報を用いて、オキュパンシ、ジオメトリ、アトリビュートのいずれかを指定し、複数の入力に対して同時にリファイン処理を適用するため画質が向上する効果を奏する。
【0065】
図7は、リファイン部306がノミナルフォーマットの画像信号(映像信号)にリファインメントを適用する例を示す。
【0066】
図8は、リファイン部306(306NF)の構成を示す機能ブロック図である。リファイン部306(306NF)は、リファイン対象情報に応じてポスト復号変換部308で変換されたノミナルフォーマットのOccFramesNF、GeoFramesNF、AttrFramesNFにリファインメントを各々適用し、適用後のOccFramesNF、GeoFramesNF、AttrFramesNFをプリ再構成部310に出力する。以下リファイン部306の処理を説明するが、リファイン部306DECの処理は、OccFramesNF、GeoFramesNF、AttrFramesNFを、
図6のDecOccFrames、DecGeoFrames、DecAttrFramesに置き換えて処理する。
【0067】
リファイン部306は、asps_frame_height×asps_frame_widthの2次元配列oFrame、asps_frame_height×asps_frame_widthの2次元配列gFrame、(ai_attribute_dimension_minus1[RecAtlasID][attrIdx]+1)の3次元配列aFrameにリファインメント処理を行ってもよい。このとき、oFrame = OccFramesNF[compTimeIdx][0]、gFrame= GeoFramesNF[mapIdx][compTimeIdx][frameIdx][0]、aFrame= AttrFramesNF[attrIdx][mapIdx][compTimeIdx]を入力してもよい。
【0068】
図10(a)において、リファイン対象情報がオキュパンシを示す場合(S3062I)、入力テンソルにオキュパンシを追加する(S3063I)。例えば以下の(式IN-OCC)を用いてもよい。
【0069】
ch = 0
if (OccupancyUsedFlag) { (式IN-OCC)
inputTensor[ch][yP+overlapSize][xP+overlapSize] = Inp(oFrame[yP][xP])
ch++
}
リファイン対象情報がジオメトリを示す場合(S3064I)、入力テンソルにジオメトリを追加する(S3065I)。例えば以下の(式IN-GEO)を用いてもよい。
【0070】
if (GeometryUsedFlag) { (式IN-GEO)
inputTensor[ch][yP+overlapSize][xP+overlapSize] = Inp(gFrame[yP][xP])
ch++
}
リファイン対象情報がアトリビュートを示す場合(S3066I)、入力テンソルにアトリビュートを追加する(S3067I)。例えば以下の(式IN-ATTR)を用いてもよい。
【0071】
if (AttributeUsedFlag) { (式IN-ATTR) inputTensor[ch][yP+overlapSize][xP+overlapSize] = Inp(aFrame[0][yP][xP]) ch++
inputTensor[ch][yP+overlapSize][xP+overlapSize] = Inp(aFrame[1][yP][xP]);
ch++
inputTensor[ch][yP+overlapSize][xP+overlapSize] = Inp(aFrame[2][yP][xP]);
ch++
上記構成によれば、適用するネットワークモデル(フィルタの特性)を特性SEIで指定する。特性SEIに指定されたリファイン対象情報を用いて、オキュパンシ、ジオメトリ、アトリビュートのいずれかを指定し、複数の入力に対して同時にリファイン処理を適用するため画質が向上する効果を奏する。
【0072】
(NNフィルタ部611)
NNフィルタ部611は、ニューラルネットワークを用いてフィルタ処理を行う。ニューラルネットワークは、ニューラルネットワークモデルで表現され、コンボリューション(Conv)を備えてもよい。
【0073】
ニューラルネットワークモデル(以下、NNモデル)とは、ニューラルネットワークの要素および結合関係(トポロジー)と、ニューラルネットワークのパラメータ(重み、バイアス)を意味する。なお、NNフィルタ部611は、トポロジーを固定して、フィルタ対象画像に応じてパラメータのみを切り替えても良い。また、ニューラルネットワークはカーネルサイズ、入力チャネル数、出力チャネル数で規定されるコンボリューションを備えてもよい。
【0074】
リファイン部306への入力をDecFrameとする。リファイン部306は入力画像DecFrameからNNフィルタ部611への入力InputTensorを導出し、NNフィルタ部611はinputTensorを用いてニューラルネットワークモデルによるフィルタ処理を行い、outputTensorを導出する。使用するニューラルネットワークモデルは、nnra_target_idに対応するモデルである。入力画像は、コンポーネントごとの画像であってもよいし、複数コンポーネントをそれぞれチャネルとして持つ画像であってもよい。
【0075】
NNフィルタ部611は、以下の処理を繰り返し適用してもよい。
【0076】
NNフィルタ部611は、層の数だけinputTensorとカーネルk[m][n][yy][xx]を畳み込み演算(conv,convolution)し、biasを加算した出力画像outputTensorを生成する。
ここで、mはinputTensorのチャネル数、nはoutputTensorのチャネル数、yyはカーネルkの高さ、xxはカーネルkの幅を示す。
【0077】
各層では、inputTensorからoutputTensorを生成する。
【0078】
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の周囲に必要な領域の幅あるいは高さである。
【0079】
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))である。
【0080】
次の層では得られたoutputTensorを新たなinputTensorとして、同様の処理を層の数だけ繰り返す。層と層の間には、activation層を設けてもよい。また、pooling層やスキップ結合を用いてもよい。最後に得られたoutputTensorからFilteredFrameを導出する。
【0081】
また、カーネルk[n][yy][xx]を用いて、Depth wise Convと呼ばれる以下の式で示す処理を行ってもよい。ここで、nn=0..n-1、xx=0..width-1、yy=0..height-1である。
【0082】
outputTensor[nn][yy][xx]=ΣΣ(k[nn][i][j]*inputTensor[mm][yy+j-of][xx+i-of]+bias[nn])
またActivateと呼ばれる非線形処理、たとえばReLUを用いてもよい。
ReLU(x) = x >= 0 ? x : 0
また以下の式に示すleakyReLUを用いてもよい。
【0083】
leakyReLU(x) = x >= 0 ? x : a*x
ここでaは1未満の所定の値、例えば0.1や0.125である。また整数演算を行うために上記の全てのk、bias、aの値を整数として、convの後に右シフトを行ってoutputTensorを生成してもよい。
【0084】
ReLUでは0未満の値に対しては常に0、それ以上の値に対しては入力値がそのまま出力される。一方、leakyReLUでは、0未満の値に対して、aで設定された勾配で線形処理が行われる。ReLUでは0未満の値に対する勾配が消失するため、学習が進みにくくなる場合がある。leakyReLUでは0未満の値に対する勾配が残され、上記問題が起こりにくくなる。また、上記leakyReLU(x)のうち、aの値をパラメータ化して用いるPReLUを用いてもよい。
【0085】
(NNフィルタ部611のフィルタ処理)
NNフィルタ部611は、占有フレームoFrame、幾何フレームgFrame、属性フレームaFrameの1つもしくは複数に基づき、NNフィルタ部611への入力データinputTensor[][][]を導出する。以下は、一構成例であり、後述の構成を用いても構わない。
【0086】
for(yP = -overlapSize; yP < blockHeight+overlapSize; yP++)
for(xP = -overlapSize; xP < blockWidth+overlapSize; xP++) {
yT = cTop + yP
xT = cLeft + xP
ch=0
if (OccupancyUsedFlag) { (式IN-OCC)
inputTensor[ch][yP+overlapSize][xP+overlapSize] = Inp(oFrame[yT][xT])
ch++
}
if (GeometryUsedFlag) { (式IN-GEO)
inputTensor[ch][yP+overlapSize][xP+overlapSize] = Inp(gFrame[yT][xT])
ch++
}
if (AttributeUsedFlag) { (式IN-ATTR)
inputTensor[ch][yP+overlapSize][xP+overlapSize] = Inp(aFrame[0][yT][xT]); ch++
inputTensor[ch][yP+overlapSize][xP+overlapSize] = Inp(aFrame[1][yT][xT]); ch++
inputTensor[ch][yP+overlapSize][xP+overlapSize] = Inp(aFrame[2][yT][xT]); ch++
}
}
}
if(nnrc_auxiliary_inp_idc == 1) {
inputTensor[ch][yP+overlapSize][xP+overlapSize] = InpS(nnra_strength_idc)
}
nnra_strength_idcは、入力テンソルに入力しリファインメントの強度を示すパラメータである。
なお、InpSampleVal(y, x, FrameHeight, FrameWidth, targetPic) {
if(y<0 || x<0 || y>=FrameHeight || x>=FrameWidth) {
sampleVal = 0
sampleVal = targetPic[Clip3(0, picHeight-1, y)][Clip3(0, picWidth-1, x)]}
} else {
sampleVal = targetPic[y][x]
}
を用いて以下で定義してもよい。Inp(oFrame[yT][xT])の代わりに画面境界処理をいれたInp(InSampleVal(yT,xT,FrameHeight,FrameWidth, oFrame))としてもよい。
Inp(gFrame[yT][xT])の代わりに画面境界処理をいれたInp(InSampleVal(yT,xT,FrameHeight,FrameWidth, gFrame))としてもよい。
Inp(aFrame[k][yT][xT])の代わりに画面境界処理をいれたInp(InSampleVal(yT,xT,FrameHeight,FrameWidth, aFrame[k]))としてもよい。k=0,1,2,…など。以下同様。
ここで、overlapSizeは、オーバーラップのサイズであり、特性SEIの符号化データから復号される値を用いてもよい。
【0087】
NNフィルタ部611は、NNフィルタ処理を行い、inputTensorからoutputTensorを導出する。下記のようにブロック(blockWidth x blockHeight)単位で、RefineFilter()で示すリファインメント処理(フィルタ処理)を行ってもよい。
【0088】
for(cTop=0;cTop<FrameHeight;cTop+=blockHeight)
for(cLeft=0;cLeft<FrameWidth;cLeft+=blockWidth){
DeriveInputTensors()
outputTensor=RefineFilter(inputTensor)
StoreOutputTensors()
}
ここで、DeriveInputTensors()は入力データ設定、StoreOutputTensors()は出力データ格納を示す関数である。FrameWidth, FrameHeightは入力データのサイズである。blockWidth、blockHeightはブロックの幅、高さである。以下にStoreOutputTensors()の処理の一例を示す。
【0089】
for(yP=0; yP<blockHeight; yP++)
for(xP=0; xP<blockWidth; xP++) {
yT = cTop + yP
xT = cLeft + xP
if (yT<FrameHeight && xT<FrameWidth)
ch=0
if (OccupancyUsedFlag) {
oFrame[yT][xT]=outputTensor[ch][yP+overlapSize][xP+overlapSize]
ch++
}
if (GeometryUsedFlag) {
gFrame[yT][xT]=outputTensor[ch][yP+overlapSize][xP+overlapSize]
ch++
}
if (AttributeUsedFlag) {
aFrame[0][yT][xT]=Out(outputTensor[ch][yP+overlapSize][xP+overlapSize]); ch++
aFrame[1][yT][xT]= Out(outputTensor[ch][yP+overlapSize][xP+overlapSize]); ch++
aFrame[2][yT][xT]= Out(outputTensor[ch][yP+overlapSize][xP+overlapSize]); ch++
}
}
(ALF部610)
なお、NNRA SEIの持続性情報、特性SEIの識別子で指定されるリファインメントは線形モデルを利用したフィルタ(Wiener Filter)を用いて行ってもよい。線形フィルタはALF部610でフィルタ処理をしてもよい。具体的には、フィルタ対象画像DecFrameを一定のサイズ(例えば4x4、1x1)の小領域(x=xSb..xSb+bSW-1, y=xSb..xSb+bSH-1)に分割する。(xSb,ySb)は小領域の左上座標、bSW,bSHは小領域の幅と高さである。そして、小領域単位で、フィルタ処理を行う。選択したフィルタ係数coeff[]を用いてDecFrameからリファインメント後の画像outFrameを導出する。
【0090】
outframe[cIdx][y][x] = Σ(coeff[i] * DecFrame[cIdx][y+ofy][x+ofx] + offset) >>
shift
ここでofx, ofyはフィルタ位置iに応じて定まる参照位置のオフセット。offset=1<<(shift-1)。shiftはフィルタ係数の精度に対応し6、7、8などの定数。
【0091】
なお、小領域単位で画像を分類し、導出された小領域のclassId(=classId[y][x])に応じてフィルタ係数coeff[classId][]を選択してフィルタ処理を行ってもよい。
【0092】
outframe[cIdx][y][x] = (Σ(coeff[classId][i] * DecFrame[cIdx][y+ofy][x+ofx] +
offset) >> shift
ここでDecFrame[ch]=inputTensor[ch][yP+overlapSize][xP+overlapSize]、つまり以下でもよい。
【0093】
ch=0
if (OccupancyUsedFlag) {
DecFrame[ch][yP+overlapSize][xP+overlapSize] = Out(oFrame[yP][xP])
ch++
}
if (GeometryUsedFlag) {
DecFrame[ch][yP+overlapSize][xP+overlapSize] = Out(gFrame[yP][xP])
ch++
}
if (AttributeUsedFlag) {
DecFrame[ch][yP+overlapSize][xP+overlapSize] = Out(aFrame[0][yP][xP]);
ch++
DecFrame[ch][yP+overlapSize][xP+overlapSize] = Out(aFrame[1][yP][xP]);
ch++
DecFrame[ch][yP+overlapSize][xP+overlapSize] = Out(aFrame[2][yP][xP]);
ch++
}
なおclassIdは、ブロック(1x1の場合画素)の活性度や方向性を用いて導出してもよい。例えば以下の差分絶対値和などから導出する活性度Actを用いて導出してもよい。
【0094】
classId=Act
なおActは以下で導出してもよい。
【0095】
Act=Σ|x-xi|
ただしi=0..7でxiは対象画素xの隣接画素を示す。隣接画素の方向はi=0..7に対する上下左右に、斜め45度の4方向を加えた8方向でもよい。また、
Act=Σ|-xl+2*x-xr|+Σ|-ya+2*x-yb|を用いてもよい。なお、l, r, a, bは各々left, right, above, belowの逆で、xの左右上下の画素を示す。なお、
Act=Min(Num-1, Act>>shift)
のようにshift値によって量子化した上で、NumA-1となるようにクリップしてもよい。
さらに方向性Dを用いて以下の式でclassIdを導出してもよい。
【0096】
classId=Act+D*NumA
ここで例えば、Act=0..NumA-1、D=0..4など。
【0097】
ALF部610はOutFrameをそのままFilteredFrameとして出力する。
【0098】
(適用SEIの復号とフィルタ適用)
図9は、3Dデータ復号装置の処理のフローチャートを示す図である。3Dデータ復号装置は、適用SEIメッセージの復号を含む以下の処理を行う。
【0099】
S6001:アトラス復号部302は適用SEIからnnra_cancel_flag、nnra_target_idを復号する。nnra_cancel_flagはnnrc_cancel_flagであってもよい。
【0100】
S6002:nnra_cancel_flagが1の場合にはnnra_cancel_flagの対象となるフレームに対して処理を終了する。nnra_cancel_flagが0の場合にはS6003へ進む。
【0101】
S6003:アトラス復号部302は適用SEIからnnra_persistence_flagを復号する。
【0102】
S6005:nnra_target_idと同じnnrc_idを有する特性SEIを特定し、特性SEIからNNモデルのパラメータを導出する。
【0103】
S6006:導出されたNNモデルのパラメータを用いてNNフィルタ部611、ALF部610でリファイン(フィルタ)処理を実行する。
【0104】
<シンタックスの構成例>
(ニューラルネットワークリファイン特性SEI)
図11は、nn_refinement_characteristics(payloadSize)(特性SEI)のシンタックスを示している。引数のpayloadSizeは、このSEIメッセージのバイト数を表している。
【0105】
特性SEIを適用する持続期間(Persistence scope)はCASである。つまり、CAS単位で適用されるSEIである。
【0106】
シンタックス要素nnrc_idは、特性SEIのIDを示す。適用SEIでは、適用したいリファイン特性を示す特性SEIのnnrc_idの値を対象ID(nnra_targe_id)として伝送することにより、適用するリファイン処理を指定する。
nnrc_mode_idcが0の場合は、このSEIメッセージがISO/IEC15938-17ビットストリームを含み、ベースNNRE(neural-network refinement)を指定するか、同じnnrc_id値のベースNNREからの更新であることを示す。
NNRC SEIメッセージが、現在のCAS内で特定のnnrc_id値を持つ、復号順で最初のNNRC SEIメッセージである場合、nnrc_mode_idcが1に等しければ、そのnnrc_id値に関するベースNNREがタグURIであるnnrc_tag_uriで識別されるフォーマットで、nnrc_uriで示すURIにより識別されるニューラルネットワークであると特定する。
NNRC SEIメッセージが、現在のCAS内で特定のnnrc_id値を持つ、復号順で最初のNNRC SEIメッセージでもなく、復号順で最初のNNRC SEIメッセージの繰返しでもない場合、かつ、nnrc_mode_idcが1に等しい場合、同じnnrc_id値を持つベースNNREに対する更新は、nnrc_uriで示すURIで定義されることを示す。nnrc_uriはタグURIのnnrc_tag_uriで識別されるフォーマットである。
nnrc_mode_idcの値は、本編に準拠したビットストリームにおいて、0から1の範囲(包括的)でなければならない。
このSEIメッセージが、現在のCAS内で特定のnnrc_id値を持つ、復号順で最初のNNRC SEIメッセージである場合、RefineFilter()は、ベースNNREと同じものが割り当てられる。
このSEIメッセージが、現在のCAS内で特定のnnrc_id値を持つ、復号順で最初のNNRCSEIメッセージでもなく、復号順で最初のNNRCSEIメッセージの繰り返しでもない場合、このSEIメッセージで定義された更新をベースNNREに適用してRefineFilter()を取得する。
更新は累積ではなく、各更新はベースNNREに適用される。ベースNNREは、現在のCAS内で特定のnnrc_id値を持つ最初のNNRC SEIメッセージ(復号順)で指定されるNNREである。
【0107】
nnrc_reserved_zero_bit_aは、本編に準拠したビットストリームにおいて0に等しくなければならない。デコーダは、nnrc_reserved_zero_bit_aが0でないNNRCSEIメッセージを無視しなければならない。
【0108】
nnrc_tag_uriは、nnrc_uriで指定された同じnnrc_id値を持つベースNNREまたはベースNNREに対する更新として使用されるニューラルネットワークのフォーマットと関連情報を識別する、IETFRFC4151に規定された構文とセマンティクスを持つタグURIを含む。
nnrc_tag_uriが"tag:iso.org,2023:15938-17"に等しいことは、nnrc_uriによって識別さ
れるニューラルネットワークデータがISO/IEC15938-17に準拠することを示す。
【0109】
nnrc_uriは、ベースNNREとして使用されるニューラルネットワーク、または同じnnrc_id値を持つベースNNREに対する更新を識別する、IETF Internet Standard66に規定された構文およびセマンティックを持つURIを含む。
【0110】
nnrc_property_present_flagが1に等しい場合は、入力フォーマット、出力フォーマット、および複雑性に関連する構文要素が存在することを示す。nnrc_property_present_flagが0である場合は、入力フォーマット、出力フォーマット、および複雑性に関連する構文要素が存在しないことを示す。
このSEIメッセージが、現在のCAS内で特定のnnrc_id値を持つ、復号順で最初のNNRC SEIメッセージであるとき、nnrc_property_present_flagは1に等しいものとする。
nnrc_property_present_flagが0に等しいとき、nnrc_property_present_flagが1に等しいときのみ存在しうるすべての構文要素の値で、それらの各々に対する推論値が指定されていないものは、このSEIが更新する基本NNREを含むNNRC SEIメッセージにおいて、それぞれ対応する構文要素と同じであることが推論される。
【0111】
1に等しいnnrc_base_flagは、SEIメッセージがベースNNREを指定することを示す。0に等しいnnrc_base_flagは、SEIメッセージがベースNNREに関連する更新を指定することを示す。存在しない場合、nnrc_base_flagの値は0に等しいと推論される。
nnrc_base_flagの値には、以下の制約が適用される:
-NNRC SEIメッセージが、現在のCAS内で特定のnnrc_id値を持つ、復号順で最初のNNRC SEIメッセージである場合、nnrc_base_flagの値は1に等しいものとする。
-NNRC SEIメッセージnnrcBが、現在のCAS内で特定のnnrc_id値を持つ、復号順で最初のNNRC SEIメッセージではなく、値nnrc_base_flagが1に等しい場合、NNRC SEIメッセージは、復号順で、同じnnrc_idの最初のNNRC SEIメッセージnnrcAの繰り返しである。すなわち、次のnnrcBのペイロードコンテンツは、nnrcAのそれと同じでなければならない。
NNRC SEIメッセージが、現在のCAS内で特定のnnrc_id値を持つ、復号順で最初のNNRC SEIメッセージではなく、その特定のnnrc_idを持つ最初のNNRC SEIメッセージの繰り返しでもないとき、以下が適用される:
-このSEIメッセージは、同じnnrc_id値を持つ復号順の先行するベースNNREに対する更新を定義する。
【0112】
-このSEIメッセージは、現在のCASの終了まで、または現在のCAS内で出力順に現在の復号済ピクチャに続き、現在のCAS内で特定のnnrc_id値を持つ復号順の後続NNRC SEIメッセージに関連付けられた復号されたピクチャを除くピクチャまでのどちらか早いほうの、出力順の現在の復号済ピクチャとそれに続くすべてのレイヤの復号済ピクチャに関連する。
【0113】
シンタックス要素nnrc_input_modeは、リファイン処理の対象(リファイン対象情報)を示す。リファイン対象情報は少なくともアトリビュートを含む。またジオメトリ、オキュパンシを含んでもよい。
【0114】
また、リファイン対象情報がアトリビュートを含むことを示す場合、アトリビュートの入力チャネルを指定してもよい。さらに、attrIDを指定してもよい。またジオメトリ、アトリビュートのmapIDをさらに指定してもよい。
【0115】
リファイン対象情報は、{オキュパンシ、アトリビュート}を選択するものでも、{ジオメトリ、アトリビュート}を選択するものでも、{オキュパンシ、、ジオメトリ、アトリビュート}を選択するものでもよい。リファイン対象情報は、複数のリファイン対象を重複して選択可能とすることを特徴とする。
【0116】
図12は、リファイン対象情報の一例を示す図である。図に示すように、nnrc_input_modeは、オキュパンシ、ジオメトリ、アトリビュートにリファインメントをするか否かを示すものであってもよい。Yはリファインを行うことを示し、-は行わないことを示す。nnrc_input_modeは最上位ビットがオキュパンシ、2番目のビットがジオメトリ、最下位ビットがアトリビュートを示す。
【0117】
0 リファインなし
1 アトリビュートをリファインする
2 ジオメトリをリファインする
3 ジオメトリとアトリビュートをリファインする
4 オキュパンシをリファインする
5 オキュパンシとアトリビュートをリファインする
6 オキュパンシとジオメトリをリファインする
7 オキュパンシとジオメトリとアトリビュートをリファインする
ビットワイズアンドの&4, &2, &1で各々、オキュパンシ、ジオメトリ、アトリビュートに適用するかを判定できる。
【0118】
OccupancyUsedFlag = (nnrc_input_mode&4)
GeometryUsedFlag = (nnrc_input_mode&2)
AttributeUsedFlag = (nnrc_input_mode&1)
ビット位置は上記に限定されない。
【0119】
OccupancyUsedFlag = (nnrc_input_mode&1)
GeometryUsedFlag = (nnrc_input_mode&2)
AttributeUsedFlag = (nnrc_input_mode&4)
でもよい。
リファインなしを含まず、以下のように定義してもよい。
【0120】
0 アトリビュートにリファイン
1 ジオメトリにリファイン
2 ジオメトリとアトリビュートにリファイン
3 オキュパンシにリファイン
4 オキュパンシとアトリビュートにリファイン
5 オキュパンシとジオメトリにリファイン
6 オキュパンシとジオメトリとアトリビュートにリファイン
この場合、
OccupancyUsedFlag = (nnrc_input_mode+1)&4
GeometryUsedFlag = (nnrc_input_mode+1)&2
AttributeUsedFlag = (nnrc_input_mode+1)&1
シンタックス要素nnrc_inp_out_format_idc(入出力テンソル形式情報)は、復号画像の画素値をリファイン処理への入出力値に変換する方法を示す。nnrc_inp_out_format_idcの値が0の場合は、リファイン処理(特に入力テンソル)への入力値は、それぞれ、IEEE754で指定されている実数(浮動小数点値形)であり、関数Inpは次のように指定される。入力テンソルの値の範囲は0..1である。
【0121】
Inp(x)=x÷((1<<BitDepth)-1)
InpS(x) = x
nnrc_inp_out_format_idcの値が1の場合、リファイン処理への入出力値は符号なしの整数で、関数Inpは次のように指定される。入力テンソルの値の範囲は0..1<<(inpTensorBit
Depth)-1である。
【0122】
shift=BitDepth-inpTensorBitDepth
if(inpTensorBitDepth>=BitDepth)
Inp(x)=x<<(inpTensorBitDepth-BitDepth)
else
Inp(x)=Clip3(0,(1<<inpTensorBitDepth)-1,(x+(1<<(shift-1)))>>shift)
InpS(x) = x ÷ ((1<<inpTensorBitDepth) - 1)
シンタックス要素nnrc_inp_tensor_bitdepth_minus8の値に8を加算した値は、入力整数テンソルの輝度画素値の画素ビット長を示す。変数inpTensorBitDepthの値は、シンタックス要素nnrc_inp_tensor_bitdepth_minus8から次のように導出される。
【0123】
inpTensorBitDepth=nnrc_inp_tensor_bitdepth_minus8+8
ブロックとは、画像の配列である。リファイン処理は、固定ブロック単位で行われる。ブロックをパッチと呼んでもよい。
【0124】
シンタックス要素nnrc_block_size_idcは、ブロックサイズを示す。ブロックサイズは、64, 128, 192など64の倍数であってもよい。
【0125】
blockWidth = 64*nnrc_block_size_idc (=nnrc_block_size_idc<<6)
blockHeight = 64*nnrc_block_size_idc (=nnrc_block_size_idc<<6)
またnnrc_block_size_idcから0を除いた以下でもよい。
【0126】
blockWidth = (nnrc_block_size_idc+1)<<6
blockHeight = (nnrc_block_size_idc+1)<<6
シンタックス要素nnrc_overlap_size_idcは、隣り合う入力テンソルをオーバーラップさせる水平画素数と垂直画素数を指定する。nnrc_overlap_size_idcの値は、オーバーラップのサイズは4の倍数であってもよい。
【0127】
overlapSize = nnrc_overlap_size_idc << 2
シンタックス要素nnrc_auxiliary_inp_idcはinputTensorに対して追加データがあるか否かを示す。0の場合、追加データがなく、0より大きい場合にはinputTensorに対して追加データを入力する。追加データは、NNRA SEIから復号されるパラメータ(例nnra_strength_idc)であってもよい。
【0128】
後処理によって出力される輝度画素値と色差画素値を、それぞれ画素ビット長の整数値に変換する関数Outは、画素ビット長BitDepthを用いて次のように指定される。
【0129】
Out(x)=Clip3(0,(1<<BitDepth)-1,Round(x*((1<<BitDepth)-1)))
関数Outは次のように指定される。
【0130】
shift=outTensorBitDepth-BitDepth
if(outTensorBitDepth>=BitDepth)
Out(x)=Clip3(0,(1<<BitDepth)-1,(x+(1<<(shift-1)))>>shift)
else
Out(x)=x<<(BitDepth-outTensorBitDepth)
nnrc_out_tensor_bitdepth_minus8+8は、出力整数テンソルの画素値の画素ビット長を指定する。outTensorBitDepthの値は、シンタックス要素nnrc_out_tensor_bitdepth_minus8から次のように導出される。
【0131】
outTensorBitDepth=nnrc_out_tensor_bitdepth_minus8+8
シンタックス要素nnrc_reserved_zero_bit_bは0に等しくなければならない。
【0132】
シンタックス要素nnrc_payload_byte[i]には、ISO/IEC15938-17に準拠するビットストリームのi番目のバイトが含まれる。nnrc_payload_byte[i]は、すべてISO/IEC15938-17に完全に準拠するビットストリームでなければならない。
【0133】
<リファイン対象情報に応じた入力テンソル、出力テンソルの指定>
図10は、リファイン部306の動作を示すフローチャートである。
【0134】
【0135】
図10(a)において、リファイン部306もしくはアトラス復号部302は、リファイン対象情報を復号する(S3061)。
【0136】
nnrc_input_modeに応じて、リファイン部306はinputTensorを導出してもよい。以下、chは設定対象のチャネルのインデックス(位置)を示す。ch++は、ch=ch+1の略であり設定対象のチャネルのインデックスを+1することを示す。
【0137】
ch=0
リファイン対象情報がオキュパンシを示す場合(S3062I)、入力テンソルにオキュパンシを追加する(S3063I)。例えば以下の(式IN-OCC)を用いてもよい。
【0138】
if (OccupancyUsedFlag) { (式IN-OCC)
inputTensor[ch][yP+overlapSize][xP+overlapSize] = Inp(oFrame[yT][xT])
ch++
}
リファイン対象情報がジオメトリを示す場合(S3064I)、入力テンソルにジオメトリを追加する(S3065I)。例えば以下の(式IN-GEO)を用いてもよい。
【0139】
if (GeometryUsedFlag) { (式IN-GEO)
inputTensor[ch][yP+overlapSize][xP+overlapSize] = Inp(gFrame[yT][xT])
ch++
}
リファイン対象情報がアトリビュートを示す場合(S3066I)、入力テンソルにアトリビュートを追加する(S3067I)。例えば以下の(式IN-ATTR)を用いてもよい。
【0140】
if (AttributeUsedFlag) { (式IN-ATTR)
inputTensor[ch][yP+overlapSize][xP+overlapSize] = Inp(aFrame[0][yT][xT]); ch++
inputTensor[ch][yP+overlapSize][xP+overlapSize] = Inp(aFrame[1][yT][xT]); ch++
inputTensor[ch][yP+overlapSize][xP+overlapSize] = Inp(aFrame[2][yT][xT]); ch++
}
図10(b)において、nnrc_input_modeに応じて、リファイン部306はoutputTensorから出力フレームを導出(更新)してもよい。
【0141】
ch=0
リファイン対象情報がオキュパンシを示す場合(S3062O)、出力テンソルの特定成分を
オキュパンシに設定してもよい(S3063O)。例えば以下の(式OUT-OCC) を用いてもよい。
【0142】
ch=0
if (OccupancyUsedFlag) {
oFrame[yP][xP]=outputTensor[ch][yP+overlapSize][xP+overlapSize]
ch++
}
リファイン対象情報がジオメトリを示す場合(S3064O)、出力テンソルの特定成分をジオメトリに設定する(S3065O)。例えば以下の(式OUT-GEO)を用いてもよい。
【0143】
if (GeometryUsedFlag) {
gFrame[yP][xP]=outputTensor[ch][yP+overlapSize][xP+overlapSize]
ch++
}
リファイン対象情報がアトリビュートを示す場合(S3066O)、出力テンソルの特定成分をアトリビュートに設定する(S3067O)。例えば以下の(式OUT-ATTR)を用いてもよい。
【0144】
if (AttributeUsedFlag) {
aFrame[0][yT][xT]=Out(outputTensor[ch][yP+overlapSize][xP+overlapSize]); ch++
aFrame[1][yT][xT]= Out(outputTensor[ch][yP+overlapSize][xP+overlapSize]); ch++
aFrame[2][yT][xT]= Out(outputTensor[ch][yP+overlapSize][xP+overlapSize]); ch++
}
上記では、アトラス復号部302は、符号化データからリファイン対象情報を復号し、リファイン部306は復号されたリファイン対象情報を用いて、オキュパンシ、ジオメトリ、アトリビュートを入力テンソルに設定する。さらに、リファイン部306は、入力テンソルに対してリファインメントを行い、出力テンソルを得る。復号されたリファイン対象情報を用いて、出力テンソルにオキュパンシ、ジオメトリ、アトリビュートを設定する。上記の構成によれば、オキュパンシ、ジオメトリ、アトリビュートを複数組み合わせてリファイン処理を行うことができるので効率が向上する。また、符号化データからリファイン対象情報を復号することにより、複雑度に応じて自由度をもたせてモデルの入出力を設定することができる。また、リファインメントの内容を判断して、処理を行うことができる。
【0145】
図13は、nn_refinement_characteristics(payloadSize)(特性SEI)のシンタックスの一部を示している。
図13(a)に示す特性SEIは、リファイン対象情報としてさらに、アトリビュートの数を示すシンタックス要素nnrc_attribute_num_minus1を含む。
【0146】
nnrc_input_modeに応じて、リファイン部306はinputTensorを導出してもよい。
【0147】
ch=0
リファイン対象情報がオキュパンシを示す場合、入力テンソルにオキュパンシを追加する。例えば(式IN-OCC)。
【0148】
リファイン対象情報がジオメトリを示す場合、入力テンソルにジオメトリを追加する。例えば(式IN-GEO)。
【0149】
リファイン対象情報がアトリビュートを示す場合、入力テンソルにアトリビュートを追加する。例えば以下の(式IN-ATTR-NUM)。
【0150】
if (AttributeUsedFlag) { (式IN-ATTR-NUM)
for (k=0;k<=nnrc_attribute_num_minus1;k++) {
inputTensor[ch][yP+overlapSize][xP+overlapSize]=Inp(aFrame[k][yT][xT]); ch++
}
}
なお、nnrc_attribute_num_minus1を特性SEIのシンタックス要素として含まずに、リファイン部306は、V3C VPSの符号化データを復号して得られるai_attribute_dimension_minus1[RecAtlasID][attrIdx]を用いてもよい。またai_attribute_dimension_minus1=2を用いてもよい。
【0151】
if (AttributeUsedFlag) {
for (k=0;k<=ai_attribute_dimension_minus1[RecAtlasID][attrIdx];k++) {
inputTensor[ch][yP+overlapSize][xP+overlapSize]=Inp(aFrame[k][yT][xT]); ch++
}
}
nnrc_input_modeに応じて、リファイン部306はoutputTensorから出力フレームを導出(更新)してもよい。
【0152】
ch=0
リファイン対象情報がオキュパンシを示す場合、出力テンソルの特定成分をオキュパンシに設定する。例えば(式OUT-OCC)。
【0153】
リファイン対象情報がジオメトリを示す場合、出力テンソルの特定成分にジオメトリを追加する。例えば(式OUT-GEO)。
【0154】
リファイン対象情報がアトリビュートを示す場合、出力テンソルの特定成分にアトリビュートを追加する。例えば以下の(式OUT-ATTR-NUM)。
【0155】
if (AttributeUsedFlag) { (式OUT-ATTR-NUM)
for (k=0;k<=nnrc_attribute_num_minus1;k++) {
aFrame[k][yT][xT]=Out(outputTensor][ch][yP+overlapSize][xP+overlapSize]); ch++
}
}
上記では、アトラス復号部302は、さらに符号化データからリファイン対象情報としてアトリビュート数を復号し、リファイン部306は復号されたリファイン対象情報を用いて、オキュパンシ、ジオメトリ、アトリビュートのいずれかを選択して入力テンソルに設定する。さらに、リファイン部306は、入力テンソルに対してリファインメントを行い、出力テンソルを得る。得られた出力テンソルに、復号されたリファイン対象情報を用いて、オキュパンシ、ジオメトリ、アトリビュートを設定する。オキュパンシ、ジオメトリ、アトリビュートのいずれかを選択して、出力テンソルからオキュパンシ、ジオメトリ、アトリビュートを設定する。上記の構成によれば、リファインメントを適用するアトリビュートの数を変動させることができ、複雑度に応じて自由度をもたせてモデルの入出力を設定することができる。
【0156】
図13(b)に示す特性SEIは、リファイン対象情報としてさらに、アトリビュートの初期位置を示すシンタックス要素nnrc_attribute_start_posとアトリビュートの数を示すシンタ
ックス要素nnrc_attribute_num_minus1を含む。
【0157】
nnrc_input_modeに応じて、リファイン部306はinputTensorを導出してもよい。
【0158】
ch=0
リファイン対象情報がオキュパンシを示す場合、入力テンソルにオキュパンシを追加する。例えば(式IN-OCC))。
【0159】
リファイン対象情報がジオメトリを示す場合、入力テンソルにジオメトリを追加する。例えば(式IN-GEO)。
【0160】
リファイン対象情報がアトリビュートを示す場合、入力テンソルにアトリビュートを追加する。例えば以下の(式IN-ATTR-POS)。
【0161】
if (AttributeUsedFlag) { (式IN-ATTR-POS)
for (k=nnrc_attribute_start_pos; k<=nnrc_attribute_start_pos+nnrc_attribute_num_minus1; k++) {
inputTensor[ch][yP+overlapSize][xP+overlapSize]=Inp(aFrame[k][yT][xT]); ch++
}
}
あるいは、nnrc_input_modeに応じて、リファイン部306はoutputTensorから出力フレームを導出(更新)してもよい。
【0162】
ch=0
リファイン対象情報がオキュパンシを示す場合、出力テンソルの特定成分をオキュパンシに設定する。例えば(式OUT-OCC)。
【0163】
リファイン対象情報がジオメトリを示す場合、出力テンソルの特定成分にジオメトリを追加する。例えば(式OUT-GEO)。
【0164】
リファイン対象情報がアトリビュートを示す場合、出力テンソルの特定成分をアトリビュートに設定する。例えば以下の(式OUT-ATTR-POS)。
【0165】
if (AttributeUsedFlag) { (式OUT-ATTR-POS)
for (k=nnrc_attribute_start_pos; k<=nnrc_attribute_start_pos+nnrc_attribute_num_minus1; k++) {
aFrame[k][yT][xT]=Out(outputTensor[ch][yP+overlapSize][xP+overlapSize]); ch++
}
}
上記では、アトラス復号部302は、符号化データからリファイン対象情報としてアトリビュート数を復号し、リファイン部306はリファイン対象情報を用いて、オキュパンシ、ジオメトリ、アトリビュートを入力テンソルに設定する。さらに、リファイン部306は、入力テンソルに対してリファインメントを行い、出力テンソルを得る。リファイン対象情報を用いて、出力テンソルをオキュパンシ、ジオメトリ、アトリビュートに設定する。上記の構成によれば、リファインメントを適用するアトリビュートの数を変動させることができ、複雑度に応じて自由度をもたせてモデルの入出力を設定することができる。
【0166】
図14は、nn_refinement_characteristics(payloadSize)(特性SEI)のシンタックスの
一部を示している。
図14に示す特性SEIは、リファイン対象情報としてシンタックス要素nnrc_occupancy_flag、nnrc_geometry_flag、nnrc_attribute_numを含む。nnrc_occupancy_flagはオキュパンシをリファインメントするか否かを示すフラグ、nnrc_geometry_flagはジオメトリをリファインメントするか否かを示すフラグである。nnrc_attribute_numはリファイン対象情報となるアトリビュートの数であり、アトリビュートをリファインメントするか否かを示すことができる。
リファイン部306は、下記のように設定して、すでに説明した処理を行ってもよい。
OccupancyUsedFlag= nnrc_occupancy_flag
GeometryUsedFlag= nnrc_geometry_flag
AttributeUsedFlag= nnrc_attribute_num
特性SEIは、nnrc_attribute_numの代わりに、nnrc_attribute_flag、nnrc_attribute_num_minus1をシンタックス要素として備えてもよい。このとき、nnrc_attribute_numではなくnnrc_attribute_flag、nnrc_attribute_num_minus1を復号してもよい。リファイン部306は、下記のように設定して、すでに説明した処理を行ってもよい。
OccupancyUsedFlag= nnrc_occupancy_flag
GeometryUsedFlag= nnrc_geometry_flag
AttributeUsedFlag= nnrc_attribute_flag
リファイン対象情報に応じて、リファイン部306はinputTensorを導出してもよい。
【0167】
ch=0
リファイン対象情報のnnrc_occupancy_flagが0以外、つまりオキュパンシを示す場合、入力テンソルにオキュパンシを追加する。例えば(式IN-OCC)。
【0168】
リファイン対象情報のnnrc_geometry_flagが0以外、つまりジオメトリを示す場合、入力テンソルにジオメトリを追加する。例えば(式IN-GEO)。
【0169】
リファイン対象情報のnnrc_attribute_numの数だけ入力テンソルにアトリビュートを追加する。例えば以下の(式IN-ATTR-NUM2)。
【0170】
for (k=0; k<nnrc_attribute_num; k++) { (式IN-ATTR-NUM2)
inputTensor[ch][yP+overlapSize][xP+overlapSize]=Inp(aFrame[compTimeIdx][k][yT][xT]); ch++
}
nnrc_attribute_num=0の場合、属性フレームはinputTensorに追加されないので、属性フレームにリファイン処理をする場合(nnrc_attribute_num>0)としない場合(nnrc_attribute_num==0)をnnrc_attribute_numの値で制御できる。
【0171】
nnrc_input_modeに応じて、リファイン部306はoutputTensorから出力フレームを導出(更新)してもよい。
【0172】
ch=0
リファイン対象情報のnnrc_occupancy_flagが0以外、つまりオキュパンシを示す場合、出力テンソルの特定成分をオキュパンシに設定する。例えば(式OUT-OCC)。
【0173】
リファイン対象情報のnnrc_geometry_flagが0以外、つまりジオメトリを示す場合、出力テンソルの特定成分をジオメトリに設定する。例えば(式OUT-GEO)。
【0174】
リファイン対象情報のnnrc_attribute_numの数だけ出力テンソルの特定成分をアトリビュートに設定する。例えば以下の(式OUT-ATTR-NUM2)。
【0175】
for (k=0; k<nnrc_attribute_num; k++) { (式OUT-ATTR-NUM2)
aFrame[k][yT][xT]=Out(outputTensor[ch][yP+overlapSize][xP+overlapSize]); ch++
}
上記では、アトラス復号部302は、オキュパンシ、ジオメトリ、アトリビュートに対して個別のシンタックス要素を用いて入力テンソルを設定する。さらに、リファイン部306は、入力テンソルに対してリファインメントを行い、出力テンソルを得る。出力テンソルをさらに、リファイン対象情報を用いて、オキュパンシ、ジオメトリ、アトリビュートに設定する。
【0176】
リファイン対象情報はさらにシンタックス要素nnrc_attribute_start_posを含んでいてもよい。nnrc_attribute_start_posは
図13(b)のリファインメントを行うアトリビュートの先頭位置を示すシンタックス要素である。
【0177】
リファイン対象情報のnnrc_attribute_num_minus1+1の数だけ入力テンソルにアトリビュートを追加する。例えば以下の(式IN-ATTR-POS2)。
【0178】
for (k=nnrc_attribute_start_pos; k<=nnrc_attribute_start_pos+nnrc_attribute_num_minus1; k++) { (式IN-ATTR-POS2)
inputTensor[ch][yP+overlapSize][xP+overlapSize]=Inp(aFrame[k][yP][xP]); ch++
}
リファイン対象情報のnnrc_attribute_num_minus1+1の数だけ出力テンソルの特定成分をアトリビュートに設定する。例えば以下の(式OUT-ATTR-POS2)。
【0179】
for (k=nnrc_attribute_num_start_pos; k<=nnrc_attribute_num_start_pos+nnrc_attribute_num_minus1) {
aFrame[k][yT][xT]=Out(outputTensor[ch][yP+overlapSize][xP+overlapSize]); ch++
}
図15は、nn_refinement_characteristics(payloadSize)(特性SEI)のシンタックスの一部を示している。
図15に示す特性SEIは、リファイン対象情報としてジオメトリ、アトリビュートを含む場合には、リファイン対象のmapを示すシンタックス要素nnrc_map_indexを含む。
【0180】
リファイン対象情報がオキュパンシを示す場合、入力テンソルにオキュパンシを追加する。例えば(式IN-OCC)。
【0181】
リファイン対象情報がジオメトリを示す場合、入力テンソルにnnrc_map_indexの示すジオメトリを追加する。例えば(式IN-GEO)でmapIdx=nnrc_map_indexに設定する。
【0182】
リファイン対象情報がアトリビュートを示す場合、入力テンソルにnnrc_map_indexの示すアトリビュートを追加する。例えば(式IN-ATTR)、式(IN-ATTR-NUM)、式(IN-ATTR-POS)、式(IN-ATTR-NUM2)、式(IN-ATTR-POS2)でmapIdx=nnrc_map_indexに設定する。
【0183】
リファイン対象情報がオキュパンシを示す場合、出力テンソルの特定成分をオキュパンシに設定してもよい。例えば(式OUT-OCC)。
【0184】
リファイン対象情報がジオメトリを示す場合、出力テンソルの特定成分をnnrc_map_indexの示すジオメトリに設定する。例えば(式OUT-GEO)でmapIdx=nnrc_map_indexに設定する。
【0185】
リファイン対象情報がアトリビュートを示す場合、出力テンソルの特定成分をnnrc_map_indexの示すアトリビュートに設定する。例えば(式OUT-ATTR)、(式OUT-ATTR-NUM)、(式OUT-ATTR-POS)、(式OUT-ATTR-NUM2)、(式OUT-ATTR-POS2)でmapIdx=nnrc_map_indexに設定してもよい。
【0186】
上記では、アトラス復号部302は、特性SEIからリファイン対象となるジオメトリ、アトリビュートのnnrc_map_indexを復号し、mapIdxを導出する。mapIdxで指定されるジオメトリ、アトリビュートを選択してリファインメントを行うため、特定のmapIdxに最適化されたリファインメントを適用できるという効果を奏する。
【0187】
さらに、特性SEIは、リファイン対象情報としてアトリビュートを含む場合、リファインメント対象のattrIdxを示すシンタックス要素nnrc_attribute_indexを含んでもよい。
【0188】
リファイン対象情報がアトリビュートを示す場合、入力テンソルにnnrc_attribute_index、nnrc_map_indexの示すアトリビュートを追加する。例えば(式IN-ATTR)、(式IN-ATTR-NUM)、(式IN-ATTR-POS)、(式IN-ATTR-NUM2)、(式IN-ATTR-POS2)でmapIdx=nnrc_map_index、attrIdx=nnrc_attribute_indexと設定してもよい。
【0189】
リファイン対象情報がアトリビュートを示す場合、出力テンソルの特定成分をnnrc_map_indexの示すアトリビュートに設定する。例えば(式OUT-ATTR)、(式OUT-ATTR-NUM)、(式OUT-ATTR-POS)、(式OUT-ATTR-NUM2)、(式OUT-ATTR-POS2)でmapIdx=nnrc_map_index、attrIdx=nnrc_attribute_indexに設定してもよい。
【0190】
さらに特性SEIにnnrc_attribute_partition_index、nnrc_auxiliary_video_flagを含んでもよい。nnrc_attribute_partition_indexはリファイン対象のアトリビュートのパーティションを示すインデックスであり、nnrc_auxiliary_video_flagはリファイン対象の補助データを示すフラグである。
【0191】
上記では、アトラス復号部302は、特性SEIからリファイン対象となるジオメトリ、アトリビュートのnnrc_attribute_indexを復号し、attrIdxを導出する。attrIdxで指定されるアトリビュートを選択してリファインメントを行うため、特定のattrIdxに最適化されたリファインメントを適用できるという効果を奏する。
【0192】
(ニューラルネットワークリファイン適用SEI)
図16(a)は、適用SEIのシンタックス構成例を示す。
【0193】
この適用SEIに対して、アトラス復号部302(リファイン情報復号部)、アトラス符号化部102(リファイン情報符号化部)は、以下のシンタックス要素を復号、符号化する。
【0194】
nnra_target_idは、適用する特性SEIのID(リファインの特性情報の識別子、識別情報)を示す。nnra_target_idと等しいnnrc_idを有する特性SEIによって指定されたリファイン処理を画像に適用する。
【0195】
nnra_cancel_flagはキャンセルフラグである。nnra_cancel_flagが1であるとは、既に復号したNNRA SEIで画像に対して設定されたリファインメントの維持をキャンセルすることを示す。nnra_cancel_flagが0であるとは、後続のシンタックス要素(nnra_persistence_flag)が伝送・符号化・復号されることを示す。
【0196】
nnra_persistence_flagは、対象のリファインメントの持続性情報を示す。nnra_persis
tence_flagが0である場合には、対象のリファインメントがatlasIDの示すピクチャのみに適用されることを示す。nnra_persistence_flagが1である場合は、nnra_target_idで示される対象のリファインメントが以下のいずれかの条件を満たすまで現在のピクチャと後続の全てのピクチャに適用されることを示す。
・新しいCASが開始される。
・ビットストリームが終了する。
・nnra_cancel_flag=1を有するNNRA SEIメッセージが、出力順で現ピクチャに続いて出力される。つまり、nnra_cancel_flag=1によってキャンセルされる。
また、以下でもよい。
・現在のSEIメッセージと同じnnra_target_idを有し、かつ、nnra_cancel_flag=1を有するNNRA SEIメッセージが、出力順で現ピクチャに続いて出力される。つまり、nnra_cancel_flag=1によってキャンセルされる。
【0197】
図16(b)は、適用SEIのシンタックス構成例を示す。アトラス復号部302、アトラス符号化部102は、第2のリファイン対象情報を示すシンタックス要素を復号、符号化する。第2のリファイン対象情報は、リファインの適用対象であるmapIdxを示すnnra_map_index、リファインの適用対象であるattrIdxを示すnnra_attribute_index、リファインの適用対象であるpartIdxを示すnnra_attribute_partition_index、リファインの適用対象が補助データであるかを示すnnra_auxiliary_video_flagを含んでもよい。
【0198】
リファイン対象情報がオキュパンシを示す場合、入力テンソルにオキュパンシを追加する。例えば(式IN-OCC)。
【0199】
リファイン対象情報がジオメトリを示す場合、入力テンソルに第2のリファイン対象情報nnra_map_indexの示すジオメトリを追加する。例えば(式IN-GEO)でmapIdx=nnra_map_indexに設定してもよい。
【0200】
リファイン対象情報がアトリビュートを示す場合、入力テンソルに第2のリファイン対象情報nnra_map_indexの示すアトリビュートを追加する。例えば(式IN-ATTR)、(式IN-ATTR-NUM)、(式IN-ATTR-POS)、(式IN-ATTR-NUM2)、(式IN-ATTR-POS2)でmapIdx=nnra_map_indexに設定してもよい。
【0201】
リファイン対象情報がオキュパンシを示す場合、出力テンソルの特定成分をオキュパンシに設定してもよい。例えば(式OUT-OCC)。
【0202】
リファイン対象情報がジオメトリを示す場合、出力テンソルの特定成分を第2のリファイン対象情報nnra_map_indexの示すジオメトリに設定する。例えば(式OUT-GEO)でmapIdx=nnra_map_indexに設定してもよい。
【0203】
リファイン対象情報がアトリビュートを示す場合、出力テンソルの特定成分を第2のリファイン対象情報nnra_map_indexの示すアトリビュートに設定する。例えば(式OUT-ATTR)、(式OUT-ATTR-NUM)、(式OUT-ATTR-POS)、(式OUT-ATTR-NUM2)、(式OUT-ATTR-POS2)でmapIdx=nnra_map_indexに設定してもよい。
【0204】
上記では、アトラス復号部302は、適用SEIからリファイン対象となるジオメトリ、アトリビュートのnnra_map_indexを復号しmapIdxを導出する。適用SEIのmapIdxで指定されるジオメトリ、アトリビュートを選択してリファインを行うため、特定のmapIdxに最適化されたリファインを適用できるという効果を奏する。さらに、同じ値のmapIdxで示されるジオメトリ、アトリビュートに対して同じ特性SEIで指定されるリファインメントを適用できる。同時に異なるmapIdxで示されるジオメトリ、アトリビュートに対して異なる特性SE
Iで指定されるリファインメントを適用できる。
【0205】
さらに、リファイン対象情報としてアトリビュートを含む場合には、リファイン対象のattrIdを示すシンタックス要素nnra_attribute_indexを含んでもよい。
【0206】
リファイン対象情報がアトリビュートを示す場合、入力テンソルに第2のリファイン対象情報nnra_attribute_index、nnra_map_indexの示すアトリビュートを追加する。例えば(式IN-ATTR)、(式IN-ATTR-NUM)、(式IN-ATTR-POS)、(式IN-ATTR-NUM2)、(式IN-ATTR-POS2)でmapIdx=nnra_map_index、attrIdx=nnra_attribute_indexに設定してもよい。
【0207】
リファイン対象情報がアトリビュートを示す場合、出力テンソルの特定成分を第2のリファイン対象情報nnra_map_index、nnra_attribute_indexの示すアトリビュートに設定する。例えば(式OUT-ATTR)、(式OUT-ATTR-NUM)、(式OUT-ATTR-POS)、(式OUT-ATTR-NUM2)、(式OUT-ATTR-POS2)でmapIdx=nnra_map_index、attrIdx=nnra_attribute_indexに設定してもよい。
さらにnnrc_attribute_partition_index、nnrc_auxiliary_video_flagを含んでもよい。
【0208】
上記では、アトラス復号部302は、適用SEIからリファイン対象となるジオメトリ、アトリビュートのnnra_attribute_indexを復号し、attrIdxを導出する。attrIdxで指定されるアトリビュートを選択してリファインを行う。従って、特定のattrIdxに最適化されたリファインを適用できるという効果を奏する。また、同じ値のattrIdxで示されるアトリビュートに対して同じ特性SEIで指定されるリファインを適用できる。異なるattrIdxで示すアトリビュートに対して異なる特性SEIで指定されるリファインメントを同時に適用できる。
【0209】
図19は、適用SEIのシンタックス構成例を示す。ここでは、属性数nnra_attribute_countとマップ数-1のnnra_map_count_minus1をシンタックス要素として含む。また、属性attrIdx=iおよびマップmapIdx=jごとに適用するNNREを示す特性SEIのidを示すnnra_target_id[i][j]を含む。また、属性attrIdx=iおよびマップmapIdx=jごとにリファインメントを適用するかを示すnnra_enabled_flag[i][j]、nnra_cancel_flag[i][j]、nnra_persistent_flag[i][j]を含んでもよい。また、nnra_strength_present_flag[i][j]を含んでもよい。
【0210】
リファイン対象情報がアトリビュートを示す場合、i、jの示すアトリビュートを追加する。例えば(式IN-ATTR)、(式IN-ATTR-NUM)、(式IN-ATTR-POS)、(式IN-ATTR-NUM2)、(式IN-ATTR-POS2)でmapIdx=i、attrIdx=jに設定してもよい。
【0211】
リファイン対象情報がアトリビュートを示す場合、i、jの示すアトリビュートに設定する。例えば(式OUT-ATTR)、(式OUT-ATTR-NUM)、(式OUT-ATTR-POS)、(式OUT-ATTR-NUM2)、(式OUT-ATTR-POS2)でmapIdx=i、attrIdx=jに設定してもよい。
【0212】
(3Dデータ符号化装置の構成)
図17は、本発明の実施形態に係る3Dデータ符号化装置11の概略構成を示す機能ブロック図である。
【0213】
3Dデータ符号化装置11は、パッチ生成部101、アトラス符号化部102、オキュパンシ生成部103、オキュパンシ符号化部104、ジオメトリ生成部105、ジオメトリ符号化部106、アトリビュート生成部108、アトリビュート符号化部109、リファインパラメータ導出部110、多重化部111から構成される。3Dデータ符号化装置11は、3Dデータとしてポイントクラウドもしくはメッシュを入力して、符号化データを出力する。
【0214】
パッチ生成部101は、3Dデータを入力し、パッチ(ここでは矩形の画像)の集合を生成し、出力する。具体的には、3Dデータは、複数の領域に分割され、各領域は3D空間上に設定された3Dバウンディングボックスのいずれかの平面に投影され、複数のパッチを生成する。パッチ生成部101は、3Dバウンディングボックスに関する情報(座標、サイズなど)、投影面へのマッピングに関する情報(各パッチの投影面、座標、サイズ、回転有無など)をアトラス情報として出力する。
【0215】
アトラス符号化部102は、パッチ生成部101から出力されるアトラス情報を符号化しアトラスデータを出力する。
【0216】
オキュパンシ生成部103は、パッチ生成部101から出力されるパッチの集合を入力し、各パッチの有効領域(3Dデータが存在する領域)を2Dバイナリ画像(例えば有効領域を1、無効領域を0)として示したオキュパンシを生成する。なお有効領域、無効領域の値は255と0など別の値を用いてもよい。
【0217】
オキュパンシ符号化部104は、オキュパンシ生成部103から出力されるオキュパンシを入力し、オキュパンシ、オキュパンシデータを出力する。符号化方式としては、VVCやHEVCなどを用いる。
【0218】
ジオメトリ生成部105は、3Dデータ、オキュパンシ、オキュパンシデータ、及びアトラス情報に基づき、各パッチの投影面に対するデプス値を格納した幾何フレームを生成する。幾何フレーム生成部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レイヤの幾何フレームに設定する。投影面のすべての画素に対してp_max(x,y,z)を投影した幾何フレームをFarレイヤの幾何フレームに設定する。
【0219】
ジオメトリ符号化部106は、幾何フレームを入力し、幾何フレーム、及びジオメトリデータを出力する。符号化方式としては、VVCやHEVCなどを用いる。
【0220】
アトリビュート生成部108は、3Dデータ、オキュパンシ、幾何フレーム及びアトラス情報に基づき、各パッチの投影面に対するカラー情報(例えば、YUV値、RGB値など)を格納した属性フレームを生成する。アトリビュート生成部108は、ジオメトリ生成部105によって算出されたデプスが最小のポイントp_min(x,y,z)に対応するアトリビュートの値を求め、その値を投影した属性フレームをNearレイヤの属性フレームに設定する。p_max(x,y,z)に対しても同様に求めた属性フレームをFarレイヤの属性フレームに設定する。
【0221】
アトリビュート符号化部109は、属性フレームを入力し、アトリビュート、及びアトリビュートデータを出力する。符号化方式としては、VVCやHEVCなどを用いる。
【0222】
リファインパラメータ導出部110は、属性フレームとオリジナルの属性フレーム、あるいは、幾何フレームとオリジナルの幾何フレームを入力し、NNフィルタ処理において最適なフィルタパラメータを選択もしくは導出し、出力する。リファインパラメータ導出部110は、上記SEIに、nnra_target_id, nnra_cancel_flag, nnra_persistance_flag等の値を設定する。
【0223】
多重化部111は、リファインパラメータ導出部110から出力されるフィルタパラメータを入力し、所定のフォーマットで出力する。所定のフォーマットとは、例えば、映像データの補助拡張情報であるSEI、V3C規格におけるデータ構造の指定情報であるASPS、AFPS、メ
ディアファイルフォーマット規格であるISOBMFFなどである。多重化部111は、また、アトラスデータ、オキュパンシデータ、ジオメトリデータ、アトリビュートデータ、および、上記フィルタパラメータを多重化して符号化データとして出力する。多重化方式としては、バイトストリームフォーマット、ISOBMFFなどを用いる。
【0224】
図18は、本発明の実施形態に係る3Dデータ符号化装置11、3Dデータ復号装置31とSEIメッセージの関係を示すブロック図である。
【0225】
3Dデータ符号化装置11は、映像符号化部とSEI符号化部から構成される。映像符号化部は
図17の構成では、オキュパンシ符号化部104、ジオメトリ符号化部106、アトリビュート符号化部109に対応する。SEI符号化部は
図17の構成では、アトラス符号化部102に対応する。
【0226】
3Dデータ復号装置31は、映像復号部、SEI復号部、スイッチとリファイン部から構成される。映像復号部は
図5の構成では、オキュパンシ復号部303、ジオメトリ復号部304、アトリビュート復号部305に対応する。SEI復号部は
図5の構成ではアトラス復号部302に対応する。リファイン部は
図5の構成ではリファイン部306に対応する。リファイン部306はNNフィルタ部611あるいはALF部610のいずれか、あるいは両方を含んでもよい。
【0227】
3Dデータから生成されたオキュパンシ、幾何フレーム、属性フレームは映像符号化部で符号化される。符号化データは映像復号部で復号され、復号画像が再構成される。SEI符号化部は3Dデータから特性SEIおよび適用SEIを生成する。SEI復号部はこれらのSEIメッセージを復号する。適用SEIはリファイン処理する画像を指定するためスイッチに入力され、リファイン処理する画像だけがリファイン部に入力される。特性SEIはリファイン部に入力され、復号画像に適用するリファインメントを指定する。リファイン処理された画像、あるいは、復号画像は3Dデータ表示部41(
図1)で表示される。
【0228】
以上、図面を参照してこの発明の一実施形態について詳しく説明してきたが、具体的な構成は上述のものに限られることはなく、この発明の要旨を逸脱しない範囲内において様々な設計変更等をすることが可能である。
【0229】
本発明の実施形態は上述した実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能である。すなわち、請求項に示した範囲で適宜変更した技術的手段を組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【産業上の利用可能性】
【0230】
本発明の実施形態は、3Dデータが符号化された符号化データを復号する3Dデータ復号装置、および、3Dデータが符号化された符号化データを生成する3Dデータ符号化装置に好適に適用することができる。また、3Dデータ符号化装置によって生成され、3Dデータ復号装置によって参照される符号化データのデータ構造に好適に適用することができる。
【符号の説明】
【0231】
11 3Dデータ符号化装置
101 パッチ生成部
102 アトラス符号化部
103 オキュパンシ生成部
104 オキュパンシ符号化部
105 ジオメトリ生成部
106 ジオメトリ符号化部
108 アトリビュート生成部
109 アトリビュート符号化部
110 リファインパラメータ導出部
111 多重化部
21 ネットワーク
31 3Dデータ復号装置
301 ヘッダ復号部
302 アトラス情報復号部
303 オキュパンシ復号部
304 ジオメトリ復号部
306 ジオメトリ再構成部
307 アトリビュート復号部
308 リファイン部
309 V3C復号部
310 プリ再構成部
311 最構成部
41 3Dデータ表示装置