(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-06
(45)【発行日】2024-06-14
(54)【発明の名称】点群復号装置、点群復号方法及びプログラム
(51)【国際特許分類】
G06T 9/40 20060101AFI20240607BHJP
H04N 19/597 20140101ALI20240607BHJP
【FI】
G06T9/40
H04N19/597
(21)【出願番号】P 2020164128
(22)【出願日】2020-09-29
【審査請求日】2023-03-02
【国等の委託研究の成果に係る記載事項】(出願人による申告)令和元年度、総務省、「多様な用途、環境下での高精細映像の活用に資する次世代映像伝送・通信技術の研究開発」委託事業、産業技術力強化法第17条の適用を受ける特許出願
(73)【特許権者】
【識別番号】000208891
【氏名又は名称】KDDI株式会社
(74)【代理人】
【識別番号】110001564
【氏名又は名称】フェリシテ弁理士法人
(74)【代理人】
【識別番号】110001106
【氏名又は名称】弁理士法人キュリーズ
(72)【発明者】
【氏名】海野 恭平
(72)【発明者】
【氏名】河村 圭
【審査官】岡本 俊威
(56)【参考文献】
【文献】国際公開第2020/184443(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 9/00- 9/40
H04N 19/00-19/98
(57)【特許請求の範囲】
【請求項1】
点群復号装置であって、
Octreeを復号する際のツリーの階層数を示すシンタックスを復号するように構成されている幾何情報復号部を備え、
前記幾何情報復号部によって復号される前記シンタックスの値は、1スライス或いは1データユニットあたりの最大ノードサイズに所定の自然数を加えた値以下となることを特徴とする点群復号装置。
【請求項2】
前記幾何情報復号部は、QtBtを適用するか否かを示すフラグを復号するように構成されており、
前記フラグが前記QtBtを適用することを示す場合、前記幾何情報復号部によって復号される前記シンタックスの値は、前記最大ノードサイズに所定の自然数を加えた値以下となり、
前記フラグが前記QtBtを適用しないことを示す場合、前記幾何情報復号部によって復号される前記シンタックスの値は、前記最大ノードサイズ以下となることを特徴とする請求項
1に記載の点群復号装置。
【請求項3】
前記所定の自然数は「4」であることを特徴とする請求項
1に記載の点群復号装置。
【請求項4】
点群復号方法であって、
Octreeを復号する際のツリーの階層数を示すシンタックスを復号する工程を備え、
前記工程において復号される前記シンタックスの値は、1スライス或いは1データユニットあたりの最大ノードサイズに所定の自然数を加えた値以下となることを特徴とする点群復号方法。
【請求項5】
コンピュータを、点群復号装置として機能させるプログラムであって、
前記点群復号装置は、
Octreeを復号する際のツリーの階層数を示すシンタックスを復号するように構成されている幾何情報復号部を備え、
前記幾何情報復号部によって復号される前記シンタックスの値は、1スライス或いは1データユニットあたりの最大ノードサイズに所定の自然数を加えた値以下となることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、点群復号装置、点群復号方法及びプログラムに関する。
【背景技術】
【0002】
非特許文献1には、ノード間の間隔を制御するシンタックスを指数ゴロム符号を用いて復号する技術が開示されている。
【先行技術文献】
【非特許文献】
【0003】
【文献】G-PCC Future Enhancement、ISO/IEC/ JTC1/SC29/WG11 N19328
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、非特許文献1では、ノード間の間隔を制御するシンタックスが取り得る値の範囲が規定されていない。指数ゴロム符号は、理論的には、符号語のビット数を無限に増やしていくことで、無限に取り得る値を増やすことができる。よって、かかるシンタックスに係るビット数が無限に増えてしまう可能性があるという問題点があった。
【0005】
そこで、本発明は、上述の課題に鑑みてなされたものであり、仕様において現実的に処理可能なノード間隔の値を明確に定義し、かかる仕様に対応した装置の実装を容易にし、かかる仕様に違反しているビットストリームの検出を容易にすることができる点群復号装置、点群復号方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0006】
本発明の第1の特徴は、点群復号装置であって、ノード間の間隔を制御するシンタックスを復号するように構成されている復号部を備え、前記復号部によって復号される前記シンタックスの値は、0以上となることを要旨とする。
【0007】
本発明の第2の特徴は、点群復号装置であって、Octreeを復号する際のツリーの階層数を示すシンタックスを復号するように構成されている幾何情報復号部を備え、前記幾何情報復号部によって復号される前記シンタックスの値は、1スライス或いは1データユニットあたりの最大ノードサイズに所定の自然数を加えた値以下となることを要旨とする。
【0008】
本発明の第3の特徴は、点群復号装置であって、Trisoupを適用するノードサイズを示すシンタックスを復号するように構成されている幾何情報復号部を備え、前記幾何情報復号部によって復号される前記シンタックスの値は、対応するスライス或いはデータユニットの最大ノードサイズ以下となることを要旨とする。
【0009】
本発明の第4の特徴は、点群復号装置であって、Trisoupを適用するノードサイズを示すシンタックスを復号するように構成されている幾何情報復号部を備え、前記幾何情報復号部によって復号される前記シンタックスの値は、対応するスライス或いはデータユニットのルートノードサイズ以下となることを要旨とする。
【0010】
本発明の第5の特徴は、点群復号方法であって、ノード間の間隔を制御するシンタックスを復号する工程を有し、前記工程において復号される前記シンタックスの値は、0以上
となることを要旨とする。
【0011】
本発明の第6の特徴は、点群復号装置で用いるプログラムであって、コンピュータに、ノード間の間隔を制御するシンタックスを復号する工程を実行させ、前記工程において復号される前記シンタックスの値は、0以上となることを要旨とする。
【発明の効果】
【0012】
本発明によれば、仕様に対応した装置の実装を容易にし、かかる仕様に違反しているビットストリームの検出を容易にすること点群復号装置、点群復号方法及びプログラムを提供することができる。
【図面の簡単な説明】
【0013】
【
図1】一実施形態に係る点群処理システム10の構成の一例を示す図である。
【
図2】一実施形態に係る点群復号装置200の機能ブロックの一例を示す図である。
【
図3】一実施形態に係る点群復号装置200の幾何情報復号部2010で受信する符号化データ(ビットストリーム)の構成の一例である。
【
図4】一実施形態に係るGPS2011のシンタックス構成の一例である。
【
図5】一実施形態に係るGSH2012A及び2012Bのシンタックス構成の一例である
【
図6】一実施形態に係る点群復号装置200のツリー合成部2020の処理の一例を示すフローチャートである。
【
図7】一実施形態に係る点群復号装置200の属性情報復号部2060で受信する符号化データ(ビットストリーム)の構成の一例である。
【
図8】一実施形態に係るSPS2001のシンタックス構成の一例である。
【
図9】一実施形態に係るAPS2061のシンタックス構成の一例である。
【発明を実施するための形態】
【0014】
以下、本発明の実施の形態について、図面を参照しながら説明する。なお、以下の実施形態における構成要素は、適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組み合わせを含む様々なバリエーションが可能である。したがって、以下の実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
【0015】
(第1実施形態)
以下、
図1~
図9を参照して、本発明の第1実施形態に係る点群処理システム10について説明する。
図1は、本実施形態に係る実施形態に係る点群処理システム10を示す図である。
【0016】
図1に示すように、点群処理システム10は、点群符号化装置100及び点群復号装置200を有する。
【0017】
点群符号化装置100は、入力点群信号を符号化することによって符号化データ(ビットストリーム)を生成するように構成されている。点群復号装置200は、ビットストリームを復号することによって出力点群信号を生成するように構成されている。
【0018】
なお、入力点群信号及び出力点群信号は、点群内の各点の位置情報と属性情報とから構成される。属性情報は、例えば、各点の色情報や反射率である。
【0019】
ここで、かかるビットストリームは、点群符号化装置100から点群復号装置200に
対して伝送路を介して送信されてもよい。また、ビットストリームは、記憶媒体に格納された上で、点群符号化装置100から点群復号装置200に提供されてもよい。
【0020】
(点群復号装置200)
以下、
図2を参照して、本実施形態に係る点群復号装置200について説明する。
図2は、本実施形態に係る点群復号装置200の機能ブロックの一例について示す図である。
【0021】
図2に示すように、点群復号装置200は、幾何情報復号部2010と、ツリー合成部2020と、近似表面合成部2030と、幾何情報再構成部2040と、逆座標変換部2050と、属性情報復号部2060と、逆量子化部2070と、RAHT部2080と、LoD算出部2090と、逆リフティング部2100と、逆色変換部2110とを有する。
【0022】
幾何情報復号部2010は、点群符号化装置100から出力されるビットストリームのうち、幾何情報に関するビットストリーム(幾何情報ビットストリーム)を入力とし、シンタックスを復号するように構成されている。
【0023】
復号処理は、例えば、コンテキスト適応二値算術復号処理である。ここで、例えば、シンタックスは、位置情報の復号処理を制御するための制御データ(フラグやパラメータ)を含む。
【0024】
ツリー合成部2020は、幾何情報復号部2010によって復号された制御データ及び後述するツリー内のどのノードに点群が存在するかを示すoccupancy codeを入力として、復号対象空間内のどの領域に点が存在するかというツリー情報を生成するように構成されている。
【0025】
本処理は、復号対象空間を直方体で区切り、occupancy codeを参照して各直方体内に点が存在するかを判断し、点が存在する直方体を複数の直方体に分割し、occupancy codeを参照するという処理を再帰的に繰り返すことで、ツリー情報を生成することができる。
【0026】
本実施形態では、上述の直方体を常に立方体として8分木分割を再帰的に行う「Octree」と呼ばれる手法、及び、8分木分割に加え、4分木分割及び2分木分割を行う「QtBt」と呼ばれる手法を使用することができる。「QtBt」を使用するか否かは、制御データとして点群符号化装置100側から伝送される。
【0027】
或いは、制御データによってPredicitive codingを使用するように指定された場合、ツリー合成部2020は、点群符号化装置100において決定した任意のツリー構成に基づいて各点の座標を復号するように構成されている。
【0028】
近似表面合成部2030は、ツリー合成部2020によって生成されたツリー情報を用いて、近似表面情報を生成するように構成されている。
【0029】
近似表面情報は、例えば、物体の3次元点群データを復号する際等において、点群が物体表面に密に分布しているような場合に、個々の点群を復号するのではなく、点群の存在領域を小さな平面で近似して表現したものである。
【0030】
具体的には、近似表面合成部2030は、例えば、「Trisoup」と呼ばれる手法で、近似表面情報を生成することができる。「Trisoup」の具体的な処理としては、例えば、非特許文献1に記載の方法を用いることができる。また、Lidar等で取得
した疎な点群を復号する場合は、本処理を省略することができる。
【0031】
幾何情報再構成部2040は、ツリー合成部2020によって生成されたツリー情報及び近似表面合成部2030によって生成された近似表面情報を元に、復号対象の点群データの各点の幾何情報(復号処理が仮定している座標系における位置情報)を再構成するように構成されている。
【0032】
逆座標変換部2050は、幾何情報再構成部2040によって再構成された幾何情報を入力として、復号処理が仮定している座標系から、出力点群信号の座標系に変換を行い、位置情報を出力するように構成されている。
【0033】
属性情報復号部2060は、点群符号化装置100から出力されるビットストリームのうち、属性情報に関するビットストリーム(属性情報ビットストリーム)を入力とし、シンタックスを復号するように構成されている。
【0034】
復号処理は、例えば、コンテキスト適応二値算術復号処理である。ここで、例えば、シンタックスは、属性情報の復号処理を制御するための制御データ(フラグ及びパラメータ)を含む。
【0035】
また、属性情報復号部2060は、復号したシンタックスから、量子化済み残差情報を復号するように構成されている。
【0036】
逆量子化部2070は、属性情報復号部2060によって復号された量子化済み残差情報と、属性情報復号部2060によって復号された制御データの一つである量子化パラメータとを元に、逆量子化処理を行い、逆量子化済み残差情報を生成するように構成されている。
【0037】
逆量子化済み残差情報は、復号対象の点群の特徴に応じて、RAHT部2080及びLoD算出部2090のいずれかに出力される。いずれに出力されるかは、属性情報復号部2060によって復号される制御データによって指定される。
【0038】
RAHT部2080は、逆量子化部2070によって生成された逆量子化済み残差情報及び幾何情報再構成部2040によって生成された幾何情報を入力とし、RAHT(Region Adaptive Hierarchical Transform)と呼ばれるHaar変換(復号処理においては、逆Haar変換)の一種を用いて、各点の属性情報を復号するように構成されている。RAHTの具体的な処理としては、例えば、非特許文献1に記載の方法を用いることができる。
【0039】
LoD算出部2090は、幾何情報再構成部2040によって生成された幾何情報を入力とし、LoD(Level of Detail)を生成するように構成されている。
【0040】
LoDは、ある点の属性情報から、他のある点の属性情報を予測し、予測残差を符号化或いは復号するといった予測符号化を実現するための参照関係(参照する点及び参照される点)を定義するための情報である。
【0041】
言い換えると、LoDは、幾何情報に含まれる各点を複数のレベルに分類し、下位のレベルに属する点については上位のレベルに属する点の属性情報を用いて属性を符号化或いは復号するといった階層構造を定義した情報である。
【0042】
LoDの具体的な決定方法としては、例えば、非特許文献1に記載の方法を用いてもよ
い。
【0043】
逆リフティング部2100は、LoD算出部2090によって生成されたLoD及び逆量子化部2070によって生成された逆量子化済み残差情報を用いて、LoDで規定した階層構造に基づいて各点の属性情報を復号するように構成されている。逆リフティングの具体的な処理としては、例えば、非特許文献1に記載の方法を用いることができる。
【0044】
逆色変換部2110は、復号対象の属性情報が色情報であり且つ点群符号化装置100側で色変換が行われていた場合に、RAHT部2080又は逆リフティング部2100から出力される属性情報に逆色変換処理を行うように構成されている。かかる逆色変換処理の実行の有無については、属性情報復号部2060によって復号された制御データによって決定される。
【0045】
点群復号装置200は、以上の処理により、点群内の各点の属性情報を復号して出力するように構成されている。
【0046】
(幾何情報復号部2010)
以下、
図3~
図4を用いて幾何情報復号部2010で復号される制御データについて説明する。
【0047】
図3は、幾何情報復号部2010で受信する符号化データ(ビットストリーム)の構成の一例である。
【0048】
第1に、ビットストリームは、GPS2011を含んでいてもよい。GPS2011は、ジオメトリパラメータセットとも呼ばれ、幾何情報の復号に関する制御データの集合である。具体例については後述する。各GPS2011は、複数のGPS2011が存在する場合に個々を識別するためのGPS id情報を少なくとも含む。
【0049】
第2に、ビットストリームは、GSH2012A/2012Bを含んでいてもよい。G
SH2012A/2012Bは、ジオメトリスライスヘッダ或いはジオメトリデータユニ
ットヘッダとも呼ばれ、後述するスライスに対応する制御データの集合である。以降では、スライスという呼称を用いて説明するが、スライスをデータユニットと読み替えることもできる。具体例については後述する。GSH2012A/2012Bは、各GSH20
12A/2012Bに対応するGPS2011を指定するためのGPS id情報を少な
くとも含む。
【0050】
第3に、ビットストリームは、GSH2012A/2012Bの次に、スライスデータ
2013A/2013Bを含んでいてもよい。スライスデータ2013A/2013Bには、幾何情報を符号化したデータが含まれている。スライスデータ2013A/2013B
の一例としては、後述するoccupancy codeが挙げられる。
【0051】
以上のように、ビットストリームは、各スライスデータ2013A/2013Bに、1
つずつGSH2012A/2012B及びGPS2011が対応する構成となる。
【0052】
上述のように、GSH2012A/2012Bにて、どのGPS2011を参照するか
をGPS id情報で指定するため、複数のスライスデータ2013A/2013Bに対
して共通のGPS2011を用いることができる。
【0053】
言い換えると、GPS2011は、スライスごとに必ずしも伝送する必要がない。例えば、
図3のように、GSH2012B及びスライスデータ2013Bの直前では、GPS
2011を符号化しないようなビットストリームの構成とすることもできる。
【0054】
なお、
図3の構成は、あくまで一例である。各スライスデータ2013A/2013B
に、GSH2012A/2012B及びGPS2011が対応する構成となっていれば、
ビットストリームの構成要素として、上述以外の要素が追加されてもよい。例えば、
図3に示すように、ビットストリームは、シーケンスパラメータセット(SPS)2001を含んでいてもよい。また、同様に、伝送に際して、
図3と異なる構成に整形されてもよい。更に、後述する属性情報復号部2060で復号されるビットストリームと合成して単一のビットストリームとして伝送されてもよい。
【0055】
図4は、GPS2011のシンタックス構成の一例である。
【0056】
なお、以下で説明するシンタックス名は、あくまで一例である。以下で説明したシンタックスの機能が同様であれば、シンタックス名は異なっていても差し支えない。
【0057】
GPS2011は、各GPS2011を識別するためのGPS id情報(gps_g
eom_parameter_set_id)を含んでもよい。
【0058】
なお、
図4のDescriptor欄は、各シンタックスが、どのように符号化されているかを意味している。ue(v)は、符号無し0次指数ゴロム符号であることを意味し、u(1)は、1ビットのフラグであることを意味する。
【0059】
GPS2011は、ツリー合成部2020でPredicitive codingを使用するかどうかを制御するためのフラグ(geom_tree_type)を含んでもよい。
【0060】
例えば、geom_tree_typeの値が「1」の場合は、Predicitive
codingを使用すると定義し、geom_tree_typeの値が「0」の場合は、Predicitive codingを使用せず,代わりに「Octree」(「QtBt」を使用する場合も含む)を使用するように定義されていてもよい。
【0061】
GPS2011は、近似表面合成部2030においてTrisoupを用いるか否かを制御するフラグ(trisoup_enabled_flag)を含んでもよい。
【0062】
例えば、trisoup_enabled_flagの値が「1」の場合は、Trisoupを使用すると定義し、trisoup_enabled_flagの値が「0」の場合は、Trisoupを使用しないように定義されていてもよい。
【0063】
GPS2011は、Trisoupを使用しないとき、すなわち、trisoup_e
nabled_flagの値が「0」の場合、追加でDirect coding mo
deを使用するか否かを制御するフラグ(inferred_direct_coding_mode_enabled_flag)を含んでもよい。
【0064】
例えば、inferred_direct_coding_mode_enabled_flagの値が「1」の場合は、Direct coding modeを使用すると定義し、inferred_direct_coding_mode_enabled_flag
の値が「0」の場合は、Direct coding modeを使用しないように定義されていてもよい。
【0065】
GPS2011は、ツリー合成部2020で「QtBt」を行うかどうかを制御するた
めのフラグ(geom_tree_coded_axis_list_present_flag)を含んでもよい。
【0066】
例えば、geom_tree_coded_axis_list_present_flagの値が「1」の場合は、「QtBt」を行うと定義し、geom_tree_coded_
axis_list_present_flagの値が「0」の場合は、「Octree」
のみを行うと定義してもよい。
【0067】
或いは、geom_tree_coded_axis_list_present_flagの値が「1」の場合は、ノード形状として立方体以外の直方体も許容する(すなわち、「QtBt」も使用する)と定義し、geom_tree_coded_axis_list_
present_flagの値が「0」の場合は、ノード形状として立方体のみ許可する
(すなわち「Octree」のみを行う)と定義してもよい。
【0068】
上述の定義以外でも、「QtBt」が使用可能か否かを制御するように定義されていればよい。
【0069】
GPS2011は、ツリー合成部2020でPlanar modeを使用するかどうかを制御するフラグ(geometry_planar_mode_flag)を含んでも
よい。
【0070】
例えば、geometry_planar_mode_flagの値が「1」の場合は、
Planar modeを使用すると定義し、geometry_planar_mode_flagの値が「0」の場合は、Planar modeを使用しないように定義され
ていてもよい。
【0071】
geometry_planar_mode_flagが含まれていなかった場合、幾何
情報復号部2010は、geometry_planar_mode_flagの値を「0
」とみなし、すなわち、Planar modeを使用しないとみなすように構成されていてもよい。
【0072】
なお、trisoup_enabled_flag、inferred_direct_coding_mode_enabled_flag、geometry_planar_mo
de_flag及びgeom_tree_coded_axis_list_present_
flagは、Predicitive codingを使用しない場合のみ復号されるように定義されていてもよい。
【0073】
GPS2011は、Angular modeを使用するか否かを制御するフラグ(geometry_angular_mode_flag)を含んでもよい。
【0074】
例えば、geometry_angular_mode_flagの値が「1」の場合は
、Angular modeを使用すると定義し、geometry_angular_mode_flagの値が「0」の場合は、Angular modeを使用しないように
定義されていてもよい。
【0075】
GPS2011は、Angular modeが使用する場合で且つPlanar modeを使用する場合に、追加でplanar_buffer_disabled_fla
gを含んでもよい。
【0076】
ここで、planar_buffer_disabled_flagの値が「0」の場合
は、Planar modeに関連する情報を復号する際にバッファを用いた最近傍ノード探索を行うと定義されていてもよい。
【0077】
一方、planar_buffer_disabled_flagの値が「1」の場合は
、Planar modeに関連する情報を復号する際にバッファを用いた最近傍ノード探索を行わないと定義されていてもよい。
【0078】
planar_buffer_disabled_flagが含まれていなかった場合、
幾何情報復号部2010は、planar_buffer_disabled_flagの
値を「1」とみなし、すなわち、Planar modeに関連する情報を復号する際にバッファを用いた最近傍ノード探索を行わないように構成されていてもよい。
【0079】
planar_buffer_disabled_flagの値が「0」の場合、すなわ
ち、Planar modeに関連する情報を復号する際にバッファを用いた最近傍ノード探索を行う場合の具体的な動作については、例えば、非特許文献1に記載の動作と同じでもよい。
【0080】
以上のように、ビットストリームからPlanar modeを使用するか否かを示すフラグを復号し、前記フラグがビットストリームに含まれない場合、前記フラグの値をPlanar modeを使用しない場合と同じ値とみなすように構成されていてもよい。
【0081】
このような構成とすることで、Planar modeを使用するか否かを示すフラグが復号されない場合、例えばPredicitive codingを使用する場合(geom_tree_typeの値が「1」の場合)にも、Planar modeを使用しないことを明示的に定義することができ、意図しない誤動作(Predicitive
codingを使用する場合にもPlanar modeに関する一部の処理が実行されてしまうこと)を防ぐことができる。
【0082】
また、以上のように、Planar modeを使用するか否かを示すフラグが、Planar modeを使用することを示している場合、Planar modeに関連する情報を復号する際にバッファを用いた最近傍ノード探索を行うか否かを制御するフラグを復号するように構成されていてもよい。
【0083】
このような構成とすることで、Planar modeを使用しない場合、すなわち、geom_tree_typeの値が「1」の場合、及び、geom_tree_typeの値が「0」かつgeometry_planar_mode_flagの値が「0」の
場合の両方について、単一の条件でPlanar modeに関連する情報を復号する際にバッファを用いた最近傍ノード探索を行うか否かを制御するフラグを復号しないようにすることができ、GPSのビット量及び復号に係る処理量を削減できる。
【0084】
また、以上のように、前記Planar modeに関連する情報を復号する際にバッファを用いた最近傍ノード探索を行うか否かを制御するフラグを復号しなかった場合、前記フラグの値をPlanar modeに関連する情報を復号する際にバッファを用いた最近傍ノード探索を行わない場合と同じ値とみなすように構成されていてもよい。
【0085】
このような構成とすることで、Planar modeに関連する情報を復号する際にバッファを用いた最近傍ノード探索を行わないことを明示的に定義することができ、意図しない誤動作を防ぐことができる。
【0086】
GPS2011は、位置情報の量子化(復号観点では逆量子化)を行うか否かを制御す
るフラグ(geom_scaling_enabled_flag)を含んでもよい。例えば、geom_scaling_enabled_flagの値が「1」の場合は逆量子化を行い、geom_scaling_enabled_flagの値が「0」の場合は逆量子化を行わないように定義されていてもよい。
【0087】
GPS2011は、逆量子化を行う場合、例えばgeom_scaling_enabled_flagの値が「1」の場合、追加で逆量子化を行う際の量子化パラメータ(QP)のベース値を示すシンタックス(geom_base_qp)を含んでもよい。GPS2011にgeom_base_qpが含まれないとき、その値を「0」とみなすように定義されていてもよい。
【0088】
GPS2011は、逆量子化を行う場合、例えばgeom_scaling_enabled_flagの値が「1」の場合、追加でgeom_qp_multiplier_log2を含んでもよい。当該シンタックスの値は、0~3の整数値をとるように規定されていてもよい。当該シンタックスの使用例については後述する。
【0089】
GPS2011は、逆量子化を行う場合、かつ、Predictive codingを使用する場合、すなわち、例えばgeom_scaling_enabled_flagの値が「1」で、かつ、geom_tree_typeの値が「1」の時、追加で量子化パラメータのオフセット値を伝送する間隔を規定するシンタックス(geom_qp_offset_intvl_log2)を含んでもよい。本シンタックスのとり得る値の
範囲として、0以上であること、という制約を含んでもよい。また、本シンタックスのとり得る値の範囲として、プロファイルまたはレベルごとに定義された、1スライス(1データユニット)に含まれるノード数の最大値(例えば、非特許文献1の「Max poi
nts in a slice」)以下であること、という制約を含んでもよい。また、g
eom_qp_offset_intvl_log2が実際の伝送間隔について2を底と
する対数をとった後の値である場合、最大値は例えば「Max points in a slice」について2を底とする対数をとった値としてもよい。
【0090】
また、geom_qp_offset_intvl_log2の値が、「0」以上かつ
「Max points in a slice」について2を底とする対数をとった値以下となるように、当該シンタックスを復号した後に、以下のクリッピング処理を行ってもよい。
【0091】
geom_qp_offset_intvl_log2 = Min(Max(geom_q
p_offset_intvl_log2,0),log2(Max points in a slice))
ここで、Min()は引数の中で最小値を返す関数、Max()は引数の中で最大値を返す関数である。
【0092】
geom_qp_offset_intvl_log2の値を用いた処理の一例を以下で説明する。
【0093】
第一に、以下のようにPtnQpIntervalを計算する。
PtnQpInterval = 1 << geom_qp_offset_intvl_log2
第二に、Predictive codingにおいて、点群データの各点の位置情報を順に復号する際に、PtnQpInterval点おきに、位置情報の残差の逆量子化に用いる量子化パラメータのオフセット値を復号する。すなわち、n番目に復号する点の、nをPtnQpIntervalで除算した剰余が0の時、前記量子化パラメータのオ
フセット値を復号する。
【0094】
第三に、前記量子化パラメータのオフセット値、geom_base_qp、後述するgeom_slice_qp_offsetの3つの値全てを加算して量子化パラメータを算出し、逆量子化処理を行う。
【0095】
なお、Predictive codingは、復号側で推定した位置情報の予測値と、符号化側から伝送される位置情報の残差を加算することで、各点の位置情報を復号する手法である。詳細は非特許文献1に記載されているため割愛する。
【0096】
以上のように、幾何情報復号部2010は、量子化パラメータのオフセット値を伝送する間隔を規定するシンタックスについて、かかるシンタックスの値が必ず「0」以上となるように復号するように構成されていてもよい。
【0097】
すなわち、幾何情報復号部2010によって復号される量子化パラメータのオフセット値を伝送する間隔を規定するシンタックスの値は、「0」以上となるように構成されている。
【0098】
このような構成とすることで、ノード間の間隔が負であるという実現不可能なビットストリームが発生しないようにすることができる。
【0099】
また、以上のように、仕様の制約として1スライス或いは1データユニットあたりの最大ノード数が規定されている場合、幾何情報復号部2010は、量子化パラメータのオフセット値を伝送する間隔を規定するシンタックスについて、かかるシンタックスの値が必ず1スライス或いは1データユニットあたりの最大ノード数以下となるように復号するように構成されていてもよい。
【0100】
すなわち、幾何情報復号部2010によって復号される量子化パラメータのオフセット値を伝送する間隔を規定するシンタックスの値は、1スライス或いは1データユニットあたりの最大ノード数以下となるように構成されていてもよい。
【0101】
このように、量子化パラメータのオフセット値を伝送する間隔を規定するシンタックスの値として取り得る値の最大値を定義することで、かかるシンタックスの復号に必要なビット数の最大値を定義することができ、GPS全体のビット長の最大値を規定するための一助となる。
【0102】
また、かかるシンタックスの最大値を1スライス或いは1データユニットあたりの最大ノード数以下となるように制約することで、ノード間の間隔が1スライス或いは1データユニットあたりの最大ノード数以上となるような実効的に無意味なビットストリームとなることを防ぐことができる。
【0103】
GPS2011は、逆量子化を行う場合、Predictive codingを使用しない場合(Octreeを使用する場合)で且つDirect coding modeを使用する場合、すなわち、例えば、geom_scaling_enabled_fl
agの値が「1」で、geom_tree_typeの値が「0」で且つinferred_direct_coding_mode_enabled_flagの値が「1」の場合、
追加でDirect coding mode時の量子化パラメータのオフセット値(geom_direct_coding_mode_qp_offset)を含んでもよい。
【0104】
GPS2011に、geom_direct_coding_mode_qp_offse
tが含まれない場合、幾何情報復号部2010は、geom_direct_coding_mode_qp_offsetの値を「0」とみなすように構成されていてもよい。
【0105】
図5は、GSH2012A及び2012Bのシンタックス構成の一例である。以降、GSH2012A及び2012BをまとめてGSH2012と呼ぶ。
【0106】
なお、以下で説明するシンタックス名は、あくまで一例である。以下で説明したシンタックスの機能が同様であれば、シンタックス名は異なっていても差し支えない。
【0107】
GSH2012は、かかるGSHに対応するGPSを識別するためのシンタックス(gsh_geometry_parameter_set_id)を含んでもよい。
【0108】
GSH2012は、対応するGPSにおいてOctreeを使用すると定義されていた場合、すなわち、例えば、geom_tree_typeの値が「0」の場合、Octreeを復号する際のツリーの階層数を示すシンタックス(geom_tree_depth_
minus1)を含んでもよい。
【0109】
例えば、geom_tree_depth_minus1の値は、実際の階層数から「1」を引いた値としておき、幾何情報復号部2010は、geom_tree_depth_m
inus1の値に「1」を加えることで、最終的な階層数を復号するように構成されてい
てもよい。
【0110】
また、Octreeを復号する際のツリーの階層数を示すシンタックスの取り得る値の範囲として、「0」以上であることという制約が規定されていてもよい。
【0111】
GPSにおいて「QtBt」を用いないと定義されている場合、すなわち、geom_
tree_coded_axis_list_present_flagの値が「0」の場合
、本シンタックスの取り得る値の範囲として、プロファイル又はレベルごとに定義されたノードサイズの最大値について2を底とする対数を取った値(例えば、非特許文献1の「MaxRootNodeDimLog2」)を用いて、MaxRootNodeDimLog2-1以下であることという制約が規定されていてもよい。
【0112】
GPSにおいて「QtBt」を用いると定義されている場合、すなわち、geom_t
ree_coded_axis_list_present_flagの値が「1」の場合、
本シンタックスの取り得る値の範囲として、プロファイル又はレベルごとに定義されたノードサイズの最大値について2を底とする対数を取った値(例えば、非特許文献1の「MaxRootNodeDimLog2」)を用いて、MaxRootNodeDimLog2-1+N(Nは、自然数)以下であることという制約が規定されていてもよい。例えば、Nの値は、「4」でもよい。或いは,最大値をMaxRootNodeDimLog2+Nと規定してもよい。例えば、Nの値は「3」でもよい。
【0113】
また、geom_tree_depth_minus1の値が、「0」以上且つ「Max
RootNodeDimLog2-1+N」以下となるように、当該シンタックスを復号した後に、幾何情報復号部2010は、以下のクリッピング処理を行ってもよい。
【0114】
geom_tree_depth_minus1 = Min(Max(geom_tree_depth_minus1,0),MaxRootNodeDimLog2-1+N)
ここで、Min()は、引数の中で最小値を返す関数であり、Max()は、引数の中で最大値を返す関数である。
【0115】
以上のように、仕様の制約として1スライス或いは1データユニットあたりの最大ノードサイズを規定されている場合、幾何情報復号部2010は、Octreeを復号する際のツリーの階層数を示すシンタックスの値が、必ず、上述の最大ノードサイズに所定の自然数を加えた値以下となるように復号するように構成されていてもよい。
【0116】
すなわち、幾何情報復号部2010によって復号されるOctreeを復号する際のツリーの階層数を示すシンタックスの値は、上述の最大ノードサイズに所定の自然数を加えた値以下となるように構成されていてもよい。
【0117】
このような構成とすることで、プロファイル又はレベルごとに定義されたノードサイズの最大値に応じて、必要最小限の範囲で、上述のシンタックスの値を定義することができ、かかるシンタックスに必要なビット数の最大値を必要最小限の値に抑えることができる。
【0118】
また、以上のように、幾何情報復号部2010は、「QtBt」を適用するか否かを示すフラグを復号し、かかるフラグが「QtBt」を適用することを示す場合には、Octreeを復号する際のツリーの階層数を示すシンタックスの値が、必ず、上述の最大ノードサイズに所定の自然数を加えた値以下となるように復号し、かかるフラグが「QtBt」を適用しないことを示す場合には、Octreeを復号する際のツリーの階層数を示すシンタックスの値が、必ず、上述の最大ノードサイズ以下となるように復号するように構成されていてもよい。
【0119】
すなわち、上述のフラグが「QtBt」を適用することを示す場合には、幾何情報復号部2010によって復号されるOctreeを復号する際のツリーの階層数を示すシンタックスの値は、上述の最大ノードサイズに所定の自然数を加えた値以下となり、かかるフラグが「QtBt」を適用しないことを示す場合には、幾何情報復号部2010によって復号されるOctreeを復号する際のツリーの階層数を示すシンタックスの値は、上述の最大ノードサイズ以下となるように構成されていてもよい。
【0120】
このような構成とすることで、「QtBt」を適用する場合には、Depthごとにノードを分割する軸方向の選択に自由度を持たせつつ、全体のDepth数の最大値を押さえることができ、かかる仕様を反映した装置を実装する場合の最大処理量の見積もりが容易となる。
【0121】
また、「QtBt」を適用しない場合には、ノード数の最大値とDepth数とを一致させることで、必要最小限の範囲で、かかるシンタックスの値を定義することができ、かかるシンタックスに必要なビット数の最大値を必要最小限の値に抑えることができる。
【0122】
GSH2012は、GPSにおいて位置情報の逆量子化を行うと定義されている場合、すなわち、例えば、geom_scaling_enabled_flagの値が「1」の
場合、量子化パラメータのスライス単位でのオフセット値(geom_slice_qp_
offset)を含んでもよい。
【0123】
GSH2012に、geom_slice_qp_offsetが含まれない場合、幾何
情報復号部2010は、geom_slice_qp_offsetの値を「0」とみなす
ように構成されていてもよい。
【0124】
GSH2012は、GPSにおいて位置情報の逆量子化を行うと定義されている場合で且つGPSにおいてOctreeを使用するように定義されている場合、すなわち、例えば、geom_scaling_enabled_flagの値が「1」で且つgeom_t
ree_typeの値が「0」の場合、位置情報の量子化パラメータのオフセット値を用
いるツリーの階層(depth)を定義するシンタックス(geom_octree_qp_offsets_depth)を含んでもよい。
【0125】
GSH2012は、GPSにおいてTrisoupを使用すると定義されている場合、すなわち、例えば、trisoup_enabled_flagの値が「1」の場合、Trisoupを適用するノードサイズを示すシンタックス(log2_trisoup_node_size)を含んでもよい。
【0126】
かかるシンタックスは、Trisoupを適用するノードサイズに対して、2を底とする対数をとった値と定義してもよい。
【0127】
また、かかるシンタックスの取り得る値の範囲として、「0」以上であることという制約が規定されていてもよい。
【0128】
かかるシンタックスの取り得る値の範囲として、プロファイル又はレベルごとに定義されたノードサイズの最大値について2を底とする対数を取った値(例えば、非特許文献1の「MaxRootNodeDimLog2」)以下であることという制約が規定されていてもよい。
【0129】
また、かかるシンタックスの取り得る値の範囲として、当該スライス(或いは、データユニット)のルートノードサイズついて2を底とする対数を取った値以下であることという制約が規定されていてもよい。ルートノードサイズについては、例えば、非特許文献1に記載のように、geom_tree_coded_axis_flagを用いて算出できる。
【0130】
また、log2_trisoup_node_sizeの値が「0」以上且つルートノー
ドサイズ以下となるように、かかるシンタックスを復号した後に、幾何情報復号部2010は、以下のクリッピング処理を行ってもよい。
【0131】
log2_trisoup_node_size = Min(Max(log2_trisoup_node_size,0),log2(RootNodeSize))
ここで、Min()は、引数の中で最小値を返す関数であり、Max()は、引数の中で最大値を返す関数である。また、RootNodeSizeは、ルートノードサイズを表す変数である。
【0132】
以上のように、幾何情報復号部2010は、Trisoupを適用するノードサイズを示すシンタックスの値が、必ず当該スライス或いは当該データユニットの最大ノードサイズ以下となるように復号するように構成されていてもよい。
【0133】
すなわち、幾何情報復号部2010によって復号されるTrisoupを適用するノードサイズを示すシンタックスの値は、当該スライス或いは当該データユニットの最大ノードサイズ以下となるように構成されていてもよい。
【0134】
このような構成とすることで、プロファイル又はレベルごとに定義されたノードサイズの最大値に応じて、必要最小限の範囲で、上述のシンタックスの値を定義することができ、かかるシンタックスに必要なビット数の最大値を必要最小限の値に抑えることができる。
【0135】
以上のように、幾何情報復号部2010は、Trisoupを適用するノードサイズを
示すシンタックスの値が、必ず当該スライス或いは当該データユニットのルートノードサイズ以下となるように復号するように構成されていてもよい。
【0136】
すなわち、幾何情報復号部2010によって復号されるTrisoupを適用するノードサイズを示すシンタックスの値は、当該スライス或いは当該データユニットのルートノードサイズ以下となるように構成されていてもよい。
【0137】
このような構成とすることで、スライス或いはデータユニットごとにルートノードサイズに応じて、必要最小限の範囲で、上述のシンタックスの値を定義することができ、かかるシンタックスに必要なビット数の最大値を必要最小限の値に抑えることができる。
【0138】
(ツリー合成部2020)
図6を用いて、ツリー合成部2020の処理の一例を説明する。
図6は、ツリー合成部2020の処理の一例を示すフローチャートである。
【0139】
図6に示すように、ステップS601において、ツリー合成部2020は、「Octree」又は「QtBt」を適用する場合のツリー構造について、全てのDepthの処理を完了したかどうかを確認する。
【0140】
かかるスライスのDepthの値は、例えば、GSHで伝送されるgeom_tree_depth_minus1から復号した階層数である。ツリー合成部2020は、かかる
スライスのDepth値と既に処理したDepthの値とを比較することで、全てのDepthについて処理が完了したかどうかを判定することができる。
【0141】
ツリー合成部2020は、全てのDepthの処理が完了した場合には、ステップS607の処理へ進み、処理を終了する。一方、ツリー合成部2020は、全てのDepthの処理が完了していない場合は、ステップS602の処理へ進む。
【0142】
ステップS602において、ツリー合成部2020は、当該Depth内の全てのノードについて処理が完了したかどうかを判定する。
【0143】
当該Depth内に含まれるノード数については、直前に処理したDepthでのノード情報復号処理(ステップS606)の結果から算出することができる。また、最初に処理するDepthに含まれるノード数は「1」である。
【0144】
ツリー合成部2020は、当該Depthに含まれる全ノードの処理が完了した場合には、ステップS601の処理へ戻る。一方、ツリー合成部2020は、全ノードの処理が完了していない場合には、ステップS603の処理へ進む。
【0145】
ステップS603において、ツリー合成部2020は、後段のステップS605の処理で用いるnodeQpOffsetを復号するか否かを判定する。
【0146】
ツリー合成部2020は、予め定めた所定条件を全て満足する場合、S604の処理へ進み、nodeQpOffsetを復号する。一方、ツリー合成部2020は、予め定めた所定条件を1つでも満たさない場合は、nodeQpOffsetの復号を省略し、ステップS605の処理へ進む。
【0147】
かかる所定条件は、当該depthの値がGeomScalingDepthと等しいことという条件を含んでもよい。
【0148】
GeomScalingDepthの値は、例えば、GPSにおいて位置情報の逆量子化を行うと定義されているか否かに応じて設定されてもよい。
【0149】
geom_scaling_enabled_flagの値が「1」の場合は、Geom
ScalingDepthの値をgeom_octree_qp_offsets_depthと同じ値とし、geom_scaling_enabled_flagの値が「0」の場
合は、GeomScalingDepthの値を「0」とするように定義されていてもよい。
【0150】
また、所定条件には、GPSにおいて位置情報の逆量子化を行うと定義されていること、すなわち、例えば、geom_scaling_enabled_flagの値が「1」
であることという条件を含んでもよい。
【0151】
ステップS604において、ツリー合成部2020は、nodeQpOffsetを復号する。
【0152】
ここで、第1に、ツリー合成部2020は、nodeQpOffsetの値が「0」であるか否かを示すシンタックス(geom_node_qp_offset_eq0_fla
g)を復号する。
【0153】
第2に、ツリー合成部2020は、geom_node_qp_offset_eq0_f
lagの値が「0」の場合、追加でnodeQpOffsetの符号(プラスかマイナスか)を示すシンタックス(geom_node_qp_offset_sign_flag)
及びnodeQpOffsetの絶対値を示すシンタックス(geom_node_qp_
offset_abs_minus1)を復号する。
【0154】
第3に、ツリー合成部2020は、以上で復号したシンタックスを用いて、nodeQpOffsetの値を復号する。ツリー合成部2020は、geom_node_qp_o
ffset_eq0_flagの値が「1」の場合、nodeQpOffsetの値を「0」とする。ツリー合成部2020は、geom_node_qp_offset_eq0_f
lagの値が「0」の場合、以下のように復号する。
nodeQpOffset = (2×geom_node_qp_offset_sign_
flag―1)×(geom_node_qp_offset_abs_minus1+1)
なお、ステップS604の処理がスキップされた場合、すなわち、geom_node_qp_offset_eq0_flagが復号されなかった場合は、ツリー合成部2020
は、geom_node_qp_offset_eq0_flagの値を「1」であるとみな
してもよい。すなわち、ステップS604の処理がスキップされた場合、ツリー合成部2020は、nodeQpOffsetの値を「0」とみなしてもよい。
【0155】
以上のように、ツリー合成部2020は、ビットストリームから位置情報の逆量子化を行うか否かを示すフラグを復号し、かかるフラグが位置情報の逆量子化を行わないことを示す場合、ノード毎の量子化パラメータのオフセット値nodeQpOffsetの値を「0」とするように構成されていてもよい。
【0156】
このような構成とすることで、逆量子化を行わない場合は、常にnodeQpOffsetの値を「0」にすることができ、後述するNodeQpの値が「0」、すなわち、逆量子化を行わない値になることを保証するのが容易となる。
【0157】
また、以上のように、位置情報の逆量子化を行うか否かを示すフラグが位置情報の逆量子化を行わないことを示す場合、ツリー合成部2020は、上述のnodeQpOffs
etに関するシンタックスの復号処理を省略するように構成されていてもよい。
【0158】
このような構成とすることで、位置情報の逆量子化を行わない場合に、不要な復号処理を省略し、処理量を削減することができる。
【0159】
また、以上のように、ツリー合成部2020は、nodeQpOffsetに関するシンタックスの1つとして、nodeQpOffsetの値が「0」であるか否かを示すフラグを復号し、かかるフラグの復号が省略された場合、かかるフラグの値をnodeQpOffsetの値が「0」であることを示す値とみなすように構成されていてもよい。
【0160】
このような構成とすることで、nodeQpOffsetの値が「0」であるか否かを示すフラグの復号が省略されたとき、すなわち、逆量子化を行わない場合は、常にnodeQpOffsetの値を「0」にすることができ、後述するNodeQpの値が「0」、すなわち、逆量子化を行わない値になることを保証するのが容易となる。
【0161】
以上の手順でnodeQpOffsetの値を復号した後、ツリー合成部2020は、ステップS605へ進む。
【0162】
ステップS605において、ツリー合成部2020は、NodeQpの値を復号する。
【0163】
第1に、ツリー合成部2020は、現在のdepthがGeomScalingDepthと等しい場合、以下の式でNodeQpの値を算出してもよい。
NodeQp = (geom_base_qp+geom_slice_qp_offset
+nodeQpOffset)<< geom_qp_multiplier_log2
ここで、GPSにおいて位置情報の逆量子化を行わないと定義されている場合、すなわち、geom_scaling_の値が「0」の場合は、NodeQpの値が「0」となるように定義されていてもよい。
【0164】
GPSにおいて位置情報の逆量子化を行わないと定義されている場合、すなわち、geom_scaling_enabled_flagの値が「0」の場合は、geom_base_qp、geom_slice_qp_offset、nodeQpOffsetのそれぞれの値が「0」となるように定義されていてもよい。
【0165】
NodeQpの値は、必ず0以上であることというコンフォーマンス制約をビットストリームに対して定義してもよい。
【0166】
また、ツリー合成部2020は、NodeQpの値が必ず0以上になるように、NodeQpを以下の式で算出してもよい。
NodeQp = Max(geom_base_qp+geom_slice_qp_off
set+nodeQpOffset,0)<< geom_qp_multiplier
_log2
ここで、Max()は、引数のうち、最も大きい値を返す関数である。
【0167】
第2に、ツリー合成部2020は、現在のdepthがGeomScalingDepthより大きい場合、NodeQpの値について、当該ノードの親ノード、すなわち、depthが当該ノードより1つ小さいときに使用したNodeQpと同じ値と定義してもよい。
【0168】
第3に、ツリー合成部2020は、現在のdepthがGeomScalingDep
thより小さい場合、以下の式でNodeQpの値を算出してもよい。
【0169】
dcmQp = (geom_base_qp + geom_direct_coding_mode_qp_offset) << geom_qp_multiplier_log2
NodeQp = Min(minScalingNodeDimLog2×8, dcmQp)
ここで、Min()は、引数のうち、最も小さい値を返す関数である。また、minScalingNodeDimLog2は、当該depthにおけるノードサイズを定義する3つの軸方向(例えば、x軸、y軸、z軸)のうち、最もサイズが小さい軸方向のサイズに対して2を底とする対数を取った値である。
【0170】
ここで、GPSにおいて位置情報の逆量子化を行わないと定義されている場合、すなわち、geom_scaling_enabled_flagの値が「0」の場合は、Nod
eQpの値が「0」となるように定義されていてもよい。
【0171】
GPSにおいて位置情報の逆量子化を行わないと定義されている場合、すなわち、geom_scaling_enabled_flagの値が「0」の場合は、geom_base_qp、geom_direct_coding_mode_qp_offsetのそれぞれの値が「0」となるように定義されていてもよい。
【0172】
NodeQpの値は、必ず0以上であることというコンフォーマンス制約をビットストリームに対して定義してもよい。
【0173】
すなわち、ツリー合成部2020は、NodeQpの値が「0」未満である場合、仕様に反したビットストリームであると判定してもよい。
【0174】
また、ツリー合成部2020は、NodeQpの値が必ず「0」以上になるように、NodeQpを以下の式で算出してもよい。
【0175】
NodeQp = Max(Min(minScalingNodeDimLog2×8, dcmQp),0)
以上のようにして求めたNodeQpは、位置情報の逆量子化処理に用いられる。逆量子化処理は、例えば、以下のように実行することができる。なお、GPSにおいて位置情報の逆量子化を行わないと定義されている場合、すなわち、geom_scaling_enabled_flagの値が「0」の場合は、以下のような逆量子化処理を行わないよ
うに構成されていてもよい。
【0176】
第1に、ツリー合成部2020は、逆量子化前のノードの座標値val(x成分、y成分、z成分のいずれか)を、以下のようにhighPartとlowPartに分離する。
【0177】
highPart = val >> (ScalingNodeSizeLog2[cIdx]―scalingExpansionLog2)
lowPart = val & ((1 << (ScalingNodeSizeLog2[cIdx]―scalingExpansionLog2))―1)
ここで、ScalingNodeSizeLog2[cIdx]は、cIdxの値に対応する軸方向(x方向、y方向、z方向のいずれか)の量子化前のノードサイズについて2を底とする対数を取った値である。また、scalingExpansionLog2は、NodeQpを8で整数除算した値である。すなわち、scalingExpans
ionLog2は、NodeQpを4で除算した後、得られた商の小数点以下を切り捨てて整数にした値である。
【0178】
第2に、ツリー合成部2020は、スケールファクターsFを以下の式で算出する。
【0179】
sF = 8+(qP & 7) << qP/8
ここで、qPの値は、NodeQpと同じ値である。また、&は、ビットごとの論理積を算出する演算子である。すなわち、qP&3は、qPの値を2進数で表現した場合の下位2桁を抽出する処理に等しい。
【0180】
なお、上記のように、qPの値と論理積を取る場合や、qPから算出した値に応じてビットシフトを行うように定義されている場合、qPの値、すなわち、NodeQpの値は、「0」以上の整数であることが期待される。
【0181】
第3に、ツリー合成部2020は、以下の式で逆量子化後の座標値posを算出する。
【0182】
highPartS = highPart << ScalingNodeSizeLog2[cIdx]
lowPartS = (lowPart × sF + 4) >> 3
pos = highPartS | Min(lowPartS, (1 << ScalingNodeSizeLog2「cIdx」)―1)
ここで、|は、ビット単位での論理和をとる演算子である。
【0183】
以上の逆量子化処理では、qPの値、すなわち、NodeQpの値が「0」の場合、入力値val及び出力値posが同じ値となる。なお、GPSにおいて位置情報の逆量子化を行わないよう規定されている場合、すなわち、例えば、geom_scaling_enabled_flagの値が「0」の場合、以上の逆量子化処理をスキップしてもよい。
また、上記のように、GPSにおいて位置情報の逆量子化を行わないよう規定されている場合、すなわち、例えば、geom_scaling_enabled_flagの値が「
0」の場合、NodeQpの値が必ず「0」となるように規定されていてもよい。
【0184】
以上のように、ツリー合成部2020は、ノード毎の量子化パラメータNodeQpの値が、必ず所定値以上又は所定値より大きくなるように復号するように構成されていてもよい。
【0185】
例えば、後段の処理がNodeQpの値が所定値以上又は所定値より大きくなることを前提としている場合、このような構成とすることで復号処理全体の整合性を保つことができる。
【0186】
また、以上のように、ツリー合成部2020は、NodeQpの値を算出した後、所定値以上又は所定値より大きくなるようにクリッピング処理を行うように構成されていてもよい。
【0187】
このような構成とすることで、geom_base_qp等のパラメータ値の値によらず、必ずNodeQpの値を所定値以上又は所定値より大きくなるように保証することができる。
【0188】
また、ツリー合成部2020は、以上のように、NodeQpの値が、所定値未満又は所定値以下の場合に、仕様に違反していると判定するように構成されていてもよい。
【0189】
このような構成とすることで、クリッピング等の追加処理を用いなくても、仕様に準拠したビットストリームであれば、NodeQpの値が所定値以又は所定値より大きくなるように保証することができる。
【0190】
また、以上のように、上述の所定値は「0」であるように構成されていてもよい。
【0191】
例えば、後段の処理がNodeQpの値が「0」以上であることを前提としている場合、このような構成とすることで復号処理全体の整合性を保つことができる。
【0192】
更に、NodeQpの値が「0」の場合は、逆量子化処理を行わない場合と同様の処理結果と同じとなるように構成されている場合、NodeQpの値の範囲に「0」を含むことで、NodeQpの値だけで逆量子化処理の実行要否を判定することができる。
【0193】
以上のようにNodeQpを算出した後、ツリー合成部2020は、ステップS606へ進む。
【0194】
ステップS606において、ツリー合成部2020は、「Octree」を用いる場合は、ノードを8分割で子ノードに分割し、「QtBt」を用いる場合は、かかるノードを8分割、4分割又は2分割のいずれかで子ノードに分割し、Occupancy code等の情報に基づいて、各子ノードに点群データが含まれるかどうかを示すOccupancy mapを復号する。
【0195】
例えば、Occupancy mapの値が「1」の場合は、対応する子ノード内に点群データが存在すると定義できる。また、例えば、Occupancy mapの値が「0」の場合は、対応する子ノード内に点群データが存在しないか或いは当該子ノード自体が存在しないと定義できる。
【0196】
よって、ツリー合成部2020は、同一のDepth内でOccupancy mapの値が「1」となっている子ノードの数をカウントすることで、次に処理するDepth内のノード数を知ることができる。
【0197】
ツリー合成部2020は、1つのノードについてOccupancy mapの生成が完了したら、ステップS602の処理へ戻る。
【0198】
(属性情報復号部2060)
以下、
図7~
図9を用いて、属性情報復号部2060で復号される制御データについて説明する。
【0199】
図7は、幾何情報復号部2060で受信する符号化データ(ビットストリーム)の構成の一例である。
【0200】
第1に、ビットストリームは、APS2061を含んでいてもよい。APS2061は、アトリビュートパラメータセットとも呼ばれ、属性情報の復号に関する制御データの集合である。具体例については後述する。各APS2061は、複数のAPS2061が存在する場合に個々を識別するためのAPS id情報を少なくとも含む。
【0201】
第2に、ビットストリームは、ASH2062A/2062Bを含んでいてもよい。A
SH2062A/2062Bは、アトリビュートスライスヘッダとも呼ばれ、後述するス
ライスに対応する制御データの集合である。具体例については後述する。ASH2062A/2062Bは、各ASH2062A/2062Bに対応するAPS2061を指定する
ためのAPS id情報を少なくとも含む。
【0202】
第3に、ビットストリームは、ASH2062A/2062Bの次に、スライスデータ
2063A/2063Bを含んでいてもよい。スライスデータ2063A/2063Bには、属性情報を符号化したデータが含まれている。
【0203】
以上のように、ビットストリームは、各スライスデータ2063A/2063Bに、1
つずつASH2062A/2062B及びAPS2061が対応する構成となる。
【0204】
上述のように、ASH2062A/2062Bにて、どのAPS2061を参照するか
をAPS id情報で指定するため、複数のスライスデータ2063A/2063Bに対
して共通のAPS2061を用いることができる。
【0205】
言い換えると、APS2061は、スライスごとに必ずしも伝送する必要がない。例えば、
図7に示すように、ASH2062B及びスライスデータ2063Bの直前では、APS2061を符号化しないようなビットストリームの構成とすることもできる。
【0206】
なお、
図7に示す構成は、あくまで一例である。各スライスデータ2063A/206
3Bに、ASH2062A/2062B及びAPS2061が対応する構成となっていれ
ば、ビットストリームの構成要素として、上述以外の要素が追加されてもよい。例えば、
図7に示すように、ビットストリームは、シーケンスパラメータセット(SPS)を含んでいてもよい。
【0207】
また、同様に、伝送に際して、
図7と異なる構成に整形されてもよい。更に、幾何情報復号部2010で復号されるビットストリームと合成して単一のビットストリームとして伝送されてもよい。例えば、スライスデータ2013A及び2063A、スライスデータ2013B及び2063Bを、それぞれ単一のスライスデータとして扱い、各スライスの直前にGSH2012A及びASH2062A、GSH2012B及びASH2062Bを、それぞれ配置する構成となっていてもよい。また、その際、各GSH及びASHに先立って、GPS2011及びAPS2061が配置されていてもよい。
【0208】
図8は、SPS2001のシンタックス構成の一例である。
【0209】
SPS2001は、レベルを定義するシンタックス(level_idc)を含んでも
よい。
【0210】
SPS2001は、複数のSPSを識別するためのインデックス(sps_seq_parameter_set_id)を含んでもよい。
【0211】
SPS2001は、当該ビットストリーム内に含まれる属性情報の数を示すシンタックス(sps_num_attribute_sets)を含んでもよい。
【0212】
SPS2001は、当該ビットストリームに含まれるsps_num_attribute_sets個の属性情報それぞれの次元数を示すシンタックス(attribute_dimension_minus1[i])を含んでもよい。次元数が「1」の場合は、当
該属性情報は、例えば、反射率や輝度信号である場合に該当する。また、次元数が「3」の場合は、当該属性情報は、例えば、輝度信号、色差信号(Cb信号、Cr信号)で構成される次元データである場合に該当する。
【0213】
ここで、sps_num_attribute_sets個の属性情報の全ての次元数が
「1」であったとき、当該ビットストリームには色差データが含まれないことが分かる。そこで、sps_num_attribute_sets個の属性情報の全ての次元数が「
1」であったとき、attr_secondary_dim_present_flagの値を「0」と定義してもよい。
【0214】
また、少なくとも1つの属性情報について次元数が「2」以上である場合、attr_
secondary_dim_present_flagの値を「1」と定義してもよい。
【0215】
なお、以上では、属性情報の次元数を参照して当該ビットストリームに色差データが含まれるか否かを示すフラグであるattr_secondary_dim_present_flagの値を設定する場合の例について説明したが、色差データ有無の判定方法は他の方法でも差し支えない。
【0216】
例えば、属性情報の種類を示すシンタックスを復号し,例えば、それらが全て「反射係数」であることを示している場合に、当該ビットストリームに色差データを含まないと判定し、attr_secondary_dim_present_flagの値を「0」と定義してもよい。
【0217】
また、attr_secondary_dim_present_flagの値をビットストリームに含み、ビットストリームからフラグの値を復号することで、当該ビットストリームに色差データが含まれるか否かを判定してもよい。すなわち、ビットストリームから復号したattr_secondary_dim_present_flagの値が「0」の場合、当該ビットストリームに色差データが含まれないと判定してもよい。
【0218】
図9は、APS2061のシンタックス構成の一例である。
【0219】
APS2061は、各APS2061を識別するためのAPS id情報(aps_a
ttr_parameter_set_id)を含んでもよい。
【0220】
APS2061は、属性情報の復号方法を示す情報(attr_coding_type)を含んでもよい。例えば、attr_coding_typeの値が「0」の時は、逆リフティング部2100において可変の重み付きリフティング予測を行い、attr_co
ding_typeの値が「1」の時は、RAHT部2080にてRAHTを行い、at
tr_coding_typeの値が「2」の時は、逆リフティング部2100において固定の重みでのリフティング予測を行うというように規定されていてもよい。
【0221】
APS2061は、attr_secondary_dim_present_flagの値が「1」の場合、色差信号の量子化パラメータのオフセット値(aps_attr_chroma_qp_offset)を含んでもよい。
【0222】
APS2061に、aps_attr_chroma_qp_offsetが含まれない場合、属性情報復号部2060は、aps_attr_chroma_qp_offsetの値を「0」とみなすように定義されていてもよい。
【0223】
APS2061は、attr_secondary_dim_present_flagの値が「1」の場合で且つattr_coding_typeの値が「2」の場合、色差信号間での残差の予測を行うか否かを制御するフラグ(lifting_last_component_prediction_enabled_flag)を含んでもよい。
【0224】
lifting_last_component_prediction_enabled
_flagの値が「1」の場合は、色差信号間での残差予測を行い、lifting_last_component_prediction_enabled_flagの値が「0」の場合は、色差信号間での残差予測を行わないように定義されていてもよい。
【0225】
APS2061に、lifting_last_component_predicti
on_enabled_flagが含まれないとき、属性情報復号部2060は、lifting_last_component_prediction_enabled_flag
の値を「0」とみなすように定義されていてもよい。
【0226】
APS2061は、attr_secondary_dim_present_flagの値が「1」の場合で且つattr_coding_typeの値が「1」の場合、輝度信号間及び色差信号間で予測を行うか否かを制御するフラグ(inter_componen
t_prediction_enabled_flag)を含んでもよい。
【0227】
inter_component_prediction_enabled_flagの値が「1」の場合は、輝度信号と色差信号との間での予測を行い、inter_compo
nent_prediction_enabled_flagの値が「0」の場合は、輝度
信号と色差信号との間での予測を行わないように定義されていてもよい。
【0228】
APS2061に、inter_component_prediction_enab
led_flagが含まれないとき、属性情報復号部2060は、inter_component_prediction_enabled_flagの値を「0」とみなすように
定義されていてもよい。
【0229】
以上のように、属性情報復号部2060は、当該ビットストリームに色差信号が含まれるか否かを判定し、色差信号が含まれていないと判定した場合、色差信号に関するシンタックスの復号を省略するように構成されていてもよい。
【0230】
このような構成とすることで、不要なシンタックスの復号処理を省略し、処理量を削減することができる。
【0231】
以上のように、属性情報復号部2060は、当該ビットストリームに含まれる属性情報の次元数を復号し、全ての属性情報の次元数が「1」であった場合、当該ビットストリームに色差信号が含まれていないと判定するように構成されていてもよい。
【0232】
このような構成とすることで、当該ビットストリームに反射係数のみ(1次元)や輝度信号のみ(1次元)を含む場合に、色差信号に関する処理を省略することができる。
【0233】
以上のように、属性情報復号部2060は、色差信号の量子化パラメータのオフセット値が復号されなかった場合、当該シンタックスの値を「0」とみなすように構成されていてもよい。
【0234】
このような構成とすることで、色差信号が存在しない場合に意図せず不要なオフセット値が設定されることを防ぐことができる。
【0235】
以上のように、属性情報復号部2060は、色差信号間での残差の予測を行うか否かを制御するフラグが復号されなかった場合、当該フラグの値を色差信号間での残差の予測を行わない場合の値と同じ値とみなすように構成されていてもよい。
【0236】
このような構成とすることで、色差信号が存在しない場合に、不要に色差信号間での残
差の予測が実行されることを防ぐことができる。
【0237】
以上のように、属性情報復号部2060は、輝度信号間と色差信号間で予測を行うか否かを制御するフラグが復号されなかった場合、当該フラグの値を輝度信号間と色差信号との間で予測を行わない場合の値と同じ値とみなすように構成されていてもよい。
【0238】
このような構成とすることで、色差信号が存在しない場合に、不要に輝度信号間と色差信号間での予測が実行されることを防ぐことができる。
【0239】
APS2061は、スケーラブルリフティングを適用するかどうかを示すフラグ(lifting_scalability_enabled_flag)を含んでもよい。
【0240】
lifting_scalability_enabled_flagの値が「0」の場
合は、スケーラブルリフティングを適用しないと規定し、lifting_scalab
ility_enabled_flagの値が「1」の場合は、スケーラブルリフティングを適用すると規定されていてもよい。
【0241】
APS2061は、LoD算出部2090で算出するLoDのレベル数を指定するシンタックス(lifting_num_detail_levels_minus1)を含んでもよい。
【0242】
LoDの値は、1以上の整数値である必要があるため、例えば、当該シンタックスは、「0」以上の整数値としておき、当該シンタックスの値に「1」を加えた値を、LoDのレベル数としてもよい。
【0243】
APS2061は、LoDのレベル数が「1」より大きい場合、すなわち、lifting_num_detail_levels_minus1の値が「0」より大きい場合、各LoDに属する点を等間隔にサンプリングするか否かを示すフラグ(lifting_l
od_regular_sampling_enabled_flag)を含んでもよい。
【0244】
例えば、lifting_lod_regular_sampling_enabled_
flagの値が「1」の場合は、等間隔にサンプリングを行い、lifting_lod_regular_sampling_enabled_flagの値が「0」の場合は、等
間隔にサンプリングを行わないように定義されていてもよい。
【0245】
APS2061は、等間隔にサンプリングを行う場合、すなわち、lifting_l
od_regular_sampling_enabled_flagの値が「1」の場合、各LoDのレベルごとにサンプル間隔を指定するシンタックス(lifting_sam
pling_period_minus2[idx])を含んでもよい。
【0246】
サンプル間隔を2以上の整数とし、lifting_sampling_period_
minus2[idx]の値は、実際のサンプル間隔から2を引いた数と定義してもよい。ここで、本シンタックスのとり得る値の範囲として、0以上であることという制約が規定されていてもよい。
【0247】
また、かかるシンタックスの取り得る値の範囲として、プロファイル又はレベルごとに定義された1スライス(1データユニット)に含まれるノード数の最大値(例えば、非特許文献1の「Max points in a slice」)以下であることという制約が規定されていてもよい。
【0248】
上述のように、lifting_sampling_period_minus2[id
x]の値は、実際のサンプル間隔から2を引いた数と定義する場合、「Max poin
ts in a slice」から2を引いた値以下であることという制約が規定されてい
てもよい。
【0249】
また、属性情報復号部2060は、lifting_sampling_period_
minus2[idx]の値が「0」以上で且つ「Max points in a slice-2」以下となるように、かかるシンタックスを復号した後に、以下のクリッピング処理を行ってもよい。
【0250】
geom_qp_offset_intvl_log2 = Min(Max(lifting_sampling_period_minus2[idx],0),Max points in a slice―2)
ここで、Min()は、引数の中で最小値を返す関数であり、Max()は、引数の中で最大値を返す関数である。
【0251】
以上のように、属性情報復号部2060は、各LoDのレベルごとにサンプル間隔を指定するシンタックスについて、当該シンタックスの値が必ず「0」以上となるように復号するように構成されていてもよい。
【0252】
すなわち、属性情報復号部2060によって復号される各LoDのレベルごとにサンプル間隔を指定するシンタックスの値は、「0」以上となるように構成されていてもよい。
【0253】
このような構成とすることで、ノード間の間隔が負であるという実現不可能なビットストリームが発生しないようにすることができる。
【0254】
また、以上のように仕様の制約として1スライス或いは1データユニットあたりの最大ノード数が規定されている場合、属性情報復号部2060は、各LoDのレベルごとにサンプル間隔を指定するシンタックスについて、当該シンタックスの値が必ず1スライス或いは1データユニットあたりの最大ノード数以下となるように復号するように構成されていてもよい。
【0255】
すなわち、属性情報復号部2060によって復号される各LoDのレベルごとにサンプル間隔を指定するシンタックスの値は、1スライス或いは1データユニットあたりの最大ノード数以下となるように構成されていてもよい。
【0256】
このように、各LoDのレベルごとにサンプル間隔を指定するシンタックスの値として取り得る値の最大値を定義することで、かかるシンタックスの復号に必要なビット数の最大値を定義することができ、GPS全体のビット長の最大値を規定するための一助となる。
【0257】
また、各LoDのレベルごとにサンプル間隔を指定するシンタックスの値として取り得る値の最大値を1スライス或いは1データユニットあたりの最大ノード数以下となるように制約することで、ノード間の間隔が1スライス或いは1データユニットあたりの最大ノード数以上となるような実効的に無意味なビットストリームとなることを防ぐことができる。
【0258】
また、上述の点群符号化装置100及び点群復号装置200は、コンピュータに各機能(各工程)を実行させるプログラムであって実現されていてもよい。
【0259】
なお、上記の各実施形態では、本発明を点群符号化装置100及び点群復号装置200への適用を例にして説明したが、本発明は、かかる例のみに限定されるものではなく、点群符号化装置100及び点群復号装置200の各機能を備えた点群符号化/復号システム
にも同様に適用できる。
【符号の説明】
【0260】
10…点群処理システム
100…点群符号化装置
200…点群復号装置
2010…幾何情報復号部
2020…ツリー合成部
2030…近似表面合成部
2040…幾何情報再構成部
2050…逆座標変換部
2060…属性情報復号部
2070…逆量子化部
2080…RAHT部
2090…LoD算出部
2100…逆リフティング部
2110…逆色変換部