(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2025009504
(43)【公開日】2025-01-20
(54)【発明の名称】点群復号装置、点群復号方法及びプログラム
(51)【国際特許分類】
G06T 9/40 20060101AFI20250110BHJP
【FI】
G06T9/40
【審査請求】未請求
【請求項の数】18
【出願形態】OL
(21)【出願番号】P 2023112555
(22)【出願日】2023-07-07
【国等の委託研究の成果に係る記載事項】(出願人による申告)令和5年度、総務省「3次元空間データの無線伝送に向けた高能率圧縮技術の研究開発」、産業技術力強化法第17条の適用を受ける特許出願
(71)【出願人】
【識別番号】000208891
【氏名又は名称】KDDI株式会社
(74)【代理人】
【識別番号】110001564
【氏名又は名称】フェリシテ弁理士法人
(72)【発明者】
【氏名】花岡 洋平
(72)【発明者】
【氏名】海野 恭平
(72)【発明者】
【氏名】野中 敬介
(72)【発明者】
【氏名】河村 圭
(57)【要約】
【課題】属性情報の符号化の符号化効率を改善すること。
【解決手段】本発明に係る点群復号装置200は、復号対象ノードと同一の親ノード内の各サブノードにてイントラ予測した属性値を用いて、クリッピングを用いた平滑化を行うRAHT部2080を備える。
【選択図】
図2
【特許請求の範囲】
【請求項1】
点群復号装置であって、
復号対象ノードと同一の親ノード内の各サブノードにてイントラ予測した属性値を用いて、クリッピングを用いた平滑化を行うRAHT部を備えることを特徴とする点群復号装置。
【請求項2】
前記RAHT部は、前記平滑化に利用するノードを、前記復号対象ノードが面隣接するノードとすることを特徴とする請求項1に記載の点群復号装置。
【請求項3】
前記RAHT部は、前記平滑化に利用するノードを、前記復号対象ノードが面隣接するノード及び前記復号対象ノードがエッジ隣接するノードとすることを特徴とする請求項1に記載の点群復号装置。
【請求項4】
前記RAHT部は、前記平滑化に利用するノードを、前記同一の親ノード内の全てのサブノードとすることを特徴とする請求項1に記載の点群復号装置。
【請求項5】
前記RAHT部は、前記平滑化に利用する重みを、ハードコーディングされた値とすることを特徴とする請求項1に記載の点群復号装置。
【請求項6】
前記RAHT部は、前記クリッピングを用いた平滑化を行うための重みパラメータを参照し、前記パラメータの値を前記平滑化の重みとして用いることを特徴とする請求項1に記載の点群復号装置。
【請求項7】
前記RAHT部は、前記クリッピングに用いる閾値を、ハードコーディングされた値とすることを特徴とする請求項1に記載の点群復号装置。
【請求項8】
前記RAHT部は、前記クリッピングを用いた平滑化を行うための閾値を参照し、前記閾値の値を前記クリッピングの閾値として用いることを特徴とする 請求項1に記載の点群復号装置。
【請求項9】
前記RAHT部は、Octreeの最下層のみ、色差信号のAC係数の復号をスキップすることを特徴とする点群復号装置。
【請求項10】
点群復号方法であって、
復号対象ノードと同一の親ノード内の各サブノードにてイントラ予測した属性値を用いて、クリッピングを用いた平滑化を行う工程を有することを特徴とする点群復号方法。
【請求項11】
点群復号装置であって、
各ノードのAC係数のインター予測において、前記AC係数の予測値又は属性値の予測値に、スケーリングファクタを適用するRAHT部を備えることを特徴とする点群復号装置。
【請求項12】
前記RAHT部は、前記各ノードのAC係数のインター予測において、前記スケーリングファクタをノードごとに復号することを特徴とする請求項11に記載の点群復号装置。
【請求項13】
前記RAHT部は、特定の範囲に定義した整数を復号し、復号した値を用いて前記スケーリングファクタを算出することを特徴とする請求項12に記載の点群復号装置。
【請求項14】
前記RAHT部は、前記各ノードのAC係数のインター予測において、前記スケーリングファクタをノードごとに算出することを特徴とする請求項11に記載の点群復号装置。
【請求項15】
前記RAHT部は、復号対象ノードの親ノードのAC係数と、親ノードを復号した際のインター予測値を用いて、前記スケーリングファクタをノードごとに算出することを特徴とする請求項14に記載の点群復号装置。
【請求項16】
前記RAHT部は、復号対象ノードの隣接ノードのAC係数と、隣接ノードを復号した際のインター予測値を用いて、前記スケーリングファクタをノードごとに算出することを特徴とする請求項14に記載の点群復号装置。
【請求項17】
点群復号装置であって、
各ノードのDC係数を予測するRAHT部を備え、
前記RAHT部は、前記DC係数のインター予測において、前記DC係数の予測値にスケーリングファクタを適用することを特徴とする点群復号装置。
【請求項18】
コンピュータを、点群復号装置として機能させるプログラムであって、
前記点群復号装置は、
復号対象ノードと同一の親ノード内の各サブノードにてイントラ予測した属性値を用いて、クリッピングを用いた平滑化を行うRAHT部を備えることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、点群復号装置、点群復号方法及びプログラムに関する。
【背景技術】
【0002】
従来、イントラ予測した属性値のAC係数と復号したAC係数の残差とを加算し、AC係数を再構成し、逆RAHTによって、属性値を復号する方法が知られている。
【0003】
また、イントラ予測した属性値のAC係数に対して、隣接ノードの予測値に基づいて、平滑化を行う技術が知られている。
【先行技術文献】
【非特許文献】
【0004】
【非特許文献1】G-PCC codec description、ISO/IEC JTC1/SC29/WG7 N00271
【非特許文献2】G-PCC 2nd Edition codec description、ISO/IEC JTC1/SC29/WG7 N00506
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、従来技術では、平滑化を行う際に外れ値が含まれる場合、かかる外れ値に大きく影響を受けてしまうという問題点があった。
【0006】
そこで、本発明は、上述の課題に鑑みてなされたものであり、属性情報の符号化の符号化効率を改善できる点群復号装置、点群復号方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明の第1の特徴は、点群復号装置であって、復号対象ノードと同一の親ノード内の各サブノードにてイントラ予測した属性値を用いて、クリッピングを用いた平滑化を行うRAHT部を備えることを要旨とする。
【0008】
本発明の第2の特徴は、点群復号方法であって、復号対象ノードと同一の親ノード内の各サブノードにてイントラ予測した属性値を用いて、クリッピングを用いた平滑化を行う工程を有することを要旨とする。
【0009】
本発明の第3の特徴は、コンピュータを、点群復号装置として機能させるプログラムであって、前記点群復号装置は、復号対象ノードと同一の親ノード内の各サブノードにてイントラ予測した属性値を用いて、クリッピングを用いた平滑化を行うRAHT部を備えることを要旨とする。
【0010】
本発明の第4の特徴は、点群復号装置であって、各ノードのAC係数のインター予測において、前記AC係数の予測値又は属性値の予測値に、スケーリングファクタを適用するRAHT部を備えることを要旨とする。
【0011】
本発明の第5の特徴は、点群復号装置であって、各ノードのDC係数を予測するRAHT部を備え、前記RAHT部は、前記DC係数のインター予測において、前記DC係数の予測値にスケーリングファクタを適用することを要旨とする。
【発明の効果】
【0012】
本発明によれば、属性情報の符号化の符号化効率を改善できる点群復号装置、点群復号方法及びプログラムを提供することができる。
【図面の簡単な説明】
【0013】
【
図1】
図1は、一実施形態に係る点群処理システム10の構成の一例を示す図である。
【
図2】
図2は、一実施形態に係る点群復号装置200の機能ブロックの一例を示す図である。
【
図3】
図3は、一実施形態に係る点群復号装置200の幾何情報復号部2010で受信する符号化データ(ビットストリーム)の構成の一例を示す図である。
【
図4】
図4は、GPS2011のシンタックス構成の一例を示す図である。
【
図5】
図5は、一実施形態に係る点群復号装置200のツリー合成部2020の動作の一例を示すフローチャートである。
【
図6】
図6は、ステップS504における予測器情報及び球面座標残差の復号処理の一例を示すフローチャートである。
【
図7】
図7は、ステップS504における予測器情報及び球面座標残差の復号処理の一例を示すフローチャートである。
【
図8】
図8は、ステップS504における予測器情報及び球面座標残差の復号処理の一例を示すフローチャートである。
【
図9】
図9は、一実施形態に係る点群復号装置200の属性情報復号部2060で受信する符号化データ(ビットストリーム)の構成の一例である。
【
図11】
図11は、RAHT部2080の処理の一例を示すフローチャートである。
【
図12】
図12は、ステップS28004の処理の一例を示すフローチャートである。
【
図13】
図13は、ステップS28104の処理の一例を示すフローチャートである。
【
図14】
図14は、ステップS28112のイントラ予測の処理の一例を示すフローチャートである。
【
図15】
図15は、復号対象ノードと上位の階層の隣接ノードとの関係を示す図である。
【
図16】
図16は、復号対象ノードとサブノード階層の隣接ノードとの関係を示す図である。
【
図17】
図17は、ステップS28112のイントラ予測の処理の一例を示すフローチャートである。
【
図18】
図18は、RAHT部2080の処理の一例を示すフローチャートである。
【
図19】
図19は、ステップS28111のインター予測処理の一例を示す図である。
【
図20】
図20は、本実施形態に係る点群符号化装置100の機能ブロックの一例について示す図である。
【発明を実施するための形態】
【0014】
以下、本発明の実施の形態について、図面を参照しながら説明する。なお、以下の実施形態における構成要素は、適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組み合わせを含む様々なバリエーションが可能である。したがって、以下の実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
【0015】
(第1実施形態)
以下、
図1~
図20を参照して、本発明の第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と、フレームバッファ2120とを有する。
【0022】
幾何情報復号部2010は、点群符号化装置100から出力されるビットストリームのうち、幾何情報に関するビットストリーム(幾何情報ビットストリーム)を入力とし、シンタックスを復号するように構成されている。
【0023】
復号処理は、例えば、コンテクスト適応二値算術復号処理である。ここで、例えば、シンタックスは、位置情報の復号処理を制御するための制御データ(フラグやパラメータ)を含む。
【0024】
ツリー合成部2020は、幾何情報復号部2010によって復号された制御データ及び後述するツリー内のどのノードに点群が存在するかを示すoccupancy codeを入力として、復号対象空間内のどの領域に点が存在するかというツリー情報を生成するように構成されている。
【0025】
なお、occupancy codeの復号処理をツリー合成部2020内部で行うよう構成されていてもよい。
【0026】
本処理は、復号対象空間を直方体で区切り、occupancy codeを参照して各直方体内に点が存在するかを判断し、点が存在する直方体を複数の直方体に分割し、occupancy codeを参照するという処理を再帰的に繰り返すことで、ツリー情報を生成することができる。
【0027】
ここで、かかるoccupancy codeの復号に際して、後述するインター予測を用いてもよい。
【0028】
本実施形態では、上述の直方体を常に立方体として8分木分割を再帰的に行う「Octree」と呼ばれる手法、及び、8分木分割に加え、4分木分割及び2分木分割を行う「QtBt」と呼ばれる手法を使用することができる。QtBt」を使用するか否かは、制御データとして点群符号化装置100側から伝送される。
【0029】
或いは、制御データによってPredictive geometry codingを使用するように指定された場合、ツリー合成部2020は、点群符号化装置100において決定した任意のツリー構成に基づいて各点の座標を復号するように構成されている。
【0030】
近似表面合成部2030は、ツリー合成部2020によって生成されたツリー情報を用いて近似表面情報を生成し、かかる近似表面情報に基づいて点群を復号するように構成されている。
【0031】
近似表面情報は、例えば、物体の3次元点群データを復号する際等において、点群が物体表面に密に分布しているような場合に、個々の点群を復号するのではなく、点群の存在領域を小さな平面で近似して表現したものである。
【0032】
具体的には、近似表面合成部2030は、例えば、「Trisoup」と呼ばれる手法で、近似表面情報を生成し、点群を復号することができる。「Trisoup」の具体的な処理例については後述する。また、Lidar等で取得した疎な点群を復号する場合は、本処理を省略することができる。
【0033】
幾何情報再構成部2040は、ツリー合成部2020によって生成されたツリー情報及び近似表面合成部2030によって生成された近似表面情報を元に、復号対象の点群データの各点の幾何情報(復号処理が仮定している座標系における位置情報)を再構成するように構成されている。
【0034】
逆座標変換部2050は、幾何情報再構成部2040によって再構成された幾何情報を入力として、復号処理が仮定している座標系から、出力点群信号の座標系に変換を行い、位置情報を出力するように構成されている。
【0035】
フレームバッファ2120は、幾何情報再構成部2040によって再構成された幾何情報を入力として、参照フレームとして保存するように構成されている。保存した参照フレームは、ツリー合成部2020において時間的に異なるフレームのインター予測を行う場合に、フレームバッファ2130から読み出されて参照フレームとして使用される。
【0036】
ここで、各フレームに対してどの時刻の参照フレームを用いるかどうかは、例えば、点群符号化装置100からビットストリームとして伝送されてくる制御データに基づいて決定されてもよい。
【0037】
属性情報復号部2060は、点群符号化装置100から出力されるビットストリームのうち、属性情報に関するビットストリーム(属性情報ビットストリーム)を入力とし、シンタックスを復号するように構成されている。
【0038】
復号処理は、例えば、コンテクスト適応二値算術復号処理である。ここで、例えば、シンタックスは、属性情報の復号処理を制御するための制御データ(フラグ及びパラメータ)を含む。
【0039】
また、属性情報復号部2060は、復号したシンタックスから、量子化済み残差情報を復号するように構成されている。
【0040】
逆量子化部2070は、属性情報復号部2060によって復号された量子化済み残差情報と、属性情報復号部2060によって復号された制御データの一つである量子化パラメータとを元に、逆量子化処理を行い、逆量子化済み残差情報を生成するように構成されている。
【0041】
逆量子化済み残差情報は、復号対象の点群の特徴に応じて、RAHT部2080及びLoD算出部2090のいずれかに出力される。いずれに出力されるかは、属性情報復号部2060によって復号される制御データによって指定される。
【0042】
RAHT部2080は、逆量子化部2070によって生成された逆量子化済み残差情報及び幾何情報再構成部2040によって生成された幾何情報を入力とし、RAHT(Region Adaptive Hierarchical Transform)と呼ばれるHaar変換(復号処理においては、逆Haar変換)の一種を用いて、各点の属性情報を復号するように構成されている。RAHTの具体的な処理としては、例えば、非特許文献1に記載の方法を用いることができる。
【0043】
LoD算出部2090は、幾何情報再構成部2040によって生成された幾何情報を入力とし、LoD(Level of Detail)を生成するように構成されている。
【0044】
LoDは、ある点の属性情報から、他のある点の属性情報を予測し、予測残差を符号化或いは復号するといった予測符号化を実現するための参照関係(参照する点及び参照される点)を定義するための情報である。
【0045】
言い換えると、LoDは、幾何情報に含まれる各点を複数のレベルに分類し、下位のレベルに属する点については上位のレベルに属する点の属性情報を用いて属性を符号化或いは復号するといった階層構造を定義した情報である。
【0046】
LoDの具体的な決定方法としては、例えば、上述の非特許文献1に記載の方法を用いてもよい。
【0047】
逆リフティング部2100は、LoD算出部2090によって生成されたLoD及び逆量子化部2070によって生成された逆量子化済み残差情報を用いて、LoDで規定した階層構造に基づいて各点の属性情報を復号するように構成されている。逆リフティングの具体的な処理としては、例えば、上述の非特許文献1に記載の方法を用いることができる。
【0048】
逆色変換部2110は、復号対象の属性情報が色情報であり且つ点群符号化装置100側で色変換が行われていた場合に、RAHT部2080又は逆リフティング部2100から出力される属性情報に逆色変換処理を行うように構成されている。かかる逆色変換処理の実行の有無については、属性情報復号部2060によって復号された制御データによって決定される。
【0049】
点群復号装置200は、以上の処理により、点群内の各点の属性情報を復号して出力するように構成されている。
【0050】
(幾何情報復号部2010)
以下、
図3~
図4を用いて幾何情報復号部2010で復号される制御データについて説明する。
【0051】
図3は、幾何情報復号部2010で受信する符号化データ(ビットストリーム)の構成の一例である。
【0052】
第1に、ビットストリームは、GPS2011を含んでいてもよい。GPS2011は、ジオメトリパラメータセットとも呼ばれ、幾何情報の復号に関する制御データの集合である。具体例については後述する。各GPS2011は、複数のGPS2011が存在する場合に個々を識別するためのGPS id情報を少なくとも含む。
【0053】
第2に、ビットストリームは、GSH2012A/2012Bを含んでいてもよい。GSH2012A/2012Bは、ジオメトリスライスヘッダ或いはジオメトリデータユニットヘッダとも呼ばれ、後述するスライスに対応する制御データの集合である。以降では、スライスという呼称を用いて説明するが、スライスをデータユニットと読み替えることもできる。具体例については後述する。GSH2012A/2012Bは、各GSH2012A/2012Bに対応するGPS2011を指定するためのGPS id情報を少なくとも含む。
【0054】
第3に、ビットストリームは、GSH2012A/2012Bの次に、スライスデータ2013A/2013Bを含んでいてもよい。スライスデータ2013A/2013Bには、幾何情報を符号化したデータが含まれている。
【0055】
以上のように、ビットストリームは、各スライスデータ2013A/2013Bに、1つずつGSH2012A/2012B及びGPS2011が対応する構成となる。
【0056】
上述のように、GSH2012A/2012Bにて、どのGPS2011を参照するかをGPS id情報で指定するため、複数のスライスデータ2013A/2013Bに対して共通のGPS2011を用いることができる。
【0057】
言い換えると、GPS2011は、スライスごとに必ずしも伝送する必要がない。例えば、
図3のように、GSH2012B及びスライスデータ2013Bの直前では、GPS2011を符号化しないようなビットストリームの構成とすることもできる。
【0058】
なお、
図3の構成は、あくまで一例である。各スライスデータ2013A/2013Bに、GSH2012A/2012B及びGPS2011が対応する構成となっていれば、ビットストリームの構成要素として、上述以外の要素が追加されてもよい。
【0059】
例えば、
図3に示すように、ビットストリームは、シーケンスパラメータセット(SPS)2001を含んでいてもよい。また、同様に、伝送に際して、
図3と異なる構成に整形されてもよい。更に、後述する属性情報復号部2060で復号されるビットストリームと合成して単一のビットストリームとして伝送されてもよい。
【0060】
図4は、GPS2011のシンタックス構成の一例である。
【0061】
なお、以下で説明するシンタックス名は、あくまで一例である。以下で説明したシンタックスの機能が同様であれば、シンタックス名は異なっていても差し支えない。
【0062】
GPS2011は、各GPS2011を識別するためのGPS id情報(gps_geom_parameter_set_id)を含んでもよい。
【0063】
なお、
図4のDescriptor欄は、各シンタックスが、どのように符号化されているかを意味している。ue(v)は、符号無し0次指数ゴロム符号であることを意味し、u(1)は、1ビットのフラグであることを意味する。
【0064】
GPS2011は、ツリー合成部2020でツリータイプを制御するためのフラグ(geom_tree_type)を含んでもよい。
【0065】
例えば、geom_tree_typeの値が「1」の場合は、Predictive geometry codingを使用すると定義し、geom_tree_typeの値が「0」の場合は、Octreeを使用するように定義されていてもよい。
【0066】
GPS2011は、ツリー合成部2020で、Angularモードとして処理を行うかどうかを制御するためのフラグ(geom_angular_enabled)を含んでもよい。
【0067】
例えば、geom_angular_enabledの値が「1」の場合は、AngularモードとしてPredictive geometry codingの処理を行うと定義し、geom_angular_enabledの値が「0」の場合は、AngularモードとしてPredictive geometry codingの処理を行わないように定義されていてもよい。
【0068】
GPS2011は、ツリー合成部2020で、Angularモードにおいて、点群取得装置のレーザーIDに応じた、同一レーザー内点数に関する値(angularNumPhiPerTurn)を含んでもよい。同一レーザー内点数とは、同一レーザー内で取得される点の数である。
【0069】
また、同一レーザー内点数は、レーザーごとに固有の値であり、レーザーIDの数だけ存在する。例えば、レーザーIDが、64個ある場合、同一レーザー内点数も、64個存在する。
【0070】
GPS2011は、ツリー合成部2020で、Angularモードにおいて、適応的方位角量子化モードであるかどうかを制御するためのフラグ(ptree_ang_azimuth_scaling_enabled)を含んでもよい。適応的方位角量子化モードとは、半径に応じた適応的な方位角の量子化を行うモードである。
【0071】
例えば、ptree_ang_azimuth_scaling_enabledの値が「1」の場合は、半径に応じた適応的な方位角の量子化を行うと定義し、ptree_ang_azimuth_scaling_enabledの値が「0」の場合は、半径に応じた適応的な方位角の量子化を行わないと定義されていてもとい。
【0072】
また、Angularモードにおける予測器の計算(選択)において、予測器リストを使うかどうか制御するためのフラグとして用いてもよい。
【0073】
例えば、ptree_azimuth_scaling_enabledの値が「1」の場合は、かかる予測器の計算において、予測器リストを使うと定義し、ptree_ang_azimuth_scaling_enabledの値が「0」の場合は、かかる予測器の計算において、予測器リストを使わないと定義されていてもよい。
【0074】
GPS2011は、ツリー合成部2020で、Angularモードにおいて、方位角の予測値の計算するために利用するためのレーザーの回転速度に関する値(ptree_ang_azimuth_step_minus1)を含んでもよい。
【0075】
GPS2011は、ツリー合成部2020で、Angularモードにおいて、半径残差を復号する際に用いる、方位角ステップ数に関する閾値(resR_context_qphi_threshold)を含んでもよい。
【0076】
GPS2011は、ツリー合成部2020で、Angularモードにおいて、方位角ステップ数に関する閾値を復号器に伝送するかどうか制御するためのフラグ(resR_context_qphi_threshold_present_flag)を含んでもよい。
【0077】
例えば、resR_context_qphi_threshold_present_flagの値が「1」の場合は、閾値を復号器に伝送すると定義し、resR_context_qphi_threshold_present_flagの値が「0」の場合は、閾値を復号器に伝送しないと定義されていても良い。
【0078】
(ツリー合成部2020)
以下、
図5~
図8を用いてツリー合成部2020の動作の一例について説明する。
【0079】
図5は、ツリー合成部2020における処理の一例を示すフローチャートである。なお、以下では「Predictive geometry coding」を使用してツリーを合成する場合の例について説明する。
【0080】
Predictive geometry codingは、Predictive Treeとも呼ばれている。Predictive geometry codingは、点群符号化装置100側で決めた任意の木構造に基づいて予測した位置情報及び当該点群データの位置情報の残差を復号し、両者を加算することで当該点群データの位置情報を復号する手段である。
【0081】
図5に示すように、ステップS501において、ツリー合成部2020は、当該スライス内に含まれる全ての点群データの位置情報の復号が完了したかどうかを判定する。
【0082】
この処理は、例えば、GSHに当該スライスに含まれる点群データ数を示す情報を伝送しておき、この点群データ数と既に処理したデータ数とを比較することで、全ての点の処理が完了したか否かを判定することができる。
【0083】
全ての点群データの位置情報の復号が完了した場合は、本動作は、ステップS513へ進み、処理を終了する。全ての点群データの位置情報の復号が完了していない場合は、本動作は、ステップS502へ進む。
【0084】
ステップS502において、ツリー合成部2020は、点群データの復号対象ノード(処理対象ノード)の親ノードを設定する。
【0085】
例えば、ツリー合成部2020は、各復号対象ノードの子ノードの数を復号し、かかる子ノード数の分だけ復号対象ノードのインデックスを格納しておく。
【0086】
そして、ツリー合成部2020は、あるノードの後に復号対象ノードの処理を行う場合、当該ノードのインデックスの配列を参照し、かかる配列の末尾に格納されているインデックスを1つ取得し、取得したインデックスのノードを、かかる復号対象ノードの親ノードに設定してもよい。
【0087】
かかる親ノードの設定が完了した後、本動作は、ステップS503へ進む。
【0088】
ステップS503において、ツリー合成部2020は、Angularモードで処理を行うかを判定する。
【0089】
例えば、ツリー合成部2020は、上述のgeom_angular_enabledの値を参照して、Angularモードで処理を行うかを判定することができる。
【0090】
Angularモードで処理を行う場合は、本動作は、ステップS504へ進み、Angularモードで処理を行わない場合は、本動作は、ステップS510へ進む。
【0091】
ステップS504において、ツリー合成部2020は、予測器情報及び球面座標残差の復号を行う。ここで、球面座標残差は、半径や方位角やレーザーIDの残差を示す。かかる復号が完了したら、本動作は、ステップS505へ進む。
【0092】
ステップS505において、ツリー合成部2020は、ステップS504で復号した予測器情報に基づいて、位置情報の予測を行う。ここで、予測器情報は、予測器インデックス又は予測モードである。
【0093】
ツリー合成部2020は、かかる処理では、最初に、予測に用いる予測器の種類を決定する。
【0094】
例えば、ツリー合成部2020は、ptree_ang_azimuth_scaling_enabledの値に基づいて、適応的方位角量子化モードで処理を行うか否かを判定し、かかる判定結果に基づいて、利用する予測器の種類を決定してもよい。
【0095】
例えば、ツリー合成部2020は、適応的方位角量子化モードの場合、木構造を用いて計算される複数の予測器の中から、復号した予測モードに基づき利用する予測器を選択するものであってもよい。
【0096】
或いは、ツリー合成部2020は、適応的方位角量子化モードで処理を行う場合、復号済みノードの位置情報を予測器としてリストに保持しておき、復号した予測器インデックスに割り当てられている予測器を当該リストから参照し、利用する予測器の種類として選択してもよい。
【0097】
ツリー合成部2020は、予測器の種類が決定したら、かかる予測器を位置情報の予測値とする。
【0098】
かかる位置情報の予測が完了した後、本動作は、ステップS506へと進む。
【0099】
ステップS506において、ツリー合成部2020は、球面座標の再構成を行う。ツリー合成部2020は、かかる処理では、復号した球面座標残差と予測器とを加算することで、球面座標を再構成する。
【0100】
かかる再構成が完了した後、本動作は、ステップS507へと進む。
【0101】
ステップS507において、ツリー合成部2020は、直交整数座標の再構成を行う。ツリー合成部2020は、かかる処理では、再構成した球面座標に基づいて、球面座標の直交整数座標への変換を行うことができる。具体的な方法としては、例えば、非特許文献1に記載の手法で実現できる。
【0102】
かかる直交整数座標の再構成が完了した後、本動作は、ステップS508へ進む。
【0103】
ステップS508において、ツリー合成部2020は、直交整数座標残差の復号を行う。
【0104】
直交整数座標残差の復号が完了した後、本動作は、ステップS509へと進む。
【0105】
ステップS509において、ツリー合成部2020は、元座標の再構成を行う。ツリー合成部2020は、かかる処理では、復号した直交整数座標残差と再構成した直交整数座標とを加算することで、元座標の再構成を行う。
【0106】
かかる元座標の再構成が完了した後、本動作は、ステップS501へと戻る。
【0107】
ステップS510において、ツリー合成部2020は、位置情報の予測を行う。具体的には、ツリー合成部2020は、予測器を選択し、かかる予測器を位置情報の予測値とする。
【0108】
例えば、ツリー合成部2020は、木構造に基づき計算される複数の予測器の中から、復号した予測器モードに基づき予測器を選択してもよい。
【0109】
かかる位置情報の予測が完了した後、本動作は、ステップS511へと進む。
【0110】
ステップS511において、ツリー合成部2020は、直交整数座標残差の復号を行う。
【0111】
直交整数座標残差の復号が完了した後、本動作は、ステップS512へと進む。
【0112】
ステップS512において、ツリー合成部2020は、元座標の再構成を行う。ツリー合成部2020は、かかる処理では、ステップS511で復号した直交整数座標の残差とステップS510で予測した位置情報とを加算することで、元座標を再構成する。
【0113】
かかる元座標の再構成が完了した後、本動作は、ステップS501へと戻る。
【0114】
図6は、ステップS504における予測器情報及び球面座標残差の復号処理の一例を示すフローチャートである。
【0115】
図6に示すように、ステップS601において、ツリー合成部2020は、ptree_ang_azimuth_scaling_enabledの値に基づいて、適応的方位角量子化モードであるか否かを判定する。
【0116】
適応的方位角量子化モードである場合、本動作は、ステップS602へ進む。一方、適応的方位角量子化モードではない場合、本動作は、ステップS603へ進む。
【0117】
ステップS602において、ツリー合成部2020は、予測器インデックスを復号する。予測器インデックスの復号が完了後、本動作は、ステップS604へ進む。
【0118】
ステップS603において、ツリー合成部2020は、予測モードを復号する。予測モードの復号が完了後、本動作は、ステップS604へ進む。
【0119】
ステップS604において、ツリー合成部2020は、方位角ステップ数の復号を行う。方位角ステップ数の復号が完了後、本動作は、ステップS605へ進む。
【0120】
ステップS605において、ツリー合成部2020は、球面座標残差を復号する。ツリー合成部2020は、非特許文献2に記載の方法を用いて、かかる復号を行ってもよい。復号が完了後、本動作は、ステップS606へ進み、処理を終了する。
【0121】
以上では、方位角ステップ数をそのまま復号する例を示したが、例えば、ツリー合成部2020は、同一レーザー内で取得される点の数に基づいて、復号した方位角ステップ数を補正してもよい。
【0122】
例えば、
図7に示すように、ツリー合成部2020は、ステップS701において、復号した方位角ステップ数に対して、点群の間隔に基づく補正を行ってもよい。
【0123】
具体的には、ツリー合成部2020は、angularNumPhiPerTurnに基づいて、方位角ステップ数を補正してもよい。
【0124】
第1に、ツリー合成部2020は、同一レーザー内点数の最大値割合を計算する。
【0125】
ここで、同一レーザー内点数の最大値割合とは、復号対象ノードの親ノードのレーザーIDに対応する同一レーザー内点数を、同一レーザー内点数の最大値から除した値である。また、同一レーザー内点数の最大値とは、レーザーIDの数だけ存在する同一レーザー内点数の値の中で、最大の値である。
【0126】
例えば、同一レーザー内点数の最大値が4000であり、復号対象ノードの親ノードのレーザーIDに対応する同一レーザー内点数が800であった場合、同一レーザー内点数の最大値割合は5となる。
【0127】
なお、ツリー合成部2020は、ステップS701において、同一レーザー内点数の最大値割合について計算してもよい。
【0128】
或いは、ツリー合成部2020は、angularNumPhiPerTurnを復号後、ステップS701の前に、各レーザーIDに対応する同一レーザー内点数の最大値割合を計算しておき、ステップS701において、復号対象ノードの親ノードのレーザーIDに対応する同一レーザー内点数の最大値割合を取得してもよい。
【0129】
例えば、ツリー合成部2020は、同一レーザー内点数の最大値割合を、復号した方位角ステップ数に加算することによって、上述の補正を行ってもよい。
【0130】
或いは、ツリー合成部2020は、同一レーザー内点数の最大値割合を、復号した方位角ステップ数に乗算することによって、上述の補正を行ってもよい。
【0131】
以上のように、ツリー合成部2020は、同一レーザー内で取得される点の数に基づいて、復号した方位角ステップ数を補正する構成としてもよい。
【0132】
かかる構成とすることで、方位角ステップ数の符号化効率を改善することができる。
【0133】
或いは、ツリー合成部2020は、例えば、同一レーザー内で取得される点の数に基づいて、レーザーの回転速度を補正してもよい。
【0134】
例えば、
図8に示すように、ツリー合成部2020は、ステップS801において、上述の方法で同一レーザー内点数の最大値割合を計算し、ptree_ang_azimuth_step_minus1を、同一レーザー内点数の最大値割合で除算することで補正してもよい。
【0135】
ツリー合成部2020は、ステップS801において、同一レーザー内点数の最大値割合について計算してもよい
或いは、ツリー合成部2020は、angularNumPhiPerTurnを復号後、ステップS801の前に、各レーザーIDに対応する同一レーザー内点数の最大値割合を計算しておき、ステップS801で、復号対象ノードの親ノードのレーザーIDに対応する同一レーザー内点数の最大値割合を取得してもよい。
【0136】
ptree_ang_azimuth_step_minus1は、ステップS505において、球面座標残差の復号で利用される。
【0137】
以上のように、ツリー合成部2020は、同一レーザー内で取得される点の数に基づいて、レーザーの回転速度を補正する構成としてもよい。
【0138】
かかる構成とすることで、方位角ステップ数の符号化効率を改善することができる。
【0139】
ステップS605において、ツリー合成部2020は、半径残差の復号に利用するコンテクストを決定する際、方位角ステップ数に関する閾値を使用し、閾値と復号した方位角ステップ数による判定を行い、その結果に基づきコンテクストを決定してもよい。
【0140】
コンテクストは、例えば、復号した予測器インデックス及び復号した方位角ステップ数を用いて、以下のように、方位角ステップ数に関する閾値を1つ用いて、4つのコンテクストインデックスctxIdxの中から、条件に当てはまるコンテクストインデックスを1つ選び、そのコンテクストインデックスを基に決定されてもよい。
【0141】
【数A】
ここで、predIdxは、予測器インデックスであり、qphiは、方位角ステップ数であり、xは、方位角ステップ数に関する閾値を示す。閾値xとしては、ハードコーディングされた特定の値を用いてもよい。
【0142】
例えば、閾値xとして、0等の特定の値をハードコーディングして用いてもよい。若しくは、resR_context_qphi_thresholdを参照し、その値を用いてもよい。
【0143】
若しくは、例えば、resR_context_qphi_threshold_present_flagの値を参照し、閾値を復号器に伝送しないと判定した場合、GPS2011が保持するシンタックスを用いて導出してもよい。例えば、方位角の予測値の計算するために利用するためのレーザーの回転速度に関する値であるptree_ang_azimuth_step_minus1の値を基に、閾値xを導出してもよい。例えば、以下のように、閾値xを計算してもよい。
【0144】
【数B】
ここで、Aは、定数であり、例えば、2の累乗としてもよい。また、int(・)は、引数の小数部分を切り捨てて、整数部分を返す関数である。
【0145】
(属性情報復号部2060)
以下、
図9~
図10を用いて属性情報復号部2060で復号される制御データについて説明する。
【0146】
図9は、属性情報復号部2060で受信する符号化データ(ビットストリーム)の構成の一例であり、
図10は、
図9に示すAPS2611のシンタックス構成の一例である。
【0147】
なお、以下で説明するシンタックス名は、あくまで一例である。以下で説明したシンタックスの機能が同様であれば、シンタックス名は異なっていても差し支えない。
【0148】
APS2611は、各APS2611を識別するためのAPS id情報(aps_geom_parameter_set_id)を含んでもよい。
【0149】
なお、
図10のDescriptor欄は、各シンタックスが、どのように符号化されているかを意味している。ue(v)は、符号無し0次指数ゴロム符号であることを意味し、u(1)は、1ビットのフラグであることを意味する。
【0150】
APS2611は、逆量子化部2070において、逆量子化済み残差情報を、RAHT部2080及びLoD算出部2090のいずれに出力するかを制御するためのフラグ(attr_coding_type)を含んでもよい。
【0151】
例えば、attr_coding_typeの値が「1」の場合は、LoD算出部2090に出力するように定義され、attr_coding_typeの値が「0」の場合は、RAHT部2080に出力するように定義されていてもよい。
【0152】
APS2611は、RAHT部2080において、属性情報の予測を行うか否かを制御するためのフラグ(raht_prediction_enabled)を含んでもよい。
【0153】
例えば、raht_prediction_enabledの値が「1」の場合、属性情報の予測を行うと定義されし、raht_prediction_enabledの値が「0」の場合、属性情報の予測を行わないと定義されていてもよい。
【0154】
APS2611は、RAHT部2080において、属性情報の予測にサブノードを使うか否かを制御するフラグ(raht_subnode_prediction_enable_flag)を含んでもよい。
【0155】
例えば、raht_subnode_prediction_enable_flagの値が「1」の場合、属性情報の予測にサブノードを使うと定義され、raht_subnode_prediction_enable_flagの値が「0」の場合、属性情報の予測にサブノードを使わないと定義されていてもよい。
【0156】
APS2611は、RAHT部2080において、属性情報のイントラ予測を行う際の重みパラメータ(raht_prediction_weights)を含んでもよい。
【0157】
例えば、raht_prediction_weightsの値は、復号対象ノードとイントラ予測に用いる隣接ノードとの隣接の仕方に応じて定義されていてもよい。
【0158】
APS2611は、RAHT部2080において、属性情報のイントラ予測を行った後に、平滑化を行うか否かを制御するフラグ(raht_smoothing_enable_flag)を含んでもよい。
【0159】
例えば、raht_smoothing_enable_flagの値が「1」の場合、属性情報の予測を行った後に平滑化を行うと定義され、raht_smoothing_enable_flagの値が「0」の場合、平滑化を行わないと定義されていてもよい。
【0160】
APS2611は、RAHT部2080において、属性情報のイントラ予測を行った後に、加重平均による平滑化を行うための重みパラメータ(raht_smoothing_weighted_average_weights)を含んでもよい。
【0161】
例えば、かかる重みパラメータは、復号対象ノードと復号対象ノードの同一親ノードの各サブノードとの隣接の仕方に応じて、最大8個定義されていてもよい。
【0162】
APS2611は、RAHT部2080において、属性情報のイントラ予測を行った後に、クリッピングによる平滑化を行うための重みパラメータ(raht_smoothing_clipping_weights)を含んでもよい。
【0163】
例えば、かかる重みパラメータは、復号対象ノードと復号対象ノードの同一親ノードの各サブノードとの隣接の仕方に応じて、最大8個定義されていてもよい。
【0164】
APS2611は、RAHT部2080において、属性情報のイントラ予測を行った後に、クリッピングによる平滑化を行うための閾値(raht_smoothing_clipping_threshold)を含んでもよい。
【0165】
APS2611は、RAHT部2080において、属性情報のインター予測を行うか否かを制御するためのフラグ(raht_inter_prediction_enabled)を含んでもよい。
【0166】
例えば、raht_inter_prediction_enabledの値が「1」の場合、属性情報の予測を行うと定義され、raht_inter_prediction_enabledの値が「0」の場合、属性情報の予測を行わないと定義されていてもよい。
【0167】
APS2611は、RAHT部2080において、属性情報のインター予測を有効化する階層を示す値(raht_inter_prediction_depth_minus1)を含んでもよい。
【0168】
例えば、raht_inter_prediction_depth_minus1が「N-1」の場合、インター予測は、Octree構造の上位N階層までにおいて有効化してもよい。
【0169】
(RAHT部2080)
図11~
図19を用いて、RAHT部2080の処理の一例を説明する。
【0170】
図11は、RAHT部2080の処理の一例を示すフローチャートである。
【0171】
図11に示すように、ステップS28001において、RAHT部2080は、Octreeと呼ばれる手法を用いて、所定のサイズになるまでノードを再帰的に8分木分割する。かかる分割が完了後、本動作は、ステップS28002へ進む。
【0172】
ステップS28002において、RAHT部2080は、Octreeによって分割された各ノードにおいて、ノードの下位の階層に属する点の総数を集計する。
【0173】
具体的には、RAHT部2080は、ある階層のノードを順番に走査し、各ノードに属する点の数を記録する。次に、RAHT部2080は、1つ上の階層のノードにおいて、各ノードの子ノードにおいて記録された点の数を合算し、各ノードに属する点の数を算出する。
【0174】
RAHT部2080は、以上の走査を最下層から最上位の階層まで順に繰り返す。取得した点の総数は、後述のステップS28005において、RAHTの逆変換の重みとして利用される。かかる算出が完了後、本動作は、ステップS28003へ進む。
【0175】
ステップS28003において、RAHT部2080は、Octreeの最上位の階層に属するノードのDC係数を復号する。或いは、RAHT部2080は、イントラ予測を用いてDC係数を予測し、DC係数の予測残差を復号して足し合わせることで、DC係数を算出してもよい。
【0176】
RAHT部2080は、かかるDC係数の復号が完了後、以下の式で、ステップS28002で取得したルートノードに属する点の総数wrootと、復号したDC係数DCrootを用いて、ルートノードの属性値Arootを算出する。
【0177】
【数1】
かかる算出が完了後、本動作は、ステップS28004へ進む。
【0178】
ステップS28004において、RAHT部2080は、当該階層内に含まれる全てのノードの属性情報の復号が完了したかどうかを判定する。
【0179】
完了していない場合、本動作は、ステップS28005へ進み、完了した場合、本動作は、ステップS28007へ進む。
【0180】
ステップS28005において、RAHT部2080は、AC係数を復号する。具体的には後述する。かかる復号が完了後、本動作は、ステップS28006へ進む。
【0181】
ステップS28006において、RAHT部2080は、集計した各ノードの下位の階層に属する点の総数と、復号したAC係数と、後述する方法で上位階層のノードから算出したDC係数とに基づいて、RAHTの逆変換を用いて、属性値を算出する。
【0182】
ここで、RAHTの逆変換は、Octreeによって8分木分割された、2×2×2個の8個のノード単位で行われる。
【0183】
具体的には、属性値A1,A2,…Akは、k個のサブノードを保持するノードのDC係数DCと、AC係数AC1,AC2,…ACk-1及び各サブノードの下位の階層に属する点の総数w=w1,w2,…wkを用いて、以下の式(1)によって求められる。
【0184】
【数2】
ここで、T(w)
-1は、RAHTの逆変換に用いる行列であり、例えば、非特許文献1に記載の方法で生成されることができる。
【0185】
かかる変換処理は、上位階層のノードから下位階層のノードの順に繰り返し行うことを想定しており、
【0186】
【数3】
は、各サブノードのRAHTの逆変換におけるDC係数として用いられる。かかる変換処理が完了後、本動作は、ステップS28004へ進む。
【0187】
ステップS28007において、RAHT部2080は、全階層のノードの復号が完了したかを判定する。
【0188】
完了していない場合、本動作は、処理対象階層を1つ下の階層へ移し、ステップS28004へ進む。完了した場合、本動作は、ステップS28008へ進み、処理を終了する。
【0189】
図12は、ステップS28004の処理の一例を示すフローチャートである。
【0190】
図12に示すように、ステップS28101において、RAHT部2080は、AC係数を予測するかを判定する。RAHT部2080は、かかる判定を行う際に、raht_prediction_enabledを参照し、その値を用いてもよい。
【0191】
RAHT部2080は、現在の処理対象ノードにおいて、AC係数の予測を行うか否かを示すフラグを復号し、かかるフラグの値を用いてもよい。
【0192】
かかるフラグは、ノードごとに復号されてもよいし、階層ごとに復号されてもよい。かかるフラグは、raht_prediction_enabledの値が予測が有効であることを示す値「1」であった場合のみ復号されるとしてもよい。かかるフラグは、スライスデータに含まれていてもよい。
【0193】
判定の結果、AC係数を予測しない場合、本動作は、ステップS28102へ進み、AC係数を予測する場合、本動作は、ステップS28103及びS28104へ進む。
【0194】
ステップS28102において、RAHT部2080は、AC係数を復号する。かかる復号が完了後、本動作は、ステップS28106へ進み、処理を終了する。
【0195】
ステップS28103において、RAHT2080は、AC係数残差を復号する。かかる復号が完了後、本動作は、ステップS28105へ進む。
【0196】
ステップS28104において、RAHT部2080は、AC係数を予測する。AC係数の予測には、インター(Inter)予測が用いられてもよいし、イントラ(Intra)予測が用いられてもよい。
【0197】
RAHT部2080は、まず属性値を予測し、その後、RAHTによってAC係数の予測値を算出してもよい。具体的には、後述する。かかるAC係数の予測が完了後、本動作は、ステップS28105へ進む。
【0198】
ステップS28105において、RAHT部2080は、復号したAC係数の残差と予測したAC係数とを加算し、AC係数の再構成を行う。かかる再構成が完了後、本動作は、ステップS28106へと進み、処理を終了する。
【0199】
図13は、ステップS28104の処理の一例を示すフローチャートである。
【0200】
図13に示すように、ステップS28107において、RAHT部2080は、インター予測が有効かどうかを判定する。、RAHT部2080は、判定には、raht_inter_prediction_enabledを参照し、その値を用いてもよい。判定の結果、インター予測が有効の場合、本動作は、ステップS28109へ進み、インター予測が無効の場合、本動作は、ステップS28112へ進む。
【0201】
ステップS28109において、RAHT部2080は、処理対象ノードが含まれる階層の深さが閾値以下であるかを判定する。RAHT部2080は、閾値として、raht_inter_prediction_depth_minus1を参照し、その値を用いてもよい。
【0202】
判定の結果、深さが閾値以下の場合、本動作は、ステップS28110へ進み、深さが閾値より大きい場合、本動作は、ステップS28112へ進む。
【0203】
ステップS28110において、RAHT部2080は、処理対象ノードのAC係数をインター予測するか否かを判定する。
【0204】
RAHT部2080は、判定には、インター予測が実行可能かどうかを調べ、実行可能な場合にインター予測し、実行不可能な場合にはインター予測しないとしてもよい。具体的には後述する。
【0205】
RAHT部2080は、判定には、処理対象ノードのAC係数をインター予測するか否かを示すフラグを復号し、かかるフラグの値を用いてもよい。かかるフラグは、ノードごとに復号されてもよいし、階層ごとに復号されてもよい。かかるフラグは、インター予測が実行可能と判定された場合にのみ復号され、判定が行われるとしてもよい。かかるフラグは、スライスデータに含まれていてもよい。
【0206】
ステップS28111において、RAHT部2080は、処理対象ノードのAC係数のインター予測を行う。具体的には後述する。
【0207】
ステップS28112において、RAHT部2080は、処理対象ノードのAC係数のイントラ予測を行う。具体的には後述する。
【0208】
ステップS28113において、ステップS28104の処理を終了する。なお、ステップS28109の条件分岐は、省略されてもよい。
【0209】
ステップS28111のインター予測の処理において、ステップS28112のイントラ予測と同等の処理も一緒に行い、インター予測及びイントラ予測の結果を組み合わせて予測してもよい。具体的には後述する。
【0210】
図14は、ステップS28112のイントラ予測の処理の一例を示すフローチャートである。
【0211】
図14に示すように、ステップS28201において、RAHT部2080は、サブノード階層の隣接ノードを使ってイントラ予測を行うか否かを判定する。RAHT部2080は、判定には、raht_subnode_prediction_enable_flagを参照し、その値を用いてもよい。
【0212】
RAHT部2080は、サブノード階層の隣接ノードを使わない場合、上位の階層の隣接ノードのみを使ってイントラ予測を行う。
【0213】
ここで、上位の階層の隣接ノードとは、復号対象ノードの親ノードが隣接するノードのうち面を隣接する6個のノードと、エッジを隣接する12個のノード及び親ノード自身の合計19個のノードのうち復号対象ノードが面を隣接している3個のノードと、エッジを隣接している3個のノードと、親ノード自身の7個のノードとである。
【0214】
図15は、復号対象ノードと上位の階層の隣接ノードとの関係を示す図である。
【0215】
RAHT部2080は、サブノード階層の隣接ノードを使う場合、上位の階層の隣接ノードとサブノード階層の隣接ノードとを使ってイントラ予測を行う。
【0216】
ここで、サブノード階層の隣接ノードとは、上位の階層の隣接ノードのサブノードのうち復号対象ノードが面若しくはエッジを隣接しており且つ復号済のノードである。
【0217】
図16は、復号対象ノードとサブノード階層の隣接ノードとの関係を示す図である。
【0218】
判定の結果、サブノード階層の隣接ノードを使わずにイントラ予測を行う場合、本動作は、ステップS28202へ進み、サブノード階層の隣接ノードを使ってイントラ予測を行う場合、本動作は、ステップS28204へ進む。
【0219】
ステップS28202において、RAHT部2080は、上位の階層の隣接ノードの属性値を取得する。上位の階層の隣接ノードの属性値を取得した後、本動作は、ステップS28203へ進む。
【0220】
ステップS28203において、RAHT部2080は、復号対象ノードの属性値を予測する。
【0221】
RAHT部2080は、取得したk個の上位の階層の隣接ノードの属性値attriと、隣接ノードiの種類に応じた重みwiとを利用して、以下の式で、属性値attrの予測を行ってもよい。
【0222】
【数4】
ここで、RAHT部2080は、重みw
iとして、隣接ノードiが、上位の階層の面隣接ノード、上位の階層のエッジ隣接ノード及び親ノードのいずれの種類かに応じて、ハードコーディングされた値を用いてもよいし、raht_prediction_weightsを参照して、その値から重みw
iを計算してもよい。
【0223】
かかる属性値の予測が完了後、本動作は、ステップS28207へ進む。
【0224】
ステップS28204において、RAHT部2080は、上位階層の隣接ノードの属性値を取得する。
【0225】
ここで、属性値を取得する対象は、上位の階層の隣接ノードのうち、各隣接ノードのサブノードが復号済でないノード、或いは、上位の階層の隣接ノードのうち、サブノードが復号済であっても、復号対象ノードと面又はエッジを隣接しているサブノードが存在しないノードである。
【0226】
かかる属性値の取得が完了後、本動作は、ステップS28205へ進む。
【0227】
ステップS28205において、RAHT部2080は、サブノード階層の隣接ノードの属性値を取得する。サブノード階層の隣接ノードの属性値を取得後、本動作は、ステップS28206へ進む。
【0228】
ステップS28206において、RAHT部2080は、復号対象ノードの属性値を予測する。
【0229】
RAHT部2080は、取得したk個の上位の階層の隣接ノード及びサブノード階層の隣接ノードの属性値attriと、隣接ノードの種類iに応じた重みwiとを利用して、以下の式で、属性値attrの予測を行ってもよい。
【0230】
【数5】
ここで、RAHT部2080は、重みw
iとして、隣接ノードiが、上位の階層の面隣接ノード、上位の階層のエッジ隣接ノード、親ノード、サブノード階層の面隣接ノード及びサブノード階層のエッジ隣接ノードのいずれの種類であるかに応じて、ハードコーディングされた値を用いてもよいし、raht_prediction_weightsを参照し、その値から重みw
iを計算してもよい。
【0231】
かかる属性値の予測の完了後、本動作は、ステップS28207へ進む。
【0232】
ステップS28207において、RAHT部2080は、予測した属性値をAC係数に変換する。AC係数は、予測した属性値をRAHTすることで生成される。例えば、RAHT部2080は、かかる変換方法として、非特許文献1に記載の方法を用いてもよい。
【0233】
以上では、RAHT部2080が、ステップS28206で予測した属性値を、そのままステップS28207でAC係数の変換に使う例について説明したが、RAHT部2080は、予測した属性値の平滑化を行った上で、AC係数の変換を行ってもよい。
【0234】
例えば、
図17に示すように、RAHT部2080は、属性値を予測した後、ステップS1301において、平滑化を行うか否かを判定してもよい。
【0235】
RAHT部2080は、かかる判定において、raht_smoothing_enable_flagを参照し、その値を用いてもよい。
【0236】
平滑化を行う場合、本動作は、ステップS1302へ進む。平滑化を行わない場合、本動作は、ステップS28207へ進む。
【0237】
ステップS1302において、RAHT部2080は、属性値の平滑化を行ってもよい。
【0238】
例えば、RAHT部2080は、復号対象ノードの平滑化後の属性値Attrsmoothingについて、復号対象ノードと同一の親ノード内のサブノードiにて予測した属性値Attri及び重みαiを用いて、以下のように加重平均を計算することで求めてもよい。
【0239】
【数6】
ここで、RAHT部2080は、対象とするサブノードiについて、復号対象ノードが面隣接するノードとしてもよいし、同一親ノード内の全てのサブノードとしてもよい。
【0240】
また、RAHT部2080は、重みαiとして、ハードコーディングされた値を用いてもよいし、raht_smoothing_weighted_average_weightsを参照し、その値を用いてもよい。
【0241】
また、RAHT部2080は、例えば、復号対象ノードの平滑化後の属性値Attrsmoothingについて、復号対象ノード自身の予測値Attr0、復号対象ノードと同一の親ノード内のサブノードのうち、復号対象ノード以外のサブノードiにて予測した属性値Attri、重みβi及び閾値Thrを用いて、以下のように、クリッピングを行うことで求めてもよい。
【0242】
【数7】
ここで、クリッピングとは、入力値が、予め定めた最大値より大きい場合は、最大値を出力し、入力値が、予め定めた最小値より小さい場合は、最小値を出力し、それ以外の場合は、入力値をそのまま出力値とする処理である。
【0243】
クリッピングを行う関数Clip3は、
【数8】
である。
【0244】
ここで、RAHT部2080は、対象とするサブノードiについて、復号対象ノードが面隣接するノードとしてもよいし、面隣接するノード及びエッジ隣接するノードとしてもよいし、同一親ノード内の全てのサブノードとしてもよい。
【0245】
また、RAHT部2080は、重みβiとして、ハードコーディングされた値を用いてもよいし、raht_smoothing_clipping_weightsを参照し、その値を用いてもよい。
【0246】
また、RAHT部2080は、閾値Thrとして、ハードコーディングされた値を用いてもよい し、raht_smoothing_clipping_thresholdを参照し、その値を用いてもよい 。
【0247】
以上では、RAHT部2080が色差信号及び輝度信号共にAC係数の復号を行う例について説明したが、RAHT部2080は、Octreeの最下層のみ、色差信号のAC係数の復号をスキップしてもよい。
【0248】
例えば、
図18に示すように、RAHT部2080は、ステップS1401において、Octreeの最下層のみ色差信号のAC係数の復号をスキップするか否かを判定してもよい。
【0249】
スキップする場合、本動作は、ステップS1402へ進む。スキップしない場合、本動作は、ステップS28004へ進む。
【0250】
ステップS1402において、RAHT部2080は、復号対象ノードがOctreeの最下層か否かを判定する。
【0251】
最下層の場合、本動作は、ステップS1403へ進む。最下層ではない場合、本動作は、ステップS28004へ進む。
【0252】
ステップS1403において、RAHT部2080は、色差信号以外のAC係数の復号を行う。
【0253】
RAHT部2080は、色差信号以外のAC係数の復号については、ステップS28004と同様の処理を行い、色差信号のAC係数を0として、後続のステップS28005の属性値の算出を行う。
【0254】
色差信号以外のAC係数の復号が完了した後、本動作は、ステップS28006へ進む。
【0255】
図19は、ステップS28111のインター予測処理の一例を示す図である。
【0256】
RAHT部2080は、処理対象ノードのAC係数について、参照フレーム内の対応するノードである参照ノードの情報を用いて予測する。ここで、参照ノードの情報は、その属性値やAC係数であってもよい。また、参照フレームは、別の復号済みのフレームを指し、その情報は、前レームバッファ2120に含まれるとしてもよい。
【0257】
RAHT部2080は、参照フレームには、処理対象フレームと同じOctree構造を当てはめてもよい。かかる場合、点がない位置にノードが設定される可能性がある。そのようなノードを空ノードと呼ぶ。参照ノードが空ノードだった場合、RAHT部2080は、ステップS28110で、インター予測を実行不可としてもよい。
【0258】
RAHT部2080は、参照フレームに対して、処理対象フレームと独立にOctreeを適用し、処理対象フレームと異なるOctree構造を設定してもよい。かかる場合、必ずしも処理対象フレームと同じ位置にノードが存在しない可能性がある。処理対象ノードに対応する位置に参照ノードが見つからない場合、RAHT部2080は、ステップS28143で、インター予測を実行不可としてもよい。
【0259】
参照ノードが空ノードだった場合、或いは、参照ノードが見つからなかった場合、RAHT部2080は、参照フレーム内の近傍位置のノードの情報を用いて参照ノードの情報を推定して補間してもよい。
【0260】
例えば、RAHT部2080は、参照ノード位置に対する隣接ノード、最近傍ノード或いはk近傍ノードの属性値又はAC係数の平均値を、それぞれ参照ノードの属性値又はAC係数として推定して補間してもよい。
【0261】
RAHT部2080は、処理対象ノードのAC係数について、例えば、参照ノードの属性値から予測してもよい。
【0262】
具体的には、RAHT部2080は、参照ノードの復号済みの属性値の値Attrinterを用いて処理対象ノードの属性値の予測値Attrpredを求め、かかる処理対象ノードの属性値の予測値Attrpredに対してRAHTを適用することで処理対象ノードのAC係数の予測値ACpredを求めるとしてもよい。
【0263】
Attrpred=Attrinter
ACpred=RAHT(Attrpred)
RAHT部2080は、処理対象ノードのAC係数について、例えば、参照ノードのAC係数から直接予測してもよい。
【0264】
具体的には、RAHT部2080は、参照フレームにおいてRAHTを用いて参照ノードのAC係数の値ACinterを算出し、その値を処理対象ノードのAC係数の予測値ACpredとしてもよい。
【0265】
ACpred=ACinter
RAHT部2080は、参照ノードのAC係数について、参照フレームの各ノードのAC係数をフレームバッファ2120内に記録しておき、フレームバッファ2120内の値を参照することで得てもよい。かかる場合、RAHT部2080は、フレームバッファ2120内で参照ノードのAC係数が存在しない場合に、ステップS28110で、インター予測が実行不可としてもよい。
【0266】
なお、RAHT部2080は、Attrinter及びACinterについて、それぞれスケーリングファクタαによってα倍してもよい。
【0267】
Attrpred=αAttrinter
或いは
ACpred=αACinter
係数αは、任意の実数をとってよい。係数αは、ノードごとに復号されてもよいし、階層ごとに復号されてもよい。係数αは、スライスデータに含まれていてもよい。
【0268】
例えば、係数αを、以下のように階層の深さdepthを用いて定義し、係数αの代わりにα’が復号されてもよい。
【0269】
α=1+α’・2-depth
例えば、整数βを、整数aから整数bまでの範囲を取る整数を定義し、βを復号してもよい。係数αは、以下のように、復号したβに整数cを加算した後、整数cで除算した値として算出してもよい。
【0270】
α=(β+c)/c
整数βは、指数ゴロム符号を用いて復号してもよい。
【0271】
あるいは、係数αは復号器で導出してもよい。
【0272】
例えば、復号対象ノードの親ノードのAC係数ACparentと、親ノードを復号した際のインター予測値ACparent_interを用いて、以下のように算出してもよい。
【0273】
α=ACparent/ACparent_inter
例えば、復号対象ノードのN個の隣接ノードのAC係数ACneighbor1、ACneighbor2、…、ACneighborNと、各隣接ノードを復号した際のインター予測値ACneighbor_inter1、ACneighbor_inter2、…、ACneighbor_interNを用いて、コストが最小になるようにαを算出してもよい。コストとは、例えば、各隣接ノードのAC係数とAC係数の予測器の二乗誤差の総和としてもよい。隣接ノードは、例えば、面を隣接するノードのみを対象としてもよいし、面を隣接するノードとエッジを隣接するノードを対象としてもよい。
【0274】
RAHT部2080は、同様の操作を、ステップS28003におけるDC係数のインター予測で行ってもよい。
【0275】
DCpred=αDCinter
ここで、参照ノードのDC係数をDCinterとし、ルートノードのDC係数の予測値をDCpredとする。
【0276】
また、RAHT部2080は、インター予測及びイントラ予測を組み合わせて属性値或いはAC係数の予測値を算出してもよい。
【0277】
例えば、RAHT部2080が属性値の予測を求める場合の例について以下に示す。
【0278】
Attrpred=Winter・Attrinter+Wintra・Attrintra
ここで、Attrinter及びAttrintraは、それぞれ属性値のインター予測及びイントラ予測とする。また、Winter及びWintraは、それぞれインター予測及びイントラ予測の重みとする。Winter及びWintraは、処理対象階層の深さdepthによって深い層ほどイントラ予測が重視されるように定めてもよい。例えば、
Winter=1-depth/N
Wintra=depth/N
Nは、インター予測が有効な階層の深さの最大値とする。インター予測及びイントラ予測の組み合わせは、特定の階層でのみ有効としてもよい。例えば、M<depth<Nでのみ、インター予測及びイントラ予測の組み合わせは、有効としてもよい。Mは、N未満の任意の実数とし、APS等のヘッダ情報として復号されてもよい。
【0279】
(点群符号化装置100)
以下、
図20を参照して、本実施形態に係る点群符号化装置100について説明する。
図20は、本実施形態に係る点群符号化装置100の機能ブロックの一例について示す図である。
【0280】
図20に示すように、点群符号化装置100は、座標変換部1010と、幾何情報量子化部1020と、ツリー解析部1030と、近似表面解析部1040と、幾何情報符号化部1050と、幾何情報再構成部1060と、色変換部1070と、属性転移部1080と、RAHT部1090と、LoD算出部1100と、リフティング部1110と、属性情報量子化部1120と、属性情報符号化部1130と、フレームバッファ1140とを有する。
【0281】
座標変換部1010は、入力点群の3次元座標系から、任意の異なる座標系への変換処理を行うよう構成されている。座標変換は、例えば、入力点群を回転することにより、入力点群のx、y、z座標を任意のs、t、u座標に変換してもよい。また、変換のバリエーションの1つとして、入力点群の座標系をそのまま使用してもよい。
【0282】
幾何情報量子化部1020は、座標変換後の入力点群の位置情報の量子化及び座標が重複する点の除去を行うように構成されている。なお、量子化ステップサイズが1の場合は、入力点群の位置情報と量子化後の位置情報とが一致する。すなわち、量子化ステップサイズが1の場合は、量子化を行わない場合と等価になる。
【0283】
ツリー解析部1030は、量子化後の点群の位置情報を入力として、後述のツリー構造に基づいて、符号化対象空間のどのノードに点が存在するかについて示すoccupancy codeを生成するように構成されている。
【0284】
ツリー解析部1030は、本処理において、符号化対象空間を再帰的に直方体で区切ることにより、ツリー構造を生成するように構成されている。
【0285】
ここで、ある直方体内に点が存在する場合、かかる直方体を複数の直方体に分割する処理を、直方体が所定のサイズになるまで再帰的に実行することでツリー構造を生成することができる。なお、かかる各直方体をノードと呼ぶ。また、ノードを分割して生成される各直方体を子ノードと呼び、子ノード内に点が含まれるか否かについて0又は1で表現したものがoccupancy codeである。
【0286】
以上のように、ツリー解析部1030は、所定のサイズになるまでノードを再帰的に分割しながら、occupancy codeを生成するように構成されている。
【0287】
本実施形態では、上述の直方体を常に立方体として8分木分割を再帰的に行う「Octree」と呼ばれる手法、及び、8分木分割に加え、4分木分割及び2分木分割を行う「QtBt」と呼ばれる手法を使用することができる。
【0288】
ここで、「QtBt」を使用するか否かについては、制御データとして点群復号装置200に伝送される。
【0289】
或いは、任意のツリー構成を用いるPredictive geometry codingを使用するように指定されてもよい。かかる場合、ツリー解析部1030が、ツリー構造を決定し、決定されたツリー構造は、制御データとして点群復号装置200へ伝送される。
【0290】
例えば、ツリー構造の制御データは、
図9及び
図18で説明した手順で復号できるよう構成されていてもよい。
【0291】
近似表面解析部1040は、ツリー解析部1030によって生成されたツリー情報を用いて、近似表面情報を生成するように構成されている。
【0292】
近似表面情報は、例えば、物体の3次元点群データを復号する際等において、点群が物体表面に密に分布しているような場合に、個々の点群を復号するのではなく、点群の存在領域を小さな平面で近似して表現したものである。
【0293】
具体的には、近似表面解析部1040は、例えば、「Trisoup」と呼ばれる手法で、近似表面情報を生成するように構成されていてもよい。また、Lidar等で取得した疎な点群を復号する場合は、本処理を省略することができる。
【0294】
幾何情報符号化部1050は、ツリー解析部1030によって生成されたoccupancy code及び近似表面解析部1040によって生成された近似表面情報等のシンタックスを符号化してビットストリーム(幾何情報ビットストリーム)を生成するように構成されている。ここで、ビットストリームには、例えば、
図4で説明したシンタックスを含まれていてもよい。
【0295】
符号化処理は、例えば、コンテクスト適応二値算術符号化処理である。ここで、例えば、シンタックスは、位置情報の復号処理を制御するための制御データ(フラグやパラメータ)を含む。
【0296】
幾何情報再構成部1060は、ツリー解析部1030によって生成されたツリー情報及び近似表面解析部1040によって生成された近似表面情報に基づいて、符号化対象の点群データの各点の幾何情報(符号化処理が仮定している座標系、すなわち、座標変換部1010における座標変換後の位置情報)を再構成するように構成されている。
【0297】
フレームバッファ1140は、幾何情報再構成部1060によって再構成された幾何情報を入力とし、参照フレームとして保存するように構成されている。
【0298】
保存された参照フレームは、ツリー解析部1030において時間的に異なるフレームのインター予測を行う場合に、フレームバッファ1140から読み出されて参照フレームとして使用される。
【0299】
ここで、各フレームに対してどの時刻の参照フレームを用いるかどうかが、例えば、符号化効率を表すコスト関数の値に基づいて決定され、使用する参照フレームの情報が制御データとして点群復号装置200へ伝送されてもよい。
【0300】
色変換部1070は、入力の属性情報が色情報であった場合に、色変換を行うように構成されている。色変換は、必ずしも実行する必要は無く、色変換処理の実行の有無については、制御データの一部として符号化され、点群復号装置200へ伝送される。
【0301】
属性転移部1080は、入力点群の位置情報、幾何情報再構成部1060における再構成後の点群の位置情報及び色変換部1070での色変化後の属性情報に基づいて、属性情報の歪みが最小となるように属性値を補正するように構成されている。具体的な補正方法は、例えば、非特許文献1に記載の方法を適用できる。
【0302】
RAHT部1090は、属性転移部1080による転移後の属性情報及び幾何情報再構成部1060によって生成された幾何情報を入力とし、RAHT(Region Adaptive Hierarchical Transform)と呼ばれるHaar変換の一種を用いて、各点の残差情報を生成するように構成されている。
【0303】
復号される情報は、符号化処理においてRAHTを用いることで生成された属性情報の直流成分(DC係数)及び交流成分(AC係数)であり、復号処理において、RAHTの逆変換を用いることで属性情報に変換される。
【0304】
RAHTの具体的な処理としては、例えば、上述の非特許文献1に記載の方法を用いることができる。
【0305】
LoD算出部1100は、幾何情報再構成部1060によって生成された幾何情報を入力とし、LoD(Level of Detail)を生成するように構成されている。
【0306】
LoDは、ある点の属性情報から、他のある点の属性情報を予測し、予測残差を符号化或いは復号するといった予測符号化を実現するための参照関係(参照する点及び参照される点)を定義するための情報である。
【0307】
言い換えると、LoDは、幾何情報に含まれる各点を複数のレベルに分類し、下位のレベルに属する点については上位のレベルに属する点の属性情報を用いて属性を符号化或いは復号するといった階層構造を定義した情報である。
【0308】
LoDの具体的な決定方法としては、例えば、上述の非特許文献1に記載の方法を用いてもよい。
【0309】
リフティング部1110は、LoD算出部1100によって生成されたLoD及び属性転移部1080での属性転移後の属性情報を用いて、リフティング処理により残差情報を生成するように構成されている。
【0310】
リフティングの具体的な処理としては、例えば、上述の非特許文献1に記載の方法を用いてもよい。
【0311】
属性情報量子化部1120は、RAHT部1090又はリフティング部1110から出力される残差情報を量子化するように構成されている。ここで、量子化ステップサイズが1の場合は、量子化を行わない場合と等価である。
【0312】
属性情報符号化部1130は、属性情報量子化部1120から出力される量子化後の残差情報等をシンタックスとして符号化処理を行い、属性情報に関するビットストリーム(属性情報ビットストリーム)を生成するように構成されている。
【0313】
符号化処理は、例えば、コンテクスト適応二値算術符号化処理である。ここで、例えば、シンタックスは、属性情報の復号処理を制御するための制御データ(フラグ及びパラメータ)を含む。
【0314】
点群符号化装置100は、以上の処理により、点群内の各点の位置情報及び属性情報を入力として符号化処理を行い、幾何情報ビットストリーム及び属性情報ビットストリームを出力するように構成されている。
【0315】
また、上述の点群符号化装置100及び点群復号装置200は、コンピュータに各機能(各工程)を実行させるプログラムであって実現されていてもよい。
【0316】
なお、上記の各実施形態では、本発明を点群符号化装置100及び点群復号装置200への適用を例にして説明したが、本発明は、かかる例のみに限定されるものではなく、点群符号化装置100及び点群復号装置200の各機能を備えた点群符号化/復号システムにも同様に適用できる。
【産業上の利用可能性】
【0317】
なお、本実施形態によれば、例えば、動画像通信において総合的なサービス品質の向上を実現できることから、国連が主導する持続可能な開発目標(SDGs)の目標9「レジリエントなインフラを整備し、持続可能な産業化を推進するとともに、イノベーションの拡大を図る」に貢献することが可能となる。
【符号の説明】
【0318】
10…点群処理システム
100…点群符号化装置
1010…座標変換部
1020…幾何情報量子化部
1030…ツリー解析部
1040…近似表面解析部
1050…幾何情報符号化部
1060…幾何情報再構成部
1070…色変換部
1080…属性転移部
1090…RAHT部
1100…LoD算出部
1110…リフティング部
1120…属性情報量子化部
1130…属性情報符号化部
1140…フレームバッファ
200…点群復号装置
2010…幾何情報復号部
2020…ツリー合成部
2030…近似表面合成部
2040…幾何情報再構成部
2050…逆座標変換部
2060…属性情報復号部
2070…逆量子化部
2080…RAHT部
2090…LoD算出部
2100…逆リフティング部
2110…逆色変換部
2120…フレームバッファ