【文献】
大久保榮監修,「インプレス標準教科書シリーズ 改訂三版H.264/AVC教科書」,日本,株式会社インプレスR&D,2009年 1月 1日,第1版,第18,19,28,29,86-89,97,98,110-116頁,ISBN: 978-4-8443-2664-9
【文献】
杉山賢二,「実践 映像信号処理 −C言語を使って体感する−」,日本,株式会社コロナ社,2008年 3月18日,初版,第14〜16,39,40頁,ISBN: 978-4-339-00794-7
【文献】
David Salomon,"Data Compression",Springer,2007年,Fourth Edition,Pages 47-56,112-119,444-454,676-718,ISBN: 1-84628-602-6, [online], [令和元年6月24日検索],インターネット,URL,http://read.pudn.com/downloads167/ebook/769449/dataCompress.pdf
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0058】
本願の実施例の説明において用いる略語を以下の表1に示す。
【0059】
表1:実施形態の説明に用いる略語の説明
【0060】
概要として、本願の実施例は、改良された形式のエンコーダとデコーダ、および関連する改良されたデータ符号化方法とデータ復号方法に関する。本願の実施例は、以下に詳述し、本願の実施例においてさらに改良しているODelta符号化方法などの、Delta符号化方法に基づいている。Delta符号化方法は、音声パケット、画像ブロック、インターネットデータパケット、チャネル、動画フレームなどを、相互に異なる多様な空間的および時間的予測方法を用いて符号化処理するために提供され、任意で量子化子を利用してもよい。本願の符号化方法は、可逆的および非可逆的な符号化の両方に適している。これらの符号化方法は、次に示す3つの主な機能的要素を含む。
(i) 予測
(ii) ODelta演算子、またはPDelta、IDelta、DDeltaなどの類似の演算子、ならびに任意使用の量子化子
(iii)エントロピー符号化
【0061】
本願の符号化方法はエンコーダにおいて用いることができ、対応する復号方法はデコーダにおいて用いることができる。これについては、
図5を参照して詳細に後述する。
【0062】
添付の付属書類1に、DPCM式の使用方法に適したODelta演算子の説明を記載している。付属書類1より前の本明細書の本文において、これらのODelta演算子は、様々な(ローカル)空間的予測方法、時間的予測方法、またはそれらを組み合わせた方法を用いるために修正されている。本願の方法は、データ列全体、個々のデータフレーム、個々のデータチャネル、個々のデータブロック、個々のデータパケットなどに用いることができるように考案されている。また、本願の方法は、選択された予測方法、選択されたODelta演算子、および選択された残差符号化方法、圧縮方法に基づいて、相互に異なる複数の符号化処理方法を提供する。
【0063】
本願の方法と組み合わせて他の多くの符号化処理方法を用いてもよい。これらの方法は、付属書類2に示すブロックエンコーダおよび付属書類3に示すブロックデコーダと共に用いると有利である。前者は英国特許第2503295号に記載され、参照により本出願に組み込まれる。後者は英国特許第2505169号に記載され、参照により本出願に組み込まれる。任意のデータブロックの符号化に最適な符号化処理方法は、例えば、任意のデータチャネルがブロック単位で符号化処理される場合、例えばRD最適化を用いて選択される。RD最適化によって、以下の式における値Vが最小になる。
V=D+λ*R 式1
ここで、歪み(D)は典型的に、元の値と復号された値との二乗誤差(SE)の和であり、符号化されたデータ値の量(R)は典型的にビットで測定される。本願の開示に従う方法において、他の多くの符号化処理方法を用いてもよい。これには例えば、DC法、スライド法、マルチレベル法、DCT法、ライン法、スケール法、データベース法などがある。
【0064】
本願の開示に従う方法は、符号化する入力データ(D1)内に存在する相互に異なるデータ構造に有利に用いられる。例えば、データチャネル全体、例えば平面画像の輝度チャネルを、本願の開示に従う方法によって符号化処理してもよい。本願の開示に従う方法は単純であり、例えば、携帯電話やカメラなどの低消費電力の携帯電子機器に近年用いられる縮小命令セット(RISC)プロセッサなどを用いる機器やシステムを複雑にすることなく実行できる。このため、チャネル全体に対して本願の方法を実行した結果を、黒/モード値チャネル、フリーズチャネル、エントロピー符号化された元のチャネル、ブロックエンコーダによるチャネル符号化などの他のチャネル符号化方法と容易に比較できる。最適なチャネル符号化方法は、RD最適化によっても有利に選択される。ブロックエンコーダによるチャネル符号化方法とは、相互に異なる符号化処理方法によってデータチャネルをブロック単位で符号化処理することであり、この場合、データチャネル全体に対して1つの符号化処理方法を用いるわけではない。
【0065】
本願の方法は、非可逆的符号化において、すなわち量子化された残差値の符号化と共に、または残差の符号化なしで用いてもよく、あるいは、可逆的符号化において、すなわち残差なし、または量子化なしの残差値符号化と共に用いてもよい。エンコーダおよびデコーダにおける前の符号化値および復号値はすべて、本願の開示に従って、現在または将来のデータ値の予測に用いることができる。本願の符号化方法を適用してデータを可逆的に符号化処理する場合、可逆的符号化においては復号値と同じである処理済みのソース値を、エンコーダにおける現在または将来のデータ値の予測に用いることができる。
【0066】
ODelta演算子の最も重要なパラメータはhighValue、lowValue、およびwrapValue(すなわち、少なくともhighValue−lowValue+1)である。これについては付属書類1においてより詳細に説明する。量子化を利用するようにhighValueおよびlowValueを定義することも可能である。例えば、元データは0から255までの値を含むが、選択された品質係数(例えば、品質値が「1」から「100」の範囲である場合は、30である。ここで品質値「100」は可逆的圧縮を指す)により、最終結果を例えば0から78の値に量子化することが望ましい(相対量子化78/255)。ODelta演算子を用いる前(プリオフセット)または後(ポストオフセット)にデータオフセットを用いることもできる。また、ODelta演算子の後でエントロピー符号化を実行することも有利である。そうしないと、エントロピーの低減がデータ符号化に十分に活用されない。
【0067】
前述のIDelta、DDelta、およびPDelta法を参照すると、付属書類1に説明されるように、ODelta法において必要であったwrapValueを決定する必要がなくなっている。したがって、前述のIDelta、DDelta、およびPDelta法に関しては、メソッド選択情報および最終的な量子化情報と共に、highValue'およびlowValue'がより重要な役割を担う。この場合、highValue'およびlowValue'は最終的な実際のデータ値の値範囲ではなく、提供される差分値の値範囲を示す。lowValue'はPDelta法の基礎(pedestal)値の決定にも用いられる。この場合、提供される最大データ値は、highValue'−lowValue'の結果であるか、または量子化によって制限される。この量子化は、因数によって、品質パラメータによって、または元のダイナミックレンジに対する相対的な変化として決定することができる。このような実施の例として、前述のように、元のhighValueまたは最大差分highValue'が255であり、値範囲が相対量子化値78/255によって制限され縮小されている場合がある。この例においては、相対量子化の量子化値は、例えば、値78あるいは値0.3059(すなわち78/255未満)として提供することができる。
【0068】
用いるエントロピー符号化方法は、レンジ符号化またはSRLEレンジ符号化を選択すると有利であるが、例えばハフマン符号化、RLE符号化、SRLE符号化などの他のエントロピー符号化方法を用いることもできる。付属書類1において説明するODelta法を用いる場合、予測値は常に前のデータ値であることが望ましく、最初の予測値を、選択された初期化方法によって初期化する必要がある。
【0069】
本願の開示に従う方法では、予測値は、前のデータ値のみを用いるのとは異なるように選択することもできる。本願の方法に従うと、予測値として、選択された1つのデータ値、または複数のデータ値から算出された1つの値を用いることが可能になる。例えば、この値は、2つ以上の前のデータ値(1D)、近隣の2つ以上の前のデータ値(2D、3D、…)、前のデータブロックまたはデータパケット内の1つまたは複数のデータ値、1つまたは複数の前のデータチャネル内の1つまたは複数のデータ値、1つまたは複数のデータフレーム内の1つまたは複数のデータ値、前述のデータ値の任意の組合せなどから計算できる。
【0070】
現在のデータ値の予測値が算出されると、元データ値と予測データ値との差分または合算がOValueとして計算される。OValueはQOValueへと量子化、または複製でき、その後ODelta演算子へと渡すことができる。ODelta演算子は、QOValueがlowValueより小さい場合またはhighValueより大きい場合は(wrapValueの加算および/または減算により)ラップアラウンドを実行する。
【0071】
値が量子化される場合は特に、ラップアラウンドおよび逆ラップアラウンドが正確に実行されるように量子化レベルを設計し、ラッピング演算によってこの方法の結果が正の加算(または減算)から負の加算(または減算)へ、またはその逆へと変わらないようにする必要があることを理解されたい。ラップアラウンドによって結果が明らかに小さい絶対値や明らかに大きい絶対値へと変わることがないようにすべきである。つまり、例えば、絶対データ値に対して2つの異なる量子化子を用いる場合、逆量子化およびラップアラウンドにおけるデータ値の誤解析を回避するために、小さいデータ値と大きいデータ値を中間のデータ値より小さい量子化値によって量子化する必要がある。
【0072】
図1を参照すると、フレーム、ビュー、チャネル、データブロック、データパケット、個々のデータ値などの異なるデータ構造に分割された3D動画コンテンツが図示されている。これに加えて、フレームのグループ、データブロックのグループ、initデータブロック、データスライスなどの構造を用いてもよい。本願の開示に従うと、入力データ(D1)を処理および符号化して対応する符号化データ(E2)を生成する際に、このような相互に異なる構造をすべて分離しなくてもよい。データの順序は異なってもよいが、
図1の例では、任意のチャネル内のブロックは左から右へ、かつ上から下へと処理される。処理済み、すなわち符号化済み、および任意で非可逆的符号化を実行する場合は復号済みの値はすべて、現在および将来の値の予測に用いることもできる。そうすることで、本願の開示に従うエンコーダおよび対応するデコーダの両方が、符号化値から復号された値に関する情報を持つことができるからである。
【0073】
本願の開示に従って、YUVチャネルをY、U、Vの順序で符号化し、かつ、BGRチャネルをG、R、B、またはG、B、Rの順序で符号化して、本願の開示に従う方法における時間的チャネル予測のより良い選択肢を利用可能にすると有利であることが多い。時間的チャネル予測は、一般に、任意の画像がRGB色空間へと符号化される場合に非常に優れた方法である。時間的チャネル予測では、チャネル相関が大幅に低減される。YUV色空間を用いる場合、この色空間の特性により、チャネル相関は既に大幅に低減されている。また、YUV色空間を用いる場合、情報の大部分がYチャネルに含まれる。つまり、UチャネルとVチャネルをより効率的に符号化処理できる。
【0074】
本願の方法は、相互に異なるデータ構造の処理に用いることができる個別のサブメソッド、すなわちアルゴリズムを含んでもよい。例えば、色チャネルは空間的予測または時間的予測によって符号化処理できる。様々な種類の時間的予測のサブメソッドを用いることもできる。あるサブメソッドは、例えば、前のフレーム内と同様の位置にある同じチャネル値を用い、別のサブメソッドは、前のビュー内と同様の位置にある同じチャネル値を用い、さらに別のサブメソッドでは、例えば、チャネル0からの同様の位置にある値を用いて、例えばチャネル2の値を予測する。
【0075】
時間的予測を用いる場合、最初の予測値を定義する必要はない。現在のチャネル内の各値に、他のフレーム、ビュー、またはチャネルにおいて利用可能な予測値が含まれる。「時間的な予測」は、任意のチャネル内で空間的に前に位置する類似のデータブロックに用いることもできる。一般に、この種の方法を用いる場合、利用可能なデータブロックの選択肢は限られているため、異なるサブメソッドの数が多くなりすぎることはない。つまり、「動きベクトル」のようなブロック記述子を送信する必要もない。この種のデータブロック記述子を用いてもよいが、一般に、記述子の精度は、例えば、データブロック単位であり個々のデータ値単位ではないため、イントラ動きベクトル推定を用いる場合と比べて、異なる組合せの数が大幅に少なくなる可能性がある。
【0076】
一般に知られているイントラ/インター動き推定方法によって得られるものと同等の精度を持つ、利用可能な代替アルゴリズムの組合せを用いたとしても、本願の方法の選択肢には、ODelta符号化の利用による効率的な残差符号化が含まれるため、本願の開示に従う方法の利用にはやはり大きな利点がある。したがって、本願の開示に従う方法では、予測のために個別にイントラ/インター動き推定を用いた後、残差符号化のために別途、例えばDCT法を用いるという必要がない。
【0077】
本願の実施例では、空間的予測において相互に異なる予測値を用いてもよい。前の値の予測(Xに対するA)は、ODelta技法からの既知の技術である(付属書類1を参照)。本発明の実施形態において利用すると有利な方法の1つでは、値Xに対してP=A+B−Cなどの予測値を用いる。例えば、2A−DまたはPNG文書に記述されているPAETH予測などの他の多くの予測値を用いてもよい。予測値は、可能な値の範囲になるように制限、または切り捨てると有利である。例えば、チャネル0における任意の値が、0(lowValue)と63(highValue)の間で、A=60、B=61、C=52という値として提供される可能性がある場合、P=A+B−C=69であり、この値は値63(=highValue)になるように切り取られるか、切り捨てられるか、または飽和させられる。
【0078】
X=62の場合、修正されたODelta演算子方法1によるOValueは、62−63=−1である。この値は、可逆的符号化においては量子化する必要がないため、QOValueも−1である。ここで、−1はlowValue(0)より小さいので、63をODelta値として取得するにはwrapValue(64)をQOValueに加える必要があることを理解されたい。この値は、このChannelSpatialODeltaCodedメソッドによって値Xを符号化するために、エントロピー符号化のためのバッファに設定される。他のデータ値に対しても同様の処理が行われ、すべてのチャネル値が処理されたら、ODelta値のバッファの内容が、例えば、レンジ符号化、または順次連長符号化(SRLE)レンジ符号化などによって圧縮され、チャネル0に対する出力符号化データ値が作成される。
【0079】
予測値としてA+B−Cを用いる場合、最初1の行が処理されるとき、予測に使用可能な値はAのみであるため、値Aが予測値として直接用いられることを理解されたい。同様に、最初の列に対して使用可能であるのはB値のみであるため、値Bが予測値として直接用いられる。最初の値、例えばチャネル0内の最も左上側の値は、予測に使用可能な空間値を持たない。例えば、前のビューまたは前のフレームに時間値があれば、その時間値を最初の予測値に用いることができる。適切な時間予測値が使用可能でない場合、例えば、値0、または中点値((63−0+1)÷2=32)、または別途提供されたチャネル/ビュー/フレームのモード値を、チャネル0に対する最初の予測値として用いることができる。1つの方法において複数の予測子を用いて、符号化データ(E2)内のどのフレーム、チャネル、ブロック、さらにはデータ値にどの予測子を用いるのかに関する情報を提供することも可能である。
【0080】
同様の方法を、例えばデータブロックに用いることもできる。以下の例に、BlockChannel0ODeltaCodedメソッドを用いてチャネル2内のブロック2を符号化処理する方法を示す。BlockChannel0ODeltaCodedメソッドでは、品質要件が明らかに低い、値4による量子化が対応する符号化値に用いられる。値4による量子化とは、lowValueが0、highValueが15、およびwrapValueが16であることを意味する。ここで、現在のチャネル2内のブロック2には、例えば以下のような値が含まれている。
45,48,50,52
46,48,50,51
46,49,49,50
【0081】
チャネル0内のブロック2には、以下の予測値が含まれている。
36,39,40,42
36,37,39,41
36,39,39,41
【0082】
時間的予測を用いるため、符号化値を量子化すると、チャネル2の復号値は変更されるが、チャネル0内の予測値には影響しない。このため、OValueを定義する場合に量子化を考慮する必要がないため、処理を単純化できる。その後、OValueは以下のようになる。
9,9,10,10,10,11,11,10,10,10,10,9
【0083】
これらの値を値4で除算することによって量子化すると、以下のようなQOValueが生成される。
2,2,2,2,2,2,2,2,2,2,2,2
【0084】
すべての値が範囲内、すなわち0から15の値であるため、どのQOvalueにもラップアラウンドは必要なく、ODelta値がQOValueと同じになる。ここで、すべてのODelta値が同じであるため、用いる符号化処理メソッドをBlockChannel0ODeltaCodedメソッドからBlockChannel0ODeltaSameメソッドまたはBlockChannel0IDeltaSameメソッドへと変更することができることを理解されたい。このBlockChannel0ODeltaSameメソッドでは1つの値(2)のみが提供される必要がある。それによって、ブロック値の復号が、デコーダにおいて適切に、すなわちエンコーダにおいて実行されたのと同様の方法で実行される。
【0085】
このデータブロックに対し、デコーダにおいて符号化処理メソッドBlockChannel0ODeltaSameおよび値2を用いるように指示される。その後デコーダは、以下のような12(4×3ブロック)個の値を含むバッファを作成する。
2,2,2,2,2,2,2,2,2,2,2,2
【0086】
この例では、逆量子化によってこれらの値に4を掛ける。また、量子化範囲内の誤差をより正確に推定するために、1を加算してもよい。これらの値を逆量子化すると、以下のような値が生成される。
9,9,9,9,9,9,9,9,9,9,9,9
【0087】
これらの逆量子化値を、エンコーダにおけるチャネル0からの値に類似する予測値に加算すると、ブロック値が以下のようになる。
45,48,49,51
45,46,48,50
45,48,48,50
【0088】
符号化および復号における値の歪み、すなわち、符号化/復号処理後の任意の元データと対応する復号データとの間の誤差は、以下のようになる。
0,0,1,1
1,2,2,1
1,1,1,0
【0089】
この歪みは量子化によるものであるが、非常に小さい。この方法では、任意の4×3データブロック全体に対して提供する必要があるのは選択された方法と1つ値のみであるため、非常に効率的である。チャネル内でより多くのブロックを、同じ、または実質的に同様の符号化方法によって符号化処理する場合、それらすべての値を、例えば、任意のエンコーダにおいてレンジ符号化し、対応する任意のデコーダにおいてレンジ復号することで、より高い圧縮率、すなわち、元データまたは復号データ(D1)の量/符号化データの量(E2)の比率を達成できる。
【0090】
前述のODeltaを用いる場合、チャネル0より前にチャネル2を符号化し、チャネル0においてチャネル2を予測のために用いても有利である。この場合、すべてのQOValueが−2であると有利である。これらの値はlowValueよりも小さいため、ラップアラウンド(すなわちwrapValueの加算)が必要である。その後、すべてのODelta値が14(−2+16)と等しくなる。したがって、本願の実施例を実行するために利用される前述のODelta符号化は、範囲を拡大することも、符号ビットを必要とすることもないため、同様の既知のDelta符号化方法よりも効率的である。また、ODelta符号化は、この現在のデータブロックの差分チャネルに対してDC法を用いるよりも効率的である。
【0091】
次に、チャネル1において4×3ブロックをBlockSpatialODeltaCodedによって空間的に符号化する例を示す。この例において、このメソッドは最初の予測値として0を用いる。元の値は0から255の範囲であり、品質は、lowValueが0、highValueが35、wrapValueが36になるようにエンコーダにおいて設定されている。もちろん、対応する復号段階において、値が元の範囲の0から255内のままであり、したがって復号段階においてlowValueが0、highValueが255、wrapValueが256であると有利である。この場合、元のブロックは以下のとおりである。
141,151,148,137
159,150,152,147
159,154,153,150
【0092】
最初の16レベル、すなわち、レベル0から15、および最後の16レベル、すなわちレベル20から35、に対する量子化子は7であり、中間の4レベル、すなわちレベル16から19に対する量子化子は8である。これは、112より小さい絶対差分値、すなわち0から111はすべて値7によって量子化される、すなわち除算されることを意味する。後続の144までの値、すなわち112から143は、値112が減算され、値8によって量子化され、値16が加算される。最後の値、すなわち144から255は、値144が減算され、値7によって量子化され、値20が加算される。同様に、最初の16個の値、すなわち値0から15の逆量子化は、各値に値7を乗算することによって行われる。中間の値である16から19は、各値から値16を減算した後、各値に8を乗算して値112を加算することで復号される。最後の値、すなわち値20から25は、各値から値20を減算した後、それらに値7を乗算し値144を加算することで復号される。
【0093】
第1の値は141である。予測値は0に初期化されたため、OValueは141、QOValueは19となる。ラップアラウンドは不要であるため、ODelta値も19となる。この値はラップアラウンドなしで値136(16*7+3*8)に復号される。この値を将来の予測に有利に用いてもよい。
【0094】
第2の値は151である。Aに基づく予測値を用いてもよく、この値は136である。OValueは15であり、QOValueは2である。ここでもラップアラウンドは不要であるため、ODelta値は2である。この値はラップアラウンドなしで値150(136+2*7)に復号される。この値を将来の予測に有利に用いてもよい。
【0095】
第3の値は148である。Aに基づく予測値はここでは150である。OValueは−2であり、QOValueは0である。ここでもラップアラウンドは不要であり、OValueは負の値であるが、量子化された値QOValueは0であり、範囲内であるため、ODelta値も0である。この値はラップアラウンドなしで値150(150+0)に復号される。この値を将来の予測に有利に用いてもよい。
【0096】
第4の値は137である。Aに基づく予測値はここでも150である。OValueは−13、QOValueは−1である。ここではラップアラウンドが必要であり、ODelta値は−1+36=35である。この値が復号されると、値150+249はhighValueすなわち値255より大きいため、ラップアラウンドが必要であり、その結果は150+249−256=143である。この値を将来の予測に有利に用いてもよい。
【0097】
第5の値が新しい行に入力され、この値は159である。ここで、値B,すなわち136を用いて予測を実行できる。OValueは23であり、QOValueは3である。ラップアラウンドは不要であるため、対応するODelta値も3となる。復号値は136+21=157となる。この値を将来の予測に有利に用いてもよい。
【0098】
第6の値は150であり、予測値としてA+B−Cを用いることができる。予測値はここで157+150−136=171である。OValueは−21であり、QOValueは−3である。ラップアラウンドが必要であるため、ODelta値は33である。復号値もラップアラウンドする必要があり、その結果は150(171+235−256)である。この値を将来の予測に有利に用いてもよい。
【0099】
同様に、任意のデータブロックの最後まで有利に処理が続けられ、全体的なODelta符号化結果は以下のとおりとなる。
19,2,0,35,3,33,0,0,0,0,0,1
【0100】
これらの値はバッファに有利に挿入され、他の同様の符号化ODelta値と共に、例えばSRLEレンジ符号化を用いてエントロピー符号化される。デコーダは、符号化データ(E2)内のメソッドBlockSpatialODeltaCodedに関する情報および符号化ODelta値が提供されると、以下の値を生成することができる。
136,150,150,143
157,150,150,143
157,150,150,150
【0101】
符号化および復号後の値の歪み、すなわち、用いられた符号化と復号が相互に逆である場合の元データ(D1)と復号データ(D3)との間の誤差は、以下のとおりである。
5,1,−2,−6
2,0,2,4
2,4,3,0
【0102】
第1の値は任意の値であってもよく、優れた初期化推定を有利に利用して結果を容易に改善できることを理解されたい。また、これらの第1の値を個別に提供し、他の値の符号化結果を改善することもできる。一般に、他の値には、多数のゼロ、および少数の1に近い値、+1に対応する値、35に近い値、−1に対応する値が含まれる。この例では、highValueは35、wrapValueは36であった。
【0103】
符号化処理されたすべての値がゼロであることもあるが、その場合、例えば、BlockSpatialODeltaNotCodedメソッドを用いると有利である。BlockSpatialODeltaNotCodedメソッドは空間的予測のみを行い、ODelta符号化のための値は提供しない。一般に、空間的予測には符号化処理された値が必要であるが、時間的予測は、すべて符号化された値すなわち「Coded」メソッドの代わりに、定数値すなわち「Same」を用いるか、または符号化処理された値なし、すなわち「NotCoded」を用いて実行されることが多い。
【0104】
本願の開示に従うメソッドを用いる場合、それらのメソッドは一般に、相互に異なるメソッドとして用いられる。基礎となる何らかのメソッドを用いて、例えば、用いられる任意の時間的予測ソース、符号化処理手段などを記述するサブメソッドを利用することもできる。次の例において、表2に、相互に異なるチャネルおよびブロックの符号化サブメソッドの一覧を示す。各サブメソッドは、関連付けられた3ビットによって表現、すなわち定義される。
【0105】
表2:チャネルおよびブロックの符号化処理メソッド
【0106】
異なるチャネルの符号化処理に、相互に異なる符号化処理メソッドを用いてもよい。例えば、任意の第1のチャネル(チャネル0)を、データブロックの符号化に任意でBlockODeltaメソッドも用いるブロックエンコーダによって符号化し、任意の第2のチャネル(チャネル1)を、時間的予測ベースのODelta法であるChannel_Channel0ODeltaCodedによって符号化し、任意の第3のチャネル(チャネル2)を、空間的予測ベースのODelta法であるChannel_SpatialODeltaCodedによって符号化する。すべてのチャネルを同じ方法、例えば空間的予測ベースのODelta法で符号化処理する場合、例えばFrame_SpatialODeltaCodedメソッドを、対応するフレームに有利に提供すれば、そのフレームに他の符号化処理方法を提供する必要はない。すなわち、チャネル符号化方法やブロック符号化方法を用いる必要はない。
【0107】
本願の実施例に関連するデータ構造を、
図1から
図4を参照して以下に説明する。本願の方法における空間的予測に用いることができるデータ構造およびデータ値を示している。
図1に、上位構造の例を示す。この例のデータは、例えば3つのフレームを含み、各フレームには例えば2つのビューがあり、各ビューには例えば3つのチャネルがある。上位構造のデータには、スライス、データブロックのグループ、または他のデータ構造が含まれてもよい。一部の構造、例えばパケットおよび/またはビューが含まれていなくてもよい。存在する構造の違い、または値の処理順序や利用する構造の選択により、データ値の予測は大幅に異なる可能性がある。
図2に、6つのブロックを含むチャネルの例を示す。これらのブロックの符号化順序は、左から右、上から下である。
図2のブロックは例えば3つのパケットを含み、各パケットは例えば4つの値を含む。また、
図3に、ブロックとその構成要素の例を示す。
【0108】
したがって、全体的なデータ例は、データ=3*2*3*6*3*4個の値=1296個の値となる。次の例は、予測に用いられる近隣のデータ値を表す。
図4において、値AからNは、位置Xに対する前のデータ値である。値oから値tは、例えば、任意の現在のブロックより前に処理された1つ以上の他のブロック内にある場合、前のデータ値である。前のデータパケット、データブロック、チャネル、ビュー、およびフレームも、予測に使用可能なデータ値を含む可能性がある。したがって、
図4は、本願の開示に従って予測のために使用可能な近隣のデータ値の概略図である。
【0109】
前述の本願の実施例は、前述のとおり、ODelta演算子の修正版を用いてデータ圧縮結果を向上させることができる方法を提供する。本願の方法は、相互に異なり多数になり得る予測方法の選択肢と、ODeltaラッピングに対して適切に動作する任意の量子化子とを用いる。本願の方法は、ODelta演算によるエントロピー低減によりもたらされるすべての利点を活用するために、エントロピー符号化も用いる。これらの方法は、フレーム、チャネル、データブロック、データパケットなどの相互に異なる多様なデータ構造に適している。各構造には、少量の対応するODelta符号化データを作成する、明確に定義された符号化方法が利用される。符号化データの格納および通信に必要なデータ通信帯域幅は、そのデータが符号化されない場合と比べて大幅に削減される可能性があり、非常に有利である。
【0110】
前述の方法および実施形態は、データエンコーダおよびデータデコーダに関して有利に実行される。
図5を参照すると、本願の実施例は以下に関する。
(i) 入力データD1を符号化して対応する符号化データE2を生成するエンコーダ100、および、前記入力データD1を符号化して前記符号化データE2を生成するための、対応する方法。
(ii) 前記符号化データE2を復号して対応する復号データD3を生成するデコーダ120。前記復号データD3は、可逆的符号化におけるように、前記入力データD1と厳密に類似であってもよく、あるいは、非可逆的符号化におけるように、前記入力データD1と略類似であってもよい。あるいは、前記データD3は、例えば変換によって、前記入力データD1と異なってもよいが、前記入力データD1に存在する情報と、前記符号化データE2を復号して前記復号データD3を生成するための対応する方法を、実質的に維持しているものとする。
(iii)少なくとも1つのエンコーダ100と少なくとも1つのデコーダ120との組合せを含むコーデック130。前記コーデック130は、単一の機器内に実装されても、複数の機器間で有効に実装されてもよい。例えば、前記コーデック130は、第1の空間的位置にエンコーダ100があり、他の複数の空間的位置に複数のデコーダ120があるブロードキャストシステムとして実装されてもよい。
【0111】
添付の特許請求の範囲に定義される発明の範囲を逸脱することなく、前述した本発明の実施形態への修正が可能である。本発明の記述と特許請求の範囲で用いられる「含む」、「備える」、「包含する」、「構成される」、「有する」、「存在する」などの表現は、包括的構成であると解釈されることを意図しており、明示的に記載されていないアイテムや部品、構成要素も含まれ得ることを意図している。単数による表記は、複数の場合も関連すると解釈される。添付の特許請求の範囲における括弧内の数字は、請求項の理解を助けることを意図したものであり、これらの請求項によって定義される発明の範囲を限定するように解釈されるべきではない。
〔付属書類1:ODelta符号化の概要〕
【0112】
以下にODelta符号化の概要を述べる。ODelta符号化及び関連技術の説明のために、エンコーダ1010、エンコーダ1010を使用する方法、デコーダ1020、デコーダ1020を使用する方法を例示する。
【0113】
エンコーダ1010は、数値列を含む入力データ(DA1)を符号化することにより、対応符号化出力データ(DA2又はDA3)を生成するエンコーダである。このエンコーダは、差分符号化及び/又は合算符号化の方式を入力データに適用することにより1つ又は複数の対応符号化列を生成するデータ処理装置を備える。但し、上記1つ又は複数の対応符号化列は、符号化出力データを生成するために、最大値におけるラップアラウンド及び/又は最小値におけるラップアラウンドを受ける。またエンコーダ1010は、符号化出力データを作成するのに利用される一連の予測値として、デフォルト第1予測値を利用するように動作可能である。符号化出力データ(DA2又はDA3)は、入力値、予測値及び符号化演算を用いて生成される。
【0114】
エンコーダ1010を使用する方法は、数値列を含む入力データ(DA1)を符号化するエンコーダを用いることにより、対応符号化入力データ(DA2又はDA3)を生成する方法である。この方法は、
(a)差分符号化及び/又は合算符号化の方式を入力データに適用することにより、1つ又は複数の対応符号化列を生成するエンコーダのデータ処理装置を用いることと;
(b)符号化出力データを生成するために、上記1つ又は複数の対応符号化列に対して最大値におけるラップアラウンド及び/又は最小値におけるラップアラウンドを行う、上記データ処理装置を用いることと;
を含む。
【0115】
デコーダ1020は、符号化データ(DA2、DA3又はDA4)を復号することにより対応復号出力データ(DA5)を生成するデコーダである。このデコーダは、符号化データの1つ又は複数の部分を処理するデータ処理装置を備え、該データ処理装置は、上記1つ又は複数の部分の1つ又は複数の対応符号化列に対して差分復号及び/又は合算復号の方式を適用するように動作可能である。上記1つ又は複数の符号化列は、復号出力データを生成するために、最大値におけるラップアラウンド及び/又は最小値におけるラップアラウンドを受ける。
【0116】
デコーダ1020を使用する方法は、符号化データ(DA2、DA3又はDA4)を復号するデコーダを用いることにより対応復号出力データ(DA5)を生成する方法である。この方法は、上記復号データの1つ又は複数の部分を処理するデータ処理装置を用いることを含む。上記データ処理装置は、上記1つ又は複数の部分の1つ又は複数の対応符号化列に対して差分復号及び/又は合算復号の方式を適用するように動作可能であり、上記1つ又は複数の符号化列が、復号出力データを生成するために、最大値におけるラップアラウンド及び/又は最小値におけるラップアラウンドを受ける。
【0117】
デコーダ1020を使用する方法には、次のような方法もある。この方法は、符号化データ(DA2、DA3又はDA4)を復号するデコーダを用いることにより対応復号出力データ(DA5)を生成する方法であって、該方法は、
(a)上記符号化データを処理するものであり、上記符号化データは、変換データの連続値における変化を表す少なくとも1つの符号化列を含み、かつ最大値におけるラップアラウンド又は最小値におけるラップアラウンドを利用するものであることを考慮して、上記符号化データの1つ又は複数の部分に復号を適用するデータ処理装置を用いることと;
(b)対応処理データを生成し、かつ少なくとも1つのプリオフセット値及び/又はポストオフセット値を用いて上記1つ又は複数の部分を変換することにより復号出力データを生成するデータ処理装置を用いることと;
を含む。
【0118】
図6〜
図8を参照して、付属書類1に記載の実施形態を例としてのみ以下に説明する。
【0119】
本開示の実施形態を説明する際、表3に示す通り以下の頭字後及び定義が用いられる。
【0120】
概して、
図6を参照すると、本開示は、エンコーダ1010及びそれに関連する操作方法に関連する。エンコーダ1010は、直接ODeltaエンコーダとして実施されるという利点を持つ。さらに、本開示は、対応するデコーダ1020にも関連する。デコーダ1020は、逆ODeltaデコーダとして実施されるという利点を持つ。該開示による実施形態では、有利には、上述した既知の差分符号化法のビット最適化バージョン、並びにその他データに関するレンジ最適化バージョンである直接ODelta演算を利用する。ODelta符号化が、可変長データワード、例えば8/16/32/64ビットを利用し、かつ/又は元の値が1〜64ビットの範囲で表現される8/16/32/64ビットのデータ要素の可変長符号化を利用するコンピュータハードウェア又は専用デジタルハードウェアにおいて利用され、対応する符号化値が1〜64ビットで生成される。勿論、エンコーダ1010及びデコーダ1020は、如何なる場合においても、データDA1、例えば元データにどの種類の数値が含まれているのかを認識し、従って、その定義又は伝送が、ここでさらに明らかになることはない。数値範囲(MIN及びMAX)が既知であること、並びにデータDA1が利用され得ることが単に仮定される。
【0121】
既知の差分符号化法は、元(MIN〜MAX)から結果(MIN−MAX〜MAX−MIN)まで値の範囲を増加させる。この事は、該符号化法は、元データが正の値のみを含む場合、負の値もまた作成することを意味する。本開示によるODelta演算は、対応する元の値の範囲にない値を作成することは決してなく、従って、使用されるデータ範囲を増加させることもなく、それ故に例えばエントロピー低減及び関連データ圧縮を実行する際に有利に利用される。例えば、既知の差分符号化法は、5ビット、即ち0〜31の値の範囲のデータストリームを用いて作動し、その結果、該差分符号化法によって生成されるデータ値は、−31〜+31の範囲、即ち6ビット(即ち符号ビット+5ビット)を用いて実質的に表現され得る63個の値になる。対照的に、直接ODelta生成値は、上記の5ビットデータストリームから生成される際には、0〜31の範囲に依然としてある。さらに、既知の差分符号化法は、再起的に実施することは不可能であるが、本開示による直接又は逆ODelta演算は、再帰的に実施可能であるにも関わらず、用いた値の範囲を依然として保存する。この値の範囲は、ビットに対して忠実である必要はなく、例えば、0〜31の値は5ビットで定義されるが、ODelta演算は、任意の値の範囲、例えば0〜25の値の範囲を用いることができ、依然として適切に動作する。
【0122】
原則として、本明細書に記載されるODelta法は、常に、既存のデータ範囲に基づいて直接機能することが可能であり、そのデータ範囲の例は以下に挙げられる。ODelta法は、データにおいて生じる最低値(「lowValue」)及びデータにおいて生じる最高値(「highValue」)を示す情報を伝達することによって強化することもできる。lowValue≧MINかつhighValue≦MAXであること、並びにこれらの値は任意選択のものであることに留意されたい。
【0123】
本開示による直接ODelta演算及び逆ODelta演算の2つの例が以下に記載されている。直接ODelta演算及び逆ODelta演算の最初の例は、例えば不揮発性(非一時的)機械可読データ記憶媒体に記録された1つ又は複数のソフトウェア製品を実行するように動作可能である電子ハードウェア及び/又はコンピュータハードウェアにおいて実施するのに、効率的であり、かつ比較的単純である。
【0124】
本開示による直接ODelta演算又は逆ODelta演算を実施する際には、有利には、元のデータ値列は全て正であり、最低値は0である。オプションで、何らかのオフセット値、即ちプリオフセット値又はポストオフセット値が、データ値のすべてが正となり、かつ最低値が「0」となるように、それらデータ値をシフトさせるのに利用され得る。本開示によるODelta演算は、直接方式で全種類のデータと共に容易に利用され得る。本開示によるODelta演算は、典型的には、データ圧縮を提供することが可能であり、即ち伝達データレートを減らすことができる。その理由は、オフセット値がすべての値に加算されるか、或はすべての値から引かれる際に、データ値の範囲は、より少ないビットで定義され得るからである。例えば、直接ODelta演算又は逆ODelta演算を適用する前の元データ値は、−11〜+18の範囲にあり、この範囲は、+11のオフセット値を用いて0〜29の範囲に変換することができ、その変換範囲はその後、5ビットで記述される。このようなプリオフセット値又はポストオフセット値が利用されない場合、元データ値は、それらを記述するのに少なくとも6ビットを必要とし、しばしば、実際には、完全な8ビット符号付バイトが便宜上利用される。
【0125】
データ範囲に対する同様の最適化が、一般化された直接ODelta演算又は逆ODelta演算を用いる際にもまた可能である。したがって、直接ODelta演算若しくは逆ODelta演算又は何らかのその他方法が、値の完全な範囲よりも小さいオフセット値で提示され得るデータ値を作成する場合、その範囲最適化は、ODelta符号化法のどの段階においても実施され得る。オフセット値が、符号が負であろうと又は正であろうと用いられる際には、以下に
図6、
図7及び
図8を参照して説明するとおり、オフセット値は、また、エンコーダ1010からデコーダ1020に伝送されなければならない。
【0126】
直接ODelta演算は、例えばビット単位方式で元データDA1を符号化するために、1ビット方式で容易に実施され得る。このような1ビット方式で、以下により詳細に説明されるとおり方法1及び方法3により、
図6の元データDA1においてビット値の変化がない場合には値「0」が作成され、元データDA1においてビット値に変化が生じた場合には値「1」が作成される。元データの最初のビットに関する予測は、任意に値「0」であり、従って、元データDA1における最初のビット値が保存される。或は、元データの最初のビット予測値を値「1」として利用することも任意に可能であるが、このような選択は、符号化において如何なる利益も与えることはない。そのため、その予測が常に1ビットデータに対してデフォルトで値「0」であると仮定される場合、如何なる選択も伝送される必要はない。即ち、所定の値「0」が、エンコーダ1010及びデコーダ1020によって利用されることにより、この予測を伝達する必要がなくなり、その結果データ圧縮の向上に繋がる。
【0127】
本開示による直接ODelta符号化の例を以下に記載する。例示である元ビット列、即ち17個の「1」と20個の「0」とを含む37個のビットが、以下のとおり式1で与えられる。
[式1]
0 1 0 1 0 1 1 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
【0128】
式1のエントロピーEは、式2から計算可能である。
[式2]
【0129】
式2においてエントロピーを符号化するのに必要なビットの数、即ちMin_bitは、後掲の文書P7及びP8に記載されるとおり、つまり式3で与えられるとおり、シャノンの情報源符号化定理から計算可能である。
[式3]
【0130】
元ビット列が、上述のとおり直接ODelta演算、即ち方法1及び方法3で処理されると、13個の「1」と24個の「0」が存在する、37個のビットを含む以下のビット列が生成される。
[式4]
0 1 1 1 1 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
【0131】
式4のエントロピーEは、式5から計算可能である。
[式5]
【0132】
式5は、ビット最小値、即ち、式6によるMin_bitsで表現可能である。
[式6]
【0133】
式4のビット列は、例えばランレングス符号化(RLE)、ハフマン符号化、算術符号化、レンジ符号化、エントロピー変更符号化、又はSRLE符号化のうちの少なくとも1つを用いた更なる符号化で処理され、データ圧縮が達成されるという利点を持つ。
【0134】
ODelta演算は、その関連エントロピー符号化法が適用される場合、元データDA1を表すのに必要なビット量を減らし、例えば、RLE又はSRLEが、例えば式1にあるような元データの代わりに、例えば式4にあるような演算データに用いられ、この1ビット直接ODelta演算は、即ち方法1及び方法3は、式1の元ビット列において多数の変化がある場合には複数の「1」を作成し、式1の元ビット列において相互に類似のビットの長いストリームがある場合には複数の「0」を生成する。
【0135】
ODelta演算の逆バージョン、即ち方法1及び方法3の逆は、符号化データストリーム、即ちデータDA2に値「1」がある場合には、ビット値を、値「0」から値「1」に、又は必要に応じて値「1」から値「0」に変化させ、データDA2の符号化ストリームに「0」の値がある場合にはビット値を変化させることはない。ODelta演算が、直接ODelta演算が為されたデータDA2のビットストリームに対して実行される場合、データDA1の元ストリームは、復号データDA5として再生される。しかしながら、上述のとおり、VLC又はハフマン符号化等の更なる符号化が有利に利用されるが、この事も考慮される必要がある。これは、データDA3がエントロピーエンコーダの正方向の演算を用いてデータDA2から生成され、データDA4がエントロピーデコーダの逆演算を用いてデータDA3から生成されることを意味する。
【0136】
データDA1の元ストリームは、符号化をそれに適用する前に、2以上のセクションに分割されるという利点を持つ。このような分割は、データDA1の元ストリームを符号化する際により良い最適化が利用され得る機会を提供する。例えば、データDA1における可変列が、直接ODelta符号化される場合、即ち方法1及び方法3を利用して符号化される場合により多くの「1」を生成する。これに対して、フラットな不変列、即ち「フラット」列では、例えば後続のVRL符号化又はハフマン符号化にとって望ましい「0」が、より多く作成されるので、データDA1を、上述のとおり別々に符号化できる複数のセクションに分割することによって、データDA1を構成するビットストリーム全体に対してエントロピーEを低減することができる。したがって、このような分割が有利となる。
【0137】
本発明による直接ODelta符号化の例を、相互に別々に符号化される複数のセクションが利用される場合について以下に説明する。元の単一ビット列を含む第1セクションは、以下式7のとおり、全体で16個のビット、即ち7個の「1」及び9個の「0」を含む。
[式7]
0 1 0 1 0 1 1 0 0 1 0 0 0 1 0 1
【0138】
ここで、H(X)=4.7621かつB=15.82であり、Hはエントロピーを示し、BはMax_bitを示す。式7の元ビット列が、直接ODelta演算で処理される場合、対応変換ビット列が式8のように与えられる。
[式8]
0 1 1 1 1 1 0 1 0 1 1 0 0 1 1 1
【0139】
ここで、H(X)=4.3158かつB=14.34である。
【0140】
元の単一ビット列を含む第2セクションは、以下式9に示すとおりのビットを含む。
[式9]
0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
【0141】
ここで、H(X)=6.3113かつB=20.97である。式9の元ビット列が直接ODelta演算で処理されると、対応変換ビット列は、式10のとおり与えられる。
[式10]
0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
【0142】
ここで、H(X)=1.7460かつB=5.80である。これらの例では、上述したとおり、H(X)はエントロピーEを表し、Bは、符号化に要するビット最小数を表す。
【0143】
この例における式7及び式10による最良の圧縮は、両セクションが別々に直接ODelta演算で処理される場合に達成される(即ち、14.34ビット+5.80ビット=全体で20.14ビットに符号化)。これは、もともと必要とされていた36.82ビットよりも少ないビットを要し、即ち直接ODelta演算ビットは34.60ビット、又は分割後に要したビット数(=15.82ビット+20.97ビット=36.79ビット)を要する。有利には、データDA1の元ビットストリームのセクションへの分割を、元データDA1、及び変更データ(即ちデータDA2に含まれるような変更データ)の対応エントロピーHを1つずつ分析することによって自動的に実行する。
【0144】
データDA1に複数の長いランセクションがある場合に、ビット値が配列に沿って急激に変化する十分に大きなデータ領域があることを前提として、オプションで、データDA1の部分を符号化される新規セクションに単に分割することによって粗い方式で、データ圧縮が実施される。オプションで、データDA1の幾つかのセクションは、例えば個々の異なるビットが比較的少ない、相互に類似のビットの長いランが存在する場合、直接ODelta演算を利用することなく符号化される。このような場合、直接ODelta演算は、データ圧縮目的には有意な利益をもたらさない。
【0145】
データDA1をより小さいセクションに分割することは、符号化データDA2にデータを付与する更なるオーバーヘッドを生成するという欠点を有する。このようなオーバーヘッドは、例えば、全ての新しいセクションに関連するデータビット量又はデータバイト量を示す情報を含む。しかしながら、少なくとも特定量のオーバーヘッドデータ値を伝達する必要があると常に認められ、従って、所与のデータが2つのデータセクションに分割された場合には、追加のオーバーヘッドデータ値が1つのみ存在することになる。
【0146】
後に復号され得る符号化ビットストリームを達成するためには、エントロピー符号化が、直接ODelta演算、例えばVLC、ハフマン符号化、算術符号化、レンジ符号化、RLE、SRLE、EM等の後に有利に実施される。実際のデータ符号化と比較して、算出エントロピーE及び最小ビット見積値に基づいて最適化計算を実行する方がより簡単であり、かつ計算上より効率的である。このような順番で実行することにより、顕著な速度の最適化が可能となり、しばしば、符号化データDA2において最適なデータ圧縮の結果が達成される。或は、元のビット、アルファベット、数字、バイト及びワードのデータ、即ちデータDA1にあるものが、何らかの他の方法で最初に符号化されることにより、エントロピー最適化ビットストリームが生成され、その後、直接ODelta演算を用いてエントロピー最適化ビットストリームを変更し、対応符号化データ、即ちデータDA2を提供するように、エントロピー最適化を実行することも可能である。さらに、このODelta演算データは、データDA2から、さらに他の符号化方法を用いて符号化し、データDA3を生成することもできる。
【0147】
一般化された直接ODelta演算は、データDA1において用いられる様々な値を記述するパラメータ、即ち、その様々な値を提示するのに必要とされるビットの値又は数を利用する。さらに、ODelta演算は、正及び負のオフセット値、言い換えると正及び負の「ペデスタル(基礎)」値の使用を可能にする方法において利用される。例えば、データDA1が7個のビットを用いて提示され場合であって、即ち使用可能な「0」〜「127」の値を有するが、「60」〜「115」の範囲の値のみを含む場合において、−60のオフセット値がデータDA1に適用されると、これによって、6個のビットのみを含む値として表すこともできる、「0」〜「55」の範囲の値を有する変換データが生成され、つまりある程度のデータ圧縮が、これによって達成可能となる。従って、この一般化直接ODelta演算は、全範囲のデータ値が、即ち7個のビットにおいて表され、かつ8ビットバイトによって従来表されるデータ値がデータDA1に存在する場合に、結果を向上させる。
【0148】
本開示によれば、直接ODelta値、即ち方法1は、正の値(lowValue=MIN=0かつhighValue=MAX=127、wrapValue=127−0+1=128)のみを有するデータに関する、以下の例示ソフトウェアコードの抜粋によって記述される手順を用いて容易に計算可能である。
wrapValue = power(2, bits) = power(2, 7) = 128
prediction Value(予測値) = (lowValue + highValue + 1) div 2 = (wrapValue + 1) div 2 + lowValue = 64
for all pixels(全てのピクセルについて)
begin
if(originalValue >= predictionValue) then
ODeltaValue = originalValue - predictionValue
else
ODeltaValue = wrapValue + originalValue - predictionValue
predictionValue = originalValue
End
【0149】
さらに上記ODelta演算を説明するために一例を以下に提供する。値の元配列は、式11のとおりである。
[式11]
65, 80, 126, 1, 62, 45, 89, 54, 66
【0150】
対応する従来の差分符号化値は式12のとおりである。
[式12]
65, 15, 46, -125, 61, -17, 44, -35, 12
【0151】
対応直接ODelta符号化値は式13のとおりである。
[式13]
1, 15, 46, 3, 61, 111, 44, 93, 12
【0152】
ここで、パラメータwrapValue内のラップアラウンドが利用される。
【0153】
逆ODelta演算、即ち方法1が、逆ODelta値を生成するために使用可能であり、例えば以下の例示ソフトウェアコードによって実施される。
wrapValue = power(2, bits) = power(2, 7) = 128
predictionValue(予測値) = (wrapValue + 1) div 2 + lowValue = 64
for all pixels(全てのピクセルについて)
begin
ODeltaValue = originalValue + predictionValue
if (ODeltaValue >= wrapValue) then
ODeltaValue = ODeltaValue - wrapValue
predictionValue = ODeltaValue
end
【0154】
このソフトウェアコードが、式13に対して実行、適用された場合、式14で与えられる値が生成される。
[式14]
65, 80, 126, 1, 62, 45, 89, 54, 66
【0155】
本例では、wrapValueが2の冪乗の値として用いられる。これは必須ではなく、負の値がまた利用可能であるか、所与のデータ列においてプリオフセットによって範囲が変更される場合、wrapValueが、データの最高値より大きい任意の値、又は用いられる範囲よりも大きい値であってもよい。この特徴を示す更なる例を以下に示す。
【0156】
図6を参照した上述の説明を要約すると、本開示は、エンコーダ1010及びデコーダ1020に関連するものである。オプションで、エンコーダ1010及びデコーダ1020は、30によって全体が示されているコーデック装置と組合せて利用される。エンコーダ1010は、元入力データDA1を受信するように動作可能であり、元入力データDA1は、例えば直接ODelta法を用いて符号化されることにより、対応符号化データDA2又はDA3が生成される。符号化データDA2又はDA3は、オプションで、通信ネットワーク1040を介して伝達されるか、又はデータ記憶媒体1050、例えば光ディスク読取専用メモリ(ROM)等のデータ媒体に記憶される。デコーダ1020は、例えば通信ネットワーク1040を介してストリーム配信される符号化データDA2又はDA3、又はデータ記憶媒体1050に提供される符号化データDA2又はDA3を受信し、かつ逆の方法、例えば逆ODelta法を適用することにより、例えば元データDA1に実質的に類似する対応復号データDA5を生成するように動作可能である。エンコーダ1010及びデコーダ1020は、例えば本明細書における例示実施形態として提供されるコードのように、1つ又は複数のソフトウェア製品を実行するように動作可能である、デジタルハードウェア、例えばコンピュータハードウェアを用いて実施されるという利点を持つ。或は、エンコーダ1010及び/又はデコーダ1020は、専用デジタルハードウェアを用いて実施される。
【0157】
エンコーダ1010において実行されるODelta法は、
図7に記載される工程を利用するものである。任意の第1工程1100において、入力データDA1が処理され、そのデータ要素の値の範囲が見出される。任意の第2工程1110において、データ要素を正のレジームに変換することにより変換要素の対応セットを生成するために、その値の範囲から、オフセット、即ちプリオフセットが計算される。第3工程1120においては、第2工程1110において任意に変換された要素が、次いで、直接ODelta符号化を受けることにより、対応ODelta符号化値が生成される。第4工程1130においては、ODelta符号化値、並びに任意のオフセット値、最小値(lowValue)、及び/又は最大値(highValue)が、次いで、例えばランレングス符号化(RLE)、レンジ符号化、又はハフマン符号化を用いて別々に符号化され、データDA2からデータDA3が生成される。オフセット値、最小値(lowValue)、及び/又は最大値(highValue)は、常に圧縮可能であるという訳ではなく、従って、それらはエンコーダ1010からデコーダ1020に適切なビット量を用いて伝達されることを要する。さらに、オフセット値、最小値(lowValue)、及び/又は最大値(highValue)は、直接ODelta演算に関する任意の特徴であり、例えば、オフセット値は、特定の状況では、値「0」を有し、lowValueは、値MINを有し、highValueは、値MAXを有する。即ち、変換は全く適用されずに、全範囲が用いられる。特に、直接ODelta演算が、1ビットデータ、即ちビット単位の符号化のために実施される場合、オフセット値を必要とすることは全くなく、そのため、工程1100及び110は常に無視される。オフセット値が、工程1110においてもまた用いられる場合には、最高値と最低値を提示する範囲値は、その中で更新されなければならない。異なる値の数、即ちwrapValueは、デコーダ1020によってまた識別されなければならず、或は、さもなければエンコーダ1010は、圧縮データ内においてそれをデコーダ1020に伝達しなければならない。オプションで、デフォルトwrapValue(=highValue−lowValue+1)が、エンコーダ及びデコーダにおいて用いられる。オプションで、エンコーダ1010及びデコーダ1020の少なくとも1つが、例えば入力データDA1を符号化のためのセクションに分割してデータDA1の最適な圧縮を提供し、符号化データDA2を生成する最適な方式を見出すために、再帰的な方式で動作する。
【0158】
デコーダ1020において実行される逆ODelta法は、
図8に記載される工程を利用する。第1工程1200において、データDA2/DA3又はDA4は、上述の工程1130において利用されるものとは逆の符号化を受けることにより、復号ODeltaデータが生成され、復号ODeltaデータは、ODelta符号化値を有し、かつ任意の別のオフセット値を有する。第2工程1210においては、ODelta符号化値は、復号され、データ要素列が生成される。第3工程1220においては、データ要素列が、最適プリオフセット値を用いて変換され、復号データDA5が生成される。特定の状況においては、このような変換は値「0」に設定され、つまり、有効な変換が適用されることはない。この場合も、例えば1ビット符号化、即ちビット単位の符号化を実行する場合、オフセット値を利用する必要なく、上記方法を実行することが可能であり、それによって、工程1220を無視することが可能になる。さらに、デコーダ1020は、受信したデータ要素を適切な方式で復号することを可能にするためにwrapValueを識別することも要する。
【0159】
上記オフセットを利用し、正の値のみを取得することによって、データDA2又はDA3におけるより効率的なデータ圧縮が達成可能となる。すべてのデータ値が、既に正の値である場合、如何なるオフセット値を追加する必要はない。勿論、以下の例に示すとおり、負のオフセット値は、利用可能な範囲を小さくするために任意に利用されるが、必須ではない。
【0160】
図7及び
図8の方法は、オプションで、ODelta符号化を受ける利用可能な値のみを用いることによって更に最適化され得る。このような最適化には、用いる値が既知であることが必要とされる。例えば、上述の例においては、1(=元の最小値)〜126(=元の最大値)の値のみが元データセットDA1に存在する。このため、オフセット値は、1である(->lowValue=元の最小値−オフセット=1−1=0かつhighValue=元の最大値−オフセット=126−1=125)。プリオフセット値が元データDA1から引かれた場合、結果として式15にある次の値が得られる。
[式15]
64, 79, 125, 0, 61, 44, 88, 53, 65
【0161】
式15から、最大値として125が決定され(highValue=元の最大値(original max)−オフセット=126−1=125)、その結果、「数字」(=最大差分値(maximum Delta value)=highValue − lowValue)は、そうすると、125となり、即ちwrapValueは、最小で126となり得る(=数字+1=highValue−lowValue+1)。すると、これらの値を保存するか、及び/又は伝達する必要があるため、前の例は、以下のとおりプロセス値を変化させることによって変更することができる。
wrapValue = 126 (「0」〜「125」=>126個の異なる値)
prediction Value(予測値)= (highValue + lowValue + 1) div 2 = (wrapValue + 1) div 2 + lowValue = 63
【0162】
対応する直接ODelta演算の値は式16で与えられている。
[式16]
1, 15, 46, 1, 61, 109, 44, 91, 12
【0163】
全ての「負の差分値」が、今や、2分の1に減じられている(即ち=範囲変化=128−126)ことが理解される。同様に、デコーダ1020においても、プロセス値は以下のとおり変化させなければならない。
wrapValue = 126
predictionValue = (wrapValue + 1) div 2 + lowValue = 63
【0164】
対応する逆のODelta値は、以下の式17のとおりである。
[式17]
64, 79, 125, 0, 61, 44, 88, 53, 65
【0165】
プリオフセット値を式17に加算すると、式15における元データに対応して、以下の式18の結果が得られる。
[式18]
65, 80, 126, 1, 62, 45, 89, 54, 66
【0166】
本例では、値の範囲はほぼ全体であり、従って、オフセット値及び最大値(highValue)を用いて直接ODelta演算を適用することにより得られる利益は比較的それほど大きいものではない。しかしながら、それら値が適切に伝達される場合には、エントロピーEの低減が依然として達成可能であり、即ち、頻度テーブル又は符号テーブルにおいて値の数を減らすことができる。この範囲がより小さい場合に最大の利益が得られる。
【0167】
データを符号化及び復号する実践的な1ビットの直接及び逆ODelta法の例示実施形態、即ち、方法1又は方法3が、実行可能なコンピュータソフトウェアコードにより以下に提供される。これらの方法は、上記の直接及び逆ODelta演算、即ち方法1又は方法3を利用する。ソフトウェアコードは、コンピュータハードウェアで実行される際に動作可能であり、1つのバイトバッファから別のバイトバッファに対してビットを処理する。ソフトウェアコードでは、GetBit、SetBit、及びClearBitの関数が、常に、HeaderBits値を更新する。HeaderIndex値もまた、次のビットが次のバイトにある場合に更新される。オプションで、ソフトウェアコードは、1セットのHeaderIndex値及びHeaderBits値のみがソース及び宛先に関し用いられるように最適化することができ、その結果、所与のビットが宛先バッファに書き込まれる場合のみ値が更新される。
【0168】
上述の直接及び逆ODelta演算、即ち方法1又は方法3は、例えばビデオデータ、画像データ、音声データ、グラフィックデータ、地震データ、医療データ、測定値、参照数字及びマスク等のデジタルフォーマットである任意の種類のデータを圧縮するのに有利に利用される。さらに、1つ又は複数のアナログ信号も、対応デジタルデータに最初に変換させる場合に、例えば圧縮前にADCを用いることによって、直接ODelta演算を用いて圧縮可能である。逆ODelta演算を用いる際、データを変換して1つ又は複数のアナログ信号に戻すことが望まれる場合には、演算の後にDACを用いることができる。しかしながら、直接ODelta演算それ自体は、データを圧縮するのに通常は効果的ではないものの、例えば可変長符号化(VLC)、算術符号化、レンジ符号化、ランレングス符号化、SRLE、エントロピー変更等の他の符号化法と組合せて利用される場合には効果的なデータ圧縮を提供できることが理解される。これらの符号化法は、直接ODelta演算がエンコーダ1010において利用された後に、データDA2に対して用いられる。生じるデータがデコーダ1020において実施される逆ODelta演算に伝達される前に、符号化データDA2は、対応的に復号されて元に戻されなければならない。ODelta演算は、他の種類のエントロピー変更演算と共に利用することもできる。特定の状況においては、直接ODelta演算は、エントロピーEの増加を生じさせることもあり、データ圧縮アルゴリズムは、データの符号化に用いるための直接ODelta演算を、それが有利なデータ圧縮性能を提供する場合のみ、選択的に利用するように有利に動作可能であり、例えば、それは圧縮されるデータの性質に基づいて選択的に利用されたり、例えば上述のとおり入力データDA1の選択部分に選択的に利用されたりする。
【0169】
直接ODelta演算は、例えば、本願において援用される米国特許出願US13/584, 005に記載されるようなブロックエンコーダと組合せて利用されること等が考案されている。逆ODelta演算は、本願において援用される米国特許出願US13/584, 047に記載されるようなブロックデコーダと組合せて利用されることが考案されている。オプションで、直接ODelta演算及び逆ODelta演算は、本願において援用される米国特許出願US13/657, 382に記載されるようなマルチレベル符号化法と組合せて利用されるという利点を持つ。2進状態を含む全ての種類の1ビットデータ、例えばデータDA1に存在するもの等を1ビットバージョンの直接ODelta演算で処理されることにより対応変換データを生成し、対応変換データは、次いで、その後、実際のエントロピー符号化を受けることにより、符号化データDA2又はDA3が生成されるという利点を持つ。オプションで、上述のとおり、直接ODelta演算が、元データDA1の性質に応じて選択的に利用される。
【0170】
オプションで、直接ODelta演算の前又は後に、データのエントロピーを変更する他の方法を利用することができる。例えば、一般化されたバージョンの直接ODelta演算の中でマルチビットデータに対して直接、直接ODelta演算を用いることもできる。さらに、用いられるビット全てをビットの連続配列に最初に入力した後に、上記1ビットバージョンの直接ODelta演算をマルチビットデータに対して有利に利用する。
【0171】
エンコーダ1010において直接ODelta演算と組合せて複数の方法がデータ圧縮のために利用される場合、対応する逆演算が、例えば以下のとおり、デコーダ1020において逆順に実行される。
【0172】
以下の処理がエンコーダ1010において利用される。
[式19]
[データDA1] =>直接ODelta(方法2)
=>VLC−
=>EM
=>算術符号化
=> [データDA3]
【0173】
以下の方法の逆順がデコーダ1020において利用される。
[式20]
[データDA3] =>逆算術符号化
=>逆EM
=>逆VLC
=>逆ODelta(方法2)
=>[データ DA5]
【0174】
ここで、「VLC」は可変長符号化を示し、「EM」はエントロピー変更を示す。
【0175】
上記に記載したODelta演算は、可逆的であり、かつ無損失である。さらに、上記ODelta演算は、オプションで、例えばビット単位の符号化を実行する際には1ビットデータストリームに対して、さらにそれだけではなくその他データに対しても、特に実施することが容易に可能である。すべての種類のデータが、一般化バージョンの直接ODelta演算を用いて容易に処理され得るという利点を持つ。そして、直接ODelta演算はデータが圧縮される際に利用され、対応する逆ODelta演算は圧縮データを展開する際に利用されるという利点を持つ。オプションで、ODelta演算が利用される場合、直接ODelta演算と、それに対応する逆演算が、逆順に利用され、言い換えると、逆ODelta演算は、元ビットストリームに対して最初に一時的に実行され、その後直接ODelta演算が続き、元ビットストリームが再生される。一方のODelta演算はエントロピーを増やし、他方のODelta演算はエントロピーを減らす。直接ODelta演算がエントロピーを全く変更してはならず、次いで逆ODelta演算もエントロピーを変更しないというのは極めて稀有なケースである。例えば方法1のために直接ODelta演算及び逆ODelta演算が用いられる場合、これらの演算の逆順は、方法4の通常の順序と同様である。順序の同様の変更が、方法2及び方法3についても可能である。
【0176】
1ビットバージョンにおいて、即ちビット単位方式でデータを符号化するために、直接ODelta演算は、予測無しで有利に開始し、即ち、デフォルトで初期値「0」の予測を仮定する。一般化バージョンにおいては、ODelta演算は、使用可能なデータ範囲の半分を表す予測を用いて開始し、例えば、5ビットがデータDA1の入力データ値に用いられる場合、即ち「0」〜「31」の範囲の32個の異なる値が用いられる場合、予測値は32/2=16である。有利には、ODelta演算には、データ要素が該演算を用いて処理されるために、使用可能なデータ範囲に関する情報が提供される必要がある。
【0177】
上記に記載される開示の実施形態によれば、データDA1においてビット又は任意のデジタル値として提示されるエントロピーEを低減することが可能になる。直接ODelta演算によって、ほぼ常に、差分符号化と比較してより向上したエントロピー低減を行える。差分符号化がバイトラップアラウンドと共に用いられ、元予測を用いた差異ODelta演算(方法1)が、wrapValue=256、lowValue=MIN=0、及びhighValue=MAX=255の値を用いる場合のみ、その中で同一の出力結果を生成する。別の直接ODelta法が用いられる場合、又は入力データにおいて全データ範囲が利用可能ではない場合、ODelta演算は、選択した方法、又はlowValue及び/若しくはhighValueを送信することによってより良い結果を生成するが、即ち、これら送信されるものはwrapValueもまた自動的に変更する。エントロピーが小さいほど、より高いデータ圧縮比でデータを圧縮することが可能になる。より高いデータ圧縮比は、より小さい容量のデータ記憶媒体の利用を可能にし、また、圧縮データを伝送する場合に、より遅いデータ帯域幅の利用も可能にし、対応するエネルギー消費の低減も可能にする。
【0178】
上記において、差分と合算の方式の計算がエンコーダ1010において実行され、かつ対応する逆の計算がデコーダ1020において実行されることが理解される。エンコーダ1010において用いられる他の予測方法を用いることも可能であり、対応する逆予測が次いでデコーダ1020において実行される。この事は、実際、少なくとも4つの異なる直接ODelta方法、並びに少なくとも4つの対応する逆ODelta方法が存在することを意味している。これらの方法の詳細かつ厳密な説明は以下のとおりである。オプションで、上記計算は、再帰的な方式で実行されることにより、符号化データDA2(又はDA3)において高度なデータ圧縮が得られる。このような帰納的な計算を実行する際には、変化する数の範囲が、再帰的計算が何回利用されてきたかに応じて利用される。例えば、エンコーダ1010においては、以下の順序の計算がデータDA1に対して実行され、符号化データDA2(又はDA3)が生成される。
【0179】
[式21]
[データDA1] e直接ODelta (方法3)=>
e直接ODelta (方法3)=>
eEM=>
e直接ODelta (方法1)=>
eVLC [データDA3]
【0180】
デコーダ1020において対応する逆演算が実行される。
【0181】
[式22]
[データDA3] dVLC=>
d逆ODelta (方法1)=>
dEM=>
d逆ODelta (方法3)=>
d逆ODelta (方法3) [データDA5]
【0182】
式21(方法1に対応)、式22(方法2に対応)、式23(方法3に対応)、及び式24(方法4に対応)によって示されるとおり、データがこれら4つの方法において演算処理されるたびに、任意にすべての方法を用いることを試すことが可能である。その理由は、これらの方法のうち1つが、その他の方法よりも、処理されるデータのエントロピーを減らせる可能性があるからである。エンコーダ1010及び/又はデコーダ1020内における方法の使用を最適化する上で、選択される1つの方法又は複数の方法が、必要とされるデータにおける情報量と比較してエントロピーを減少させる限り、何度も同一又は異なる方法を用いることは有利である。従って、方法1〜4は、数値を符号化するために使用可能であるが、「数値」とは、その定義において、ビット単位方式の符号化ビットストリームにあるような1ビットデータ並びに非2進数、並びにマルチビット値を包含する。
【0183】
差分演算は、連続数値の余りを表し、それに対応して合算演算は、連続数値の合計を表す。エンコーダ1010において実行されるこれらの演算には、デコーダ1020におけるそれぞれ独自の対応する逆演算がある。差分又は合計は、現入力値、及び予測値として用いられる前の入力値又は結果値に基づいて計算され得る。他の予測値も用いることができ、それらは、例えば、デコーダにおいて逆を実行することが可能である限りにおいて、エンコーダにおいて以前の入力値及び出力値を用いることにより予測を作成し得る。
【0184】
このような方法の何れも、エンコーダ1010及びデコーダ1020内で有意にデータを圧縮するものではないが、すべての方法は、エントロピーを低減するのに有利に利用され、その結果、他の圧縮法により、次いで、エントロピー低減データをより効率的に圧縮することができる。このような他の圧縮法は、オプションで、ハフマン符号化、算術符号化、レンジ符号化、RLE符号化、SRLE符号化、エントロピー変更符号化の少なくとも1つである。しかしながら、全ての方法に関し、例えばデータの可逆圧縮及びそれに続く可逆展開が達成し得る場合には、幾つかの数値を伝送する必要があり、その幾つかの数値を用いて上記演算とその逆演算とが常に正確に実施し得る。勿論、エンコーダ1010及びデコーダ1020は、どのような種類の数値が入力データDA1に含まれているかに関する情報を有する。有利には、数値範囲、即ちMIN及びMAXによって定義される数値範囲が認識されることが想定されている。原則、方法は、常に、直接既存のデータ範囲に基づいて機能し得る。上記演算が必要とする数値は、生じる最低値(lowValue)及び生じる最高値(highValue)であり、lowValueはMIN以上であり、highValueはMAX以下である。
【0185】
これらの値に基づいて、他の必要な数値を導くことができる。これらの値は、様々な形態で伝送され、欠損値が有利に計算されるという利点を持つ。例えば、セット[「lowValue」、「highValue」、「number(数)」]からの2つの値が既知である場合、その「number(数)」は、[highValue −lowValue]であり、次いで、第3の値は、それらから計算することができる。データDA2において特定の値を省略し、次いでデコーダ1020においてそれら値を導くことは、データDA2においてより大きな程度のデータ圧縮を提供することを可能にする。
【0186】
これらの値に加えて、第1の値、即ち「prediction」(「予測」)の計算において前の値として用いられ得る数Pが必要とされる。「0」と「number」(「数」)の値との間の値は、常に、数P、即ち「prediction」(「予測」)に関して選択され得る。さらに、上記演算が、エンコーダ20においてデータDA2/DA3又はDA4を復号する際に回復可能に機能するためには、つまり、演算が生成する値の範囲をできる限り小さく縮小させるためには、値「wrapValue」が上記演算に提供される必要がある。しかしながら、この「wrapValue」は、「number」(「数」)よりも大きくなければならず、有利には、それは値「number」(「数」)+1を有する。オプションで、例えばデータDA1が大きい値よりも小さい値をより多く含むと仮定した場合、データDA1の性質に応じて、第1「prediction」(「予測」)値には、上記のとおり「0」が選択され得る。或は、データDA1が小さい値よりも大きい値をより多く含むと仮定した場合、第1「prediction」「予測」値には、「number」「数」と等しい値が選択され得る。仮定が値の大きさに関して為されていない場合、「prediction」(「予測」)値には値「(wrapValue+1)÷2+lowValue」を用いることが望ましい。
【0187】
本開示の実施形態を実施する際にコンピュータハードウェアにおいて実行する演算の例について以下に説明する。
【0188】
エンコーダ1010において、第1直接差分演算、即ち方法1は、有利には以下のとおり実施される。全てのデータ値に関し、入力値、即ち「original」値(「元」)値に対応する出力値、即ち「result」(「結果」)がソフトウェアループにおいて計算される。
result = original - prediction
if result < lowValue then result = result + wrapValue
【0189】
最終的に、次の入力に関する予測値が現入力と等しい値に設定され、即ち、以下とされる。
Prediction = original
【0190】
デコーダ1020において、第1逆差分演算、即ち、方法1が、有利には、以下のとおり実施される。全てのデータ値に関し、入力値、即ち「original」(「元」)値に対応する出力値、即ち「result」(「結果」)がソフトウェアループにおいて計算される。
result = original + prediction
if result > highValue then result = result - wrapValue
【0191】
最終的に、次の入力に関する予測値が、現結果と等しい値に設定され、即ち、以下のとおりとされる。
prediction = result
【0192】
エンコーダ1010において、第2直接差分演算、即ち方法2が、有利には以下のとおり実施される。全てのデータ値に関し、入力値、即ち「original」(「元」)値に対応する出力値、即ち「result」(「結果」)がソフトウェアループにおいて計算される。
result = original - prediction
if result < lowValue then result = result + wrapValue
【0193】
最終的に、次の入力に関する予測値が、現結果と等しい値に設定され、即ち、以下のとおりとされる。
prediction = result
【0194】
デコーダ1020において、第2逆差分演算、即ち方法2が、有利には以下のとおり実施される。全てのデータ値に関し、入力値、即ち「original」(「元」)値に対応する出力値、即ち「result」(「結果」)がソフトウェアループにおいて計算される。
result = original + prediction
if result > highValue then result = result - wrapValue
【0195】
最終的に、次の入力に関する予測値が、現入力と等しい値に設定され、即ち、以下のとおりとされる。
prediction = original
【0196】
エンコーダ1010において、第1直接合算演算、即ち方法3が、有利には以下のとおり実施される。全てのデータ値に関し、入力値、即ち「original」(「元」)値に対応する入力値、即ち「result」(「結果」)がソフトウェアループにおいて計算される。
result = original + prediction
if result > highValue then result = result - wrapValue
【0197】
最終的に、次の入力に関する予測値が、現入力と等しい値に設定され、即ち、以下のとおりとされる。
prediction = original
【0198】
デコーダ1020において、第1逆合算演算、即ち方法3が、有利には以下のとおり実施される。全てのデータ値に関し、入力値、即ち「original」(「元」)値に対応する入力値、即ち「result」(「結果」)がソフトウェアループにおいて以下のとおり計算される。
result = original - prediction
if result < lowValue then result = result + wrapValue
【0199】
最終的に、次の入力に関する予測値が、現結果と等しい値に設定され、即ち、以下のとおりとされる。
prediction = original
【0200】
エンコーダ1010において、第2直接合算演算、即ち方法4が、有利には以下のとおり実施される。全てのデータ値に関し、入力値、即ち「original」(「元」)値に対応する入力値、即ち「result」(「結果」)がソフトウェアループにおいて以下のとおり計算される。
result = original + prediction
if result > highValue then result = result - wrapValue
【0201】
最終的に、次の入力に関する予測値が、現結果と等しい値に設定され、即ち、以下のとおりとされる。
prediction = original
【0202】
デコーダ1020において、第2逆合算演算、即ち方法4が、有利には以下のとおり実施される。全てのデータ値に関し、入力値、即ち「original」(「元」)値に対応する出力値、即ち「result」(「結果」)がソフトウェアループにおいて以下のとおり計算される。
result = original - prediction
if result < lowValue then result = result + wrapValue
【0203】
最終的に、次の入力に関する予測値が、現結果と等しい値に設定され、即ち、以下のとおりとされる。
prediction = original
【0204】
このような合算及び差分の演算、4つの方法すべてが、即ちODeltaバージョンのエンコーダ1010及びデコーダ1020を実施する際に、1ビットデータ、即ちビット単位で適用可能でもある。1ビットデータの状況においては、次の値は、エンコーダ1010及びデコーダ1020の両方によって既知であり、つまり、MIN=0、MAX=1である。さらに、有利には、lowValue=MIN=0かつhighValue=MAX=1と仮定される。さらに、このような場合、「number」(「数」)は、従って、[highValue−lowValue=1−0=1]であり、wrapValueについては、「number」(「数」)+1=1+1=2が選択されるという利点を持つ。その理由は、lowValue=MIN=0から開始する正の値のみを有し得ると考慮される1ビットデータのみ存在するからである。1ビットデータに関し、方法1及び方法3は、相互に類似の符号化結果を算出する。同様に、方法2及び方法4は、相互に類似の符号化結果を算出する。このような知識を有することは、様々なデフォルトが仮定され得るので、データDA2に送信される必要のある情報を有利に簡素化する。即ち、差分演算、つまり方法1又は方法2の実行回数の数、及び選択された予測(入力値(方法1)又は結果値(方法2))についての情報を送信する必要があるだけで、その結果、デコーダ1020は、データDA2、DA3又はDA4を復号して復号データDA5を生成する際に、正しい逆差分演算を必要回数、実行し得る。
【0205】
同様の出力を作成する方法1又は方法3を用いることによって作成された第1の例は、やはり同様の出力を作成する方法2又は方法4を用いることによっても処理され得る。以下に示す結果は、それら方法をデータ式1に適用した場合に取得され得るものである。
0 1 1 0 0 1 0 0 0 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1
【0206】
この時、処理データは、24個の「1」と13個の「0」とを有し、即ちそのエントロピーは第1の例のものと同じであるが、「1」及び「0」のカウントは位置を変える。これは常に生じる訳ではなく、その代わり、しばしば、これら異なる方法の間でエントロピーが同様に変化する。例えば、データの最初の4つの要素の後、方法1及び/又は方法3は、3個の「1」と1個の「0」を生成するのに対し、元データと、方法2及び/又は方法4を用いて処理されたデータは、2個の「1」と2個の「0」とを有する。従って、このような場合の方法1及び/又は方法3は、方法2及び/又は方法4より小さいエントロピーを生成し、また、元のものよりも小さいエントロピーを生成する。
【0207】
マルチビットによる実施においては、データDA1が−64〜+63の範囲の値を含む場合、MIN=−64かつMAX=63である。lowValue=MINかつhighValue=MAXと仮定することによって、 「number」(「数」)=127であり、wrapValueには、有利に128が選択される。しかしながら、データDA1がランダムに変化する場合、「prediction」(「予測」)値は、有利には、値[(wrapValue+1)÷2+lowValue=64+−64=0]に設定される。
【0208】
第1値が例えば−1である場合、直接ODelta方法1及び/又は方法2を用いた第1符号化値は−1−0=−1となり、これに対応して、直接ODelta方法3及び/又は方法4を用いた第1符号化値は−1+0=−1となるであろう。次の値は、次いで、どのようにデータが進行するかに応じて変化し、例えば第2値が5となる場合、直接ODelta方法1は5−(−1)=6を生成し、直接ODelta方法2は5−(−1)=6を生成し、直接ODelta方法3は5+(−1)=4を生成し、直接ODelta方法4は5+(−1)=4を生成するだろう。デコーダ1020は、この場合、逆ODelta方法1及び/又は方法2を用いた場合に第1値として−1+0=−1を生成することが可能であり、逆ODelta方法3及び/又は方法4を用いて、−1−0=−1を生成することが可能であるだろう。これに対応して、逆ODelta方法1を用いた第2値は6+(−1)=5となり、逆ODelta方法2を用いた第2値は6+(−1)=5となり、逆ODelta方法3を用いた第2値は4−(−1)=5となり逆ODelta方法4を用いた第2値は4−(−1)=5となるであろう。
【0209】
この解決手段は、数の範囲が実際に−20〜+27の値のみを含む場合には、次いで最適化され得る。本例の場合、例えば、lowValue=−20及びhighValue=27を伝達することが可能である。両方が伝達される場合は、number=47と計算可能であり、wrapValueには、次いで、有利には48が選択される。すると、predictionについて、値48÷2+ −20=4を計算可能である。次いで、以前の例により、ODelta方法1又は方法2が用いられる場合、例えば、値−1に関して−1−4=−5が生成され、ODelta方法3又は方法4が用いられる場合には、−1+4=3が生成される。同様に、第2値は、ODelta方法については、(5−(−1))=6、(5−(−5))=10、(5+(−1))=4、及び(5+3)=8となるであろう。デコーダ1020は、再び正常に機能し、方法1及び/又は方法2に関して第1値を−5+4=−1と生成し、方法3及び/又は方法4に関して3−4=−1を生成する。対応して、各種方法に関する第2値は、(6+(−1))=5、(10+(−5))=5、(4−(−1))=5、及び(8−3)=5として復号されるだろう。
【0210】
上記のこれら例における値は、上記範囲、即ち−64〜+63又は−20〜+27の内にあることが解り、従って、これらの例による値の内で補正項を実行する必要はないが、任意の負又は正の変化が十分に大きいものである場合には、データ値に対する補正が、与えられる式21〜24によって為され、上記範囲内に結果値を維持する必要がある。ここで補正項はラップアラウンド値を指していることに留意されたい。
【0211】
lowValueが既知である場合、エントロピー符号化データDA3と共にエンコーダ1010からデコーダ1020に送信されなければならない符号化テーブルを簡素化するために、符号化値は、有利には、0で開始し、かつ値「number」(「数」)で終了するように構成される。この演算は、ポストオフセットと呼ばれ、このポストオフセット値は、エントロピー符号化の後、かつデータDA4に対する逆ODelta演算の前に、符号化データ値から削除されなければならない。
【0212】
当初述べたとおり、pre−offset(プリオフセット)機能を用いてオフセットを実施することも可能であり、この場合、元入力データ(DA1)は、ODelta方法の実際の実行の前に既に0から「number」(「数」)までの値を含み得る正の要素に変換される。また、この状況においては、 「プリオフセット」及びODelta法が繰り返し同じ情報を伝達しないように、又は何らかの他の方法の結果、既知であることを無視するように、この演算が要する情報伝達が実行されるのが有利である。適切なDA5出力データを作成するためには、このプリオフセットによる効果は、逆ODelta演算の後に復号データから削除されなければならない。
〔付属書類2:ブロックエンコーダの概要〕
【0213】
ブロックエンコーダは、英国特許出願公開2503295号公報に開示されている。この公報の内容は本願明細書の一部を成すものと考えられたい。
【0214】
入力データを符号化して対応する符号化出力データを生成する方法が開示されているが、この方法は、
(a)前記入力データを複数のブロックまたはパケットに分割することであって、前記ブロックまたはパケットはそれらのコンテンツに応じた、一つ以上のサイズを有する、分割することと;
(b)対応する変換データを生成するために、前記ブロックまたはパケットのコンテンツに対して複数の変換を適用することと;
(c)前記変換データの表現の品質が一つ以上の品質基準を満たすかどうかを決定するために、前記変換データの表現の品質を、変換を適用する前のブロックまたはパケットのコンテンツと比較して調べることと;
(d)一つ以上のブロックまたはパケットに対応する変換データの表現の品質が前記一つ以上の品質基準を満たさない場合、前記一つ以上のブロックまたはパケットをさらに分割および/または結合し、ステップ(b)を繰り返すことと;
(e)一つ以上のブロックまたはパケットに対応する変換データの表現の品質が前記一つ以上の品質基準を満たす場合、符号化される前記入力データを表わす符号化出力データを提供するために、変換データを出力することと;
を含むことを特徴とする。
【0215】
また、入力データを符号化して対応する符号化出力データを生成するエンコーダが開示されているが、このエンコーダは、以下の処理:
(a)前記入力データを複数のブロックまたはパケットに分割することであって、前記ブロックまたはパケットはそれらのコンテンツに応じた、一つ以上のサイズを有する、分割することと;
(b)対応する変換データを生成するために、前記ブロックまたはパケットのコンテンツに対して複数の変換を適用することと;
(c)前記変換データの表現の品質が一つ以上の品質基準を満たすかどうかを決定するために、前記変換データの表現の品質を、変換を適用する前のブロックまたはパケットのコンテンツと比較して調べることと;
(d)一つ以上のブロックまたはパケットに対応する変換データの表現の品質が前記一つ以上の品質基準を満たさない場合、前記一つ以上のブロックまたはパケットをさらに分割および/または結合し、ステップ(b)を繰り返すことと;
(e)一つ以上のブロックまたはパケットに対応する変換データの表現の品質が前記一つ以上の品質基準を満たす場合、符号化される前記入力データを表わす符号化出力データを提供するために、変換データを出力することと;
を実行するデータ処理ハードウェアを備える。
〔付属書類3:ブロックデコーダの概要〕
【0216】
ブロックデコーダは、英国特許出願公開2505169公報に開示されている。この公報の内容は本願明細書の一部を成すものと考えられたい。
【0217】
符号化入力データを復号して対応する復号出力データを生成する方法が開示されているが、この方法は、以下のステップ:
(a)前記符号化入力データを処理することであって、前記符号化入力データからヘッダ情報を抽出し、前記ヘッダ情報は、前記符号化入力データに含まれるブロックおよび/またはパケットに関する符号化データを示し、かつ、前記ブロックおよび/またはパケットに関する符号化データとして含めるために、元のブロックおよび/またはパケットを圧縮符号化するのに使用された一つ以上の変換を示す、前記処理することと;
(b)復号ブロックおよび/またはパケットコンテンツを受信するために、データ記憶構成のデータフィールドを用意することと;
(c)前記一つ以上の変換を記述する情報を読み出し、圧縮符号化された元のブロックおよび/またはパケットデータを復号するための、前記一つ以上の変換の逆変換を適用することであって、前記データフィールドに入力するための、対応する復号ブロックおよび/またはパケットコンテンツを生成する、前記読み出し・適用することと;
(d)前記符号化入力データの分割・結合情報に従って、前記データフィールドのブロックおよび/またはパケットを分割および/または結合することと;
(e)前記符号化入力データが少なくとも部分的に復号されると、前記データフィールドから復号出力データとしてデータを出力することと;
を含む。
【0218】
また、入力データを復号して対応する復号出力データを生成するように動作するデコーダが開示されているが、このデコーダは、以下の処理:
(a)前記符号化入力データを処理することであって、前記符号化入力データからヘッダ情報を抽出し、前記ヘッダ情報は、前記符号化入力データに含まれるブロックおよび/またはパケットに関する符号化データを示し、かつ、前記ブロックおよび/またはパケットに関する符号化データとして含めるために、元のブロックおよび/またはパケットを圧縮符号化するのに使用された一つ以上の変換を示す、前記処理することと;
(b)復号ブロックおよび/またはパケットコンテンツを受信するために、データ記憶構成のデータフィールドを用意することと;
(c)一つ以上の変換を記述する情報を読み出し、圧縮符号化された元のブロックおよび/またはパケットデータを復号するための、一つ以上の変換の逆変換を適用することであって、データフィールドに入力するための、対応する復号ブロックおよび/またはパケットコンテンツを生成する、前記読み出し・適用することと;
(d)符号化入力データの分割・結合情報に従って、データフィールドのブロックおよび/またはパケットを分割および/または結合することと;
(e)符号化入力データが少なくとも部分的に復号されると、データフィールドから復号出力データとしてデータを出力することと;
を実行するデータ処理ハードウェアを備える。