(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024152411
(43)【公開日】2024-10-25
(54)【発明の名称】点群復号装置、点群復号方法及びプログラム
(51)【国際特許分類】
G06T 9/40 20060101AFI20241018BHJP
【FI】
G06T9/40
【審査請求】未請求
【請求項の数】3
【出願形態】OL
(21)【出願番号】P 2023066594
(22)【出願日】2023-04-14
【国等の委託研究の成果に係る記載事項】(出願人による申告)令和5年度、総務省「3次元空間データの無線伝送に向けた高能率圧縮技術の研究開発」、産業技術力強化法第17条の適用を受ける特許出願
(71)【出願人】
【識別番号】000208891
【氏名又は名称】KDDI株式会社
(74)【代理人】
【識別番号】110001564
【氏名又は名称】フェリシテ弁理士法人
(72)【発明者】
【氏名】海野 恭平
(72)【発明者】
【氏名】小森田 賢史
(72)【発明者】
【氏名】河村 圭
(57)【要約】 (修正有)
【課題】符号化効率を向上させる点群復号装置、点群復号方法及びプログラムを提供する。
【解決手段】点群符号化装置及び点群復号装置を有する点群処理システムにおいて、点群復号装置200は、大きなノードサイズから順に、各ノードサイズにおけるTrisoupの頂点情報を復号する近似表面合成部2030を備える。頂点情報は、ユニークセグメント毎の頂点の有無又はユニークセグメント毎の頂点位置の少なくとも1つを含む。近似表面合成部2030は、対象ノードサイズより大きな復号済みのノードサイズが存在する場合、復号済みのノードサイズにおける頂点情報から、対象ノードサイズにおける頂点情報の予測値を生成し、予測値を用いて対象ノードサイズの頂点情報を復号する。
【選択図】
図2
【特許請求の範囲】
【請求項1】
点群復号装置であって、
大きなノードサイズから順に、各ノードサイズにおけるTrisoupの頂点情報を復号する近似表面合成部を備え、
前記頂点情報は、ユニークセグメントごとの頂点の有無、又は、前記ユニークセグメントごとの頂点位置の少なくとも1つを含み、
前記近似表面合成部は、対象ノードサイズより大きな復号済みのノードサイズが存在する場合、前記復号済みのノードサイズにおける前記頂点情報から、前記対象ノードサイズにおける前記頂点情報の予測値を生成し、前記予測値を用いて前記対象ノードサイズの頂点情報を復号することを特徴とする点群復号装置。
【請求項2】
前記近似表面合成部は、
前記復号済みのノードサイズにおける前記ユニークセグメントごとの頂点位置から前記予測値を生成し、
前記対象ノードサイズにおける対象ユニークセグメントに前記頂点情報の予測値が存在する場合、前記予測値と前記対象ノードサイズにおける前記ユニークセグメントの頂点位置との差分値を復号し、前記差分値と前記予測値とを加算することで、前記対象ノードサイズにおける前記ユニークセグメントの頂点位置を復号することを特徴とする請求項1に記載の点群復号装置。
【請求項3】
前記近似表面合成部は、
前記復号済みのノードサイズにおける前記ユニークセグメントごとの頂点位置から前記予測値を生成し、
前記対象ノードサイズにおける対象ユニークセグメントに前記頂点情報の予測値が存在するか否かに基づいて、コンテクストを切り替え、
前記コンテクストを用いて、前記対象ユニークセグメントの頂点有無を復号することを特徴とする請求項1に記載の点群復号装置。
【請求項4】
前記近似表面合成部は、
前記復号済みのノードサイズにおける前記ユニークセグメントごとの頂点位置から前記予測値を生成し、
前記対象ノードサイズにおける対象ユニークセグメントに前記頂点情報の予測値が存在する場合は、前記予測値に基づいて、コンテクストを切り替え、
前記コンテクストを用いて、前記対象ユニークセグメントの頂点位置を復号することを特徴とする請求項1に記載の点群復号装置。
【請求項5】
前記近似表面合成部は、異なるノードサイズの境界に位置するユニークセグメントにおいて、大きなノードサイズにおける前記頂点情報から小さなノードサイズの前記頂点情報の予測値を生成することを特徴とする請求項2~4のいずれか1項に記載の点群復号装置。
【請求項6】
点群復号装置であって、
Trisoupの頂点情報を復号する近似表面合成部を備え、
前記頂点情報は、ユニークセグメントごとの頂点の有無、又は、前記ユニークセグメントごとの頂点位置の少なくとも1つを含み、
前記頂点の有無及び前記頂点の位置は、それぞれ複数のコンテクストを用いて復号され、
前記コンテクストは、前記復号処理に先立って前記コンテクストが取り得る値に基づいた必要最小限の数分用意されて、初期化されるように構成されていることを特徴とする点群復号装置。
【請求項7】
点群復号方法であって、
大きなノードサイズから順に、各ノードサイズにおけるTrisoupの頂点情報を復号する工程を有し、
前記頂点情報は、ユニークセグメントごとの頂点の有無、又は、前記ユニークセグメントごとの頂点位置の少なくとも1つを含み、
前記工程において、対象ノードサイズより大きな復号済みのノードサイズが存在する場合、前記復号済みのノードサイズにおける前記頂点情報から、前記対象ノードサイズにおける前記頂点情報の予測値を生成し、前記予測値を用いて前記対象ノードサイズの頂点情報を復号することを特徴とする点群復号方法。
【請求項8】
コンピュータを、点群復号装置として機能させるプログラムであって、
前記点群復号装置は、大きなノードサイズから順に、各ノードサイズにおけるTrisoupの頂点情報を復号する近似表面合成部を備え、
前記頂点情報は、ユニークセグメントごとの頂点の有無、又は、前記ユニークセグメントごとの頂点位置の少なくとも1つを含み、
前記近似表面合成部は、対象ノードサイズより大きな復号済みのノードサイズが存在する場合、前記復号済みのノードサイズにおける前記頂点情報から、前記対象ノードサイズにおける前記頂点情報の予測値を生成し、前記予測値を用いて前記対象ノードサイズの頂点情報を復号することを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、点群復号装置、点群復号方法及びプログラムに関する。
【背景技術】
【0002】
非特許文献1では、Trisoupと呼ばれる幾何情報の符号化技術が開示されている。
【先行技術文献】
【非特許文献】
【0003】
【非特許文献1】G-PCC Future Enhancement、ISO/IEC JTC1/SC29/WG11 N19328
【非特許文献2】[GPCC][13.50] Report on enhanced edge neighborhood for vertex prediction in TriSoup、ISO/IEC JTC1/SC29/WG7 m61565
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、非特許文献1の方法では、スライス毎に固定のノードサイズでしかTrisoupを実行できないという問題点があった。
【0005】
そこで、本発明は、上述の課題に鑑みてなされたものであり、複数のノードサイズでのTrisoupにおいて、大きなノードサイズにおいて復号した頂点位置を基に小さなノードサイズにおける頂点位置の予測値を生成し、小さなノードサイズにおける頂点位置との差分を符号化/復号することで、符号化効率を向上させることができる点群復号装置、点群復号方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0006】
本発明の第1の特徴は、点群復号装置であって、大きなノードサイズから順に、各ノードサイズにおけるTrisoupの頂点情報を復号する近似表面合成部を備え、前記頂点情報は、ユニークセグメントごとの頂点の有無、又は、前記ユニークセグメントごとの頂点位置の少なくとも1つを含み、前記近似表面合成部は、対象ノードサイズより大きな復号済みのノードサイズが存在する場合、前記復号済みのノードサイズにおける前記頂点情報から、前記対象ノードサイズにおける前記頂点情報の予測値を生成し、前記予測値を用いて前記対象ノードサイズの頂点情報を復号することを要旨とする。
【0007】
本発明の第2の特徴は、点群復号装置であって、Trisoupの頂点情報を復号する近似表面合成部を備え、前記頂点情報は、ユニークセグメントごとの頂点の有無、又は、前記ユニークセグメントごとの頂点位置の少なくとも1つを含み、前記頂点の有無及び前記頂点の位置は、それぞれ複数のコンテクストを用いて復号され、前記コンテクストは、前記復号処理に先立って前記コンテクストが取り得る値に基づいた必要最小限の数分用意されて、初期化されるように構成されていることを要旨とする。
【0008】
本発明の第3の特徴は、点群復号方法であって、大きなノードサイズから順に、各ノードサイズにおけるTrisoupの頂点情報を復号する工程を有し、前記頂点情報は、ユニークセグメントごとの頂点の有無、又は、前記ユニークセグメントごとの頂点位置の少なくとも1つを含み、前記工程において、対象ノードサイズより大きな復号済みのノードサイズが存在する場合、前記復号済みのノードサイズにおける前記頂点情報から、前記対象ノードサイズにおける前記頂点情報の予測値を生成し、前記予測値を用いて前記対象ノードサイズの頂点情報を復号することを要旨とする。
【0009】
本発明の第4の特徴は、コンピュータを、点群復号装置として機能させるプログラムであって、前記点群復号装置は、大きなノードサイズから順に、各ノードサイズにおけるTrisoupの頂点情報を復号する近似表面合成部を備え、前記頂点情報は、ユニークセグメントごとの頂点の有無、又は、前記ユニークセグメントごとの頂点位置の少なくとも1つを含み、前記近似表面合成部は、対象ノードサイズより大きな復号済みのノードサイズが存在する場合、前記復号済みのノードサイズにおける前記頂点情報から、前記対象ノードサイズにおける前記頂点情報の予測値を生成し、前記予測値を用いて前記対象ノードサイズの頂点情報を復号することを要旨とする。
【発明の効果】
【0010】
本発明によれば、複数のノードサイズでのTrisoupにおいて、大きなノードサイズにおいて復号した頂点位置を基に小さなノードサイズにおける頂点位置の予測値を生成し、小さなノードサイズにおける頂点位置との差分を符号化/復号することで、符号化効率を向上させることができる点群復号装置、点群復号方法及びプログラムを提供することができる。
【図面の簡単な説明】
【0011】
【
図1】
図1は、一実施形態に係る点群処理システム10の構成の一例を示す図である。
【
図2】
図2は、一実施形態に係る点群復号装置200の機能ブロックの一例を示す図である。
【
図3】
図3は、一実施形態に係る点群復号装置200の幾何情報復号部2010で受信する符号化データ(ビットストリーム)の構成の一例を示す図である。
【
図4】
図4は、GPS2011のシンタックス構成の一例を示す図である。
【
図5】
図5は、GSH2012のシンタックス構成の一例を示す図である。
【
図6】
図7は、一実施形態に係る点群復号装置200のツリー合成部2020における処理の一例を示すフローチャートである
【
図7】
図7は、一実施形態に係る点群復号装置200の近似表面合成部2030の処理の一例を示すフローチャートである。
【
図8】
図8は、
図7に示すステップS703の処理の一例を示すフローチャートである。
【
図9】
図9は、
図7に示すステップS704の処理の一例を示すフローチャートである。
【
図10】
図10は、マスク情報の生成方法の具体例を示すフローチャートである。
【
図11】
図11は、セグメント及びマスク値の生成例を示す図である。
【
図12】
図12は、
図7に示すステップS705の処理の一例を示すフローチャートである。
【
図13】
図13は、
図7に示すステップS706の処理の一例を示すフローチャートである。
【
図14】
図14は、
図7に示すステップS708の処理の一例を示すフローチャートである。
【
図17】
図17は、一実施形態に係る点群復号装置200の近似表面合成部2030の処理の一例を説明するための図である。
【
図18A】
図18Aは、一実施形態に係る点群復号装置200におけるコンテクストの設定方法の一例を説明するための図である。
【
図18B】
図18Bは、一実施形態に係る点群復号装置200におけるコンテクストの設定方法の一例を説明するための図である。
【
図19A】
図19Aは、一実施形態に係る点群復号装置200におけるコンテクストの設定方法の一例を説明するための図である。
【
図19B】
図19Bは、一実施形態に係る点群復号装置200におけるコンテクストの設定方法の一例を説明するための図である。
【
図19C】
図19Cは、一実施形態に係る点群復号装置200におけるコンテクストの設定方法の一例を説明するための図である。
【
図20】
図20は、一実施形態に係る点群復号装置200におけるコンテクストの設定方法の一例を説明するための図である。
【
図21】
図21は、一実施形態に係る点群復号装置200におけるコンテクストの設定方法の一例を説明するための図である。
【
図22】
図22は、一実施形態に係る点群復号装置200におけるコンテクストの設定方法の一例を説明するための図である。
【
図23】
図23は、一実施形態に係る点群復号装置200の近似表面合成部2030が「内挿された頂点」の情報に基づいて頂点の有無及び頂点位置を復号する処理の一例を示すフローチャートである。
【
図24】
図24は、一実施形態に係る点群復号装置200の近似表面合成部2030が「内挿された頂点」の情報に基づいて頂点の有無及び頂点位置を復号する処理の一例を示すフローチャートである。
【
図25】
図25は、一実施形態に係る点群復号装置200の近似表面合成部2030が「内挿された頂点」の情報に基づいて頂点の有無及び頂点位置を復号する処理の一例を示すフローチャートである。
【
図26】
図26は、本実施形態に係る点群符号化装置100の機能ブロックの一例について示す図である。
【発明を実施するための形態】
【0012】
以下、本発明の実施の形態について、図面を参照しながら説明する。なお、以下の実施形態における構成要素は、適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組み合わせを含む様々なバリエーションが可能である。したがって、以下の実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
【0013】
(第1実施形態)
以下、
図1~
図26を参照して、本発明の第1実施形態に係る点群処理システム10について説明する。
図1は、本実施形態に係る実施形態に係る点群処理システム10を示す図である。
【0014】
図1に示すように、点群処理システム10は、点群符号化装置100及び点群復号装置200を有する。
【0015】
点群符号化装置100は、入力点群信号を符号化することによって符号化データ(ビットストリーム)を生成するように構成されている。点群復号装置200は、ビットストリームを復号することによって出力点群信号を生成するように構成されている。
【0016】
なお、入力点群信号及び出力点群信号は、点群内の各点の位置情報と属性情報とから構成される。属性情報は、例えば、各点の色情報や反射率である。
【0017】
ここで、かかるビットストリームは、点群符号化装置100から点群復号装置200に対して伝送路を介して送信されてもよい。また、ビットストリームは、記憶媒体に格納された上で、点群符号化装置100から点群復号装置200に提供されてもよい。
【0018】
(点群復号装置200)
以下、
図2を参照して、本実施形態に係る点群復号装置200について説明する。
図2は、本実施形態に係る点群復号装置200の機能ブロックの一例について示す図である。
【0019】
図2に示すように、点群復号装置200は、幾何情報復号部2010と、ツリー合成部2020と、近似表面合成部2030と、幾何情報再構成部2040と、逆座標変換部2050と、属性情報復号部2060と、逆量子化部2070と、RAHT部2080と、LoD算出部2090と、逆リフティング部2100と、逆色変換部2110とを有する。
【0020】
幾何情報復号部2010は、点群符号化装置100から出力されるビットストリームのうち、幾何情報に関するビットストリーム(幾何情報ビットストリーム)を入力とし、シンタックスを復号するように構成されている。
【0021】
復号処理は、例えば、コンテクスト適応二値算術復号処理である。ここで、例えば、シンタックスは、位置情報の復号処理を制御するための制御データ(フラグやパラメータ)を含む。
【0022】
ツリー合成部2020は、幾何情報復号部2010によって復号された制御データ及び後述するツリー内のどのノードに点群が存在するかを示すoccupancy codeを入力として、復号対象空間内のどの領域に点が存在するかというツリー情報を生成するように構成されている。
【0023】
なお、occupancy codeの復号処理をツリー合成部2020内部で行うよう構成されていてもよい。
【0024】
本処理は、復号対象空間を直方体で区切り、occupancy codeを参照して各直方体内に点が存在するかを判断し、点が存在する直方体を複数の直方体に分割し、occupancy codeを参照するという処理を再帰的に繰り返すことで、ツリー情報を生成することができる。
【0025】
ここで、かかるoccupancy codeの復号に際して、インター予測を用いてもよい。
【0026】
本実施形態では、上述の直方体を常に立方体として8分木分割を再帰的に行う「Octree」と呼ばれる手法、及び、8分木分割に加え、4分木分割及び2分木分割を行う「QtBt」と呼ばれる手法を使用することができる。QtBt」を使用するか否かは、制御データとして点群符号化装置100側から伝送される。
【0027】
なお、本実施形態では、「Octree」によって上述の立方体が1×1×1のサイズになるまで分割を行うことで幾何情報を復号する方法を、特に「Octreeのみ」と呼ぶ。
【0028】
また、「Octree」に「QtBt」を組み合わせて使用した場合でも、上記同様に「Octree」及び「QtBt」のみで上述の直方体が1×1×1のサイズになるまで分割を行うことで幾何情報を復号する方法についても、「Octreeのみ」と呼んでもよい。
【0029】
或いは、制御データによってPredictive Geometry codingを使用するように指定された場合、ツリー合成部2020は、点群符号化装置100において決定した任意のツリー構成に基づいて各点の座標を復号するように構成されている。
【0030】
近似表面合成部2030は、ツリー合成部2020によって生成されたツリー情報を用いて近似表面情報を生成し、かかる近似表面情報に基づいて点群を復号するように構成されている。
【0031】
近似表面情報は、例えば、物体の3次元点群データを復号する際等において、点群が物体表面に密に分布しているような場合に、個々の点群を復号するのではなく、点群の存在領域を小さな平面で近似して表現したものである。
【0032】
具体的には、近似表面合成部2030は、例えば、「Trisoup」と呼ばれる手法で、近似表面情報を生成し、点群を復号することができる。「Trisoup」の具体的な処理例については後述する。また、Lidar等で取得した疎な点群を復号する場合は、本処理を省略することができる。
【0033】
幾何情報再構成部2040は、ツリー合成部2020によって生成されたツリー情報及び近似表面合成部2030によって生成された近似表面情報を元に、復号対象の点群データの各点の幾何情報(復号処理が仮定している座標系における位置情報)を再構成するように構成されている。
【0034】
逆座標変換部2050は、幾何情報再構成部2040によって再構成された幾何情報を入力として、復号処理が仮定している座標系から、出力点群信号の座標系に変換を行い、位置情報を出力するように構成されている。
【0035】
属性情報復号部2060は、点群符号化装置100から出力されるビットストリームのうち、属性情報に関するビットストリーム(属性情報ビットストリーム)を入力とし、シンタックスを復号するように構成されている。
【0036】
復号処理は、例えば、コンテクスト適応二値算術復号処理である。ここで、例えば、シンタックスは、属性情報の復号処理を制御するための制御データ(フラグ及びパラメータ)を含む。
【0037】
また、属性情報復号部2060は、復号したシンタックスから、量子化済み残差情報を復号するように構成されている。
【0038】
逆量子化部2070は、属性情報復号部2060によって復号された量子化済み残差情報と、属性情報復号部2060によって復号された制御データの一つである量子化パラメータとを元に、逆量子化処理を行い、逆量子化済み残差情報を生成するように構成されている。
【0039】
逆量子化済み残差情報は、復号対象の点群の特徴に応じて、RAHT部2080及びLoD算出部2090のいずれかに出力される。いずれに出力されるかは、属性情報復号部2060によって復号される制御データによって指定される。
【0040】
RAHT部2080は、逆量子化部2070によって生成された逆量子化済み残差情報及び幾何情報再構成部2040によって生成された幾何情報を入力とし、RAHT(Region Adaptive Hierarchical Transform)と呼ばれるHaar変換(復号処理においては、逆Haar変換)の一種を用いて、各点の属性情報を復号するように構成されている。RAHTの具体的な処理としては、例えば、非特許文献1に記載の方法を用いることができる。
【0041】
LoD算出部2090は、幾何情報再構成部2040によって生成された幾何情報を入力とし、LoD(Level of Detail)を生成するように構成されている。
【0042】
LoDは、ある点の属性情報から、他のある点の属性情報を予測し、予測残差を符号化或いは復号するといった予測符号化を実現するための参照関係(参照する点及び参照される点)を定義するための情報である。
【0043】
言い換えると、LoDは、幾何情報に含まれる各点を複数のレベルに分類し、下位のレベルに属する点については上位のレベルに属する点の属性情報を用いて属性を符号化或いは復号するといった階層構造を定義した情報である。
【0044】
LoDの具体的な決定方法としては、例えば、上述の非特許文献1に記載の方法を用いてもよい。
【0045】
逆リフティング部2100は、LoD算出部2090によって生成されたLoD及び逆量子化部2070によって生成された逆量子化済み残差情報を用いて、LoDで規定した階層構造に基づいて各点の属性情報を復号するように構成されている。逆リフティングの具体的な処理としては、例えば、上述の非特許文献1に記載の方法を用いることができる。
【0046】
逆色変換部2110は、復号対象の属性情報が色情報であり且つ点群符号化装置100側で色変換が行われていた場合に、RAHT部2080又は逆リフティング部2100から出力される属性情報に逆色変換処理を行うように構成されている。かかる逆色変換処理の実行の有無については、属性情報復号部2060によって復号された制御データによって決定される。
【0047】
点群復号装置200は、以上の処理により、点群内の各点の属性情報を復号して出力するように構成されている。
【0048】
(幾何情報復号部2010)
以下、
図3~
図5を用いて幾何情報復号部2010で復号される制御データについて説明する。
【0049】
図3は、幾何情報復号部2010で受信する符号化データ(ビットストリーム)の構成の一例である。
【0050】
第1に、ビットストリームは、GPS2011を含んでいてもよい。GPS2011は、ジオメトリパラメータセットとも呼ばれ、幾何情報の復号に関する制御データの集合である。具体例については後述する。各GPS2011は、複数のGPS2011が存在する場合に個々を識別するためのGPS id情報を少なくとも含む。
【0051】
第2に、ビットストリームは、GSH2012A/2012Bを含んでいてもよい。GSH2012A/2012Bは、ジオメトリスライスヘッダ或いはジオメトリデータユニットヘッダとも呼ばれ、後述するスライスに対応する制御データの集合である。以降では、スライスという呼称を用いて説明するが、スライスをデータユニットと読み替えることもできる。具体例については後述する。GSH2012A/2012Bは、各GSH2012A/2012Bに対応するGPS2011を指定するためのGPS id情報を少なくとも含む。
【0052】
第3に、ビットストリームは、GSH2012A/2012Bの次に、スライスデータ2013A/2013Bを含んでいてもよい。スライスデータ2013A/2013Bには、幾何情報を符号化したデータが含まれている。スライスデータ2013A/2013Bの一例としては、後述するoccupancy codeが挙げられる。
【0053】
以上のように、ビットストリームは、各スライスデータ2013A/2013Bに、1つずつGSH2012A/2012B及びGPS2011が対応する構成となる。
【0054】
上述のように、GSH2012A/2012Bにて、どのGPS2011を参照するかをGPS id情報で指定するため、複数のスライスデータ2013A/2013Bに対して共通のGPS2011を用いることができる。
【0055】
言い換えると、GPS2011は、スライスごとに必ずしも伝送する必要がない。例えば、
図3のように、GSH2012B及びスライスデータ2013Bの直前では、GPS2011を符号化しないようなビットストリームの構成とすることもできる。
【0056】
なお、
図3の構成は、あくまで一例である。各スライスデータ2013A/2013Bに、GSH2012A/2012B及びGPS2011が対応する構成となっていれば、ビットストリームの構成要素として、上述以外の要素が追加されてもよい。
【0057】
例えば、
図3に示すように、ビットストリームは、シーケンスパラメータセット(SPS)2001を含んでいてもよい。また、同様に、伝送に際して、
図3と異なる構成に整形されてもよい。更に、後述する属性情報復号部2060で復号されるビットストリームと合成して単一のビットストリームとして伝送されてもよい。
【0058】
図4は、GPS2011のシンタックス構成の一例である。
【0059】
なお、以下で説明するシンタックス名は、あくまで一例である。以下で説明したシンタックスの機能が同様であれば、シンタックス名は異なっていても差し支えない。
【0060】
GPS2011は、各GPS2011を識別するためのGPS id情報(gps_geom_parameter_set_id)を含んでもよい。
【0061】
なお、
図4のDescriptor欄は、各シンタックスが、どのように符号化されているかを意味している。ue(v)は、符号無し0次指数ゴロム符号であることを意味し、u(1)は、1ビットのフラグであることを意味する。
【0062】
GPS2011は、近似表面合成部2030でTrisoupを使用するか否かを制御するフラグ(trisoup_enabled_flag)を含んでもよい。
【0063】
例えば、trisoup_enabled_flagの値が「0」の時はTrisoupを使用しないと定義し、trisoup_enabled_flagの値が「1」の時はTrisoupを使用すると定義してもよい。
【0064】
幾何情報復号部2020は、Trisoupを使用するとき、すなわち、trisoup_enabled_flagの値が「1」の時、追加で以下のシンタックスを復号するように構成されていてもよい。
【0065】
なお、trisoup_enabled_flagは、GPS2011ではなくSPS2001に含まれていてもよい。
【0066】
GPS2011は、複数レベルでのTrisoupを許可するか否かを制御するフラグ(trisoup_multilevel_enabled_flag、第1フラグ)を含んでもよい。
【0067】
例えば、trisoup_multilevel_enabled_flagの値が「0」の時は複数レベルでのTrisoupを許可しない、すなわち、単一のレベルでのTrisoupを行うと定義し、trisoup_multilevel_enabled_flagの値が「1」の時は複数レベルでのTrisoupを許可すると定義してもよい。
【0068】
なお、当該シンタックスがGPS2011に含まれない場合、当該シンタックスの値を単一のレベルでのTrisoupを行う場合の値、すなわち、「0」とみなしてよい。
【0069】
なお、trisoup_multilevel_enabled_flagは、GPS2011ではなくSPS2001に含まれるよう定義してもよい。この場合、SPS2001にtrisoup_multilevel_enabled_flagが含まれていない場合、当該シンタックスの値を単一のレベルでのTrisoupを行う場合の値、すなわち、「0」とみなしてよい。
【0070】
図5は、GSH2012のシンタックス構成の一例である。なお、前述の通り、GSHは、GDUH(Geometry Data Unit Header)とも呼ばれる。
【0071】
幾何情報復号部2020は、複数レベルでのTrisoupを許可するとき、すなわち、trisoup_multilevel_enabled_flagの値が「1」の時、追加で以下のシンタックスを復号するように構成されていてもよい。
【0072】
GSH2012は、複数レベルでのTrisoupを許可するとき、Trisoupノードサイズの最大値を規定するシンタックス(log2_trisoup_max_node_size_minus2)を含んでもよい。
【0073】
当該シンタックスは、実際のTrisoupノードサイズの最大値について、2を底とする対数に変換した値として表現されていてもよい。更に、当該シンタックスは、実際のTrisoupノードサイズの最大値について、2を底とする対数に変換した後に2を引いた後の値として表現されていてもよい。
【0074】
GSH2012は、複数レベルでのTrisoupを許可するとき、Trisoupノードサイズの最小値を規定するシンタックス(log2_trisoup_min_node_size_minus2)を含んでもよい。
【0075】
当該シンタックスは、実際のTrisoupノードサイズの最小値について、2を底とする対数に変換した値として表現されていてもよい。更に、当該シンタックスは、実際のTrisoupノードサイズの最小値を4(=22)とし、2を底とする対数に変換した後に2を引いた後の値として表現されていてもよい。
【0076】
また、当該シンタックスの値は、必ず0以上且つlog2_trisoup_max_node_size_minus2以下となるように制約されていてもよい。
【0077】
また、この時、
図5に示すようにtrisoup_depthをtrisoup_depth=log2_trisoup_max_node_size_minus2-log2_trisoup_min_node_size_minus2+1と定義してもよい。
【0078】
また、最小Trisoupノードサイズ及び最大Trisoupノードサイズを直接復号する代わりに、後述のOctree処理における最大Trisoupノードサイズ及び最小Trisoupノードサイズに対応するDepth値を復号してもよい。
【0079】
例えば、最大Depth(全ノードが1×1×1のサイズになるDepth)が10の場合、最小Trisoupノードサイズを4(=22)、最大Trisoupノードサイズを16(=24)としたい場合は、最小Trisoupノードサイズに対応するDepth値として8、最大Trisoupノードサイズに対応するDepth値として6をそれぞれ復号してもよい。
【0080】
GSH2012は、複数レベルでのTrisoupを許可するとき、Trisoupノードサイズを復号するノード(以下、CTUと呼ぶ)のサイズを規定するシンタックス(log2_trisoup_ctu_size_minus2)を含んでもよい。
【0081】
かかるシンタックスは、2を底とする対数に変換した値として表現されていてもよい。
【0082】
さらに、かかるシンタックスは、実際のTrisoupノードサイズの最小値を4(=22)とし、2を底とする対数に変換した後に2を引いた後の値として表現されていてもよい。
【0083】
また、かかるシンタックスの値は、必ず前記最大Trisoupノードサイズ以上の値となるように制約されていても良よ。
【0084】
また、かかるシンタックスの値は、2を底とする対数にCTUサイズを変換した値から、2を底とする対数に最大Trisoupノードサイズを変換した値を引いた後の値として表現されていてもよい。
【0085】
幾何情報復号部2020は、複数レベルでのTrisoupを許可しないとき、すなわち、trisoup_multilevel_enabled_flagの値が「0」の時、追加で以下のシンタックスを復号するように構成されていてもよい。
【0086】
以上のように、本実施形態における幾何情報復号部2020は、上述のTrisoupを適用するノードサイズの最大値である最大Trisoupノードサイズと、Trisoupを適用するノードサイズの最小値である最小Trisoupノードサイズとを復号するように構成されていてもよい。
【0087】
また、以上のように、本実施形態における幾何情報復号部2020は、所定サイズ(CTUサイズ)を、最大Trisoupノードサイズ以上の値として復号するように構成されていてもよい。
【0088】
このような構成とすることで、所定サイズの領域(CTU)ごとに最大Trisoupノードサイズと最小Trisoupノードサイズとの間でノードサイズを選択可能となる。
【0089】
また、以上のように、本実施形態における幾何情報復号部2020は、上述の最大Trisoupノードサイズを、所定サイズの値とするように構成されていてもよい。
【0090】
このような構成とすることで、CTUサイズの復号を省略できるため、符号量及び処理量を削減できる。
【0091】
GSH2012は、複数レベルでのTrisoupを許可しないときで且つTrisoupを使用するとき、Trisoupノードサイズを規定するシンタックス(log2_trisoup_node_sizeTrisoup_node_size_minus2)を含んでもよい。
【0092】
かかるシンタックスは、実際のTrisoupノードサイズについて、2を底とする対数に変換した値として表現されていてもよい。
【0093】
さらに、かかるシンタックスは、実際のTrisoupノードサイズについて、2を底とする対数に変換した後に2を引いた後の値として表現されていてもよい。
【0094】
また、この際、
図5に示すように、trisoup_depthをtrisoup_depth=1と定義してもよい。
【0095】
GSH2012は、Trisoupを使用するとき、再構成点のサブサンプリング間隔を制御するシンタックス(trisoup_sampling_value_minus1)を含んでもよい。
【0096】
GSH2012は、後述するTrisoupの頂点位置の精度(bit数)を指定するシンタックス(trisoup_vertex_number_bits)を含んでもよい。例えば、当該シンタックスの値が2である場合、頂点位置は、2bitであること、すなわち、0、1、2、3の4種類の値を取り得ることを意味する。
【0097】
ここで、trisoup_vertex_number_bitsは、上述のように、trisoup_depthの値に関わらず常に1つの値だけを伝送してもよいし、trisoup_depthの値に応じて復号する数を変化させてもよい。
【0098】
例えば、各trisoup_depthに対応するtrisoup_vertex_number_bitsがそれぞれ復号されてもよい。言い換えると、trisoup_depthと同じ数だけ、trisoup_vertex_number_bitsが復号されてもよい。具体的には、例えば、trisoup_depthが2の場合、trisoup_vertex_number_bitsの値が2種類伝送されてもよい。
【0099】
GSH2012は、後述するTrisoupの頂点のセントロイドの残差を復号するか否かを示すフラグ(trisoup_centroid_vertex_residual_flag)を含んでもよい。例えば、当該フラグの値が1の場合は、セントロイドの残差を復号することを意味し、当該フラグの値が0の場合は、セントロイドの残差を復号しないことを意味するように定義されていてもよい。
【0100】
ここで、trisoup_centroid_vertex_residual_flagは、上述のように、trisoup_depthの値に関わらず常に1つの値だけを伝送してもよいし、trisoup_depthの値に応じて復号する数を変化させてもよい。
【0101】
例えば、各trisoup_depthに対応するtrisoup_centroid_vertex_residual_flagがそれぞれ復号されてもよい。言い換えると、trisoup_depthと同じ数だけ、trisoup_centroid_vertex_residual_flagが復号されてもよい。具体的には、例えば、trisoup_depthが2の場合、trisoup_centroid_vertex_residual_flagの値が2種類伝送されてもよい。
【0102】
GSH2012は、Trisoupを使用するとき、かつ、複数レベルでのTrisoupを許可するとき、階層i(i=0,...,trisoup_depth-1)ごとにユニークセグメントが対象階層に存在するか否かを示すフラグ(unique_segments_exist_flag[i])を含んでもよい。
【0103】
例えば、unique_segments_exist_flag[i]の値が「1」の場合は、階層iに少なくとも1つ以上のユニークセグメントが存在することを意味する。また、unique_segments_exist_flag[i]の値が「0」の場合は、階層iにユニークセグメントが1つも存在しないことを意味する。
【0104】
GSH2012は、階層i(i=0,...,trisoup_depth-1)ごとにユニークセグメントが対象階層に存在する場合、すなわち、unique_segments_exist_flag[i]の値が「1」の場合、追加で対象階層のユニークセグメント数を示すシンタックスのビット数を示すシンタックス(num_unique_segments_bits_minus1[i])及び対象階層のユニークセグメント数を示すシンタックス(num_unique_segments_minus1[i])を含んでもよい。
【0105】
ここで、num_unique_segments_bits_minus1[i]及びnum_unique_segments_minus1[i]の両方について、それぞれ本来の値から「1」を引いた値をシンタックスの値として符号化してもよい。
【0106】
(ツリー合成部2020)
以下、
図6を用いてツリー合成部2020の処理について説明する。
図6は、ツリー合成部2020における処理の一例を示すフローチャートである。なお、以下では「Octree」を使用してツリーを合成する場合の例について説明する。
【0107】
ステップS601において、ツリー合成部2020は、全てのDepthの処理が完了したかどうかを確認する。なお、Depth数は、点群符号化装置100から点群復号装置200に伝送するビットストリーム内に制御データとして含まれていてもよい。
【0108】
ツリー合成部2020は、対象Depthのノードサイズを算出する。「Octree」の場合、最初のDepthのノードサイズは、「2のDepth数乗」と定義されてもよい。すなわち、Depth数をNとする場合、最初のDepthのノードサイズは、2のN乗と定義されてもよい。
【0109】
また、2番目以降のDepthでのノードサイズは、Nの数を1つずつ減じていくことで定義されてもよい。すなわち、2番目のDepthのノードサイズは、「2の(N-1)乗」として定義され、3番目のDepthのノードサイズは、「2の(N-2)乗」として定義され、・・・と定義されてもよい。
【0110】
或いは、ノードサイズは、常に2のべき乗で定義されるため、単純に指数部分(N、N-1、N-2、等)の値をノードサイズと考えてもよい。以降の説明では、ノードサイズとは、ノードの1辺の長さの指数部分の値を指すこととする。
【0111】
なお、以降では簡単のため、ノード形状が立方体の場合、すなわち、ノードの全ての辺の長さが等しい場合を例に説明する。
【0112】
QtBtを用いる場合、すなわち、ノード形状が直方体になり、ノードの各辺の長さが軸方向(x、y、z)毎に異なる場合、3方向のうち最も短い辺の長さをノードサイズと考えてもよい。同様に、3方向のうち最も長い辺の長さをノードサイズと考えてもよい。
【0113】
ここで、Trisoupを使用するか否かを制御するフラグ(trisoup_enabled_flag)がTrisoupを使用することを示している場合、すなわち、trisoup_enabled_flagの値が「1」の時は、ツリー合成部2020は、処理するDepth数を、Trisoupノードサイズの最小値を規定するシンタックス(log2_trisoup_min_node_size_minus2)又はTrisoupノードサイズを規定するシンタックス(log2_Trisoup_node_size_minus2)の値に基づいて変化させてもよい。かかる場合、例えば、以下のように定義してもよい。
【0114】
処理Depth数=全Depth数-(最小の)Trisoupノードサイズ
ここで、最小のTrisoupノードサイズについては、例えば、(log2_trisoup_min_node_size_minus2+2)で定義できる。同様に、Trisoupノードサイズについては、(log2_Trisoup_node_size_minus2+2)で定義できる。
【0115】
この場合、全ての処理Depth数の処理が完了した場合は、ツリー合成部2020は、ステップS609へ進み、そうでない場合は、ツリー合成部2020は、ステップS602へ進む。
【0116】
言い換えると、(処理Depth数-n)=0の場合は、ツリー合成部2020は、ステップS609へ進み、(処理Depth数-n)>0の場合は、ツリー合成部2020は、ステップS602へ進む。
【0117】
また、ツリー合成部2020は、ステップS609へ進む際のノードサイズ(N-処理Depth数)を持つ全てのノードには、Trisoupが適用されると判定してもよい。
【0118】
ステップS602において、ツリー合成部2020は、対象Depthにて後述するTrisoup_node_sizeを復号する必要があるか否かを判定する。
【0119】
例えば、「複数レベルでのTrisoupが許可(trisoup_multilevel_enabled_flagの値が「1」)」で、且つ、「対象Depthのノードサイズ(N-n)がCTUサイズ」の場合に、ツリー合成部2020は、「Trisoup_node_sizeの復号が必要である」と判定してもよい。
【0120】
なお、本実施例では、「Trisoupノードサイズを復号するノード」のことをCTU(Coding Tree Unit)と呼ぶ。CTUという名称はあくまで一例であり、「Trisoupノードサイズを復号するノード」であれば、他の名称でもよい。
【0121】
また、ツリー合成部2020は、上述の条件が満たされない場合、「Trisoup_node_sizeの復号が必要ない」と判定してもよい。
【0122】
ここで、最大のTrisoupノードサイズについては、例えば、(log2_trisoup_max_node_size_minus2+2)で定義できる。
【0123】
同様に、最小のTrisoupノードサイズについては、例えば、(log2_trisoup_min_node_size_minus2+2)で定義できる。
【0124】
上述の判定が完了したら、ツリー合成部2020は、ステップS603へ移る。
【0125】
ステップS603において、ツリー合成部2020は、対象Depthに含まれる全てのノードの処理が完了したかどうかを判定する。
【0126】
対象Depthの全てのノードの処理が完了したと判定した場合、ツリー合成部2020は、ステップS601へ移り、次のDepthの処理を行う。
【0127】
一方、対象Depthの全てのノードの処理が完了していない場合、ツリー合成部2020は、ステップS604へ移る。
【0128】
ステップS604において、ツリー合成部2020は、ステップS602で判定したTrisoup_node_sizeの復号の要否について確認する。
【0129】
なお、ステップS602を省略して、ステップS604の処理タイミングにおいて、ステップS602と同様な方法でTrisoup_node_sizeの復号の要否を判定してもよい。
【0130】
Trisoup_node_sizeの復号が必要であると判定されている場合は、ツリー合成部2020は、ステップS605へ進み、Trisoup_node_sizeの復号が必要でないと判定されている場合は、ツリー合成部2020は、ステップS606へ移る。
【0131】
ステップS605において、ツリー合成部2020は、Trisoup_node_sizeを復号する。
【0132】
Trisoup_node_sizeは、かかるCTUをOctree又はQtBtによって再帰的に分割することで得られる子孫ノードが、どのサイズになった際にTrisoupを適用するかを示す情報である。
【0133】
例えば、CTUサイズが5(=25=32)であり、復号したTrisoup_node_sizeが2(=22=4)である場合、当該CTUをOctreeによって3回(=5―2)分割した際に得られる各ノード(ノードサイズ2)に対して、Trisoupを適用することを意味してもよい。
【0134】
ここで復号したTrisoupを適用するノードサイズ(以降、Trisoupノードサイズと呼ぶ)を、当該ノードの付加情報として記憶する。なお、Trisoupノードサイズの初期値は0(=20=1)としておき、ステップS605において復号した値で上書きしてもよい。
【0135】
ツリー合成部2020は、Trisoup_node_sizeを復号した後、ステップS606へ移る。
【0136】
ステップS606において、ツリー合成部2020は、当該ノードの内部情報として記憶しているTrisoupノードサイズの値を確認する。
【0137】
対象ノードにTrisoupを適用する場合、すなわち、当該ノードのサイズと当該ノードの内部情報として記憶しているTrisoupノードサイズが等しい場合、ツリー合成部2020は、ステップS607へ移る。
【0138】
対象ノードにTrisoupを適用しない場合、すなわち、当該ノードのサイズと当該ノードの内部情報として記憶しているTrisoupノードサイズが異なる場合は、ツリー合成部2020は、ステップS608へ移る。
【0139】
ステップS607において、ツリー合成部2020は、対象ノードを、Trisoupを適用するノード、すなわち、Trisoupノードとして記憶する。かかる対象ノードに対しては、これ以上、「Octree」によるノードの分割を適用しないこととする。その後、ツリー合成部2020は、ステップS603に進み、次のノードの処理へ移る。
【0140】
ステップS608において、ツリー合成部2020は、occpancy codeと呼ばれる情報を復号する。
【0141】
occpancy codeは、「Octree」の場合は、対象ノードをx、y、z軸方向にそれぞれ半分に分割して、8つのノード(子ノードと呼ぶ)に分割した際に、それぞれの子ノード内に復号対象の点が含まれているか否かを示す情報である。
【0142】
例えば、occpancy codeは、各子ノードに対して1ビットの情報を割り当て、かかる1ビットの情報が「1」の場合は、かかる子ノード内に復号対象の点が含まれると定義され、かかる1ビットの情報が「0」の場合は、かかる子ノード内に復号対象の点が含まれないと定義されてもよい。
【0143】
ツリー合成部2020は、かかるoccpancy codeを復号する際に、各子ノードに復号対象の点が存在する確率を予め推定し、その確率に基づいて各子ノードに対応するビットをエントロピー復号してもよい。
【0144】
また、ステップS608では、ツリー合成部2020は、後述するS901で使用するために、Trisoupを適用しなかったノードの位置情報をDepthごとに一次元配列等に保存するようにしてもよい。
【0145】
具体的には、ツリー合成部2020は、ステップS608における対象ノード(分割する前のノード)の位置情報を保存するようにしてもよい。例えば、ツリー合成部2020は、対象ノード(直方体)の頂点のうち、一番原点に近い点の座標値をDepthごとに一次元配列に保存し、この情報が、後述する近似表面合成部2030で使用されてもよい。
【0146】
直方体のサイズ(x軸、y軸、z軸方向の辺の長さ)がDepthごとに決定している場合、上記のようにノード内の一番原点に近い点の座標値とDepthが特定できれば、当該ノードの位置情報を復元することができる。
【0147】
同様に、点群符号化装置100においては、エントロピー符号化してもよい。
【0148】
また、ステップS608では、当該ノードの内部情報として記憶しているTrisoupノードサイズを、当該ノードの各子ノードの内部情報として記憶させてもよい。言い換えると、Trisoupノードサイズを子ノードに継承してもよい。これにより、ステップS605で復号したTrisoupノードサイズの値を、子孫ノードに伝播することができる。
【0149】
(近似表面合成部2030)
以下、
図7~
図25を用いて近似表面合成部2030の処理の一例について説明する。
【0150】
図7は、近似表面合成部2030の処理の一例を示すフローチャートである。
【0151】
図7に示すように、ステップS701において、近似表面合成部2030は、全てのtrisoup_depthでの処理が完了したかどうかを判定する。
【0152】
全てのtrisoup_depthについて処理が完了した場合、ステップS709へ進み、処理を終了する。全てのtrisoup_depthの処理が完了していない場合、ステップS702へ進む。
【0153】
ステップS702において、近似表面合成部2030は、当該trisoup_depthに対応するTrisoupノードサイズが、最大Trisoupノードサイズと等しいかどうかを判定する。
【0154】
両者が等しい場合は、本動作は、ステップS704へ進み、両者が等しくない場合、すなわち、当該trisoup_depthに対応するTrisoupノードサイズが、最大Trisoupノードサイズより小さい場合、本動作は、ステップS703へ進む。
【0155】
ステップS702において、近似表面合成部2030は、ノード毎の頂点位置の取得及び統合を行う。
【0156】
ステップS703において、近似表面合成部2030は、後述するステップS708によって生成される「内挿された頂点(内挿処理が行われた頂点)」に対応するセグメントを生成する。
図8は、ステップS703の処理の一例を示すフローチャートである。
【0157】
以下、
図8を用いて、ステップS703の処理の一例について説明する。
【0158】
図8に示すように、ステップS801において、近似表面合成部2030は、後述するステップS708で生成した全ての「内挿された頂点」について処理が完了したか否かを判定する。
【0159】
完了した場合、本動作は、ステップS805へ進み、処理を終了する。完了していない場合、本動作は、次の「内挿された頂点」について処理するため、ステップS802へ進む。
【0160】
ステップS802において、近似表面合成部2030は、「内挿された頂点」がどの方向(x、y、z方向のいずれか)のセグメント上に存在する点なのかを判定する。
【0161】
例えば、後述するようにセグメント及びTrisoupの頂点が、整数座標位置から0.5ずれた位置に存在する場合、x方向のセグメントでは、「内挿された頂点」のx座標のみが、整数値(x.0)になり、y座標及びz座標は、小数値(x.5)となる。
【0162】
同様に、y方向のセグメントでは、y座標のみが整数値となり、z方向のセグメントでは、z座標のみが整数値となるため、近似表面合成部2030は、いずれの軸方向の座標が整数であるについて確認することで、当該「内挿された頂点」が存在すべきセグメントの方向を判定することができる。
【0163】
なお、座標値を整数形式で保存している場合、例えば、0.5を表現するために、真の座標値を2倍した上で整数値として保持している場合は、近似表面合成部2030は、各軸方向の座標値の最下位ビットが1であるかどうかで、整数か小数(x.5)かを判定することができる。
【0164】
近似表面合成部2030は、このように判定した結果を保存し、次のステップS803へ進む。
【0165】
ステップS803において、近似表面合成部2030は、当該「内挿された頂点」が、現在のTrisoupノードサイズにおける辺上に存在するか否かを判定する。例えば、近似表面合成部2030は、以下の方法で、かかる判定を行うことができる。
【0166】
(1)第1に、近似表面合成部2030は、「内挿された頂点」のx、y、z軸のそれぞれの座標値を整数に量子化する。
【0167】
具体的には、近似表面合成部2030は、各座標値に0.5を足した後に小数点以下を切り捨てする。
【0168】
ここで、近似表面合成部2030は、座標値が真の値の2倍の整数値で保存されている場合、1を加えた後に2で除算し小数点以下を切り捨てする。
【0169】
或いは、近似表面合成部2030は、座標値が真の値の2倍の整数値で保存されている場合、1を加えた後に右に1ビットシフトする。
【0170】
なお、ここでは、x、y、z軸の全ての軸方向について整数化する場合を説明したが、近似表面合成部2030は、ステップS802で判定した「方向」以外の軸のみを整数化するようにしてもよい。
【0171】
例えば、近似表面合成部2030は、上述の「方向」がx軸の場合、y座標及びz座標のみ整数化すればよい。
【0172】
(2)第2に、近似表面合成部2030は、ステップS802で判定した「方向」以外の軸の整数化後の座標値が、当該Trisoupノードサイズの倍数になっているか否かを確認する。
【0173】
例えば、近似表面合成部2030は、上述の「方向」がx軸方向で、当該Trisoupノードサイズの値が8(=23)の場合、当該整数化されたy座標及びz座標が、それぞれ8の倍数になっているかどうかを確認する。
【0174】
上述の(2)の処理において、「方向」以外の軸の整数化後の座標値が、いずれも当該Trisoupノードサイズの倍数になっている場合、近似表面合成部2030は、当該「内挿された頂点」が現在のTrisoupノードサイズにおける辺上に存在すると判定し、ステップS804へ進む。
【0175】
そうでない場合、すなわち、少なくとも1つの軸方向の座標値が当該Trisoupノードサイズの倍数になっていない場合、近似表面合成部2030は、当該「内挿された頂点」が現在のTrisoupノードサイズにおける辺上に存在しないと判定し、ステップS801へ進み、次の「内挿された頂点」の処理に移る。
【0176】
ステップS804において、近似表面合成部2030は、ステップS803で整数化した「内挿された頂点」の座標を用いて、「内挿された頂点」に対応するセグメントを生成する。
【0177】
ここで、セグメントは、始点の座標(x、y、z)、終点の座標(x、y、z)、及びセグメント上における頂点位置(0~Trisoupノードサイズー1)の3つの要素から構成されていてもよい。
【0178】
上述の始点は、例えば、前記の整数化した「内挿された頂点」の座標値を、Trisoupノードサイズで量子化することにより得られる。
【0179】
具体的には、例えば、Trisoupノードサイズの2を底とする対数をとった値をTrisoupNodeSizeLog2とすると、「内挿された頂点」の座標値にそれぞれ下記の演算を行うことで導出できる。
【0180】
量子化後の座標値 = (座標値>>TrisoupNodeSizeLog2)<<TrisoupNodeSizeLog2
ここで、>>は、右ビットシフト、<<は、左ビットシフトをそれぞれ意味している。
【0181】
なお、ステップS804の処理に進む場合、ステップS802で判定した「方向」以外の軸の座標値は、既にTrisoupノードサイズの倍数であることが明らかであるので、ステップS804では、近似表面合成部2030は、ステップS802で判定した「方向」に対応する軸の座標値のみ上記の量子化処理を行うこととしてもよい。
【0182】
次に、終点の座標は、始点の座標に対して、ステップS802で判定した「方向」に対応する軸の座標値に、当該Trisoupノードサイズの値を加算することで算出できる。
【0183】
最後に、セグメント上における頂点位置は、ステップS802で判定した「方向」に対応する軸における整数化された「内挿された頂点」の座標値から、上述の「方向」に対応する軸における始点の座標値を減ずることで導出できる。
【0184】
以上の処理を行った後に、本動作は、ステップS801へ進み、次の「内挿された頂点」の処理に進む。
【0185】
以上では、「内挿された頂点」からセグメントを生成する場合の例について説明したが、セグメントの代わりに、ユニークセグメントごとの「内挿された頂点の有無」及び「内挿された頂点の位置」の形式でデータを保持してもよい。
【0186】
ユニークセグメントごとの「内挿された頂点の有無」は、例えば、上述の方法で生成したセグメントの中に、各ユニークセグメントの始点の座標及び終点の座標が同一のものがあれば「頂点あり」、各ユニークセグメントの始点の座標及び終点の座標が同一のものが無ければ「頂点無し」と判定できる。
【0187】
また、「内挿された頂点の位置」としては、上述の通り、「頂点あり」と判定した場合のセグメントが保持している頂点位置をそのまま使用できる。
【0188】
以上のように、近似表面合成部2030は、
図8のステップS703において「内挿された頂点」からセグメント(又は、「内挿された頂点の有無」及び「内挿された頂点の位置」)を生成した後、ステップS704へ進む。
【0189】
ステップS704において、近似表面合成部2030は、次のステップS705における頂点の復号に用いるための隣接情報を収集する。
【0190】
図9は、ステップS704の処理の一例を示すフローチャートである。以下、
図9を用いて、ステップS704の処理の一例について説明する。
【0191】
図9に示すように、ステップS901において、近似表面合成部2030は、マスク情報を生成する。
図10に、マスク情報の生成方法の具体例を示す。
【0192】
マスク情報を生成する場合、
図10に示すように、近似表面合成部2030は、ステップS1001において、当該Trisoupノードサイズにおける全Trisoupノードについて処理が完了したか否かを判定する。
【0193】
完了した場合は、本動作は、ステップS1003へ進み、完了していない場合は、本動作は、ステップS1002へ進む。
【0194】
ステップS1002において、近似表面合成部2030は、当該Trisoupノードについて、36本のセグメント及び各セグメントに対応するマスク値を生成する。
【0195】
図11に、セグメント及びマスク値の生成例を示す。
図11の網掛け部分が、当該Trisoupノードの例を示し、各線分が、セグメントの例を示し、セグメント上に記載されている数字が、マスク値の例を示している。
【0196】
なお、全てのセグメントについてマスク値の例を記載するのが困難であるため、マスク値の例は、一部のセグメントにのみ記載しているが、実際は、全てのセグメントについて、以下の通り、マスク値を設定する。
【0197】
まず、近似表面合成部2030は、セグメントについては、当該Trisoupノードの12本の辺、x方向、y方向、z方向のそれぞれについて当該ノードより座標値の大きな隣接位置、及び、座標値の小さな隣接位置にそれぞれ4本ずつのセグメントを生成し、
図11に示すように、計36本のセグメントを生成する。
【0198】
ここで、各セグメントは、始点及び終点の情報を持ち、頂点は存在しないため、頂点位置の情報は保持しない。
【0199】
次に、各セグメントのマスク値の設定例について説明する。
【0200】
近似表面合成部2030は、当該Trisoupノードの12本の辺に対応するセグメントに対して、それぞれマスク値の下位4ビットのいずれかのビットのみが1で、それ以外が0のマスク値を設定する。
【0201】
例えば、
図11に示すように、近似表面合成部2030は、x軸方向のセグメントには、1、2、4、8のマスク値を設定してもよい。
【0202】
同様に、近似表面合成部2030は、y軸方向のセグメントには、1+(1<<13)、2+(1<<13)、4+(1<<13)、8+(1<<13)のマスク値を設定してもよい。
【0203】
同様に、近似表面合成部2030は、z軸方向のセグメントには、1+(1<<14)、2+(1<<14)、4+(1<<14)、8+(1<<14)のマスク値を設定してもよい。
【0204】
このように設定した場合、マスク値の1ビット目~4ビット目のいずれかのビットが1の場合、当該セグメントに対応するノードがTrisoupノードであることが判別できる。
【0205】
次に、近似表面合成部2030は、当該Trisoupノードよりx方向、y方向、z方向にそれぞれ座標値が大きくなる方向の隣接ノードに対応するセグメント(x、y、z方向のそれぞれで4本ずつ計12本)には、
図11に示すように、それぞれ16、32、64、128のマスク値を設定してもよい。
【0206】
このように設定した場合、マスク値の5ビット目~8ビット目のいずれかのビットが1の場合、当該セグメントに対して座標値が小さくなる方の隣接ノードが、Trisoupノードであることが判別できる。
【0207】
次に、近似表面合成部2030は、当該Trisoupノードよりx方向、y方向、z方向にそれぞれ座標値が小さくなる方向の隣接ノードに対応するセグメント(x、y、z方向のそれぞれで4本ずつ計12本)には、
図11に示すように、それぞれ256、512、1024、2048のマスク値を設定してもよい。
【0208】
このように設定した場合、マスク値の9ビット目~12ビット目のいずれかのビットが1の場合、当該セグメントに対して座標値が大きくなる方の隣接ノードが、Trisoupノードであることが判別できる。
【0209】
上述のように、近似表面合成部2030は、セグメント及びそれに対応するマスク値を生成した後、ステップS1001へ進み、次のTrisoupノードの処理に移る。
【0210】
ここで、ステップS1001での処理対象のノードに、上述のステップS608で保存した、当該DepthにおいてTrisoupを適用しなかったノードを、本ステップの処理対象として加えてもよい。
【0211】
「当該DepthにおいてTrisoupを適用しなかったノード」には、当該Depthにおいては、Trisoupが適用されないため、当該ノード自体にTrisoupの頂点等は生成されないが、当該Depthより大きなDepthにおいてTrisoupが適用されるはずの領域である。よって、ステップS1002で「当該DepthにおいてTrisoupを適用しなかったノード」のマスクを生成する際は、上述の「マスク値の1ビット目~4ビット目のいずれかのビットが1」になるマスクは設定せず、「マスク値の5ビット目~8ビット目のいずれかのビットが1」になるマスクと、「マスク値の9ビット目~12ビット目のいずれかのビットが1」になるマスクのみを設定する。
【0212】
ステップS1003において、近似表面合成部2030は、ステップS703で生成した「内挿された頂点」に対応するセグメントについて、全てのセグメントの処理を完了したかどうかを判定する。
【0213】
完了した場合は、本動作は、ステップS1005へ進み、ステップS901のマスク生成処理を終了する。完了していない場合、本動作は、ステップS1004へ進む。
【0214】
ステップS1004において、近似表面合成部2030は、当該「内挿された頂点」に対応するセグメントについて、当該セグメントに「内挿された頂点」が存在することを意味するマスク値を生成する。
【0215】
近似表面合成部2030は、このマスク値について、例えば、1<<15の値を設定しても良い。このような値を設定した場合、マスク値の16ビット目が1の場合、当該セグメントには「内挿された頂点」が存在すると判定することができる。
【0216】
近似表面合成部2030は、マスク値を生成した後、ステップS1003へ進み、次のセグメントの処理に進む。
【0217】
なお、ステップS1002及びステップS1004で生成したマスク値のそれぞれは、いずれも2のべき乗の値である。このようにすることで、後述するステップS905において、同一位置に存在するセグメントのマスク値を合成する際に、ビット演算(論理和)をとることで容易にマスク値を合成できる。
【0218】
また、このように合成したマスク値の各ビットが1か0かで、上述したように、当該セグメントの情報(Trisoupノードか否か、隣接にTrisoupノードが存在するか、当該セグメントに「内挿された頂点」が存在するか等)を得ることができる。
【0219】
近似表面合成部2030は、以上のようにマスク情報を生成した後、ステップS902へ進む。
【0220】
ステップS902において、近似表面合成部2030は、ステップS901で生成したセグメント、及び、「内挿された頂点」に対応するセグメントを全てまとめた上で、ソートする。
【0221】
近似表面合成部2030は、例えば、各セグメントの始点座標及び終点座標に基づいてソートする。かかる処理を行うことで、同一の始点と終点を持つセグメントが連続するように並べ替えることができる。
【0222】
近似表面合成部2030は、かかるソートが完了した後に、ステップS903へ進む。
【0223】
ステップS903において、近似表面合成部2030は、ステップS902でソートした後のセグメントについて、全てのセグメントの処理が完了したか否かを判定する。
【0224】
完了した場合は、本動作は、ステップS909へ進み、ステップS704の隣接情報の収集処理を終了する。完了していない場合は、本動作は、ステップS904へ進む。
【0225】
ステップS904において、近似表面合成部2030は、当該セグメントが、直前に処理したセグメントと同一位置であるかどうかを判定する。
【0226】
具体的には、近似表面合成部2030は、例えば、セグメントの始点の座標及び終点の座標の両方が、直前に処理したセグメントと同一か否かを判定する。
【0227】
直前に処理したセグメントと同一位置である場合は、本動作は、ステップS905へ進む。直前に処理したセグメントと同一位置ではない場合は、本動作は、ステップS906へ進む。
【0228】
ステップS905において、近似表面合成部2030は、ステップS901で生成した当該セグメントに対応するマスク値と、直前までに処理した同一位置の各セグメントのマスク値とを統合する。
【0229】
例えば、近似表面合成部2030は、ステップS901で説明したように各セグメントに対応するマスク値が2のべき乗で構成される場合、それぞれのセグメントのマスク値の論理和をとることでマスクを統合することができる。
【0230】
近似表面合成部2030は、マスクを統合した後、ステップS907へ進む。
【0231】
ステップS906において、近似表面合成部2030は、当該セグメントの直前に処理したセグメントを、所定条件Aを満たす場合、ユニークセグメントとして保存する。
【0232】
例えば、所定条件Aは、直前に処理したセグメントがTrisoupノードに対応するセグメントである場合、としてもよい。
【0233】
例えば、ステップS905で統合したマスク値の下位4ビットの少なくともいずれか1ビットが1である場合、直前に処理したセグメントはTrisoupノードに対応するセグメントであることが分かる。
【0234】
近似表面合成部2030は、ユニークセグメントに関する情報として、例えば、当該ユニークセグメント(対象ユニークセグメント)に関する、始点の座標、終点の座標、後述するステップS907で説明する内挿点の情報、後述するステップS908で説明する隣接セグメントの情報、及び、ステップS905で統合したマスク値を、それぞれ保存することとしてもよい。これらの情報は、ステップS705の頂点の復号処理において使用される。
【0235】
近似表面合成部2030は、ユニークセグメントに関する情報を保存した後、各種情報(内挿点の情報、隣接セグメントの情報、統合したマスク値等)を初期化する。
【0236】
また、近似表面合成部2030は、所定条件を満たさなかった場合、初期化のみを実施する。以上の処理が完了後、本動作は、ステップS907へ進む。
【0237】
ステップS907において、近似表面合成部2030は、所定条件Bを満たす場合、内挿点に関する情報を保存する。
【0238】
例えば、所定条件Bは、当該セグメントのマスク値が、当該セグメントに「内挿された頂点」が存在することを示している場合としてもよい。具体的には、例えば、所定条件Bは、マスク値の16ビット目が1であること、としてもよい。
【0239】
近似表面合成部2030は、所定条件Bを満たす場合、「内挿された頂点」の座標を保存する。具体的には、近似表面合成部2030は、ステップS804で生成した「セグメント上における頂点位置」の値を保存する。ここで保存された値は、ステップS906においてユニークセグメントに関する情報として保存される。
【0240】
当該セグメントが、ステップS906においてユニークセグメントであると判定されなかった場合(ステップS906の所定条件Aが満たされなかった場合)は、ステップS907で保存された当該セグメントの内挿点に関する情報は、破棄される。
【0241】
なお、近似表面合成部2030は、「セグメント上における頂点位置」の値を保存する配列を別途準備しておき、当該ステップではその配列における当該セグメントに対応する値を特定するためのindex値を、座標値そのものの代わりに保存するようにしてもよい。
【0242】
以上の処理が完了した後、本動作は、ステップS908へ進む。
【0243】
ステップS908において、近似表面合成部2030は、隣接セグメントの情報を保存する。
【0244】
具体的には、例えば、近似表面合成部2030は、当該セグメントの始点座標、及び、始点座標或いは終点座標が同一のセグメントを特定するための情報(例えば、セグメントのインデックス等)を保存する。
【0245】
例えば、当該セグメントの始点座標、及び、始点座標或いは終点座標が同一のセグメントは、具体的には、当該セグメントと同一の軸方向で、終点座標が当該セグメントの始点座標と同一になるセグメントが1つと、当該セグメントと直交する軸方向のセグメントが4つ存在する。ここで保存された情報は、ステップS906においてユニークセグメントに関する情報として保存される。
【0246】
当該セグメントが、ステップS906においてユニークセグメントであると判定されなかった場合(ステップS906の所定条件Aが満たされなかった場合)は、ステップS908で生成された当該セグメントの隣接セグメントの情報は、破棄される。
【0247】
上述の処理が完了後、本動作は、ステップS903へ進み、次のセグメントの処理へ進む。
【0248】
以上のように、近似表面合成部2030は、ステップS704における隣接情報の収集を行った後、ステップS705へ進む。
【0249】
ステップS705において、近似表面合成部2030は、当該trisoup_depthにおけるTrisoupの頂点を復号する。
【0250】
図12は、ステップS705における頂点の復号方法の一例を示すフローチャートである。以下、
図12を用いて、ステップS705の処理の一例を説明する。
【0251】
図12に示すように、ステップS1201において、近似表面合成部2030は、コンテクストの初期化を行う。
【0252】
ここで、初期化とは、例えば、コンテクストに対応する情報をエントロピー復号する際の確率分布の初期値を設定することである。エントロピー復号した値を基にコンテクストごとに確率分布を更新していくことで、符号化効率を向上させることができる。
【0253】
なお、近似表面合成部2030は、用途に応じて、複数セットのコンテクストを用意しておき、それぞれ初期化してもよい。
【0254】
例えば、近似表面合成部2030は、用途ごとに、後述するように、頂点の有無の復号のためのコンテクスト、頂点位置の1ビット目の復号のためのコンテクスト及び頂点位置の2ビット目の復号のためのコンテクストの計3種類を備えていてもよい。
【0255】
これらのコンテクストは、後述するように、CtxMap1とCtxMap2という2つの要素から構成されてもよい。例えば、非特許文献2では、頂点の有無の復号のためのコンテクストがMapOBUFTrisoup[0]とし、頂点位置の1ビット目の復号のためのコンテクストがMapOBUFTrisoup[1]とし、頂点位置の1ビット目の復号のためのコンテクストがMapOBUFTrisoup[2]として、それぞれ用意されている。
【0256】
さらに、非特許文献2では、MapOBUFTrisoup[0]のCtxMap1のコンテクストが7ビット分(=128通り)用意され、CtxMap2のコンテクストが15ビット(14+1ビット)分用意され、それぞれ初期化されている。
【0257】
同様に、MapOBUFTrisoup[1]のCtxMap1は、6ビット分用意され、CtxMap2は、15ビット(10+1+3+1ビット)分用意され、MapOBUFTrisoup[2]のCtxMap1は、7ビット(6+1ビット)分用意され、CtxMap2は、15ビット(10+1+3+1ビット)分用意されて、初期化されている。
【0258】
後述するように、頂点の有無の復号のためのコンテクストのCtxMap1は、7ビット分の値を取り、CtxMap2は、15ビット分の値を取る。
【0259】
同様に、頂点位置の1ビット目のCtxMap1は、6ビット分の値を取り、CtxMap2は、11ビット分の値を取り、頂点位置の1ビット目のCtxMap1は、7ビット分の値を取り、CtxMap2は、15ビット分の値を取る。この時、上記で説明した非特許文献2のように、実際に使用するビット数以上のコンテクストを予め用意しておけば、後段の処理が可能になる。
【0260】
さらに、実際に使用するビットに基づいて、必要最小限のコンテクストのみを用意するようにすることで、コンテクストの保存に係るメモリ量を削減することができる。
【0261】
後述の例では、頂点位置の1ビット目のCtxMap2は、11ビット分の値しか取らないため、11ビット分だけコンテクストを用意し、初期化すればよい。言い換えると、非特許文献2のように15ビット分の値を用意する必要はない。
【0262】
コンテクストの初期化が完了した後、本動作は、ステップS1202へ進む。
【0263】
ステップS1202において、近似表面合成部2030は、ステップS703で生成した全てのユニークセグメントについて処理が終了したか否かを判定する。
【0264】
全てのユニークセグメントについて処理が完了した場合、本動作は、ステップS1208へ進み、ステップS703の処理を終了する。全てのユニークセグメントについて処理が完了していない場合、本動作は、ステップS1203へ進む。
【0265】
ステップS1203において、近似表面合成部2030は、当該ユニークセグメントに「内挿された頂点」が存在するか否かを判定する。
【0266】
「内挿された頂点」が存在するか否かは、ステップS906で保存された統合されたマスク値、又は、ステップS703で生成した「内挿された頂点の有無」の情報に基づいて判定できる。「内挿された頂点」が存在する場合、本動作は、ステップS1204へ進む。「内挿された頂点」が存在しない場合、本動作は、ステップS1205へ進む。
【0267】
ステップS1204において、近似表面合成部2030は、ステップS906で保存した「セグメント上における頂点位置」或いはステップS703で生成した「内挿された頂点の位置」を、当該ユニークセグメントにおける頂点位置として保存する。
【0268】
言い換えると、近似表面合成部2030は、ステップS906で保存した「セグメント上における頂点位置」を、当該ユニークセグメントにおける頂点位置の復号値とする。
【0269】
さらに、近似表面合成部2030は、当該ユニークセグメントにおける「頂点有無」の復号値を、「頂点あり」とする。
【0270】
すなわち、ステップS1204は、ビットストリームから頂点位置及び頂点の有無を示す情報を復号する代わりに、内挿された値を用いて頂点位置及び頂点有無を示す情報を暗黙的に決定する処理である。
【0271】
上述の処理が完了した後、本動作は、ステップS1202へ進み、次のユニークセグメントの処理へ進む。
【0272】
ステップS1205において、近似表面合成部2030は、ビットストリームから当該ユニークセグメントに頂点が存在するか否かを示す、頂点の有無を示す情報を復号する。
【0273】
頂点の有無を示す情報は、1ビットのフラグであり、点群符号化装置100においてエントロピー符号化されていてもよい。近似表面合成部2030は、エントロピー符号化(符号化装置)/復号(復号装置)に際して、複数の確率モデルを用意しておき、コンテクストに応じて選択してもよい。コンテクストは、例えば、ステップS906で保存されて統合されたマスク値に基づいて設定されてもよい。
【0274】
以下、
図18~
図20を用いて、コンテクストの設定方法の一例について説明する。
【0275】
図18A及び
図18Bは、当該ユニークセグメントをEとしたときの、近傍ノードを示している。なお、Eの矢印の方向は、原点から離れる方向(座標値が大きくなる方向)を意味している。
【0276】
ノードe1~e4は、当該ユニークセグメントに隣接する(当該ユニークセグメントを辺として含む)ノードである。
【0277】
ノードe1~e4が存在するか否かは、ステップS704で生成した当該ユニークセグメントのマスク値の、1ビット目~4ビット目がそれぞれ1か0かによって判断できる。
【0278】
ノードa1~a4は、当該ユニークセグメントと原点に近い方向(座標値が小さくなる方向)で隣接するセグメントに隣接する(辺として含む)ノードである。
【0279】
ノードa1~a4が存在するか否かは、ステップS704で生成した当該ユニークセグメントのマスク値の、5ビット目~8ビット目がそれぞれ1か0かによって判断できる。
【0280】
ノードb1~b4は、当該ユニークセグメントと原点に遠い方向(座標値が大きくなる方向)で隣接するセグメントに隣接する(辺として含む)ノードである。
【0281】
ノードb1~b4が存在するか否かは、ステップS704で生成した当該ユニークセグメントのマスク値の、9ビット目~12ビット目がそれぞれ1か0かによって判断できる。
【0282】
【0283】
図19A~
図19Cに示すように、当該ユニークセグメントEの方向がx軸方向、y軸方向、z軸方向の場合で、それぞれ異なる配置を取る。これは、ユニークセグメントをラスタスキャン順(又は、辞書式順序とも呼ぶ。x、y、zの優先順位で座標値を昇順に並べ替えたもの)で復号した際に、当該ユニークセグメントより前に復号が完了しているエッジ(セグメント)のみで構成されている。
【0284】
図19A~
図19Cの各セグメントの矢印の方向は、原点から遠い方向(座標値が大きくなる方向)を示している。
【0285】
コンテクストは、CtxMap1(又は、Primary Information)及びCtxMap2(Secondary Information)から構成されてもよい。
【0286】
CtxMap1は、例えば、以下のように構成されてもよい。
【0287】
CtxMap1=min(nclosestPattern,2)×15×2+(neighbEdge-1)×2 + (ctx1 == 4 ? 1 : 0)
ここで、min(A,B)は、2つの変数A及びBのうち、小さい方の値を返す関数である。
【0288】
また、nclosestPatternは、
図19A~
図19Cに示すa~eの添え字が付いたエッジ(ユニークセグメント)のうち、頂点が当該ユニークセグメントEに近い位置(当該ユニークセグメントからの距離がエッジの長さ/2以下の位置)に存在するエッジの数であり、0~4の値をとる。
【0289】
すなわち、min(nclosestPattern,2)は、0~2の3種類の整数値のいずれかの値となる。
【0290】
neighbEdgeは、4ビットの2進数であり、
図18Aのノードe1~e4のそれぞれが存在するか否かを1ビットずつで表現したものである。neighbEdgeは、10進数で考えると、1~15のいずれかの整数値を取る。
【0291】
ctx1は、
図18Bのa1~a4のノードのうち、存在するノードの数である。
【0292】
(条件 ? A : B)は、三項演算子であり、条件を満たす際はAの値を返し、条件を満たさない場合はBの値を返す。上述のケースでは、ctx1の値が4であれば、1を返し、そうでなければ0を返す。
【0293】
以上のように、CtxMap1は、3×15×2通り=90通り(<27通り)の値を取り得る。言い換えると、7ビットの2進数で取り得る全ての値を表現できる。
【0294】
CtxMap2は、例えば、
図20に示すように構成されてもよい。
図20に示すように、CtxMap2は、15ビット分の情報を持つ。言い換えると、CtxMap2は、2
15通りの値を取る。
【0295】
近似表面合成部2030は、頂点の有無を示す情報を復号した後、ステップS1206へ進む。
【0296】
ステップS1206において、近似表面合成部2030は、当該ユニークセグメントに頂点が存在するか否かを判定する。
【0297】
近似表面合成部2030は、ステップS1205で復号した頂点の有無を示す情報に基づき、頂点が存在する場合、ステップS1207へ進む。かかる頂点が存在しない場合は、近似表面合成部2030は、ステップS1202へ進み、次のユニークセグメントの処理へ進む。
【0298】
ステップS1207において、近似表面合成部2030は、頂点が存在すると判定されたユニークセグメントにおいて、「セグメント上における頂点位置」を復号する。ここで、頂点位置は、エントロピー符号化されていてもよい。エントロピー符号化(符号化装置)/復号(復号装置)に際して、近似表面合成部2030は、複数の確率モデルを用意しておき、コンテクストに応じて選択してもよい。コンテクストは、例えば、ステップS906で保存された隣接セグメントの情報に基づいて設定されてもよい。
【0299】
【0300】
頂点位置は、以下のように、MSBから順に1ビットずつ復号されてもよい。また、頂点位置のコンテクストは、上述の頂点有無のコンテクストと同様に、CtxMap1(又は、Primary Information)及びCtxMap2(Secondary Information)から構成されてもよい。
【0301】
第1に、1ビット目(MSB)のコンテクストを生成する例について説明する。
【0302】
CtxMap1は、例えば、以下のように構成されてもよい。
【0303】
CtxMap1= ctxFullNbounds×2 + (nclosestStart>0 ? 1:0)
ここで、ctxFullNboundsは以下のように定義されても良い。
【0304】
ctxFullNbounds=(4×(ctx0<=1 ? 0 : (ctx0 >= 3 ? 2 : 1)) + (max(1, ctx1) - 1))×2+(ctxE == 3 ? 0 :1)
ここで、ctx0は、
図18Bのb1~b4のノードのうち、存在するノードの数である。
【0305】
また、max(A,B)は、2つの引数A,Bのうち、大きい方の値を返す関数である。
【0306】
さらに、ctxEは、
図18Aのe1~e4のノードのうち、存在するノードの数から1を引いた値である。
【0307】
nclosestStartは、
図19A~
図19Cに示すa~eの添え字を持つエッジのうち、頂点が当該ユニークセグメントEに最も近い位置(当該ユニークセグメントからの距離がエッジの長さ/4以下の位置)に存在するエッジの数である。
【0308】
以上より、CtxMap1は、3×4×2×2=48通り(<26通り)の値を取る。言い換えると、CtxMap1は、6ビットの2進数で取り得る全ての値を表現できる。
【0309】
CtxMap2は、例えば、
図21に示すように構成されてもよい。
図21に示すように、CtxMap2は、11ビット分の情報を持つ。言い換えると、CtxMap2は、2
11通りの値を取る。
【0310】
次に、2ビット目のコンテクストの生成の一例について説明する。
【0311】
CtxMap1は、例えば、以下のように構成されてもよい。
【0312】
CtxMap1=(1ビット目のCtxMap1)<<1+1ビット目の復号結果
ここで、<<1は、左に1ビットシフトすることを意味する。以上より、CtxMap1は、48×2=96通り(<27通り)の値を取る。言い換えると、CtxMap1は、7ビットの2進数で取り得る全ての値を表現できる。
【0313】
CtxMap2は、例えば、
図22に示すように構成されてもよい。
図22に示すように、CtxMap2は、15ビット分の情報を持つ。言い換えると、CtxMap2は、2
15通りの値を取る。
【0314】
ここで、頂点位置は、上述のTrisoupの頂点位置の精度(bit数)を指定するシンタックス(trisoup_vertex_number_bits)で指定されたビット精度で復号されてもよい。
【0315】
例えば、trisoup_vertex_number_bitsが2の場合、0、1、2、3の4種類の値をとるように復号されてもよい。更に、trisoup_vertex_number_bitsがDepth毎に復号されている場合、当該Depthに対応するビット精度で復号されてもよい。
【0316】
また、trisoup_vertex_number_bitsで指定するビット精度は最小Trisoupノードサイズに対応するDepth(一番大きなDepth)でのみ使用し、以降、ノードサイズが1大きくなる(Depthが1小さくなる)に従って、ビット精度を1ずつ増やしてもよい。
【0317】
例えば、ノードサイズが2種類(最小と最大の2段階)の場合、最小Trisoupノードサイズに対応するDepthでは、trisoup_vertex_number_bitsの値、最大Trisoupノードサイズに対応するDepthでは、trisoup_vertex_number_bitsに1を加えた値を、それぞれ当該Depthのビット精度として、頂点位置を復号してもよい。
【0318】
以上のように、近似表面合成部2030は、頂点の有無及び頂点の位置をそれぞれ複数のコンテクストを用いて復号し、コンテクストは、かかる復号処理に先立ってコンテクストが取り得る値に基づいた必要最小限の数分用意され、初期化されるように構成されている。
【0319】
近似表面合成部2030は、頂点位置を復号した後、ステップS1202へ進み、次のユニークセグメントの処理へ進む。
【0320】
以上では、近似表面合成部2030が、ステップS1204において「内挿された頂点」をそのまま頂点位置として使用する場合の例を説明したが、近似表面合成部2030は、「内挿された頂点」の情報に基づいて、頂点の有無及び頂点位置を復号してもよい。
【0321】
例えば、
図23に示すように、近似表面合成部2030は、「内挿された頂点」が存在するユニークセグメントにおいては、ステップS2201において、「内挿された頂点」の位置との差分値を復号し、復号した差分値を「内挿された頂点」の位置に加算したものを、当該ユニークセグメントにおける頂点位置の復号値としてもよい。
【0322】
この時、近似表面合成部2030は、差分値について、-d~+dの範囲に限定してもよい。例えば、近似表面合成部2030は、dを、1としてもよい。かかる場合、差分値は、-1、0、+1の3つの値に限定される。
【0323】
この時、近似表面合成部2030は、0⇒0、+1⇒10、-1⇒11のように、1ビット目は絶対値がゼロか否かを示し、2ビット目は絶対値が1であった場合の符号を示すように2値化した後、1ビットずつエントロピー符号化されている前提で、エントロピー復号を行ってもよい。
【0324】
かかる場合、近似表面合成部2030は、1ビット目及び2ビット目で、それぞれ異なるコンテクストを用意し、エントロピー復号に用いる確率分布を更新してもよい。
【0325】
また、近似表面合成部2030は、かかる差分符号化を複数のノードサイズ間で階層的に実行する場合、差分値に対してWavelet変換等の変換処理が適用されている前提で、復号した差分値の変換係数に対して逆変換(逆Wavelet変換等)を適用することで、最終的な差分値を得るように構成されていてもよい。
【0326】
また、例えば、近似表面合成部2030は、
図24に示すように、処理の順番を入れ替えて、「頂点あり」と復号されたユニークセグメントに対して「内挿された頂点」が存在するか否かを判定してもよい。
【0327】
さらに、近似表面合成部2030は、当該ユニークセグメントに対して「内挿された頂点」が存在する場合は、
図24の例と同様に、「内挿された頂点」の位置との差分値を復号し、復号した差分値を「内挿された頂点」の位置に加算したものを、当該ユニークセグメントにおける頂点位置の復号値としてもよい。
【0328】
また、例えば、近似表面合成部2030は、
図25に示すように、それぞれ「内挿された頂点」の情報を用いて、頂点有無の復号及び頂点位置の復号を行ってもよい。
【0329】
以下、
図12との差分であるステップS2401及びステップS2402について処理の具体例を説明する。
【0330】
図25に示すように、ステップS2401では、近似表面合成部2030は、当該ユニークセグメントの頂点有無の復号に際して、当該ユニークセグメントに「内挿された頂点」が存在するか否かによってコンテクストを切り替え、コンテクストに基づいてエントロピー復号を行う。
【0331】
ここで、近似表面合成部2030は、コンテクストについては、ステップS1205において説明したコンテクストと組み合わせて使用してもよい。
【0332】
以上のように、頂点有無を復号した後、本動作は、ステップS1206へ進む。
【0333】
ステップS2402では、近似表面合成部2030は、当該ユニークセグメントの頂点位置の復号に際して、当該ユニークセグメントに「内挿された頂点」が存在するか否か、及び、当該ユニークセグメントに「内挿された頂点」が存在する場合は、その頂点位置に基づいてエントロピー復号を行う。
【0334】
例えば、近似表面合成部2030は、コンテクストについて、「内挿された頂点」の位置を2ビットで量子化(4通りに限定)した場合、4通りの位置 + 内挿された頂点が存在しない場合=計5通りのコンテクストとしてもよい。
【0335】
また、近似表面合成部2030は、これらのコンテクストと、ステップS1207で説明したコンテクストとを組み合わせて使用してもよい。
【0336】
以上のように、近似表面合成部2030は、大きなノードサイズから順に、各ノードサイズにおけるTrisoupの頂点情報を復号するように構成されている。
【0337】
ここで、かかる頂点情報は、ユニークセグメントごとの頂点の有無及びユニークセグメントごとの頂点位置の少なくとも1つを含む。
【0338】
そして、近似表面合成部2030は、当該ノードサイズ(対象ノードサイズ)より大きな復号済みノードサイズが存在する場合は、かかる復号済みのノードサイズにおけるTrisoup頂点情報から当該ノードサイズにおける頂点情報の予測値を生成し、かかる予測値を用いて当該ノードサイズの頂点情報を復号するように構成されていてもよい。
【0339】
また、
図23及び
図24を用いて説明したように、近似表面合成部2030は、当該ノードサイズ(対象ノードサイズ)より大きな復号済みノードサイズが存在する場合は、かかる復号済みのノードサイズにおけるユニークセグメントごとの頂点位置から予測値を生成し、当該ノードサイズにおける当該ユニークセグメント(対象ユニークセグメント)に頂点情報の予測値が存在する場合、上述の予測値と当該ノードサイズにおける当該ユニークセグメントの頂点位置との差分値を復号し、かかる差分値と予測値とを加算することで、当該ノードサイズにおける当該ユニークセグメントの頂点位置を復号するように構成されていてもよい。
【0340】
このような構成とすることで、Trisoupの頂点位置を直接復号する場合と比較して、符号化効率を向上できる。
【0341】
また、
図25を用いて説明したように、近似表面合成部2030は、当該ノードサイズ(対象ノードサイズ)より大きな復号済みノードサイズが存在する場合は、かかる復号済みのノードサイズにおけるユニークセグメントごとの頂点位置から予測値を生成し、当該ノードサイズにおける当該ユニークセグメント(対象ユニークセグメント)に頂点情報の予測値が存在するか否かに基づいてコンテクストを切り替え、かかるコンテクストを用いて当該ユニークセグメントの頂点有無を復号するように構成されていていてもよい。
【0342】
このような構成とすることで、予測値の有無に応じて異なるコンテクスト(確率分布)を用いてエントロピー復号できるため、符号化効率を向上できる。
【0343】
また、
図25を用いて説明したように、近似表面合成部2030は、当該ノードサイズ(対象ノードサイズ)より大きな復号済みノードサイズが存在する場合は、かかる復号済みのノードサイズにおけるユニークセグメントごとの頂点位置から予測値を生成し、当該ノードサイズにおける当該ユニークセグメント(対象ユニークセグメント)に頂点情報の予測値が存在する場合、かかる予測値に基づいて、コンテクストを切り替え、かかるコンテクストを用いて、当該ユニークセグメントの頂点位置を復号するように構成されていてもよい。
【0344】
このような構成とすることで、予測値に基づいて異なるコンテクスト(確率分布)を用いてエントロピー復号できるため、符号化効率を向上できる。
【0345】
また、近似表面合成部2030は、
図23、
図24で説明した差分符号化や、
図25を用いて説明した予測値によるコンテクストの切り替えについては、異なるノードサイズの境界(CTU単位でノードサイズを選択する場合は、CTU境界)に位置するユニークセグメントのみに限定して適用するようにしてもよい。
【0346】
以上のように、近似表面合成部2030は、ステップS705において頂点を復号した後、ステップS706へ進む。
【0347】
ステップS706において、近似表面合成部2030は、ステップS705で復号した頂点に基づいて、再構成点群を生成する。
図13は、再構成点群の生成方法の一例を示すフローチャートである。以下、
図13を用いて、ステップS706の処理の一例について説明する。
【0348】
図13に示すように、ステップS1301において、近似表面合成部2030は、当該trisoup_depthにおける全てのTrisoupノードについて処理が完了したか否かを判定する。
【0349】
全てのTrisoupノードについて処理が完了した場合、本動作は、ステップS1306へ進み、処理を終了する。全てのTrisoupノードについて処理が完了していない場合、本動作は、ステップS1302へ進む。
【0350】
ステップS1302において、第1に、近似表面合成部2030は、当該Trisoupノードの各辺(セグメント)に対応するユニークセグメントを特定する。例えば、近似表面合成部2030は、ステップS705で処理した各ユニークセグメントの中から、当該Trisoupノードの各辺(セグメント)の始点座標と終点座標とが同一ユニークセグメントを探すことで、特定することができる。
【0351】
第2に、近似表面合成部2030は、特定したユニークセグメントに頂点が存在する場合、以下の手順で、頂点を再構成点群に追加する。
(1)近似表面合成部2030は、セグメントの位置を、-0.5だけずらす。具体的には、近似表面合成部2030は、セグメントの始点座標及び終点座標のそれぞれについて、セグメントの方向に沿った軸以外の座標値から0.5を減ずる。
【0352】
例えば、セグメントの始点座標が(x、y、z)=(12、100、32)で、ノードサイズが4で、且つ、当該セグメントの方向がx軸であった場合、終点座標は、始点のx座標にノードサイズを加えて(16、100、32)となる。
【0353】
これに対して、x軸以外、すなわち、かかる例では、y座標及びz座標を、それぞれ0.5だけ減ずる。よって、始点座標及び終点座標は、それぞれ(12、99.5、31.5)及び(16、99.5、31.5)となる。
(2)近似表面合成部2030は、上述の始点座標に、当該セグメントの「セグメント上における頂点位置」を加算する。例えば、上述の例において、「セグメント上における頂点位置」が2である場合、(14、99.5、31.5)となる。
(3)近似表面合成部2030は、上述の(2)で求めた座標に対して、セグメントの方向に沿った軸以外の座標値に0.5を加える。例えば、上述の例においては、(14、100、32)となる。この値は、上述の(1)の手順を実行する前の当該ユニークセグメントの始点座標(12、100、32)に、当該ユニークセグメント上の頂点位置2を加算することでも同一の結果を得ることができるので、近似表面合成部2030は、そのように計算してもよい。
(4)上述の(3)で算出した座標が、当該Trisoupノードの内部に存在する場合、近似表面合成部2030は、上述の(3)で算出した座標に点を生成し、再構成点群に追加する。
【0354】
ここで、当該Trisoupノードの内部とは、x、y、z座標の値が、それぞれ当該Trisoupノードの始点(x座標、y座標、z座標のそれぞれが一番小さい点)+Trisoupノードサイズ-1の範囲に存在する点である。
【0355】
例えば、当該Trisoupノードの始点座標が(x、y、z)=(12、100、32)で、Trisoupノードサイズが4の場合、(12~15、100~103、32~35)の範囲に存在する点は、当該Trisoupノードの内部とみなす。
【0356】
この場合、上述の(3)で算出した座標が(14、100、32)とすると、この座標は、当該Trisoupノードの内部であると判定され、近似表面合成部2030は、この座標の点を再構成点群に追加する。
図15Aに、かかる結果を、x-y平面に投影したケースについて示す。
【0357】
一方、例えば、当該Trisoupノードの始点座標が(x、y、z)=(12、96、32)の場合、(12~15、96~99、32~35)の範囲にある点が、Trisoupノードの内部となるため、この場合は、(14、100、32)は、Trisoupノードの内部には存在しないと判定され、上述の(3)で算出された座標は、再構成点群に追加させずに、本動作は、処理を終了する。
図15Bに、かかるケースの例について示す。
【0358】
上記の処理を終了した後、本動作は、ステップS1303へ進む。
【0359】
ステップS1303において、近似表面合成部2030は、当該Trisoupノードに対応する頂点から、セントロイドの初期座標を算出する。
【0360】
例えば、セントロイドの初期座標は、当該Trisoupノードの全ての頂点位置のx、y、z成分をそれぞれ平均することで算出され得る。なお、当該Trisoupノードの頂点が3点以下の場合、セントロイド処理の算出を省略してもよい。
【0361】
かかる処理が完了した後、本動作は、ステップS1304へ進む。
【0362】
ステップS1304において、近似表面合成部2030は、頂点のソート及び投影面の決定処理を行う。具体的には、例えば、近似表面合成部2030は、以下の手順で、頂点のソート及び投影面を決定できる。
(1)近似表面合成部2030は、頂点をx-y平面に投影する。かかる処理は、各頂点座標からx座標、y座標の値を抽出することと等価である。
【0363】
頂点は、もともとノードの辺上に存在するため、投影した平面状では、各頂点は、ノードを平面に投影した正方形或いは長方形の辺上に存在することになる。正方形も、長方形の一種であるため、以降の説明では、投影後のノードの形状を長方形として説明する。
(2)近似表面合成部2030は、ノードを投影した長方形の辺上にある点を、時計回り或いは反時計回りの順になるようにソートする。
【0364】
また、近似表面合成部2030は、ソートした順に、各頂点に仮のIndex値(0、1、2、・・・)を与える。
(3)近似表面合成部2030は、ソート順で隣接する2つの頂点及びセントロイドの3点で定義される三角形を定義し、この三角形の面積を算出する。三角形の面積は、例えば、セントロイドを始点としてそれぞれ2つの頂点座標に向かうベクトルを生成し、それらの外積を用いることで算出できる。
【0365】
近似表面合成部2030は、このように、三角形の面積をソート順で隣接する2つの頂点の全ての組み合わせ(0、1)、(1、2)、・・・(N、0)について算出し、合算する。
【0366】
なお、近似表面合成部2030は、頂点が3点しかない場合、セントロイドを用いず、3つの頂点で構成される三角形の面積を算出する。また、この面積は、投影した平面状での面積である。
(4)近似表面合成部2030は、上述の(1)~(3)の手順を、x-z平面及びy-z平面についても同様に行い、上述の(3)で算出した面積が最大になる平面を投影面とし、その際に、上述の(2)でソートした順及び付与した仮のIndexを、最終的なソート順及びIndexとして採用する。
【0367】
以上のように、近似表面合成部2030は、頂点のソート及び投影面を決定した後に、ステップS1305に進む。
【0368】
ステップS1305において、近似表面合成部2030は、ステップS1304で生成した三角形及びレイトレーシングによって再構成点群を生成する。
【0369】
具体的には、近似表面合成部2030は、以下の手順で、再構成点群を生成する。
(1)第1に、近似表面合成部2030は、ステップS1304で決定したIndexとセントロイドとに基づいて、ステップS1304と同様に、三角形を生成する。但し、近似表面合成部2030は、ステップS1304では、2次元平面上で三角形を生成したが、ステップS1305では、各頂点のx、y、z座標の全てを使用して、3次元空間上で三角形を生成する。
(2)第2に、近似表面合成部2030は、投影面の法線ベクトル(投影面がx-y平面であれば、z方向のベクトル)を定義し、投影面上に配置する。
【0370】
例えば、近似表面合成部2030は、初期位置を、投影面上での当該ノード形状(すなわち、長方形)の最も原点に近い点とする。
(3)第3に、近似表面合成部2030は、法線ベクトルのノルムを大きくしていった際に、上述の(1)で生成した三角形と交差するか否か、交差する場合は、その座標を算出する。
【0371】
例えば、近似表面合成部2030は、一般的なレイトレーシングの手法等を用いることで、かかる処理を実現できる。
図16Aに、三角形の構成の一例をについて示す。
(4)第4に、近似表面合成部2030は、上述の(3)で算出した法線ベクトルと三角形とが交差する座標が、当該Trisoupノードの内部に存在する場合、かかる座標位置に点を生成し、再構成点群に加える。
(5)第5に、近似表面合成部2030は、投影面上の当該ノード(長方形)内の各整数座標位置にそれぞれ配置した場合について、上述の(3)及び(4)の手順を繰り返す。
【0372】
このとき、法線ベクトルを配置する間隔は、1(すなわち、全ての整数座標位置)としてもよい。ここで間隔1が、取りうる最も小さな間隔である。
図16Aの三角形から生成した再構成点群の例について、
図16Bに示す。
【0373】
近似表面合成部2030は、以上のようにして、当該Trisoupノードに対する再構成点を生成した後、ステップS1301へ進み、次のTrisoupノードの処理に進む。
【0374】
以上のように、ステップS706において、近似表面合成部2030は、再構成点群を生成した後、ステップS707へ進む。
【0375】
ステップS707において、近似表面合成部2030は、当該trisoup_depthにおけるTrisoupノードサイズが、最小Trisoupノードサイズであるか否かを判定する。
【0376】
最小Trisoupノードサイズである場合は、本動作は、ステップS701へ進む。そうでない場合、すなわち、当該trisoup_depthにおけるTrisoupノードサイズが、最小Trisoupノードサイズより大きい場合、本動作は、ステップS708へ進む。
【0377】
ステップS708において、近似表面合成部2030は、ステップS705で復号したtrisoup_depthにおけるTrisoupノードサイズに対応する頂点に基づいて、最小Trisoupノードサイズにおけるノードのセグメント上に頂点を内挿する。
【0378】
図14は、ステップS708の処理の一例を示すフローチャートである。以下、
図14を用いて、ステップS708の処理例を説明する。なお、
図14の処理は、
図13の処理とほとんど共通しており、同一の処理には、同一の符号を付している。以下、
図13との差異のみを説明する。
【0379】
図14に示すように、ステップS1402において、近似表面合成部2030は、当該Trisoupノードの頂点を、「内挿された頂点」として保存する。
【0380】
具体的には、近似表面合成部2030は、ステップS1302で説明した手順(1)及び(2)まで実施した後の座標値をそのまま「内挿された頂点」として保存する。
【0381】
例えば、ステップS1302の例では、近似表面合成部2030は、(14、99.5、31.5)という座標値を「内挿された頂点」として保存する。これは、セグメントの位置が整数座標位置から0.5ずれた位置にあるように定義しているためである。
【0382】
また、この値を整数として保持するために、近似表面合成部2030は、真の座標値を2倍にした値として保持してもよい。上述の例では、近似表面合成部2030は、(28、199、63)という値を「内挿された頂点」として保存してもよい。
【0383】
ステップS1405において、近似表面合成部2030は、ステップS1305の手順(2)において、法線ベクトルを配置する位置を、当該Trisoupノードを最小Trisoupノードサイズで分割した時のセグメントが存在する位置に配置するように変更する。
【0384】
ステップS1305の手順(3)と同様にして算出した交差する座標が、当該Trisoupノードを最小Trisoupノードサイズで分割した時のセグメント上にある場合、近似表面合成部2030は、かかる座標値を「内挿された頂点」として保存する。
【0385】
ステップS1402で座標値を2倍することで整数化した値を保存した場合は、近似表面合成部2030は、ステップS1405においても、上述の座標値を2倍した値を保存する。
【0386】
近似表面合成部2030は、以上の処理で生成した「内挿された頂点」を保存し、次のtrisoup_depthにおけるステップS703で使用する。
【0387】
また、当該trisoup_depthが0より大きい場合、すなわち、当該trisoup_depthにおけるTrisoupノードサイズが最大Trisoupノードサイズではない場合、より大きなノードサイズに生成した「内挿された頂点」が存在するが、近似表面合成部2030は、これらの「内挿された頂点」の集合については削除せず、ステップS1402で新たに生成した「内挿された頂点」を、上述の集合に追加していく形で保存する。
【0388】
なお、内挿された頂点をノード間或いはCTUノード間のみで使用する場合(ノード間或いはCTUノード間のみで、
図23及び
図24で説明した差分符号化や
図25で説明したコンテクスト構築を行う場合)は、近似表面合成部2030は、
図16Cに示すように、「内挿された頂点」のうち、当該Trisoupノードの表面に存在するもののみを保存するようにしてもよい。
【0389】
或いは、近似表面合成部2030は、「内挿された頂点」のうち、CTUノード(Trisoupノードサイズを復号するノード)の表面に存在するもののみを保存するようにしてもよい。
【0390】
すなわち、近似表面合成部2030は、異なるノードサイズの境界に位置するユニークセグメントにおいて、大きなノードサイズにおける頂点情報から、小さなノードサイズの頂点法情報の予測値を生成するように構成されていてもよい。
【0391】
上述のように処理に必要な頂点だけを保存することでメモリ量を削減することができる。
【0392】
また、内挿された頂点を全てのユニークセグメントで使用する場合、すなわち、全てのノードの頂点情報を大きなノードサイズから順に階層的に符号化する場合は、
図17に示すように、近似表面合成部2030は、全ての「内挿された頂点」を保存してもよい。
【0393】
なお、ここでは、便宜上、ステップS706及びステップS708について別々の処理として説明したが、両者は、共通部分が多いため、同時に実施されてもよい。
【0394】
例えば、近似表面合成部2030は、ステップS1302において、ステップS707の条件が満たされる場合は、ステップS1402も実施し、同様に、ステップS1305において、ステップS707の条件が満たされる場合は、ステップS1405も実施するようにしてもよい。
【0395】
以上のように、本実施形態における近似表面合成部2030は、所定サイズのノードごとに、当該ノードをOctreeによって再帰的に分割することで得られる子孫ノードにTrisoupを適用するノードサイズを復号するように構成されていてもよい。
【0396】
また、以上のように、本実施形態における近似表面合成部2030は、Trisoupノードを構成する各セグメントの頂点有無及び頂点位置を復号する際、空間的に隣接する復号済みセグメントの頂点有無及び頂点位置の情報を用いたコンテクスト適応復号を行うように構成されていてもよい。
【0397】
また、以上のように、本実施形態における近似表面合成部2030は、Trisoupノードを構成する各セグメントの頂点有無及び頂点位置を復号する際、 空間的に隣接する復号済みセグメントのうち、当該Trisoupノードと同一サイズのノードを構成するセグメントの頂点有無及び頂点位置の情報を用いたコンテクスト適応復号を行うように構成されていてもよい。
【0398】
このような構成とすることで、局所領域ごとに点群の特性に応じて適切なTrisoupノードサイズを選択しつつ、局所領域内では同一サイズのTrisoupノードが隣接するようになるため、空間方向の相関を活用することで符号化効率が向上する。
【0399】
(点群符号化装置100)
以下、
図26を参照して、本実施形態に係る点群符号化装置100について説明する。
図26は、本実施形態に係る点群符号化装置100の機能ブロックの一例について示す図である。
【0400】
図26に示すように、点群符号化装置100は、座標変換部1010と、幾何情報量子化部1020と、ツリー解析部1030と、近似表面解析部1040と、幾何情報符号化部1050と、幾何情報再構成部1060と、色変換部1070と、属性転移部1080と、RAHT部1090と、LoD算出部1100と、リフティング部1110と、属性情報量子化部1120と、属性情報符号化部1130とを有する。
【0401】
座標変換部1010は、入力点群の3次元座標系から、任意の異なる座標系への変換処理を行うよう構成されている。座標変換は、例えば、入力点群を回転することにより、入力点群のx、y、z座標を任意のs、t、u座標に変換してもよい。また、変換のバリエーションの1つとして、入力点群の座標系をそのまま使用してもよい。
【0402】
幾何情報量子化部1020は、座標変換後の入力点群の位置情報の量子化及び座標が重複する点の除去を行うように構成されている。なお、量子化ステップサイズが1の場合は、入力点群の位置情報と量子化後の位置情報とが一致する。すなわち、量子化ステップサイズが1の場合は、量子化を行わない場合と等価になる。
【0403】
ツリー解析部1030は、量子化後の点群の位置情報を入力として、後述のツリー構造に基づいて、符号化対象空間のどのノードに点が存在するかについて示すoccupancy codeを生成するように構成されている。
【0404】
ツリー解析部1030は、本処理において、符号化対象空間を再帰的に直方体で区切ることにより、ツリー構造を生成するように構成されている。
【0405】
ここで、ある直方体内に点が存在する場合、かかる直方体を複数の直方体に分割する処理を、直方体が所定のサイズになるまで再帰的に実行することでツリー構造を生成することができる。なお、かかる各直方体をノードと呼ぶ。また、ノードを分割して生成される各直方体を子ノードと呼び、子ノード内に点が含まれるか否かについて0又は1で表現したものがoccupancy codeである。
【0406】
以上のように、ツリー解析部1030は、所定のサイズになるまでノードを再帰的に分割しながら、occupancy codeを生成するように構成されている。
【0407】
本実施形態では、上述の直方体を常に立方体として8分木分割を再帰的に行う「Octree」と呼ばれる手法、及び、8分木分割に加え、4分木分割及び2分木分割を行う「QtBt」と呼ばれる手法を使用することができる。
【0408】
ここで、「QtBt」を使用するか否かについては、制御データとして点群復号装置200に伝送される。
【0409】
或いは、任意のツリー構成を用いるPredicitive codingを使用するように指定されてもよい。かかる場合、ツリー解析部1030が、ツリー構造を決定し、決定されたツリー構造は、制御データとして点群復号装置200へ伝送される。
【0410】
例えば、ツリー構造の制御データは、
図6で説明した手順で復号できるよう構成されていてもよい。
【0411】
近似表面解析部1040は、ツリー解析部1030によって生成されたツリー情報を用いて、近似表面情報を生成するように構成されている。
【0412】
近似表面情報は、例えば、物体の3次元点群データを復号する際等において、点群が物体表面に密に分布しているような場合に、個々の点群を復号するのではなく、点群の存在領域を小さな平面で近似して表現したものである。
【0413】
具体的には、近似表面解析部1040は、例えば、「Trisoup」と呼ばれる手法で、近似表面情報を生成するように構成されていてもよい。また、Lidar等で取得した疎な点群を復号する場合は、本処理を省略することができる。
【0414】
幾何情報符号化部1050は、ツリー解析部1030によって生成されたoccupancy code及び近似表面解析部1040によって生成された近似表面情報等のシンタックスを符号化してビットストリーム(幾何情報ビットストリーム)を生成するように構成されている。ここで、ビットストリームには、例えば、
図4及び
図5で説明したシンタックスを含まれていてもよい。
【0415】
符号化処理は、例えば、コンテクスト適応二値算術符号化処理である。ここで、例えば、シンタックスは、位置情報の復号処理を制御するための制御データ(フラグやパラメータ)を含む。
【0416】
幾何情報再構成部1060は、ツリー解析部1030によって生成されたツリー情報及び近似表面解析部1040によって生成された近似表面情報に基づいて、符号化対象の点群データの各点の幾何情報(符号化処理が仮定している座標系、すなわち、座標変換部1010における座標変換後の位置情報)を再構成するように構成されている。
【0417】
色変換部1070は、入力の属性情報が色情報であった場合に、色変換を行うように構成されている。色変換は、必ずしも実行する必要は無く、色変換処理の実行の有無については、制御データの一部として符号化され、点群復号装置200へ伝送される。
【0418】
属性転移部1080は、入力点群の位置情報、幾何情報再構成部1060における再構成後の点群の位置情報及び色変換部1070での色変化後の属性情報に基づいて、属性情報の歪みが最小となるように属性値を補正するように構成されている。
【0419】
RAHT部1090は、属性転移部1080による転移後の属性情報及び幾何情報再構成部1060によって生成された幾何情報を入力とし、RAHT(Region Adaptive Hierarchical Transform)と呼ばれるHaar変換の一種を用いて、各点の残差情報を生成するように構成されている。RAHTの具体的な処理としては、例えば、上述の文献2に記載の方法を用いることができる。
【0420】
LoD算出部1100は、幾何情報再構成部1060によって生成された幾何情報を入力とし、LoD(Level of Detail)を生成するように構成されている。
【0421】
LoDは、ある点の属性情報から、他のある点の属性情報を予測し、予測残差を符号化或いは復号するといった予測符号化を実現するための参照関係(参照する点及び参照される点)を定義するための情報である。
【0422】
言い換えると、LoDは、幾何情報に含まれる各点を複数のレベルに分類し、下位のレベルに属する点については上位のレベルに属する点の属性情報を用いて属性を符号化或いは復号するといった階層構造を定義した情報である。
【0423】
LoDの具体的な決定方法としては、例えば、上述の文献2に記載の方法を用いてもよい。
【0424】
リフティング部1110は、LoD算出部1100によって生成されたLoD及び属性転移部1080での属性転移後の属性情報を用いて、リフティング処理により残差情報を生成するように構成されている。
【0425】
リフティングの具体的な処理としては、例えば、文献(Text of ISO/IEC 23090-9 DIS Geometry-based PCC、ISO/IEC JTC1/SC29/WG11 N19088)に記載の方法を用いてもよい。
【0426】
属性情報量子化部1120は、RAHT部1090又はリフティング部1110から出力される残差情報を量子化するように構成されている。ここで、量子化ステップサイズが1の場合は、量子化を行わない場合と等価である。
【0427】
属性情報符号化部1130は、属性情報量子化部1120から出力される量子化後の残差情報等をシンタックスとして符号化処理を行い、属性情報に関するビットストリーム(属性情報ビットストリーム)を生成するように構成されている。
【0428】
符号化処理は、例えば、コンテクスト適応二値算術符号化処理である。ここで、例えば、シンタックスは、属性情報の復号処理を制御するための制御データ(フラグ及びパラメータ)を含む。
【0429】
点群符号化装置100は、以上の処理により、点群内の各点の位置情報及び属性情報を入力として符号化処理を行い、幾何情報ビットストリーム及び属性情報ビットストリームを出力するように構成されている。
【0430】
また、上述の点群符号化装置100及び点群復号装置200は、コンピュータに各機能(各工程)を実行させるプログラムであって実現されていてもよい。
【0431】
なお、上記の各実施形態では、本発明を点群符号化装置100及び点群復号装置200への適用を例にして説明したが、本発明は、かかる例のみに限定されるものではなく、点群符号化装置100及び点群復号装置200の各機能を備えた点群符号化/復号システムにも同様に適用できる。
【産業上の利用可能性】
【0432】
なお、本実施形態によれば、例えば、動画像通信において総合的なサービス品質の向上を実現できることから、国連が主導する持続可能な開発目標(SDGs)の目標9「レジリエントなインフラを整備し、持続可能な産業化を推進するとともに、イノベーションの拡大を図る」に貢献することが可能となる。
【符号の説明】
【0433】
10…点群処理システム
100…点群符号化装置
1010…座標変換部
1020…幾何情報量子化部
1030…ツリー解析部
1040…近似表面解析部
1050…幾何情報符号化部
1060…幾何情報再構成部
1070…色変換部
1080…属性転移部
1090…RAHT部
1100…LoD算出部
1110…リフティング部
1120…属性情報量子化部
1130…属性情報符号化部
200…点群復号装置
2010…幾何情報復号部
2020…ツリー合成部
2030…近似表面合成部
2040…幾何情報再構成部
2050…逆座標変換部
2060…属性情報復号部
2070…逆量子化部
2080…RAHT部
2090…LoD算出部
2100…逆リフティング部
2110…逆色変換部
【手続補正書】
【提出日】2024-03-12
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
点群復号装置であって、
Trisoupの頂点情報を復号する近似表面合成部を備え、
前記頂点情報は、ユニークセグメントごとの頂点の有無、又は、前記ユニークセグメントごとの頂点位置の少なくとも1つを含み、
前記頂点の有無及び前記頂点の位置は、それぞれ複数のコンテクストを用いて復号され、
前記コンテクストは、前記復号処理に先立って前記コンテクストが取り得る値に基づいた必要最小限の数分用意されて、初期化されるように構成されていることを特徴とする点群復号装置。
【請求項2】
点群復号方法であって、
Trisoupの頂点情報を復号する工程を有し、
前記頂点情報は、ユニークセグメントごとの頂点の有無、又は、前記ユニークセグメントごとの頂点位置の少なくとも1つを含み、
前記頂点の有無及び前記頂点の位置は、それぞれ複数のコンテクストを用いて復号され、
前記コンテクストは、前記復号処理に先立って前記コンテクストが取り得る値に基づいた必要最小限の数分用意されて、初期化されることを特徴とする点群復号方法。
【請求項3】
コンピュータを、点群復号装置として機能させるプログラムであって、
前記点群復号装置は、Trisoupの頂点情報を復号する近似表面合成部を備え、
前記頂点情報は、ユニークセグメントごとの頂点の有無、又は、前記ユニークセグメントごとの頂点位置の少なくとも1つを含み、
前記頂点の有無及び前記頂点の位置は、それぞれ複数のコンテクストを用いて復号され、
前記コンテクストは、前記復号処理に先立って前記コンテクストが取り得る値に基づいた必要最小限の数分用意されて、初期化されるように構成されていることを特徴とするプログラム。