JP2010509895A5 - - Google Patents

Download PDF

Info

Publication number
JP2010509895A5
JP2010509895A5 JP2009537330A JP2009537330A JP2010509895A5 JP 2010509895 A5 JP2010509895 A5 JP 2010509895A5 JP 2009537330 A JP2009537330 A JP 2009537330A JP 2009537330 A JP2009537330 A JP 2009537330A JP 2010509895 A5 JP2010509895 A5 JP 2010509895A5
Authority
JP
Japan
Prior art keywords
codeword
codewords
subgroup
group
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2009537330A
Other languages
English (en)
Other versions
JP2010509895A (ja
JP4897888B2 (ja
Filing date
Publication date
Priority claimed from US11/840,406 external-priority patent/US7573407B2/en
Application filed filed Critical
Publication of JP2010509895A publication Critical patent/JP2010509895A/ja
Publication of JP2010509895A5 publication Critical patent/JP2010509895A5/ja
Application granted granted Critical
Publication of JP4897888B2 publication Critical patent/JP4897888B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

メモリ効率の良い(MEMORY EFFICIENT)適応形ブロックコーディング
本出願は、それぞれの全内容が参照により本明細書に組み込まれる、2006年11月14日出願の米国仮出願第60/865,827号明細書、および2006年11月22日出願の米国仮出願第60/867,081号明細書の利益を主張する。
本開示は、データ圧縮に関し、より詳細には、可変長コード(VLC)を使用したデータ圧縮に関する。
データ圧縮は、データ記憶空間、伝送帯域幅、またはその両方の消費を低減するために、様々な用途において広範に使用されている。データ圧縮の適用例には、ディジタル映像(video)、画像、言語(speech)および音声のコーディングなどがある。例えば、ディジタル映像コーディングは、ディジタルテレビ、ディジタル直接放送システム(digital direct broadcast system)、無線通信装置、PDA(携帯情報端末)、ラップトップまたはデスクトップコンピュータ、ディジタルカメラ、ディジタル記録装置、ビデオゲーム装置、セルラー式または衛星無線電話などを含む、幅広い装置に使用されている。ディジタル映像装置は、より効率的にディジタル映像を送受信するために、MPEG−2、MPEG−4、またはH.264/MPEG−4 Advanced Video Coding(AVC)などの映像圧縮技術を実装する。
一般に、映像圧縮技術は、映像データに固有の冗長度を低減し、または削除するために、空間的予測、動き推定、および動き補償を実行する。特に、イントラコーディングは、空間的予測に依存して、所与の映像フレーム内の映像における空間的冗長度を低減し、または削除する。インターコーディングは、時間的予測に依存して、隣接するフレーム内の映像の時間的冗長度を低減し、または削除する。インターコーディングでは、映像符号器は、2つ以上の隣接するフレーム間の整合する映像ブロックの動きを追跡するために、動き推定を行う。動き推定は、1つまたは複数の基準フレームにおける対応する映像ブロックに対する映像ブロックの変位を示す動きベクトルを生成する。動き補償は、動きベクトルを使用して、基準フレームから予測映像ブロックを生成する。動き補償後、元の映像ブロックから予測映像ブロックを取り去ることによって、残余映像ブロック(residual video block)が形成される。
映像符号器は、映像コーディング処理によって生成される残余ブロックのビットレートをさらに低減するために、変換、量子化、エントロピコーディングの処理を適用する。エントロピ符号化技術は、符号化されたデータの格納または伝送の前に、映像符号器/復号器(CODEC)の最終段階、および他の様々なコーディングの適用において使用される。エントロピ符号化は、変換および量子化の操作によって生成される残余係数をさらに圧縮するために、一般に、算術演算コードまたは可変長コード(VLC)の適用を伴う。エントロピコーディング技術の例には、コンテキスト適応形2値算術演算コーディング(context-adaptive binary arithmetic coding:CABAC)、およびコンテキスト適応形可変長コーディング(context-adaptive variable length coding:CAVLC)などがあり、これらは、いくつかの符号器で、代替のエントロピコーディングモードとして使用され得る。映像復号器は、エントロピ復号を行って、各ブロックの残余情報を復元し、動き情報および残余情報を使用して、符号化された映像を再構成する。
一般に、本開示は、ディジタル映像、画像、音声、または言語データのコーディングなど、様々な用途向けの、メモリ効率の良い低複雑性のデータの適応形可変長コーディング(VLC)の技術を対象とする。第1の一般的な態様では、技術は、非常にコンパクトなデータ構造をサポートするために、特定の組のコードワード(codeword)の特性を利用することができる。第2の一般的な態様では、技術は、無記憶情報源(memoryless source)によって生成される2値系列の低複雑性の適応形符号化および復号をサポートすることができる。
本開示は、第1の態様において、可変長のコードワードを指定するコーディングツリーのレベルについての基本コードワード(base codeword)の部分値を生成することと、コーディングツリーの選択されたレベルに進む前に、復号すべきビットストリームにおいて、いくつかのビットをスキップするよう復号器に指示するスキップインジケータを生成することと、メモリ内のデータ構造に、部分値およびスキップインジケータを格納することとを備える方法を提供する。
別の態様において、本開示は、可変長のコードワードを指定するコーディングツリーのレベルについての基本コードワードの部分値と、コーディングツリーの選択されたレベルに進む前に、復号すべきビットストリームにおいて、いくつかのビットをスキップするよう復号器に指示するスキップインジケータとを格納するデータ構造を備える有形のコンピュータ可読媒体を提供する。
別の態様において、本開示は、可変長のコードワードを指定するコーディングツリーのレベルについての基本コードワードの部分値を生成し、コーディングツリーの選択されたレベルに進む前に、復号すべきビットストリームにおいて、いくつかのビットをスキップするよう復号器に指示するスキップインジケータを生成するよう構成されているプロセッサと、データ構造に部分値およびスキップインジケータを格納するメモリとを備える装置を提供する。
別の態様において、本開示は、可変長のコードワードを指定するコーディングツリーのレベルについての基本コードワードの部分値と、コーディングツリーの選択されたレベルに進む前に、復号すべきビットストリームにおいて、いくつかのビットをスキップするよう復号器に指示するスキップインジケータとを備えるデータ構造を格納するメモリと、格納されたデータ構造における部分値およびスキップインジケータに基づいて、ビットストリームからのコードワードのうちの1つを復号するためにメモリにアクセスする復号器とを備える復号装置を提供する。
別の態様において、本開示は、可変長のコードワードを指定するコーディングツリーのレベルについての基本コードワードの部分値と、コーディングツリーの選択されたレベルに進む前に、復号すべきビットストリームにおいて、いくつかのビットをスキップするよう復号器に指示するスキップインジケータとを備える、メモリに格納されたデータ構造にアクセスすることと、格納されたデータ構造における部分値およびスキップインジケータに基づいて、ビットストリームからのコードワードのうちの1つを復号することとを備える復号方法を提供する。
別の態様において、本開示は、プロセッサに、可変長のコードワードを指定するコーディングツリーのレベルについての基本コードワードの部分値と、コーディングツリーの選択されたレベルに進む前に、復号すべきビットストリームにおいて、いくつかのビットをスキップするよう復号器に指示するスキップインジケータとを備える、メモリに格納されたデータ構造にアクセスさせ、格納されたデータ構造における部分値およびスキップインジケータに基づいて、ビットストリームからのコードワードのうちの1つを復号させるための命令を備える有形のコンピュータ可読媒体を提供する。
追加の態様において、本開示は、コーディングツリーにおけるコードワードのグループであって、グループのそれぞれが、同じ重さを有する値を表すコードワードを含み、グループのそれぞれにおけるコードワードが、コードワードによって表される値に対して辞書式に順序付けられるコードワードのグループと、グループのそれぞれの中のコードワードの第1および第2のサブグループであって、第1のサブグループが第1の長さを有するコードワードを含み、第2のサブグループが第1の長さとは異なる第2の長さを有するコードワードを含むコードワードの第1および第2のサブグループとを定義するコード構造に従って可変長のコーディングを実行することと、メモリへの格納、装置への送信、またはユーザへの提示のうちの少なくとも1つのために、可変長のコーディングの結果を生成することとを備える方法を提供する。
追加の態様において、本開示は、プロセッサに、コーディングツリーにおけるコードワードのグループであって、グループのそれぞれが、同じ重さを有する値を表すコードワードを含み、グループのそれぞれにおけるコードワードが、コードワードによって表される値に対して辞書式に順序付けられるコードワードのグループと、グループのそれぞれの中のコードワードの第1および第2のサブグループであって、第1のサブグループが第1の長さを有するコードワードを含み、第2のサブグループが第1の長さとは異なる第2の長さを有するコードワードを含むコードワードの第1および第2のサブグループとを定義するコード構造に従って可変長のコーディングを実行させ、メモリへの格納、装置への送信、またはユーザへの提示のうちの少なくとも1つのために、可変長のコーディングの結果を生成させるための命令を備える有形のコンピュータ可読媒体を提供する。
追加の態様において、本開示は、コーディングツリーにおけるコードワードのグループであって、グループのそれぞれが、同じ重さを有する値を表すコードワードを含み、グループのそれぞれにおけるコードワードが、コードワードによって表される値に対して辞書式に順序付けられるコードワードのグループと、グループのそれぞれの中のコードワードの第1および第2のサブグループであって、第1のサブグループが第1の長さを有するコードワードを含み、第2のサブグループが第1の長さとは異なる第2の長さを有するコードワードを含むコードワードの第1および第2のサブグループとを定義するコード構造に従って可変長のコーディングを実行し、メモリへの格納、装置への送信、またはユーザへの提示のうちの少なくとも1つのために、可変長のコーディングの結果を生成するよう構成されているプロセッサを備える装置を提供する。
追加の態様において、本開示は、可変長のコードワードを指定するコーディングツリーにおけるコードワードのグループであって、グループのそれぞれが、同じ重さを有する値を表すコードワードを含み、グループのそれぞれにおけるコードワードが、コードワードによって表される値に対して辞書式に順序付けられるコードワードのグループと、グループのそれぞれの中のコードワードの第1および第2のサブグループであって、第1のサブグループが第1の長さを有するコードワードを含み、第2のサブグループが第1の長さとは異なる第2の長さを有するコードワードを含むコードワードの第1および第2のサブグループとを定義するコード構造について、サブグループのそれぞれの基本コードワード、グループのそれぞれの中のコードワードの位置、第1のサブグループのそれぞれの中のコードワードの数、およびサブグループのそれぞれの中のコードワードの長さを使用して可変長のコーディングを実行することと、メモリへの格納、装置への送信、またはユーザへの提示のうちの少なくとも1つのために、可変長のコーディングの結果を生成することとを備える方法を提供する。
追加の態様において、本開示は、コード構造について、可変長のコードワードを指定するコーディングツリーにおけるコードワードのグループであって、グループのそれぞれが、同じ重さを有する値を表すコードワードを含み、グループのそれぞれにおけるコードワードが、コードワードによって表される値に対して辞書式に順序付けられるコードワードのグループと、グループのそれぞれの中のコードワードの第1および第2のサブグループであって、第1のサブグループが第1の長さを有するコードワードを含み、第2のサブグループが第1の長さとは異なる第2の長さを有するコードワードを含むコードワードの第1および第2のサブグループとを定義するための手段と、サブグループのそれぞれの基本コードワード、グループのそれぞれの中のコードワードの位置、第1のサブグループのそれぞれの中のコードワードの数、およびサブグループのそれぞれの中のコードワードの長さを使用して可変長のコーディングを実行するための手段と、メモリへの格納、装置への送信、またはユーザへの提示のうちの少なくとも1つのために、可変長のコーディングの結果を生成するための手段とを備える装置を提供する。
追加の態様において、本開示は、可変長のコードワードを指定するコーディングツリーにおけるコードワードのグループであって、グループのそれぞれが、同じ重さを有する値を表すコードワードを含み、グループのそれぞれにおけるコードワードが、コードワードによって表される値に対して辞書式に順序付けられるコードワードのグループと、グループのそれぞれの中のコードワードの第1および第2のサブグループであって、第1のサブグループが第1の長さを有するコードワードを含み、第2のサブグループが第1の長さとは異なる第2の長さを有するコードワードを含むコードワードの第1および第2のサブグループとを定義するコード構造について、プロセッサに、サブグループのそれぞれの基本コードワード、グループのそれぞれの中のコードワードの位置、第1のサブグループのそれぞれの中のコードワードの数、およびサブグループのそれぞれの中のコードワードの長さを使用して可変長のコーディングを実行させ、メモリへの格納、装置への送信、またはユーザへの提示のうちの少なくとも1つのために、可変長のコーディングの結果を生成させるための命令を備える有形のコンピュータ可読媒体を提供する。
追加の態様において、本開示は、可変長のコードワードを指定するコーディングツリーにおけるコードワードのグループであって、グループのそれぞれが、同じ重さを有する値を表すコードワードを含み、グループのそれぞれにおけるコードワードが、コードワードによって表される値に対して辞書式に順序付けられるコードワードのグループと、グループのそれぞれの中のコードワードの第1および第2のサブグループであって、第1のサブグループが第1の長さを有するコードワードを含み、第2のサブグループが第1の長さとは異なる第2の長さを有するコードワードを含むコードワードの第1および第2のサブグループとを定義するコード構造について、サブグループのそれぞれの基本コードワード、グループのそれぞれの中のコードワードの位置、第1のサブグループのそれぞれの中のコードワードの数、およびサブグループのそれぞれの中のコードワードの長さを使用して可変長のコーディングを実行し、メモリへの格納、装置への送信、またはユーザへの提示のうちの少なくとも1つのために、可変長のコーディングの結果を生成するよう構成されているプロセッサを備える装置を提供する。
別の態様において、本開示は、コーディングツリーにおけるコードワードのグループであって、グループのそれぞれが、同じ重さを有する値を表すコードワードを含み、グループのそれぞれにおけるコードワードが、コードワードによって表される値に対して辞書式に順序付けられるコードワードのグループと、グループのそれぞれの中のコードワードの第1および第2のサブグループであって、第1のサブグループが第1の長さを有するコードワードを含み、第2のサブグループが第1の長さとは異なる第2の長さを有するコードワードを含むコードワードの第1および第2のサブグループとを定義する可変長のコード構造を使用した可変長のコーディングのためのデータ構造を備える有形のコンピュータ可読媒体を提供する。
別の態様において、本開示は、コーディングツリーにおけるコードワードのグループであって、グループのそれぞれが、同じ重さを有する値を表すコードワードを含み、グループのそれぞれにおけるコードワードが、コードワードによって表される値に対して辞書式に順序付けられるコードワードのグループと、グループのそれぞれの中のコードワードの第1および第2のサブグループであって、第1のサブグループが第1の長さを有するコードワードを含み、第2のサブグループが第1の長さとは異なる第2の長さを有するコードワードを含むコードワードの第1および第2のサブグループとを定義するコード構造に従って可変長のコーディングを実行するよう構成されているプロセッサであって、メモリへの格納、装置への送信、またはユーザへの提示のうちの少なくとも1つのために、可変長のコーディングの結果を生成するよう構成されているプロセッサを備える集積回路装置を提供する。
別の態様において、本開示は、コーディングツリーにおけるコードワードのグループであって、グループのそれぞれが、同じ重さを有する値を表すコードワードを含み、グループのそれぞれにおけるコードワードが、コードワードによって表される値に対して辞書式に順序付けられるコードワードのグループと、グループのそれぞれの中のコードワードの第1および第2のサブグループであって、第1のサブグループが第1の長さを有するコードワードを含み、第2のサブグループが第1の長さとは異なる第2の長さを有するコードワードを含むコードワードの第1および第2のサブグループとを定義するコード構造に従って可変長のコーディングを実行するよう構成されているプロセッサであって、メモリへの格納、装置への送信、またはユーザへの提示のうちの少なくとも1つのために、可変長のコーディングの結果を生成するよう構成されているプロセッサを備える無線通信装置ハンドセット(handset)を提供する。
別の態様において、本開示は、可変長のコードワードを指定するコーディングツリーのレベルについての基本コードワードの部分値と、コーディングツリーの選択されたレベルに進む前に、復号すべきビットストリームにおいて、いくつかのビットをスキップするよう復号器に指示するスキップインジケータとを備えるデータ構造を格納するメモリと、格納されたデータ構造における部分値およびスキップインジケータに基づいて、ビットストリームからのコードワードのうちの1つを復号するためにメモリにアクセスする復号器とを備える集積回路装置を提供する。
別の態様において、本開示は、可変長のコードワードを指定するコーディングツリーのレベルについての基本コードワードの部分値と、コーディングツリーの選択されたレベルに進む前に、復号すべきビットストリームにおいて、いくつかのビットをスキップするよう復号器に指示するスキップインジケータとを備えるデータ構造を格納するメモリと、格納されたデータ構造における部分値およびスキップインジケータに基づいて、ビットストリームからのコードワードのうちの1つを復号するためにメモリにアクセスする復号器と、無線通信によって符号器からコードワードを受信するための受信機と、復号されたコードワードに少なくとも一部分基づいてユーザに出力を提示する出力装置とを備える無線通信装置ハンドセットを提供する。
本開示に記載した技術は、ハードウェア、ソフトウェア、ファームウェア、またはその任意の組み合わせにおいて実装され得る。ソフトウェアに実装された場合、ソフトウェアは、マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、またはディジタル信号プロセッサ(DSP)、または他の等価の一体型または別個の論理回路など、1つまたは複数のプロセッサにおいて実行され得る。これらの技術を実行するソフトウェアは、最初にコンピュータ可読媒体に格納され、プロセッサによってロードされ、実行され得る。したがって、本開示は、本開示に記載した様々な技術のうちの任意のものをプロセッサに実行させるための命令を備えるコンピュータ可読媒体を備えるコンピュータプログラム製品も企図する。
本開示の1つまたは複数の態様の詳細は、添付の図面および以下の説明に記載されている。本開示に記載されている技術の他の特徴、目的、および利点は、説明、図面、および特許請求の範囲から明らかになる。
映像符号化および復号システムを示すブロック図。 映像符号器の一例を示すブロック図。 映像復号器の一例を示すブロック図。 2値コーディングツリーの一例を示す図。 漸近的挙動(asymptotic behavior)を有する適応形ブロックコードの冗長レートを示すグラフ。 ブロックグループ、サブグループ、基本コードワードを示す2値ツリーの図。 異なる値pでの適応形ブロックコードの冗長レートの比較を示すグラフ。 異なる値pでの適応形ブロックコードの冗長レートの比較を示すグラフ。 源データの非対称に対する冗長の感度を示すグラフ。 本開示の一態様による、単調分布についてのメモリ効率の良い可変長のコーディングを構成するための方法を示すフロー図。 図9の方法に従って構成された可変長のコードを使用してシンボルを符号化するための方法を示すフロー図。 図9の方法に従って構成された可変長のコードを復号するための方法を示すフロー図。 本開示の別の態様による適応形ブロックコードを構成するための方法を示すフロー図。 図12の方法に従って構成された可変長のコードを使用してブロックを符号化するための方法を示すフロー図。 図12の方法に従って構成された可変長のコードを復号するための方法を示すブロック図。
一般に、本開示は、ディジタル映像、画像、音声、または言語データのコーディングなど、様々な用途向けの、メモリ効率の良い低複雑性のデータの適応形可変長コーディング(VLC)の技術を対象とする。一部の態様では、技術は、非常にコンパクトなデータ構造をサポートするために、特定の組のコードワードの特性を利用することができる。他の態様では、技術は、無記憶情報源によって生成される2値系列の低複雑性の適応形符号化および復号をサポートすることができる。本開示に記載されている技術は、一般のデータ圧縮およびコーディングを含めて、広範囲の実用的な応用に適用可能であるが、本開示は、例および例証の目的で、ディジタル映像コーディングおよび復号について言及する。
本開示の第1の一般的な態様によれば、コンパクトなデータ構造をサポートするために、開示された技術は、任意の特定のコード構成方式(code construction scheme)に依存する必要はない。例えば、ハフマン、シャノン、シャノン−ファノ、ギルバート−ムーア、または他のコード構成方式を使用することができる。しかし、この第1の一般的な態様については、こうしたコードは、シンボルの確率が単調に増加する源について、シンボルの入力アルファベットから構成されることを前提とする。より詳細には、コードワードは、単調に減少する長さ、または少なくとも非増加の長さを有すること、および同じ長さのコードワードは、それらが表す入力アルファベットにおけるシンボルと同じ辞書式順序を有することを前提とする。
所望の辞書式順序は、入力アルファベットの並べ替えによって達成することができる。こうしたコードワードの場合、基本コードワード値は、コーディングツリーのレベルごとに計算することができる。基本コードワード値は、コーディングツリーの各レベルにおける、辞書式に最小の正準コードワード(canonical codeword)を表す。そのそれぞれのシンボルの基本コードワード値およびインデックスは、並べ替えられた配列に格納され得る。インデックスは、ツリーにおける埋められたレベルごとに、オフセット値として格納され得る。復号プロセスは、ビットストリームバッファと、左寄せの基本コードワード値との比較、次いで復号されたシンボルのインデックスの簡単な直接計算を伴う。
可変長のコードの漸進的復号を容易にする非常にコンパクトなデータ構造を生成するためにさらに圧縮することができるデータ構造により、こうしたコードを一意に記述するために、上記の特性を使用することができる。例えば、左寄せの基本コードワード値は、通常、右から左への大量の先行ゼロ(leading zero)を有する。先行ゼロの数は、プロセスが、該当するコーディングツリーにおけるより深い層に移動するにつれて、単調に低下する。したがって、一番最初の層で開始し、下方に移動しながら、ビットが順次復号されるとき、復号プロセスの精度に影響を与えることなく、先行ゼロビットの一部をスキップすることができる。
先行ゼロは、一定単位、例えば8ビット単位で削除することができ、これは、従来の8ビット/バイトコンピュータにおけるビットストリームバッファ管理に便利である。このプロセスを管理するために、1つまたは複数のスキップインジケータの追加の表を提供することができる。一例として、スキップインジケータは、先行ゼロがドロップされると、異なる基本コードワード値を区別することができるように、復号器に、ビットストリームバッファにおいて一定単位だけ前方にスクロールするよう指示する。先行ゼロの削除によって、変更された基本コードワード値の結果として得られた配列の幅を実質的に低減することができ、したがって、メモリ使用率を節約することができる。
したがって、第1の一般的な態様において、本開示は、可変長のコードワードを指定するコーディングツリーのレベルについての基本コードワードの部分値を生成することと、コーディングツリーの選択されたレベルに進む前に、復号すべきビットストリームにおいて、いくつかのビットをスキップするよう復号器に指示するスキップインジケータを生成することと、メモリ内のデータ構造に、部分値およびスキップインジケータを格納することとを備える方法を企図する。データ構造は、テーブル、リンクリスト、2値ツリー、ラディックスツリー、フラットファイルなど、広範なデータ構造のうちの任意のものでよく、多くの形式のランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、またはその両方など、様々な異なるメモリ装置のうちの任意のものに格納することができる。データ構造は、符号器または復号器内のこうしたメモリに格納することができる。例えば、復号器は、メモリ効率の良い方法でコードワードの可変長の復号を行うために、復号器に関連付けられているメモリから、データ構造、またはデータ構造のコンテンツの部分にアクセスすることができる。
この第1の一般的な態様によれば、本開示は、可変長のコードワードを指定するコーディングツリーのレベルについての基本コードワードの部分値を生成し、コーディングツリーの選択されたレベルに進む前に、復号すべきビットストリームにおいて、いくつかのビットをスキップするよう復号器に指示するスキップインジケータを生成するよう構成されているプロセッサと、データ構造に部分値およびスキップインジケータを格納するメモリとをさらに企図する。こうした情報は、単一のデータ構造または複数のデータ構造に格納することができる。したがって、データ構造への言及は、本開示において企図された情報を格納する1つまたは複数のデータ構造を含み得る。可変長のコーディングを実行するために、データ構造にアクセスするよう構成されているプロセッサは、源装置または受信装置内、または可変長のコーディングを実行する際に、符号器および/または復号器によって使用するコード構造を定義するデータ構造を生成する別個の装置内に実装することができる。
本開示の第1の一般的な態様に従う、コンパクトなデータ構造を達成するためのこの技術によれば、それぞれの有効なコードワードの長さは、コードツリーにおける外部ノードを含むレベルに対応し得る。上述したように、データ構造は、基本コードワードの部分値、および1つまたは複数のスキップインジケータを含み得る。より詳細には、一部の実施形態では、データ構造は、有効なコードワード長ごとに、以下の情報、(a)コードツリーの現在のレベルにおける辞書式に最小(または最大)のコードワードの部分値、(b)部分値におけるビット数、(c)辞書式に最小(または最大)のコードワードに対応するシンボルの値、および(d)コードツリーの次のレベルに進む前に、いくつかの数のビットをスキップするよう復号器に指示するインジケータを含み得る。したがって、データ構造は、基本コードワードによって表されるシンボルの値、および基本コードワードの部分値の長さ、すなわち、基本コードワードの各部分値におけるビット数をさらに含み得る。符号化および復号の技術は、このデータ構造を使用して、生成または復号すべきコードワードに対応するレベルを識別し、次いで、コードワードまたは復号されたシンボルの値を直接計算することができる。したがって、データ構造は、そのうちの一部が結合されたCODECとして構成され得る映像符号器または復号器、画像符号器または復号器、音声符号器または復号器、または言語符号器または復号器のメモリに格納することができる。
可変長のコードの符号化または復号のための既存の技術の例は、A. Moffat and A. Turpin, On the Implementation of Minimum-Redundancy Prefix Codes, IEEE Trans. Communications, 45 (10) (1997) 1200-1207, J. B. Connell, A Huffman-Shannon-Fano Code, Proc. IEEE, July 1973, 1046-1047、およびA. Brodnik and S. Carlsson, Sublinear Decoding of Huffman Codes Almost in Place, DIMACS Workshop on Codes and Trees: Algorithmic and information Theoretic Approaches, October 1998, Rutgers University, DIMACS Center, NJに記載されている。これらの既存の技術に比べて、コンパクトなデータ構造を達成するための開示された技術は、いくつかの利点を提供し得る。
第1の例として、開示された技術によって生成されるデータ構造は、辞書式に最小のコードワードの部分値が、例えば映像復号器によって格納され、使用されるという事実により、かなり少量のメモリを使用し得る。別の例として、開示された技術は、ビットストリームデータへの増分的アクセスを使用することができ、これによって、ビットストリームバッファを、適度に短いレジスタによって提示し、例えばスキップ指示を介して、任意の便利な間隔で更新することができ、実装の複雑性をさらに低減することができる。
例えば、一部の実装では、非常に長いコードの場合でさえ、32ビットレジスタで十分であり得る。さらに、更新を8ビット間隔で行うことができる。全体的に、開示された技術は、可変長コードの表現および符号化/復号の複雑性をかなり低減することができ、これによって、圧縮アルゴリズムの設計者は、かなり大きい、したがって、より効率の良いコードブックを使用することができるようになる。
本開示の第2の一般的な態様によれば、無記憶情報源によって生成された2値系列の低複雑性の適応形符号化および復号をサポートするために、開示された技術は、ある系列における前のビットの非ゼロビットの数によって識別される1組のコンテキストのために構成されたユニバーサルブロックコード(universal block code)を実装し得る。この第2の一般的な態様は、非常にコンパクトなデータ構造の生成に関して上述した第1の一般的な態様とは別に、またはそれと共に提供され、または実施され得る。低複雑性の適応形符号化および復号のための技術は、この第2の一般的な態様によれば、R. E. Krichevsky and V. K. Trofimov, The Performance of Universal Encoding, IEEE Trans Information Theory, 27 (1981) 199-207に記載されている推定を改良する、こうしたコードの漸近的冗長について開示された決まったやり方に依存し得る。
この第2の一般的な態様による技術は、いくつかの推定された密度のために設計され、ある系列における前のブロック(コンテキスト)内の非ゼロのビットの数によってインデックスが付けられたハフマンコードの配列を使用することができる。n=8・・・16の小さめなサイズのビットのブロックを使用する(および対応する1.5・・・5kバイトのメモリを使用する)ことによって、こうした技術は、W. B. Pennebaker, J. L. Mitchell, G. G. Langdon, Jr., R. B. Arps, An overview of the basic principles of the Q-Coder adaptive binary arithmetic coder, IBM J. Res. Dev., 32 (6) (1988) 717に記載されており、JBIG画像コーディング標準に使用されるQコーダアルゴリズム、およびD. Marpe, H. Schwartz, and T. Wiegand, Context-Based Adaptive Binary Arithmetic Coding in the H.264/AVC video compression standard, IEEE Trans. on CSVT, 13(7):620 636, July 2003に記載されており、映像圧縮のためのITU−T H.264/MPEG AVC標準で使用されるCABACアルゴリズムなど、他の既存のアルゴリズムに匹敵する、またはそれより優れた圧縮性能を達成し得る。
低複雑性の適応形符号化および復号は、本開示のこの第2の一般的な態様によれば、無記憶情報のモデルにおいて、ビットのブロックの確率、またはその推定が、そのビットの実際のパターンではなく、その重さ(非ゼロのビットの数)のみに依存するという認識に基づき得る。したがって、ある固定長のすべての可能なブロックの組を、同じ重さ(およびしたがって、同じ確率)のブロックを含む異なるグループに分けることができる。各グループが、ブロックを、自然にまたは並べ替えによって、辞書式順序で格納することが想定され得る。
蓋然性が等しいブロックの各グループは、多くとも2つのサブグループを含むことができ、こうした各サブグループ内のブロックが同じ長さのコードワードによって符号化されることは、最小冗長コード(ハフマンコードやシャノンコードなど)の既知の特性である。一般性を損ねることなく、第1のサブグループにおけるコードワードの長さは、第2のサブグループにおけるコードワードの長さより短いことがさらに想定され得る。グループ内のブロック(または単語)は、辞書式順序に従うため、これは、より大きいコードワード長を有するサブグループと、より短いコードワード長を有するサブグループとで簡単に分けることができる。インデックス値は、グループ内のブロックの位置を示す。各サブグループ内の辞書式に最小のブロック(または単語)に、基本コードワードが割り当てられる。基本コードワードが与えられると、各サブグループ内の残りのコードワードは、容易に計算することができる。
したがって、本開示のこの第2の一般的な態様によれば、例えば、コーディングツリーにおける入力ブロックまたは単語およびそれぞれの出力コードワードのグループであって、同じ重さを有するブロック(または単語)を表すコードワードをぞれぞれ含むグループと、グループのそれぞれの中のコードワードの第1および第2のサブグループであって、第1のサブグループが第1の長さを有するコードワードを含み、第2のサブグループが第1の長さとは異なる第2の長さを有するコードワードを含むコードワードの第1および第2のサブグループとを定義するコード構造を使用する符号器または復号器によって可変長コーディングを実行することができる。グループのそれぞれの中のブロックは、辞書式に順序付けられ、次いで、辞書式の順序が各サブグループにおいて維持されるように、サブグループに分けられる。さらに、サブグループ内の各ブロックに対応するコードワードが割り当てられるので、それらも同じ辞書式順序に従い、直接計算による符号化および復号を容易にする。
ブロック、そのグループおよびサブグループのこの配列に基づいて、簡略化されたプロセスを使用して、コードワードを直接計算することができる。例えば、ブロックの重さおよびインデックス値を取得すると、インデックス値が第1のサブグループにおける最大数のブロック未満である場合、コードワードを見つけ出すために、第1のサブグループが選択される。そうでない場合、コードワードを見つけ出すために、第2のサブグループが選択される。次いで、選択されたサブグループについての基本コードワードを取り出すと、基本コードワード値を、選択されたサブグループ内のブロックのインデックス値に基づいて決定された値と合計することによって、コードワードは、容易に計算される。本開示のこの第2の一般的な態様のために、ブロックまたは単語という用語は、コーディング方式に従ってコーディングされ得る入力量を一般的に指すのに区別なく使用され得る。ブロックまたは単語は、2値アルファベット{0,1}など、入力アルファベットから形成され得る一連のシンボルを含み得る。コードワードは、一般に、コーディング方式の結果としてブロック(または単語)に割り当てられた出力量を指す。
本開示に記載されている技術のこれらおよび他の態様について、以下でより詳しく説明する。技術は、一緒にまたは別々に使用することができ、ディジタル映像、画像、音声、または言語データの符号化または復号のために構成されるシステムおよび装置を含めて、様々な符号化および復号システムおよび装置のうちの任意のものにおいて実装することができる。例および例証の目的で、本開示は、データ圧縮およびコーディングの一般の実用的な応用、または異なるタイプのデータへの他の特定の適用に関する制限なく、こうした技術をディジタル映像コーディングおよび復号に適用することを説明する。
図1は、映像符号化および復号システム10を示すブロック図である。図1に示されているように、システム10は、通信チャネル16を介して受信装置14に符号化された映像を送信する源装置12を含む。源装置12は、映像源18、映像符号器20、および送信機22を含み得る。受信装置14は、受信機24、映像復号器26、および映像表示装置28を含み得る。システム10は、ディジタル映像データの、メモリ効率の良い低複雑性の適応形可変長コーディング(VLC)の技術を適用するよう構成され得る。特に、メモリ効率の良い低複雑性の適応形VLC技術は、予測映像コーディング(predictive video coding)プロセスによって生成される残余ブロック係数(residual block coefficient)のエントロピコーディングに使用することができる。これらの技術は、一連のゼロを使用して、非ゼロ変換係数の位置をコーディングする映像コーディング方式、または他の映像コーディング方式に適用することができる。
図1の例において、通信チャネル16は、無線周波数(RF)スペクトルまたは1つまたは複数の物理的な伝送路など、任意の無線または有線の通信媒体、または無線および有線の媒体の任意の組み合わせを備え得る。チャネル16は、例えばローカルエリアネットワーク、広域ネットワーク、またはグローバルネットワーク(global network)、例えばインターネットなど、パケットベースのネットワークの一部を形成し得る。通信チャネル16は、一般に、映像データを源装置12から受信装置14に送信するための任意の適した通信媒体、または異なる通信媒体の集まりを表す。
源装置12は、宛先装置14に送信するための映像を生成する。しかし、一部の場合、装置12、14は、実質的に対称の方法で動作し得る。例えば、装置12、14のそれぞれは、映像符号化および復号の成分を含み得る。したがって、システム10は、例えば、映像ストリーミング、映像ブロードキャスティング(video broadcasting)、またはテレビ電話のためなど、映像装置12、14の間の一方向または双方向の映像伝送をサポートし得る。他のデータ圧縮およびコーディングの用途では、装置12、14は、画像、言語、または音声データなど、または映像、画像、言語、および音声データのうちの2つ以上の組み合わせなど、他のタイプのデータを送信し、受信し、または交換するよう構成することができる。したがって、映像の用途の説明は、例証の目的で提供され、本明細書で広範に記載されるように、本開示の様々な態様の制限と見なされないものとする。
映像源18は、1つまたは複数のビデオカメラ、前に捕捉した映像を含む映像アーカイブ、または映像コンテンツプロバイダから提供されたライブ映像など、映像捕捉装置を含み得る。別の代替として、映像源18は、源映像としてのコンピュータグラフィックスベースのデータ、またはライブ映像とコンピュータが生成した映像との組み合わせを生成し得る。一部の場合、映像源18がカメラであれば、源装置12および受信装置14は、いわゆるカメラ付き電話、またはテレビ電話を形成し得る。したがって、一部の態様において、源装置12、受信装置14、またはその両方は、移動電話など、無線通信装置ハンドセットを形成し得る。いずれの場合でも、捕捉された、前に捕捉された、またはコンピュータで生成された映像は、送信機22、チャネル16、および受信機24を介して映像源装置12から映像受信装置14の映像復号器26に送信するために、映像符号器20によって符号化され得る。表示装置28は、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイなど、様々なディスプレイ装置のうちの任意のものを含み得る。
映像符号器20および映像復号器26は、空間的、時間的、および/またはSN比(SNR)スケーラビリティのために、拡張可能な映像コーディングをサポートするよう構成され得る。一部の態様において、映像符号器20および映像復号器22は、SVCのための細粒度SNRスケーラビリティ(FGS)コーディング(fine granularity SNR scalability (FGS) coding)をサポートするよう構成され得る。符号器20および復号器26は、基本層(base layer)および1つまたは複数の拡張可能な高機能層(enhancement layer)の符号化、伝送、および復号をサポートすることによって、様々な度合いのスケーラビリティをサポートし得る。拡張可能な映像コーディングでは、基本層は、最低レベルの品質で映像データを運ぶ。1つまたは複数の高機能層は、より高い空間的、時間的、および/またはSNRレベルをサポートするために、追加のビットストリームを運ぶ。
映像符号器20および映像復号器26は、MPEG−2、MPEG−4、ITU−T H.263、またはITU−T H.264/MPEG−4 Advanced Video Coding(AVC)などの映像圧縮標準に従って動作し得る。図1には示されてないが、一部の態様において、映像符号器20および映像復号器26は、それぞれ音声符号器および復号器と統合され、共通のデータストリームまたは別々のデータストリームにおける音声および映像の両方の符号化を処理するために、適切なMUX−DEMUXユニット、または他のハードウェアおよびソフトウェアを含むことができる。該当する場合、MUX−DEMUXユニットは、ITU H.223多重化装置プロトコル、またはユーザデータグラムプロトコル(UDP)など他のプロトコルに準拠し得る。
H.264/MPEG−4(AVC)標準は、Joint Video Team(JVT)として知られる共同パートナーシップの成果として、ITU−T Video Coding Experts Group(VCEG)、およびISO/IEC Moving Picture Experts Group(MPEG)によって策定された。H.264標準は、本明細書では、H.264標準またはH.264仕様、またはH.264/AVC標準または仕様と呼ばれ得るITU−T Study Groupによる2005年3月付けのITU-T Recommendation H.264, Advanced video coding for generic audiovisual servicesに記載されている。
Joint Video Team(JVT)は、引き続き、H.264/MPEG−4 AVCへの拡張可能な映像コーディング(SVC)の拡張に取り組んでいる。発展するSVCの拡張の仕様は、Joint Draft(JD)の形をしている。JVTによって作成されたJoint Scalable Video Model(JSVM)は、本開示に記載されている様々なコーディングタスクのために、システム10内で使用され得る、拡張可能な映像で使用するためのツールを実装する。細粒度SNRスケーラビリティ(FGS)コーディングに関する詳細な情報は、例えばJoint Draft6(SVC JD6)におけるThomas Wiegand, Gary Sullivan, Julien Reichel, Heiko Schwarz, and Mathias Wien, "Joint Draft 6: Scalable Video Coding," JVT-S 201, April 2006, Geneva、およびJoint Draft9(SVC JD9)におけるThomas Wiegand, Gary Sullivan, Julien Reichel, Heiko Schwarz, and Mathias Wien, "Joint Draft 9 of SVC Amendment," JVT-V 201, January 2007, Marrakech, MoroccoなどのJoint Draft文書で見つけることができる。
一部の態様において、映像ブロードキャスティングの場合、本開示に記載されている技術は、例えば、無線映像ブロードキャストサーバまたは無線通信装置ハンドセットを介して、技術標準TIA−1099(「FLO仕様」)として発行されるForward Link Only (FLO) Air Interface Specification, "Forward Link Only Air Interface Specification for Terrestrial Mobile Multimedia Multicast"を使用して、terrestrial mobile multimedia multicast(TM3)システムにおいて、リアルタイム映像サービスを配信するためのEnhanced H.264映像コーディングに適用され得る。FLO仕様は、ビットストリーム構文記述およびセマンティクス、およびFLO Air Interfaceに適した復号プロセスを定義する例を含む。あるいは、映像は、DVB−H(digital video broadcast−handheld)、ISDB−T(integrated services digital broadcast−terrestrial)、またはDMB(digital media broadcast)など、他の標準に従ってブロードキャストされ得る。したがって、源装置12は、移動無線端末、映像ストリーミングサーバ、または映像ブロードキャストサーバとすることができる。しかし、本開示に記載されている技術は、ブロードキャスト、マルチキャスト、またはポイントツーポイントシステムの任意の特定のタイプに限定されない。ブロードキャストの場合、源装置12は、映像データのいくつかのチャネルを、図1の受信装置14にそれぞれ類似し得る複数の受信装置にブロードキャストすることができる。
映像符号器20および映像復号器26はそれぞれ、1つまたは複数のマイクロプロセッサ、ディジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、別個のロジック、ソフトウェア、ハードウェア、ファームウェア、またはその任意の組み合わせとして実装され得る。映像符号器20および映像復号器26のそれぞれは、いずれもそれぞれの移動装置、加入者装置、ブロードキャスト装置、サーバなどに、結合された符号器/復号器(CODEC)の一部として統合され得る1つまたは複数の符号器または復号器に含まれ得る。さらに、源装置12および受信装置14はそれぞれ、該当する場合、無線通信をサポートするのに十分な無線周波数(RF)無線構成要素およびアンテナを含めて、符号化された映像の送受信に適した変調、復調、周波数変換、フィルタリング、および増幅器の構成要素を含み得る。しかし、説明を簡単にするために、こうした構成要素は、図1に示していない。
映像系列は、一連の映像フレームを含む。映像符号器20は、映像データを符号化するために、個々の映像フレーム内の画素のブロックに対して働く。映像ブロックは、固定または可変のサイズを有していてよく、指定されたコーディング標準に従ってサイズが異なり得る。各映像フレームは、一連のスライスを含む。各スライスは、サブブロックに配列され得る一連のマクロブロックを含み得る。一例として、ITU−T H.264標準は、輝度成分(luma component)については16×16、8×8、4×4、色度成分(chroma component)については8×8など、様々なブロックサイズのイントラ予測、および輝度成分については16×16、16×8、8×16、8×8、8×4、4×8、4×4、色度成分については対応する変倍サイズなど、様々なブロックサイズのインター予測をサポートする。
より小さい映像ブロックは、より良い解像度を提供することができ、より高いレベルの詳細を含む映像フレームの位置の特定に使用され得る。一般に、マクロブロック(MB)および様々なサブブロックは、映像ブロックであると考えることができる。さらに、スライスは、MBおよび/またはサブブロックなど、一連の映像ブロックであると考えることができる。各スライスは、別々に復号可能な単位とすることができる。予測後、8×8の残余ブロック、または4×4の残余ブロックに変換が行われ、イントラ16×16予測モードが使用される場合、色度成分または輝度成分についての4×4ブロックのDC係数に、追加の変換が適用され得る。
図1のシステム10の映像符号器20および/または映像復号器26は、本開示に記載したように、メモリ効率の良い低複雑性の適応形可変長コーディング(VLC)のための技術を使用するよう構成され得る。特に、映像符号器20および/または映像復号器26は、メモリ使用率、処理オーバーヘッド、処理複雑性、帯域幅消費、データ格納スペース、および/または消費電力を低減するために、こうした技術の少なくとも一部を適用する、エントロピ符号器およびエントロピ復号器をそれぞれ含み得る。
図2は、図1に示すような映像符号器20の一例を示すブロック図である。映像符号器20は、少なくとも一部分、まとめて集積回路装置と呼ばれ得る1つまたは複数の集積回路装置として形成され得る。一部の態様では、映像符号器20は、無線通信装置ハンドセットまたはブロードキャストサーバの一部を形成し得る。映像符号器20は、映像フレーム内のブロックのイントラおよびインターコーディングを実行し得る。イントラコーディングは、空間的予測に依存して、所与の映像フレーム内の映像における空間的冗長度を低減し、または削除する。インターコーディングは、時間的予測に依存して、映像系列の隣接するフレーム内の映像の時間的冗長度を低減し、または削除する。インターコーディングでは、映像符号器20は、隣接するフレーム間の整合する映像ブロックの動きを追跡するために、動き推定を行う。
図2に示すように、映像符号器20は、符号化すべき映像フレーム内の現在の映像ブロック30を受信する。図2の例において、映像符号器20は、動き推定ユニット32、基準フレームストア34、動き補償ユニット36、ブロック変換ユニット38、量子化ユニット40、逆量子化ユニット42、逆変換ユニット44およびエントロピコーディングユニット46を含む。エントロピコーディングユニット46は、コーディングに有用なデータを取得するために、メモリ45に格納されている1つまたは複数のデータ構造にアクセスし得る。ループ内デブロッキングフィルタ(in-loop deblocking filter)(図示せず)は、ブロッキングアーティファクト(blocking artifact)を削除するために、ブロックをフィルタ処理するために適用され得る。映像符号器20は、加算器48および加算器50も含む。図2は、映像ブロックのインターコーディングのための映像符号器20の時間的予測構成要素を示す。説明を簡単にするために、図2には示されていないが、映像符号器20は、いくつかの映像ブロックのイントラコーディングのための、空間的予測構成要素も含み得る。
動き推定ユニット32は、1つまたは複数の動きベクトルを生成するために、映像ブロック30を、1つまたは複数の隣接する映像フレーム内のブロックと比較する。1つまたは複数の隣接するフレームは、前に符号化されたブロックから再構成された映像ブロックを格納するための任意のタイプのメモリまたはデータ格納装置を備え得る基準フレームストア34から取り出すことができる。動き推定は、例えば、16×16、16×8、8×16、8×8、またはより小さいブロックサイズなど、可変サイズのブロックについて実行され得る。動き推定ユニット32は、例えば、レート歪みモデル(rate distortion model)に基づいて、現在の映像ブロック30に最も近い、隣接するフレーム内の1つまたは複数のブロックを識別し、隣接するフレーム内のブロックと現在の映像ブロックとの間の変位を決定する。これに基づいて、動き推定ユニット32は、現在の映像ブロック30と現在の映像ブロック30をコーディングするために使用される基準フレームからの1つまたは複数の一致するブロックとの間の変位の大きさおよび軌道を示す1つまたは複数の動きベクトル(MV)を生成する。
動きベクトルは、半分または1/4の画素精度、またはさらに細かい精度を有している場合があり、これによって映像符号器20は、整数画素位置より高い精度で動きを追跡し、より良い予測ブロックを取得することができる。小数画素値を含む動きベクトルが使用されると、動き補償ユニット36において、補間演算が行われる。動き推定ユニット32は、レート歪みモデルなど、何らかの基準を使用して、映像ブロックについての最高のブロック分割、および1つまたは複数の動きベクトルを識別する。例えば、双方向予測の場合、1つより多くの動きベクトルが存在する場合がある。結果として得られたブロック分割および動きベクトルを使用して、動き補償ユニット36は、予測映像ブロックを形成する。
映像符号器20は、加算器48において、元の、現在の映像ブロック30から、動き補償ユニット36によって生成された予測映像ブロックを取り去ることによって、残余映像ブロックを形成する。ブロック変換ユニット38は、H.264/AVCで使用される4×4または8×8の整数変換などの変換を残余ブロックに適用して、残余変換ブロック係数を生成する。量子化ユニット40は、ビットレートをさらに減らすために、残余変換ブロック係数を量子化する。エントロピコーディングユニット46は、ビットレートをまたさらに減らすために、量子化された係数をエントロピコーディングする。
エントロピコーディングユニット46は、VLCコーディングを量子化されたブロック係数に適用するために、可変長コーディング(VLC)ユニットとして動作する。特に、エントロピコーディングユニット46は、本開示に記載したようなメモリ効率の良い低複雑性の適応形VLC技術を使用して、ディジタル映像ブロック係数のVLCコーディングを実行するよう構成することができる。したがって、本開示に記載されている様々な符号化プロセスは、映像データのコーディングを実行するために、エントロピコーディングユニット46内に実装され得る。あるいは、こうしたエントロピコーディングユニット46は、それだけには限定されないが、映像、画像、言語、および音声データを含めて、様々なデータのうちの任意のものをコーディングするために、本開示に記載されているプロセスを実行し得る。一般に、映像復号器26は、例えば図3を参照して説明するように、符号化された映像を復号し、再構成するために、VLC復号を含めて、逆の操作を実行する。
逆量子化ユニット42および逆変換ユニット44は、残余ブロックを再構成するために、逆量子化および逆変換をそれぞれ適用する。加算器50は、再構成された残余ブロックを、動き補償ユニット36によって生成された動き補償済みの予測ブロックに追加して、再構成された映像ブロックを生成して基準フレームストア34に格納する。再構成された映像ブロックは、次の映像フレームにおけるブロックを符号化するために、動き推定ユニット32、および動き補償ユニット36によって使用される。
図3は、映像復号器26の一例を示すブロック図である。映像復号器26は、少なくとも一部分、まとめて集積回路装置と呼ばれ得る1つまたは複数の集積回路装置として形成され得る。一部の態様では、映像復号器26は、無線通信装置ハンドセットの一部を形成し得る。映像復号器26は、映像フレーム内のブロックのイントラおよびインター復号を実行し得る。図3に示されるように、映像復号器26は、映像符号器20によって符号化された符号化済みの映像ビットストリームを受信する。図3の例において、映像復号器26は、エントロピ復号ユニット52、動き補償ユニット54、逆量子化ユニット56、逆変換ユニット58、および基準フレームストア62を含む。映像復号器26は、加算器64の出力をフィルタ処理するループ内デブロッキングフィルタ(図示せず)も含み得る。映像復号器26は、加算器64も含む。図3は、映像ブロックのインター復号のための映像復号器26の時間的予測構成要素を示す。図3には示されていないが、映像復号器26は、いくつかの映像ブロックのイントラ復号のための、空間的予測構成要素も含み得る。
エントロピ復号ユニット52は、符号化された映像ビットストリームを受信し、ビットストリームからの、量子化された残余係数、マイクロブロックコーディングモード、および動きベクトルおよびブロック分割を含み得る動き情報を復号する。したがって、エントロピ復号ユニット52は、VLC復号ユニットとしての役目を果たす。例えば、符号化されたビットストリームからの量子化された残余係数を復号するために、図2のエントロピ符号化ユニット46のように、図3のエントロピ復号ユニット52は、本開示に記載されているような、ディジタル映像ブロック係数のメモリ効率の高い低複雑性の適応形VLC復号を実行することができる。しかし、エントロピ復号ユニット52は、符号化されたビットストリームから量子化されたブロック係数を取り出すために、図2のエントロピ符号化ユニット46に対して逆の方法でVLC復号を実行することができる。したがって、本開示に記載されている様々な復号プロセスは、映像データの復号を実行するために、エントロピ復号ユニット52内に実装される。あるいは、こうしたエントロピ復号ユニット52は、それだけには限定されないが、映像、画像、言語、および音声データを含めて、様々なデータのうちの任意のものを復号するために、本開示に記載されているプロセスを実行し得る。いずれの場合でも、エントロピ復号ユニット52によって実行された可変長のコーディングの結果は、ユーザに出力され、メモリに格納され、かつ/または別の装置または処理ユニットに送信され得る。
動き補償ユニット54は、予測映像ブロックを生成するために、動きベクトルおよびブロック分割、および1つまたは複数の再構成された基準フレームを基準フレームストア62から受信する。逆量子化ユニット56は、量子化されたブロック係数を逆量子化、すなわち逆量子化する。逆変換ユニット58は、残余ブロックを生成するために、逆DCT、逆4×4または8×8整数変換など、逆変換を係数に適用する。予測映像ブロックは、次いで、復号されたブロックを形成するために、加算器64によって、残余ブロックと合計される。デブロッキングフィルタ(図示せず)は、ブロッキングアーティファクトを削除するために、復号されたブロックをフィルタ処理するために適用され得る。フィルタ処理されたブロックは、次いで、その後の映像フレームの復号のために基準フレームを提供し、表示装置28(図1)を駆動するために、復号された映像を生成する基準フレームストア62に入れられる。
可変長コードのメモリ効率の良いコーディング
次に、本開示の第1の一般的な態様による、コンパクトなデータ構造をサポートするための可変長コーディングのためのメモリ効率の良い技術の一例について、より詳細に説明する。この技術は、ハフマン、シャノン、シャノン−ファノ、ギルバートムーア、または他のコードなど、任意の特定のコード構成方式に依存する必要はない。しかし、この技術は、シンボルの確率が単調に増加する源について、コードが構成されることを前提とする。より詳細には、コードワードは、単調に減少する(または少なくとも非増加の)長さを有すること、および同じ長さのコードワードは、それらが表す入力アルファベットにおけるシンボルと同じ辞書式順序を有することを前提とする。
この技術は、映像コーディングまたは他の用途に適用されるとき、非常にコンパクトなデータ構造により、こうしたコードを一意に記述するために、上記の特性を使用する。上述したように、データ構造は、有効なコードワードの長さ、すなわちコードツリーにおける外部ノードを含むレベルごとに、以下の情報、
a.コードツリー中の現在のレベルにおける辞書式に最小(または最大)のコードワードの部分値
b.部分値におけるビット数
c.辞書式に最小(または最大)のコードワードに対応するシンボルの値
d.コードツリーの次のレベルに進む前に、いくつかの数のビットをスキップするよう復号器に指示するインジケータ
を含み得る。
符号化および復号のプロセスは、この構造を使用して、生成(または復号)すべきコードワードに対応するコードツリーのレベルを識別し、次いで、コードワード(または復号されたシンボル)の値を直接計算することができる。
この技術によって、辞書式に最小のコードワードの部分値のみが格納されるという事実により、コーディングおよび復号に、かなり少量のメモリを使用できるようになる。データ構造は、テーブル、リンクリスト、2値ツリー、ラディックスツリー、フラットファイルなど、広範なデータ構造のうちの任意のものでよく、多くの形式のランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、またはその両方など、様々な異なるメモリ装置のうちの任意のものに格納することができる。データ構造は、図2および図3にそれぞれ示されているメモリ45またはメモリ51内など、符号器または復号器内のこうしたメモリに格納することができる。この場合も、コーディングツリーのレベルの少なくともいくつかは、コードワードによって表されるシンボル値の順序に対して辞書式順序で配列されるコードワードを含む。したがって、基本コードワードのそれぞれは、コーディングツリー中の対応するレベルにおける、辞書式に最小のコードワードである。さらに、この技術は、ビットストリームデータへの増分的アクセスを使用することができ、これによって、ビットストリームバッファを、適度に短いレジスタによって提示することができる。例えば、32ビットレジスタは、非常に長いコードでさえ、十分であり得る。レジスタは、便利な間隔(例えば8ビットなど)で更新することができ、実装の複雑性をさらに低減することができる。全体的に、様々な態様において、この技術は、可変長コードの表現および符号化/復号の複雑性をかなり低減することができ、これによって、圧縮アルゴリズムの設計者は、より大きく、より効率の良いコードブックを使用することができるようになる。
次に、本開示に記載されている技術の例証を助けるために、可変長コードの一般論について説明する。可変長コードは、データ圧縮における基本的なツールを表す。一般に、可変長コードは、何らかの既知の、一般にかなり不均衡な分布のシンボルの系列を表すために使用される。こうした系列は、全長がかなり短い2値系列またはコードによって表すことができる。長さの短縮は、より頻繁に出現するシンボルをより短いコードに置き換え、あまり頻繁に出現しないシンボルをより長いコードに置き換えることによって達成される。
データ圧縮で使用される可変長コードの例には、例えばD. A. Huffman. A method for the construction of minimum-redundancy codes. Proc. IRE, vol. 40, pp. 1098-1101. Sept. 1952に記載されているハフマンコード、例えばC. E. Shannon, A mathematical theory of communication, Bell Syst. Tech J. Vol. 27. pp. 379-423, July 1948に記載されているシャノンコード、例えばR M. Fano, The transmission of information, Res. Lab. Electronics, Massachusetts Inst. of Technology, Cambridge, Mass. Tech. Rep. No. 65, 1949に記載されているシャノン−ファノコード、および例えばE. N. Gilbert and E. F. Moore, Variable-Length Binary Encodings, Bell Syst. Tech. J., Vol.7, pp. 932-967, 1959に記載されているギルバートムーアコード(シャノン−ファノ−エリアスコードと呼ばれることもある)がある。
上述したコードは、例えば、T. Cover and J. Thomas, Elements of Information Theory, Wiley, 1991に記載されているような、あるクラスの接頭コード(prefix free code)に属する。図4は、2値コーディングツリーの一例を示す図である。上述したコードは、図4に示されているものなど、2値ツリーによって便利に表すことができる。したがって、符号器は、コーディングツリーに一致するシンボル値を符号化し得る。ツリーによる値は、映像データ、画像データ、言語データ、または音声データなど、様々なデータのうちの任意のものを表すことができる。こうしたツリーにおける各内部ノードは、その0値が右への移動を強制し、1値がツリーにおける左の子ノードへの移動を強制する2進数に対応する。一番上のノードは、符号化/復号がそこから開始するノードであるルートノードと呼ばれる。
ツリーにおける各外部ノードでは、符号化/復号プロセスが再開され、すなわちルートから現在のノードまでのビットの系列としてのコードワード、または現在のコードワードに関連付けられているシンボルの復号された値のいずれかが生成される。図4のコーディングツリー例では、0から15までインデックスが付けられたシンボルに対応する16のコードワードがある。この例では、最短のコードワードは、1ビットの長さを有し、最長のコードワードは、それぞれ10ビットの長さを有する。このツリーにおいて外部ノード(コードワード)を含むレベルの数は、7、すなわち、第1、第3、第4、第6、第7、第9、および第10のレベルである。
さらに図4を参照して、nは、コーディングツリーにおける外部ノードの数(およびしたがってコードにおけるコードワードの数)を示し、Lは、最長のコードワードの長さ、Kは、コーディングツリーにおける外部ノードで埋められるレベルの数を示すとする。以下の説明では、ポールバッハマンのО記法を使用する。例えば、式y(n)=О(x(n))は、十分に大きいすべてのnについて、|y()|≦M|x(n)|となるようなある定数M>0の存在を示す。
コーディングプロセスをサポートするために、エントロピ符号化ユニット46またはエントロピ復号ユニット52などの符号器または復号器は、一般に、メモリ45またはメモリ51など、コンピュータメモリに2値ツリーを格納する必要がある。さらに、符号化および復号プロセスは、メモリに格納されているコーディングツリーのビットごと(すなわちノードごと)のトラバースを伴うはずである。したがって、こうした実装は、О(n)ストレージコストを要し、最高О(L)ステップまでかかるはずである。それにもかかわらず、一部の特別な場合では、コーディングツリーが何らかの特定の構造を有するとき、こうしたコード構造を格納し、符号化または復号の操作を実行する、より効果的な方法があり得る。
例えば、図4のコーディングツリーの例に提示されているコードを考えると、コードワードは、非低減の長さであること、およびコーディングツリーの同じレベルにおけるすべてのコードワードは、隣接する値を有することを観察することができる。例えば、図4のツリーの第4レベルのコードワードは、ツリーの第3レベルのコードワードより長く、すなわち、0001対011、010、001、および000である。さらに、第3レベルのコードワードは、011、010、011、000の隣接する値を有する。したがって、すべてのコードを格納する代わりに、コーディングツリーのレベルごとに、最小または最大のコードワードのみを、すなわち隣接するコードワードをそこから計算することができる基本コードワードとして格納することで十分であり得る。
上記の観察は、例えばA. Moffat and A. Turpin, On the Implementation of Minimum-Redundancy Prefix Codes, IEEE Trans. Communications, 45 (10) (1997) 1200-1207に記載されているように、いわゆる正準形へのコードの変換に基づいて可変長のコードを復号する技術を理解する鍵である。簡単に言えば、正準のコードは、長さの非低減分布を有し、そのノードに割り当てられているインデックスに対して辞書式順序を維持する。結果として得られたコードが上記の特性を有するように、任意の所与の源を並べ替えることができることを示すのは、かなり簡単である。
例えば、図4のコーディングツリーに示されているコードは、以下の表1に示すように、非単調分布の源についての並べ替えられたコードを表す。具体的には、表1は、並べ替えられた正準の可変長コードの一例である。
Figure 2010509895
上記の表1において、シンボル0は、最も高い確率を有し、1、2が続く。しかし、シンボル3は、4より低い確率を有し、4および8は、1および2と同じ確率を有する。並べ替え後、すべてのシンボルの確率は、単調に増加(非低減)しており、その結果、図4のコーディングツリーにおいて表現して示される正準のコードが得られる。A. Moffat and A. Turpin, On the Implementation of Minimum-Redundancy Prefix Codes, IEEE Trans. Communications, 45 (10) (1997) 1200-1207に記載されている、いわゆるMoffat−Turpinアルゴリズムは、正準のコードを復号するための技術を提供する。本開示に記載されている技術は、Moffat−Turpinアルゴリズムと比べて、改善をもたらし得る。J. B. Connell, A Huffman-Shannon-Fano Code, Proc. IEEE, July 1973, 1046-1047、およびA. Brodnik and S. Carlsson, Sublinear Decoding of Huffman Codes Almost in Place, DIMACS Workshop on Codes and Trees: Algorithmic and information Theoretic Approaches, October 1998, Rutgers University, DIMACS Center, NJに記載されているものなど、他のアルゴリズムは、Moffat−Turpinアルゴリズムに似ており、開示された技術を似たように使用することによって、改良することもできる。
可変長コードの復号のためのMoffat−Turpinアルゴリズムについて、以下で説明する。入力アルファベットAは、n個の文字を含む:A={α,・・・αn−1}と仮定すると、並べ替えi:A→{0,・・・,n−1}は、結果として得られた確率がp≦p≦・・・≦pn−1を満たすように適用される。次いで、Lが最長のコードワードの長さである場合、インデックス1≦iLごとに、コードワードの長さを割り当てる、ハフマンまたは他の最小冗長構成アルゴリズムを適用することができる。その結果、「集団数(population number)」は、m、すなわち、長さlのコードワードの数として生成される。
これらのパラメータを使用して、以下のように、ツリーにおけるレベルごとにいわゆる「基本」値が計算される。
Figure 2010509895
これらの基本コードワード値は、コーディングツリーの各レベルにおける、辞書式に最小の正準コードワードを表す。base[l]の基本コードワード値が与えられると、次に、長さlのm個のコードワードの中のj+1番目のコードワードの値を計算することができる。
Figure 2010509895
復号器の動作では、次のように左寄せバージョンの基本コードワード値を格納することがより便利である。
Figure 2010509895
この場合、Wは、ビットストリームから最後にロードされたビットを保持するために使用されるビットバッファまたはレジスタの長さである。W≧Lであると仮定する。
最後に、基本コードワード値に加えて、Moffat−Turpin復号器は、並べ替えられた配列に、それぞれのシンボルのインデックスも格納する。これらのインデックスは、ツリーにおける埋められたレベルごとに、offset[l]値として格納される。図4のツリーによって表されるコードについてのMoffat−Turpinアルゴリズムによって維持される完全な構造例が、以下の表2に示される。
Figure 2010509895
表2の構造を使用したMoffat−Turpin復号アルゴリズムの実装のための擬似コード例が、以下の表3に示される。
Figure 2010509895
上記の表3から、復号プロセス全体は、現在のビットストリームバッファと左寄せの基本コードワード値とのK回までの(Wビット)比較を伴い、次いで、復号されたシンボルのインデックスの簡単な直接計算を伴うことがわかる。また、こうした構造によって使用されるlj_base[]配列は、メモリのО(K*W)ビットを必要とすることもわかり、このことは、WがW≧lとなるように使用されなければならないため、コードワードが長い場合、問題となり得る。
表3の例において、復号器は、ビットストリームからVとしてWビットを受信し、コーディングツリーの連続するレベルiについて、Vと基本コードワード(lj_base[i])と比較する。V以下である基本コードワードが見つかると、コードワードのレベルの検索を終了する。次いで、復号器は、レベルiに関連付けられている長さを決定し、lビットずつビットストリームをスクロールし、シンボルを復号する。特に、復号されたシンボルは、レベルiについてのオフセット値、およびビットストリームからのコードワードVとW−Iビットだけ右にシフトされた、レベルiの基本コードワードとの間の差との合計によって決定される。
一般の設定では、Moffat−Turpin復号に準ずるとき、逆マッピングルックアップ(inverse mapping lookup)i−1:{0,・・・,n−1}→Aである。この場合、最後の演算は、О(n)スペースを必要とするため、最もメモリを使うものとなる。しかし、多くの実際的な場合では、変換または予測子のランレングスまたは出力を伴う状況など、符号化する必要のある源は、すでに順序付けられている。したがって、Moffat−Turpin構造におけるlj_base[]配列によって使用されるメモリは、ストレージコスト全体における主要因となる。
第1の一般的な態様によれば、本開示に記載されている技術は、Moffat−Turpinアルゴリズムまたは他のアルゴリズムで使用されるデータ構造のこれ以上の圧縮を可能にする改良点を提供し、可変長コードの増分的復号をサポートする。次に、改良点について、より詳しく説明する。表2を参照すると、lj_base[l]値が右から左への先行ビットを大量に有することは明らかである。したがって、基本コードワードの部分値は、基本コードワードからの固定数の先行ビットの削除を表す。ほとんどの場合、削除される先行ビットは、ゼロである。コーディングツリーがより深い層に達するにつれて、こうしたゼロの数は、単調に増加している。したがって、コーディングツリーの一番最初の層で開始し、下方に移動しながら、ビットが順序復号される場合、復号の正確さに影響を与えることなく、先行ゼロビットの一部をスキップすることができる。先行ゼロの少なくとも一部をスキップすることによって、本開示に記載されている技術は、非常に圧縮されたデータ構造、および可変長のコードの増分的復号を可能にする。
しかし、先行ビットが削除されると、コーディングツリーのより低いレベルにおけるいくつかの正当なコードが、削除される先行ビットの範囲まで及ぶ可能性がある。したがって、こうしたコードを失うのを避けるために、スキップインジケータの表が提供される。スキップインジケータは、コーディングツリーの選択されたレベルに進む前に、復号すべきビットストリームにおいて、いくつかのビットをスキップするよう復号器に指示する。特に、スキップインジケータは、コーディングツリーの選択されたレベルに進む前に、コードワードビットストリームにおいて、固定数のビット、例えば8ビットなどをスキップするよう復号器に指示することができる。このようにして、ツリーの選択されたレベルにおける基本コードワードの部分値は、固定数のビットだけ、基本コードワードをシフトすることに基づく。シフトなしでは、ツリーの選択されたレベルにおける基本コードワードは、少なくとも部分的に削除された数の先行ビットまで及ぶことになる。
以下の表4は、コードワードを表し、処理するために使用されるデータ構造をさらに圧縮するために、本開示の一態様に従って先行ゼロが削除されるコーディングプロセスの実装例を示す。表4の例において、先行ゼロは、8単位で削除され、これは、従来の8ビット/バイトコンピュータにおけるビットストリームバッファ管理に便利である。先行ゼロの削除を管理するために、上述したように、インジケータ(skip_8[i])の追加の表が提供される。したがって、表4は、一般に、表2に合致するが、先行ゼロを各コードワードから削除し、スキップインジケータ列を追加する。
Figure 2010509895
表4の例において、値r_lj_base(i)は、各インデックス位置における基本コードワード値を表し、値r_level[i]は、そのインデックス位置についてのコーディングツリー内のレベル、およびそのレベルにおけるコードワードの長さを示し、値offset[i]は、基本コードワード値についての、右から左への先行ゼロの数を示し、値skip_8[i]は、次の基本コードワード値について、復号器が8ビットをスキップすべきかどうかを示し、1はスキップを指定し、0はスキップなしを指定する。このスキップ操作は、そうでなければ、先行ゼロが削除されると失われることになるコードワードを復号器が識別できるようにするために、選択された間隔で、ビットバッファを定期的にリフレッシュする。例えば、左寄せのコードワードの一番右の8つの先行ゼロが削除される場合、一番右の8ビットに及ぶコードワードは、部分的に、または完全に失われることになる。したがって、スキップ指示に応答して一番左の8ビットをスキップすることは、コードワードを削除されないビットの範囲に移動させることになり、それによって、復号に使用するコードワードを保持する。
したがって、スキップインジケータは、表4の例において、例えば8など、コードの次のレベルについて、指定されたスキップ増分だけ復号器が前方にスキップすべきとき、信号で伝える。一例として、表2において、インデックス位置5および6(ツリーレベル9および10)にある基本コードワード値は、それぞれ0000000010000000および0000000000000000である。一番右の8つの先行ゼロ(左寄せ)がこれらの基本コードワード値から削除されるとき、8つの先行ゼロを削除するときに実際の基本コードワード値(0000000010000000)が失われないように、復号器が前方に8ビットスキップすることが必要である。代わりに、実際の基本コードワード値(0000000010000000)は、最初の8ビット(00000000)をスキップし、次いで、一番右の8つの先行ゼロを削除することによって、異なる基本コードワード値(10000000)に変換される。
先行ゼロの削除により、変更されたlj_base[i]配列の幅は、かなり小さくなる。表4のコードにおいて、一例として、変更されたlj_base[i]配列の幅Wは、表2の場合のW=16の代わりに、W=8である。こうした余分のスキップ表を使用して、定期的にビットバッファをリフレッシュするアルゴリズムの実装の一例が、以下の表5に示されている。表5に示されるように構成されたアルゴリズムは、非常に長いコードワードまたは非常にコンパクトな基本コードワード値(lj_base)表をサポートするよう構成され得る。
Figure 2010509895
表5に示されるように、復号器は、ビットストリームから最後のWビットを取得し、これは、値V=bitstream_bufferによって表されている。次いで、復号器は、ビットストリームバッファからのコードワードV以下である基本コードワード値lj_base[i]について、コーディングツリーのレベルiを検索する。ツリーの現在のレベルiが、例えば表5に示されるように、スキップレベル(skip_B[i])に対応する場合、復号器は、復号器によって検索される次のレベルのコードワードを、B個の一番右の先行ゼロの削除によって失うのではなく、保持することができるように、例えば、いくつかの実装における8ビットなど、Bビットだけ右にビットストリームをスクロールする。
例えば、表5に示されるように、ツリーの現在のレベルにおけるコードワードについての残余長さl=level[i]を決定すると、復号器は、長さlだけビットストリームをスクロールする。次いで、復号器は、現在のレベルiについてのオフセット、およびビットストリームバッファコンテンツVと、W−lビットだけ右にシフトされた、現在のレベルiの基本コードワードとの間の差の合計に基づいて、シンボルインデックスを直接計算する。
復号器は、基本コードワードの部分値、スキップインジケータ、基本コードワードによって表される値、および基本コードワードの部分値の長さ(すなわち、ビット数)を指定する格納されているデータ構造を使用して、コードワードビットストリームからのコードワードを復号する。一般に、エントロピ復号ユニット52などの復号器に関連付けられているプロセッサは、コードワードのビットストリームからのコードワード以下である基本コードワードの部分値のうちの選択された1つについて、コーディングツリーのレベルを検索する。プロセッサは、スキップインジケータに応答して、選択されたレベルのコーディングツリーに進む前に、コードワードビットストリームにおいて、いくつかのビットをスキップし、コードワード以下の基本コードワードの部分値のうちの選択された1つとコードワードとの間の差、およびコードワード以下の基本コードワードの部分値のうちの選択された1つのインデックスに基づいて、コードワードに対応する複数の値のうちの1つを計算する。プロセッサは、メモリ内に格納する、異なる装置または処理ユニットに送信する、またはユーザに提示するために、復号の結果を生成する。例えば、復号された結果を、表示装置28を駆動して、映像または画像を提示し、かつ/または音声出力装置を駆動して、音声または言語出力を提示するために使用することができる。
表5の例において、復号器は、そうでなければ、先行ゼロが削除されると失われるコードワードを保持するために、スキップ操作を介してビットストリームバッファの増分的更新を実行する。さらに、復号器がコードの各レベルで比較する基本コードワード値を、かなり短くすることができる。次に、基本コードワード値の長さの短縮の可能な量について説明する。本開示に記載されている変更されたアルゴリズムにおけるこうした量のダイナミックレンジを分析するために、2つの隣接するレベルの間の差は、以下のように考えられる。
Figure 2010509895
iが次の非空のレベルのインデックスである場合、次のようになる。
Figure 2010509895
ここで、注目すべき主な量は、ml+i−iであり、これは、この差に影響を与える。最も簡単な場合、i=1であるとき、この差は、単に、外部ノード数に依存することが明らかであり、したがって、Wは、以下になるように選択することができる。
Figure 2010509895
これは、最も実際的な場合では、Lよりかなり小さい量である。この差は、かなり不均衡な分布の場合、特に大きいはずである。
例えば、入力シンボルがベルヌーイ確率p(1−p)m−kでmビットのブロックである場合、最も埋められたレベルは、おおよそ
Figure 2010509895
コードワードを含むはずであり、これは、コードワード間を区別するために、おおよそH(p)mビットを使用すべきであることを意味し、ここでは、H(p)は、例えばT. Cover and J. Thomas, Elements of Information Theory, Wiley, 1991に記載されているエントロピ関数である。
一方、この場合の最長のコードワードは、おおよそ
Figure 2010509895
ビットを有し、この場合、非対称分布では、
Figure 2010509895
であることがよく知られており、式中、H−∞(p)は、例えばW.Szpankowski, Average Case Analysis of Algorithms on Sequences (New York, John Wiley & Sons, 2001)に記載されているような、レニーエントロピの特別な場合である。p≧0またはp≧1で、この差を任意に大きくすることができる。
上記の説明に基づいて、提案された技術は、大きい、非対称のコード構造の処理に効果的であるはずであるということになる。こうした構造は、従来の/既存の技術を使用して処理することが従来難しく、多くの場合、技術者は、それらをより実用的にするために、コードの圧縮性能に影響を与える様々な簡略化を使用するという方法を採る。
例えば、S. Golomb, "Run-length coding," IEEE Trans. Inform. Theory, vol. IT-12, pp. 399-401, July 1966およびR. Gallager and D. van Voorhis, "Optimal source codes for geometrically distributed integer alphabets," IEEE Trans. Inform. Theory, vol. IT-21, pp. 228-230, Mar. 1975に記載されているものなど、非常に人気のあるゴロムコードは、特に簡単な構造で可変長コードを表すが、これらは、幾何分布のクラス、およびこうした分布の加算無限のパラメータの値にのみ最適である。技術者は、主に複雑性の問題が動機となる、著しく分散する分布にさえ、それらを使用する傾向にある。こうした解決策は、こうしたコードの暗黙の性能の制約のために、準最適であり、また拡張または変更が非常に難しくなり得る。
T. J. Lynch, Sequence time coding for data compression, Proc. IEEE (Lett.), 54 (1966) 1490-1491およびL. D. Davisson, Comments on Sequence time coding for data compression, Proc. IEEE (Lett.), 54 (1966) 2010-2011に記載されているようなLynch−Davissonコードの設計に関連付けられている別の解決策は、コードを、最初の1つのみが可変長符号化を受け、残りの1つが固定数のビットを使用して拡張として送信される、2つの部分に分割することである。残念ながら、こうした分割における効率の損失があり、それは、時として、シンボルごとに1.5〜2ビットの大きさとなる。
より手の込んだバージョンのコードブック分割技術が、例えばBoris Ryabko, Jaakko Astola, Karen Egiazarian, Fast Codes for Large Alphabets, Communications in Information and Systems, v.3, n. 2, pp.139-152、およびBoris Ryabko, Jorma Rissanen, Fast Adaptive Arithmetic Code for Large Alphabet Sources with Asymmetrical Distributions, IEEE Communications Letters, v. 7, no. 1, 2003,pp.33-35に記載されているように、アルファベットグループ分け(alphabet grouping)の名で開発されている。しかし、この手法も、圧縮効率において、いくらかの損失を犠牲にする。
上述した技術とは異なり、本開示に記載されている技術は、コードの構造および最適性を十分保持するよう構成することができ、したがって、ディジタル映像、画像、音声、または言語データの符号化および復号においてなど、データ圧縮および符号化における広範な実用的な応用に役立つツールとなり得る。
2値適応形ブロックコーディング
次に、本開示の第2の一般的な態様による、無記憶情報源によって生成される2値系列の適応形可変長コーディングの低複雑性技術の一例について、より詳しく説明する。この開示された技術は、ある系列における前のビットの非ゼロビットの数によって識別される1組のコンテキストのために構築されたユニバーサルブロックコードを実装し得る。本開示のこの第2の一般的な態様は、非常にコンパクトなデータ構造の生成に関して上述した第1の一般的な態様とは別に、またはそれと共に実施され、または提供され得る。データ構造は、テーブル、リンクリスト、2値ツリー、ラディックスツリー、フラットファイルなど、広範なデータ構造のうちの任意のものでよく、多くの形式のランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、またはその両方など、様々な異なるメモリ装置のうちの任意のものに格納することができる。データ構造は、符号器または復号器内のこうしたメモリに格納することができる。この第2の一般的な態様によれば、低複雑性の適応形符号化および復号のための技術は、R. E. Krichevsky and V. K. Trofimov, The Performance of Universal Encoding, IEEE Trans. Information Theory, 27 (1981) 199-207に記載されている推定を改良する、こうしたコードの漸近的冗長の決まったやり方に少なくとも一部分依存し得る。
データ圧縮アルゴリズムは、何らかの未知の分布のビットの入力系列を復号可能なビットストリームに変換する。例えば、画像または映像コーデック、音声コーデックにおけるスペクトルの拡張可能(ビットスライスベースの)符号化、および他の用途の設計において、データ圧縮が使用される。こうした場合のほとんどは、符号化されるビットは、変換フィルタ、予測フィルタなど、様々な信号処理ツールによって生成される値から取得され、このことは、それらはすでに十分相関が取り除かれており、こうした源の無記憶情報性の前提が正当とされることを意味する。
こうした2値適応形アルゴリズムのほとんどの一般的に使用されている実装は、一般的に、その複雑性を低減するために何らかの近似および簡単な方法が適用された状態の算術演算コードに基づく。こうしたアルゴリズムの2つのよく知られている例には、W. B. Pennebaker, J. L. Mitchell, G. G. Langdon, Jr., R. B. Arps, An overview of the basic principles of the Q-Coder adaptive binary arithmetic coder, IBM J. Res. Dev., 32 (6) (1988) 717に記載されており、JBIG画像コーディング標準に使用されるQコーダアルゴリズム、またはD. Marpe, H. Schwartz, and T. Wiegand, Context-Based Adaptive Binary Arithmetic Coding in the H.264/AVC video compression standard, IEEE Trans. on CSVT, 13(7):620 636, July 2003に記載されており、映像圧縮のためのITU−T H.264/MPEG AVC標準で使用されるCABACアルゴリズムがある。
本開示のこの第2の一般的な態様によれば、代替の実装は、いくつかの推定された密度のために設計され、ある系列における前のブロック(コンテキスト)内の非ゼロのビットの数によってインデックスが付けられたハフマンコードの配列を使用する。効率および実装の両方の観点から、こうした技術は、例えばn=8・・・16の小さめなサイズのビットのブロックを使用し、および例えば1.5kバイト・・・5kバイトの対応するメモリ量を使用することによって、所望の圧縮性能を達成することができる。
この技術は、確率pおよびq=1−pが対応する2値アルファベット{0,1}からシンボルを生成する無記憶情報源の文脈で考えることができる。wがこの源によって生成された長さnの単語である場合、その確率は、
Figure 2010509895
であり、式中、kは、この単語における1の数を示す。値kは、wの重さと呼ぶこともできる。
ブロックコードΦは、長さ|w|=nの単語wと、2値系列(またはコードワード)Φ(w)との間の単射であり、
Figure 2010509895
式中、コードワードΦ(w)は、例えばT. M. Cover and J. M. Thomas, Elements of Information Theory, (John Wiley & Sons, New York, 1991)に記載されているような、一意に復号可能な組を表す。
一般に、源(すなわち、その確率p)が既知であるとき、こうしたコードは、その平均長さ、または相対語では、その平均冗長度を最低限に抑えるようになっている。
Figure 2010509895
上記の式では、H(p)=−p log p−q log qは、源のエントロピを示す。
この問題を解決するために提案されたコードおよびアルゴリズムの従来の例には、ハフマン、シャノン、シャノン−ファノ、およびギルバートムーアコード、およびその変形などがある。こうしたコードの性能は、よく研究されており、こうしたコードについての多くの有用な実用的実装技術も報告されている。
源が未知であるとき、使用可能な最適なオプションは、源のクラスについて、最悪の場合の冗長を最低限に抑えるユニバーサルコードΦ*を設計することであり、例えばB. M. Fitingof, Optimal Coding in the Case of Unknown and Changing Message Statistics, Probl. Inform. Transm., 2, (2) (1965) 3 {11 (in Russian) 1-7 (English Transl.), L. D. Davisson, Universal Noiseless Coding, IEEE Trans. Inform. Theory, 19 (6) (1973), 783-795およびR. E. Krichevsky and V. K. Trofimov, The Performance of Universal Encoding, IEEE Trans. Information Theory, 27 (1981) 199-207に記載されており、以下に示される通りである。
Figure 2010509895
こうしたコードの一例は、単語の確率の以下の推定を使用して、構成することができる。
Figure 2010509895
式中、Γ(x)は、Γ関数、kは、単語wの重さ、およびnは、その長さである。上記の公式は、R. E. Krichevsky and V. K. Trofimov, The Performance of Universal Encoding, IEEE Trans. Information Theory, 27 (1981) 199-207に記載されており、nが無限大(n->∞)に近づくにつれて、真の確率への一様(p)収束を確実にする。
源のパラメータの正確な値がわからない状況で、過去にこの源によって生成されたシンボルの系列uにアクセスすることができる。こうした系列は、サンプルと呼ぶことができ、|u|=tビット長と見なすことができる。ここでのタスクは、このサンプルの異なる値によってインデックスが付けられた1組のコード
Figure 2010509895
を設計することであり、以下に示されるように、その結果として得られる最悪の場合の平均冗長度を最小に抑えるようにする。
Figure 2010509895
こうしたコードは、サンプルベースまたは適応形ユニバーサルブロックコードと呼ばれる。この開示では、サンプルuが与えられると、以下の単語wの確率の推定を使用して、適応形ブロックコードの特定の実装を記載する。
Figure 2010509895
式中、sは、サンプルの重さ、tは、その長さである。
すぐ上の推定量関数(estimator function)(1)を使用したサンプルベースのコードの概念および分析は、R. E. Krichevsky in R. E. Krichevsky, Universal Data Compression and Retrieval (Kluwer, Norwell, MA, 1993)によって記載されている。適応形ブロックコードの平均冗長レートは、漸近的に
Figure 2010509895
であり、式中、nはブロックサイズ、tは、サンプルのサイズである。
上記の式(2)から、長さt=О(n)のサンプルを使用することによって、既知の源について、ブロックコードの冗長レートの順序に一致する、こうしたコードの冗長レートをО(1/n)に低下させることが可能であることが明らかである。しかし、こうしたコードの十分な可能性を理解することができるように、ハフマン、シャノンなど、実際のコード構成アルゴリズムの選択によって影響を受ける項を含めて、その冗長についてのより正確な式を知る必要がある。
この第2の一般的な態様によれば、本開示は、Krichevskyの定理2の以下の改良を提供する。特に、以下の定理1は、以下のように、適応形ブロックコード
Figure 2010509895
についての平均冗長レートの定理を改良する。
定理1:適応形ブロックコード
Figure 2010509895
の平均冗長レートは、以下の漸近的挙動(n,t->∞)を有する。
Figure 2010509895
式中、nはブロックサイズ、tはサンプルサイズ、p、q=1−pは、入力源のシンボルの確率であり、
Figure 2010509895
は、上記の式(1)で推定された分布に対するコード
Figure 2010509895
の平均冗長度である。
Figure 2010509895
の正確な挙動は、アルゴリズム固有である。しかし、従来のハフマンおよびシャノンのコードを含む大きいクラスの最小冗長技術では、この項は、大きさにおいて以下のような制限があり、
Figure 2010509895
振動挙動を示し、これは、パラメータpの値によって、何らかの定数に収束してもしなくてもよい。また、tおよびnの短い値の場合、こうしたコードの冗長は、次の以下の項によって影響を受ける可能性がある。
Figure 2010509895
これは、源pのパラメータの関数である。図5は、漸近的挙動を有する適応形ブロックコードの冗長レートを示すグラフであり、この量を描く。短いブロック/サンプルの場合、こうしたコードの性能は、源の非対称性に影響を受けやすい。この定理の証明は、例えば、Asymptotic average redundancy of adaptive block codes, Y.A. Reznik, W. Szpankowski, Proceedings of IEEE International Symposium on Information Theory (ISIT), 2003で見つけることができる。
次に、上述したコードを実装するための効率的なアルゴリズムの例について説明する。無記憶情報モデルにおいて、単語wの確率(またはその推定)は、そのビットの実際のパターンではなく、その重さkのみに依存する。したがって、すべての可能なnビットの単語の組を考えると、その組を同じ重さ(k=0,・・・n)および同じ確率の単語を含むn+1のグループに分けることができる。
Figure 2010509895
こうしたグループのサイズは、以下の通りである。
Figure 2010509895
さらに便宜上、各グループWn,kは、辞書式順序に単語を格納すると仮定する。値In,k(w)は、グループWn,kにおける単語wのインデックス(位置)を示す。以下の表6は、ベルヌーイ確率pn−k,p=0.9で4ビットのブロックのために構成されたコードの一例である。
Figure 2010509895
表6におけるコード例は、本開示のいくつかの態様による、グループWn,kにおける単語とそのコードワードとの間の提案されたマッピングの構造を記述するために使用される。このコードは、同じレベルにあるコードワードが、それらが表す入力ブロックと同じ辞書式順序を有することを確実にするために、追加のステップがとられた、ハフマンのアルゴリズムの変更を使用して構成されている。圧縮効率のどんなロスもなく、こうした並べ替えが可能であることは、よく知られている。この並べ替えの概念を使用した以前のアルゴリズムの例には、ハフマン−シャノン−ファノコード、およびMoffatおよびTurpinによって述べられた正準のコードなどがある。
図6は、表6のブロックコード例の構造を示すコーディングツリーを示す図である。予想されるように、各グループWn,kは、同じ長さのコードワードを含む多くとも2つのサブグループから成る。一般に、図6のコーディングツリー、および表6のブロックコードによって表されるコード構造は、コードワードのグループ、およびそのグループのそれぞれの中のコードワードの第1および第2のサブグループを定義する。各グループは、同じ重さを有する値を表すコードワードを含む。第1のサブグループは、第1の長さを有するコードワードを含み、第2のサブグループは、第1の長さとは異なる第2の長さを有するコードワードを含む。各グループにおけるコードワードは、直接計算による符号化および復号を容易にするために、コードワードによって表される値に対して、辞書式に順序付けられる。
グループの一例は、図6の参照番号66によって示される。第1および第2のサブグループの例は、それぞれ図6の参照番号68A、68Bによって示される。類似のグループおよびサブグループは、コーディングツリー内に重さごとに提供される。グループは、同じ重さkを有するブロックを含む。サブグループは、コーディングツリーにおける同じ重さおよび同じレベルを有するブロックを含む。これは、グループWn,kにおけるすべての単語が、同じ確率、およびいわゆるハフマンコードの兄弟の性質を有するという事実から得られる。また、この観察は、シャノンコード、汎用型シャノンコード、および場合によっては他のアルゴリズムにも当てはまる。上述したように、グループWn,kは、同じ長さのコードワードを含む多くとも2つのサブグループを含み、次のように表すことができる。
Figure 2010509895
式中、lは、グループWn,kからのブロックに割り当てることができる最も短いコード長である。さらに、グループWn,k内の単語は、辞書式順序に従うため、Wn,k,lとWn,k,l+1との間の分割は、単に次のようになる。
Figure 2010509895
式中、nは、より短いコードワードを含むサブグループのサイズを示す。したがって、第1のサブグループが、長さ3の3つのコードワードを有し、同じグループ内の第2のサブグループが、長さ4の1つのコードワードを有する場合、n(より短いコードワードを含むサブグループ、すなわち第1のサブグループのサイズ)は、3に等しい。この例は、図6のコーディングツリーのレベル3および4に関連付けられているグループ内のサブグループに対応し、サブグループ68Aは、それぞれ長さ3のコードワード001、010、および011を有し、サブグループ68Bは、長さ4のコードワード0001を有する。
各サブグループ内の辞書式に最小のコードワードは、例えば、本開示の第1の態様に関して上述したように、基本コードワードと呼ぶことができ、以下のように表すことができる。
Figure 2010509895
式中、wは、グループWn,kにおけるi番目のブロックである。上述したように、両方のサブグループ内の残りのコードワードを、以下のように計算することができることに留意されたい。
Figure 2010509895
一例として、例えば図6のコーディングツリーのレベル3および4の例と同様に、長さ3の3つのコードワードを含む第1のサブグループ68A、および長さ4の1つのコードワードを含む第2のサブグループ68Bがあると仮定する。この場合、所与のブロックの位置がi=2である場合、i<n(nは3に等しい)であり、結果として得られたコードワードは、該当する基本コードワード+iである。この例では、サブグループの基本コードワードは、001であり、結果として得られたコードワードは、001+2=011である。図6のコーディングツリーのレベル3および4について、該当するコードワードの位置がi≧nであった場合、コードワードは、第2のグループ内にあることになり、0000+4−3=0001に等しい、0000+i−nの基本コードワードに等しいことになる。
基本コードワードは、非空のサブグループによって定義されるだけであり、nビットブロックのために構成されたツリーにおけるこうしたサブグループSの数は、
Figure 2010509895
以内である。さらに、複数のサブグループは、同じレベルに存在する可能性があり、こうした一緒に配列されているサブグループの数は、n+1を超えることはできない。例えば、図6におけるツリーの第10レベルにおいて、コードワード1110および1111に対応する2つのサブグループがある。しかし、これらのサブグループは、同じグループに属さない。これは、レベルごとに一意の基本コードワードを割り当てるが、次いでこうしたコードを処理するためにО(n2)の大きい並べ替え表を必要とする他のアルゴリズムとのかなりの差である。この場合、構造全体は、О(n)ビットの大きさである。
一般に、このコード構造は、グループWおよびサブグループSを定義する。各グループは、同じ重さを有する値を表すコードワードを含む。各グループにおけるコードワードは、コードワードによって表される値に対して辞書式に順序付けられる。さらに、各グループにおける第1のサブグループは、第1の長さを有するコードワードを含み、第2のサブグループは、第1の長さとは異なる第2の長さを有するコードワードを含む。コード構造は、可変長のコーディングを実行するために、符号器によってアクセスすることができるデータ構造によって表すことができる。本開示は、可変長の符号化または復号におけるこうしたコード構造の使用、およびこうしたコード構造を定義するデータ構造を備えるコンピュータ可読媒体を企図する。
上記の説明を受けて、次に、ブロックコードの直接計算のための簡単なアルゴリズムについて説明する。パラメータ
Figure 2010509895
が使用可能であり、レベルlおよび基本コードワードn,k,lを非空のサブグループごとに取得することができると仮定する。次いで、ブロックwを符号化するプロセスは、実質的に以下のステップの組によって達成することができる。
1.ブロックwが与えられると、その重さkおよびインデックスIn,k(w)を取得する。
2.In,k(w)<nである場合、第1のサブグループWn,k,lを選択し、そうでない場合、第2のサブグループWn,k,l+1を選択する。
3.次いで、選択されたサブグループ(Wn,k,lまたはWn,k,l+1)についての基本コードワード(Bn,k,lまたはBn,k,l+1)を取り出し、以下の式に従って、該当するコードを計算する。
Figure 2010509895
上記の式によれば、選択されたサブグループ(Wn,k,lまたはWn,k,l+1)内のブロックwの位置i=In,k(w)が、サブグループ内のブロックの数n未満である場合、コードワードは、Bn,k,l+iである。あるいは、選択されたサブグループ(Wn,k,lまたはWn,k,l+1)内のブロックwの位置iがサブグループ内のブロックの数n以上である場合、コードワードは、Bn,k,l+1+i−nである。
上述したように、一例として、図6のコーディングツリーのレベル3および4の場合、所与のブロックコードの位置がi=2<nであるとき、上記のプロセスは、011のコードワードをもたらし、所与のブロックコードの位置がi=3≧nであるとき、0001のコードワードをもたらす。この例では、nは3、すなわち、重さk=1の第1のサブグループ68Aにおけるコードワードの数である。位置iの順序は、基本コードワードで開始して、例えば、図6の例における重さk=1の場合、0から3など、辞書式に進む。特に、すべて第1のサブグループ68A(i<n)内にある位置0は基本コードワード001に対応し、位置1はコードワード010に対応し、位置2はコードワード011に対応し、位置3は、サブグループ68B(i≧n)内のコードワード0001に対応する。
このプロセスは、同じレベルにあるコードワードが、それらが表す入力ブロックと同じ辞書式順序を有するように、並べ替えられることを確実にすることによって、容易に達成することができる。例えば、上述したコードワードは、入力ブロック0001、0010、0100、および1000の辞書式順序に従う。次いで、各サブグループにおける辞書式に最小のコードワード、例えば、サブグループ68Aにおける001、またはサブグループ68Bにおける0001は、上述したコードワードの計算の目的で、基本コードワードとして使用することができる。上述したようなブロックコードの直接構成のプロセスの実装例を表すC言語プログラムコードを、以下の表7に示す。
Figure 2010509895
上記のC言語コードにおいて、値kは、ブロックwの重さを示し、値iは、重さkのグループ内のブロックの位置(In,k(w)を示し、nk[k]は、重さkのグループの第1のサブグループ内のコードワードの数を示す。iがnk[k]以上である場合、iは、インデックスを調整するために減分され、サブグループは、該当する重さkの第2のサブグループ(1)に設定される。この第2のサブグループは、j=sg[k][l]によって識別される。iがnk[k])未満である場合、iは、減分されず、サブグループは、該当する重さkの第1のサブグループ(0)に設定される。この第1のサブグループは、j=sg[k][0]によって識別される。
次いで、コードワードは、該当するサブグループj(base[j])の基本コードワードと、iの値の合計として生成される。図6の例について、iの値が2である場合、コードは、サブグループ68Aの基本コードワード001と、iの値(2)との合計となり、これは、001+010=011に等しい。上記の式(13)を参照すると、サブグループに応じて、基本コードワードは、Bn,k,lまたはBn,k,l+1のいずれかであり、iの値は、iまたはi−nk[k]のいずれかである。したがって、上記のコードは、一般に、式(13)によって提供される結果に対応する。コードワード(code)を計算すると、コードワードの長さ(len)は、len[j]と指定され、これは、適当なサブグループのコード長であり、この場合、第2のサブグループは、第1のサブグループより1大きいコード長を有する。次いで、符号化プロセスは、codeおよびlenの値をビットストリームbsに書き込む、演算put_bits(code,len,bs)を介してコードをビットストリームに書き込む。ビットストリームは、別の装置による復号のために送信される。このプロセスは、次のコードワードの計算のために、重さkを戻す。
上記で概説した符号化プロセスは、符号化すべき値の重さに基づいて、グループのうちの1つを選択することと、選択されたグループの第1のサブグループ内のコードワードの数に対する符号化すべき値の辞書式位置に基づいて、サブグループのうちの1つを選択することと、選択されたサブグループの基本コードワード、および符号化すべき値の辞書式位置に基づいて、選択されたサブグループ内のコードワードのうちの1つを選択することと、選択されたコードワードにより、符号化すべき値を符号化することとを伴い得る。サブグループのそれぞれの基本コードワード、グループのそれぞれの中のコードワードの位置、第1のサブグループのそれぞれの中のコードワードの数、およびサブグループのそれぞれの中のコードワードの長さは、可変長のコーディングをサポートするために、符号器によってアクセスすることができるデータ構造に格納され得る。
メモリの見地から、表7に示されるプロセスは、S個の基本コードワード(長さО(n)ビット)、n+1値のnk(長さО(n)ビット)、S個のコード長(長さО(log n)ビット)、および2(n+1)サブグループインデックス(長さО(log n)ビット)のみを必要とする。追加のメモリ低減は、本開示の他の場所に記載されているように、基本コードワードの増分的値を格納することによって可能である。S=О(n)と仮定すると、データ構造全体は、О(n)ビットのみを必要とする。表7に示されている特定の実装において、例えば、n−20およびS=32であると仮定すると、このデータ構造のサイズは、244バイトになる。これは、このコードをダイレクトテーブル(direct table)の形で提示するために必要となる220の単語よりはるかに少ない。例えば、n≦12・・・16など、適度に短いブロックの場合、重さおよびインデックス(表7のプロセスにおける関数weight(.)およびindex(.,.))の計算は、せいぜい単一回のルックアップとすることができる。この場合、符号化プロセス全体は、多くとも1回の比較、2回の加算、および4回のルックアップを必要とし得る。
より大きいブロックの場合、以下のよく知られている組み合わせ公式を使用することができる。
Figure 2010509895
式中、wは、単語wの個々のビットを表し、すべてのk>nの場合、
Figure 2010509895
であると仮定する。この公式を実装するために、すべての2項係数を、パスカルの三角形においてレベルnまで事前計算するか、以下の簡単な恒等式を使用して、それらを動的に計算することができる。
Figure 2010509895
事前に計算された係数に基づく実装は、
Figure 2010509895
個の単語(О(n3)ビット)のメモリおよびО(n)回の加算を必要とする。係数の動的計算は、О(n)回の加算、乗算、除算を必要とする。しかし、プロセス全体は、ほんの少しのレジスタしか必要なく、スタティックメモリは必要としない場合がある。インデックス計算の複雑性の追加の説明は、T. Tjalkens, Implementation cost of the Huffman-Shannon-Fano code, in Proc. Data Compression Conference (DCC'05) (Snowbird, Utah, March 29-31, 2005) 123-132で見つけることができる。
次に、上記の技術を実装する復号器の設計の一例について説明する。上述した符号化プロセスのように、復号プロセスは、パラメータn、基本コードワード、および関連の長さを使用し得る。便宜上、以下の説明は、左寄せのバージョンの基本コードワード値に依存する。
Figure 2010509895
式中、Tは、機械語の長さ(T>max l)である。次いで、復号プロセス例は、以下のように説明することができる。
1.ビットストリーム内で、
Figure 2010509895
がTビット未満である一番上のサブグループを見つける。
2.ブロックのインデックスI(w)を、上記の式(13)に基づいて復号する。
3.その重さkおよびインデックスを使用して再構成されたブロックを生成する。

上述した復号プロセスの実装例を表すC言語コードを、以下の表8に示す。
Figure 2010509895
表8に示されている復号プロセス例は、左寄せの基本コードワードlj_base[S]を使用する。動作中、復号プロセスは、ビットストリームバッファのコンテンツvalを受信し、ビットストリームバッファのコンテンツvalに対応する基本コードワードを有するコーディングツリー内のサブグループを識別する。例えば、プロセスは、基本コードワードが受信したコードワードvalより大きい限り、引き続き、コーディングツリーにおける異なるレベルのサブグループを通過して下方に移動する。しかし、val以下の基本コードワードを含むサブグループに到達すると、そのサブグループが選択される。適切なサブグループを見つけると、プロセスは、サブグループのコード長を決定し、ビットストリームをその長さだけスクロールして、復号されたビットをスキップし、コードワードを隔離する。復号プロセスは、基本コードワード値をビットストリームバッファコンテンツから取り去ることによって、サブグループ内のコードワードのインデックス位置iを決定する。
例えば、コードワードが011であり、基本コードワードが010である場合、この差の結果は2であり、これは、コードワードが、サブグループ内の可能な位置0、1、および2の中の位置2にあることを示す。32ビット幅のレジスタの例では、この差は、32マイナスコード長lenだけ、右にシフトされ得る。次いで、復号プロセスは、該当する重さk、およびサブグループインデックスjを取り出し、インデックスiを再構成する。次いで、プロセスは、選択されたグループ内のi番目の単語を、コードワードとして生成し、重さkを戻す。式kj[j].kは、サブグループの重さを戻し、式kj[j].jは、サブグループのインデックスを、所与の重さについての第1のサブグループ(0)または第2のサブグループ(1)を示す0または1のいずれかとして戻す。j=1となるように第2のサブグループが選択されると、インデックスiは、nk[k]の値を追加することによって調整される。そうでなく、第1のサブグループが選択された場合、インデックスiは、調整されない。関数word()は、例えば上記の式(13)を使用して、復号された単語値として、n,kグループにおけるi番目の単語を戻す。
一般に、符号器は、コード構造がグループおよびサブグループを定義する、上述したコード構造に従って可変長コーディングを実行することができる。この場合もまた、各グループは、同じ重さを有する値を表すコードワードを含む。各グループにおけるコードワードは、コードワードによって表される値に対して辞書式に順序付けられる。さらに、各グループにおける第1のサブグループは、第1の長さを有するコードワードを含み、第2のサブグループは、第1の長さとは異なる第2の長さを有するコードワードを含む。
コード構造は、可変長のコーディングを実行するために、符号器または復号器によってアクセスすることができるデータ構造によって表すことができる。上述したように、データ構造は、サブグループのそれぞれの基本コードワード、グループのそれぞれの中のコードワードの位置、第1のサブグループのそれぞれの中のコードワードの数、およびサブグループのそれぞれの中のコードワードの長さを指定することができる。このデータ構造は、映像符号器、画像符号器、音声符号器、言語符号器、映像復号器、画像復号器、および音声復号器、または言語復号器のうちの1つに関連付けられているメモリに格納することができ、コーディング操作をサポートするために必要に応じてアクセスされる。
上述したように、エントロピ復号ユニット52などの復号器は、コーディングツリーのトップダウン(上から下への)検索で、復号すべきコードワード以下の基本コードワードを含むサブグループのうちの第1のものを選択することを選択することができる。次いで、復号器は、復号すべきコードワードと、選択されたサブグループの基本コードワードとの間の差に基づいて、選択されたサブグループ内の復号すべきコードワードの位置、すなわちサブグループインデックスを決定することができる。復号器は、選択されたサブグループが存在するグループに基づいて、復号すべきコードワードによって表される値の重さを決定し、選択されたサブグループがそのグループの第1のサブグループであるか、第2のサブグループであるかに基づいて、選択されたサブグループが存在するグループ内のコードワードの位置、すなわちグループインデックスを決定する。次いで、復号器は、復号すべき符号器によって表される値の重さ、および選択されたサブグループが存在するグループ内のコードワードの位置に基づいて、値のうちの1つを選択し、選択された値により復号すべきコードワードを復号する。値は、例えば、表6のブロックコードのうちの1つに対応し得る。
本開示のこの態様に従って企図されるコード構造およびデータ構造は、計算オーバーヘッド、メモリ使用率、および処理時間に関して、効率をサポートすることができる。表8の復号プロセス例は、例えば、サブグループを見つけるための比較およびルックアップを1回からS回、加算を1回または2回、シフト操作を1回、追加の比較を1回、および追加のルックアップを3回必要とする。サブグループを見つけるのに必要なステップの数は、基本コードワードを2値検索ツリーに入れることによって、または余分のルックアップテーブルを使用することによって、さらに低減することができるが、いずれの場合も、余分のメモリを犠牲にする。
復号プロセスの最後に、上述したように、コードワードの重さkとインデックスIn,k(w)が、(例えば、表8の関数word()によって)実際の値に変換される。ブロックが適度に短い場合、これは、簡単なルックアップによって達成することができる。そうでない場合、単語は、例えば、D. A. Huffman, A method for the construction of minimum-redundancy codes. Proc. IRE, 40 (Sept. 1952) 1098-1101に記載されている計数公式(enumeration formula)を使用することによって合成することができる。複雑性の観点から、このプロセスは、符号器におけるインデックス計算に似ている。
上述した符号化および復号プロセスを使用して、データのブロックの適応形符号化および復号のシステムを定義することができる。この例について、以下の条件で、入力ブロックを符号化することができると仮定する。
1.コンテキストがない、すなわち、ユニバーサルコードが実装される
2.コンテキストは、以前観察された1つのブロックによって与えられる。すなわちt=n
3.コンテキストは、以前観察された2つのブロックによって与えられる。すなわちt=2n。
実際のブロックをコンテキストとして使用する代わりに、その重さを使用することで十分である(源の無記憶情報の性質のため)。これは、tビットサンプルの場合、その重さsによってインデックスを付けられたt+1のコード構造の配列が提供されることを意味する。スペースをさらに節約するために、sおよびkに対するKT分布の対称性を使用することができる。特にプロセスは、s>t/2であるときは毎回、s=t−sを交換し、ビットを反転する(すなわち、強制的にk=n−kにする)ことができる。このように、t/2+1のテーブルを定義するだけでよい。この例では、適応形コードによって必要なメモリの全体量は、1+n/2+1+n+1=1.5n+3のテーブルになる。ブロックサイズn=8・・・20の場合の特定のメモリ推定量を、以下の表9に示す。
Figure 2010509895
上記の表では、KT推定された密度を使用し、また本開示に従って変更されたハフマンコード構成アルゴリズムを使用して生成された。以下に示されるのは、本開示に記載されているような、適応形ブロックコーダを実装するプログラムのためのコンピュータコードの一例である。
Figure 2010509895
Figure 2010509895
Figure 2010509895
Figure 2010509895
Figure 2010509895
Figure 2010509895
Figure 2010509895
Figure 2010509895
次に、ブロックサイズn=16での本明細書に記載された適応形コーディングプロセスの性能の評価の実験結果を説明すると共に、よく知られている他のアルゴリズムと比較する。特に、適用形コーディングプロセスは、W. B. Pennebaker, J. L. Mitchell, G. G. Langdon, Jr., R. B. Arps, An overview of the basic principles of the Q-Coder adaptive binary arithmetic coder, IBM J. Res. Dev., 32 (6) (1988) 717に記載されており、JBIG画像コーディング標準に使用されるQコーダアルゴリズム、およびD. Marpe, H. Schwartz, and T. Wiegand, Context-Based Adaptive Binary Arithmetic Coding in the H.264/AVC video compression standard, IEEE Trans. on CSVT, 13(7):620-636, July 2003に記載されており、映像圧縮のITU−T H.264/MPEG AVC標準で使用されるCABACアルゴリズムと比較される。
テストを行うために、コンピュータで生成されたビットの系列は、確率pで2値ベルヌーイ源からの出力をシミュレートするために使用された。16から1024に及ぶこうした系列の長さ、および特定の長さごとに、こうした系列のQ=1000000のサンプルが生成された。相対冗長レートが次のように計算された。
Figure 2010509895
本開示に記載されている適応形コーディングプロセスでは、コンテキストの以下の構造が使用された。
1.最初の16ビットブロックは、コンテキストなしに符号化される(ユニバーサルコード
2.第2のブロックは、そのコンテキストとして第1のものを使用して符号化される(t=16のコード
3.3番目およびそれ以降のすべてのブロックは、コンテキストとして系列内の前のブロック2つを使用して符号化される(t=32のサンプルベースのコード)。
図7Aおよび7Bは、異なる値pでの適応形ブロックコードの冗長レートとQコーダおよびCABAC技術との比較を示すグラフである。図7Aは、p=0.1の場合の結果を示し、図7Bは、p=0.5の場合の結果を示す。図8は、適応形ブロックコード、Qコーダ、およびCABAC技術の場合の源データの非対称性に対する冗長の感度を示すグラフである。実験的研究の結果が、図7A、図7B、および図8に示されている。図7Aおよび図7Bは、x軸上の符号化されたビットの数対y軸上の(平均コード長−エントロピ)/エントロピを描く。
図8は、x軸上の確率対y軸上の(平均コード長−エントロピ)/エントロピを描く。図7A、図7B、および図8の各グラフは、Qコーダ、CABAC、および適応形コーディングのグラフを対応するラベルによって示す。実験結果から、本開示に記載されている適応形コードは、QコーダおよびCABACアルゴリズムの両方よりはるかに速い収束率を有し得ることがわかる。適応形コーディングプロセスは、より短い系列については、QコーダおよびCABACアルゴリズムより優れており、符号化されたビットの合計長さが1024に近づくと、QコーダおよびCABACアルゴリズムに匹敵するようになる。さらに図8に示されているように、160の符号化されたビット(または次いで16ビットブロック)の後、適応形コーディングプロセスは、QコーダおよびCABACアルゴリズムに比べて、より低い冗長を提供することができる。この挙動は、上述した定理1に一致する。
図9は、本開示の第1の一般の一態様による、単調分布についてのメモリ効率の良い可変長のコーディングを構成するための方法を示すフロー図である。この方法は、図2および図3に示されるように、エントロピ符号化ユニット46およびエントロピ復号ユニット52によって使用するコードを構成するために、符号器、復号器、または他の装置に関連付けられているプロセッサによって実装することができ、それだけには限定されないが、映像、画像、言語、および音声データを含む、様々なデータのうちの任意のものの圧縮およびコーディングをサポートし得る。こうしたプロセッサは、例えば、可変長のコーディングに有用なコード構造属性を定義するデータ構造を準備するために、符号器または復号器内、または汎用コンピューティングシステム内に設けることができる。
図9に示されるように、プロセッサは、コーディングされた入力シンボルのアルファベットを取得する(70)。シンボルは、所与のデータセットまたは系列内のシンボルの存在または使用の確率または頻度を示すそれぞれの重さを有する。該当するシンボルの重さを決定すると(72)、プロセスは、その重さに基づいて、インデックスをシンボルに割り当て(74)、インデックスおよびシンボルの辞書式順序に基づいて、シンボルコードを割り当てる(76)。したがって、同じ重さを有するシンボルは、本開示に記載されているコーディング技術を容易にするために、辞書式に順序付けられ得る。
コードは、2値コーディングツリーによって表されるコード構造に従ってまとめることができる。プロセッサは、コーディングツリー内のレベルごとに、基本コードワードを識別する(78)。基本コードワードは、そのツリーの所与のレベルにおける最小のコードワードであり、そのツリーのそのレベルにおけるシンボルの中の辞書式に最も早いシンボルに対応する。コンパクトなデータ構造を提供するために、プロセッサは、部分的な基本コードワードを生成するために、基本コードワードから固定数Bの先行ビットを削除する(80)。基本コードワードは、左寄せのコードワードとして構築することができ、先行ビットは、左寄せのコードワードにおける右から左に進むM個の先行ビットであり得る。一部の実装では、削除される先行ビットの数は、8とすることができる。他の実装では、削除される先行ビットの数は、8未満、または8を上回ってもよい。
コーディングツリーの多くのレベルについて、M個の先行ビットは、ゼロである。しかし、いくつかのレベルでは、先行ビットは、そのツリーにおけるそれぞれのレベルについてのすべてまたは一部の基本コードを形成し得る。これらの選択されたレベルで、プロセッサは、スキップインジケータを生成する(82)。スキップインジケータは、先行するBビットの削除時に、基本コードが失われないように、復号器がビットストリームをBビットだけスクロールする旨の命令を提供する。このプロセスは、データ構造において、結果として得られた部分的な基本コードワードコーディングツリーのそれぞれのレベルにおけるコードワードに関連付けられている長さ、コーディングツリーにおけるコードワードに関連付けられているそれぞれのシンボルのインデックスを示すオフセット、および先行するBビット内に少なくとも部分的に含まれる基本コードワードの損失を防ぐために、ビットストリームがBビットだけスクロールされなければならないときを示す1つまたは複数のスキップインジケータを格納することができる(84)。データ構造は、構成された可変コードでエントロピ符号化および復号を行うのを助けるために、エントロピ符号化ユニット46およびエントロピ復号ユニット52に提供され得る。データ構造は、1つまたは複数の1次元または多次元のルックアップテーブル、リンクリスト、2値ツリー、ラディックスツリー、フラットファイルなどを含めて、様々な形をとり得る。
図10は、本開示の第1の一般的な態様による、図9の方法に従って構成された可変長のコードを使用してシンボルを符号化するための方法を示すフロー図である。図10に示すように、エントロピ符号化ユニット46は、シンボルを受信し(86)、シンボルインデックスを決定し(87)、コーディングツリーにおける対応するレベルを識別するために、シンボルのインデックスとオフセットテーブルとを比較する。特に、エントロピ符号化ユニット46は、シンボルのインデックスがツリーの所与のレベルのオフセット以上であるかどうかを決定する(88)。シンボルインデックスは、重さの順序にランク付けされた、他のシンボルの中のシンボルの順序を表し、同じ重さのシンボルは、シンボルのアルファベットに従って辞書式に順序付けられている。オフセットは、ツリーの該当するレベルの1つまたは複数のコードの長さと、最大コード長との間の差である。図4のツリーでは、例えば最大コード長が16であり、ツリーのレベル3のコード長が3である場合、基本コードワードの該当するオフセットは、12である。
シンボルインデックスがツリーの現在のレベルのオフセットを超えない場合、エントロピ符号化ユニット46は、トップダウン検索で、コーディングツリーの次のレベルへと下方に進み(90)、シンボルインデックスとその次のレベルのオフセットとの比較を繰り返す(88)。シンボルインデックスがコーディングツリーの特定のレベルのオフセット以上であることをエントロピ符号化ユニット46が決定すると(88)、エントロピコーディングユニットは、シンボルの適切なコードワードを計算する。特に、エントロピコーディングユニット46は、シンボルコードワードを、ツリーの現在のレベルの基本コードワードと、シンボルインデックスとそのレベルのオフセットとの差との合計に設定する(92)。
図4のツリーの例を使用して、シンボルインデックスが14である場合、14はそのレベルの基本コードワードに割り当てられた12のオフセットより大きいため、エントロピコーディングユニット46は、シンボルコードがツリーのレベル3に存在することを決定する。次いで、エントロピ符号化ユニット46は、基本コードワード(001)+(シンボルインデックス(14)−オフセット(12))としてコードワードを計算し、すなわち001+2=001+010=011となる。受信されたシンボルコードを設定する(92)と、エントロピ符号化ユニット46は、例えば、エントロピ復号ユニット52を備える受信装置に送信するために、コードワードをビットストリームに出力する(94)。エントロピコーディングユニット46は、次いで、該当するデータ系列における次のシンボルについて、プロセスを繰り返す。
図11は、本開示の第1の一般的な態様による、図9の方法に従って構成された可変長のコードを復号するための方法を示すブロック図である。図11に示される方法は、表5に示されるものと同じ、または似たアルゴリズムを使用して実行され得る。実装例では、図10を参照して説明したように、コードは、エントロピ復号ユニット52によって受信され、エントロピコーディングユニット46によって符号化される。図11に示した方法は、本開示に記載されるような、メモリ効率のより復号技術を使用することができ、こうしたコードを構成することができるコンパクトなデータ構造を利用することができる。図11に示されるように、エントロピ復号ユニット52は、入ってくるビットストリームからコードワードを受信する(96)。コードワードは、ビットストリームバッファから取り出された固定幅Wのビットから取得され得る。コードワードは、左寄せでよく、または左寄せフォーマットに変換することができ、幅Wは、右から左に、コードワードからB個の先行ビットを削除することによって低減され得る。
エントロピ復号ユニット52は、一番上のレベルから開始し、適切な基本コードワードが見つかるまで、トップダウン検索で、ツリーの中へより深く進みながら、コードワードを、コーディングツリーの異なるレベルの基本コードワードと比較する。特に、エントロピ復号ユニット52は、ツリーの現在のレベルの基本コードワードコードワード以下であるかどうかを決定することができる(98)。そうでない場合、エントロピ復号ユニットは、引き続きツリーの次のレベルへと下方に進み(100)、次のレベルに関連付けられている基本コードワードについての比較を繰り返す(98)。しかし、次のレベルに進むと(100)、エントロピ復号ユニット52は、スキップインジケータが現在のレベルに関連付けられているかどうかを決定する(102)。そうである場合、エントロピ復号ユニット52は、次のレベルに進む(100)前に、ビットストリームバッファを一定単位だけスクロールする(104)。特に、エントロピ復号ユニット52は、先行するMビットをドロップすることによってコードワードが失われないように、Mビットだけビットストリームバッファをスクロールすることができる。スキップ指示(102)がない場合、エントロピ復号ユニット52は、単に、次のレベルに進む(100)。
いずれの場合でも、エントロピ復号ユニット52は、再度、コードワードを、現在のレベルの基本コードワードと比較する(98)。エントロピ復号ユニット52は、基本コードワードがそのコードワード以下であるレベルを見つけ(98)、エントロピ復号ユニット52は、それぞれのレベルで基本コードワードの残余長さを決定し(106)、ビットストリームを残余長さだけスクロールする(108)。次いで、エントロピ復号ユニット52は、そのレベルのオフセット、および基本コードワードと復号されるコードワードとの間の差に基づいて、コードワードに関連付けられているシンボルを計算する(110)。
例えば、図4のツリーを参照すると、コードワードが0110000000000000である場合、8個の先行ビットがドロップされた、部分的な、切り捨てられたコードワードは、01100000である。この場合、エントロピ復号ユニット52は、レベル3の部分的な基本コードワード(00100000)を、コードワード以下であると識別し、3の残余長さを識別する。エントロピ復号ユニット52は、次のコードワードを受信するために、ビットストリームを3ビット前方にスクロールする。さらに、エントロピ復号ユニット52は、レベル3のオフセットを、ビットストリームバッファ内のコードワードとそのレベルの基本コードワードとの差に追加することによって、コードワードシンボルを計算する。例えば、エントロピ復号ユニット52は、コードを、オフセット[3]=12+コードワード01100000−00100000として計算し、これは、12+2=14に等しい。この場合、14がコード011によって表されるシンボルのインデックスである。
図11に示される方法は、本開示の他の場所に記載されているように、非常にコンパクトなデータ構造、およびかなりのメモリ効率を利用することができる。その結果、こうした方法を実装することによって、エントロピ復号ユニット52は、そのすべてが映像復号装置、またはデータの復元および復号のために構成されている他の装置には望ましい可能性のある、処理オーバーヘッドの低減、メモリ使用率の低減、および処理速度の増加を含めて、効率の増加を提供することができる。
図12は、本開示の第2の一般的な態様による適応形ブロックコードを構成するための方法を示すフロー図である。図12の方法は、コーディング装置内のプロセッサまたは適応形ブロックコードの効率の良い直接構成をサポートする汎用プロセッサ内に実装することができる。図12に示されるように、プロセッサは、コーディングすべき1組の単語(112)を取得する。結果として得られたコード構造を表すデータ構造は、符号化装置、復号装置、またはその両方の中のメモリに格納され得る。単語は、2値コードのブロックとすることができる。単語の重さを決定する(114)と、プロセッサは、重さに基づいて、コードワードグループを単語に割り当てる(116)。コードワードグループは、同じ重さkの単語のコードワードを含み、例えば、図6に示されるように、コーディングツリーの隣接する2つのレベルにまたがり得る。
図12にさらに示されるように、プロセッサは、単語の長さに基づいて、サブグループを同じグループ内の単語に割り当てる(118)。特に、グループは、第1のサブグループおよび第2のサブグループを含み得る。第1のサブグループは、同じ長さおよび同じ重さを有する1つまたは複数のコードワードを含む。同様に、第2のサブグループは、同じ長さおよび同じ重さを有する1つまたは複数のコードワードを含む。しかし、第1のサブグループ内のコードワードの長さは、第2のサブグループ内のコードワードの長さ未満である。したがって、各サブグループは、同じ重さの、コーディングツリーにおける同じレベルにおけるコードワードを含む。
プロセッサは、サブグループごとに基本コードワードを識別する(120)。基本コードワードは、サブグループ内の最小のコードワードである。図6の例では、サブグループ68Aの基本コードワードは、001である。しかし、サブグループ68Aは、基本コードワード001に加えて、コードワード010および011をさらに含む。この例では、相対的に少量の計算が与えられると、コードを、容易に、直接計算することができるように、サブグループ内のコードワードは、それらが表す単語の辞書式順序で順序付けられる。
各グループの第1のサブグループ内の要素の数は、コードワードを計算するために使用することができる。そのために、プロセッサは、各グループの第1のサブグループ内の要素の数を格納し(122)、また、グループインデックスマッピング(124)、サブグループコード長マッピング(126)、およびサブグループ基本コードワードマッピング(128)も格納する。グループインデックスマッピングは、コードワードが存在するグループ内の単語のコードワードの位置を識別することができる。サブグループコード長マッピングは、特定のサブグループ内のコードの長さを識別することができる。サブグループ基本コードワードマッピングは、各サブグループに関連付けられている基本コードワードを識別することができる。一般に、グループ内の単語のインデックスが与えられると、コードは、特定のサブグループの基本コードワードから構成することができる。格納されている情報は、符号器、復号器、またはその両方によってアクセスすることができるデータ構造に格納することができる。
図13は、本開示の第2の一般的な態様による、図12の方法に従って構成された可変長のコードを使用してブロックを符号化するための方法を示すフロー図である。図13の方法は、例えば、図2のエントロピ符号化ユニット46など、エントロピ符号化ユニット内に実装することができる。図13に示される方法は、表7に示されるものと同じ、または似たアルゴリズムを使用して実行され得る。図13に示されるように、所与の単語を符号化するために、エントロピ符号化46は、その重さ(130)およびグループインデックス(132)を取得する。単語の重さを使用して、エントロピ符号化46は、該当するコーディングツリー内の単語のグループインデックスを決定する(132)。グループインデックスIn,k(w)は、辞書式順序で単語を格納するグループWn,k内の単語wのインデックス(位置)を指定する。
エントロピ符号化ユニット46は、グループインデックスを、入力単語のコードワードが存在するグループの第1のサブグループ内の要素の数nと比較する。特に、エントロピ符号化ユニット46は、グループのインデックスが第1のサブグループ内の要素の数以上であるかどうかを決定する(134)。そうである場合、エントロピ符号化ユニット46は、第2のサブグループ、すなわちグループ内のサブグループ1を選択し(138)、グループインデックス値を減分する(140)。特に、グループインデックス値は、第1のサブグループにおける要素の数nだけ減分される。グループインデックスが第1のサブグループ内の要素の数以上でない場合(134)、エントロピ符号化ユニット46は、第1のサブグループ、すなわちサブグループ0を選択する(136)。各サブグループは、それ自体の基本コードワードを有する。エントロピ符号化ユニット46は、選択されたサブグループの基本コードワードを取得し(142)、基本コードワードとグループインデックス値との合計に基づいて、コードワードを計算する(144)。
図6のコーディングツリー例を参照すると、一例として、符号化すべき単語の重さが2であると仮定した場合、グループインデックス値は2、例えばコーディングツリーのレベル3および4のグループに対応する第1のサブグループ内の要素の数は3である。この場合、グループインデックス値(2)は、第1のサブグループ内の要素の数(3)未満であるから、エントロピ符号化ユニット46は、第1のサブグループ(サブグループ0)を選択する。その結果、基本コードワードは001である。単語を符号化するために、エントロピ符号化ユニット46は、2のグループインデックス値を001の基本コードワードに追加し、結果として011のコードワードが得られる。
同じグループについて、グループインデックス値が3であった場合、エントロピコーディングユニット46は、第2のサブグループ(サブグループ1)を選択することになる。しかし、エントロピコーディングユニット46は、第1のサブグループ(サブグループ0)内の要素の数nだけグループインデックス値だけ減分することになる。この場合、3のグループインデックス値は、3だけ低減されゼロになり、コードワードは、第2のサブグループの基本コードワードである0001+グループインデックス値である0として計算されることになり、その結果、0001のコードワードが得られる。
入力単語のコードワードを計算することに加えて、エントロピコーディングユニット46は、選択されたサブグループ内のコードの長さを取得することができる(146)。上記の例で、サブグループ0のレベル3について、コードの長さは、3となる。エントロピ符号化ユニットは、エントロピ復号ユニット52などエントロピ復号ユニットを含む復号装置など別の装置に格納および/または送信するために、計算されたコードワードとサブグループのコード長を、ビットストリームに出力する。
図14は、本開示の第2の一般的な態様による、図12および図13の方法に従って構成された可変長のコードを復号するための方法を示すブロック図である。図14に示される方法は、表8に示されるものと同じ、または似たアルゴリズムを使用して実行され得る。可変長のコードは、エントロピ符号化ユニット46を含む符号化装置などの符号化装置から受信することができる。可変長コードは、エントロピ復号ユニット52によって受信され、復号され得る。図14に示されるように、エントロピ復号ユニット52は、入ってくるビットストリームからコードワードを受信し(150)、コードワードをサブグループの基本コードワードと比較する。特にエントロピ復号ユニット52は、該当するコーディングツリーを検索して、ビットストリームバッファから取得されたコードワードのコンテンツ以下の左寄せのサブグループの基本コードワードを識別することができる(152)。
ツリーにおける所与のレベルのサブグループ内のサブグループの基本コードワードが、コードワード以下でない(152)場合、エントロピ復号ユニット52は、ツリーの次のレベルの次のサブグループに進み(154)、比較を繰り返す。このプロセスは、基本コードワードがビットストリームから受信されたコードワードより大きいままである限り、すなわち、エントロピ復号ユニット52が、サブグループの基本コードワードコードワード以下であるレベルに到達するまで、反復ベースで続行する。コードワードと基本コードワードを比較する際、エントロピ復号ユニット52は、本開示の第1の態様に従って、追加のメモリ低減のために、基本コードワードの部分的な増分値を使用することができる。特に、いくつかの先行ビットは、上述したように、メモリ効率を向上させるために、ドロップされ得る。
サブグループの基本コードワードコードワード以下であるコーディングツリーのレベルに到達すると、エントロピ復号ユニット52は、サブグループのコード長を決定し(156)、その長さだけビットストリームをスクロールして、復号されたビットをスキップし、コードワードを隔離する。エントロピ復号ユニット52は、基本コードワードを使用して、そのサブグループ内のコードワードの位置を決定することができる(158)。例えば、エントロピ復号ユニット52は、コードワードと基本コードワードとの間の位置の差を生成するために、ビットストリームコードワードを基本コードワードから取り去ることができる。
一例として、図6のコーディングツリーを参照して、入ってくるコードワードが0110000000000000である場合、エントロピ復号ユニット52は、基本コードワード0010000000000000を、コードワード以下の一番上のサブグループの基本コードワードと識別する。この基本コードワードは、レベル3および4のグループ内の第1のサブグループに関連付けられている。基本コードワードに関連付けられているサブグループのコード長(3)を決定すると、エントロピ復号ユニット52は、ビットストリームをスクロールして、復号されたビットをスキップすることができる。エントロピ復号ユニット52は、ビットストリームからのコードワードから基本コードワードを取り去ることによって、コードワードのグループインデックスを決定することができる。この例では、011−001は、010をもたらし、これは、2のグループインデックス値を生成する。
エントロピ復号ユニット52は、例えばコーディングツリー内のサブグループのレベルに基づいて、コードワードの重さを決定することもできる(160)。さらに、エントロピ復号ユニット52は、サブグループインデックス、すなわち、コーディングツリー内の選択されたサブグループのインデックスを決定することができる(162)。重さ、位置およびサブグループのインデックスを使用して、エントロピ復号ユニット52は、単語インデックスを決定し(164)、それによって、コードワードによって表される単語を生成するために、ビットストリームからのコードワードを復号する。この場合も、一部の実装では、エントロピ復号ユニット52によって実行される復号方法は、表8に示されるプロセスに対応し得る。
情報および信号を、様々な異なる技術および技法のうちの任意のものを使用して表すことができることを、当業者であれば理解されよう。例えば、上記の説明にわたって言及され得るデータ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁場または磁性粒子、光電場または光学粒子、またはその任意の組み合わせによって表すことができる。
本明細書に開示された実施形態との関連で記載されている様々な例示の論理ブロック、モジュール、回路、およびアルゴリズムステップが、電子ハードウェア、コンピュータソフトウェア、またはその両方の組み合わせとして実装され得ることを、当業者であれば、さらに理解されよう。ハードウェアおよびソフトウェアのこの互換性を明らかに示すために、様々な例示の構成要素、ブロック、モジュール、回路、およびステップについて、その機能に関して、上記で全般的に説明してきた。こうした機能は、ハードウェアとして実装されるか、ソフトウェアとして実装されるかは、システム全体に課せられる特定の用途および設計の制約によって決まる。当業者であれば、記載した機能を、特定の用途ごとに様々な方法で実装することができるが、こうした実装は、本開示の範囲からの逸脱をもたらすものと解釈されないものとする。
本明細書に記載された技術は、ハードウェア、ソフトウェア、ファームウェア、またはその任意の組み合わせにおいて実装され得る。こうした技術は、汎用コンピュータ、無線通信装置ハンドセット、または無線通信装置ハンドセットおよび他の装置における適用を含めて、複数の使用を有する集積回路装置など、様々な装置の任意のものに実装することができる。モジュールまたは構成要素として記載されている任意の特徴は、一体型の論理装置に一緒に、または別個ではあるが、相互運用可能な論理装置として別々に実装されてもよい。ソフトウェアに実装される場合、技術は、実行されると、上述した方法のうちの1つまたは複数を実行する命令を含むプログラムコードを備えるコンピュータ可読データ記憶媒体によって少なくとも一部分実現することができる。コンピュータ可読データ記憶媒体は、コンピュータプログラム製品の一部分を形成し得る。コンピュータ可読媒体は、ランダムアクセスメモリ(RAM)、例えばシンクロナスダイナミックランダムアクセスメモリ(SDRAM)、読み取り専用メモリ(ROM)、不揮発性ランダムアクセスメモリ(NVRAM)、電気的に消去書き込み可能ROM(EEPROM)、フラッシュメモリ、磁気または光データ記憶媒体などを備え得る。さらに、または代わりに、技術は、命令またはデータ構造の形でプログラムコードを運び、または通信し、伝播信号または波など、コンピュータによるアクセス、読み取り、かつ/または実行が可能なコンピュータ可読通信媒体によって少なくとも一部分実現することができる。
プログラムコードは、1つまたは複数のディジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、または他の等価の一体型または別個の論理回路など、1つまたは複数のプロセッサによって実行することができる。汎用プロセッサは、マイクロプロセッサとすることができるが、代替では、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械とすることができる。また、プロセッサは、例えば、DSPとマイクロプロセッサとの組み合わせ、複数のマイクロプロセッサ、1つまたは複数のマイクロプロセッサおよびDSPコア、または他の任意のこうした構成など、コンピューティング装置の組み合わせとして実装することもできる。したがって、「プロセッサ」という用語は、本明細書で使用される場合、上記の構成のうちの任意のもの、または本明細書に記載された技術の実装に適した他の任意の構成を指し得る。さらに、一部の態様において、本明細書に記載されている機能は、符号化および復号のために構成された専用のソフトウェアモジュールまたはハードウェアモジュール内に設けられ、または結合された映像符号器/復号器(CODEC)に組み込まれてもよい。
本開示の様々な実施形態について説明してきた。これらおよび他の実施形態は、以下の特許請求の範囲内に含まれる。

Claims (82)

  1. コーディングツリーにおけるコードワードのグループであって、前記グループのそれぞれが、同じ重さを有する値を表すコードワードを含み、前記グループのそれぞれにおける前記コードワードが、前記コードワードによって表される前記値に対して辞書式に順序付けられるコードワードのグループと、
    前記グループのそれぞれの中のコードワードの第1および第2のサブグループであって、前記第1のサブグループが第1の長さを有するコードワードを含み、前記第2のサブグループが前記第1の長さとは異なる第2の長さを有するコードワードを含むコードワードの第1および第2のサブグループと
    を定義するコード構造に従って可変長のコーディングを実行することと、
    メモリへの格納、装置への送信、またはユーザへの提示のうちの少なくとも1つのために、前記可変長のコーディングの結果を生成することと
    を備える方法。
  2. 可変長のコーディングを実行することが、
    前記サブグループのそれぞれの基本コードワード、前記グループのそれぞれの中のコードワードの位置、前記第1のサブグループのそれぞれの中のコードワードの数、および前記サブグループのそれぞれの中の前記コードワードの長さを指定するデータ構造にアクセスすることと、
    前記データ構造を使用して前記可変長のコーディングを実行することと
    を備える請求項1に記載の方法。
  3. 前記データ構造が、映像符号器、画像符号器、音声符号器、言語符号器、映像復号器、画像復号器、および音声復号器、または言語復号器のうちの1つに関連付けられているメモリに格納される請求項2に記載の方法。
  4. 前記基本コードワードのそれぞれが、前記それぞれのサブグループ内の辞書式に最小のコードワードである請求項2に記載の方法。
  5. 前記可変長のコーディングを実行することが、前記データ構造を使用して、前記値のうちの1つを符号化することを備え、符号化することが、
    前記符号化すべき値の重さに基づいて、前記グループのうちの1つを選択することと、
    前記選択されたグループの前記第1のサブグループ内の前記コードワードの数に対する前記符号化すべき値の辞書式位置に基づいて、前記サブグループのうちの1つを選択することと、
    前記選択されたサブグループの前記基本コードワードおよび前記符号化すべき値の前記辞書式位置に基づいて、前記選択されたサブグループ内の前記コードワードのうちの1つを選択することと、
    前記選択されたコードワードにより前記符号化すべき値を符号化することと
    を備える請求項2に記載の方法。
  6. 前記符号化された値を復号器に送信することをさらに備える請求項5に記載の方法。
  7. 前記可変長のコーディングを実行することが、前記データ構造を使用して、前記コードワードのうちの1つを復号することを備え、復号することが、
    コーディングツリーのトップダウン検索で、前記復号すべきコードワード以下の基本コードワードを含む前記サブグループのうちの第1のものを選択することと、
    前記復号すべきコードワードと、前記選択されたサブグループの前記基本コードワードとの間の差に基づいて、前記選択されたサブグループ内の前記復号すべきコードワードの位置を決定することと、
    前記選択されたサブグループが存在する前記グループに基づいて、前記復号すべきコードワードによって表される前記値の重さを決定することと、
    前記選択されたサブグループが前記グループの前記第1のサブグループであるか、前記第2のサブグループであるかに基づいて、前記選択されたサブグループが存在する前記グループ内の前記コードワードの位置を決定することと、
    前記値のうちの1つ、前記復号すべきコードワードによって表される前記値の重さ、および前記選択されたサブグループが存在する前記グループ内の前記コードワードの位置を選択することと、
    前記選択された値により前記復号すべきコードワードを復号することと
    を備える請求項1に記載の方法。
  8. 前記選択された値に少なくとも一部分基づいて、ユーザに出力を提示することをさらに備える請求項7に記載の方法。
  9. 前記コードワードによって表される前記値が、映像データ、画像データ、言語データ、または音声データのうちの少なくとも1つを表す請求項1に記載の方法。
  10. コーディングツリーにおけるコードワードのグループであって、前記グループのそれぞれが、同じ重さを有する値を表すコードワードを含み、前記グループのそれぞれにおける前記コードワードが、前記コードワードによって表される前記値に対して辞書式に順序付けられるコードワードのグループと、
    前記グループのそれぞれの中のコードワードの第1および第2のサブグループであって、前記第1のサブグループが第1の長さを有するコードワードを含み、前記第2のサブグループが前記第1の長さとは異なる第2の長さを有するコードワードを含むコードワードの第1および第2のサブグループと
    を定義するコード構造に従って可変長のコードを実行するための手段と、
    メモリへの格納、装置への送信、またはユーザへの提示のうちの少なくとも1つのために、前記可変長のコーディングの結果を生成するための手段と
    を備える装置。
  11. 可変長のコーディングを実行するための前記手段が、
    前記サブグループのそれぞれの基本コードワード、前記グループのそれぞれの中のコードワードの位置、前記第1のサブグループのそれぞれの中のコードワードの数、および前記サブグループのそれぞれの中の前記コードワードの長さを指定するデータ構造にアクセスするための手段と、
    前記データ構造を使用して前記可変長のコーディングを実行するための手段と
    を備える請求項10に記載の装置。
  12. 前記データ構造を、映像符号器、画像符号器、音声符号器、言語符号器、映像復号器、画像復号器、および音声復号器、または言語復号器のうちの1つに関連付けられているメモリに格納するための手段をさらに含む請求項11に記載の装置。
  13. 前記基本コードワードのそれぞれが、前記それぞれのサブグループ内の辞書式に最小のコードワードである請求項11に記載の装置。
  14. 可変長のコーディングを実行するための前記手段が、前記データ構造を使用して、前記値のうちの1つを符号化するための手段を備え、符号化するための前記手段が、
    前記符号化すべき値の重さに基づいて、前記グループのうちの1つを選択するための手段と、
    前記選択されたグループの前記第1のサブグループ内の前記コードワードの数に対する前記符号化すべき値の辞書式位置に基づいて、前記サブグループのうちの1つを選択するための手段と、
    前記選択されたサブグループの前記基本コードワードおよび前記符号化すべき値の前記辞書式位置に基づいて、前記選択されたサブグループ内の前記コードワードのうちの1つを選択するための手段と、
    前記選択されたコードワードにより前記符号化すべき値を符号化するための手段と
    を備える請求項11に記載の装置。
  15. 前記符号化された値を復号器に送信するための手段をさらに備える請求項14に記載の装置。
  16. 可変長のコーディングを実行するための前記手段が、前記データ構造を使用して、前記コードワードのうちの1つを復号するための手段を備え、復号するための前記手段が、
    コーディングツリーのトップダウン検索で、前記復号すべきコードワード以下の基本コードワードを含む前記サブグループのうちの第1のものを選択するための手段と、
    前記復号すべきコードワードと、前記選択されたサブグループの前記基本コードワードとの間の差に基づいて、前記選択されたサブグループ内の前記復号すべきコードワードの位置を決定するための手段と、
    前記選択されたサブグループが存在する前記グループに基づいて、前記復号すべきコードワードによって表される前記値の重さを決定するための手段と、
    前記選択されたサブグループが前記グループの前記第1のサブグループであるか、前記第2のサブグループであるかに基づいて、前記選択されたサブグループが存在する前記グループ内の前記コードワードの位置を決定するための手段と、
    前記値のうちの1つ、前記復号すべきコードワードによって表される前記値の重さ、および前記選択されたサブグループが存在する前記グループ内の前記コードワードの位置を選択するための手段と、
    前記選択された値により前記復号すべきコードワードを復号するための手段と
    を備える請求項11に記載の装置。
  17. 前記選択された値に少なくとも一部分基づいて、ユーザに出力を提示するための手段をさらに備える請求項16に記載の装置。
  18. 前記コードワードによって表される前記値が、映像データ、画像データ、言語データ、または音声データのうちの少なくとも1つを表す請求項10に記載の装置。
  19. プロセッサに、
    コーディングツリーにおけるコードワードのグループであって、前記グループのそれぞれが、同じ重さを有する値を表すコードワードを含み、前記グループのそれぞれにおける前記コードワードが、前記コードワードによって表される前記値に対して辞書式に順序付けられるコードワードのグループと、
    前記グループのそれぞれの中のコードワードの第1および第2のサブグループであって、前記第1のサブグループが第1の長さを有するコードワードを含み、前記第2のサブグループが前記第1の長さとは異なる第2の長さを有するコードワードを含むコードワードの第1および第2のサブグループと
    を定義するコード構造に従って可変長のコーディングを実行させ、
    メモリへの格納、装置への送信、またはユーザへの提示のうちの少なくとも1つのために、前記可変長のコーディングの結果を生成させる
    ための命令を備える有形のコンピュータ可読媒体。
  20. 前記プロセッサに、
    前記サブグループのそれぞれの基本コードワード、前記グループのそれぞれの中のコードワードの位置、前記第1のサブグループのそれぞれの中のコードワードの数、および前記サブグループのそれぞれの中の前記コードワードの長さを指定するデータ構造にアクセスさせ、
    前記データ構造を使用して前記可変長のコーディングを実行させる
    ための命令をさらに備える請求項19に記載のコンピュータ可読媒体。
  21. 前記プロセッサに、前記データ構造を、映像符号器、画像符号器、音声符号器、言語符号器、映像復号器、画像復号器、および音声復号器、または言語復号器のうちの1つに関連付けられているメモリに格納させるための命令をさらに備える請求項20に記載のコンピュータ可読媒体。
  22. 前記基本コードワードのそれぞれが、前記それぞれのサブグループ内の辞書式に最小のコードワードである請求項20に記載のコンピュータ可読媒体。
  23. 前記可変長のコーディングを実行するために、前記データ構造を使用して、前記プロセッサに、前記値のうちの1つを符号化させるための命令であって、前記プロセッサに、
    前記符号化すべき値の重さに基づいて、前記グループのうちの1つを選択させ、
    前記選択されたグループの前記第1のサブグループ内の前記コードワードの数に対する前記符号化すべき値の辞書式位置に基づいて、前記サブグループのうちの1つを選択させ、
    前記選択されたサブグループの前記基本コードワードおよび前記符号化すべき値の前記辞書式位置に基づいて、前記選択されたサブグループ内の前記コードワードのうちの1つを選択させ、
    前記選択されたコードワードにより前記符号化すべき値を符号化させる
    ための命令をさらに備える請求項21に記載のコンピュータ可読媒体。
  24. 前記プロセッサに、前記符号化された値を復号器に送信するよう送信機を制御させるための命令をさらに備える請求項23に記載のコンピュータ可読媒体。
  25. 前記可変長のコーディングを実行するために、前記データ構造を使用して、前記プロセッサに、前記コードワードのうちの1つを復号させるための命令であって、前記プロセッサに、
    コーディングツリーのトップダウン検索で、前記復号すべきコードワード以下の基本コードワードを含む前記サブグループのうちの第1のものを選択させ、
    前記復号すべきコードワードと、前記選択されたサブグループの前記基本コードワードとの間の差に基づいて、前記選択されたサブグループ内の前記復号すべきコードワードの位置を決定させ、
    前記選択されたサブグループが存在する前記グループに基づいて、前記復号すべきコードワードによって表される前記値の重さを決定させ、
    前記選択されたサブグループが前記グループの前記第1のサブグループであるか、前記第2のサブグループであるかに基づいて、前記選択されたサブグループが存在する前記グループ内の前記コードワードの位置を決定させ、
    前記値のうちの1つ、前記復号すべきコードワードによって表される前記値の重さ、および前記選択されたサブグループが存在する前記グループ内の前記コードワードの位置を選択させ、
    前記選択された値により前記復号すべきコードワードを復号させる
    ための命令をさらに備える請求項21に記載のコンピュータ可読媒体。
  26. 前記プロセッサに、前記選択された値に少なくとも一部分基づいて、ユーザに出力を提示するよう出力装置を制御させるための命令をさらに備える請求項25に記載のコンピュータ可読媒体。
  27. 前記コードワードによって表される前記値が、映像データ、画像データ、言語データ、または音声データのうちの少なくとも1つを表す請求項19に記載のコンピュータ可読媒体。
  28. コーディングツリーにおけるコードワードのグループであって、前記グループのそれぞれが、同じ重さを有する値を表すコードワードを含み、前記グループのそれぞれにおける前記コードワードが、前記コードワードによって表される前記値に対して辞書式に順序付けられるコードワードのグループと、
    前記グループのそれぞれの中のコードワードの第1および第2のサブグループであって、前記第1のサブグループが第1の長さを有するコードワードを含み、前記第2のサブグループが前記第1の長さとは異なる第2の長さを有するコードワードを含むコードワードの第1および第2のサブグループと
    を定義するコード構造に従って可変長のコーディングを実行するよう構成されているプロセッサであって、
    メモリへの格納、装置への送信、またはユーザへの提示のうちの少なくとも1つのために、前記可変長のコーディングの結果を生成するよう構成されている
    プロセッサを備える装置。
  29. 前記プロセッサが、前記サブグループのそれぞれの基本コードワード、前記グループのそれぞれの中のコードワードの位置、前記第1のサブグループのそれぞれの中のコードワードの数、および前記サブグループのそれぞれの中の前記コードワードの長さを指定するデータ構造にアクセスし、前記データ構造を使用して、前記可変長のコーディングを実行する請求項28に記載の装置。
  30. 前記データ構造が、映像符号器、画像符号器、音声符号器、言語符号器、映像復号器、画像復号器、および音声復号器、または言語復号器のうちの1つに関連付けられているメモリに格納される請求項29に記載の装置。
  31. 前記基本コードワードのそれぞれが、前記それぞれのサブグループ内の辞書式に最小のコードワードである請求項29に記載の装置。
  32. 前記プロセッサが、前記可変長のコーディングを実行するために、前記データ構造を使用して、前記値のうちの1つを符号化し、前記プロセッサが、前記符号化すべき値の重さに基づいて、前記グループのうちの1つを選択し、前記選択されたグループの前記第1のサブグループ内の前記コードワードの数に対する前記符号化すべき値の辞書式位置に基づいて、前記サブグループのうちの1つを選択し、前記選択されたサブグループの前記基本コードワードおよび前記符号化すべき値の前記辞書式位置に基づいて、前記選択されたサブグループ内の前記コードワードのうちの1つを選択し、前記選択されたコードワードにより前記符号化すべき値を符号化する請求項29に記載の装置。
  33. 前記符号化された値を復号器に送信する送信機をさらに備える請求項32に記載の装置。
  34. 前記プロセッサが、前記可変長のコーディングを実行するために、前記データ構造を使用して、前記コードワードのうちの1つを復号し、前記プロセッサが、コーディングツリーのトップダウン検索で、前記復号すべきコードワード以下の基本コードワードを含む前記サブグループのうちの第1のものを選択し、前記復号すべきコードワードと、前記選択されたサブグループの前記基本コードワードとの間の差に基づいて、前記選択されたサブグループ内の前記復号すべきコードワードの位置を決定し、前記選択されたサブグループが存在する前記グループに基づいて、前記復号すべきコードワードによって表される前記値の重さを決定し、前記選択されたサブグループが前記グループの前記第1のサブグループであるか、前記第2のサブグループであるかに基づいて、前記選択されたサブグループが存在する前記グループ内の前記コードワードの位置を決定し、前記値のうちの1つ、前記復号すべきコードワードによって表される前記値の重さ、および前記選択されたサブグループが存在する前記グループ内の前記コードワードの位置を選択し、前記選択された値により前記復号すべきコードワードを復号する請求項29に記載の装置。
  35. 前記選択された値に少なくとも一部分基づいて、ユーザに出力を提示する出力装置をさらに備える請求項34に記載の装置。
  36. 前記コードワードによって表される前記値が、映像データ、画像データ、言語データ、または音声データのうちの少なくとも1つを表す請求項28に記載の装置。
  37. 可変長のコードワードを指定するコーディングツリーにおけるコードワードのグループであって、前記グループのそれぞれが、同じ重さを有する値を表すコードワードを含み、前記グループのそれぞれにおける前記コードワードが、前記コードワードによって表される前記値に対して辞書式に順序付けられるコードワードのグループと、
    前記グループのそれぞれの中のコードワードの第1および第2のサブグループであって、前記第1のサブグループが第1の長さを有するコードワードを含み、前記第2のサブグループが前記第1の長さとは異なる第2の長さを有するコードワードを含むコードワードの第1および第2のサブグループと
    を定義するコード構造について、
    前記サブグループのそれぞれの基本コードワード、前記グループのそれぞれの中のコードワードの位置、前記第1のサブグループのそれぞれの中のコードワードの数、および前記サブグループのそれぞれの中の前記コードワードの長さを使用して、可変長のコーディングを実行することと、
    メモリへの格納、装置への送信、またはユーザへの提示のうちの少なくとも1つのために、前記可変長のコーディングの結果を生成することと
    を備える方法。
  38. 可変長のコーディングを実行することが、前記値の少なくとも一部を符号化することを備え、前記可変長のコーディングの前記結果が1つまたは複数のコードワードである請求項37に記載の方法。
  39. 符号化することが、
    前記符号化すべき値の重さに基づいて、前記グループのうちの1つを選択することと、
    前記選択されたグループの前記第1のサブグループ内の前記コードワードの数に対する前記符号化すべき値の辞書式位置に基づいて、前記サブグループのうちの1つを選択することと、
    前記選択されたサブグループの前記基本コードワードおよび前記符号化すべき値の前記辞書式位置に基づいて、前記選択されたサブグループ内の前記コードワードのうちの1つを選択することと、
    前記選択されたコードワードにより前記符号化すべき値を符号化することと
    を備える請求項38に記載の方法。
  40. 可変長のコーディングを実行することが、前記コードワードの少なくとも一部を復号することを備え、前記可変長のコーディングの前記結果が1つまたは複数の値である請求項37に記載の方法。
  41. 復号することが、
    コーディングツリーのトップダウン検索で、前記復号すべきコードワード以下の基本コードワードを含む前記サブグループのうちの第1のものを選択することと、
    前記復号すべきコードワードと、前記選択されたサブグループの前記基本コードワードとの間の差に基づいて、前記選択されたサブグループ内の前記復号すべきコードワードの位置を決定することと、
    前記選択されたサブグループが存在する前記グループに基づいて、前記復号すべきコードワードによって表される前記値の重さを決定することと、
    前記選択されたサブグループが前記グループの前記第1のサブグループであるか、前記第2のサブグループであるかに基づいて、前記選択されたサブグループが存在する前記グループ内の前記コードワードの位置を決定することと、
    前記値のうちの1つ、前記復号すべきコードワードによって表される前記値の重さ、および前記選択されたサブグループが存在する前記グループ内の前記コードワードの位置を選択することと、
    前記選択された値により前記復号すべきコードワードを復号することと
    を備える請求項40に記載の方法。
  42. 前記基本コードワードのそれぞれが、前記それぞれのサブグループ内の辞書式に最小のコードワードである請求項37に記載の方法。
  43. 前記コードワードによって表される前記値が、映像データ、画像データ、言語データ、または音声データのうちの少なくとも1つを表す請求項37に記載の方法。
  44. コード構造について、
    可変長のコードワードを指定するコーディングツリーにおけるコードワードのグループであって、前記グループのそれぞれが、同じ重さを有する値を表すコードワードを含み、前記グループのそれぞれにおける前記コードワードが、前記コードワードによって表される前記値に対して辞書式に順序付けられるコードワードのグループと、
    前記グループのそれぞれの中のコードワードの第1および第2のサブグループであって、前記第1のサブグループが第1の長さを有するコードワードを含み、前記第2のサブグループが前記第1の長さとは異なる第2の長さを有するコードワードを含むコードワードの第1および第2のサブグループと
    を定義するための手段と、
    前記サブグループのそれぞれの基本コードワード、前記グループのそれぞれの中のコードワードの位置、前記第1のサブグループのそれぞれの中のコードワードの数、および前記サブグループのそれぞれの中の前記コードワードの長さを使用して、可変長のコーディングを実行するための手段と、
    メモリへの格納、装置への送信、またはユーザへの提示のうちの少なくとも1つのために、前記可変長のコーディングの結果を生成するための手段と
    を備える装置。
  45. 可変長のコーディングを実行するための前記手段が、前記値の少なくとも一部をコーディングするための手段を備え、前記可変長のコーディングの前記結果が1つまたは複数のコードワードである請求項44に記載の装置。
  46. 符号化するための前記手段が、
    前記符号化すべき値の重さに基づいて、前記グループのうちの1つを選択するための手段と、
    前記選択されたグループの前記第1のサブグループ内の前記コードワードの数に対する前記符号化すべき値の辞書式位置に基づいて、前記サブグループのうちの1つを選択するための手段と、
    前記選択されたサブグループの前記基本コードワードおよび前記符号化すべき値の前記辞書式位置に基づいて、前記選択されたサブグループ内の前記コードワードのうちの1つを選択するための手段と、
    前記選択されたコードワードにより前記符号化すべき値を符号化するための手段と
    を備える請求項45に記載の装置。
  47. 可変長のコーディングを実行するための前記手段が、前記コードワードの少なくとも一部を復号するための手段を備え、前記可変長のコーディングの前記結果が1つまたは複数の値である請求項44に記載の装置。
  48. 復号するための前記手段が、
    コーディングツリーのトップダウン検索で、前記復号すべきコードワード以下の基本コードワードを含む前記サブグループのうちの第1のものを選択するための手段と、
    前記復号すべきコードワードと、前記選択されたサブグループの前記基本コードワードとの間の差に基づいて、前記選択されたサブグループ内の前記復号すべきコードワードの位置を決定するための手段と、
    前記選択されたサブグループが存在する前記グループに基づいて、前記復号すべきコードワードによって表される前記値の重さを決定するための手段と、
    前記選択されたサブグループが前記グループの前記第1のサブグループであるか、前記第2のサブグループであるかに基づいて、前記選択されたサブグループが存在する前記グループ内の前記コードワードの位置を決定するための手段と、
    前記値のうちの1つ、前記復号すべきコードワードによって表される前記値の重さ、および前記選択されたサブグループが存在する前記グループ内の前記コードワードの位置を選択するための手段と、
    前記選択された値により前記復号すべきコードワードを復号するための手段と
    を備える請求項47に記載の装置。
  49. 前記基本コードワードのそれぞれが、前記それぞれのサブグループ内の辞書式に最小のコードワードである請求項44に記載の装置。
  50. 前記コードワードによって表される前記値が、映像データ、画像データ、言語データ、または音声データのうちの少なくとも1つを表す請求項44に記載の装置。
  51. プロセッサに、
    コード構造について、
    可変長のコードワードを指定するコーディングツリーにおけるコードワードのグループであって、前記グループのそれぞれが、同じ重さを有する値を表すコードワードを含み、前記グループのそれぞれにおける前記コードワードが、前記コードワードによって表される前記値に対して辞書式に順序付けられるコードワードのグループと、
    前記グループのそれぞれの中のコードワードの第1および第2のサブグループであって、前記第1のサブグループが第1の長さを有するコードワードを含み、前記第2のサブグループが前記第1の長さとは異なる第2の長さを有するコードワードを含むコードワードの第1および第2のサブグループとを定義させ、
    前記サブグループのそれぞれの基本コードワード、前記グループのそれぞれの中のコードワードの位置、前記第1のサブグループのそれぞれの中のコードワードの数、および前記サブグループのそれぞれの中の前記コードワードの長さを使用して、可変長のコーディングを実行させ、
    メモリへの格納、装置への送信、またはユーザへの提示のうちの少なくとも1つのために、前記可変長のコーディングの結果を生成することの
    ための命令を備える有形のコンピュータ可読媒体。
  52. 前記命令が前記プロセッサに前記値のうちの少なくとも一部を符号化させ、前記可変長のコーディングの前記結果が1つまたは複数のコードワードである請求項51に記載のコンピュータ可読媒体。
  53. 前記命令が、前記プロセッサに、
    前記符号化すべき値の重さに基づいて、前記グループのうちの1つを選択させ、
    前記選択されたグループの前記第1のサブグループ内の前記コードワードの数に対する前記符号化すべき値の辞書式位置に基づいて、前記サブグループのうちの1つを選択させ、
    前記選択されたサブグループの前記基本コードワードおよび前記符号化すべき値の前記辞書式位置に基づいて、前記選択されたサブグループ内の前記コードワードのうちの1つを選択させ、
    前記選択されたコードワードにより前記符号化すべき値を符号化させる
    請求項52に記載のコンピュータ可読媒体。
  54. 前記命令が前記プロセッサに前記コードワードのうちの少なくとも一部を復号させ、前記可変長のコーディングの前記結果が1つまたは複数の値である請求項51に記載のコンピュータ可読媒体。
  55. 前記命令が、前記プロセッサに、
    コーディングツリーのトップダウン検索で、前記復号すべきコードワード以下の基本コードワードを含む前記サブグループのうちの第1のものを選択させ、
    前記復号すべきコードワードと、前記選択されたサブグループの前記基本コードワードとの間の差に基づいて、前記選択されたサブグループ内の前記復号すべきコードワードの位置を決定させ、
    前記選択されたサブグループが存在する前記グループに基づいて、前記復号すべきコードワードによって表される前記値の重さを決定させ、
    前記選択されたサブグループが前記グループの前記第1のサブグループであるか、前記第2のサブグループであるかに基づいて、前記選択されたサブグループが存在する前記グループ内の前記コードワードの位置を決定させ、
    前記値のうちの1つ、前記復号すべきコードワードによって表される前記値の重さ、および前記選択されたサブグループが存在する前記グループ内の前記コードワードの位置を選択させ、
    前記選択された値により前記復号すべきコードワードを復号させる
    請求項54に記載のコンピュータ可読媒体。
  56. 前記基本コードワードのそれぞれが、前記それぞれのサブグループ内の辞書式に最小のコードワードである請求項51に記載のコンピュータ可読媒体。
  57. 前記コードワードによって表される前記値が、映像データ、画像データ、言語データ、または音声データのうちの少なくとも1つを表す請求項51に記載のコンピュータ可読媒体。
  58. 可変長のコードワードを指定するコーディングツリーにおけるコードワードのグループであって、前記グループのそれぞれが、同じ重さを有する値を表すコードワードを含み、前記グループのそれぞれにおける前記コードワードが、前記コードワードによって表される前記値に対して辞書式に順序付けられるコードワードのグループと、
    前記グループのそれぞれの中のコードワードの第1および第2のサブグループであって、前記第1のサブグループが第1の長さを有するコードワードを含み、前記第2のサブグループが前記第1の長さとは異なる第2の長さを有するコードワードを含むコードワードの第1および第2のサブグループと
    を定義するコード構造について、
    前記サブグループのそれぞれの基本コードワード、前記グループのそれぞれの中のコードワードの位置、前記第1のサブグループのそれぞれの中のコードワードの数、および前記サブグループのそれぞれの中の前記コードワードの長さを使用して、可変長のコーディングを実行し、メモリへの格納、装置への送信、またはユーザへの提示のうちの少なくとも1つのために、前記可変長のコーディングの結果を生成するよう構成されているプロセッサ
    を備える装置。
  59. 前記プロセッサが前記値の少なくとも一部を符号化し、前記可変長のコーディングの前記結果が1つまたは複数のコードワードである請求項58に記載の装置。
  60. 前記プロセッサが、前記符号化すべき値の重さに基づいて、前記グループのうちの1つを選択し、前記選択されたグループの前記第1のサブグループ内の前記コードワードの数に対する前記符号化すべき値の辞書式位置に基づいて、前記サブグループのうちの1つを選択し、前記選択されたサブグループの前記基本コードワードおよび前記符号化すべき値の前記辞書式位置に基づいて、前記選択されたサブグループ内の前記コードワードのうちの1つを選択し、前記選択されたコードワードにより前記符号化すべき値を符号化する請求項59に記載の装置。
  61. 前記プロセッサが前記コードワードの少なくとも一部を復号し、前記可変長のコーディングの前記結果が1つまたは複数の値である請求項58に記載の装置。
  62. 前記プロセッサが、コーディングツリーのトップダウン検索で、前記復号すべきコードワード以下の基本コードワードを含む前記サブグループのうちの第1のものを選択し、前記復号すべきコードワードと、前記選択されたサブグループの前記基本コードワードとの間の差に基づいて、前記選択されたサブグループ内の前記復号すべきコードワードの位置を決定し、前記選択されたサブグループが存在する前記グループに基づいて、前記復号すべきコードワードによって表される前記値の重さを決定し、前記選択されたサブグループが前記グループの前記第1のサブグループであるか、前記第2のサブグループであるかに基づいて、前記選択されたサブグループが存在する前記グループ内の前記コードワードの位置を決定し、前記値のうちの1つ、前記復号すべきコードワードによって表される前記値の重さ、および前記選択されたサブグループが存在する前記グループ内の前記コードワードの位置を選択し、前記選択された値により前記復号すべきコードワードを復号する請求項61に記載の装置。
  63. 前記基本コードワードのそれぞれが、前記それぞれのサブグループ内の辞書式に最小のコードワードである請求項58に記載の装置。
  64. 前記コードワードによって表される前記値が、映像データ、画像データ、言語データ、または音声データのうちの少なくとも1つを表す請求項58に記載の装置。
  65. コーディングツリーにおけるコードワードのグループであって、前記グループのそれぞれが、同じ重さを有する値を表すコードワードを含み、前記グループのそれぞれにおける前記コードワードが、前記コードワードによって表される前記値に対して辞書式に順序付けられるコードワードのグループと、
    前記グループのそれぞれの中のコードワードの第1および第2のサブグループであって、前記第1のサブグループが第1の長さを有するコードワードを含み、前記第2のサブグループが前記第1の長さとは異なる第2の長さを有するコードワードを含むコードワードの第1および第2のサブグループと
    を定義する可変長のコード構造を使用した、可変長のコーディングのためのデータ構造を備える有形のコンピュータ可読媒体。
  66. 前記データ構造が、前記サブグループのそれぞれの基本コードワード、前記グループのそれぞれの中のコードワードの位置、前記第1のサブグループのそれぞれの中のコードワードの数、および前記サブグループのそれぞれの中の前記コードワードの長さを指定する請求項65に記載のコンピュータ可読媒体。
  67. コーディングツリーにおけるコードワードのグループであって、前記グループのそれぞれが、同じ重さを有する値を表すコードワードを含み、前記グループのそれぞれにおける前記コードワードが、前記コードワードによって表される前記値に対して辞書式に順序付けられるコードワードのグループと、
    前記グループのそれぞれの中のコードワードの第1および第2のサブグループであって、前記第1のサブグループが第1の長さを有するコードワードを含み、前記第2のサブグループが前記第1の長さとは異なる第2の長さを有するコードワードを含むコードワードの第1および第2のサブグループと
    を定義するコード構造に従って可変長のコーディングを実行するよう構成されているプロセッサであって、
    メモリへの格納、装置への送信、またはユーザへの提示のうちの少なくとも1つのために、前記可変長のコーディングの結果を生成するよう構成されているプロセッサ
    を備える無線通信装置ハンドセット。
  68. 前記プロセッサが、前記サブグループのそれぞれの基本コードワード、前記グループのそれぞれの中のコードワードの位置、前記第1のサブグループのそれぞれの中のコードワードの数、および前記サブグループのそれぞれの中の前記コードワードの長さを指定するデータ構造にアクセスし、前記データ構造を使用して、前記可変長のコーディングを実行する請求項67に記載のハンドセット。
  69. メモリをさらに備え、前記データ構造が前記メモリに格納され、前記メモリが、前記ハンドセットにおける映像符号器、画像符号器、音声符号器、言語符号器、映像復号器、画像復号器、および音声復号器、または言語復号器のうちの1つに関連付けられている請求項68に記載のハンドセット。
  70. 前記基本コードワードのそれぞれが、前記それぞれのサブグループ内の辞書式に最小のコードワードである請求項68に記載のハンドセット。
  71. 前記プロセッサが、前記可変長のコーディングを実行するために、前記データ構造を使用して、前記値のうちの1つを符号化し、前記プロセッサが、前記符号化すべき値の重さに基づいて、前記グループのうちの1つを選択し、前記選択されたグループの前記第1のサブグループ内の前記コードワードの数に対する前記符号化すべき値の辞書式位置に基づいて、前記サブグループのうちの1つを選択し、前記選択されたサブグループの前記基本コードワードおよび前記符号化すべき値の前記辞書式位置に基づいて、前記選択されたサブグループ内の前記コードワードのうちの1つを選択し、前記選択されたコードワードにより前記符号化すべき値を符号化する請求項68に記載のハンドセット。
  72. 前記符号化された値を復号器に送信する無線送信機をさらに備える請求項71に記載のハンドセット。
  73. 前記プロセッサが、前記可変長のコーディングを実行するために、前記データ構造を使用して、前記コードワードのうちの1つを復号し、前記プロセッサが、コーディングツリーのトップダウン検索で、前記復号すべきコードワード以下の基本コードワードを含む前記サブグループのうちの第1のものを選択し、前記復号すべきコードワードと、前記選択されたサブグループの前記基本コードワードとの間の差に基づいて、前記選択されたサブグループ内の前記復号すべきコードワードの位置を決定し、前記選択されたサブグループが存在する前記グループに基づいて、前記復号すべきコードワードによって表される前記値の重さを決定し、前記選択されたサブグループが前記グループの前記第1のサブグループであるか、前記第2のサブグループであるかに基づいて、前記選択されたサブグループが存在する前記グループ内の前記コードワードの位置を決定し、前記値のうちの1つ、前記復号すべきコードワードによって表される前記値の重さ、および前記選択されたサブグループが存在する前記グループ内の前記コードワードの位置を選択し、前記選択された値により前記復号すべきコードワードを復号する請求項68に記載のハンドセット。
  74. 前記選択された値に少なくとも一部分基づいて、ユーザに出力を提示する出力装置をさらに備える請求項73に記載のハンドセット。
  75. 前記コードワードによって表される前記値が、映像データ、画像データ、言語データ、または音声データのうちの少なくとも1つを表す請求項67に記載のハンドセット。
  76. コーディングツリーにおけるコードワードのグループであって、前記グループのそれぞれが、同じ重さを有する値を表すコードワードを含み、前記グループのそれぞれにおける前記コードワードが、前記コードワードによって表される前記値に対して辞書式に順序付けられるコードワードのグループと、
    前記グループのそれぞれの中のコードワードの第1および第2のサブグループであって、前記第1のサブグループが第1の長さを有するコードワードを含み、前記第2のサブグループが前記第1の長さとは異なる第2の長さを有するコードワードを含むコードワードの第1および第2のサブグループと
    を定義するコード構造に従って可変長のコーディングを実行するよう構成されているプロセッサであって、
    メモリへの格納、装置への送信、またはユーザへの提示のうちの少なくとも1つのために、前記可変長のコーディングの結果を生成するよう構成されているプロセッサ
    を備える集積回路装置。
  77. 前記プロセッサが、前記サブグループのそれぞれの基本コードワード、前記グループのそれぞれの中のコードワードの位置、前記第1のサブグループのそれぞれの中のコードワードの数、および前記サブグループのそれぞれの中の前記コードワードの長さを指定するデータ構造にアクセスし、前記データ構造を使用して、前記可変長のコーディングを実行する請求項76に記載の装置。
  78. メモリをさらに備え、前記データ構造が前記メモリに格納され、前記メモリが、前記ハンドセットにおける映像符号器、画像符号器、音声符号器、言語符号器、映像復号器、画像復号器、および音声復号器、または言語復号器のうちの1つに関連付けられている請求項77に記載の装置。
  79. 前記基本コードワードのそれぞれが、前記それぞれのサブグループ内の辞書式に最小のコードワードである請求項77に記載の装置。
  80. 前記プロセッサが、前記可変長のコーディングを実行するために、前記データ構造を使用して、前記値のうちの1つを符号化し、前記プロセッサが、前記符号化すべき値の重さに基づいて、前記グループのうちの1つを選択し、前記選択されたグループの前記第1のサブグループ内の前記コードワードの数に対する前記符号化すべき値の辞書式位置に基づいて、前記サブグループのうちの1つを選択し、前記選択されたサブグループの前記基本コードワードおよび前記符号化すべき値の前記辞書式位置に基づいて、前記選択されたサブグループ内の前記コードワードのうちの1つを選択し、前記選択されたコードワードにより前記符号化すべき値を符号化する請求項77に記載の装置。
  81. 前記プロセッサが、前記可変長のコーディングを実行するために、前記データ構造を使用して、前記コードワードのうちの1つを復号し、前記プロセッサが、コーディングツリーのトップダウン検索で、前記復号すべきコードワード以下の基本コードワードを含む前記サブグループのうちの第1のものを選択し、前記復号すべきコードワードと、前記選択されたサブグループの前記基本コードワードとの間の差に基づいて、前記選択されたサブグループ内の前記復号すべきコードワードの位置を決定し、前記選択されたサブグループが存在する前記グループに基づいて、前記復号すべきコードワードによって表される前記値の重さを決定し、前記選択されたサブグループが前記グループの前記第1のサブグループであるか、前記第2のサブグループであるかに基づいて、前記選択されたサブグループが存在する前記グループ内の前記コードワードの位置を決定し、前記値のうちの1つ、前記復号すべきコードワードによって表される前記値の重さ、および前記選択されたサブグループが存在する前記グループ内の前記コードワードの位置を選択し、前記選択された値により前記復号すべきコードワードを復号する
    請求項77に記載の装置。
  82. 前記コードワードによって表される前記値が、映像データ、画像データ、言語データ、または音声データのうちの少なくとも1つを表す請求項76に記載の装置。
JP2009537330A 2006-11-14 2007-11-14 メモリ効率の良い(memoryefficient)適応形ブロックコーディング Expired - Fee Related JP4897888B2 (ja)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US86582706P 2006-11-14 2006-11-14
US60/865,827 2006-11-14
US86708106P 2006-11-22 2006-11-22
US60/867,081 2006-11-22
US11/840,406 2007-08-17
US11/840,406 US7573407B2 (en) 2006-11-14 2007-08-17 Memory efficient adaptive block coding
PCT/US2007/084682 WO2008061143A2 (en) 2006-11-14 2007-11-14 Memory efficient adaptive block coding

Publications (3)

Publication Number Publication Date
JP2010509895A JP2010509895A (ja) 2010-03-25
JP2010509895A5 true JP2010509895A5 (ja) 2011-08-18
JP4897888B2 JP4897888B2 (ja) 2012-03-14

Family

ID=39267977

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009537330A Expired - Fee Related JP4897888B2 (ja) 2006-11-14 2007-11-14 メモリ効率の良い(memoryefficient)適応形ブロックコーディング

Country Status (11)

Country Link
US (1) US7573407B2 (ja)
EP (1) EP2095511B1 (ja)
JP (1) JP4897888B2 (ja)
KR (1) KR101095335B1 (ja)
CN (1) CN101542911B (ja)
AT (1) ATE485634T1 (ja)
BR (1) BRPI0718628A2 (ja)
CA (1) CA2668229A1 (ja)
DE (1) DE602007010034D1 (ja)
TW (1) TWI353120B (ja)
WO (1) WO2008061143A2 (ja)

Families Citing this family (64)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8120515B2 (en) * 2006-09-29 2012-02-21 Agiledelta, Inc. Knowledge based encoding of data with multiplexing to facilitate compression
US8189683B2 (en) * 2006-11-28 2012-05-29 General Instrument Corporation Method and system for providing single cycle context weight update leveraging context address look ahead
US8411734B2 (en) 2007-02-06 2013-04-02 Microsoft Corporation Scalable multi-thread video decoding
JP2008227946A (ja) * 2007-03-13 2008-09-25 Toshiba Corp 画像復号装置
US8213499B2 (en) * 2007-04-04 2012-07-03 General Instrument Corporation Method and apparatus for context address generation for motion vectors and coefficients
US20080247459A1 (en) * 2007-04-04 2008-10-09 General Instrument Corporation Method and System for Providing Content Adaptive Binary Arithmetic Coder Output Bit Counting
US9648325B2 (en) 2007-06-30 2017-05-09 Microsoft Technology Licensing, Llc Video decoding implementations for a graphics processing unit
US8228991B2 (en) * 2007-09-20 2012-07-24 Harmonic Inc. System and method for adaptive video compression motion compensation
US8106797B2 (en) * 2007-11-30 2012-01-31 Comtech Ef Data Corporation Assigning codes to and repairing Huffman trees
US7663512B2 (en) * 2008-07-21 2010-02-16 Hon Hai Precision Industry Co., Ltd. Decoder and method for decoding a message using an arbitrary-side growing Huffman tree
WO2010027324A1 (en) * 2008-09-08 2010-03-11 Scalado Ab Method for indexing images and for reading an index of an image
US8671327B2 (en) 2008-09-28 2014-03-11 Sandisk Technologies Inc. Method and system for adaptive coding in flash memories
JP5537551B2 (ja) * 2008-09-28 2014-07-02 ラマト アット テル アビブ ユニバーシティ リミテッド フラッシュメモリにおける適応符号化用の方法およびシステム
US8503527B2 (en) 2008-10-03 2013-08-06 Qualcomm Incorporated Video coding with large macroblocks
US8335256B2 (en) * 2008-11-14 2012-12-18 General Instrument Corporation Motion compensation in video coding
KR101118089B1 (ko) * 2008-12-10 2012-03-09 서울대학교산학협력단 가변장 복호화 장치 및 방법
US9076239B2 (en) 2009-04-30 2015-07-07 Stmicroelectronics S.R.L. Method and systems for thumbnail generation, and corresponding computer program product
US9628794B2 (en) 2009-06-18 2017-04-18 Kabushiki Kaisha Toshiba Video encoding apparatus and a video decoding apparatus
WO2010146696A1 (ja) 2009-06-18 2010-12-23 株式会社 東芝 動画像符号化装置及び動画像復号化装置
KR101675118B1 (ko) * 2010-01-14 2016-11-10 삼성전자 주식회사 스킵 및 분할 순서를 고려한 비디오 부호화 방법과 그 장치, 및 비디오 복호화 방법과 그 장치
US7990297B1 (en) * 2010-02-26 2011-08-02 Research In Motion Limited Encoding and decoding methods and devices employing dual codesets
US8063801B2 (en) * 2010-02-26 2011-11-22 Research In Motion Limited Encoding and decoding methods and devices using a secondary codeword indicator
US8233534B2 (en) * 2010-04-09 2012-07-31 Newport Media, Inc. Frame buffer compression and memory allocation in a video decoder
CA2799763A1 (en) 2010-07-13 2012-01-19 Research In Motion Limited Methods and devices for data compression using context-based coding order
WO2012019297A1 (en) 2010-07-28 2012-02-16 Research In Motion Limited Method and device for compression of binary sequences by grouping multiple symbols
US8879634B2 (en) 2010-08-13 2014-11-04 Qualcomm Incorporated Coding blocks of data using one-to-one codes
US8885704B2 (en) * 2010-10-01 2014-11-11 Qualcomm Incorporated Coding prediction modes in video coding
JP2012094959A (ja) * 2010-10-25 2012-05-17 Sony Corp 画像処理装置と画像処理方法およびプログラム
US9172963B2 (en) * 2010-11-01 2015-10-27 Qualcomm Incorporated Joint coding of syntax elements for video coding
US8885729B2 (en) 2010-12-13 2014-11-11 Microsoft Corporation Low-latency video decoding
US9706214B2 (en) 2010-12-24 2017-07-11 Microsoft Technology Licensing, Llc Image and video decoding implementations
US8755620B2 (en) 2011-01-12 2014-06-17 Panasonic Corporation Image coding method, image decoding method, image coding apparatus, image decoding apparatus, and image coding and decoding apparatus for performing arithmetic coding and/or arithmetic decoding
US8687904B2 (en) 2011-01-14 2014-04-01 Panasonic Corporation Image coding method, image coding apparatus, image decoding method, image decoding apparatus, and image coding and decoding apparatus which include arithmetic coding or arithmetic decoding
KR101955374B1 (ko) * 2011-06-30 2019-05-31 에스케이 텔레콤주식회사 고속 코딩 단위(Coding Unit) 모드 결정을 통한 부호화/복호화 방법 및 장치
TWI587693B (zh) 2011-06-30 2017-06-11 微軟技術授權有限責任公司 用於減少視訊編碼及解碼中之延遲的方法、系統及電腦可讀取媒體
KR20140034292A (ko) * 2011-07-01 2014-03-19 모토로라 모빌리티 엘엘씨 움직임 벡터 예측 설계 간소화
US9338456B2 (en) * 2011-07-11 2016-05-10 Qualcomm Incorporated Coding syntax elements using VLC codewords
US8731067B2 (en) 2011-08-31 2014-05-20 Microsoft Corporation Memory management for video decoding
KR101616010B1 (ko) 2011-11-04 2016-05-17 구글 테크놀로지 홀딩스 엘엘씨 비균일 움직임 벡터 그리드에 대한 움직임 벡터 스케일링
US9819949B2 (en) 2011-12-16 2017-11-14 Microsoft Technology Licensing, Llc Hardware-accelerated decoding of scalable video bitstreams
WO2013162283A1 (ko) * 2012-04-24 2013-10-31 엘지전자 주식회사 비디오 신호 처리 방법 및 장치
US9172970B1 (en) 2012-05-29 2015-10-27 Google Inc. Inter frame candidate selection for a video encoder
US11317101B2 (en) 2012-06-12 2022-04-26 Google Inc. Inter frame candidate selection for a video encoder
US9491461B2 (en) * 2012-09-27 2016-11-08 Qualcomm Incorporated Scalable extensions to HEVC and temporal motion vector prediction
US9860558B2 (en) * 2012-09-28 2018-01-02 Intel Corporation Inter-layer intra mode prediction
KR102445274B1 (ko) * 2012-10-01 2022-09-20 지이 비디오 컴프레션, 엘엘씨 향상 레이어에서 변환 계수 블록들의 서브블록-기반 코딩을 이용한 스케일러블 비디오 코딩
US9485515B2 (en) 2013-08-23 2016-11-01 Google Inc. Video coding using reference motion vectors
US9503746B2 (en) 2012-10-08 2016-11-22 Google Inc. Determine reference motion vectors
JP5872513B2 (ja) * 2013-09-17 2016-03-01 株式会社東芝 符号化装置、復号化装置およびデータ処理システム
US9337862B2 (en) * 2014-06-09 2016-05-10 Tidal Systems, Inc. VLSI efficient Huffman encoding apparatus and method
US20160092492A1 (en) * 2014-09-27 2016-03-31 Qualcomm Incorporated Sharing initial dictionaries and huffman trees between multiple compressed blocks in lz-based compression algorithms
WO2016074147A1 (en) 2014-11-11 2016-05-19 Mediatek Singapore Pte. Ltd. Separated coding tree for luma and chroma
US10873437B2 (en) * 2016-08-11 2020-12-22 Sharp Kabushiki Kaisha Systems and methods for frequency-division duplex transmission time interval operation
US10547869B2 (en) 2017-12-08 2020-01-28 Google Llc Template-based entropy coding of quantized transform coefficients
US10609421B2 (en) 2018-07-12 2020-03-31 Google Llc Context derivation for coefficient coding
RU2701711C1 (ru) * 2019-01-09 2019-09-30 федеральное государственное автономное образовательное учреждение высшего образования "Национальный исследовательский ядерный университет МИФИ" (НИЯУ МИФИ) Устройство для упаковки данных
US11275568B2 (en) 2019-01-14 2022-03-15 Microsoft Technology Licensing, Llc Generating a synchronous digital circuit from a source code construct defining a function call
US11093682B2 (en) 2019-01-14 2021-08-17 Microsoft Technology Licensing, Llc Language and compiler that generate synchronous digital circuits that maintain thread execution order
US11144286B2 (en) 2019-01-14 2021-10-12 Microsoft Technology Licensing, Llc Generating synchronous digital circuits from source code constructs that map to circuit implementations
US11106437B2 (en) * 2019-01-14 2021-08-31 Microsoft Technology Licensing, Llc Lookup table optimization for programming languages that target synchronous digital circuits
US11113176B2 (en) 2019-01-14 2021-09-07 Microsoft Technology Licensing, Llc Generating a debugging network for a synchronous digital circuit during compilation of program source code
US11362671B2 (en) * 2019-03-25 2022-06-14 Ariel Scientific Innovations Ltd. Systems and methods of data compression
TWI714184B (zh) * 2019-07-25 2020-12-21 中華電信股份有限公司 多階層網路樣式比對方法
IL294187A (en) 2019-12-23 2022-08-01 Ariel Scient Innovations Ltd Methods and systems for information compression

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0311883A (ja) * 1989-06-09 1991-01-21 Hitachi Ltd 可変長符号の復号化方式とファクシミリ装置、および静止画像伝送システム
US5226082A (en) * 1992-07-02 1993-07-06 At&T Bell Laboratories Variable length decoder
JP3278297B2 (ja) * 1994-07-20 2002-04-30 富士通株式会社 データ圧縮方法及びデータ復元方法並びにデータ圧縮装置及びデータ復元装置
JP3220598B2 (ja) * 1994-08-31 2001-10-22 三菱電機株式会社 可変長符号テーブルおよび可変長符号化装置
US5696507A (en) 1996-05-31 1997-12-09 Daewoo Electronics Co., Inc. Method and apparatus for decoding variable length code
US6188797B1 (en) 1997-05-27 2001-02-13 Apple Computer, Inc. Decoder for programmable variable length data
JP2003273746A (ja) * 2002-03-18 2003-09-26 Mitsubishi Electric Corp 可変長符号復号装置

Similar Documents

Publication Publication Date Title
JP4897888B2 (ja) メモリ効率の良い(memoryefficient)適応形ブロックコーディング
JP4897887B2 (ja) 可変長コードのメモリ効率の良いコーディング
JP2010509895A5 (ja)
JP2010509893A5 (ja)
RU2426227C2 (ru) Кодирование кодов переменной длины с эффективным использованием памяти
JP5313362B2 (ja) 可変長固定長コードの高速パーシング
JP2022123096A (ja) エントロピー符号化におけるコンテキスト初期化
US8947273B2 (en) Entropy coding
US7626522B2 (en) Data compression using variable-to-fixed length codes
JP2013528025A (ja) エントロピー符号化
Wang et al. A lossless recompression approach for video streaming transmission