(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-02-24
(45)【発行日】2023-03-06
(54)【発明の名称】点群圧縮のための方法並びにその、装置およびコンピュータプログラム
(51)【国際特許分類】
G06T 9/40 20060101AFI20230227BHJP
G06T 17/00 20060101ALI20230227BHJP
H03M 7/38 20060101ALI20230227BHJP
H04N 19/597 20140101ALI20230227BHJP
H04N 19/70 20140101ALI20230227BHJP
【FI】
G06T9/40
G06T17/00 500
H03M7/38
H04N19/597
H04N19/70
(21)【出願番号】P 2021552977
(86)(22)【出願日】2020-06-30
(86)【国際出願番号】 US2020040328
(87)【国際公開番号】W WO2021003173
(87)【国際公開日】2021-01-07
【審査請求日】2021-09-09
(32)【優先日】2019-07-02
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2019-10-03
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-01-07
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-06-30
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】520353802
【氏名又は名称】テンセント・アメリカ・エルエルシー
(74)【代理人】
【識別番号】100110364
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100150197
【氏名又は名称】松尾 直樹
(72)【発明者】
【氏名】シャン・ジャン
(72)【発明者】
【氏名】ウェン・ガオ
(72)【発明者】
【氏名】シャン・リュウ
【審査官】橋爪 正樹
(56)【参考文献】
【文献】特開2018-101404(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 9/00- 9/40
G06T 17/00
H04N 19/00-19/98
H03M 7/36- 7/38
(57)【特許請求の範囲】
【請求項1】
デコーダにおける点群符号化のための方法であって、
符号化されたビットストリームから量子化された空間における点群のシンタックス情報をデコードするステップであって、前記シンタックス情報は前記点群の境界ボックスの分割情報および適応ジオメトリ量子化情報を含む、ステップと、
前記分割情報に基づいて、前記点群の前記境界ボックスを複数の部分に分割するステップと、
前記適応ジオメトリ量子化情報に基づいて、前記境界ボックス内の前記部分の量子化パラメータを決定するステップと、
前記境界ボックス内のそれぞれの部分の前記量子化パラメータに基づいて、前記点群の前記境界ボックス内の各前記部分における点を再構成するステップと、を含む方法。
【請求項2】
前記分割情報は、八分木パーティション構造を含み、
前記分割するステップは、前記八分木パーティション構造に基づいて、前記境界ボックスを複数のパーティションに分割するステップを含む、請求項1に記載の方法。
【請求項3】
前記分割情報は、複数の領域の座標情報を含み、
前記分割するステップは、前記座標情報に基づいて、前記境界ボックスを前記複数の領域に分割するステップを含む、請求項1に記載の方法。
【請求項4】
前記適応ジオメトリ量子化情報は、基底量子化パラメータを含み、
前記決定するステップは、前記基底量子化パラメータに基づいて前記量子化パラメータを決定するステップを含む、請求項1に記載の方法。
【請求項5】
前記適応ジオメトリ量子化情報は、1つまたは複数のデルタ量子化パラメータのシグナリングが有効になっているか否かを示す第1のシンタックス要素を含み、
前記決定するステップは、前記1つまたは複数のデルタ量子化パラメータの前記シグナリングが有効になっていることを示す前記第1のシンタックス要素に応答して、前記1つまたは複数のデルタ量子化パラメータに基づいて前記量子化パラメータを決定するステップを含む、請求項1に記載の方法。
【請求項6】
前記適応ジオメトリ量子化情報は、前記1つまたは複数のデルタ量子化パラメータの前記シグナリングが有効になっていることを示す前記第1のシンタックス要素に基づいて、第2のシンタックス要素および第3のシンタックス要素のうちのいずれかを含み、前記第2のシンタックス要素は、前記1つまたは複数のデルタ量子化パラメータの前記シグナリングが許可される八分木パーティション深度を示し、前記第3のシンタックス要素は、前記1つまたは複数のデルタ量子化パラメータの前記シグナリングが許可される最小の八分木パーティション深度を示す、請求項5に記載の方法。
【請求項7】
前記適応ジオメトリ量子化情報は、基底量子化パラメータと、1つまたは複数のデルタ量子化パラメータのシグナリングが有効になっているか否かを示す第1のシンタックス要素とを含み、
前記量子化パラメータ、前記基底量子化パラメータ、および前記1つまたは複数のデルタ量子化パラメータのうちの少なくとも一方は、2の累乗である、請求項
1に記載の方法。
【請求項8】
(i)前記量子化パラメータ、および(ii)前記1つまたは複数のデルタ量子化パラメータのうちのいずれかは、ルックアップテーブルに含まれている、請求項5に記載の方法。
【請求項9】
前記適応ジオメトリ量子化情報は、(i)前記ルックアップテーブルのインデックス、および(ii)前記インデックスと前記インデックスの予測子との差分のうちのいずれかを含む、請求項8に記載の方法。
【請求項10】
前記適応ジオメトリ量子化情報は、基底量子化パラメータと、1つまたは複数のデルタ量子化パラメータのシグナリングが有効になっているか否かを示す第1のシンタックス要素とを含み、
前記境界ボックス内の各部分のデルタ量子化パラメータは、前記それぞれの部分に対応するノードの親ノードの量子化パラメータ、前記それぞれの部分に対応するノードの同じパーティション深度で先に符号化された兄弟ノードの量子化パラメータ、および前記基底量子化パラメータのうちの少なくとも一方に基づいて予測される、請求項
1に記載の方法。
【請求項11】
前記1つまたは複数のデルタ量子化パラメータは、量子化パラメータ予測子の候補リストに基づいて予測される、請求項5に記載の方法。
【請求項12】
点群符号化のための装置であって、
符号化されたビットストリームから量子化された空間における点群のシンタックス情報をデコードし、前記シンタックス情報は前記点群の境界ボックスの分割情報および適応ジオメトリ量子化情報を含み、
前記分割情報に基づいて、前記点群の前記境界ボックスを複数の部分に分割し、
前記適応ジオメトリ量子化情報に基づいて、前記境界ボックス内の前記部分の量子化パラメータを決定し、
前記境界ボックス内のそれぞれの部分の前記量子化パラメータに基づいて、前記点群の前記境界ボックス内の各前記部分における点を再構成する、ように構成される処理回路を備える装置。
【請求項13】
前記処理回路は、さらに、
前記分割情報に含まれる八分木パーティション構造に基づいて、前記境界ボックスを複数のパーティションに分割するように構成される、請求項12に記載の装置。
【請求項14】
前記処理回路は、さらに、
前記分割情報に含まれる複数の領域の座標情報に基づいて、前記境界ボックスを前記複数の領域に分割するように構成される、請求項12に記載の装置。
【請求項15】
前記処理回路は、さらに、
前記適応ジオメトリ量子化情報に含まれる基底量子化パラメータに基づいて、前記量子化パラメータを決定するように構成される、請求項12に記載の装置。
【請求項16】
前記処理回路は、さらに、
前記適応ジオメトリ量子化情報に含まれる、1つまたは複数のデルタ量子化パラメータのシグナリングが有効になっていることを示す第1のシンタックス要素に応答して、前記1つまたは複数のデルタ量子化パラメータに基づいて前記量子化パラメータを決定するように構成される、請求項12に記載の装置。
【請求項17】
前記適応ジオメトリ量子化情報は、前記1つまたは複数のデルタ量子化パラメータの前記シグナリングが有効になっていることを示す前記第1のシンタックス要素に基づいて、第2のシンタックス要素および第3のシンタックス要素のうちのいずれかを含み、前記第2のシンタックス要素は、前記1つまたは複数のデルタ量子化パラメータの前記シグナリングが許可される八分木パーティション深度を示し、前記第3のシンタックス要素は、前記1つまたは複数のデルタ量子化パラメータの前記シグナリングが許可される最小の八分木パーティション深度を示す、請求項16に記載の装置。
【請求項18】
前記適応ジオメトリ量子化情報は、基底量子化パラメータと、1つまたは複数のデルタ量子化パラメータのシグナリングが有効になっているか否かを示す第1のシンタックス要素とを含み、
前記量子化パラメータ、前記基底量子化パラメータ、および前記1つまたは複数のデルタ量子化パラメータのうちの少なくとも一方は、2の累乗である、請求項
12に記載の装置。
【請求項19】
(i)前記量子化パラメータ、および(ii)前記1つまたは複数のデルタ量子化パラメータのうちのいずれかは、ルックアップテーブルに含まれている、請求項16に記載の装置。
【請求項20】
コンピュータに請求項1~11のいずれか一項に記載の方法を実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
[参照による援用]
本開示は、2019年7月2日に出願された米国仮出願第62/869,946号の「点群符号化における適応ジオメトリ量子化のためのQP変動のシグナリング」、2019年10月3日に出願された米国仮出願第62/910,387号の「点群符号化のための適応ジオメトリ量子化および暗黙的なジオメトリパーティションに関する追加情報」、および2020年1月7日に出願された米国仮出願第62/958,131号の「点群符号化のための適応ジオメトリ量子化および並列八分木符号化に関する追加情報」の優先権を主張する、2020年6月30日に出願された米国特許出願第16/916,944号の「点群圧縮のための方法および装置」の優先権を主張する。その内容を全て参照により本明細書に組み込むものとする。
【0002】
[技術分野]
本開示は、一般に点群圧縮に関する実施形態を説明する。
【背景技術】
【0003】
本明細書で提供される「背景技術」の説明は、本開示の内容を大まかに示すことを目的とする。ここに名を挙げられている発明者の業績は、この背景技術に記載された範囲において、出願時に従来技術として通常見なされえない記載の態様と共に、明示的にも黙示的にも本開示に対する従来技術として認められない。
【0004】
世界の物体、世界の環境など、世界を3次元(3D)空間でキャプチャして表現するために、さまざまな技術が開発されている。世界の3D表現は、より没入感のあるインタラクションとコミュニケーションを可能にする。点群は、世界の3D表現として使用されることができる。点群は、それぞれが色、材料特性、テクスチャ情報、強度属性、反射率属性、動きに関連する属性、モダリティ属性、およびその他のさまざまな属性などの関連する属性を有している3D空間内の点のセットである。このような点群は、大量のデータを含む場合があり、保存と送信にコストと時間がかかる可能性がある。
【発明の概要】
【0005】
本開示の態様は、点群圧縮および解凍のための方法を提供する。一方法では、量子化された空間における点群のシンタックス情報を、符号化されたビットストリームからデコードする。前記シンタックス情報は、前記点群の境界ボックスの分割情報および適応ジオメトリ量子化情報を含む。前記分割情報に基づいて、前記点群の前記境界ボックスを複数の部分に分割する。前記適応ジオメトリ量子化情報に基づいて、前記境界ボックス内の前記部分の量子化パラメータを決定する。前記境界ボックス内のそれぞれの部分の前記量子化パラメータに基づいて、前記点群の前記境界ボックス内の各前記部分における点を再構成する。
一実施形態では、前記分割情報に含まれる八分木パーティション構造に基づいて、前記境界ボックスを複数のパーティションに分割する。
一実施形態では、前記分割情報に含まれる複数の領域の座標情報に基づいて、前記境界ボックスを前記複数の領域に分割する。
一実施形態では、前記適応ジオメトリ量子化情報に含まれる基底量子化パラメータに基づいて、前記量子化パラメータを決定する。
一実施形態では、1つまたは複数のデルタ量子化パラメータのシグナリングが有効になっていることを示す第1のシンタックス要素に応答して、前記1つまたは複数のデルタ量子化パラメータに基づいて前記量子化パラメータを決定する。前記第1のシンタックス要素は、前記適応ジオメトリ量子化情報に含まれる。
【0006】
一実施形態では、前記適応ジオメトリ量子化情報は、前記1つまたは複数のデルタ量子化パラメータの前記シグナリングが有効になっていることを示す前記第1のシンタックス要素に基づいて、第2のシンタックス要素および第3のシンタックス要素のうちのいずれかを含む。前記第2のシンタックス要素は、前記1つまたは複数のデルタ量子化パラメータの前記シグナリングが許可される八分木パーティション深度を示し、前記第3のシンタックス要素は、前記1つまたは複数のデルタ量子化パラメータの前記シグナリングが許可される最小の八分木パーティション深度を示す。
【0007】
一実施形態では、前記量子化パラメータ、前記基底量子化パラメータ、および前記1つまたは複数のデルタ量子化パラメータのうちの少なくとも一方は、2の累乗である。
一実施形態では、(i)前記量子化パラメータ、および(ii)前記1つまたは複数のデルタ量子化パラメータのうちのいずれかは、ルックアップテーブルに含まれている。
一実施形態では、前記適応ジオメトリ量子化情報は、(i)前記ルックアップテーブルのインデックス、および(ii)前記インデックスと前記インデックスの予測子との差分のうちのいずれかを含む。
一実施形態では、前記境界ボックス内の各部分のデルタ量子化パラメータは、前記それぞれの部分に対応するノードの親ノードの量子化パラメータ、前記それぞれの部分に対応するノードの同じパーティション深度で先に符号化された兄弟ノードの量子化パラメータ、および前記基底量子化パラメータのうちの少なくとも一方に基づいて予測される。
一実施形態では、前記1つまたは複数のデルタ量子化パラメータは、量子化パラメータ予測子の候補リストに基づいて予測される。
【0008】
本開示の態様は、点群圧縮および解凍のための装置をも提供する。1つの装置は、量子化された空間における点群のシンタックス情報を、符号化されたビットストリームからデコードする処理回路を備える。前記シンタックス情報は、前記点群の境界ボックスの分割情報および適応ジオメトリ量子化情報を含む。前記処理回路は、前記分割情報に基づいて、前記点群の前記境界ボックスを複数の部分に分割する。前記処理回路は、前記適応ジオメトリ量子化情報に基づいて、前記境界ボックス内の前記部分の量子化パラメータを決定する。前記処理回路は、前記境界ボックス内のそれぞれの部分の前記量子化パラメータに基づいて、前記点群の前記境界ボックス内の各前記部分における点を再構成する。
【0009】
本開示の態様は、点群圧縮/解凍のためのコンピュータによって実行されると、前記コンピュータに、点群圧縮/解凍のための方法のいずれか1つまたは組み合わせを実行させる命令を記憶した非一時的なコンピュータ読取可能な媒体をも提供する。
【0010】
開示された主題のさらなる特徴、本質、および様々な利点は、以下の詳細な説明および添付の図面からより明らかになるであろう。
【図面の簡単な説明】
【0011】
【
図1】本開示の一実施形態による通信システムの概略ブロック図を示す。
【
図2】本開示の一実施形態によるストリーミングシステム(200)の概略ブロック図を示す。
【
図3】本開示の一実施形態による例示的なエンコードを示す。
【
図4】本開示の一実施形態による例示的なデコーダを示す。
【
図5】本開示の一実施形態による、3D立方体における例示的な八分木パーティションを示す。
【
図6】本開示の実施形態による2レベルの八分木パーティションの例およびそれに対応する占有コードを示す。
【
図7】本開示の実施形態によるLidarシステムによって生成された例示的な点群を示す。
【
図8A】いくつかの例における固定量子化および可逆八分木符号化を示す。
【
図8B】本開示の一実施形態による、適応量子化を伴う例示的な八分木符号化を示す。
【
図9A】本開示の一実施形態による1Dにおける簡略化された量子化およびパーティションを示す。
【
図9B】本開示の一実施形態による1Dにおける簡略化された量子化およびパーティションを示す。
【
図10】本開示の一実施形態による、異なるQPに関連する3つの境界ボックスを示す。
【
図11】本開示の一実施形態によるプロセス例を概説するフローチャートを示す。
【
図12】本開示の一実施形態によるコンピュータシステムの概略図を示す。
【発明を実施するための形態】
【0012】
I.点群圧縮システム
図1は、本開示の一実施形態による通信システム(100)の概略ブロック図を示している。通信システム(100)は、例えばネットワーク(150)を介して互いに通信可能な複数の端末装置を含む。例えば、通信システム(100)は、ネットワーク(150)を介して相互接続された一対の端末装置(110)および(120)を含む。
図1の例では、第1の対の端末装置(110)および(120)は、点群データの単方向送信を実行する。例えば、端末装置(110)は、端末装置(110)に接続されたセンサー105によってキャプチャされた点群(例えば、構造物を表す点)を圧縮することができる。圧縮された点群は、例えばビットストリーム形式で、ネットワーク(150)を介して他の端末装置(120)に送信されることができる。端末装置(120)は、圧縮された点群をネットワーク(150)から受信し、ビットストリームを解凍して点群を再構成し、再構成された点群を好適に表示することができる。単方向のデータ送信は、メディア供給アプリケーションなどで一般的である。
【0013】
図1の例では、端末装置(110)および(120)は、サーバおよびパーソナルコンピュータとして示され得るが、しかし、本開示の原理はこれに制限されることはない。本開示の実施形態は、ラップトップコンピュータ、タブレットコンピュータ、スマートフォン、ゲーム端末、メディアプレーヤー、および/または専用の3次元(3D)機器における用途を見出す。ネットワーク(150)は、圧縮された点群を端末装置(110)および(120)間で送信する任意の数のネットワークを表す。ネットワーク(150)は、例えばワイヤーライン(有線)および/またはワイヤーレス通信ネットワークを含むことができる。ネットワーク(150)は、回線交換および/またはパケット交換チャネルでデータを交換することができる。代表的なネットワークは、電気通信ネットワーク、ローカルエリアネットワーク、ワイドエリアネットワークおよび/またはインターネットを含む。本議論の目的のために、ネットワーク(150)のアーキテクチャおよびトポロジーは、以下で説明されない限り、本開示の動作にとって重要でないかもしれない。
【0014】
図2は、点群について開示された主題に適用する一例を示している。開示された主題は、3Dテレプレゼンスアプリケーション、バーチャルリアリティアプリケーションを含む、他の点群対応アプリケーションに等しく適用可能である。
ストリーミングシステム(200)は、キャプチャサブシステム(213)を含み得る。キャプチャサブシステム(213)は、点群ソース(201)、例えば光検出と測距(light detection and ranging、LIDAR)システム、3Dカメラ、3Dスキャナ、ソフトウェアで非圧縮の点群を生成するグラフィックス生成コンポーネントなど、例えば非圧縮の点群(202)を生成するようなものを含むことができる。一例では、点群(202)は、3Dカメラでキャプチャされた点を含む。点群(202)は、圧縮された点群(204)(圧縮された点群のビットストリーム)と比較して、高データ量を強調するために太線で示されている。圧縮された点群(204)は、点群ソース(201)に結合されたエンコーダ(203)を含む電子デバイス(220)によって生成されることができる。エンコーダ(203)は、以下でより詳細に説明するように、開示された主題の態様を可能にするか或いは実施するために、ハードウェア、ソフトウェア、またはそれらの組み合わせを含むことができる。点群(202)のストリームと比較してより低いデータ量を強調するために細い線で示される圧縮された点群(204)(または圧縮された点群(204)のビットストリーム)は、将来使うためにストリーミングサーバ(205)に記憶されることができる。
図2のクライアントサブシステム(206)および(208)などの1つまたは複数のストリーミングクライアントサブシステムは、ストリーミングサーバ(205)にアクセスして、圧縮された点群(204)のコピー(207)および(209)を検索することができる。クライアントサブシステム(206)は、例えば、電子デバイス(230)におけるデコーダ(210)を含むことができる。デコーダ(210)は、圧縮された点群の入り方向コピー(207)をデコードし、レンダリングデバイス(212)上でレンダリング可能な再構成された点群(211)の出方向ストリームを作成する。一部のストリーミングシステムでは、圧縮された点群(204)、(207)、および(209)(例えば、圧縮された点群のビットストリーム)は、特定の規格に従って圧縮されることができる。いくつかの例では、点群の圧縮においてビデオ符号化規格が使用される。それらの規格の例としては、高効率ビデオ符号化(High Efficiency Video Coding、HEVC)、多用途ビデオ符号化(Versatile Video Coding、VVC)などがある。
【0015】
なお、電子デバイス(220)および(230)は、他の構成要素(図示せず)を含むことができる。例えば、電子デバイス(220)は、デコーダ(図示せず)を含むことができ、電子デバイス(230)もエンコーダ(図示せず)を含むことができる。
【0016】
図3は、一実施形態による例示的なエンコーダ(300)を示す。エンコーダは、点群データを受信し、点群データを圧縮して、圧縮された点群データを運ぶビットストリームを生成するように構成されることができる。一実施形態では、エンコーダ(300)は、位置量子化モジュール(310)、重複点除去モジュール(312)、八分木エンコードモジュール(330)、属性転送モジュール(320)、LOD生成モジュール(340)、属性予測モジュール(350)、残差量子化モジュール(360)、算術符号化モジュール(370)、逆残差量子化モジュール(380)、加算モジュール(381)、および、再構成された属性値を記憶するメモリ(390)を含むことができる。
【0017】
示されているように、入力された点群(301)はエンコーダ(300)で受信されることができる。点群(301)の位置(3D座標)は、位置量子化モジュール(310)に提供される。位置量子化モジュール(310)は、座標を量子化して、量子化された位置を生成するように構成される。オプションの重複点除去モジュール(312)は、量子化された位置を受信し、フィルタプロセスを実行して、重複点を識別し除去するように構成される。八分木エンコードモジュール(330)は、フィルタリングされた位置を重複点除去モジュールから受信し、八分木ベースのエンコードプロセスを実行して、ボクセルの3Dグリッドを記述する占有コードのシーケンスを生成するように構成される。占有コードは、算術符号化モジュール(370)に提供される。
【0018】
属性転送モジュール(320)は、入力された点群の属性を受信し、属性転送プロセスを実行して、複数の属性値がそれぞれのボクセルに関連付けられている場合に、各ボクセルの属性値を決定するように構成される。属性転送プロセスは、八分木エンコードモジュール(330)から出力された並べ替えられた点に対して実行されることができる。転送操作後の属性は、属性予測モジュール(350)に提供される。LOD生成モジュール(340)は、八分木エンコードモジュール(330)から出力された並べ替えられた点に対して作用し、これらの点を異なるLODに再編成するように構成される。LOD情報は、属性予測モジュール(350)に供給される。
【0019】
属性予測モジュール(350)は、LOD生成モジュール(340)からのLOD情報によって示されるLODベースの順序に従って点を処理する。属性予測モジュール(350)は、メモリ(390)に記憶されている現在の点の隣接する点のセットの再構成された属性に基づいて、現在の点に対する属性予測を生成する。予測残差は、続いて、属性転送モジュール(320)から受信された元の属性値と、ローカルに生成された属性予測とに基づいて取得されることができる。候補インデックスがそれぞれの属性予測プロセスで使用される場合、選択された予測候補に対応するインデックスは、算術符号化モジュール(370)に提供されてもよい。
【0020】
残差量子化モジュール(360)は、属性予測モジュール(350)から予測残差を受信し、量子化を実行して、量子化された残差を生成するように構成される。量子化された残差は、算術符号化モジュール(370)に提供される。
【0021】
逆残差量子化モジュール(380)は、量子化された残差を残差量子化モジュール(360)から受信し、残差量子化モジュール(360)で実行される量子化操作の逆操作を実行することで、再構成された予測残差を生成するように構成される。加算モジュール(381)は、逆残差量子化モジュール(380)からの再構成された予測残差と、属性予測モジュール(350)からのそれぞれの属性予測とを受信するように構成される。再構成された予測残差と属性予測とを組み合わせることによって、再構成された属性値が生成され、メモリ(390)に記憶される。
【0022】
算術符号化モジュール(370)は、占有コード、候補インデックス(使用された場合)、量子化された残差(生成された場合)、およびその他の情報を受信し、エントロピーエンコードを実行して、受信された値または情報をさらに圧縮するように構成される。その結果、圧縮された情報を運ぶ圧縮されたビットストリーム(302)を生成することができる。ビットストリーム(302)は、圧縮されたビットストリームをデコードするデコーダに送信されるか、またはその他の方法で提供されてもよく、あるいは記憶装置に記憶されてもよい。
【0023】
図4は、一実施形態による例示的なデコーダ(400)を示す。デコーダ(400)は、圧縮されたビットストリームを受信し、点群データの解凍を実行してビットストリームを解凍し、デコードされた点群データを生成するように構成されることができる。一実施形態では、デコーダ(400)は、算術デコードモジュール(410)、逆残差量子化モジュール(420)、八分木デコードモジュール(430)、LOD生成モジュール(440)、属性予測モジュール(450)、および、再構成された属性値を記憶するメモリ(460)を含むことができる。
【0024】
示されているように、圧縮されたビットストリーム(401)は、算術デコードモジュール(410)で受信されることができる。算術デコードモジュール(410)は、圧縮されたビットストリーム(401)をデコードして、点群の量子化された残差(生成された場合)および占有コードを取得するように構成される。八分木デコードモジュール(430)は、占有コードに従って、点群内の点の再構成された位置を決定するように構成される。LOD生成モジュール(440)は、再構成された位置に基づいて点を異なるLODに再編成し、LODベースの順序を決定するように構成される。逆残差量子化モジュール(420)は、算術デコードモジュール(410)から受信された量子化された残差に基づいて、再構成された残差を生成するように構成される。
【0025】
属性予測モジュール(450)は、属性予測プロセスを実行して、LODベースの順序に従って点の属性予測を決定するように構成される。例えば、現在の点の属性予測は、メモリ(460)に記憶された現在の点の隣接する点の再構成された属性値に基づいて決定されることができる。属性予測モジュール(450)は、属性予測をそれぞれの再構成された残差と組み合わせて、現在の点の再構成された属性を生成することができる。
【0026】
一例では、属性予測モジュール(450)から生成された再構成された属性のシーケンスは、八分木デコードモジュール(430)から生成された再構成された位置とともに、デコーダ(400)から出力されたデコードされた点群(402)に対応する。さらに、再構成された属性もメモリ(460)に記憶され、後続の点に対する属性予測を導出するためにその後使用されることができる。
【0027】
様々な実施形態において、エンコーダ(300)およびデコーダ(400)は、ハードウェア、ソフトウェア、またはそれらの組み合わせで実施されることができる。例えば、エンコーダ(300)およびデコーダ(400)は、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートエリア(FPGA)など、ソフトウェアと一緒にまたはソフトウェアなしで動作する1つまたは複数の集積回路(IC)などの処理回路で実施されることができる。別の例では、エンコーダ(300)およびデコーダ(400)は、不揮発性の(または非一時的な)コンピュータ読取可能な記憶媒体に記憶された命令を含むソフトウェアまたはファームウェアとして実施されることができる。命令は、1つまたは複数のプロセッサなどの処理回路によって実行されると、処理回路にエンコーダ(300)およびデコーダ(400)の機能を実行させる。
【0028】
なお、ここに開示された属性予測テクニックを実施するように構成される属性予測モジュール(350)または(450)は、
図3および
図4に示されているものと同様のまたは異なる構造を有する可能性がある他のデコーダまたはエンコーダに含まれ得る。さらに、エンコーダ(300)およびデコーダ(400)は、様々な例において、同じデバイスに含まれるか、または別々のデバイスに含まれることができる。
【0029】
II.点群符号化におけるジオメトリ量子化とパーティション
1.点群データ
点群は近年、広く使用されている。例えば、点群データは、自動運転車で物体検出および位置特定のために使用されている。また、点群データは、地理情報システム(GIS)でマッピングのために使用され、文化遺産における文化遺産実物および集合体の可視化とアーカイブなどのために使用されることもできる。
点群データには、それぞれが3D位置情報および色や反射率などの付加的な属性を含む高次元、典型的には3次元(3D)の点のセットが含まれている。それらは、複数のカメラと深度センサー、又は種々の設定のLidarでキャプチャされることができ、元のシーンをリアルに表現するために、数千から数十億の点で構成されることがある。
したがって、点群を表すために必要なデータ量を削減してより高速な伝送またはストレージの削減を実現するために、圧縮技術が必要である。
【0030】
2.八分木パーティションによるジオメトリ符号化
ジオメトリ情報と色や反射率などの関連する属性は、(例えば、Test Model 13(TMC13)モデルで)別々に圧縮されることができる。点群の3D座標を含むジオメトリ情報は、八分木パーティションによってその占有情報で符号化されることができる。属性は、例えば予測およびリフティングテクニックを用いて、再構成されたジオメトリに基づいて圧縮されることができる。
八分木パーティションの入力は、変換された位置の集合体、即ち、
【数1】
である。
図5は、本開示の一実施形態による、3D立方体における例示的な八分木パーティションを示す。実線で示される3D立方体は、破線で示される8つのより小さな同じサイズの立方体にパーティションされる。(例えば、TMC13における)八分木パーティションは、元の3D空間を最小単位に分割するために再帰的に実行され、各サブ空間の占有情報は、ジオメトリ位置を効率的に表すためにエントロピー符号化器によってエンコードされる。
【0031】
八分木符号化は可逆である可能性がある。つまり、すべての入力位置は、それ以上の量子化なしでエンコードされる。例えば、TMC13では、八分木ジオメトリコーデックを用いた場合、ジオメトリエンコードを次のように行う。
【数2】
【0032】
次に、境界ボックスを再帰的に細分化することで、八分木パーティション構造を構築する。各段階では、境界ボックスの立方体が8つのサブ立方体に細分化される。その後、それぞれのサブ立方体に点が含まれているか(例えば、完全なサブ立方体の場合、対応するビットは値1を持つ)、含まれていないか(例えば、空のサブ立方体の場合、対応するビットは値0を持つ)を示すために、各サブ立方体に1ビットの値を関連付けることで、占有コードと呼ばれる8ビットのコードを生成する。サイズがある値、例えば1(すなわち、非ボクセル)よりも大きい完全なサブ立方体のみが、さらに細分化される。そして、境界ボックスの各立方体の占有コードは、算術エンコーダによって圧縮される。境界ボックスの各立方体は、八分木パーティション構造のノードに対応している。したがって、各立方体の占有コードは、それぞれの立方体のノードに対応している。
【0033】
3.占有コードのエンコード
八分木パーティション構造の現在のノードの占有コードは、算術エンコーダによって圧縮されることができる。占有コードは、8ビットの整数であるSとして表されることができ、Sの各ビットは、現在のノードの各子ノードの占有状態を示す。占有コードの(例えば、TMC13における)2つの例示的なエンコード方法は、ビット単位エンコードとバイト単位エンコードである。TMC13において、デフォルトでビット単位エンコードが有効になっている。どちらの方法でも、コンテキストモデリングを用いた算術符号化を実行して占有コードをエンコードし、コンテキストステータスは、符号化プロセス全体の開始時に初期化され、符号化プロセス中に更新される。
【0034】
ビット単位エンコードの場合、Sの8つのビンは、一定の順序でエンコードされ、各ビンが、現在のノードと同じレベルにある隣接ノードおよび隣接ノードの子ノードの占有状態を参照してエンコードされる。
【0035】
バイト単位エンコードの場合、Sは、(1)最も頻度の高いN個(例えば、32個)の占有コードを追跡する適応ルックアップテーブル(A-LUT)、および(2)最後に観測された異なるM個(例えば、16個)の占有コードを追跡するキャッシュ、を参照してエンコードされる。
【0036】
SがA-LUTにあるか否かを示すバイナリフラグをエンコードする。SがA-LUTにあれば、A-LUT内のインデックスを、バイナリ算術エンコーダを用いてエンコードする。SがA-LUTになければ、Sがキャッシュにあるか否かを示すバイナリフラグをエンコードする。Sがキャッシュにあれば、キャッシュ内のインデックスのバイナリ表現を、バイナリ算術エンコーダを用いてエンコードする。それ以外の場合、Sがキャッシュになければ、Sのバイナリ表現を、バイナリ算術エンコーダを用いてエンコードする。
【0037】
デコードプロセスは、ビットストリームから境界ボックスの次元を構文解析することから開始することができる。次に、デコードされた占有コードに従って境界ボックスを細分化することにより、同じ八分木構造を構築する。2レベルの八分木パーティションの例およびそれに対応する占有コードを
図6に示しており、立方体およびノードが暗くなっているのは、それらが点によって占有されていることを示す。
【0038】
図7は、Lidarシステムによって生成された例示的な点群を示す。この点群では、点密度が空間全体にわたって変化しており、Lidarセンサーの位置(例えば、世界座標の原点)に近い点は、原点から遠い点よりも密度が高い傾向にある。原点からの距離がより小さい点も精度が高くなる可能性があり、圧縮の優先度が高くなることを意味する。このように、重要な点により多くのビットを割り当てるための適応エンコーダの最適化により、全体の符号化性能を向上させることができる。しかし、TMC13など、いくつかのケースで採用されているジオメトリ量子化スキームでは、量子化パラメータ(QP)が一定であるため、ジオメトリへの適応ビット割り当てが妨げられる。
【0039】
4.TMC13におけるジオメトリ量子化
関連するいくつかのケース(TMC13など)では、点群は、それぞれが位置
【数3】
を持つ3Dの点の集合体である。元のアプリケーション固有の点位置は、通常、浮動小数点数で表され、任意の種類の構造を持つことができる。
【0040】
図8Aに示されるように、任意の圧縮に先立って、前処理段階として(例えば、TMC13における)ジオメトリ量子化を実行することができる。すなわち、ジオメトリ量子化のQPは、すべての位置に対して固定の定数である。具体的には、
【数4】
【0041】
固定された量子化スキームは、レート制御やその他の最適化を含む一部のアプリケーションで有用な符号化機能を無効にする。従来の2Dビデオ符号化シーンでは、これらの機能はアプリケーションにおいて重要であると認識されている。
【0042】
III.点群符号化のための適応量子化の提案
本開示の態様によれば、新しい量子化スキームがPCCの八分木符号化手順に提出され、これにより、適応ジオメトリ量子化が可能になる。
図8Bに示されるように、この新しい量子化は、八分木符号化におけるQP変動を含み、QPは、八分木パーティション構造の異なるノードに対して変動し得る。各ノードは、点群の境界ボックスの立方体(または一部)に対応する。これに応じて、八分木パーティションとそれに対応する占有符号化を調整することができる。QP変動をシグナリングする方法も詳しく説明されている。本開示は、ジオメトリ符号化のための空間全体にわたる適応ビット割り当てという新しい機能を可能にし、それゆえ、レート制御およびその他の低レベル最適化がより実現可能である。なお、本開示は、TMC13ソフトウェアまたはMPEG-PCC規格に限定されるものではなく、様々なPCCシステムのための一般的な解決策である。
【0043】
本開示では、適応量子化が八分木パーティション段階に提出されるため、八分木符号化は、余分な量子化のために不可逆になる可能性がある。前処理段階における量子化は変更されず、前処理量子化の目標は、八分木パーティションが実行できるようにすべての位置を整数にするボクセル化である。なお、これら2つの量子化プロセスは、互いに独立している。以下、適応量子化を伴う八分木パーティションの1つの例示的な実施をさらに説明する。しかしながら、PCCのための適応ジオメトリ量子化を可能にする任意の他の形態の実施が本開示に含まれることに留意されたい。例えば、QPが2の累乗であるように制限されている場合、以下の実施を簡略化し得る。
【0044】
例示的な適応量子化は、八分木パーティションを実行する間に適用される。八分木パーティションの各ノードでは、対応するサブ立方体内のすべての点を、異なるノードによって変化し得る指定されたQPに基づいて量子化することができる。より具体的には、
【数5】
【0045】
まず、例示的な適応量子化を、次のように現在のサブ立方体の境界ボックスの始点と終点に適用する。
【数6】
さらに、それらは現在のサブ立方体の八分木パーティションを決定することができる。
【0046】
第二に、例示的適応量子化を、次のように現在のサブ立方体内のすべての点に適用することができる。
【数7】
【0047】
すると、量子化された開始位置と終了位置に基づいて、現在のサブ立方体の八分木パーティションを決定することができる。
【数8】
【0048】
現在のサブ立方体(またはノード)から八分木パーティションを実行することにより、次のパーティション深度における8つの子サブ立方体(またはノード)の始点と終点は次のようになる。
【数9】
【0049】
図9Aおよび9Bは、本開示の一実施形態による、1Dにおける簡略化された量子化およびパーティションを示す。
【数10】
【0050】
なお、八分木パーティション内の提案された適応量子化は、前処理段階における量子化とは独立している。
【数11】
次節では、QP変動をシグナリングする方法をさらに詳細に説明する。
【0051】
IV.適応ジオメトリ量子化のためのQP変動のシグナリング
1.制御フラグのシグナリング
1つまたは複数のQP変動(デルタQP)のシグナリングが有効になっているか否かを示す第1の高レベルシンタックス要素を追加することができる。有効になっている場合、1つまたは複数のデルタQPのシグナリングが許可される八分木パーティション深度を示す第2の高レベルシンタックス要素を追加することができる。
【0052】
例えば、1ビットフラグをシーケンスヘッダおよび/またはスライスヘッダでシグナリングして、デルタQPのシグナリングを有効または無効にすることができる。フラグが0の場合、更なるシグナリングは許可されず、定数QPを八分木パーティションに適用することができ、それ以外の場合、デルタQPをシグナリングすることができる。
【0053】
さらに、デルタQPのシグナリングが有効になっている場合、デルタQPのシグナリングが許可される八分木パーティションの1つまたは複数の深度を示す非負の整数をシグナリングすることができる。
【0054】
加えて、基底QPをシーケンスヘッダで、または、スライスヘッダなどの他のレベルでシグナリングすることができる。基底QPは、デルタQPが指定されていないすべてのサブノードに適用される。デルタQPのシグナリングが無効になっている場合、基底QPは、八分木パーティションのすべてのサブノードに適用されることができる。いくつかの実施形態では、基底QPは、デルタQPの予測子である。
【0055】
一実施形態では、デルタQPのシグナリングが有効になっているか否かを示す1つのフラグをシーケンスヘッダでシグナリングする。有効になっている場合、デルタQPのシグナリングが許可される八分木パーティションの特定の深度を指定するように、深度をさらにシグナリングする。例示的なシンタックステーブルを表1に示す。
【0056】
【表1】
変数sps_geo_qp_baseは、八分木パーティションで使用できる基底QPを
【数12】
として指定する。
【数13】
は、デルタQPが適用されない場合、八分木パーティションにおけるデフォルトQPとして使用されることができる。また、デルタQPの予測子としても使用されることができる。
変数sps_geo_delta_qp_flagが1に等しい場合、ビットストリームのシーケンスに対してデルタQPのシグナリングが有効になっていることを指定する。変数sps_geo_delta_qp_flagが0に等しい場合、ビットストリームのシーケンスに対してデルタQPのシグナリングが無効になっていることを指定する。デルタQPのシグナリングが有効になっている場合、変数sps_geo_delta_qp_signal_depthは、デルタQPがシグナリングされる八分木パーティションの深度を指定する。八分木パーティション深度が、指定された変数sps_geo_delta_qp_signal_depthを下回る場合、
【数14】
は、八分木パーティションにおけるデフォルトQPとして使用される。
【0057】
一実施形態では、基底QPは、2の累乗である数に制限されている。例示的なシンタックステーブルを表2に示す。
【0058】
【表2】
変数sps_geo_qp_base_log2は、八分木パーティションで使用できる基底QPを
【数15】
として指定する。
【数16】
は、デルタQPが適用されない場合、八分木パーティションにおけるデフォルトQPとして使用されることができる。また、デルタQPの予測子としても使用されることができる。
【0059】
一実施形態では、デルタQPのシグナリングが有効になっているか否かを示す1つのフラグをスライスヘッダでシグナリングする。有効になっている場合、デルタQPのシグナリングが許可される八分木パーティションの特定の深度を指定するように、深度をさらにシグナリングする。例示的なシンタックステーブルを表3に示す。
【0060】
【表3】
変数gsh_geo_delta_qp_flagが1に等しい場合、そのスライスに対してデルタQPのシグナリングが有効になっていることを指定する。変数gsh_geo_delta_qp_flagが0に等しい場合、そのスライスに対してデルタQPのシグナリングが無効になっていることを指定する。デルタQPのシグナリングが有効になっている場合、変数gsh_geo_delta_qp_signal_depthは、デルタQPがシグナリングされる八分木パーティションの深度を指定する。八分木パーティション深度が、指定された変数sps_geo_delta_qp_signal_depthを下回る場合、変数sps_geo_qp_beseによって指定された
【数17】
は、デフォルトQPとして使用される。
【0061】
一実施形態では、QP変動はスライスレベルでのみ許可され、各スライスが固定QPによって割り当てられ、スライス内のデルタQPが許可されないことを示す。例示的なシンタックステーブルを表4に示す。
【0062】
【表4】
変数sps_geo_delta_qp_flagが1に等しい場合、変数gsh_geo_slice_qpは、現在のスライスに適用できるQPを指定し、スライス内のすべてのサブノード(またはサブ立方体)のQPが同じである、即ち、
【数18】
であることを示す。変数sps_geo_delta_qp_flagが0に等しい場合、
【数19】
となる。
【0063】
一実施形態では、QP変動はスライスレベルでのみ許可され、各スライスが固定QPによって割り当てられ、スライス内のデルタQPが許可されないことを示す。この場合、スライスのQPは、デルタQPとして、シーケンスヘッダにおける変数sps_geo_qp_baseによって指定された基底QPにシグナリングされる。例示的なシンタックステーブルを表5に示す。
【0064】
【表5】
変数sps_geo_delta_qp_flagが1に等しい場合、変数gsh_geo_slice_delta_qp_from_baseは、現在のスライスに適用できるQPを
【数20】
として指定し、スライス内のすべてのサブノードのQPが同じになることを示す。変数sps_geo_delta_qp_flagが0に等しい場合、
【数21】
となる。
【0065】
一実施形態では、デルタQPのシグナリングが有効になっているか否かを示す1つのフラグをシーケンスヘッダでシグナリングする。有効になっている場合、デルタQPのシグナリングが許可される八分木パーティションの深度を指定するように、深度をさらにシグナリングする。例示的なシンタックステーブルを表6に示す。
【0066】
【表6】
変数sps_geo_delta_qp_flagが1に等しい場合、変数sps_geo_delta_qp_signal_min_depthは、デルタQPがシグナリングされる深度を上回る全ての深度において、八分木パーティションの特定の深度を指定する。八分木パーティション深度が、変数sps_geo_delta_qp_signal_min_depthに達しない場合、変数sps_geo_qp_beseによって指定された
【数22】
は、デフォルトで使用される。
【0067】
一実施形態では、デルタQPのシグナリングが有効になっているか否かを示す1つのフラグをスライスヘッダでシグナリングする。有効になっている場合、デルタQPのシグナリングが許可される八分木パーティションの深度を指定するように、深度をさらにシグナリングする。例示的なシンタックステーブルを表7に示す。
【0068】
【0069】
変数gsh_geo_delta_qp_flagが1に等しい場合、変数gsh_geo_delta_qp_signal_min_depthは、デルタQPのシグナリングが許可される八分木パーティションの深度を指定する。
【0070】
2.テーブルによるQPのシグナリング
デルタQP値を直接シグナリングする代わりに、デルタQPをルックアップテーブルに含めて、そのテーブルのインデックスが参照することができる。このテーブルは、固定されているか、或いは、ビットストリームでシグナリングされることができる。テーブルがビットストリームでシグナリングされる場合、テーブルの要素は、独立してシグナリングされるか、或いは、それらの差分(すなわち、テーブルの2つの要素間の差分)によってシグナリングされることができる。テーブルの要素は、QP値またはデルタQP値のいずれかであり得る。以下の実施形態では、QPテーブルは、ビットストリームのシーケンスヘッダでシグナリングされる。なお、QPテーブルは、スライスヘッダなどの他のレベルでシグナリングされることもできる。
一実施形態では、適応ジオメトリ量子化で使用され得るすべてのQP値(基底QPを除く)を指定するルックアップテーブルは、表8でシグナリングされる。
【0071】
【0072】
変数sps_geo_qp_table_flagが1に等しい場合、QPがQPテーブル内のインデックスによって表現(およびシグナリング)されることができることを指定する。変数sps_geo_qp_table_flagが0に等しい場合、QPがその値によって直接表現(およびシグナリング)されることができることを指定する。また、変数sps_geo_qp_table_flagが1に等しい場合、変数sps_geo_qp_table_size_minus_oneは、その後、ルックアップテーブルのサイズをsps_geo_qp_table_size=sps_geo_qp_table_size_minus_one+1として指定するようにシグナリングされる。
そして、QPテーブルの各要素は、変数sps_geo_qp_table_element[i]によってシグナリングされる。この要素は、適応ジオメトリ量子化で使用され得るすべてのQPを
【数23】
として指定し、ここで、
【数24】
は、QPテーブルにおける1つの要素を示す。八分木パーティション深度が、指定された変数sps_geo_delta_qp_signal_depthを下回る場合、変数sps_geo_qp_beseによって指定された
【数25】
は、デフォルトQPとして使用される。それ以外の場合、QPは、QPテーブルを参照するインデックスによって指定されることができる。
一実施形態では、適応ジオメトリ量子化で使用され得るすべてのデルタQP値を指定するルックアップテーブルは、表9でシグナリングされる。
【0073】
【0074】
変数sps_geo_delta_qp_table_flagが1に等しい場合、QPがデルタQPテーブルにおけるインデックスによって表現(およびシグナリング)されることができることを指定する。変数sps_geo_delta_qp_table_flagが0に等しい場合、QPがQPの値によって直接表現(およびシグナリング)されることができることを指定する。変数sps_geo_delta_qp_table_flagが1に等しい場合、変数sps_geo_delta_qp_table_size_minus_oneは、ルックアップテーブルのサイズをsps_geo_delta_qp_table_size=sps_geo_delta_qp_table_size_minus_one+1として指定するようにシグナリングされる。
そして、デルタQPテーブルの各要素は、変数sps_geo_delta_qp_table_element[i]によってシグナリングされる。それらは、適応ジオメトリ量子化で使用され得るすべてのデルタQPを、
【数26】
として指定する。八分木パーティション深度が、指定された変数sps_geo_delta_qp_signal_depthを下回る場合、変数sps_geo_qp_beseによって指定された
【数27】
はデフォルトQPとして使用される。それ以外の場合、QPは、デルタQPテーブルを参照するインデックスによって指定されることができる。
【0075】
3.領域に基づくQPのシグナリング
本開示の態様によれば、例えば3D空間において、特定の領域を定義することができ、異なる領域に対して異なる領域QPを割り当てることができる。これは、境界ボックスおよび対応する領域QPによって指定されることができる、領域ベースの適応ジオメトリ量子化と呼ばれることができる。
図10は、本開示の一実施形態による、異なる領域QPに関連付けられた3つの境界ボックスを示す。
【0076】
領域ベースのQP変動をシグナリングするために、まず、境界ボックスは、開始位置および終了位置によって指定されるか、或いは、開始位置および各次元の長さによって指定されることができる。また、境界ボックスは、互いに重複していても、重複していなくてもよい。複数の領域QPが指定された重複領域に対して、複数の領域QPの1つ、例えば、最初に指定されたもの、最後に指定されたもの、すべての中で最大のもの、すべての中で最小のもの、すべての平均値、またはすべての中央値などをこの重複領域に適用することができる。
【0077】
第2に、各境界ボックスの領域QPは、それらの値によって直接シグナリングされるか、或いは、差分(例えば、2つのQP間の差分)によってシグナリングされるか、或いは、デフォルト値との差分としてシグナリングされることができる。なお、デルタQPが領域QP以外の各単一の領域にシグナリングされて適用されることができるため、各領域の最終QPは、領域ベースの適応ジオメトリ量子化において変化し得る。この場合、領域QPは、各領域の基底QPのように機能する。以下の実施形態では、領域QPは、ビットストリームのシーケンスヘッダでシグナリングされる。なお、それらはスライスヘッダでシグナリングされることもできる。
【0078】
一実施形態では、表10に示されるように、領域は開始位置および終了位置によって指定され、対応する領域QP値は各領域ごとに指定される。
【0079】
【0080】
変数sps_geo_region_qp_flagが1に等しい場合、領域ベースの適応量子化が有効になっていることを指定する。そうであれば、変数sps_geo_region_qp_size_minus_oneは、領域の数をsps_geo_region_qp_size=sps_geo_region_qp_size_minus_one+1として指定する。
そして、各領域に対して、変数sps_geo_region_qp_start_pos_x [i]、sps_geo_region_qp_start_pos_y [i]、およびsps_geo_region_qp_start_pos_z [i]は、デカルト座標における領域の開始位置を指定し、変数sps_geo_region_qp_end_pos_x [i]、sps_geo_region_qp_end_pos_y [i]、およびsps_geo_region_qp_end_pos_z [i]は、デカルト座標における領域の終了位置を指定し、変数sps_geo_region_qp [i]は、この領域の対応する領域QPを指定する。この場合、シンタックスで指定されていない残りの領域について、変数sps_geo_qp_baseによって指定された
【数28】
はデフォルトQPとして使用される。
一実施形態では、表11に示されるように、領域は各次元の開始位置および長さによって指定され、対応する領域QP値は各領域ごとに指定される。
【0081】
【表11】
変数sps_geo_region_qp_diff[i]は、基底QPとの差分によって、各領域ごとに対応するQPを
【数29】
として指定する。
この場合、シンタックスで指定されていない残りの領域について、変数sps_geo_qp_baseによって指定された
【数30】
は、デフォルトQPとしても使用される。
【0082】
一実施形態では、領域は各次元の開始位置および長さによって指定され、各領域のQP値はデフォルト値との差分によって指定される。この場合、変数sps_geo_region_qp_flagおよびsps_geo_delta_qp_signal_depthが同時にシグナリングされるため、デルタQPをシグナリングすることで、同一領域内のQP変動が許容される。なお、変数sps_geo_region_qp_flagは、変数sps_geo_delta_qp_signal_min_depthと一緒にシグナリングされることもできる。表12は、例示的なシンタックステーブルを示す。
【0083】
【表12】
八分木パーティション深度が、指定された変数sps_geo_delta_qp_signal_depthを下回る場合、変数sps_geo_qp_beseによって指定された
【数31】
はデフォルトで使用される。それ以外の場合、QPは、領域QPによって指定される。
【0084】
4.デルタQPのシグナリング
前節では、QP変動をシグナリングするための例示的な高レベルシンタックスを説明したが、本節では、八分木符号化によるデルタQPのシグナリング方法をさらに説明する。八分木パーティションの各サブノードは、異なるQP、すなわち
【数32】
【0085】
いくつかの実施形態では、デルタQPの値をシグナリングするために、まず、デルタQPが0に等しいか否かを示す1ビットをシグナリングする。0でない場合、デルタQPの符号を示す別のビットをシグナリングし、そして、例えばExp-Golomb符号化によって、その絶対値から1を引いた値をシグナリングする。なお、デルタQPが非負であるように制限されている場合、デルタQPの符号をシグナリングしない。
【0086】
あるいはまた、QPは、定義されたルックアップテーブルへのインデックスによってシグナリングされることもできる。このテーブルは、エンコーダおよびデコーダに対して固定されているか、或いは、ビットストリームの先頭でシグナリングされることができる。この場合、デルタQPは、ルックアップテーブルの差分インデックスによって参照されることができる。
【0087】
一実施形態では、デルタQPのシグナリングは、デルタQPをシグナリングすることができる八分木パーティションの深度を指定する変数sps_geo_delta_qp_signal_depth(またはgsh_geo_delta_qp_signal_depth)に依存する。表13は、例示的なシンタックステーブルを示す。
【0088】
【表13】
depth == sps_geo_delta_qp_signal_depthの場合、現在のノードのデルタQP、すなわち
【数33】
【0089】
変数NodeX[depth][nodeIdx]、NodeY[depth][nodeIdx]、およびNodeZ[depth][nodeIdx]は、所定の深度におけるデコード順のノードnodeIdxのx、y、z座標を表す。変数NumNodesAtDepth[depth]は、所定の深度でデコードされるノードの数を表す。
変数depthShiftは、
【数34】
に起因する深度値の変化を次のように指定し、
【数35】
とし、ここで、ilog2(v)は、vのlog2と等しいか、それより小さい最大の整数を計算する。
【数36】
導出されたパラメータdepthShiftは、表14に示されるように、現在のノードのジオメトリ符号化に影響を与え得る。
【0090】
【表14】
depth+depthShift>=MaxGeometryOctreeDepth-1の場合、
【数37】
が最大値よりも大きいため、現在のノードのすべての点が単一の点に量子化されることを示す。この場合、八分木パーティションを終了することができる。ジオメトリ符号化におけるダイレクトモードの場合、符号化長をChildNodeSizeLog2-depthShiftに変更することができ、ここで、変数ChildNodeSizeLog2は子ノードサイズを示す。
【0091】
一実施形態では、デルタQPのシグナリングは変数sps_geo_delta_qp_signal_min_depth(またはgsh_geo_delta_qp_signal_min_depth)に依存し、ここで、前記変数は、八分木パーティションの特定の深度から、QPのデルタがシグナリングされる深度を上回る全ての深度までにおいて指定する。表15は例示的なシンタックステーブルを示す。
【0092】
【表15】
この場合、depth >= sps_geo_delta_qp_signal_min_depthの場合、現在のノードのデルタQP、すなわち
【数38】
【0093】
一実施形態では、デルタQPは非負であるように制限されされているため、デルタQPの符号はシグナリングされない。表16は、例示的なシンタックステーブルを示す。
【0094】
【表16】
この場合、
【数39】
がビットストリームからデコードされていれば、次のように再構成されることができる。
【数40】
【0095】
一実施形態では、QPは2の累乗である数に制限されているため、デルタQPの値はlog2形式でシグナリングされることもできる。表17は、例示的なシンタックステーブルを示す。
【0096】
【表17】
この場合、
【数41】
がビットストリームからデコードされていれば、次のように再構成されることができる。
【数42】
【0097】
【0098】
一実施形態では、QPルックアップテーブルは、固定されているか、或いは、変数sps_geo_qp_table_flagおよびsps_geo_qp_table_element[i]によって指定される。この場合、QP変動は、QPテーブルにおけるインデックスの差分によって指定されることができる。表18は、例示的なシンタックステーブルを示す。
【0099】
【表18】
変数sps_geo_qp_table_flagが1に等しい場合、
【数44】
【0100】
一実施形態では、QPルックアップテーブルは、固定されているか、或いは、sps_geo_qp_table_flagおよびsps_geo_qp_table_element[i]によって指定される。この場合、QP変動は、QPテーブルにおけるインデックスによって指定されることができる。表19は、例示的なシンタックステーブルを示す。
【0101】
【表19】
変数sps_geo_qp_table_flagが1に等しい場合、デコードされた
【数45】
はルックアップテーブルにおけるインデックスを指定し、現在のノード(またはサブキューブ)の最終QPは
【数46】
変数sps_geo_qp_table_flagが0に等しい場合、ルックアップテーブルが構築されていないことを示し、現在のノード(またはサブキューブ)の最終QPは
【数47】
【0102】
一実施形態では、デルタQPルックアップテーブルは、固定されているか、或いは、変数sps_geo_delta_qp_table_flagおよびsps_geo_delta_qp_table_element[i]によって指定される。表20は、例示的なシンタックステーブルを示す。
【0103】
【表20】
変数sps_geo_delta_qp_table_flagが1に等しい場合、
【数48】
【0104】
5.デルタQPの予測子
本開示の態様によれば、デルタQPの予測子、すなわち、
【数49】
【0105】
一実施形態では、予測子の選択は、いずれの場合にも固定されることができる。代替な実施形態では、予測子の候補リストを構築し、どの予測子を適用するかを示すリストへのインデックスをシグナリングすることができる。このインデックスは、八分木パーティションを構文解析している間に、シーケンスヘッダまたはスライスヘッダまたはジオメトリスライスデータのいずれかで指定されることができる。
【0106】
一実施形態では、予測子のソースを示すインデックスは、表21に示されようにシーケンスヘッダで指定される。
【0107】
【表21】
変数sps_geo_delta_qp_predict_from_indexが0に等しい場合、予測子が基底QPからのものであること、すなわち
【数50】
【0108】
6.八分木レベルのジオメトリ量子化
本開示の態様によれば、提案された適応ジオメトリ量子化は、特定の八分木パーティション深度で適用され、この深度は高レベルシンタックスで指定される。
【0109】
一実施形態では、QP変動のシグナリングが有効になっているか否かを示す制御フラグは、ジオメトリパラメータセットに追加される。有効になっている場合、QP差分をシグナリングする際に、基底QPが予測子としてシグナリングされる。表22は、例示的なシンタックステーブルを示す。
【0110】
【表22】
変数gps_geo_delta_qp_flagが1に等しい場合、QP変動のシグナリングが有効になっていることを指定する。変数gps_geo_delta_qp_flagが0に等しい場合、QP変動のシグナリングが無効になっていることを指定する。QP変動のシグナリングが有効になっている場合、変数gps_geo_qp_baseは、QP差分のシグナリングに使用できる基底QPを
【数51】
として指定する。
ジオメトリスライスヘッダのシンタックスの変更は、表23に示される通りである。
【0111】
【0112】
変数gsh_geo_octree_delta_qp_flagが1に等しい場合、現在のスライスでは八分木ベースのデルタQPシグナリングが有効になっていることを指定する。変数gsh_geo_octree_delta_qp_flagが0に等しい場合、現在のスライスでは八分木ベースのデルタQPシグナリングが無効になっていることを指定する。八分木ベースのデルタQPシグナリングが有効になっている場合、変数gsh_geo_octree_delta_qp_depthは、QPのデルタがシグナリングされる八分木パーティションの深度を指定する。
【0113】
一実施形態では、デルタQPの値をシグナリングするために、まず、デルタQPが0に等しいか否かを示す1ビットをシグナリングする。0でない場合、デルタQPの符号を示す別のビットをエンコードしシグナリングし、そして、その絶対値から1を引いた値をExp-Golomb符号化によって符号化する。ジオメトリスライスデータにおけるデルタQPのシグナリングを表24に示す。
【0114】
【0115】
変数GeometryNodeOccupancyCnt[depth][xN][yN][zN]は、八分木の所定の深度の位置(xN,yN,zN)にあるジオメトリ八分木ノードに存在する子ノードの数を表す。変数GeometryNodeOccupancyCntの未定義の値は0として扱われる。
【0116】
変数NodeX[depth][idx]、NodeY[depth][idx]、およびNodeZ[depth][idx]は、所定の深度におけるデコード順のidx番目のノードのx、y、z座標を表す。変数NumNodesAtDepth[depth]は、所定の深度でデコードされるノードの数を表す。
【0117】
変数NodeBaseX[depth][idx]、NodeBaseY[depth][idx]、およびNodeBaseZ[depth][idx]は、所定の深度におけるデコード順のidx番目のノードの量子化された位置の基底x、y、z座標を表す。変数NodeQuantX[depth][idx]、NodeQuantY[depth][idx]、およびNodeQuantZ[depth][idx]は、所定の深度におけるデコード順のidx番目のノードの基底位置に対する、量子化されたx、y、z座標を表す。また、変数geoOctreeQP[depth][nodeIdx]は、所定の深度におけるデコード順のnodeIdx番目のノードのQPを示す。
【0118】
変数NodeX、NodeY、NodeZ、NodeBaseX、NodeBaseY、NodeBaseZ、NodeQuantX、NodeQuantY、NodeQuantZ、geoQp、NumNodesAtDepth、GeometryNodeOccupancyCnt、およびGeometryNodeOccupancyMapは次のように初期化される。
【数52】
【0119】
変数gsh_geo_octree_delta_qp_flagが1に等しく、かつ深度が変数gsh_geo_octree_delta_qp_depthに等しい場合、現在のノードのデルタQP、すなわち変数geo_octree_dqpは、次のように指定される。
if( geo_delta_qp_is_nonzero_flag ) {
if( geo_delta_qp_sign )
geo_octree_dqp = geo_delta_qp_abs_minus_one + 1;
else
geo_octree_dqp = - geo_delta_qp_abs_minus_one - 1;
} else
geo_octree_dqp = 0;
変数geo_octree_dqpがデコードされると、変数geoOctreeQP[depth][nodeIdx]は次のように更新される。
geoOctreeQP[depth][nodeIdx] = geo_octree_dqp + baseQP
現在のノードのQSは、次のように導出されることができる。
geoQp = geoOctreeQP[depth][nodeIdx],
geoOctreeQS = geomLevelScale[ geoQp % 6 ] << (geoQp / 6)
【0120】
ここで、変数geomLevelScale[k]={659445,741374,831472,933892,1048576,1175576}とし、k=0…5とする。
変数depthShiftは、ジオメトリビット深度のシフトを次のように指定する。
depthShift = floor ( ( geoQp - 4 ) / 6 )
導出されたパラメータdepthShiftは、表25に示されるように、現在のノードのジオメトリ符号化に影響を与え得る。
【0121】
【0122】
(depth+depthShift)>=MaxGeometryOctreeDepth-1の場合、内部量子化は、現在のサブキューブまたはノード内のすべての点が単一の点に量子化されるよう十分に大きいことを示す。この場合、八分木パーティションが終了してもよく、また、変数OccupancyMapが1であると推定できるため、占有符号化をスキップすることができる。ジオメトリ符号化のIDCM(inferred direct coding mode)では、符号化長がChildNodeSizeLog2-depthShiftに変更され、ここで、変数ChildNodeSizeLog2が子ノードのサイズを示す。
変数direct_mode_flagが0に等しい場合、以下が適用される。
【数53】
【0123】
7.八分木レベルのジオメトリ量子化のための八分木ノードデコードプロセス
このプロセスへの入力は、(1)パックされたジオメトリ八分木における現在のジオメトリ八分木ノードの位置を指定する八分木ノード位置(depth,nodeIdx)、(2)現在のスライスにおける現在のジオメトリ八分木ノードの位置を指定する空間的位置(xN,yN,zN)、(3)QPによるジオメトリ量子化が適用される、現在のスライスにおける現在のジオメトリ八分木ノードの基底位置を指定する空間的位置(xNBase,yNBase,zNBase)、および(4)(xNBase,yNBase,zNBase)によって指定される基底位置に対する、現在のスライスにおける現在のジオメトリ八分木ノードの量子化された位置を指定する空間的位置(xNQuant,yNQuant,zNQuant)を含む。
このプロセスの出力は、修正された配列PointPosと更新された変数PointCountである。
【0124】
どちらの深度もMaxGeometryOctreeDepth-1に等しくなく、かつ変数direct_mode_flagが0に等しい場合、このプロセスによって点は一切出力されない。それ以外の場合、深度がMaxGeometryOctreeDepth-1に等しいか、或いは、変数direct_mode_flagが1に等しい場合、このプロセスの残りの部分で1つまたは複数の点の位置が生成される。
占有されている各子における点の空間的位置は、各子における重複点の数と、直接符号化された位置の使用に従って、以下のように決定されることができる。
【数54】
【0125】
8.スライスレベルのジオメトリ量子化
本開示の態様によれば、QP変動はスライスレベルで指定されることができ、これは、各スライスに異なるQPが割り当てられることができることを示している。
一実施形態では、QP変動のシグナリングがスライスレベルで有効になっているか否かを示す活性化フラグが、ジオメトリパラメータセットに追加される。有効になっている場合、QP差分をシグナリングする際に、基底QPが予測子としてシグナリングされる。
ジオメトリパラメータセットのシンタックス変更を表26に示す。
【0126】
【0127】
変数gps_geo_delta_qp_flagが1に等しい場合、デルタQPのシグナリングが有効になっていることを指定する。変数gps_geo_delta_qp_flagが0に等しい場合、デルタQPのシグナリングが無効になっていることを指定する。デルタQPのシグナリングが有効になっている場合、変数gps_geo_qp_baseは、QP差分のシグナリングに使用できる基底QPをbaseQP=gps_geo_qp_baseとして指定する。ジオメトリスライスヘッダのシンタックス変更を表27に示す。
【0128】
【0129】
変数gsh_geo_slice_dqpは、現在のスライスに適用できるQPをsliceQP=gsh_geo_slice_dqp+baseQPとして指定する。QSは、geoSliceQS=geomLevelScale[sliceQP%6]<<(sliceQP/6)として導出されることができ、ここで、geomLevelScale[k]={659445,741374,831472,933892,1048576,1175576}とし、k=0…5とする。
現在のスライスの八分木デコードプロセスが完了した後、以下のような逆量子化プロセスが適用される。
for (i = 0; i < PointCount; i++) {
PointPos[ i ][ 0 ] = (PointPos[ i ][ 0 ] * geoSliceQS + (1 << 19)) >> 20;
PointPos[ i ][ 1 ] = (PointPos[ i ][ 1 ] * geoSliceQS + (1 << 19)) >> 20;
PointPos[ i ][ 2 ] = (PointPos[ i ][ 2 ] * geoSliceQS + (1 << 19)) >> 20;
}
【0130】
9.スライスレベルと八分木レベルのジオメトリ量子化の組み合わせ
本開示の態様によれば、スライスベースのジオメトリ量子化を、八分木ベースのジオメトリ量子化と整列させることができる。2つの内部量子化ステップを適用する代わりに、それらを1つの操作、すなわち、八分木レベルにおける内部量子化にマージすることができる。そのソリューションは次の通りである。(1)八分木ベースの量子化のみが有効になっている場合、内部量子化が特定の指定された八分木パーティション深度で適用される八分木ベースのスキームと同じである。(2)スライスベースの量子化のみが有効になっている場合、内部量子化は第1の八分木パーティション深度で適用されることができる。(3)スライスベースの量子化と八分木ベースの量子化の両方が有効になっている場合、実際の量子化は八分木ベースのスキームで指定された八分木パーティション深度で適用されることができる。スライスレベルの決定されたQPは、八分木レベルでデルタQPをシグナリングするための基底QPとして使用されることができる。
【0131】
一実施形態では、QP変動のシグナリングが有効になっているか否かを示す制御フラグが、ジオメトリパラメータセットに追加される。有効になっている場合、スライスレベルでQP差分をシグナリングする際に、基底QPが予測子としてシグナリングされる。
ジオメトリパラメータセットのシンタックス変更を表28に示す。
【0132】
【0133】
変数gps_geo_delta_qp_flagが1に等しい場合、QP変動のシグナリングが有効になっていることを指定する。変数gps_geo_delta_qp_flagが0に等しい場合、QP変動のシグナリングが無効になっていることを指定する。QP変動のシグナリングが有効になっている場合、変数gps_geo_qp_baseは、QP差分のシグナリングに使用できる基底QPをbaseQP=gps_geo_qp_baseとして指定する。
ジオメトリスライスヘッダのシンタックス変更を表29に示す。
【0134】
【0135】
変数gsh_geo_slice_dqpは、現在のスライスで基底QPとして適用されるQPを、sliceQP=gsh_geo_slice_dqp+baseQPとして指定する。
【0136】
変数gsh_geo_octree_delta_qp_flagが1に等しい場合、現在のスライスでは八分木ベースのデルタQPのシグナリングが有効になっていることを指定する。変数gsh_geo_octree_delta_qp_flagが0に等しい場合、現在のスライスでは八分木ベースのデルタQPのシグナリングが無効になっていることを指定する。変数gsh_geo_octree_delta_qp_flagが1に等しい場合、変数gsh_geo_octree_delta_qp_depthは、QPのデルタがシグナリングされる八分木パーティションの深度を指定する。変数gsh_geo_octree_delta_qp_flagが0に等しい場合、変数gsh_geo_octree_delta_qp_depthは0であると推測され、量子化が第1の八分木パーティション深度で適用されることができることを示す。
【0137】
一実施形態では、デルタQPの値を八分木レベルでシグナリングするために、まず、デルタQPが0に等しいか否かを示す1ビットをシグナリングする。0でない場合、デルタQPの符号を示す別のビットをエンコードしシグナリングし、そして、その絶対値から1を引いた値を、Exp-Golomb符号化によって符号化する。ジオメトリスライスデータにおけるデルタQPのシグナリングを表30に示す。
【0138】
【0139】
変数GeometryNodeOccupancyCnt[depth][xN][yN][zN]は、八分木の所定の深度の位置(xN,yN,zN)にあるジオメトリ八分木ノードに存在する子ノードの数を表す。変数GeometryNodeOccupancyCntの未定義の値は0として扱われる。
【0140】
変数NodeX[depth][idx]、NodeY[depth][idx]、およびNodeZ[depth][idx]は、所定の深度におけるデコード順のidx番目のノードのx、y、z座標を表す。変数NumNodesAtDepth[depth]は、所定の深度でデコードされるノードの数を表す。
【0141】
変数NodeBaseX[depth][idx]、NodeBaseY[depth][idx]、およびNodeBaseZ[depth][idx]は、所定の深度におけるデコード順のidx番目のノードの量子化された位置の基底x、y、z座標を表す。変数NodeQuantX[depth][idx]、NodeQuantY[depth][idx]、およびNodeQuantZ[depth][idx]は、所定の深度におけるデコード順のidx番目のノードの基底位置に対する、量子化されたx、y、z座標を表す。また、変数geoOctreeQP[depth][nodeIdx]は、所定の深度におけるデコード順のnodeIdx番目のノードのQPを示す。
【0142】
変数NodeX、NodeY、NodeZ、NodeBaseX、NodeBaseY、NodeBaseZ、NodeQuantX、NodeQuantY、NodeQuantZ、geoQp、NumNodesAtDepth、GeometryNodeOccupancyCnt、およびGeometryNodeOccupancyMapは次のように初期化される。
【数55】
【0143】
変数gsh_geo_octree_delta_qp_flagが1に等しく、かつ深度が変数gsh_geo_octree_delta_qp_depthに等しい場合、現在のノードのデルタQP、すなわち変数geo_octree_dqpは、次のように指定される。
if( geo_delta_qp_is_nonzero_flag ) {
if( geo_delta_qp_sign )
geo_octree_dqp = geo_delta_qp_abs_minus_one + 1;
else
geo_octree_dqp = - geo_delta_qp_abs_minus_one - 1;
} else
geo_octree_dqp = 0;
【0144】
変数geo_octree_dqpがデコードされると、変数geoOctreeQP[depth][nodeIdx]は、変数geoOctreeQP[depth][nodeIdx]=geo_octree_dqp+baseQPとして更新される。
現在のノードのQSは、次のように導出されることができる。
【数56】
【0145】
ここで、geomLevelScale[k]={659445,741374,831472,933892,1048576,1175576}とし、k=0…5とする。
変数depthShiftは、ジオメトリビット深度のシフトをdepthShift=floor((geoQp-4)/6)として指定する。
導出されたパラメータdepthShiftは、表31に示されるように、現在のノードのジオメトリ符号化に影響を与え得る。
【0146】
【0147】
(depth+depthShift)>=MaxGeometryOctreeDepth-1の場合、内部量子化は、現在のノードのすべての点が単一の点に量子化されるよう十分に大きいことを示す。この場合、八分木パーティションが終了してもよく、また、変数OccupancyMapが1であると推定できるため、占有符号化をスキップすることができる。ジオメトリ符号化のIDCMモードでは、符号化長がChildNodeSizeLog2-depthShiftに変更され、ここで、変数ChildNodeSizeLog2は子ノードのサイズを示す。
変数direct_mode_flagが0に等しい場合、以下が適用される。
【数57】
【0148】
10.スライスレベルと八分木レベルのジオメトリ量子化の組み合わせのための八分木ノードデコードプロセス
このプロセスへの入力は、(1)パックされたジオメトリ八分木における現在のジオメトリ八分木ノードの位置を指定する八分木ノード位置(depth,nodeIdx)、(2)現在のスライスにおける現在のジオメトリ八分木ノードの位置を指定する空間的位置(xN,yN,zN)、(3)QPによるジオメトリ量子化が適用される、現在のスライスにおける現在のジオメトリ八分木ノードの基底位置を指定する空間的位置(xNBase,yNBase,zNBase)、および(4)(xNBase,yNBase,zNBase)によって指定される基底位置に対する、現在のスライスにおける現在のジオメトリ八分木ノードの量子化された位置を指定する空間的位置(xNQuant,yNQuant,zNQuant)を含む。
このプロセスの出力は、修正された配列PointPosと更新された変数PointCountである。
【0149】
どちらの深度もMaxGeometryOctreeDepth-1に等しくなく、かつ変数direct_mode_flagが0に等しい場合、このプロセスによって点は一切出力されない。それ以外の場合、深度がMaxGeometryOctreeDepth-1に等しいか、或いは、変数direct_mode_flagが1に等しい場合、このプロセスの残りの部分で1つまたは複数の点の位置が生成される。
占有されている各子における点の空間的位置は、各子における重複点の数と、直接符号化された位置の使用に従って、以下のように決定されることができる。
【数58】
【0150】
11.提案された適応ジオメトリ量子化への制約
本開示の態様によれば、提案された適応ジオメトリ量子化は、異なるジオメトリ八分木ノードに対して異なる量子化ステップサイズを許可することができる。このプロセスを簡略化するために、ジオメトリ量子化スキームに制約を導入することができる。
一実施形態では、適応ジオメトリ量子化は、特定のパーティション深度におけるノードに対してのみ許可される。
【0151】
一実施形態では、量子化ステップサイズは、2の累乗の数のみであり得る。この場合、量子化ステップのデルタは、log2形式でシグナリングされることができ、量子化/逆量子化の実施は、ビットシフトによって簡略化されることができる。
【0152】
一実施形態では、ジオメトリ関連符号化ツールの中には、適応ジオメトリ量子化と相互作用し得るものがある。相互作用を回避するために、追加の制約を利用してもよい。例えば、平面符号化モードは、場合によっては無効にされることができる。適応ジオメトリ量子化が特定のパーティション深度でのみ許可される実施形態では、平面符号化モードは、指定された深度を超えた深度で無効にされることができる。
【0153】
V.暗黙的なジオメトリパーティション
本節では、暗黙的なジオメトリパーティションを紹介する。2つのパラメータKおよびMがどのように更新されるか、KおよびMに基づいてパーティションの種類と方向がどのように決定されるかについて説明する。
まず、表32に示されるように、制御フラグと2つのパラメータKおよびMがジオメトリパラメータセットで指定されている。
【0154】
【0155】
変数gps_implicit_geom_partition_flagが1に等しい場合、暗黙的なジオメトリパーティションがシーケンスまたはスライスに対して有効になっていることを示す。変数gps_implicit_geom_partition_flagが0に等しい場合、暗黙的なジオメトリパーティションがシーケンスまたはスライスに対して無効になっていることを指定する。変数gps_implicit_geom_partition_flagが1に等しい場合、下記2つのパラメータがシグナリングされる。(1)gps_max_num_implicit_qtbt_before_otは、OTパーティションの前の暗黙的なQTおよびBTパーティションの最大数を指定し、すなわち、K=gps_max_num_implicit_qtbt_before_otとなる。(2)gps_min_size_implicit_qtbtは、暗黙的なQTおよびBTパーティションの最小サイズを指定し、すなわち、M=gps_min_size_implicit_qtbtとなる。
このパラメータは、すべての次元がMと等しいか、それより小さい場合に暗黙的なQTおよびBTパーティションを防止する。
暗黙的なQTBTが有効になっている場合、境界ボックスのサイズは、表33に示されるように、ジオメトリスライスヘッダ内の3つの値によって指定される。
【0156】
【0157】
変数gsh_log2_max_nodesize_xは、デコードプロセスで使用されるx次元の境界ボックスサイズ、すなわちMaxNodesizeXLog2を次のように指定する。
MaxNodeSizeXLog2=gsh_log2_max_nodesize_x,
MaxNodeSizeX = 1 << MaxNodeSizeXLog2
【0158】
変数gsh_log2_max_nodesize_y_minus_xは、デコードプロセスで使用されるy次元の境界ボックスサイズ、すなわちMaxNodesizeYLog2を次のように指定する。
MaxNodeSizeYLog2 = gsh_log2_max_nodesize_y_minus_x + MaxNodeSizeXLog2,
MaxNodeSizeY = 1 << MaxNodeSizeYLog2
【0159】
変数gsh_log2_max_nodesize_z_minus_yは、デコードプロセスで使用されるz次元の境界ボックスサイズ、すなわちMaxNodesizeZLog2を次のように指定する。
MaxNodeSizeZLog2 = gsh_log2_max_nodesize_z_minus_y + MaxNodeSizeYLog2,
MaxNodeSizeZ = 1 << MaxNodeSizeZLog2
【0160】
次に、パラメータKおよびMを以下のように更新する。
gsh_log2_max_nodesize = max{ MaxNodeSizeXLog2, MaxNodeSizeYLog2, MaxNodeSizeZLog2}
gsh_log2_min_nodesize = min{ MaxNodeSizeXLog2, MaxNodeSizeYLog2, MaxNodeSizeZLog2}
if (K > (gsh_log2_max_nodesize - gsh_log2_min_nodesize))
K = gsh_log2_max_nodesize - gsh_log2_min_nodesize;
if (M > gsh_log2_min_nodesize)
M = gsh_log2_min_nodesize;
if (gsh_log2_max_nodesize == gsh_log2_min_nodesize)
M = 0;
if (log2_trisoup_node_size != 0) {
K = gsh_log2_max_nodesize - gsh_log2_min_nodesize;
M = 0;
}
ジオメトリスライスデータの例示的な変更を表34に示す。表35は、例示的なシンタックステーブルを示す。
【0161】
【0162】
【表35】
変数MaxGeometryOctreeDepthは以下のように導出される。
MaxGeometryOctreeDepth=gsh_log2_max_nodesize - log2_trisoup_node_size
【0163】
変数NodeX[depthX][nodeIdx]、NodeY[depthY][nodeIdx]、およびNodeZ[depthZ][nodeIdx]は、所定の深度におけるデコード順のnodeIdx番目のノードのx、y、z座標を表す。変数NumNodesAtDepth[depth]は、所定の深度でデコードされるノードの数を表す。変数depthX、depthY、およびdepthZは、それぞれx、y、z次元の深度を指定する。変数partitionSkipは、表36に示されるように、パーティションの種類と方向を指定する。変数partitionSkipは、x、y、z次元に沿ってパーティションをスキップするか否かをそれぞれ指定する3つのビットb_x b_y b_zを用いて2進法で表される。例えば、b_x=1は、x次元に沿うパーティションがないことを示す。表37は、例示的なシンタックステーブルを示す。
【0164】
【0165】
【0166】
変数ChildNodeSizeXLog2、ChildNodeSizeYLog2、およびChildNodeSizeZLog2は、各次元の子ノードサイズを指定するもので、以下のように暗黙的なQTおよびBTパーティションによって決定される。
NodeSizeXLog2 = MaxNodeSizeXLog2 - depthX;
NodeSizeYLog2 = MaxNodeSizeYLog2 - depthY;
NodeSizeZLog2 = MaxNodeSizeZLog2 - depthZ;
if( !(partitionSkip & 4 )
ChildNodeSizeXLog2 = NodeSizeXLog2 - 1;
else
ChildNodeSizeXLog2 = NodeSizeXLog2;
if( !(partitionSkip & 2 )
ChildNodeSizeYLog2 = NodeSizeYLog2 - 1;
else
ChildNodeSizeYLog2 = NodeSizeYLog2;
if( !(partitionSkip & 1 )
ChildNodeSizeZLog2 = NodeSizeZLog2 - 1;
else
ChildNodeSizeZLog2 = NodeSizeZLog2;
【0167】
VI.並列八分木符号化
本節では、並列八分木符号化におけるコンテキスト変数とヒストリ変数の再初期化の詳細についてさらに説明する。
【数59】
【0168】
八分木パーティションが指定された深度
【数60】
に達すると、ビット単位符号化のためのコンテキスト変数の確率をメモリに記憶する必要がある。並行して進行する残りの八分木パーティション深度については、コンテキスト変数の確率は、記憶されたものと同じになるように再初期化される必要がある。
このプロセスは、各八分木深度の符号化開始時に起動される。
【数61】
ここで、NumCtxは、コンテキストの総数を示す。
八分木パーティションが指定された深度
【数62】
に達すると、バイト単位符号化のためのルックアップテーブルの値をメモリに記憶する必要がある。並行して進行する残りの八分木パーティション深度については、ルックアップテーブルの値は記憶されたものと同じになるように再初期化される必要がある。
【0169】
記憶および復元される必要がある関連変数は、(1)最も頻度の高いシンボルを記憶する値lut0[k]の配列(kは0以上31以下の範囲内にある)、(2)シンボルの出現回数を記憶する値lut0Histogram[k]の配列(kは0以上255以下の範囲内にある)、(3)lut0の更新期間と次回更新まで残っているシンボルの数をそれぞれ記憶する2つの変数lut0UpdatePeriodとlut0SymbolsUntilUpdate、(4)次のlut0更新時にlut0をリセットするか否かを指定する変数lut0Reset、(5)異なる値を持つ最後の16個のデコードされたシンボルを記憶する値lut1[k]の配列(kは0以上15以下の範囲内にある)、(6)最後にデコードされたシンボルのインデックスを記憶する変数lut1IndexLastSymbol、(7)適応2値算術コンテキストctxLut0Hit、ctxLut1Hit、およびctxSymbolBitのセット、(8)limitedContextModeが1に等しい場合はサイズ5、それ以外の場合(即ち、limitedContextModeが0に等しい場合)はサイズ31の適応2値算術コンテキストctxLut0Indexの配列、を含む。変数limitedContextModeは、限られた数のコンテキストを使用するか否かを指定する。
この再初期化プロセスは、各八分木深度の符号化開始時に以下のように起動される。
if (gps_parallel_octree_coding_flag && depth == d_min) {
for (k = 0; k < 32; k++)
lut0Svld[k]= lut0[k];
for (k = 0; k < 256; k++)
lut0HistogramSvld[k]= lut0Histogram [k];
lut0UpdatePeriodSvld = lut0UpdatePeriod;
lut0SymbolsUntilUpdateSvld = lut0SymbolsUntilUpdate;
lut0ResetSvld = lut0Reset;
for (k = 0; k < 16; k++)
lut1Svld[k]= lut1[k];
lut1IndexLastSymbolSvld = lut1IndexLastSymbol;
ctxLut0HitSvld = ctxLut0Hit;
ctxLut1HitSvld = ctxLut1Hit;
ctxSymbolBitSvld = ctxSymbolBit;
for (k = 0; k < 32; k++)
ctxLut0IndexSvld[k] = ctxLut0Index[k];
}
if (gps_parallel_octree_coding_flag && depth >= d_min) {
for (k = 0; k < 32; k++)
lut0[k]= lut0Svld[k];
for (k = 0; k < 256; k++)
lut0Histogram [k]= lut0HistogramSvld [k];
lut0UpdatePeriod = lut0UpdatePeriodSvld;
lut0SymbolsUntilUpdate = lut0SymbolsUntilUpdateSvld;
lut0Reset = lut0ResetSvld;
for (k = 0; k < 16; k++)
lut1 [k]= lut1Svld [k];
lut1IndexLastSymbol = lut1IndexLastSymbolSvld;
ctxLut0Hit = ctxLut0HitSvld;
ctxLut1Hit = ctxLut1HitSvld;
ctxSymbolBit = ctxSymbolBitSvld;
for (k = 0; k < 32; k++)
ctxLut0Index [k] = ctxLut0IndexSvld [k];
}
八分木パーティションが指定された深度
【数63】
に達すると、平面符号化モードの履歴値をメモリに記憶する必要がある。並行して進行する残りの八分木パーティション深度については、履歴値は記憶されたものと同じになるように再初期化される必要がある。
この再初期化プロセスは、各八分木深度の符号化開始時に以下のように起動される。
if (gps_parallel_octree_coding_flag && depth == d_min) {
localDensitySvld = localDensity;
for (axisIdx = 0; k < 2; k++) {
planeRateSvld [axisIdx]= planeRate [axisIdx];
}
}
if (gps_parallel_octree_coding_flag && depth >= d_min) {
localDensity = localDensitySvld;
for (axisIdx = 0; k < 2; k++) {
planeRate [axisIdx]= planeRateSvld [axisIdx];
}
}
【0170】
一実施形態では、並列八分木符号化を有効にする最小の八分木深度、すなわちd_minは、表38に示されるように、TMC13におけるジオメトリパラメータセット中のgps_parallel_octree_coding_max_nodesize_log2_minus1によって指定される。
【0171】
【表38】
変数gps_parallel_octree_coding_max_nodesize_log2は、並列八分木符号化を有効にする最小の八分木深度、すなわち
【数64】
を以下のように指定する。
【数65】
【0172】
この場合、変数gps_parallel_octree_coding_flagはシグナリングされないが、変数gps_parallel_octree_coding_max_nodesize_log2_minus1から推定されることができる。変数gps_parallel_octree_coding_max_nodesize_log2_minus1が0に等しい場合、変数gps_parallel_octree_coding_flagは0であると推定される。それ以外の場合、変数gps_parallel_octree_coding_flagは1であると推定される。
【0173】
VII.フローチャート
図11は、本開示の一実施形態によるプロセス(1100)を概説するフローチャートを示す。このプロセス(1100)は、点群をエンコードするためのエンコードプロセス中に使用され得る。様々な実施形態において、プロセス(1100)は、端末装置(110)の処理回路、エンコーダ(203)の機能を実行する処理回路、エンコーダ(300)の機能を実行する処理回路などの処理回路によって実行される。いくつかの実施形態では、プロセス(1100)はソフトウェア命令で実施されるため、処理回路がソフトウェア命令を実行すると、処理回路は、(S1110)で開始し得るプロセス(1100)を実行する。
(S1110)では、プロセス(1100)は、量子化された空間における点群のシンタックス情報を、符号化されたビットストリームからデコードする。シンタックス情報は、点群の境界ボックスの分割情報および適応ジオメトリ量子化情報を含む。その後、プロセス(1100)は、ステップ(S1120)に進む。
(S1120)では、プロセス(1100)は、分割情報に基づいて、点群の境界ボックスを複数の部分に分割する。部分は、上述したように、パーティションまたは領域に対応することができる。その後、プロセス(1100)は、ステップ(S1130)に進む。
(S1130)では、プロセス(1100)は、適応ジオメトリ量子化情報に基づいて、境界ボックス内の部分の量子化パラメータを決定する。その後、プロセス(1100)は、ステップ(S1140)に進む。
(S1140)では、プロセス(1100)は、境界ボックス内のそれぞれの部分の量子化パラメータに基づいて、点群の境界ボックス内の各部分の点を再構成する。その後、プロセス(1100)は終了する。
【0174】
一実施形態では、分割情報に含まれる八分木パーティション構造に基づいて、境界ボックスを複数のパーティションに分割する。
一実施形態では、分割情報に含まれる複数の領域の座標情報に基づいて、境界ボックスを複数の領域に分割する。
一実施形態では、適応ジオメトリ量子化情報に含まれる基底量子化パラメータに基づいて、量子化パラメータを決定される。
一実施形態では、1つまたは複数のデルタ量子化パラメータのシグナリングが有効になっていることを示す第1のシンタックス要素に応答して、1つまたは複数のデルタ量子化パラメータに基づいて量子化パラメータを決定する。第1のシンタックス要素は、適応ジオメトリ量子化情報に含まれる。
【0175】
一実施形態では、適応ジオメトリ量子化情報は、1つまたは複数のデルタ量子化パラメータのシグナリングが有効になっていることを示す第1のシンタックス要素に基づいて、第2のシンタックス要素および第3のシンタックス要素のうちのいずれかを含む。第2のシンタックス要素は、1つまたは複数のデルタ量子化パラメータのシグナリングが許可される八分木パーティション深度を示し、第3のシンタックス要素は、1つまたは複数のデルタ量子化パラメータのシグナリングが許可される最小の八分木パーティション深度を示す。
一実施形態では、量子化パラメータ、基底量子化パラメータ、および1つまたは複数のデルタ量子化パラメータのうちの少なくとも一方は、2の累乗である。
一実施形態では、(i)量子化パラメータと、(ii)1つまたは複数のデルタ量子化パラメータのうちのいずれかは、ルックアップテーブルに含まれる。
一実施形態では、適応ジオメトリ量子化情報は、(i)ルックアップテーブルのインデックスと、(ii)インデックスとインデックスの予測子との差分のうちのいずれかを含む。
【0176】
一実施形態では、境界ボックス内の各部分のデルタ量子化パラメータは、それぞれの部分に対応するノードの親ノードの量子化パラメータ、それぞれの部分に対応するノードの同じパーティション深度で先に符号化された兄弟ノードの量子化パラメータ、および基底量子化パラメータのうちの少なくとも一方に基づいて予測される。
一実施形態では、1つまたは複数のデルタ量子化パラメータは、量子化パラメータ予測子の候補リストに基づいて予測される。
【0177】
VIII.コンピュータシステム
以上で説明された技法は、コンピュータ読取可能な命令を使用するコンピュータソフトウェアとして実施され、1つまたは複数のコンピュータ読取可能な媒体に物理的に記憶されることができる。例えば、
図12は、開示された主題のいくつかの実施形態を実施することに適したコンピュータシステム(1200)を示す。
【0178】
コンピュータソフトウェアは、アセンブリ、コンパイル、リンク、またはそのようなメカニズムを施されて、1つまたは複数のコンピュータ中央処理装置(CPU)、グラフィックスプロセッシングユニット(GPU)などによって直接、または解釈、マイクロコード実行などによって実行されることができる命令を含むコードを作成する任意の適切な機械コードまたはコンピュータ言語を用いて符号化されることができる。
【0179】
命令は、例えば、パーソナルコンピュータ、タブレットコンピュータ、サーバ、スマートフォン、ゲームデバイス、モノのインターネットデバイスなどを含む、様々なタイプのコンピュータまたはそのコンポーネント上で実行されることができる。
【0180】
コンピュータシステム(1200)について、
図12に示されるコンポーネントは、本質的に例示的なものであり、本開示の実施形態を実施するコンピュータソフトウェアの使用または機能の範囲に関していかなる限定を示唆することも意図しない。コンポーネントの構成は、コンピュータシステム(1200)の例示的な実施形態で示されるコンポーネントのうちのいずれか1つ又は組み合わせに関する任意の依存性又は必要性を有するとして解釈されるべきではない。
【0181】
コンピュータシステム(1200)は、特定のヒューマンインターフェース入力デバイスを含み得る。このようなヒューマンインターフェース入力デバイスは、例えば、触覚入力(キーストローク、スワイプ、データグローブの動きなど)、オーディオ入力(音声、拍手など)、視覚入力(ジェスチャーなど)、嗅覚入力(示されていない)によって、1人または複数人のユーザによる入力に応答することができる。ヒューマンインターフェースデバイスは、オーディオ(音声、音楽、環境音など)、画像(走査画像、静止画像カメラから取得される写真画像など)、ビデオ(2次元ビデオ、立体ビデオを含む3次元ビデオなど)など、人間による意識的な入力に必ずしも直接関係しない特定のメディアをキャプチャすることにも使用できる。
【0182】
入力ヒューマンインターフェースデバイスは、キーボード(1201)、マウス(1202)、トラックパッド(1203)、タッチスクリーン(1210)、データグローブ(図示せず)、ジョイスティック(1205)、マイクフォン(1206)、スキャナ(1207)、カメラ(1208)(それぞれ1つのみ示されている)のうちの1つまたは複数を含み得る。
【0183】
コンピュータシステム(1200)は、特定のヒューマンインターフェース出力デバイスをも含み得る。このようなヒューマンインターフェース出力デバイスは、例えば、触覚出力、音声、光、および嗅覚/味覚を介して1人または複数人のユーザの感覚を刺激し得る。このようなヒューマンインターフェース出力デバイスは、触覚出力デバイス(例えば、タッチスクリーン(1210)、データグローブ(図示せず)、またはジョイスティック(1205)による触覚フィードバックがあるが、入力デバイスとして機能しない触覚フィードバックデバイスであってもよい)、オーディオ出力デバイス(スピーカ(1209)、ヘッドホン(示されていない)など)、視覚出力デバイス(CRTスクリーン、LCDスクリーン、プラズマスクリーン、OLEDスクリーンを含むスクリーン(1210)(それぞれタッチスクリーン入力能力を有するかもしくは有せず、それぞれ触覚フィードバック能力を有するかもしくは有しない。それらの一部は、ステレオグラフィック出力などの手段を介して、2次元の視覚出力または3次元以上の出力を出力することができる)、仮想現実眼鏡(示されていない)、ホログラフィックディスプレおよびスモークタンク(示されていない)など)、およびプリンタ(示されていない)を含み得る。
【0184】
コンピュータシステム(1200)は、人間がアクセス可能な記憶装置およびそれらの関連する媒体、例えば、CD/DVDなどの媒体(1221)付きのCD/DVD ROM/RW(1220)を含む光学媒体、サムドライブ(1222)、リムーバブルハードドライブまたはソリッドステートドライブ(1223)、テープやフロッピーディスクなどの従来の磁気媒体(示されていない)、セキュリティドングルなどの専用のROM/ASIC/PLDベースのデバイス(示されていない)などをも含むことができる。
【0185】
ここで開示された主題に関連して使用される「コンピュータ読取可能な媒体」という用語は、送信媒体、搬送波、または他の一時的な信号を包含しないことをも当業者が理解するべきである。
【0186】
コンピュータシステム(1200)は、1つまたは複数の通信ネットワークへのインターフェースをさらに含むことができる。ネットワークは、例えば、無線、有線、光学的であり得る。ネットワークは、さらに、ローカル、広域、大都市圏、車両用および産業用、リアルタイム、遅延耐性などであり得る。ネットワークの例は、イーサネット、無線LANなどのローカルエリアネットワーク、GSM、3G、4G、5G、LTEなどを含むセルラーネットワーク、ケーブルTV、衛星TV、および地上放送TVを含むTV有線または無線広域デジタルネットワーク、CANBusを含む車両用や産業用などを含む。特定のネットワークは、一般に、特定の汎用データポートまたは周辺バス(1249)(例えば、コンピューターシステム(1200)のUSBポートなど)に接続された外部ネットワークインターフェースアダプターを必要とする。他のものは一般に、以下で説明するようにシステムバスに接続することにより、コンピューターシステム(1200)のコアに統合される(例えば、PCコンピューターシステムへのイーサネットインターフェースまたはスマートフォンコンピューターシステムへのセルラーネットワークインターフェース)。これらのネットワークのいずれかを用いて、コンピュータシステム(1200)は、他のエンティティと通信することができる。このような通信は、単方向、受信のみ(例えば、放送TV)、単方向の送信のみ(例えば、特定のCANbusデバイスへのCANbus)、または双方向、例えばローカルまたはワイドエリアデジタルネットワークを用いる他のコンピュータシステムへの送信であり得る。特定のプロトコルおよびプロトコルスタックを上述したこれらのネットワークおよびネットワークインターフェースのそれぞれで使用することができる。
【0187】
前述のヒューマンインターフェースデバイス、人間がアクセス可能な記憶装置、およびネットワークインターフェースは、コンピュータシステム(1200)のコア(1240)に接続されることができる。
【0188】
コア(1240)は、1つまたは複数の中央処理装置(CPU)(1241)、グラフィックスプロセッシングユニット(GPU)(1242)、フィールドプログラマブルゲートエリア(FPGA)(1243)の形態での専用プログラマブル処理ユニット、特定のタスクのためのハードウェアアクセラレータ(1244)などを含むことができる。これらのデバイスは、リードオンリーメモリ(ROM)(1245)、ランダムアクセスメモリ(1246)、非ユーザアクセス可能な内部ハードドライブ、SSDなどの内部大容量記憶装置(1247)とともに、システムバス(1248)を介して接続されてもよい。一部のコンピュータシステムでは、システムバス(1248)は、1つまたは複数の物理プラグの形態でアクセスでき、追加のCPU、GPUなどによる拡張を可能にする。周辺機器は、コアのシステムバス(1248)に直接、または周辺バス(1249)を介して接続されることができる。周辺バスのアーキテクチャは、PCI、USBなどを含む。
【0189】
CPU(1241)、GPU(1242)、FPGA(1243)、およびアクセラレータ(1244)は、組み合わせて、前述のコンピュータコードを構成することができる特定の命令を実行することができる。そのコンピュータコードは、ROM(1245)またはRAM(1246)に記憶されることができる。推移データはRAM(1246)にも記憶できるが、永続データは、例えば、内部大容量ストレージ(1247)に記憶されることができる。1つまたは複数のCPU(1241)、GPU(1242)、大容量ストレージ(1247)、ROM(1245)、RAM(1246)などと密接に関連付けることができるキャッシュメモリを使用することにより、任意のメモリデバイスへの高速保存および検索が可能になる。
【0190】
コンピュータ読取可能な媒体は、様々なコンピュータ実施操作を実行するためのコンピュータコードを備えることができる。媒体およびコンピュータコードは、本開示の目的のために特別に設計および構築されたものであり得るか、もしくは、それらは、コンピュータソフトウェア技術の当業者に周知であって利用可能な種類のものであり得る。
【0191】
限定ではなく、一例として、アーキテクチャを有するコンピュータシステム(1200)、特にコア(1240)は、1つまたは複数の有形のコンピュータ読取可能な媒体に組み込まれたソフトウェアを実行するプロセッサ(CPU、GPU、FPGA、アクセラレータなどを含む)の結果としての機能性を提供することができる。このようなコンピュータ読取可能な媒体は、以上で紹介したようにユーザがアクセス可能な大容量ストレージ、および、コア内部大容量ストレージ(1247)またはROM(1245)などの非一時的な性質を持つコア(1240)の特定のストレージに関連付けられた媒体であり得る。本開示の様々な実施形態を実施するソフトウェアは、このようなデバイスに記憶され、コア(1240)によって実行されることができる。コンピュータ読取可能な媒体は、特定の必要に応じて、1つまたは複数のメモリデバイスまたはチップを含むことができる。ソフトウェアは、コア(1240)、具体的にはその中のプロセッサ(CPU、GPU、FPGAなどを含む)に、RAM(1246)に記憶されたデータ構造を定義すること、および、ソフトウェアで定義されたプロセスに従ってこのようなデータ構造を変更することを含む、ここで説明する特定のプロセスまたは特定のプロセスの特定の部分を実行させることができる。加えて、または、代替として、コンピュータシステムは、本明細書に記載された特定のプロセスまたは特定のプロセスの特定の部分を実行するためにソフトウェアの代わりにまたは一緒に動作することができる回路(例えば、アクセラレータ(1244))に有線接続されたまたは組み込まれたロジックの結果としての機能性を提供することができる。ソフトウェアへの言及は、必要に応じて、ロジックを含むことができ、その逆も同様である。コンピュータ読取可能な媒体への言及は、必要に応じて、実行のためのソフトウェアを記憶する回路(集積回路(IC)など)、実行のためのロジックを具現化する回路、またはその両方を含むことができる。本開示は、ハードウェアとソフトウェアの任意の適切な組み合わせを含む。
【0192】
本開示は一部の例示的な実施形態を説明してきたが、本開示の範囲内に含まれる変更、置換、および様々な代替の均等物が存在する。したがって、当業者は、本明細書では明示的に示されていないか、または記載されていないが、本開示の原理を具現化し、その思想および範囲内に含まれる様々なシステムおよび方法を考案できることが理解されよう。