(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024008353
(43)【公開日】2024-01-19
(54)【発明の名称】点群復号装置、点群復号方法及びプログラム
(51)【国際特許分類】
H04N 19/70 20140101AFI20240112BHJP
H04N 19/597 20140101ALI20240112BHJP
【FI】
H04N19/70
H04N19/597
【審査請求】未請求
【請求項の数】5
【出願形態】OL
(21)【出願番号】P 2022110162
(22)【出願日】2022-07-08
【国等の委託研究の成果に係る記載事項】(出願人による申告)令和4年度、総務省、「3次元空間データの無線伝送に向けた高能率圧縮技術の研究開発」委託事業、産業技術力強化法第17条の適用を受ける特許出願
(71)【出願人】
【識別番号】000208891
【氏名又は名称】KDDI株式会社
(74)【代理人】
【識別番号】110001564
【氏名又は名称】フェリシテ弁理士法人
(72)【発明者】
【氏名】海野 恭平
(72)【発明者】
【氏名】河村 圭
(72)【発明者】
【氏名】小森田 賢史
【テーマコード(参考)】
5C159
【Fターム(参考)】
5C159MA00
5C159MC11
5C159ME01
5C159PP03
5C159SS26
5C159UA02
5C159UA05
(57)【要約】
【課題】Trisoup時に使用できるノード形状の種類を増やすことができ、符号化効率の向上が期待できる。
【解決手段】本発明に係る点群復号装置200は、Trisoupの頂点位置を復号する際に、ノード形状に応じてセグメントごとに頂点位置の取り得る値の範囲を設定し、頂点位置の取り得る値の範囲に基づいて頂点位置を復号するように構成されている近似表面合成部2030を備えることを特徴とする。
【選択図】
図2
【特許請求の範囲】
【請求項1】
点群復号装置であって、
Trisoupの頂点位置を復号する際に、ノード形状に応じてセグメントごとに頂点位置の取り得る値の範囲を設定し、前記頂点位置の取り得る値の範囲に基づいて前記頂点位置を復号するように構成されている近似表面合成部を備えることを特徴とする点群復号装置。
【請求項2】
前記近似表面合成部は、前記ノードから前記セグメントを生成する際の各セグメントの軸方向と前記ノード形状とに基づいて、前記頂点位置の取り得る値の範囲を設定するように構成されていることを特徴とする請求項1に記載の点群復号装置。
【請求項3】
前記近似表面合成部は、各セグメントの始点座標と終点座標とに基づいて、前記頂点位置の取り得る値の範囲を設定するように構成されていることを特徴とする請求項1に記載の点群復号装置。
【請求項4】
点群復号方法であって、
Trisoupの頂点位置を復号する際に、ノード形状に応じてセグメントごとに頂点位置の取り得る値の範囲を設定し、前記頂点位置の取り得る値の範囲に基づいて前記頂点位置を復号する工程を有することを特徴とする点群復号方法。
【請求項5】
コンピュータを、点群復号装置として機能させるプログラムであって、
前記点群復号装置は、
Trisoupの頂点位置を復号する際に、ノード形状に応じてセグメントごとに頂点位置の取り得る値の範囲を設定し、前記頂点位置の取り得る値の範囲に基づいて前記頂点位置を復号するように構成されている近似表面合成部を備えることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、点群復号装置、点群復号方法及びプログラムに関する。
【背景技術】
【0002】
非特許文献1では、Trisoupという幾何情報を復号する技術が開示されている。
【先行技術文献】
【非特許文献】
【0003】
【非特許文献1】G-PCC Future Enhancement、ISO/IEC JTC1/SC29/WG11 N19328
【発明の概要】
【発明が解決しようとする課題】
【0004】
非特許文献1の方法では、Trisoupで復号処理を行う際のノードサイズとして立方体のみが想定されている。また、非特許文献1には、直方体のノードサイズも許容することで符号化効率を高める技術が開示されているが、両者を組み合わせて使用することができないという問題点があった。
【0005】
そこで、本発明は、上述の課題に鑑みてなされたものであり、Trisoup時に使用できるノード形状の種類を増やすことができ、符号化効率の向上が期待できる点群復号装置、点群復号方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0006】
本発明の第1の特徴は、点群復号装置であって、Trisoupの頂点位置を復号する際に、ノード形状に応じてセグメントごとに頂点位置の取り得る値の範囲を設定し、前記頂点位置の取り得る値の範囲に基づいて前記頂点位置を復号するように構成されている近似表面合成部を備えることを要旨とする。
【0007】
本発明の第2の特徴は、点群復号方法であって、Trisoupの頂点位置を復号する際に、ノード形状に応じてセグメントごとに頂点位置の取り得る値の範囲を設定し、前記頂点位置の取り得る値の範囲に基づいて前記頂点位置を復号する工程を有することを要旨とする。
【0008】
本発明の第3の特徴は、コンピュータを、点群復号装置として機能させるプログラムであって、前記点群復号装置は、Trisoupの頂点位置を復号する際に、ノード形状に応じてセグメントごとに頂点位置の取り得る値の範囲を設定し、前記頂点位置の取り得る値の範囲に基づいて前記頂点位置を復号するように構成されている近似表面合成部を備えることを要旨とする。
【発明の効果】
【0009】
本発明によれば、ノードサイズが直方体である場合も、Trisoupによる復号処理を実現することができるため、Trisoup時に使用できるノード形状の種類を増やすことができ、符号化効率の向上が期待できる点群復号装置、点群復号方法及びプログラムを提供することができる。
【図面の簡単な説明】
【0010】
【
図1】
図1は、一実施形態に係る点群処理システム10の構成の一例を示す図である。
【
図2】
図2は、一実施形態に係る点群復号装置200の機能ブロックの一例を示す図である。
【
図3】
図3は、一実施形態に係る点群復号装置200の幾何情報復号部2010で受信する符号化データ(ビットストリーム)の構成の一例を示す図である。
【
図4】
図4は、GPS2011のシンタックス構成の一例を示す図である。
【
図5】
図5は、GSH2012のシンタックス構成の一例を示す図である。
【
図6】
図6は、GSH2012のシンタックス構成の一例を示す図である。
【
図7】
図7は、GSH2012のシンタックス構成の一例を示す図である。
【
図8】
図8は、一実施形態に係る点群復号装置200のツリー合成部2020における処理の一例を示すフローチャートである
【
図9】
図9は、一実施形態に係る点群復号装置200のツリー合成部2020における処理の一例を示すフローチャートである。
【
図10】
図10は、一実施形態に係る点群復号装置200の近似表面合成部2030の処理の一例を示すフローチャートである。
【
図13】
図13は、
図10におけるステップS1002で使用する頂点の復号処理の一例を示すフローチャートである。
【
図14】
図14は、
図13におけるステップS1304の処理の一例を示すフローチャートである。
【
図15】
図15は、本実施形態に係る点群符号化装置100の機能ブロックの一例について示す図である。
【発明を実施するための形態】
【0011】
以下、本発明の実施の形態について、図面を参照しながら説明する。なお、以下の実施形態における構成要素は、適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組み合わせを含む様々なバリエーションが可能である。したがって、以下の実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
【0012】
(第1実施形態)
以下、
図1~
図15を参照して、本発明の第1実施形態に係る点群処理システム10について説明する。
図1は、本実施形態に係る実施形態に係る点群処理システム10を示す図である。
【0013】
図1に示すように、点群処理システム10は、点群符号化装置100及び点群復号装置200を有する。
【0014】
点群符号化装置100は、入力点群信号を符号化することによって符号化データ(ビットストリーム)を生成するように構成されている。点群復号装置200は、ビットストリームを復号することによって出力点群信号を生成するように構成されている。
【0015】
なお、入力点群信号及び出力点群信号は、点群内の各点の位置情報と属性情報とから構成される。属性情報は、例えば、各点の色情報や反射率である。
【0016】
ここで、かかるビットストリームは、点群符号化装置100から点群復号装置200に対して伝送路を介して送信されてもよい。また、ビットストリームは、記憶媒体に格納された上で、点群符号化装置100から点群復号装置200に提供されてもよい。
【0017】
(点群復号装置200)
以下、
図2を参照して、本実施形態に係る点群復号装置200について説明する。
図2は、本実施形態に係る点群復号装置200の機能ブロックの一例について示す図である。
【0018】
図2に示すように、点群復号装置200は、幾何情報復号部2010と、ツリー合成部2020と、近似表面合成部2030と、幾何情報再構成部2040と、逆座標変換部2050と、属性情報復号部2060と、逆量子化部2070と、RAHT部2080と、LoD算出部2090と、逆リフティング部2100と、逆色変換部2110とを有する。
【0019】
幾何情報復号部2010は、点群符号化装置100から出力されるビットストリームのうち、幾何情報に関するビットストリーム(幾何情報ビットストリーム)を入力とし、シンタックスを復号するように構成されている。
【0020】
復号処理は、例えば、コンテクスト適応二値算術復号処理である。ここで、例えば、シンタックスは、位置情報の復号処理を制御するための制御データ(フラグやパラメータ)を含む。
【0021】
ツリー合成部2020は、幾何情報復号部2010によって復号された制御データ及び後述するツリー内のどのノードに点群が存在するかを示すoccupancy codeを入力として、復号対象空間内のどの領域に点が存在するかというツリー情報を生成するように構成されている。
【0022】
なお、occupancy codeの復号処理をツリー合成部2020内部で行うよう構成されていてもよい。
【0023】
本処理は、復号対象空間を直方体で区切り、occupancy codeを参照して各直方体内に点が存在するかを判断し、点が存在する直方体を複数の直方体に分割し、occupancy codeを参照するという処理を再帰的に繰り返すことで、ツリー情報を生成することができる。
【0024】
ここで、かかるoccupancy codeの復号に際して、後述するインター予測を用いてもよい。
【0025】
本実施形態では、上述の直方体を常に立方体として8分木分割を再帰的に行う「Octree」と呼ばれる手法、及び、8分木分割に加え、4分木分割及び2分木分割を行う「QtBt」と呼ばれる手法を使用することができる。QtBt」を使用するか否かは、制御データとして点群符号化装置100側から伝送される。
【0026】
なお、本実施形態では、「Octree」によって上述の立方体が1×1×1のサイズになるまで分割を行うことで幾何情報を復号する方法を、特に「Octreeのみ」と呼ぶ。
【0027】
また、「Octree」に「QtBt」を組み合わせて使用した場合でも、上記同様に「Octree」及び「QtBt」のみで上述の直方体が1×1×1のサイズになるまで分割を行うことで幾何情報を復号する方法についても、「Octreeのみ」と呼んでもよい。
【0028】
或いは、制御データによってPredictive codingを使用するように指定された場合、ツリー合成部2020は、点群符号化装置100において決定した任意のツリー構成に基づいて各点の座標を復号するように構成されている。
【0029】
近似表面合成部2030は、ツリー合成部2020によって生成されたツリー情報を用いて近似表面情報を生成し、かかる近似表面情報に基づいて点群を復号するように構成されている。
【0030】
近似表面情報は、例えば、物体の3次元点群データを復号する際等において、点群が物体表面に密に分布しているような場合に、個々の点群を復号するのではなく、点群の存在領域を小さな平面で近似して表現したものである。
【0031】
具体的には、近似表面合成部2030は、例えば、「Trisoup」と呼ばれる手法で、近似表面情報を生成し、点群を復号することができる。「Trisoup」の具体的な処理例については後述する。また、Lidar等で取得した疎な点群を復号する場合は、本処理を省略することができる。
【0032】
幾何情報再構成部2040は、ツリー合成部2020によって生成されたツリー情報及び近似表面合成部2030によって生成された近似表面情報を元に、復号対象の点群データの各点の幾何情報(復号処理が仮定している座標系における位置情報)を再構成するように構成されている。
【0033】
逆座標変換部2050は、幾何情報再構成部2040によって再構成された幾何情報を入力として、復号処理が仮定している座標系から、出力点群信号の座標系に変換を行い、位置情報を出力するように構成されている。
【0034】
属性情報復号部2060は、点群符号化装置100から出力されるビットストリームのうち、属性情報に関するビットストリーム(属性情報ビットストリーム)を入力とし、シンタックスを復号するように構成されている。
【0035】
復号処理は、例えば、コンテクスト適応二値算術復号処理である。ここで、例えば、シンタックスは、属性情報の復号処理を制御するための制御データ(フラグ及びパラメータ)を含む。
【0036】
また、属性情報復号部2060は、復号したシンタックスから、量子化済み残差情報を復号するように構成されている。
【0037】
逆量子化部2070は、属性情報復号部2060によって復号された量子化済み残差情報と、属性情報復号部2060によって復号された制御データの一つである量子化パラメータとを元に、逆量子化処理を行い、逆量子化済み残差情報を生成するように構成されている。
【0038】
逆量子化済み残差情報は、復号対象の点群の特徴に応じて、RAHT部2080及びLoD算出部2090のいずれかに出力される。いずれに出力されるかは、属性情報復号部2060によって復号される制御データによって指定される。
【0039】
RAHT部2080は、逆量子化部2070によって生成された逆量子化済み残差情報及び幾何情報再構成部2040によって生成された幾何情報を入力とし、RAHT(Region Adaptive Hierarchical Transform)と呼ばれるHaar変換(復号処理においては、逆Haar変換)の一種を用いて、各点の属性情報を復号するように構成されている。RAHTの具体的な処理としては、例えば、非特許文献1に記載の方法を用いることができる。
【0040】
LoD算出部2090は、幾何情報再構成部2040によって生成された幾何情報を入力とし、LoD(Level of Detail)を生成するように構成されている。
【0041】
LoDは、ある点の属性情報から、他のある点の属性情報を予測し、予測残差を符号化或いは復号するといった予測符号化を実現するための参照関係(参照する点及び参照される点)を定義するための情報である。
【0042】
言い換えると、LoDは、幾何情報に含まれる各点を複数のレベルに分類し、下位のレベルに属する点については上位のレベルに属する点の属性情報を用いて属性を符号化或いは復号するといった階層構造を定義した情報である。
【0043】
LoDの具体的な決定方法としては、例えば、上述の非特許文献1に記載の方法を用いてもよい。
【0044】
逆リフティング部2100は、LoD算出部2090によって生成されたLoD及び逆量子化部2070によって生成された逆量子化済み残差情報を用いて、LoDで規定した階層構造に基づいて各点の属性情報を復号するように構成されている。逆リフティングの具体的な処理としては、例えば、上述の非特許文献1に記載の方法を用いることができる。
【0045】
逆色変換部2110は、復号対象の属性情報が色情報であり且つ点群符号化装置100側で色変換が行われていた場合に、RAHT部2080又は逆リフティング部2100から出力される属性情報に逆色変換処理を行うように構成されている。かかる逆色変換処理の実行の有無については、属性情報復号部2060によって復号された制御データによって決定される。
【0046】
点群復号装置200は、以上の処理により、点群内の各点の属性情報を復号して出力するように構成されている。
【0047】
(幾何情報復号部2010)
以下、
図3~
図7を用いて幾何情報復号部2010で復号される制御データについて説明する。
【0048】
図3は、幾何情報復号部2010で受信する符号化データ(ビットストリーム)の構成の一例である。
【0049】
第1に、ビットストリームは、GPS2011を含んでいてもよい。GPS2011は、ジオメトリパラメータセットとも呼ばれ、幾何情報の復号に関する制御データの集合である。具体例については後述する。各GPS2011は、複数のGPS2011が存在する場合に個々を識別するためのGPS id情報を少なくとも含む。
【0050】
第2に、ビットストリームは、GSH2012A/2012Bを含んでいてもよい。GSH2012A/2012Bは、ジオメトリスライスヘッダ或いはジオメトリデータユニットヘッダとも呼ばれ、後述するスライスに対応する制御データの集合である。以降では、スライスという呼称を用いて説明するが、スライスをデータユニットと読み替えることもできる。具体例については後述する。GSH2012A/2012Bは、各GSH2012A/2012Bに対応するGPS2011を指定するためのGPS id情報を少なくとも含む。
【0051】
第3に、ビットストリームは、GSH2012A/2012Bの次に、スライスデータ2013A/2013Bを含んでいてもよい。スライスデータ2013A/2013Bには、幾何情報を符号化したデータが含まれている。スライスデータ2013A/2013Bの一例としては、後述するoccupancy codeが挙げられる。
【0052】
以上のように、ビットストリームは、各スライスデータ2013A/2013Bに、1つずつGSH2012A/2012B及びGPS2011が対応する構成となる。
【0053】
上述のように、GSH2012A/2012Bにて、どのGPS2011を参照するかをGPS id情報で指定するため、複数のスライスデータ2013A/2013Bに対して共通のGPS2011を用いることができる。
【0054】
言い換えると、GPS2011は、スライスごとに必ずしも伝送する必要がない。例えば、
図3のように、GSH2012B及びスライスデータ2013Bの直前では、GPS2011を符号化しないようなビットストリームの構成とすることもできる。
【0055】
なお、
図3の構成は、あくまで一例である。各スライスデータ2013A/2013Bに、GSH2012A/2012B及びGPS2011が対応する構成となっていれば、ビットストリームの構成要素として、上述以外の要素が追加されてもよい。
【0056】
例えば、
図3に示すように、ビットストリームは、シーケンスパラメータセット(SPS)2001を含んでいてもよい。また、同様に、伝送に際して、
図3と異なる構成に整形されてもよい。更に、後述する属性情報復号部2060で復号されるビットストリームと合成して単一のビットストリームとして伝送されてもよい。
【0057】
図4は、GPS2011のシンタックス構成の一例である。
【0058】
なお、以下で説明するシンタックス名は、あくまで一例である。以下で説明したシンタックスの機能が同様であれば、シンタックス名は異なっていても差し支えない。
【0059】
GPS2011は、各GPS2011を識別するためのGPS id情報(gps_geom_parameter_set_id)を含んでもよい。
【0060】
なお、
図4のDescriptor欄は、各シンタックスが、どのように符号化されているかを意味している。ue(v)は、符号無し0次指数ゴロム符号であることを意味し、u(1)は、1ビットのフラグであることを意味する。
【0061】
GPS2011は、近似表面合成部2030でTrisoupを使用するか否かを制御するフラグ(trisoup_enabled_flag)を含んでもよい。
【0062】
例えば、trisoup_enabled_flagの値が「0」の時はTrisoupを使用しないと定義し、trisoup_enabled_flagの値が「1」の時はTrisoupを使用すると定義してもよい。
【0063】
幾何情報復号部2020は、Trisoupを使用するとき、すなわち、trisoup_enabled_flagの値が「1」の時、追加で以下のシンタックスを復号するように構成されていてもよい。
【0064】
なお、trisoup_enabled_flagは、GPS2011ではなくSPS2001に含まれていてもよい。
【0065】
GPS2011は、複数レベルでのTrisoupを許可するか否かを制御するフラグ(trisoup_multilevel_enabled_flag、第1フラグ)を含んでもよい。
【0066】
例えば、trisoup_multilevel_enabled_flagの値が「0」の時は複数レベルでのTrisoupを許可しない、すなわち、単一のレベルでのTrisoupを行うと定義し、trisoup_multilevel_enabled_flagの値が「1」の時は複数レベルでのTrisoupを許可すると定義してもよい。
【0067】
なお、当該シンタックスがGPS2011に含まれない場合、当該シンタックスの値を単一のレベルでのTrisoupを行う場合の値、すなわち、「0」とみなしてよい。
【0068】
なお、trisoup_multilevel_enabled_flagは、GPS2011ではなくSPS2001に含まれるよう定義してもよい。この場合、SPS2001にtrisoup_multilevel_enabled_flagが含まれていない場合、当該シンタックスの値を単一のレベルでのTrisoupを行う場合の値、すなわち、「0」とみなしてよい。
【0069】
図5は、GSH2012のシンタックス構成の一例である。なお、前述の通り、GSHは、GDUH(Geometry Data Unit Header)とも呼ばれる。
【0070】
幾何情報復号部2020は、複数レベルでのTrisoupを許可するとき、すなわち、trisoup_multilevel_enabled_flagの値が「1」の時、追加で以下のシンタックスを復号するように構成されていてもよい。
【0071】
GSH2012は、複数レベルでのTrisoupを許可するとき、スライス内でOctreeのみとTrisoupとを適応的に選択するモードを有効にするフラグ(adaptive_octree_enabled_flag)を含んでもよい。
【0072】
例えば、当該フラグの値が「1」の場合はOctreeとTrisoupとを適応的に選択するモード(以降、「適応Octreeモード」と呼ぶ)が有効であり、当該フラグの値が「0」の場合は適応Octreeモードが無効であると定義してもよい。
【0073】
また、GSH2012に当該フラグが含まれない場合、当該フラグの値を「0」、すなわち、適応Octreeモードが無効であると暗黙的にみなしてもyい。
【0074】
GSH2012は、複数レベルでのTrisoupを許可するとき、Trisoupノードサイズの最大値を規定するシンタックス(log2_trisoup_max_node_size_minus2)を含んでもよい。
【0075】
当該シンタックスは、実際のTrisoupノードサイズの最大値について、2を底とする対数に変換した値として表現されていてもよい。更に、当該シンタックスは、実際のTrisoupノードサイズの最大値について、2を底とする対数に変換した後に2を引いた後の値として表現されていてもよい。
【0076】
GSH2012は、複数レベルでのTrisoupを許可するとき、Trisoupノードサイズの最小値を規定するシンタックス(log2_trisoup_min_node_size_minus2)を含んでもよい。
【0077】
当該シンタックスは、実際のTrisoupノードサイズの最小値について、2を底とする対数に変換した値として表現されていてもよい。更に、当該シンタックスは、実際のTrisoupノードサイズの最小値を4(=2^2)とし、2を底とする対数に変換した後に2を引いた後の値として表現されていてもよい。
【0078】
また、当該シンタックスの値は、必ず0以上且つlog2_trisoup_max_node_size_minus2以下となるように制約されていてもよい。
【0079】
また、この時、
図5に示すようにtrisoup_depthをtrisoup_depth=log2_trisoup_max_node_size_minus2-log2_trisoup_min_node_size_minus2+1と定義してもよい。
【0080】
また、最小Trisoupノードサイズ及び最大Trisoupノードサイズを直接復号する代わりに、後述のOctree処理における最大Trisoupノードサイズ及び最小Trisoupノードサイズに対応するDepth値を復号してもよい。
【0081】
例えば、最大Depth(全ノードが1×1×1のサイズになるDepth)が10の場合、最小Trisoupノードサイズを4(=22)、最大Trisoupノードサイズを16(=24)としたい場合は、最小Trisoupノードサイズに対応するDepth値として8、最大Trisoupノードサイズに対応するDepth値として6をそれぞれ復号してもよい。
【0082】
幾何情報復号部2020は、複数レベルでのTrisoupを許可しないとき、すなわち、trisoup_multilevel_enabled_flagの値が「0」の時、追加で以下のシンタックスを復号するように構成されていてもよい。
【0083】
GSH2012は、複数レベルでのTrisoupを許可しないとき、かつ、Trisoupを使用するとき、Trisoupノードサイズを規定するシンタックス(log2_trisoup_node_size_minus2)を含んでもよい。
【0084】
当該シンタックスは、実際のTrisoupノードサイズについて、2を底とする対数に変換した値として表現されていてもよい。更に、当該シンタックスは、実際のTrisoupノードサイズについて、2を底とする対数に変換した後に2を引いた後の値として表現されていてもよい。
【0085】
また、この時、
図5に示すようにtrisoup_depthをtrisoup_depth=1と定義してもよい。
【0086】
GSH2012は、Trisoupを使用するとき、復号点のサンプリング間隔を制御するシンタックス(trisoup_sampling_value_minus1)を含んでもよい。当該シンタックスの具体的な定義は、例えば、上述の非特許文献1に記載の定義と同様とすることができる。
【0087】
GSH2012は、Trisoupを使用するとき、かつ、複数レベルでのTrisoupを許可するとき、階層i(i=0,...,trisoup_depth-1)ごとにユニークセグメントが対象階層に存在するか否かを示すフラグ(unique_segments_exist_flag[i])を含んでもよい。
【0088】
例えば、unique_segments_exist_flag[i]の値が「1」の場合は、階層iに少なくとも1つ以上のユニークセグメントが存在することを意味する。また、unique_segments_exist_flag[i]の値が「0」の場合は、階層iにユニークセグメントが1つも存在しないことを意味する。
【0089】
GSH2012は、階層i(i=0,...,trisoup_depth-1)ごとにユニークセグメントが対象階層に存在する場合、すなわち、unique_segments_exist_flag[i]の値が「1」の場合、追加で対象階層のユニークセグメント数を示すシンタックスのビット数を示すシンタックス(num_unique_segments_bits_minus1[i])及び対象階層のユニークセグメント数を示すシンタックス(num_unique_segments_minus1[i])を含んでもよい。
【0090】
ここで、num_unique_segments_bits_minus1[i]及びnum_unique_segments_minus1[i]の両方について、それぞれ本来の値から「1」を引いた値をシンタックスの値として符号化してもよい。
【0091】
図6は、GSH2012のシンタックス構成の一例である。以降では、
図5との差分のみ説明する。
【0092】
図6に示す通り、適応Octreeモードが有効な場合、すなわち、adaptive_octree_enabled_flagの値が「1」の場合、Trisoupノードサイズの最小値を規定するシンタックス(log2_trisoup_min_node_size_minus2)の復号を省略してもよい。その際、Trisoupノードサイズの最小値は予め定めた所定の値とみなしてよい。例えば、所定の値は「0」(すなわち、2
0=1)と見なしてもよい。
【0093】
以上のように、幾何情報復号部2010は、同一スライス内或いははデータユニット内においてOctreeのみ及びTrisoupの両方を使用可能とするか否かを制御するフラグを復号し、当該フラグの値が「使用可能」を示している場合、暗黙的に最小Trisoupノードサイズの値を1×1×1とみなすように構成されていてもよい。
【0094】
以上のような構成とすることで、不要なシンタックスの伝送を排除し、符号量を削減できる。
【0095】
図7は、GSH2012のシンタックス構成の一例である。以降では、
図5との差分のみ説明する。
【0096】
図7に示すように、Trisoupノードサイズの最大値を規定するシンタックス及びTrisoupノードサイズの最小値を規定するシンタックスのそれぞれについて、それぞれ2を底とする対数に変換した後の値を伝送することとしてもよい。この時、それぞれのシンタックスの最小値を「0」(すなわち、2
0=1)と規定してもよい。
【0097】
以上のように、幾何情報復号部2010は、最小Trisoupノードサイズを復号し、前記最小Trisoupノードサイズの取り得る最小値は1×1×1に相当する値にとなるよう構成されていてもよい。
【0098】
このような構成とすることで、Trisoupのみを使用する場合の処理を共通化できる。
【0099】
(ツリー合成部2020)
以下、
図8~
図9を用いてツリー合成部2020の処理について説明する。
図6は、ツリー合成部2020における処理の一例を示すフローチャートである。なお、以下では「Octree」を使用してツリーを合成する場合の例について説明する。
【0100】
ステップS801において、ツリー合成部2020は、全てのDepthの処理が完了したかどうかを確認する。なお、Depth数は、点群符号化装置100から点群復号装置200に伝送するビットストリーム内に制御データとして含まれていてもよい。
【0101】
ツリー合成部2020は、対象Depthのノードサイズを算出する。「Octree」の場合、最初のDepthのノードサイズは、「2のDepth数乗」と定義されてもよい。すなわち、Depth数をNとする場合、最初のDepthのノードサイズは、2のN乗と定義されてもよい。
【0102】
また、2番目以降のDepthでのノードサイズは、Nの数を1つずつ減じていくことで定義されてもよい。すなわち、2番目のDepthのノードサイズは、「2の(N-1)乗」として定義され、3番目のDepthのノードサイズは、「2の(N-2)乗」として定義され、・・・と定義されてもよい。
【0103】
或いは、ノードサイズは、常に2のべき乗で定義されるため、単純に指数部分(N、N-1、N-2、等)の値をノードサイズと考えてもよい。以降の説明では、ノードサイズとは、ノードの1辺の長さの指数部分の値を指すこととする。
【0104】
なお、以降では簡単のため、ノード形状が立方体の場合、すなわち、ノードの全ての辺の長さが等しい場合を例に説明する。
【0105】
QtBtを用いる場合、すなわち、ノード形状が直方体になり、ノードの各辺の長さが軸方向(x、y、z)毎に異なる場合、3方向のうち最も短い辺の長さをノードサイズと考えてもよい。同様に、3方向のうち最も長い辺の長さをノードサイズと考えてもよい。
【0106】
ここで、Trisoupを使用するか否かを制御するフラグ(trisoup_enabled_flag)がTrisoupを使用することを示している場合、すなわち、trisoup_enabled_flagの値が「1」の時は、ツリー合成部2020は、処理するDepth数を、Trisoupノードサイズの最小値を規定するシンタックス(log2_trisoup_min_node_size_minus2)又はTrisoupノードサイズを規定するシンタックス(log2_trisoup_node_size_minus2)の値に基づいて変化させてもよい。かかる場合、例えば、以下のように定義してもよい。
【0107】
処理Depth数=全Depth数-(最小の)Trisoupノードサイズ
ここで、最小のTrisoupノードサイズについては、例えば、(log2_trisoup_min_node_size_minus2+2)で定義できる。同様に、Trisoupノードサイズについては、(log2_trisoup_node_size_minus2+2)で定義できる。
【0108】
この場合、全ての処理Depth数の処理が完了した場合は、ツリー合成部2020は、ステップS809へ進み、そうでない場合は、ツリー合成部2020は、ステップS802へ進む。
【0109】
言い換えると、(処理Depth数-n)=0の場合は、ツリー合成部2020は、ステップS809へ進み、(処理Depth数-n)>0の場合は、ツリー合成部2020は、ステップS802へ進む。
【0110】
また、ツリー合成部2020は、ステップS809へ進む際のノードサイズ(N-処理Depth数)を持つ全てのノードには、Trisoupが適用されると判定してもよい。
【0111】
ここで、複数レベルでのTrisoupを許可されている場合、すなわち、trisoup_multilevel_enabled_flagの値が「1」の時、且つ、適応Octreeモードが有効な場合、すなわち、adaptive_octree_enabled_flagの値が「1」の時は、ステップS801では、以下の様に構成されていてもよい。
【0112】
具体的には、全てのDepthの処理が完了した場合は、ツリー合成部2020は、ステップS809へ進み、全てのDepthの処理が完了していない場合は、ツリー合成部2020は、ステップS802へ進む。
【0113】
言い換えると、対象Depthがn番目のDepthの時、(N-n)=0の場合は、ツリー合成部2020は、ステップS809へ進み、(N-n)>0の場合は、ツリー合成部2020は、ステップS802へ進む。
【0114】
ステップS802において、ツリー合成部2020は、対象Depthにて後述するTrisoup_applied_flagを復号する必要があるか否かを判定する。
【0115】
例えば、「複数レベルでのTrisoupが許可(trisoup_multilevel_enabled_flagの値が「1」)」で、且つ、「対象Depthのノードサイズ(N-n)が最大のTrisoupノードサイズ以下」の場合に、ツリー合成部2020は、「Trisoup_applied_flagの復号が必要である」と判定してもよい。
【0116】
例えば、「複数レベルでのTrisoupが許可(trisoup_multilevel_enabled_flagの値が「1」)」で、且つ、「対象Depthのノードサイズ(N-n)が最大のTrisoupノードサイズ以下」で、且つ、「対象Depthのノードサイズ(N-n)が最小のTrisoupノードサイズ以上」の場合に、ツリー合成部2020は、「Trisoup_applied_flagの復号が必要である」と判定してもよい。
【0117】
また、ツリー合成部2020は、上述の条件が満たされない場合、「Trisoup_applied_flagの復号が必要ない」と判定してもよい。
【0118】
ここで、最大のTrisoupノードサイズについては、例えば、(log2_trisoup_max_node_size_minus3+2)で定義できる。同様に、最小のTrisoupノードサイズについては、例えば、(log2_trisoup_min_node_size_minus2+2)で定義できる。
【0119】
上述の判定が完了したら、ツリー合成部2020は、ステップS803へ移る。
【0120】
ステップS803において、ツリー合成部2020は、対象Depthに含まれる全てのノードの処理が完了したかどうかを判定する。
【0121】
対象Depthの全てのノードの処理が完了したと判定した場合、ツリー合成部2020は、ステップS801へ移り、次のDepthの処理を行う。
【0122】
一方、対象Depthの全てのノードの処理が完了していない場合、ツリー合成部2020は、ステップS804へ移る。
【0123】
ステップS804において、ツリー合成部2020は、ステップS802で判定したTrisoup_applied_flagの復号の要否について確認する。
【0124】
Trisoup_applied_flagの復号が必要であると判定されている場合は、ツリー合成部2020は、ステップS805へ進み、Trisoup_applied_flagの復号が必要でないと判定されている場合は、ツリー合成部2020は、ステップS808へ移る。
【0125】
ステップS805において、ツリー合成部2020は、Trisoup_applied_flagを復号する。
【0126】
Trisoup_applied_flagは、対象ノードにTrisoupを適用するか否かを示す1ビットのフラグ(第2フラグ)である。例えば、かかるフラグの値が「1」の時に対象ノードにTrisoupを適用すると定義し、かかるフラグの値が「0」の時に対象ノードにTrisoupを適用しないと定義してもよい。
【0127】
ツリー合成部2020は、Trisoup_applied_flagを復号した後、ステップS806へ移る。
【0128】
ステップS806において、ツリー合成部2020は、ステップS805で復号したTrisoup_applied_flagの値を確認する。
【0129】
対象ノードにTrisoupを適用する場合、すなわち、Trisoup_applied_flagの値が「1」の場合は、ツリー合成部2020は、ステップS807へ移る。
【0130】
対象ノードにTrisoupを適用しない場合、すなわち、Trisoup_applied_flagの値が「0」の場合は、ツリー合成部2020は、ステップS808へ移る。
【0131】
ステップS807において、ツリー合成部2020は、対象ノードを、Trisoupを適用するノード、すなわち、Trisoupノードとして記憶する。かかる対象ノードに対しては、これ以上、「Octree」によるノードの分割を適用しないこととする。その後、ツリー合成部2020は、ステップS803に進み、次のノードの処理へ移る。
【0132】
ステップS808において、ツリー合成部2020は、occpancy codeと呼ばれる情報を復号する。
【0133】
occpancy codeは、「Octree」の場合は、対象ノードをx、y、z軸方向にそれぞれ半分に分割して、8つのノード(子ノードと呼ぶ)に分割した際に、それぞれの子ノード内に復号対象の点が含まれているか否かを示す情報である。
【0134】
例えば、occpancy codeは、各子ノードに対して1ビットの情報を割り当て、かかる1ビットの情報が「1」の場合は、かかる子ノード内に復号対象の点が含まれると定義され、かかる1ビットの情報が「0」の場合は、かかる子ノード内に復号対象の点が含まれないと定義されてもよい。
【0135】
ツリー合成部2020は、かかるoccpancy codeを復号する際に、各子ノードに復号対象の点が存在する確率を予め推定し、その確率に基づいて各子ノードに対応するビットをエントロピー復号してもよい。
【0136】
同様に、点群符号化装置100においては、エントロピー符号化してもよい。
【0137】
以上のように、点群復号装置200は、同一スライス内或いはデータユニット内において、Octreeのみ及びTrisoupの両方を使用可能とし、ノード毎にOctreeのみ及びTrisoupのいずれかの方法で、点の幾何情報を復号するように構成されていてもよい。
【0138】
以上のような構成とすることで、局所的に幾何構造が細かい部分はOctreeのみ、平面で近似可能な箇所はTrisoupといったように切り替えが可能となり、効率の良い符号化が可能となる。
【0139】
また、以上のように、ツリー合成部2020は、空間を再帰的に分割するOctree分割を行い、所定の最小Trisoupノードサイズより小さくなった全てのノードについて、幾何情報をOctreeのみによって復号するように構成されていてもよい。
【0140】
また、以上のように、ツリー合成部2020は、適応Octreeモードが有効な場合、所定の最小Trisoupノードサイズの各ノードについて、当該ノードにTrisoupを適用するか否かを示すフラグ(Trisoup_applied_flag)を復号するように構成されていてもよい。
【0141】
また、以上のように、幾何情報復号部2010は、同一スライス内或いはデータユニット内において、OctreeのみとTrisoupの両方を使用可能とするか否かを制御するフラグを復号し、ツリー合成部2020は、当該フラグの値が「使用可能」を示している場合、所定の最小Trisoupノードサイズより小さくなった全てのノードについて、幾何情報をOctreeのみによって復号するように構成されていてもよい。
【0142】
以上のような構成とすることで、Trisoupノードサイズの最小時は非特許文献1から変更しなくてもOctreeのみとの併用が可能となるため、Trisoup自体の処理の変更量が少なくなり、設計が容易になるという利点がある。
【0143】
図9は、ツリー合成部2020における処理の一例を示すフローチャートである。
図8と同様の処理を行う箇所については、同一の符号を付しており、説明は省略する。
【0144】
ステップS901では、全ての処理Depth数の処理が完了した場合は、ツリー合成部2020は、ステップS809へ進み、そうでない場合は、ツリー合成部2020は、ステップS802へ進む。
【0145】
ここで、複数レベルでのTrisoupが許可(trisoup_multilevel_enabled_flagの値が「1」)されている時は、ツリー合成部2020は、処理するDepth数を、Trisoupノードサイズの最小値を規定するシンタックス(
図7に示すlog2_trisoup_node_size)の値に基づいて変化させてもよい。この時、ツリー合成部2020は、Trisoupノードサイズの最小値は0としてもよい。
【0146】
または、
図6に示すように、ツリー合成部2020は、適応Octreeモードが有効の場合は、Trisoupノードサイズの最小値は、0と暗黙的に設定してもよい。かかる場合、例えば、以下のように定義してもよい。
【0147】
処理Depth数=全Depth数-最小のTrisoupノードサイズ
この場合、全ての処理Depth数の処理が完了した場合は、ツリー合成部2020は、ステップS809へ進み、そうでない場合は、ツリー合成部2020は、ステップS902へ進む。
【0148】
言い換えると、(処理Depth数-n)=0の場合は、ツリー合成部2020は、ステップS809へ進み、(処理Depth数-n)>0の場合は、ツリー合成部2020は、ステップS902へ進む。
【0149】
ステップS902において、ツリー合成部2020は、対象Depthにて後述するTrisoup_applied_flagを復号する必要があるか否かを判定する。
【0150】
例えば、「複数レベルでのTrisoupが許可(trisoup_multilevel_enabled_flagの値が「1」)」で、且つ、「対象Depthのノードサイズ(N-n)が最大のTrisoupノードサイズ以下」の場合に、ツリー合成部2020は、「Trisoup_applied_flagの復号が必要である」と判定してもよい。
【0151】
また、ツリー合成部2020は、ステップS809へ進む際のノードサイズ(N-処理Depth数)が1以上(21以上)の場合、当該のノードサイズを持つ全てのノードには、Trisoupが適用されると判定してもよい。
【0152】
また、ツリー合成部2020は、ステップS809へ進む際のノードサイズ(N-処理Depth数)が0(20=1)の場合、すなわち、1×1×1のサイズのノードの場合、後述する近似表面合成部2030では、Trisoupの処理は行わず、Octreeのみを実行した際と同様に、1×1×1のサイズのノード自体を復号した点とみなしてもよい。
【0153】
以上のように、ツリー合成部2020は、所定の最小Trisoupノードサイズを1に設定し、ノードサイズが1×1×1となったノードについては、Octreeのみで、ノードサイズが1×1×1より大きなノードについては、Trisoupで、それぞれ幾何情報を復号することを決定するように構成されていてもよい。
【0154】
以上のような構成とすることで、Trisoupのみを用いる場合との処理が共通化されるという利点がある。
【0155】
(近似表面合成部2030)
近似表面合成部2030は、
図10及び
図14で説明するように、ツリー合成部2020にて、Trisoupノードと判定された各ノードについて、復号処理を行うように構成されている。
【0156】
以下、
図10~
図14を用いて近似表面合成部2030の処理の例について説明する。
【0157】
図10は、近似表面合成部2030の処理の一例を示すフローチャートである。
【0158】
図10に示すように、ステップS1001において、近似表面合成部2030は、全てのtrisoup_depthでの処理が完了したかどうかを判定する。
【0159】
全てのtrisoup_depthについて処理が完了した場合、ステップS1009へ進み、処理を終了する。全てのtrisoup_depthの処理が完了していない場合、ステップS1002へ進む。
【0160】
ステップS1002において、近似表面合成部2030は、ノード毎の頂点位置の取得及び統合を行う。
【0161】
ここで、第1に、近似表面合成部2030は、当該trisoup_depthに対応するTrisoupノードサイズ(以降、当該Trisoupノードサイズと呼ぶ)におけるノード毎に頂点位置を復号する。具体的な処理については、
図13で説明する。
【0162】
第2に、当該Trisoupノードサイズが、最大Trisoupノードサイズより小さい場合、近似表面合成部2030は、後述するステップS1008において、当該Trisoupノードサイズより大きなTrisoupノードサイズにおいて生成した頂点との統合処理を行う。
【0163】
具体的には、近似表面合成部2030は、当該Trisoupノードサイズにおけるノードのエッジ上に、
図13に説明する手法で復号した頂点(当該Trisoupノードサイズにおける頂点)と、ステップS1008で説明する方法で生成した頂点(当該Trisoupノードサイズより大きなTrisoupノードサイズにおいて生成した頂点)の両方が存在する場合、一番大きなノードサイズにおいて生成された頂点のみを保持し、その他の頂点については削除する処理を行う。このようにすることで、ノード毎に頂点を最大でも1点ずつにすることができる。
【0164】
頂点位置の取得及び統合が完了した後、近似表面合成部2030は、ステップS1003へ進む。
【0165】
ステップS1003において、近似表面合成部2030は、当該Trisoupノードサイズにおけるノード毎に、投影面を決定する。
【0166】
例えば、x軸、y軸、z軸の3つの軸があるとき、どれか1つの軸を縮退した平面を投影面と呼ぶ。
【0167】
ステップS1003では、近似表面合成部2030は、上述の軸のうちどの軸を縮退するか、すなわち、x-y平面、x-z平面、y-z平面のうちどの平面を投影面とするかを決定する。具体的な投影面の決定方法は、公知の方法を適用できるため省略する。
【0168】
投影面を決定した後、近似表面合成部2030は、ステップS1004へ進む。
【0169】
ステップS1004において、近似表面合成部2030は、投影面に投影した頂点を、例えば、反時計回りの順になるようにソートし、かかる順序に従ってindexを付与する。なお、ステップS1003の処理の過程でソート処理を行う場合は、当該のソート処理結果を保存しておくことで、ステップS1004の処理を省略することができる。
【0170】
indexを付与した後、近似表面合成部2030は、ステップS1005へ進む。
【0171】
ステップS1005において、近似表面合成部2030は、上述のindex及び対象ノードに存在する頂点数に基づいて、三角形を生成する。
【0172】
例えば、近似表面合成部2030は、予め頂点数毎にどのindexから三角形を生成するかを定義した表を作成しておき、それを参照することで三角形を生成できる。具体的な表の例については、例えば、上述の非特許文献1に記載の表を用いることができる。
【0173】
或いは、近似表面合成部2030は、まず各頂点の座標を平均したセントロイドを生成し、上述のインデックス順に隣り合う2点とセントロイドの3点で、三角形を生成してもよい。
【0174】
三角形を生成した後、近似表面合成部2030は、ステップS1006へ進む。
【0175】
ステップS1006において、近似表面合成部2030は、ステップS1005で生成した三角形を基に、点を生成する。具体的な方法は、例えば、上述の非特許文献1に記載の方法を用いることができる。
【0176】
全てのノードについて点の生成が完了した後、近似表面合成部2030は、ステップS1007へ進む。
【0177】
ステップS1007では、近似表面合成部2030は、当該Trisoupノードサイズが、最小ノードサイズと等しいかどうかを判定する。
【0178】
近似表面合成部2030は、当該Trisoupノードサイズが、最小ノードサイズと等しい場合は、ステップS1001へ進み、次のtrisoup_depthの処理を行い、そうでない場合は、ステップS1008へ進む。
【0179】
ステップS1008では、近似表面合成部2030は、ステップS1006で生成した当該Trisoupノードサイズにおける点群、又は、ステップS1005で生成した三角形に基づいて、最小Trisoupノードサイズにおける頂点を生成する。
【0180】
図11は、ステップS1006で生成した当該Trisoupノードサイズにおける点群から、最小Trisoupノードサイズにおける頂点を生成する場合の例を示している。
【0181】
図11Aは、ステップS1006で生成した復号点群の例を示している。
【0182】
第1に、近似表面合成部2030は、当該ノードを、
図11Aの点線で示すように、最小Trisoupノードサイズ毎に分割する。
【0183】
なお、
図11では、当該TrisoupノードサイズがN(=2
N)であり、最小TrisoupノードサイズがN-1(=2
(N-1))の場合を示している。
【0184】
第2に、近似表面合成部2030は、最小Trisoupノードサイズ毎に分割した際の各エッジ(
図11Aの実線及び点線)上に、復号点群内の各点が存在するかどうかを確認する。
【0185】
例えば、各エッジが、任意の原点から2(N-1)間隔で存在するとみなした場合、z軸方向のエッジの座標は、(A×2(N-1),B×2(N-1),z)で表せる。ここで、A及びBは、定数である。
【0186】
よって、例えば、復号点群内の点の座標がx=A×2(N-1)及びy=B×2(N-1)となる点があれば、その点をエッジ上に存在する点をみなせる。上述の処理は、x軸方向のエッジ及びy軸方向のエッジについても同様に適用可能である。
【0187】
近似表面合成部2030は、このような処理を、最小Trisoupノードサイズ毎に分割した際の全てのエッジについて実施することで、復号点群からエッジ上に存在する点を抽出できる。
【0188】
なお、上述の処理は、一例であり、他の処理でも、最小Trisoupノードサイズにおけるエッジ上の点が抽出できればよい。
【0189】
例えば、各エッジが、任意の原点から2(N-1)間隔で存在するとみなした場合、近似表面合成部2030は、z軸方向のエッジ上に存在する点を抽出するには、復号点群内の各点のx座標及びy座標をそれぞれ2(N-1)で除算し、x座標、y座標ともに余りがゼロになった点を、エッジ上に存在する点として抽出することもできる。
【0190】
図11Bは、エッジ上に存在する点の抽出結果の例を示している。
図11Bに示すように、近似表面合成部2030は、当該Trisoupノードサイズの表面に存在するエッジ上の点のみを抽出し、当該Trisoupノードサイズの内部に存在するエッジ上の点は抽出対象外としてもよい。
【0191】
近似表面合成部2030は、以上のようにして抽出したエッジ上の点を、最小Trisoupノードサイズにおける頂点として保存する。
【0192】
以上のように、近似表面合成部2030は、制御データから復号した最大ノードサイズ及び最小ノードサイズに基づいて、最大と最小との間の各ノードサイズにおいて頂点の復号処理を実行し、ノードサイズが最小ノードサイズではない場合、復号した頂点に基づいて、最小ノードサイズにおける頂点位置を生成し、ある辺上に、かかる辺に隣接する異なるノードサイズのノードから生成された複数の頂点が存在する場合、かかる隣接するノードのうち、最も大きなノードサイズを持つノードによって生成された頂点を、かかる辺の頂点位置とするように構成されていてもよい。
【0193】
このような構成とすることで、異なるノードサイズ境界においてもメッシュに隙間ができなくなるため、復号点群の主観品質の向上が見込める。
【0194】
また、以上のように、最小ノードサイズにおける頂点位置を生成する際、ノードの表面のみに頂点を生成するように構成されていてもよい。
【0195】
上述のように、生成する頂点位置を異なるノードサイズと隣接する可能性があるノード表面のみに限定することで、不要な頂点の生成を避け、処理量の増加を防ぐことができる。
【0196】
以上のように、近似表面合成部2030は、ノードサイズが最小ノードサイズではない場合、対象のノードの復号点群内の点のうち、対象のノードを最小ノードサイズで分割した際の辺上の点を、最小ノードサイズにおける頂点位置とするように構成されていてもよい。
【0197】
かかる構成によれば、既に別の目的で生成された復号点群を処理に用いることで、処理量の増加を防ぐことができる。
【0198】
以上では、当該Trisoupノードサイズにおける復号点群を基に頂点を生成する方法の例を説明したが、頂点は、
図12に示すように、当該Trisoupノードサイズにおける頂点から内挿する方法で生成してもよい。
【0199】
具体的には、例えば、第1に、近似表面合成部2030は、ステップS1003又はステップS1004における頂点のソート結果に基づいて、隣り合う頂点同士を結ぶ直線の式を算出する。
【0200】
図12Aは、
図11Aと同様に、当該Trisoupノードを最小Trisoupノードサイズに分割した場合の例、及び、当該Trisoupノードサイズにおける頂点の例を示している。
【0201】
図12Aは、ソート後のIndexにおいて、0番目と1番目、1番目と2番目、2番目と0番目の頂点を結ぶ直線をそれぞれ生成した場合の例を示している。
【0202】
2点a=(ax, ay, az)、b=(bx, by, bz)を結ぶ直線lは、例えば、l=(1-t)a+tbで表せる。
【0203】
この直線と、最小Trisoupノードサイズにおける各エッジの直線との交点を求めることで、エッジ上の点を算出することができる。
【0204】
ここで、
図11Bと同様に、算出対象を当該Trisoupノードサイズにおける表面上に存在するエッジに限定する場合、以下のように計算を簡素化できる。
【0205】
第1に、2つの頂点を結んで直線を求める際に、2つの頂点の両方が、当該Trisoupノードの同一表面上に無い場合、計算から除外できる。
【0206】
図12Aの例では、0番目及び1番目の頂点は、同一表面上に存在している。同様に、2番目及び0番目の頂点も、同一表面上に存在している。一方、1番目及び2番目の頂点は、同一表面上に無いため、この2点を結ぶ直線については計算の対象外とできる。
【0207】
2頂点を同一表面上に限定した場合、2頂点を結ぶ直線の式は、2次元平面状の直線の式として表現できる。
【0208】
例えば、0番目の頂点及び1番目の頂点は、それぞれz座標が同一であるため、2頂点を結ぶ直線はx-y平面上の直線としてy=ax+b(aとbは定数)の形で表せる。
【0209】
このx-y平面上において、最小Trisoupノードサイズに分割した場合のエッジはx=C×2(N-1)又はy=D×2(N-1)(C及びDは、それぞれ定数)の直線と見なせるので、上述の直線の式にx=C×2(N-1)又はy=D×2(N-1)を代入することで、交点を算出できる。
【0210】
以上のようにして算出した交点、及び、当該Trisoupノードサイズにおける頂点の両方を、内挿後の頂点とする。
【0211】
図12Bは、以上で説明した方法で生成した頂点の例を示している。
【0212】
以上のように、近似表面合成部2030は、ノードサイズが最小ノードサイズではない場合、当該ノード頂点のうち2点を結ぶ直線と、当該ノードを前記最小ノードサイズで分割した際の辺との交点を、最小ノードサイズにおける頂点位置とするように構成されていてもよい。
【0213】
このような構成とすることで、2本の直線の交点は、数学的に一意に算出可能であるため、頂点位置を正確に算出することが可能となる。
【0214】
以上のように頂点の生成が完了した後、ステップS1001へ進む。
【0215】
図13は、ステップS1002で使用する頂点の復号処理の一例を示すフローチャートである。
【0216】
図13に示すように、ステップS1301において、近似表面合成部2030は、全てのtrisoup_depthでの処理が完了したかどうかを判定する。
【0217】
全てのtrisoup_depthについて処理が完了した場合、ステップS1305へ進み、処理を終了する。全てのtrisoup_depthの処理が完了していない場合、ステップS1302へ進む。
【0218】
ステップS1302において、近似表面合成部2030は、対象Trisoup階層に属するユニークセグメント数を確認する。
【0219】
ユニークセグメント数が「0」の場合、すなわち、対象Trisoup階層にはTrisoupノードが1つも含まれない場合は、近似表面合成部2030は、ステップS1301へ進み、次のTrisoup階層の処理へ移る。
【0220】
ユニークセグメント数が「0」より大きい場合は、近似表面合成部2030は、ステップS1303へ移る。
【0221】
ステップS1303において、近似表面合成部2030は、各ユニークセグメントに対してTrisoup処理に用いる頂点が含まれるか否かを復号する。
【0222】
なお、各ユニークセグメントに対して存在できる頂点は、1点のみに制限してもよい。この場合、頂点が存在するユニークセグメント数が頂点数と等しいと解釈できる。
【0223】
近似表面合成部2030は、対象Trisoup階層の全てのユニークセグメントについて頂点の有無を復号した後、ステップS1304へ移る。
【0224】
ステップS1304において、近似表面合成部2030は、ステップS1303において頂点が存在すると判定された各ユニークセグメントに対して、各ユニークセグメント上のどこに頂点が存在するのかという位置情報を復号する。
【0225】
図14は、ステップS1304の処理の一例を示すフローチャートである。
【0226】
図14に示すように、ステップS1401において、近似表面合成部2030は、全てのセグメントについて処理が終了したかどうかを判定する。
【0227】
全てのセグメントについて処理が終了した場合、ステップS1406へ進み処理を終了する。全てのセグメントについて処理が終了していない場合、ステップS1402へ進む。
【0228】
ステップS1402では、近似表面合成部2030は、当該セグメントの方向を取得する。具体的には、近似表面合成部2030は、当該セグメントがx軸、y軸、z軸方向のいずれの方向なのかを取得する。
【0229】
かかる情報は、例えば、予め復号対象のノードに属するエッジ(=セグメント)に所定の順序でIndexを与えるとともに当該セグメントの方向を記録しておき、本処理では、Index順に各セグメントを処理することで、前記の記録から当該セグメントの方向を判定することができる。
【0230】
また、別の方法としては、近似表面合成部2030は、セグメントごとに始点の座標と終点の座標の情報を保持しておくことで、どの軸方向に沿った頂点であるかを判別できる。以上のように当該セグメントの方向を取得した後、ステップS1403へ進む。
【0231】
ステップS1403では、近似表面合成部2030は、当該セグメントのサイズを取得する。
【0232】
当該セグメントのサイズは、対象のOctreeのDepthにおけるノードサイズに対応する。
【0233】
Octreeのみを用いる場合はx軸、y軸、z軸方向すべてについて同一のサイズとなる。一方、QtBtを用いる場合はx軸、y軸、z軸方向それぞれについて値が異なる可能性がある。
【0234】
近似表面合成部2030は、当該Depthにおけるx軸、y軸、z軸方向それぞれのノードサイズと、ステップS1402で取得した当該セグメントの方向とに基づいて、当該セグメントのサイズを取得する。
【0235】
また、近似表面合成部2030は、別の方法としては、セグメントごとに始点の座標と終点の座標の情報を保持している場合、終点の座標値から始点の座標値を減算することで、当該セグメントのサイズを取得できる。
【0236】
当該セグメントのサイズ取得後、近似表面合成部2030は、ステップS1404へ進む。
【0237】
ステップS1404では、近似表面合成部2030は、ステップS1403で取得した当該セグメントのサイズを、これから復号する頂点のPositionの取り得る最大値としてセットする。その後、ステップS1405へ進む。
【0238】
ステップS1405では、近似表面合成部2030は、Positionの取り得る値の範囲を0~“S1404でセットした最大値”―1と設定したうえで、Positionを復号する。
【0239】
例えば、近似表面合成部2030は、最大値が2Lの場合、最大値=2L-1と設定できる。この時、例えば、Positionは、Lビットの等長符号で符号化されていてもよい(点群復号装置200としては、このように符号化されている前提で復号してもよい)。
【0240】
また、近似表面合成部2030は、Positionの取り得る値の範囲を0~2L-1とした上で、ハフマン符号化や算術符号化等を用いて、エントロピー符号化/復号してもよい。近似表面合成部2030は、Positionの復号後、ステップS1401へ進む。
【0241】
以上のように、近似表面合成部2030は、Trisoupの頂点位置の復号に際し、ノード形状に応じてセグメントごとに頂点位置の取り得る値の範囲を設定し、かかる頂点位置の取り得る値の範囲に基づいて頂点位置を復号するように構成されていてもよい。
【0242】
また、近似表面合成部2030は、以上のように、ノードからセグメントを生成する際の各セグメントの軸方向と、ノード形状とに基づいて、頂点位置の取り得る値の範囲を設定するように構成されていてもよい。
【0243】
また、近似表面合成部2030は、以上のように、各セグメントの始点座標と終点座標とに基づいて、頂点位置の取り得る値の範囲を設定するように構成されていてもよい。
【0244】
このような構成とすることで、ノードサイズが立方体ではなく直方体の場合にもTrisoupが適用できるようになり、符号化効率の改善が見込める。
【0245】
(点群符号化装置100)
以下、
図15を参照して、本実施形態に係る点群符号化装置100について説明する。
図15は、本実施形態に係る点群符号化装置100の機能ブロックの一例について示す図である。
【0246】
図15に示すように、点群符号化装置100は、座標変換部1010と、幾何情報量子化部1020と、ツリー解析部1030と、近似表面解析部1040と、幾何情報符号化部1050と、幾何情報再構成部1060と、色変換部1070と、属性転移部1080と、RAHT部1090と、LoD算出部1100と、リフティング部1110と、属性情報量子化部1120と、属性情報符号化部1130とを有する。
【0247】
座標変換部1010は、入力点群の3次元座標系から、任意の異なる座標系への変換処理を行うよう構成されている。座標変換は、例えば、入力点群を回転することにより、入力点群のx、y、z座標を任意のs、t、u座標に変換してもよい。また、変換のバリエーションの1つとして、入力点群の座標系をそのまま使用してもよい。
【0248】
幾何情報量子化部1020は、座標変換後の入力点群の位置情報の量子化及び座標が重複する点の除去を行うように構成されている。なお、量子化ステップサイズが1の場合は、入力点群の位置情報と量子化後の位置情報とが一致する。すなわち、量子化ステップサイズが1の場合は、量子化を行わない場合と等価になる。
【0249】
ツリー解析部1030は、量子化後の点群の位置情報を入力として、後述のツリー構造に基づいて、符号化対象空間のどのノードに点が存在するかについて示すoccupancy codeを生成するように構成されている。
【0250】
ツリー解析部1030は、本処理において、符号化対象空間を再帰的に直方体で区切ることにより、ツリー構造を生成するように構成されている。
【0251】
ここで、ある直方体内に点が存在する場合、かかる直方体を複数の直方体に分割する処理を、直方体が所定のサイズになるまで再帰的に実行することでツリー構造を生成することができる。なお、かかる各直方体をノードと呼ぶ。また、ノードを分割して生成される各直方体を子ノードと呼び、子ノード内に点が含まれるか否かについて0又は1で表現したものがoccupancy codeである。
【0252】
以上のように、ツリー解析部1030は、所定のサイズになるまでノードを再帰的に分割しながら、occupancy codeを生成するように構成されている。
【0253】
本実施形態では、上述の直方体を常に立方体として8分木分割を再帰的に行う「Octree」と呼ばれる手法、及び、8分木分割に加え、4分木分割及び2分木分割を行う「QtBt」と呼ばれる手法を使用することができる。
【0254】
ここで、「QtBt」を使用するか否かについては、制御データとして点群復号装置200に伝送される。
【0255】
或いは、任意のツリー構成を用いるPredicitive codingを使用するように指定されてもよい。かかる場合、ツリー解析部1030が、ツリー構造を決定し、決定されたツリー構造は、制御データとして点群復号装置200へ伝送される。
【0256】
例えば、ツリー構造の制御データは、
図6で説明した手順で復号できるよう構成されていてもよい。
【0257】
近似表面解析部1040は、ツリー解析部1030によって生成されたツリー情報を用いて、近似表面情報を生成するように構成されている。
【0258】
近似表面情報は、例えば、物体の3次元点群データを復号する際等において、点群が物体表面に密に分布しているような場合に、個々の点群を復号するのではなく、点群の存在領域を小さな平面で近似して表現したものである。
【0259】
具体的には、近似表面解析部1040は、例えば、「Trisoup」と呼ばれる手法で、近似表面情報を生成するように構成されていてもよい。また、Lidar等で取得した疎な点群を復号する場合は、本処理を省略することができる。
【0260】
幾何情報符号化部1050は、ツリー解析部1030によって生成されたoccupancy code及び近似表面解析部1040によって生成された近似表面情報等のシンタックスを符号化してビットストリーム(幾何情報ビットストリーム)を生成するように構成されている。ここで、ビットストリームには、例えば、
図4及び
図5で説明したシンタックスを含まれていてもよい。
【0261】
符号化処理は、例えば、コンテクスト適応二値算術符号化処理である。ここで、例えば、シンタックスは、位置情報の復号処理を制御するための制御データ(フラグやパラメータ)を含む。
【0262】
幾何情報再構成部1060は、ツリー解析部1030によって生成されたツリー情報及び近似表面解析部1040によって生成された近似表面情報に基づいて、符号化対象の点群データの各点の幾何情報(符号化処理が仮定している座標系、すなわち、座標変換部1010における座標変換後の位置情報)を再構成するように構成されている。
【0263】
色変換部1070は、入力の属性情報が色情報であった場合に、色変換を行うように構成されている。色変換は、必ずしも実行する必要は無く、色変換処理の実行の有無については、制御データの一部として符号化され、点群復号装置200へ伝送される。
【0264】
属性転移部1080は、入力点群の位置情報、幾何情報再構成部1060における再構成後の点群の位置情報及び色変換部1070での色変化後の属性情報に基づいて、属性情報の歪みが最小となるように属性値を補正するように構成されている。
【0265】
RAHT部1090は、属性転移部1080による転移後の属性情報及び幾何情報再構成部1060によって生成された幾何情報を入力とし、RAHT(Region Adaptive Hierarchical Transform)と呼ばれるHaar変換の一種を用いて、各点の残差情報を生成するように構成されている。RAHTの具体的な処理としては、例えば、上述の文献2に記載の方法を用いることができる。
【0266】
LoD算出部1100は、幾何情報再構成部1060によって生成された幾何情報を入力とし、LoD(Level of Detail)を生成するように構成されている。
【0267】
LoDは、ある点の属性情報から、他のある点の属性情報を予測し、予測残差を符号化或いは復号するといった予測符号化を実現するための参照関係(参照する点及び参照される点)を定義するための情報である。
【0268】
言い換えると、LoDは、幾何情報に含まれる各点を複数のレベルに分類し、下位のレベルに属する点については上位のレベルに属する点の属性情報を用いて属性を符号化或いは復号するといった階層構造を定義した情報である。
【0269】
LoDの具体的な決定方法としては、例えば、上述の文献2に記載の方法を用いてもよい。
【0270】
リフティング部1110は、LoD算出部1100によって生成されたLoD及び属性転移部1080での属性転移後の属性情報を用いて、リフティング処理により残差情報を生成するように構成されている。
【0271】
リフティングの具体的な処理としては、例えば、文献(Text of ISO/IEC 23090-9 DIS Geometry-based PCC、ISO/IEC JTC1/SC29/WG11 N19088)に記載の方法を用いてもよい。
【0272】
属性情報量子化部1120は、RAHT部1090又はリフティング部1110から出力される残差情報を量子化するように構成されている。ここで、量子化ステップサイズが1の場合は、量子化を行わない場合と等価である。
【0273】
属性情報符号化部1130は、属性情報量子化部1120から出力される量子化後の残差情報等をシンタックスとして符号化処理を行い、属性情報に関するビットストリーム(属性情報ビットストリーム)を生成するように構成されている。
【0274】
符号化処理は、例えば、コンテクスト適応二値算術符号化処理である。ここで、例えば、シンタックスは、属性情報の復号処理を制御するための制御データ(フラグ及びパラメータ)を含む。
【0275】
点群符号化装置100は、以上の処理により、点群内の各点の位置情報及び属性情報を入力として符号化処理を行い、幾何情報ビットストリーム及び属性情報ビットストリームを出力するように構成されている。
【0276】
また、上述の点群符号化装置100及び点群復号装置200は、コンピュータに各機能(各工程)を実行させるプログラムであって実現されていてもよい。
【0277】
なお、上記の各実施形態では、本発明を点群符号化装置100及び点群復号装置200への適用を例にして説明したが、本発明は、かかる例のみに限定されるものではなく、点群符号化装置100及び点群復号装置200の各機能を備えた点群符号化/復号システムにも同様に適用できる。
【産業上の利用可能性】
【0278】
なお、本実施形態によれば、例えば、動画像通信において総合的なサービス品質の向上を実現できることから、国連が主導する持続可能な開発目標(SDGs)の目標9「レジリエントなインフラを整備し、持続可能な産業化を推進するとともに、イノベーションの拡大を図る」に貢献することが可能となる。
【符号の説明】
【0279】
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…逆色変換部