(58)【調査した分野】(Int.Cl.,DB名)
木データ構造を三つの部分に区画するプロセッサであって、シンボルの第一のシーケンスは前記木データ構造の中央部に対応し、シンボルの第二のシーケンスは前記木データ構造の上部に対応し、シンボルの第三のシーケンスは前記木データ構造の下部に対応し、前記木データ構造の親ノードの子ノードは、該親ノードが分割されるセルの一つを表わす、プロセッサと;
シンボルの前記第一のシーケンス内のあるシンボルが第一のシンボル集合に属さないことを判別するコントローラと;
前記判別されたシンボルを表わすために、所定のシンボルを、前記第一のシンボル集合および前記所定のシンボルについての統計的モデルを使って、エンコードする第一のエントロピー符号化エンジンと;
前記シンボルおよびシンボルの前記第二のシーケンスを、第二のシンボル集合についての統計的モデルを使ってエンコードする第二のエントロピー符号化器とを有しており、
前記第二のシンボル集合は前記第一のシンボル集合の上位集合であり、前記所定のシンボルは前記第一のシンボル集合に属さない、
装置。
請求項15記載の装置であって、あるノードの子ノードが、第三のシンボルが前記第一のシンボル集合に属さなければ前記木データ構造の上部に含められ、前記ノードの子ノードが、前記第三のシンボルが前記第一のシンボル集合に属するならば前記木の中央部に含められ、前記ノードは前記第三のシンボルに関連付けられている、装置。
請求項19記載の装置であって、ある第三のシンボルが前記第一のシンボル集合に属するならば、あるノードについての子ノードに関連付けられたシンボルを復号するために前記第一のエントロピー復号エンジンが使われ、前記第三のシンボルが前記第一のシンボル集合に属さないならば、前記ノードについての子ノードに関連付けられた前記シンボルを復号するために前記第二のエントロピー復号エンジンが使われ、前記ノードは前記第三のシンボルに関連付けられている、装置。
【発明を実施するための形態】
【0012】
ランダムな点位置および水密な3Dモデルの頂点位置のような幾何データを圧縮するために、空間木に基づくアプローチを使うことができる。そうしたアプローチは八分木またはk-d木によって入力空間点を組織化する。木はたどられ、木の復元に必要とされる情報が記憶される。
【0013】
最初、3Dモデルのすべての点のまわりにバウンディングボックスが構築される。最初は、すべての3D点のバウンディングボックスが単一のセルと見なされる。空間木を構築するために、セルは再帰的に細分され、最後には空でない各セルが一つのみの頂点を含み、かつ頂点位置の十分精密な再構成を可能にするほど小さくなる。頂点位置は、対応するセルの中心座標から復元されることができるので、空間木に基づくアルゴリズムは、単一解像度圧縮アルゴリズムと同じ圧縮比をもつ多解像度圧縮を達成しうる。
【0014】
k-d木に基づくアプローチでは、
図1に示されるように、セルは二つの子セルに細分され、二つの子セルの一方における頂点数が各反復工程においてエンコードされる。親セルがp個の頂点を含む場合、子セルの一つにおける頂点数は算術符号化器を用いてlog
2(p+1)ビットを使ってエンコードできる。
【0015】
他方、八分木に基づくアプローチは、各反復工程において、空でないセルを八つの子セルに細分する。解説の簡単のため、四分木を記述する2Dの例が
図2および
図3に示されている。たどる順序は矢印によって示されている。エンコードのためには、現在の親セルが、あらかじめ定義された順序でたどられる四つの子セルに分割される。子セル当たり単一のビットが、その子セル内に点があるか否かを示す。たとえば、
図2では、二つの親セル1および2の子セルは矢印で示されるようにたどられる。空でない子セルは灰色にされている。第一の親セル1の子セル210、211、212および213は第一のシーケンス「1010」によって表わされる。このたどり方の第一および第三の子セル210、212は空でない(すなわち、一つまたは複数の点を含む)ので、「1」によって指示されている。第二および第四の子セル211、213は空であり(すなわち、点を含まない)、「0」によって示される。
図3は、異なるたどり方を使った同じセルおよび結果として得られるシーケンスを示している。
【0016】
図4は、八分木方式の親セルおよび子セルを示している。八分木方式では、親セルは八つの子セル40、……、46に分割される(左下のセル42の背後の一つの隠されている子セルは図示していない)。一つの可能なたどる順序は左‐右、上‐下および前‐後であることができ、その結果、セルのたどるシーケンスは40‐41‐42‐43‐44‐45‐(左下のセル42の背後の隠れているセル)‐46となる。対応して、八分木の場合、空でない子セル構成は、空と空でない子セルの255通りのすべての可能な組み合わせをカバーする、8ビット二進値によって表わされる。空でない子セルの数を別途エンコードすることは必要ない。表1は、シーケンスの例である。
【0017】
11111111
01100110
00111011
11001100
……
00010000
00000010
00000010
10000000
00000001
表1 例示的なシーケンス。
【0018】
親セル内の子セルの特定のたどる順序は本願の実施形態についてあまり重要でないことを注意しておく。原理的には、いかなるたどる順序も本願の実施形態のために使用できる。以下では、子セル構成を表わすために使われるビット列〔ストリング〕がシンボルと記される。表1の例では、各シンボルについて8ビットが使用される。他の実装では、シンボル中のビット数は変わってもよい。たとえば、四分木についての子セル構成を表わすには4ビットのストリングが使用される。よって、
図2の例におけるシンボルのためのビット数は4である。
【0019】
図5は、八分木構造の例を示している。各ノードはシンボルに関連付けられており、各層はこの木表現のある精度に対応する。初期セルは八つのセルに分割される。子セル1、2、5、6および7はより多くの頂点を含み、子セル3、4および8は空であり、結果として層0における子セル構成を表わす8ビット・シンボル11001110(510)を生ずる。空でない各子セルはさらに分割され、対応する子セル構成が層1に表わされている。細分は、空でない各セルが一つの頂点しか含まなくなるまで続けられてもよい。
【0020】
八分木の幅優先のたどり方を使うと、3Dメッシュの頂点位置がシンボルのシーケンスに整理されることができる。
図5における例については、シンボルのシーケンスは:11001110、11000000、10010100、00100110、00001000および00001000となる。
【0021】
【表1】
ある複雑な3Dモデルにおける最も頻繁に現われる諸シンボルの確率分布が、表2において確率の降順に示されている。表2から見て取れるように、二進表現において「1」を一つしかもたないシンボルは優勢な確率(>93%)で現われる。幾何学的な説明は、何回かの細分を経たあとでは頂点どうしがセルを共有することはまれだということでありうる。すなわち、八分木の下のほうの層は「1」が一つしかないシンボルによって支配され、他のシンボルは上のほうの層によりしばしば現われる。
【0022】
本願の実施形態に基づき、二つのシンボル集合を定義する:あらゆる可能なシンボルを含む全体シンボル集合S0={1,2,3,……,255}および「1」を一つもつシンボルのみを含むシンボル集合S1={1,2,4,8,16,32,64,128}、すなわち最も頻繁に現われるシンボルである。シンボルは、シンボル集合S1に属する場合にはS1シンボルと呼ばれ、そうでない場合には非S1シンボルと呼ばれる。
【0023】
八分木の統計的な属性から裨益するため、本願と同じ所有者の「八分木圧縮のためのモデル適応的なエントロピー符号化方法」と題するPCT出願第PCT/CN2011/077279号は、八分木によって表わされるシーケンスを、適応的にS0またはS1を用いて符号化されるいくつかのサブシーケンスに区画することを提案している。サブシーケンス境界のインデックスは補助情報として符号化される。補助情報のオーバーヘッド(たとえば各インデックスについて2バイト)のため、一般に、連続するS1シンボルの大きなサブシーケンスはシンボル集合S1を用いて符号化される。
【0024】
シーケンスのある部分にS1シンボルおよび非S1シンボルの両方が現われ、S1シンボルがずっと高い確率をもつときは、そのような部分をいくつかのサブシーケンスに分割することは、オーバーヘッドのため、効率的ではない。他方、非S1シンボルは低い確率で現われるので、そのような部分をシンボル集合S0を用いて符号化することも効率的ではない。
【0025】
本願の原理は、シーケンスの異なる部分において変化する統計をもつシンボルのシーケンスを効率よく圧縮するための階層的なエントロピー符号化/復号の方法および装置を提供する。以下の実施形態は、主に、3Dメッシュ/モデルの八分木表現に基づくが、本願の原理は、下記でさらに定義される他のデータ/セットまたはアプリケーションにも適応されうる。
【0026】
図6は、シンボルのシーケンスが三つのサブシーケンスに区画されうる様子および三つの異なるシンボル集合がエンコードに使われる様子を示す例である。本願の実装では、あるシンボル集合を使ってシンボルのシーケンスをエントロピー符号化するとは、そのシンボル集合についての統計的モデル、すなわちそのシンボル集合の各シンボルの確率がエントロピー符号化に使われることを意味する。通例、そうした確率は、特定のシンボル集合についての大きなデータ・セットを使ってトレーニングされる。したがって、二つの異なるシンボル集合に現われるシンボルは、二つのシンボル集合において異なる確率に対応しうる。表2の例について、シンボル「10000000」はS0およびS1の両方に現われ、S0ではProb('10000000')=0.1162であり、S1ではProb('10000000')=0.1245である。
【0027】
解説の簡単のため、
図6では八分木の代わりに二分木610が使われている。この二分木における各ノードは2ビットのシンボルと関連付けられる。シンボルが「11」であるとき、そのシンボルが二つの子ノードをもつ。シンボルが「10」であるとき、そのシンボルは左の子ノードのみをもつ。シンボルが「01」であるとき、そのシンボルは右の子ノードのみをもつ。シンボル集合S0は三つの可能なシンボルすべてを含む。この例では、シンボル集合S1はシンボル「01」および「10」を含む。いずれもビット列中「1」を一つのみもつ。このように、この例では、シンボル集合S0は八分木についての全体シンボル集合に対応し、S1はシンボル集合{1,2,4,8,16,32,64,128}に対応する。
【0028】
二分木610では、シンボル「10」および「01」が下のほうの層を支配し、「11」は上のほうの層でより高い確率をもつ。二分木610は三つの部分に分割され、各部分はシンボルのサブシーケンスに対応する。木の上部P0はサブシーケンス620に対応し、中央部P2はサブシーケンス630に対応し、下部P1はサブシーケンス640に対応する。シンボル集合S0のすべてのシンボルはサブシーケンス620および630において存在するが、「11」は630よりも620においてより頻繁に生起する。この例では、サブシーケンス640にはシンボル「01」および「10」のみが現われる。P1に「11」も含まれることができることも可能だが、確率はずっと低い。
【0029】
サブシーケンス620は、シンボル集合S0を使ってエントロピー符号化され、サブシーケンス640はS1を使ってエントロピー符号化される。サブシーケンス630は、本願の原理に基づく階層的なエントロピー符号化機構を用いてエンコードされる。
【0030】
図7は、3Dメッシュの幾何データを圧縮するための例示的な方法700を示している。この方法では、幾何データは八分木によって表わされる。八分木はまず三つの部分P0、P1およびP2に区画され、三つのシンボル集合S0、S1およびS2が定義される。木の各部分は、適切な統計的モデルを用いて効率的に圧縮される。この例では、S1はS0の部分集合であり、S2はS1と所定のシンボル「X」との和集合である、すなわちS2={S1,'X'}。他の実施形態では、S0およびS1は他のシンボルを含んでいてもよく、S2はS1と他の関係にあってもよい。各部分をエントロピー符号化することによって三つのサブストリームが形成される。次いで、それら三つのサブストリームを他の情報、たとえば適正な復号を可能にするための補助情報と組み合わせることによって、ビットストリームが生成されうる。
【0031】
方法700は、機能ブロック710に制御を渡す開始ブロック705を含む。ブロック710では、3Dメッシュの幾何データが受領され、ブロック720では、該幾何データを表わすよう八分木が生成される。八分木は、受領された幾何データに対応する完全なシンボルのシーケンスと見なされうる。ブロック730では、八分木が、上部P0、下部P1および中央部P2の三つの部分に区画される。各部分がサブシーケンスに対応する。結果として、完全なシンボルのシーケンスは三つのサブシーケンスに分割される。
【0032】
それらのサブシーケンスは次いでエントロピー符号化される。ブロック740において、上部に対応するサブシーケンスはシンボル集合S0を使ってエントロピー符号化される。ブロック750において、中央部に対応するサブシーケンスは階層的エントロピー符号化を使ってエントロピー符号化される。ブロック760において、下部はシンボル集合S1およびその統計的モデルを使ってエントロピー符号化される。ブロック770では、ヘッダ情報が生成される。ブロック780において、サブストリームおよびヘッダ情報が組み合わされ、コンパイルされて、ビットストリームとなる。次いで制御は終了ブロック799に渡される。
【0033】
方法700では、上部のためのシンボルのサブシーケンスは、中央部および下部についてのサブシーケンスより先にエンコードされる。エンコードの他の順序も使用できる。
【0034】
ブロック750において使用されうる、入力シンボル・シーケンスをエンコードしてビットストリームを出力する例示的な階層的エントロピー符号化方法が
図8において方法800として描かれている。一例では、上記シンボル・シーケンスは八分木の中央部についてのサブシーケンスに対応する。別の実施形態では、上記シンボル・シーケンスは他の源、たとえば四分木によって表現される一組の2D座標から生成されてもよい。
【0035】
方法800は、機能ブロック810に制御を渡す開始ブロック805を含む。ブロック810では、シンボルのシーケンスが入力として受領される。ブロック820では、前記シンボルのシーケンスからシンボルが読まれる。ブロック830では、前記シンボルがシンボル集合S1に属するかどうかが判定される。前記シンボルがS1に属さない場合、ブロック840において所定のシンボル「X」がまずシンボル集合S2(S2={S1,'X'})を使ってエントロピー符号化される。次いでブロック850において前記シンボル自身がエントロピー符号化されるが、ここではシンボル集合S0(S0⊃S1)を使う。前記シンボルがS1に属する場合は、ブロック860においてシンボル集合S2({S1,'X'})を使ってエントロピー符号化される。ブロック870では、シーケンス中のすべてのシンボルがエンコードされたかどうかが検査される。すべてのシンボルがエンコードされていれば、制御は終了ブロック899に渡され、そうでなければ、制御はブロック820に返される。
【0036】
シンボル集合S2は、シンボル集合S1に加えて所定のシンボル「X」を含んでいる。完全なシンボル集合S0の代わりにより小さなシンボル集合S1および追加的なシンボルを使って、八分木の中央部分におけるS1シンボルはより効率的にエンコードされうる。各非S1シンボルはまず「X」として表わされ、「X」としてエントロピー符号化され、それにそのシンボル自身のエントロピー符号化が続く。すなわち、シンボル「X」は非S1シンボルをまとめたものと見なすことができる。したがって、
図8に記述されるエントロピー符号化方法およびその対応する復号方法は、階層的エントロピー符号化/復号と称される。
【0037】
上記の議論は、3Dメッシュの幾何データを圧縮することに主として焦点を当てているが、そのような階層的なエントロピー符号化/復号方法は、シーケンスの異なる部分において異なる統計をもつデータの任意のシーケンスにも適用できる。特に、いくつかの部分はあらかじめ定義された諸シンボル集合を用いてエンコードされてもよく、他の部分は所定のシンボルを前記あらかじめ定義されたシンボル中に導入することによってエンコードされてもよい。この方法の利点は、少数のシンボル集合しか必要とされず、よっていつシンボル集合を切り換えるかを指示することにおけるオーバーヘッドを低減することである。さらに、頻繁に現われるシンボルのために小さなシンボル集合(すなわち、完全なシンボル集合の代わりに、小さなあらかじめ定義されたシンボル集合および所定のシンボル)を使うことは、圧縮効率を改善しうる。
【0038】
本願の原理によれば、幾何データの効率的なエンコードを可能にするために、八分木を適正に区画することが望まれる。ある実施形態では、原則は、下部P1をできるだけ大きくし、非S1シンボルが中央部P2および下部に現われるのを制限することである。
【0039】
区画P1およびP2
シンボル集合S2は、シンボル集合S1に比べ一つのさらなるシンボル「X」を含んでいるので、中央部P2の圧縮効率はP1の圧縮効率より低い。よって、高い符号化効率を得るためには、S1によって効率的にエンコードできる大きなP1が所望される。P1をできるだけ大きくするため、P1では非S1シンボルも許容される。
【0040】
S1シンボルはシンボル集合S1によって圧縮される一方、非S1シンボルはシンボル集合S0を用いて圧縮される。非S1シンボルの位置を示すため、層インデックスおよび層内での非S1シンボルの位置がビットストリーム中に書き込まれる。非S1シンボルのエンコードは、シンボルおよびその位置の両方がエンコードされる必要があるので、コスト高である。よって、P1における非S1シンボルの数は限定されるべきである。
【0041】
P1のサイズとP1内の非P1シンボルの数との間のバランスに達するため、閾値に基づく方法が使われる。この方法では、八分木の幅優先(breadth-first)のたどり方によって得られるシンボル・シーケンスをSEQ_BFとして定義する。次いで、SEQ_BFの終わりから非S1シンボルを探し、非S1シンボルがみつかり、かつ、この非S1シンボルと前にみつかった非S1シンボルとの間の距離がth1より小さいときに探索を止める。この非S1シンボルより下のすべての層はP1の一部である。P1を得るために八分木がどのように区画されているかを示すために、下部P1の最上層のインデックスがビットストリーム中に書き込まれる。
【0042】
区画P0およびP2
上部P0を中央部P2から分離するためにもう一つの閾値が使われる。この区画を決定するために、まずSEQ_BFを始めから一層ずつスキャンする。th0%より多くの非S1シンボルを含む各層は初期の上部P0に含められる。ここで、th0はあらかじめ定義された閾値である。スキャンは、th0%より少ない非S1シンボルを含む層に達したときに停止する。スキャンが停止する層およびそれより上の諸層が初期の上部P0をなす。下部P1および初期のP0を除いた層が初期の中央部P2をなす。初期のP2におけるいくつかの層も、th0%より多い非S1シンボルを含むことがありうることを注意しておく。
【0043】
S1シンボルに関連付けられたノードはS1ノードとして定義される。それ以外は非S1ノードである。上部P0の端末ノード(すなわち葉)の集合はP0の下側境界として定義される。たとえば、初期のP0の下側境界は初期のP0におけるノードの最低層である。次いで、P0とP2の分離は、P0の下側境界を使って再帰的に洗練される:非S1ノードの子がP0に含められ、S1ノードの子がP2に含められる。下部P1からのシンボルはP0やP2の一部にはならないべきであることを注意しておく。
【0044】
図9に目を転じると、P0がどのようにしてP2から分離されるかを描く例が概括的に方法900として示されている。方法900は、機能ブロック910に制御を渡すブロック905をもって始まる。ブロック910では、木データ構造が入力として受領される。この例では、木データ構造は、下部P1を除いた八分木に対応する。
図6における二分木のような他の木データ構造が区画(partitioning)のために入力されることもできる。閾値th0を使って、初期の上部P0および初期の中央部P2がブロック920において形成される。ブロック930では、P0の下側境界からノードが読まれる。ブロック940では、そのノードがS1ノードであるかどうかが検査される。そのノードがS1ノードであれば、ブロック950において、その子ノードが中央部P2に含められる。そうでなければ、ブロック960において、その子ノードが上部P0に含められる。次いで、ブロック970において、上部P0、中央部P2およびP0の下側境界が更新される。ブロック980では、P0の下側境界に非S1ノードがあるかどうかが検査される。非S1ノードがあれば、制御はブロック930に返され、なければ制御は終了ブロック999に渡される。
【0045】
先に論じたように、S1ノードは通例、八分木中のノードの90%より多くからなる。よって、極端な場合、下部P1を除いたすべてのノードはシンボル集合S2を用いてエンコードされることができ、P0とP2の間の分離は必要とされない。しかしながら、この結果大量の「X」が生じることがあり、エンコードの効率が下がる。一般に、非S1ノードは八分木の上のほうの層にずっと頻繁に現われるので、P0を分離して出して、P0をシンボル集合S0を用いてエンコードするほうがずっと効率的である。
【0046】
上記のあらかじめ定義された閾値については、符号化されるべき頂点位置の型によって決定されてもよい。一例では、th0=15およびth1=50が疎な点位置の圧縮のために使われる。別の例では、th0=10およびth1=200が、ある種の3Dモデルから得られる水密な頂点のために使われる。
【0047】
先の例において、シンボル集合S2はシンボル集合S1と「X」の和集合である。すなわち、S2は、S1に比べて単に一つ多いシンボルを含んでいる。他の実施形態では、S2は他の形を取ってもよい。たとえば、ある種の非S1シンボルがP2において高い確率で現われるとき、そうした非S1シンボルはP2に含められることができる。ある実施形態では、二進表現において二つの「1」をもつシンボルがより多くの「1」をもつシンボルより頻繁に現われ、よってこれらのシンボルもS2に含められる。結果として、S2は{3,5,9,17,33,65,129,6,10,18,34,66,130,12,20,36,68,132,24,40,72,136,48,80,144,96,160,192,1,2,4,8,16,32,64,128,X}となり、8+28+1=37個のシンボルを含む。
【0048】
八分木が三つの部分に区画されたのち、対応するサブシーケンスが圧縮される。シンボル集合S0、S1およびS2の初期の統計的モデルがコーデックに入力として与えられる。エンコードおよびデコード・プロセスの間に、よりよい圧縮効率のために統計的モデルはさらに更新される。
【0049】
統計的モデルをトレーニングするために大量の頂点データが使用される。対応するシンボル集合について統計を集めるために、それぞれP0、P1およびP2のために三つのデータ・セットが構築される。P2内のすべての非S1シンボルは、S2についての統計的モデリング・プロセスの間は「X」と見なされることを注意しておく。
【0050】
本実施形態では、三つのサブストリーム、サブストリーム1、2および3が生成される。それらのサブストリームがどのように編成されているかに依存して、サブストリームはサブシーケンスまたは特定のシンボル集合をもつエントロピー符号化エンジンに対応することがある。サブストリームの数は他の実施形態では三つより多くてもよい。たとえば、サブシーケンスおよびシンボル集合の各組み合わせについて別個のサブストリームが生成されるときである。
【0051】
我々の実施形態では、算術符号化がエントロピー符号化に使われる。他のエントロピー符号化方法、たとえばハフマン符号化および辞書ベースの圧縮を使うこともできる。
【0052】
受信側がサブストリームを適正に復号できるようにするために、サブストリームに加えて補助情報がビットストリーム中に書き込まれる。
図10のAは、例示的なビットストリーム・フォーマットを示している。この例示的なビットストリームは、ヘッダ1010、サブストリーム1(1020)、サブストリーム2(1030)およびサブストリーム3(1040)からなる。ヘッダ1010は
図10のBにおいてさらに示されている。ヘッダ中の補助情報のフォーマットは、下部P1がどのように中央部P2から分離されているかについての情報を、P1の最上層のインデックス(「layer_index」、1050)を使って提供する。下部P1における非S1シンボルの位置を示すために、ヘッダはP1における非S1シンボルの数(「No_non_S1」、1060)、続いてその位置(「location_non_S1
i」、1070および1075)を提供する。ヘッダはまた、サブストリーム1(「len_substream1」、1080)およびサブストリーム2の長さ(「len_substream2」、1090)も提供する。
【0053】
図11では、生成されたビットストリームを復号し、八分木を再構成するための例示的な方法1100が示されている。八分木は、エントロピー復号が進むにつれて構築される。シンボルが復号されたあと、八分木中のノードが構築される。ただし、所定のシンボル「X」が復号されるときを除く。上部P0におけるシンボルはシンボル集合S0を使って復号される。中央部P2におけるシンボルはまずシンボル集合S2を使って復号される。「X」が復号されたときは、ノードを再構成するためにS0を使って追加的なシンボルが復号される。すなわち、「X」に対応するノードは構築されない。下部P1における非S1シンボルはシンボル集合S0を使って復号され、その位置はヘッダからわかる。他のシンボル、すなわちP1におけるS1シンボルはシンボル集合S1を使って復号される。
【0054】
方法1100は、機能ブロック1110に制御を渡す開始ブロック1105で始まる。ブロック1110では、ビットストリームが受領される。ブロック1120では、ビットストリームからシンボルがデコードされる。ブロック1130では、非「X」シンボルがデコードされたときに前記八分木のあるノードが再構成される。ブロック1140では、八分木が完全に再構成されたかどうか、すなわち八分木構築がそれ以上のシンボルを要求していないかどうかが検査される。木が完成していなければ、制御はブロック1120に返される。完成していれば、ブロック1150において、3Dメッシュの幾何データが復元され、制御は終了ブロック1199に渡される。
【0055】
入力ビットストリームをデコードしてデコードされたシーケンスを出力する例示的な階層的なエントロピー復号方法1200が
図12に描かれている。方法1200は機能ブロック1210に制御を渡す開始ブロック1205で始まる。1210ではビットストリームが受領される。ブロック1220では、S2={S1,'X'}についての統計的モデルを使って、ビットストリームからシンボルがデコードされる。ブロック1230では、デコードされたシンボルが所定のシンボル「X」であるかどうかが検査される。デコードされたシンボルが所定のシンボル「X」でない場合、すなわちS1シンボルである場合、制御はブロック1270に渡される。それ以外の場合には、ブロック1250において、S0を使って別のシンボルがビットストリームからデコードされる。
【0056】
ブロック1270では、エントロピー復号プロセスが終了されるべきかどうかが検査される。ある実施形態では、八分木の中央部が完全に構築されるとき、エントロピー復号プロセスは終了する。他の実施形態では、エントロピー復号器が端末シンボルに到達したかどうかを検査することができる。エントロピー復号が終了されるべきであれば、制御は終了ブロック1299に渡される。そうでなければ、制御はブロック1220に返される。
【0057】
図13は、木の上部を再構成するための例示的な方法1300を示している。木の区画と整合して、八分木を再構成するための幅優先のたどり方が使われる。P0内の層が再構成されるときは常に、非S1シンボルの割合が計算される。木の根から一層ずつスキャンして、th0%より小さい非S1シンボルの割合をもつ最初の層について、それより上の諸層が初期の上部P0をなす。これは、初期の上部P0およびP2が
図9に記載されるように形成された仕方と整合することを注意しておく。
【0058】
方法1300は開始ブロック1305で始まり、制御を機能ブロック1310に渡す。1310では、初期の上部P0が形成される。ブロック1320では、ビットストリームからシンボルが読まれ、ブロック1330ではそのシンボルを使って木の中のあるノードが再構成される。ブロック1340では、そのシンボルがシンボル集合S1に属するかどうかが検査される。S1に属するならば、制御はブロック1360に渡される。そうでなければ、ブロック1350において、そのノードの子ノードがP0ノードとしてマークされる。ブロック1360では、まだ再構成されていないマークされたP0ノードがあるかどうかが検査される。それ以上再構成されるP0ノードがなければ、制御は終了ブロック1399に渡される。もしあれば、制御はブロック1320に返される。
【0059】
図14に方法1400として示されるある例示的な実施形態では、P0が再構成されたのち、P2が再構成される。P0における端末ノードについてのシンボルから、木はその再構成を続ける。ノード1410についてのシンボル「10」は、左の子ノードのみをもつことを表わすので、P2内の第一のシンボルはノード1410の左の子ノード1440として再構成される。同様に、P2における次の二つのシンボルは、ノード1420の左の子ノード1450およびノード1430の右の子ノード1460として再構成される。P2内の第一の層が完了したのち、木の残りの層が再構成される。
【0060】
P1の最上層インデックスが与えられていれば、P2の構築がいつ完了するかがわかる。P2が完了したのちにP1が再構成される。
【0061】
図6は、本願の原理の動作を次元を減らした例によって例解している。理解を簡単にするため、
図6は二分木によって表わされるシンボルがどのように三つのサブシーケンスに分割されるかおよび対応するシンボル集合がどのようにエントロピー符号化に使われるかを記述している。簡単のため、この実施形態では、P1はいかなる非S1シンボルも含まず、閾値th0はP0を形成するとき考慮されない。以下では、この二分木についてのエンコードおよびデコード・プロセスを詳細に記述する。
【0062】
エンコード・プロセス
まず、末端から幅優先のたどり方によってノードにアクセスし、最後の非S1ノードを含んでいる層(670)を位置特定する。この層より下(線650より下)のすべてのノードはP1の一部である。P1の最上層インデックスは、固定長符号化によって圧縮される。P1内のノードの幅優先のたどり方によって形成されるサブシーケンス640は、シンボル集合S1を用いてサブストリーム3に圧縮される。
【0063】
八分木中の残りのノードはさらにP0およびP2に区画される。簡単のため、P0をP2から分離することにおいては閾値th0は考慮されない。すなわち、最上部の数層はP0に含まれねばならないことは必須とされない。次いで、根からの幅優先のたどり方によってノードにアクセスする。非S1シンボルをもつノードに到達すると、その子およびそのシンボル自身がP0に含まれる。そうでない場合には、そのノード自身はP0に含められるが、その子はP2に含められる。ノードをたどるのは、八分木中のすべてのノードが処理されたときに停止する。P1からのノードはP0にもP2にも含められるべきではないことを注意しておく。P0の幅優先のたどり方によって得られるサブシーケンス620はサブストリーム1に圧縮される。
【0064】
もう一つのサブシーケンス630が、P2内のノードの幅優先のたどり方によって形成される。P2からのシンボルはサブストリーム2にエンコードされる。
【0065】
図6の例では、区画され並べ替えられた諸サブシーケンスは次のとおり:
P0についてのサブシーケンス:11,11,11,10,10,11,01,01,01;
P2についてのサブシーケンス:01,01,01,10,11,01,01,01;
P1についてのサブシーケンス:10,10,10,10,01,01,01,01,01,01,10,10。
【0066】
P0およびP1からのサブシーケンスは通常のエントロピー符号化を用いてそれぞれサブストリーム1および3にエンコードされる。P2からのサブシーケンスについては、S1シンボルおよび非S1シンボルが異なる仕方でエンコードされる。この例では、P2には一つの非S1シンボルしかない(「11」、670)。このシンボルをエンコードするために、「X」がまずS2={S1,'X'}を使ってエンコードされる。次いでそのシンボル自身(「11」)がS0を使ってエンコードされる。残りのS1シンボルはS2を使ってエンコードされる。したがって、P2のためには一つの追加的なシンボルがエンコードされる。
【0067】
この例では、サブシーケンスのエンコード結果はサブストリームに編成される。こうして、P0、P2およびP1についてのシンボルは、それぞれ次のようにサブストリーム1、2および3にエンコードされる:
サブストリーム1中のシンボル:11,11,11,10,10,11,01,01,01;
サブストリーム2中のシンボル:01,01,01,10,'X',11,01,01,01;
サブストリーム3中のシンボル:10,10,10,10,01,01,01,01,01,01,10,10。
【0068】
デコード・プロセス
まず、P1の最上層インデックスを示すlayer_indexをデコードする。本願の原理によれば、幅優先のたどり方によって、サブストリーム1からシンボルを復号し、木の上部を再構成する。S1ノードに達したら、その子ノードの再構成はスキップされる。すべてのP0ノードが再構成されたときにノードをたどるのは終了される。
【0069】
次に、幅優先のたどり方によって、サブストリーム2からのシンボルを復号し、木の再構成を続ける。シンボル「X」を得たら、当該ノードの実際のシンボルとして、追加的なシンボルをシンボル集合S0を用いて復号する。P0およびP2内の層の数がlayer_indexによって示される数に達したとき、ノードをたどるのは終了する。
【0070】
次に、幅優先のたどり方によって、サブストリーム3からのシンボルを復号し、木の再構成を続ける。
【0071】
図15は、
図10に記述されたビットストリームを形成するために使用されることのできる例示的なエンコーダのブロック図を描いている。エンコーダ1500の入力は、シンボルのシーケンスおよびP1の最上層の層インデックスを含む。エントロピー符号化エンジン1(1510)はS2={S1,'X'}を使ってシンボルをエンコードする。エントロピー符号化エンジン2(1520)はシンボル集合S0を使ってエンコードし、エントロピー符号化エンジン3(1530)はシンボル集合S1を使ってエンコードする。
【0072】
すべてのエントロピー符号化エンジンはそれぞれの初期の統計的モデルをもって始まる。先に論じたように、初期の統計的モデルは、大きなデータ・セットからトレーニングされることができる。エントロピー符号化エンジンがエンコードを進めるにつれて、統計的モデルは通例、入力データの統計的属性をよりよく捉えるよう更新される。例示的なエンコーダでは、三つの別個のエントロピー符号化エンジンが論じられている。実際的な実装では、これらのエンジンは、さまざまな統計的モデルの間で切り換える一つの単一のエンジンとして実装されてもよい。
【0073】
ヘッダ情報生成器1540はビットストリームのための補助情報を提供する。それは、P1の最上層の層インデックスおよびサブストリーム1および2の長さをエンコードする。下部P1に非S1シンボルがあるときは、それらの位置もヘッダ中にエンコードされる。シーケンスを復号するために必要とされる他の情報もヘッダ中に含められるべきである。八分木を区画するために使われる閾値、たとえばth0およびth1は3Dメッシュに対して適応的であってもよく、ビットストリームによって変わることもある。エンコーダとデコーダを同期させるために、そのような適応的な閾値はヘッダ中に埋め込まれる必要がある。
【0074】
エンコーダ1500は、あるシンボルについてどのエントロピー符号化エンジンが使われるかを決定するなどの機能を実行するためのコントローラ(1550)をも含む。エンコードされたビットおよびヘッダ情報は、たとえば
図10に記載されるフォーマットに従って、ビットストリーム・アセンブラー1560によって、出力ビットストリーム中にパッキングされる。さまざまな要素間の相互接続の詳細は
図15には明示的に示されていないが、必要とされる相互接続は当業者には理解される。
【0075】
図16は、
図15のエンコーダ1500に対応する例示的なデコーダのブロック図を描いている。これは、
図10に記述されるビットストリームをデコードするために使うことができる。デコーダは通例、エンコーダと相補的であることを注意しておく。エントロピー復号エンジン1(1610)は、シンボル集合S2({S1,'X'})を使って、エントロピー符号化エンジン1によってエンコードされたシンボルを復号する。エントロピー復号エンジン2(1620)は、シンボル集合S0を使って、エントロピー符号化エンジン2によってエンコードされたシンボルを復号する。エントロピー復号エンジン3(1630)は、シンボル集合S1およびその関連付けられた統計的モデルを使って、エントロピー符号化エンジン3によってエンコードされたシンボルを復号する。ヘッダ情報パーサー1640は補助情報を復号する。
【0076】
デコーダ1600は、あるシンボルを復号するためにどのエントロピー復号エンジンが使用されるかを決定するなどの機能を実行するためのコントローラ(1650)をも含む。デコーダ1600は、シンボルのシーケンスおよび他の情報、たとえばサブストリームの長さをその出力として提供する。ここでもまた、デコーダの要素間の必要とされる相互接続は当業者には理解される。
【0077】
ここで
図17を参照するに、上記の特徴および原理が適用されうる、データ送信システムまたは装置1700が示されている。データ送信システムまたは装置1700は、たとえば、衛星、ケーブル、電話線または地上波放送などといった多様な媒体のいずれかを使って信号を送信するためのヘッドエンドまたは送信システムなどであってもよい。データ送信システムまたは装置1700はまた、あるいはその代わりに、たとえば記憶のために信号を与えるために使われてもよい。送信は、インターネットまたは他の何らかのネットワークを通じて提供されてもよい。データ送信システムまたは装置1700は、たとえば、ビデオ・コンテンツおよびたとえば3Dメッシュ・モデルなどの他のコンテンツを生成し、送達する機能をもつ。
【0078】
データ送信システムまたは装置1700は、処理されたデータおよび他の情報をプロセッサ1701から受領する。ある実装では、プロセッサ1701は3Dモデルの幾何データを処理し、シンボルのシーケンスを生成する。プロセッサ1701は、たとえば木データ構造がどのように三つの部分に分割されるか、適応的閾値および部分P1中の非S1シンボルの位置を示すメタデータをも1700に提供する。
【0079】
データ送信システムまたは装置1700は、エンコーダ1702およびエンコードされた信号を送信できる送信機1704を含む。エンコーダ1702はプロセッサ1701からデータ情報を受領する。エンコーダ1702はエンコードされた信号(単数または複数)を生成する。エンコーダ1702のエントロピー符号化エンジンはたとえば、算術符号化またはハフマン符号化であってもよい。
【0080】
エンコーダ1702は、たとえば、さまざまな情報を受領して記憶または送信のために構造化されたフォーマット中にアセンブルするアセンブリー・ユニットを含む、諸サブモジュールを含んでいてもよい。さまざまな情報とは、たとえば、符号化されたまたは符号化されていないビデオならびにたとえばサブストリーム長指示子およびシンタックス要素のような符号化されたまたは符号化されていない要素を含んでいてもよい。いくつかの実装では、エンコーダ1702はプロセッサ1701を含み、よってプロセッサ1701の動作を実行する。
【0081】
送信機1704は、エンコーダ1702からエンコードされた信号(単数または複数)を受領し、該エンコードされた信号を一つまたは複数の出力信号において送信する。送信機1704はたとえば、エンコードされたピクチャーおよび/またはそれに関係する情報を表わす一つまたは複数のビットストリームを有するプログラム信号を送信するよう適応されていてもよい。典型的な送信機は、たとえば、誤り訂正符号化を提供する、信号中のデータをインターリーブする、信号中のエネルギーをランダム化するおよび変調器1706を使って信号を一つまたは複数の搬送波上に変調する、のうちの一つまたは複数のような機能を実行する。送信機1704は、アンテナ(図示せず)を含むまたはアンテナとインターフェースをもつことができる。さらに、送信機1704の実装は、変調器1706に限定されてもよい。
【0082】
データ送信システムまたは装置1700は、記憶ユニット1708にも通信上結合される。ある実装では、記憶ユニット1708はエンコーダ1702に結合され、エンコーダ1702からのエンコードされたビットストリームを記憶する。もう一つの実装では、記憶ユニット1708は送信機1704に結合され、送信機1704からのビットストリームを記憶する。送信機1704からのビットストリームはたとえば、送信機1704によってさらに処理された一つまたは複数のエンコードされたビットストリームを含んでいてもよい。記憶ユニット1708は、種々の実装では、標準的なDVD、ブルーレイ・ディスク、ハードドライブまたは他の何らかの記憶装置の一つまたは複数である。
【0083】
ここで
図18を参照するに、上記の特徴および原理が適用されうるデータ受領システムまたは装置1800が示されている。データ受領システムまたは装置1800は、たとえば記憶デバイス、衛星、ケーブル、電話線または地上波放送といった多様な媒体を通じて信号を受領するよう構成されていてもよい。信号は、インターネットまたは他の何らかのネットワークを通じて受領されてもよい。
【0084】
データ受領システムまたは装置1800は、たとえば、携帯電話、コンピュータ、セットトップボックス、テレビジョンまたはエンコードされたビデオを受領する他の装置であってもよく、たとえば、表示(たとえばユーザーへの表示)、処理または記憶のためにデコードされたビデオ信号を提供する。このように、データ受領システムまたは装置1800は、その出力を、たとえば、テレビジョンの画面、コンピュータ・モニタ、コンピュータ(記憶、処理または表示のために)または他の何らかの記憶、処理もしくは表示装置に提供してもよい。
【0085】
データ受領システムまたは装置1800は、データ情報を受領および処理することができ、該データ情報はたとえば、3Dメッシュ・モデルを含むことができる。データ受領システムまたは装置1800は、エンコードされた信号、たとえば本願の実装において記述された信号を受領するための受領器を含む。受領器1802は、たとえば、3Dメッシュ・モデルおよび/またはテクスチャー画像の一つまたは複数を与える信号、あるいは
図17のデータ送信システム1700から出力された信号を受領してもよい。
【0086】
受領器1802はたとえば、エンコードされたピクチャーを表わす複数のビットストリームを有するプログラム信号を受領するよう適応されていてもよい。典型的な受領器は、変調されエンコードされたデータ信号を受領する、復調器1804を使って一つまたは複数の搬送波からデータ信号を復調する、信号中のエネルギーをランダム化解除する、信号中のデータをインターリーブ解除するおよび信号を誤り訂正復号する、のうちの一つまたは複数のような機能を実行する。受領器1802はアンテナ(図示せず)を含むまたはアンテナとインターフェースをもつことができる。受領器1802の実装は、復調器1804に限定されてもよい。
【0087】
データ受領システムまたは装置1800はデコーダ1806を含む。受領器1802はデコーダ1806に受領された信号を与える。受領器1802によってデコーダ1806に与えられる信号は、一つまたは複数のエンコードされたビットストリームを含んでいてもよい。デコーダ1806は、たとえばビデオ情報を含むデコードされたビデオ信号のようなデコードされた信号を出力する。デコーダ1806はたとえば、
図16に記述されるデコーダ1600であってもよい。
【0088】
データ受領システムまたは装置1800は、記憶ユニット1807にも通信上結合される。ある実装では、記憶ユニット1807は受領器1802に結合され、受領器1802は記憶ユニット1807からのビットストリームにアクセスする。もう一つの実装では、記憶ユニット1807はデコーダ1806に結合され、デコーダ1806は記憶ユニット1807からのビットストリームにアクセスする。記憶ユニット1807からアクセスされるビットストリームは、種々の実装において、一つまたは複数のエンコードされたビットストリームを含む。記憶ユニット1807は、種々の実装において、標準的なDVD、ブルーレイ・ディスク、ハードドライブまたは他の何らかの記憶装置の一つまたは複数である。
【0089】
デコーダ1806からの出力データは、ある実装では、プロセッサ1808に与えられる。プロセッサ1808は、ある実装では、3Dメッシュ・モデル再構成を実行するために構成されるプロセッサである。いくつかの実装では、デコーダ1806はプロセッサ1808を含み、プロセッサ1808の動作を実行する。他の実装では、プロセッサ1808は、たとえばセットトップボックスまたはテレビジョンのような下流のデバイスの一部である。
【0090】
このように、ここでは具体的な機能および側面をもつ一つまたは複数の実装を提供している。特に、エントロピー符号化および復号に関係するいくつかの実装を提供している。階層的なエントロピー符号化および復号は、たとえば3Dメッシュの幾何データ、ランダムな2D座標および変化する統計をもつ任意のデータ源の圧縮などの多様な応用を許容しうる。しかしながら、これらの実装の変形および追加的な応用が考えられており、本開示の範囲内である。記載される実装の機能および側面は他の実装のために適応されてもよい。
【0091】
本願で記述される実装および機能のいくつかはMPEG 3DGC規格およびその拡張のコンテキストにおいて使われてもよい。さらに、これらの実装および機能は(既存のまたは将来の)別の規格のコンテキストにおいて、あるいは規格に関係ないコンテキストにおいて使われてもよい。
【0092】
本願の原理の「一つの実施形態」または「ある実施形態」または「一つの実装」または「ある実装」ならびにその他の変形への言及は、その実施形態との関連で記載されている特定の特徴、構造、特性などが本願の原理の少なくとも一つの実施形態に含まれることを意味する。よって、本明細書を通じた随所に現れる「一つの実施形態では」または「ある実施形態では」または「一つの実装では」または「ある実装では」といった句の出現は、必ずしもみな同じ実施形態を指すのではない。
【0093】
さらに、本願またはその請求項はさまざまな情報を「決定/判別する」ことに言及することがありうる。情報を決定/判別することは、たとえば、該情報を推定する、該情報を計算する、該情報を予測するまたは該情報をメモリから取り出すことの一つまたは複数を含みうる。
【0094】
たとえば「A/B」「Aおよび/またはB」「AおよびBの少なくとも一つ」の場合のような「/」「および/または」「…の少なくとも一つ」のいずれかの使用は、最初に挙げられるオプション(A)のみの選択、または二番目に挙げられるオプション(B)のみの選択、または両方のオプション(AおよびB)の選択を包含することが意図されている。さらなる例として、「A、Bおよび/またはC」や「A、BおよびCの少なくとも一つ」「A、BまたはCの少なくとも一つ」の場合には、そのような表現は、最初に挙げられるオプション(A)のみの選択、または二番目に挙げられるオプション(B)のみの選択、または三番目に挙げられるオプション(C)のみの選択、または最初と二番目に挙げられるオプション(AおよびB)のみの選択、または最初と三番目に挙げられるオプション(AおよびC)のみの選択、または二番目と三番目に挙げられるオプション(BおよびC)のみの選択、または三つすべてのオプション(AおよびBおよびC)の選択を包含することが意図されている。当業者には明白であろうが、これは、挙げられる項目がいくら多数でも、拡張できる。
【0095】
さらに、多くの実装はエンコーダ(たとえばエンコーダ1702)、デコーダ(たとえばデコーダ1806)、デコーダからの出力を処理する後処理器(たとえばプロセッサ1808)またはエンコーダに入力を与える前処理器(たとえばプロセッサ1701)の一つまたは複数において実装されてもよい。さらに、他の実装が本開示によって考えられている。
【0096】
本稿に記載される実装は、たとえば、方法またはプロセス、装置、ソフトウェア・プログラム、データ・ストリームまたは信号において実装されてもよい。たとえ単一の形の実装のコンテキストにおいてのみ論じられていたとしても(たとえば方法としてのみ論じられていたとしても)、論じられている特徴の実装は他の形(たとえば装置またはプログラム)でも実装されうる。装置は、たとえば、適切なハードウェア、ソフトウェアおよびファームウェアにおいて実装されてもよい。方法は、プロセッサなどの装置において実装されてもよい。このプロセッサとは、処理装置一般を指し、たとえば、コンピュータ、マイクロコンピュータ、集積回路またはプログラム可能な論理デバイスを含む。プロセッサはまた、通信装置、たとえばコンピュータ、携帯電話、ポータブル/パーソナル・デジタル・アシスタント(「PDA」)およびエンドユーザー間の情報の通信を容易にする他の装置をも含む。
【0097】
本稿に記載されるさまざまなプロセスおよび特徴の実装は、多様な異なる設備またはアプリケーション、特にたとえばデータ・エンコード、データ・デコード、3Dモデリング、3D再構成および3Dコンピュータ・グラフィクスの他の処理に関連する設備またはアプリケーションにおいて具現されうる。そのような設備の例は、エンコーダ、デコーダ、デコーダからの出力を処理する後処理器、エンコーダに入力を与える前処理器、ビデオ符号化器、ビデオ復号器、ビデオ・コーデック、ウェブ・サーバー、セットトップボックス、ラップトップ、パーソナル・コンピュータ、携帯電話、PDA、ゲーム・コンソールおよび他の通信装置を含む。明らかなはずだが、該設備はモバイルであってもよく、可動乗物に組み込まれていてもよい。
【0098】
さらに、本方法は、プロセッサによって実行される命令によって実装されてもよく、そのような命令(および/または実装によって生成されるデータ値)は、たとえば集積回路、ソフトウェア担体またはたとえばハードディスク、コンパクトディスケット(「CD」)、光ディスク(たとえばしばしばデジタル多用途ディスクまたはデジタル・ビデオ・ディスクと称されるDVDなど)、ランダム・アクセス・メモリ(「RAM」)または読み出し専用メモリ(「ROM」)などの他の記憶デバイスといったプロセッサ可読媒体上に記憶されていてもよい。命令は、プロセッサ可読媒体上に有体に具現されたアプリケーション・プログラムをなしていてもよい。命令はたとえば、ハードウェア、ファームウェア、ソフトウェアまたは組み合わせであってもよい。命令は、たとえば、オペレーティング・システム、別個のアプリケーションまたは両者の組み合わせに見出されてもよい。したがって、プロセッサは、たとえば、プロセスを実行するよう構成された装置およびプロセスを実行するための命令を有するプロセッサ可読媒体(記憶デバイスなど)を含む装置として特徴付けることができる。さらに、プロセッサ可読媒体は、命令に加えてまたは命令の代わりに、実装によって生成されるデータ値を記憶していてもよい。
【0099】
当業者には明白であろうが、実装は、たとえば記憶または伝送されうる情報を担持するようフォーマットされた多様な信号を生じうる。該情報はたとえば、方法を実行するための命令、あるいは記載される実装の一つによって生成されるデータを含んでいてもよい。たとえば、信号は、記載される実施形態のシンタックスを書き込むまたは読み出すための規則をデータとして担持するよう、あるいは記載される実施形態によって書き込まれる実際のシンタックス値をデータとして担持するようフォーマットされていてもよい。そのような信号はたとえば、(たとえばスペクトルの電波周波数部分を使って)電磁波としてまたはベースバンド信号としてフォーマットされてもよい。フォーマットすることは、たとえば、データ・ストリームをエンコードすることおよびエンコードされたデータ・ストリームで搬送波を変調することを含んでいてもよい。信号が担持する情報はたとえばアナログ情報またはデジタル情報でありうる。信号は、既知の多様な異なる有線または無線のリンクを通じて伝送されてもよい。信号は、プロセッサ可読媒体上に記憶されてもよい。
いくつかの実装が記述されてきた。それにもかかわらず、さまざまな修正がなされてもよいことは理解されるであろう。たとえば、種々の実装は組み合わされ、補足され、修正され、あるいは除去されて他の実装を生じてもよい。さらに、当業者は、他の構造およびプロセスが開示されているものの代わりに代用されてもよく、結果として得られる実装は、開示されている実装と、少なくとも実質的に同じ機能を実行し、少なくとも実質的に同じ結果を達成することを理解するであろう。よって、これらおよび他の実装は本願によって考えられている。