(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-09-01
(45)【発行日】2022-09-09
(54)【発明の名称】デジタルイメージ再圧縮
(51)【国際特許分類】
H04N 19/13 20140101AFI20220902BHJP
H04N 19/14 20140101ALI20220902BHJP
H04N 19/18 20140101ALI20220902BHJP
H04N 19/40 20140101ALI20220902BHJP
【FI】
H04N19/13
H04N19/14
H04N19/18
H04N19/40
【外国語出願】
(21)【出願番号】P 2020114373
(22)【出願日】2020-07-01
(62)【分割の表示】P 2018550540の分割
【原出願日】2017-06-06
【審査請求日】2020-07-21
(32)【優先日】2016-09-15
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2016-09-30
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】509117964
【氏名又は名称】ドロップボックス, インコーポレイテッド
(74)【代理人】
【識別番号】110003281
【氏名又は名称】特許業務法人大塚国際特許事務所
(74)【代理人】
【識別番号】100076428
【氏名又は名称】大塚 康徳
(74)【代理人】
【識別番号】100115071
【氏名又は名称】大塚 康弘
(74)【代理人】
【識別番号】100112508
【氏名又は名称】高柳 司郎
(74)【代理人】
【識別番号】100116894
【氏名又は名称】木村 秀二
(74)【代理人】
【識別番号】100130409
【氏名又は名称】下山 治
(72)【発明者】
【氏名】ホルン, ダニエル
(72)【発明者】
【氏名】エルカバニー, ケン
(72)【発明者】
【氏名】ウィンステイン, ケイス
【審査官】坂東 大五郎
(56)【参考文献】
【文献】Hao Wu et al.,Lossless compression of JPEG coded photo collections,IEEE Transactions on Image Processing,IEEE,2016年06月,vol.25, no.6,pp.2684-2696
(58)【調査した分野】(Int.Cl.,DB名)
H04N 19/00-19/98
H04N 1/41-1/419
(57)【特許請求の範囲】
【請求項1】
元の圧縮イメージを生成するためにさらに圧縮されたイメージを復号する方法であって
離散コサイン変換係数の特定のブロックを識別することと、
前記特定のブロックの上側にある、離散コサイン変換係数の上ブロックを判定することと、
前記特定のブロックの左側にある、離散コサイン変換係数の左ブロックを判定することと、
前記特定のブロックの左上側にある、離散コサイン変換係数の左上ブロックを判定することと、
前記元の圧縮イメージについての複数のサブブロックのAC係数を取得するために、前記さらに圧縮されたイメージのエントロピー符号化されたイメージデータを復号することと、
ここで、前記復号することは、
前記特定のブロックにおける複数のサブブロックAC係数における各サブブロックAC係数ごとに、
前記特定のブロックの各サブブロックのAC係数の位置と前記上ブロック内の同じ位置のサブブロックAC係数の値と、
前記特定のブロックの各サブブロックのAC係数の位置と前記左ブロック内の同じ位置のサブブロックAC係数の値と、
前記特定のブロックの各サブブロックのAC係数の位置と前記左上ブロック内の同じ位置のサブブロックAC係数の値
から推定確率を判定することによって、前記各サブブロックAC係数ごとのエントロピー符号化されたイメージデータを復号することを含み、
取得された前記複数のサブブロックのAC係数に少なくとも部分的に基づいて、
前記元の圧縮イメージの複数のサンプルブロックを生成すること
、
を含む方法。
【請求項2】
前記
元の圧縮イメージをグラフィカルユーザインターフェースに表示することをさらに含む、請求項1に記載の方法。
【請求項3】
前記
元の圧縮イメージをグラフィカルユーザインターフェースのウェブブラウザウィンドウに表示することをさらに含む、請求項1に記載の方法。
【請求項4】
前記複数のサブブロックのAC係数の各サブブロックのAC係数について、前記各サブブロックのAC係数についての前記エントロピー符号化されたイメージデータを復号することは、
前記特定のブロックの各サブブロックのAC係数の位置と前記上ブロック内の同じ位置の前記サブブロックAC係数
の値と、
前記特定のブロックの各サブブロックのAC係数の位置と前記左ブロック内の同じ位置の前記サブブロックAC係数
の値と、
前記特定のブロックの各サブブロックのAC係数の位置と前記左上ブロック内の同じ位置の前記サブブロックAC係数
の値
の平均
値から前記推定確率を判定することによって行われることを特徴とする請求項1に記載の方法。
【請求項5】
前記元の圧縮イメージの複数の左エッジAC係数を取得するため、前記さらに圧縮されたイメージのエントロピー符号化されたイメージデータを復号する
ことと、
ここで、当該復号することは、前記特定のブロックにおける複数の左エッジAC係数の各左エッジAC係数ごとに、
前記左ブロック内における、前記左エッジAC係数と同じ行にある複数のAC係数の値と、
前記特定のブロック内における、前記左エッジAC係数と同じ行にある複数のAC係数の値とから推定確率を決定することで前記各左エッジAC係数のエントロピー符号化されたイメージデータを復号することを含み、
取得された前記複数の左エッジのAC係数に少なくとも部分的に基づく、
前記元の圧縮イメージの複数のサンプルブロックを生成すること
を
更に含むことを特徴とする請求項1に記載の方法。
【請求項6】
前記各左エッジのAC係数と同じ行に存在する、
前記左ブロック内の前記複数のAC係数の各AC係数が、2次元離散コサイン変換係数であり、
前記特定のブロック内の前記複数のAC係数の各AC係数が、2次元離散コサイン変換係数である、
ことを特徴とする請求項5に記載の方法。
【請求項7】
取得された前記複数の左エッジのAC係数の各左エッジのAC係数が、1次元離散コサイン変換係数である、
ことを特徴とする請求項5に記載の方法。
【請求項8】
前記複数の左エッジのAC係数が、複数の離散コサイン変換ブロックからのものである、
ことを特徴とする請求項5に記載の方法。
【請求項9】
前記元の圧縮イメージの複数の上エッジAC係数を取得するため、前記さらに圧縮されたイメージのエントロピー符号化されたイメージデータを復号する
ことと、
ここで、当該復号することは、前記特定のブロックにおける複数の上エッジAC係数の各上エッジAC係数ごとに、
前記上ブロック内における、前記上エッジAC係数と同じ列にある複数のAC係数の値と、
前記特定のブロック内における、前記上エッジAC係数と同じ列にある複数のAC係数の値とから推定確率を決定することで前記各上エッジAC係数のエントロピー符号化されたイメージデータを復号することを含み、
取得された前記複数の上エッジのAC係数に少なくとも部分的に基づく、
前記元の圧縮イメージの複数のサンプルブロックを生成すること
を
更に含むことを特徴とする請求項1に記載の方法。
【請求項10】
前記各上エッジのAC係数と同じ列に存在する、
前記上ブロック内の前記複数のAC係数の各AC係数が、2次元離散コサイン変換係数であり、
前記特定のブロック内の前記複数のAC係数の各AC係数が、2次元離散コサイン変換係数である、
ことを特徴とする請求項9に記載の方法。
【請求項11】
取得された前記複数の上エッジのAC係数の各上エッジのAC係数が、1次元離散コサイン変換係数である、
ことを特徴とする請求項9に記載の方法。
【請求項12】
前記複数の上エッジのAC係数が、複数の離散コサイン変換ブロックからのものである、
ことを特徴とする請求項9に記載の方法。
【請求項13】
前記元の圧縮イメージについての
DC係数を取得するために、前記さらに圧縮されたイメージのエントロピー符号化されたイメージデータを復号すること
と、
ここで、当該復号することは、
前記上ブロックの下2行における複数のサンプル値と、
前記左ブロックの右端2列における複数のサンプル値と、
前記特定のブロックの上2行における複数のサンプル値と、
前記特定のブロックの左端2列における複数のサンプル値とから推定確率を決定することによって行われ、
取得された前記DC係数に少なくとも部分的に基づ
き前記元の圧縮イメージの複数のサンプルブロックを生成すること
をさらに含む、ことを特徴とする請求項1に記載の方法。
【請求項14】
前記複数のDC係数を取得するためにエントロピー符号化されたイメージデータを復号することと、
ここで、当該復号することは、
前記複数のDC係数の各DC係数
ごとに、
前記上ブロックの下2行における前記複数のサンプル値に少なくとも部分的に基づいて第1の複数の画像勾配を計算することと、
前記各DC係数の前記
特定のブロックの上2行における前記複数のサンプル値に少なくとも部分的に基づいて、前記第1の複数の画像勾配の反対方向における、第2の複数の画像勾配を計算することと、
前記左ブロック
の右端2列における前記複数のサンプル値に少なくとも部分的に基づいて第3の複数の画像勾配を計算することと、
前記各DC係数の前記
特定のブロックの左端2列における前記複数のサンプル値に少なくとも部分的に基づいて、前記第3の複数の画像勾配の反対方向における、第4の複数の画像勾配を計算すること
から推定確率を決定することによって、各DC係数についてエントロピー符号化されたイメージデータを復号することを含む、
をさらに含む
ことを特徴とする請求項13に記載の方法。
【請求項15】
前記
元の圧縮イメージはISO/IEC 10918の全ての要件に準拠した形式で圧縮される、
ことを特徴とする請求項1乃至14の何れか一項に記載の方法。
【請求項16】
請求項1乃至15の何れか一項に記載される方法を行うように構成される命令を含む、1つ以上のプロセッサ及び記憶媒体を含むシステムによって実行されるプログラム。
【請求項17】
1つ以上のプロセッサと、
記憶媒体と、
請求項1乃至15の何れか一項に記載される方法を行うように構成される命令を含む、前記記憶媒体に格納され前記1つ以上のプロセッサによって実行されるために構成される、1つ以上のプログラムと、
を含む、システム。
【発明の詳細な説明】
【技術分野】
【0001】
開示の実装は主にイメージ圧縮に関する。開示の実装は特に、イメージ再圧縮の技術に関する。
【背景技術】
【0002】
ここ数十年に亘り、非接続動作を伴う中央ホストネットワークファイルシステムが発展し、数百万ものユーザを担当するようになってきている。これらのサービスは、SugarSync(登録商標)、Dropbox(登録商標)、Box(登録商標)、Google Drive(登録商標)、Microsoft OneDrive(登録商標)、およびAmazon Cloud Drive(登録商標)を含む。
【0003】
経済的には、これらのシステムは典型的には、フラット月次料金の代わりに、または全くの無料で、ユーザに最大ストレージ割り当てを提供する。一方、そのようなシステムを運用するためのコストは保持されるユーザデータの量に比して増大する。したがって、オペレータは、保持されるユーザデータの総量を低減する技術から恩恵を受ける。
【0004】
これらのファイルシステムは急速に巨大化しうる。例えば、上述のサービスのうちのひとつは、現在、おおよそ1エクサバイトのユーザデータを保持し、そのユーザデータのうちのおおよそ40%はベースライン圧縮JPEGイメージからなる。
【0005】
ベースラインジョイントフォトグラフィックエキスパートグループ(JPEG)イメージ圧縮は、離散コサイン変換(DCT)に基づく損失性符号化処理を包含する。その符号化処理では、ソースイメージデータはサンプルの8×8ブロックにグループ化される。各サンプルブロックは、フォワードDCTにより、DCT係数と称される64の値の集合へと変換される。その64の値のなかで、そのような値のうちのひとつはDC係数と称され、他の63の値はAC係数と称される。64の係数のそれぞれは量子化テーブルからの64の対応する値のうちのひとつを用いて量子化される。
【0006】
量子化の後、量子化DC係数および63の量子化AC係数はエントロピー符号化される。それを行う際、以前の量子化DC係数を用いることで、現在の量子化DC係数を予測し、その差分を符号化する。63の量子化AC係数はジグザグシーケンスへと変換される。量子化DCT係数は、次いで、データをさらに圧縮するハフマン符号化手順に渡される。
【0007】
圧縮JPEGイメージデータを復号するために、基本的には符号化ステップの逆が行われる。エントロピー復号器は量子化DCT係数のジグザグシーケンスを復号する。逆量子化の後、DCT係数は逆DCT(IDCT)によりサンプルの8×8ブロックへと変換される。
【0008】
上述のような大規模中央ホストネットワークファイルシステムは、ベースラインJPEGに対してより大きな圧縮効率を提供する技術をありがたいと思うであろう。そのような技術を用いることで、保持されるユーザデータ集合の全サイズを低減し、それにより運用コストを低減することができる。
【0009】
ベースラインJPEGに対して改善されたイメージ圧縮についての方法が存在する。「packJPG」と称されるあるアプローチでは、8×8DCT変換ブロックのEnd-of-Block (EOB)についてセグメント化されたエントロピー符号化が用いられる。EOBは、64の係数のジグザグ順序における最後の非ゼロ係数の後の位置として定義される。packJPGアプローチは、ベースラインJPEGイメージファイルのサイズを平均15%低減できるといわれている。packJPGについてのさらなる情報は、Stirner M.およびSeelmann G著の論文「Improved Redundancy Reduction for JPEG Files」、Picture Coding Symposium by ERASIP, November 2007で利用可能である。
【0010】
packJPGアプローチはベースラインJPEGファイルをファイルサイズを低減するよう再圧縮することができるが、packJPGアプローチは圧縮ピクセル値をグローバルにソートされる順序で再構成することを要求する。したがって、packJPGで圧縮されたイメージを元のベースラインJPEGイメージへ解凍することは、シングルスレッドであり、packJPGで圧縮されたイメージ全体へのアクセスを要求し、元のベースラインJPEG圧縮イメージの最初のバイトが出力可能となる前に、packJPGで圧縮されたイメージをメモリへ復号することを要求する可能性がある。総じて、解凍操作についての最初のバイトへの時間および最後のバイトへの時間は、上述のような大規模中央ホストネットワークファイルシステムのサービスゴールを満たすのには大きすぎる。
【0011】
したがって、必要とされるのは、グローバル操作なしで実装可能な再圧縮技術であり、この場合、再圧縮イメージから元の圧縮イメージを再現するための解凍操作は再圧縮イメージの独立した複数の部分に亘って分散可能であり、各部分のなかでマルチスレッドとなりえ、最初のバイトへの時間は低いであろう。
【図面の簡単な説明】
【0012】
【
図1】本発明のある実装による、イメージ再圧縮システムを示す。
【0013】
【
図2】本発明のある実装による、算術符号化手順で用いられる適応訓練確率モデルの統計ビンを模式的に示す。
【0014】
【
図3】本発明のある実装による、適応訓練算術符号化手順に含まれる高位操作のフローチャートである。
【0015】
【
図4】本発明のある実装による、サンプルブロックを含むイメージ成分を模式的に示す。
【0016】
【
図5】本発明のある実装による、量子化係数ブロック内の量子化係数の四つの一般的なカテゴリを示す。
【0017】
【
図6】本発明のある実装による、カテゴリ化された量子化係数ブロックの非二値シンボルの二値化フォーマットを示す。
【0018】
【
図7】本発明のある実装による、量子化係数のブロック内の量子化係数の二値化順序を示す。
【0019】
【
図8】本発明のある実装による、量子化AC係数の7×7サブブロック内の例示的二値化手順を示す。
【0020】
【
図9】本発明のある実装による、量子化AC係数またはDC誤差項の二値化フォーマットを示す。
【0021】
【
図10】本発明のある実装による、ローカル輝度予測方法に含まれるサンプルを示す。
【0022】
【
図11】本発明のある実装による、ローカル輝度予測方法のフローチャートである。
【0023】
【
図12A】本発明のある実装による、ローカル勾配予測方法に含まれるサンプルを示す。
【0024】
【
図12B】本発明のある実装による、水平エッジ勾配に含まれるサンプルを示す。
【0025】
【
図12C】本発明のある実装による、垂直エッジ勾配に含まれるサンプルを示す。
【0026】
【
図13】本発明のある実装による、ローカル勾配予測方法のフローチャートである。
【0027】
【
図14】本発明の実装が実施され得る基本的な計算デバイスを示すブロック図である。
【0028】
【
図15】計算デバイスの動作を制御するために用いられてもよい基本的なソフトウェアシステムのブロック図である。
【発明を実施するための形態】
【0029】
実装が以下に詳述される。それらの例は添付の図面に示される。以下の詳細な説明では、各種説明される実装の十分な理解を提供するために、多くの特定の詳細が説明される。しかしながら、各種説明される実装がこれらの特定の詳細なしで実施されうることは当業者には明らかであろう。他の例では、よく知られた方法、手順、コンポーネント、回路およびネットワークは、実装の態様を不必要に不明瞭としないために説明されない。
【0030】
明細書および特許請求の範囲を通じて、以下の用語は、文脈が明確にそうでないことを規定しないかぎり、ここで明示的に関連付けられる意味をとる。句「ある実装では」は、本明細書で用いられる場合、必ずしも同じ実装を指さないが、指してもよい。したがって、種々の実装は本発明の範囲や精神から逸脱することなく、容易に組み合わせ可能である。
【0031】
加えて、本明細書で用いられる場合、語「または」は、文脈が明確にそうでないことを規定しないかぎり、包括的「または」オペレータである。語「基づいて」は排他的ではなく、文脈が明確にそうでないことを規定しないかぎり、記載されていない追加的ファクタに基づくことを許す。加えて、明細書を通じて、「a」、「an」および「the」の意味は複数の参照を含む。「in」の意味は「in」および「on」を含む。
用語
【0032】
以下の定義は、以下の議論の理解を助けるために説明を目的として提供され、限定を目的としない。
【0033】
成分:成分はイメージの二次元アレイのひとつとして定義されてもよい。
【0034】
圧縮イメージ(圧縮イメージデータ):圧縮イメージ(または圧縮イメージデータ)は、イメージの符号化表現である。
【0035】
逆量子化:逆量子化は量子化の逆の手順であり、それにより周波数空間係数の表現が復活される。
【0036】
イメージ(イメージデータ):イメージ(またはイメージデータ)は、数値データの二次元アレイの集合、イメージの各成分のひとつの二次元アレイ、およびイメージの成分が1より大きなビット/サンプルを有する場所(連続トーンイメージとして称されることがある)、として定義されてもよい。イメージはカラーイメージまたはグレースケールイメージであってもよい。カラーイメージは複数の成分を有する。グレースケールイメージはただひとつの成分を有する。
【0037】
ジョイントフォトグラフィックエキスパートグループ(JPEG):JPEGは連続トーン静止画のデジタル圧縮および符号化の規格を生成するコミティーの名前である。
【0038】
量子化:量子化は、それにより周波数空間係数が線形スケールされて圧縮が達成される手順である。
【0039】
量子化テーブル:量子化テーブルは、周波数空間係数を量子化および逆量子化するために用いられる64の量子化値の集合である。
【0040】
量子化値:量子化で用いられる整数値。
【0041】
サンプル:サンプルは、成分の二次元アレイのひとつの要素を指す。
概要
【0042】
より大きな圧縮セービングを提供する、以前に圧縮されたイメージの無損失再圧縮のフォーマット知覚およびファイル保存技術が開示される。例えば、再圧縮技術をベースラインJPEGイメージに適用することで、平均23%の圧縮セービングを達成することができる。技術は再圧縮中のグローバル操作を避ける。そのようなグローバル操作は、再圧縮イメージから元の圧縮イメージを再生する際の分散およびマルチスレッド解凍操作を行えなくする。例えば、技術は、全ての圧縮ピクセル値をグローバルにソートされる順序で構成することを要求しない。そのように構成する場合、再圧縮イメージの分散およびマルチスレッド復号を行えなくする。同時に、技術は、分散およびマルチスレッド解凍を容易にしつつ、圧縮セービングを達成可能である。
【0043】
グローバル格納などのグローバル操作を避けつつ追加的圧縮セービングを達成するために、本発明のある実装では、技術は、ベースラインJPEGのハフマン符号化スキームを算術符号化スキームで置換することを含む。算術符号化スキームは、適応的確率モデルを用いることで、元のイメージで前に利用可能なコンテキストに基づいて元のイメージにおけるDCT係数の正確な予測を生成する。特に、確率モデルは統計ビンのアレイを使用する。各統計ビンは、イメージにおける前のコンテキストが与えられたとき、「1」ビット対「0」ビットの確率を追跡する。
【0044】
分散およびマルチスレッド解凍をできなくするソーティングなどのグローバル操作を避けるために、イメージデータをソートする必要なしにイメージにおける長距離に亘る相関をカバーするよう確率モデルを拡張する。本発明のある実装では、確率モデルは721564個の統計ビン(すなわち、確率コンテキスト)を包含する。
イメージ再圧縮システム
【0045】
図1は、本発明のある実装による、イメージ再圧縮システム102を模式的に示す。システム102は、エントロピーデコーダ106と、係数プリプロセッサ108と、適応的訓練算術コーダ110と、を備える。動作中、元のイメージエンコーダ(不図示)によって生成された元の圧縮イメージデータ104はエントロピーデコーダ106に入力され、量子化周波数空間係数のアレイが得られ、それは64の量子化係数(β
1(α
1:1, α
1:2, α
1:3 ... α
1:64) .... β
n(α
n:1, α
n:2, α
n:3 ... α
n:64) )の「ブロック」または集合にグループ化される。量子化周波数空間係数のアレイは例えば離散コサイン変換(DCT)係数のアレイであってもよい。
【0046】
元の圧縮イメージ104は二つのセクション、「ヘッダ」セクションおよび「スキャン」セクション、を含んでもよい。スキャンセクションは量子化係数のアレイを符号化する。64の量子化係数の各ブロックは、一連の周波数空間直交パターンと足し合わさって、イメージのひとつの成分(例えば、輝度または色差)の8×8サンプルブロックを記述する。量子化係数は、これらの周波数空間係数を、量子化テーブルで提示される量子化値で割ったものであってもよい。
【0047】
元の圧縮イメージ104のヘッダは、(イメージ幅やイメージ高さや成分の数やカスタムタグなどの)イメージメタデータや量子化テーブルやハフマンテーブルを含む各種イメージ関連情報を含んでもよい。量子化テーブルは、元のイメージエンコーダによる量子化中に周波数空間係数に適用された量子化値を記録してもよい。ハフマンテーブルは、元の圧縮イメージデータ104のスキャンセクションを含む量子化係数のアレイを無損失な態様で符号化するために、元のイメージエンコーダによるエントロピー符号化中に用いられた可変長符号を記録してもよい。
【0048】
元の圧縮イメージ104は、ISO/IEC 10918-1、その後継、またはその等価物に準拠するベースラインJPEGイメージであってもよい。しかしながら、本発明の実装はベースラインJPEGに限られない。本明細書で開示されるイメージ再圧縮技術は、64の量子化係数のブロックにグループ化される、量子化係数のアレイを有する他のイメージフォーマットに適用可能である。
【0049】
イメージ再圧縮システム102は、元の圧縮イメージ104から、元のイメージをさらに圧縮したさらに圧縮されたイメージ112を生成してもよい。本発明のある実装では、元の圧縮イメージ104がベースラインJPEGイメージである場合、本明細書で開示される再圧縮技術は、ベースラインJPEGに対して平均で約23%の追加的圧縮を達成するよう実装される。
【0050】
本発明のある実装では、元の圧縮イメージ104のヘッダは、LZ1またはLZ2とハフマン符号化との組み合わせを用いるものなどの既知の無損失データ圧縮アルゴリズムを用いて、システム102によって圧縮される。圧縮ヘッダはさらに圧縮されたイメージ112に含まれる。しかしながら、元の圧縮イメージ104からハフマンテーブルを用いて量子化係数を符号化することに代えて、イメージ再圧縮システム102は、適応訓練確率モデルにより駆動される確率を伴う算術コーダ110を用いて、さらに圧縮されたイメージ112の量子化係数を符号化する。特に、確率モデルはイメージの前のセクションから集められたコンテキスト情報によって適応訓練される。
【0051】
エントロピーデコーダ106は、元のイメージエンコーダによって適用されたエントロピー符号化(例えば、ハフマン符号化)を元に戻し、量子化係数のアレイを生成してもよい。上述のように、システム102は、後に詳述されるように、量子化係数を前処理した後、量子化係数に異なるエントロピー符号化スキームを適用してもよい。異なるエントロピー符号化スキームは、イメージの前のセクションから注意深く選ばれたコンテキスト情報と共に供給される適応訓練二値算術符号化手順を含んでもよい。より具体的には、算術符号化手順はカスタム確率モデルを含んでもよく、カスタム確率モデルはイメージの前のセクションから集められたコンテキスト情報によって適応訓練される。算術符号化手順および確率モデルはまた、後に詳述される。
【0052】
後に詳述されるように、係数プリプロセッサ108は、量子化係数のアレイを前処理し、算術コーダ110によるエントロピー符号化用のシンボルを出力してもよい。係数プリプロセッサ108によって行われる前処理は、総じて、量子化係数のアレイを二値シンボルのシーケンスとして二値化することを含んでもよく、そのシーケンスは次いで算術コーダ110に入力される。係数プリプロセッサ108によって行われる前処理はまた、総じて、算術コーダ110によって用いられる確率モデルを適応的に訓練するのに用いられるコンテキスト情報を、前のセクションイメージから集めることを含んでもよい。
例示的アプリケーション
【0053】
イメージ再圧縮システム102のいくつかの役に立つアプリケーションがある。ある実装では、イメージ再圧縮システム102は、さらに圧縮されたイメージ112の格納または伝送の前に、元の圧縮イメージ104をさらに圧縮するために用いられる。そうすることで、そうでなければより大きな元の圧縮イメージ104を送信することによって消費されていたであろうネットワークリソースを、代わりにさらに圧縮されたイメージ112を送信することで、節約することができる。同様に、そうでなければより大きな元の圧縮イメージ104を格納することによって消費されていたであろうストレージリソースを、代わりにさらに圧縮されたイメージ112を格納することで、節約することができる。基本的にイメージ再圧縮システム102の逆を行うイメージ解凍システムは、さらに圧縮されたイメージ112から元の圧縮イメージ104を再現するために用いられてもよい。
【0054】
中央ホストネットワークファイルシステムアプリケーション
ある実装では、イメージ再圧縮システム102およびシステム102によって適用された再圧縮を基本的に逆にする対応するイメージ解凍システムは、(ホストの)ユーザのデジタル写真やデジタルイメージを保持する中央ホストネットワークファイルシステムによって、それらのデジタル写真やデジタルイメージを保持するのに必要なデータストレージスペースの量を低減するために、用いられる。ある実装では、元の圧縮イメージ104は、例えば、ユーザの携帯電話によって取得されオンラインサービスにアップロードされたデジタル写真であってもよい。元の圧縮イメージ104を受信した後、イメージ再圧縮システム102は、さらに圧縮されたイメージ112を生成するために用いられてもよく、その後、元の圧縮イメージデータ104は廃棄されるかアーカイブされてもよい。ユーザがネットワークファイルシステムに元の圧縮イメージ104を要求すると、イメージ解凍システムは、以前に生成され格納されているさらに圧縮されたイメージ112から、要求された元の圧縮イメージ104を再生するために用いられてもよい。さらに圧縮されたイメージ112を格納した後、ユーザが元の圧縮イメージ104をダウンロードすることを要求する前、さらに圧縮されたイメージ112のみが保持されて元の圧縮イメージ104は保持されず、これによりネットワークファイルシステムによって消費されるデータストレージリソースを節約することができる。本明細書で開示される再圧縮技術を実装することによって、ネットワークファイルシステムによって必要とされるデータストレージリソースの量のかなりの低減が実現可能である。
分散およびマルチスレッド解凍
【0055】
ある実装では、イメージ再圧縮システム102および対応するイメージ解凍システムは、バックエンドサーバのクラスタで実行される。ある実装のイメージ解凍システムは、さらに圧縮されたイメージ112のリアルタイム分散およびマルチスレッド解凍を行うよう構成されてもよい。解凍はさらに圧縮されたイメージ112のセグメントに亘って分散可能であってもよい。セグメントは複数のバックエンドサーバに亘って分散してもよい。各セグメントは、さらに圧縮されたイメージ112の一部を、例えば4メガバイトなどの最大セグメントサイズまで、保持してもよい。イメージ解凍システムは、他のセグメントへのアクセスなしに独立に各セグメントを解凍するよう構成される。
【0056】
元の圧縮イメージ102のセグメントは、クライアントによって(例えば、インターネット接続を介して)、個別にそれぞれ独立して要求されてもよい。元の圧縮イメージ102のセグメントが要求されたとき、要求されたセグメントのストリーミングをできる限り早く、かつ、クライアントのインターネット接続の帯域幅を十分に利用するネットワーク転送レート(例えば、100メガビット/秒以上)で、開始するために、さらに圧縮されたイメージ112の対応するセグメントの解凍はマルチスレッド化されてもよい。特に、各スレッドは、元の圧縮イメージ102の要求されたセグメントの一部を、さらに圧縮されたイメージ112の対応するセグメントの一部から、生成してもよい。次いで、複数のスレッドによって生成された要求されたセグメントの一部はつなぎ合わされて元の圧縮イメージ102の要求されたセグメントが生成される。
パーソナルコンピューティングデバイスアプリケーション
【0057】
ある潜在的な実装では、イメージ再圧縮システム102および対応するイメージ解凍システムは、同様に、クライアント計算デバイスまたはパーソナルコンピューティングデバイスで用いられてもよく、同様に、そのデバイスでの格納のために、または、他のデバイスへの送信のために、元の圧縮イメージ104を対応するさらに圧縮されたイメージ112へ圧縮する。例えば、カメラ装備可搬計算デバイスのアプリケーション(例えば、ウェブブラウザまたはモバイルアプリケーション)は、イメージ再圧縮システム102を用いることで、可搬計算デバイスのカメラモジュールによって生成される元の圧縮イメージ104をさらに圧縮し、元の圧縮イメージ104をデバイスに格納する代わりに対応するさらに圧縮されたイメージ112をデバイスに格納してもよい。これは、可搬計算デバイスの貴重なデータストレージリソースを節約する。必要であれば、アプリケーションは対応するイメージ解凍システムを用いることで、デバイスに保持されるさらに圧縮されたイメージ112から元の圧縮イメージ104を復活することができる。
ウェブブラウザアプリケーション
【0058】
ある実装では、イメージ解凍システムは、JAVASCRIPTなどのクライアント側ブラウザ支援スクリプト言語で実装されることで、さらに圧縮されたイメージ112を復号するよう構成されていないウェブブラウザにおける、さらに圧縮されたイメージ112のための後方互換サポートを提供してもよい。ある実装では、サーバは、クライアントウェブブラウザに(例えば、ウェブページの一部として)、イメージ解凍システムを実現するスクリプト言語インストラクションとさらに圧縮されたイメージ112とを送信してもよい。クライアントウェブブラウザは、次いで、スクリプト言語インストラクションを実行することによって、さらに圧縮されたイメージ112から、クライアントウェブブラウザが解凍可能な元の圧縮イメージ104(例えば、ベースラインJPEGイメージ)を取得することができる。クライアントウェブブラウザは、次いで、元の圧縮イメージ104を解凍することで、ビデオディスプレイに表示可能なイメージを取得してもよい。
他のアプリケーション考慮
【0059】
上述のイメージ再圧縮システム102は、本発明のいくつかのシステムの実装を説明する目的で提示される。しかしながら、本発明は、システムやシステム構成のいずれにも限定されない。イメージ再圧縮システムやイメージ解凍システムは必ずしも本発明であるとはかぎらず、議論のフレームワークを提供するために用いられる。代わりに、本発明は、本明細書で詳述される本発明の手法をサポート可能な任意のタイプのシステムアーキテクチャや処理環境において実装されてもよい。
【0060】
図1では、明確な例を提供するために、種々の符号付き箱を用いることで、ソフトウエアやハードウエアやそれらの組み合わせで行われる関連動作の集合を表している。例えば、係数プリプロセッサ108と付されている箱は、算術符号化のために量子化係数のアレイを前処理する際の本明細書で開示される動作を表すために用いられる。しかしながら、符号付き箱は、手元の実装におけるソフトウエア的および/またはハードウエア的構造直接対応物を有しても、有さなくてもよい。例えば、手元の実装で係数プリプロセッサであると構成的に考えられているものは、本明細書において、エントロピーデコーダ106および/または算術コーダ110によって行われるものとして説明される動作のうちのいくつかを行ってもよいし、および/またはその逆もまたしかりである。
算術符号化
【0061】
算術符号化は無損失データ圧縮の技術である。算術符号化では、一般に、二値シンボルのデータ流全体が、0と1との間の数直線上の単一の連続範囲として表される。その範囲内の点を符号化するために要求される二値小数桁は、データ流全体を記述することができる。
【0062】
データ流を算術符号化するためのひとつの可能な技術は、単純に、符号化される各二値シンボルごとに再帰的に数直線を二等分してもよく、このとき、下側半分は一方の二値シンボルを表し、上側半分は他方の二値シンボルを表す。この可能な技術は、圧縮を生じさせない、最終的な指数的数直線範囲を要求してもよい。より単純でない技術は、数直線を等しくない範囲に分割してもよく、そこでは、符号化対象のより蓋然性の高い入来二値シンボルに対して、前もってより大きな範囲が選択されてもよい。この技術は、総じて、適応二値算術符号化として知られている。
【0063】
適応二値算術符号化により、生じうる種々のイメージ状況について、いくつかの意味論的に知覚される確率モデルが維持されてもよい。符号化対象の入来二値シンボルに対する数直線範囲は、次いで、確率モデルに基づいて選択されてもよい。選択される範囲は既に二値化されたイメージフィーチャに依存してもよい。そのようなフィーチャは、例えば、ブロックの輝度に対する以前の誤差訂正項の大きさを含んでもよい。確率は、観測された過去のフィーチャの集合によってインデクス化されたメモリ位置において追跡されてもよい。例えば、以前に二値化された誤差項の大きさは、以下のカテゴリのうちのひとつにカテゴライズされてもよい:0、小さい正の値、小さい負の値、大きな正の値、大きな負の値。輝度誤差訂正を符号化する各新たな二値シンボルに出会うと、五つのメモリ位置のうちのひとつが選択され、各状況の統計が別個に追跡されてもよい。現在選択されているメモリ位置は、符号化対象の現在のおよび入来二値シンボルについて数直線を分割するやり方の選択を駆動してもよい。
適応的訓練確率モデル
【0064】
本明細書で開示される発明技術は、適応的訓練確率モデルを用いる算術コーダを包含する。確率モデルは、本明細書において「統計ビン」または単に短く「ビン」と称される、メモリにおける位置を含んでもよい。本発明のある実装では、確率モデルは721,564個の統計ビンからなる。各統計ビンは、ブロック内の量子化係数の異なるタイプについて、種々の状況(すなわち、確率コンテキスト)における確率を追跡する。
【0065】
図2は、メモリ内の統計ビン200を模式的に示す。ビン200は、例えば、イメージ内の721,564個の異なる状況のうちのひとつを表してもよい。ビン200は、その状況で発生した0シンボルの数を追跡する8ビット「0」カウンタ202と、その状況で発生した1シンボルの数を追跡する8ビット「1」カウンタ204と、を含む。ビン200は、各種類からひとつの、二つのサンプルで初期化されてもよい。0カウンタ202または1カウンタ204のいずれかがオーバフローすると、両方のカウンタ202および204が2で除され、必要であれば切り上げられる。
【0066】
0カウンタ202を0カウンタ202と1カウンタ204との和で除すことにより、カウンタ202および204から推定確率206が算出されてもよい。次いで、数直線の各分割部分の長さが推定確率206に対応するよう、数直線が切断されてもよい。
【0067】
上述のように、統計ビン200によって表される確率コンテキストは、DCT係数のタイプを包含してもよい。例えば、係数のひとつのタイプは、平均輝度またはサンプルブロックに亘る色を表す「DC」である。係数の他のタイプは、「AC」係数である。以下に詳述されるように、確率コンテキストはまた、DCTブロック内のAC係数のインデクスを包含してもよい。
【0068】
本発明のある実装では、各DCT係数は、以下で詳述されるような、指数ゴロム符号または指数ゴロム様符号を伴う二値化形式で表される。統計ビン200を用いることで、相関しうる既に符号化された係数の値を考慮しつつ、二値化形式の「1」シンボル(例えば、「1」ビット)の尤度を追跡する。
【0069】
最初に、統計ビン200は、1対0の50-50確率にそれぞれ初期化される。次いで、係数が符号化(または復号)されるにつれて、確率コンテキストのそれぞれにおいて見られる1および0の数を数え、確率が調整される。
【0070】
ある確率コンテキストで発生した「1」シンボルが他の確率コンテキストにおける予測に影響を与えない点で、統計ビン200は独立であってもよい。同様の確率コンテキストから有益な情報を学習できるように、統計ビンの構成数を選択する。
【0071】
本発明のある実装では、イメージのひとつの成分の8×8サンプルブロックに対応する64の量子化DCT係数のブロックのそれぞれについて、7×7サブブロックにおける49のAC係数と、水平(1×7)および垂直(7×1)変化の14の「エッジ」AC係数と、1のDC係数と、が別個に符号化される。
【0072】
本発明のある実装では、7×7サブブロックにおけるAC係数について、AC係数の二値化形式のビットは、上DCTブロック、左DCTブロックおよび左上DCTブロックにおける対応するAC係数を用いて予測される。例えば、二値化形式のビットのビン200は、
に基づいて選択されてもよい。ここで、iはDCTブロック内のAC係数のインデクスであり、A
iは上DCTブロックにおける同じインデクスの係数を表し、L
iは左DCTブロックにおける同じインデクスの係数を表し、AL
iは左上DCTブロックにおける同じインデクスの係数を表す。
【0073】
本発明のある実装では、7×1エッジについて、二次元(2D)DCTの列全体がエッジ行の一次元(1D)DCTに変換される。この態様では、現在復号しているDCTブロックの上端行および上のDCTブロックの下端行から、ピクセル隣接1DDCT係数が得られる。同様に、1×7エッジについて、左側に隣接するDCTブロックの最も右の列を、現在復号しているブロックの最も左側の1DDCT列の先のものとして用いてもよい。
【0074】
本発明のある実装では、DC係数を予測するために、ブロックに亘るイメージ勾配は滑らかであることが仮定される。上ブロックおよび左ブロックのピクセルの最後の二つの行を線形的に外挿することで、16のエッジピクセル値を発生させる。AC係数を用いることで、復号されたブロックのエッジピクセルと隣から外挿されたエッジとの間の平均差分を最小化する予測DCオフセットを計算する。予測DC値と真のDC値とのデルタ(差分)のみが符号化され、これにより近い予測は小さな出力サイズを生じさせる。ある実装では、エッジピクセルの変分およびはずれ値によって統計ビンをインデクス化することで確率モデルが非平滑勾配に適応できるようにすることで、追加的な圧縮利得が達成される。
適応的訓練算術符号化手順
【0075】
上述のように、本発明の適応訓練算術コーダは確率モデルを含んでもよく、確率モデルはイメージの前のセクションから集められたコンテキスト情報によって適応訓練される。入来シンボルの所与の集合を符号化するとき、算術コーダは数直線を駆動するための推定確率を算出してもよい。推定確率は確率モデルの選択されたビンの現在の0カウンタおよび1カウンタに基づいて算出されてもよい。入来シンボルの所与の集合について用いるべき統計ビンは、入来シンボルの所与の集合の現在の状況に基づいて決定されてもよい。
【0076】
図3は、本発明のある実装による、適応訓練算術符号化手順に含まれる高位操作302-314のフローチャートである。
図3に示され以下に所定の順序で説明されるが、操作302-314の実行は手元の実装では重なってもよい。例えば、操作302-3014は、手元の実装において、同時に実行されてもよく、並行して実行されてもよい。したがって、ある操作(例えば、302)が、次の描かれたまたは説明される操作(例えば、304)の実行が開始可能となる前に実行完了されなければならないという要件はなく、操作が描かれる順序で開始されなければならないという要件もない。
【0077】
総じて、操作302-314はイメージの成分の量子化係数ブロックのアレイに対して行われる。イメージが複数の成分を有する場合(例えば、カラーイメージ)、操作302-314は、各成分について別個に行われてもよく、各成分は量子化係数ブロックの別個のアレイによって表される。
量子化DCTブロック処理順序
【0078】
操作302で、イメージ成分のサンプルブロックに対応する量子化係数のブロックは、残りの操作304-314における処理に対して取得される。量子化ブロックは、成分内で、左から右へ、上から下へのラスタスキャン順序で取得されてもよく、ここで、成分の四つの辺は上下左右と指定され、下は上の反対であり、左は右の反対である。処理順序のため、所与の量子化ブロックの「上」および「左」にある量子化ブロックは所与の量子化ブロックの前に処理される。したがって、所与の量子化ブロックが処理されるときには、所与のブロックについて上ブロックおよび左ブロックが利用可能である前提で、上量子化ブロックおよび左量子化ブロックを処理することによって決定される情報が利用可能である。
【0079】
図4は、左、右、上および下の辺を有するイメージ成分400を模式的に表す。成分のサンプルブロックに対応する量子化係数のブロックは、サンプルブロック402に対応する量子化ブロックから開始して、左から右、上から下の順序で処理される。所与の量子化ブロックは、対応するサンプルブロックが成分の最も左のブロック列にない場合には、左ブロックを有しうる。所与の量子化ブロックは、対応するサンプルブロックが成分の最も上のブロック行にない場合には、上ブロックを有しうる。所与の量子化ブロックは、対応するサンプルブロックが成分の最も左のブロック列になく、かつ、対応するサンプルブロックが成分の最も上のブロック列にない場合には、左上ブロックを有しうる。例えば、サンプルブロック404は、上ブロック408と、左ブロック406と、左上ブロック410と、を有する。しかしながら、ブロック402はこれらのブロックのいずれも有さず、これは成分内におけるそのいちのためである。
量子化係数ブロック仕訳(カテゴリ化)
【0080】
操作304で、量子化係数のブロックは非二値シンボルへと仕訳(カテゴリ化)される。本発明のある実装では、量子化ブロックの量子化係数は、四つの汎用カテゴリに仕分けられる。四つの汎用カテゴリは
図5に示されており、64の量子化係数500のブロックを模式的に示す。ブロック500は、元の圧縮イメージから復活された量子化係数のアレイにおける64の量子化係数のブロックのうちのひとつであってもよい。ブロック500は63の量子化AC係数(
図5で1から63と符号が付されている)を有してもよく、それらのいくつかまたは全ては量子化のために0値を有してもよい。ブロック500はまた、量子化DC係数502(
図5で64と符号が付されている)を有してもよい。量子化DCT係数502は、ブロック500に対応するイメージの8×8サンプルブロックの全体的輝度を表してもよい。量子化DC係数の値が高いほど、対応するサンプルブロックのサンプルはより明るい。
【0081】
ブロック500の63の量子化AC係数はさらに以下の三つのサブ部分にカテゴリ化されてもよい:7×7サブブロック504(
図5で量子化AC係数に1-49が付されている)、7×1エッジ行506(量子化AC係数に50-56が付されている)、および1×7エッジ列508(量子化AC係数に57-63が付されている)。7×1エッジ行506の量子化AC係数は、DCから遠ざかるにつれて増大する各種周波数で生じる垂直パターンを含んでもよい。同様に、1×7エッジ列508の量子化AC係数は、増大する周波数の水平帯パターンを含んでもよい。7×7サブブロック504における量子化AC係数は、例えばビーチの小石のテクスチャや格子縞のシャツのパターンなどの、対応する8×8サンプルブロックにおける細かな詳細を表すチェッカーパターンを含んでもよい。
二値化
【0082】
操作306で、量子化係数ブロックの非二値シンボルが二値化される。二値化は、非二値シンボルを、ひとつ以上の二値シンボルのシーケンス(例えば、ひとつ以上のビットのシーケンス)へ変換することを含んでもよい。
【0083】
図6は、本発明のある実装による、所与のカテゴリ化された量子化係数ブロックの非二値シンボルのブロック二値化フォーマット600を模式的に示す。ブロック二値化フォーマット600は、所与のブロックの非二値シンボルを表す、ビット0で開始し、ビットNで終わるビットシーケンス(二値シンボル)を含む。ある実装では、所与のブロックのブロック二値化フォーマット600は、以下の非二値シンボルの二値化形式を、以下にリストされる順序で、含む。
・7×7サブブロック504における非ゼロ量子化AC係数の数602、
・その次に、7×7サブブロック504における非ゼロ量子化AC係数の数602以上の数であるところの、7×7サブブロック504からの量子化AC係数の数604、
・その次に、7×1エッジ行506における非ゼロ量子化AC係数の数606、
・その次に、7×1エッジ行506における非ゼロ量子化AC係数の数606以上の数であるところの、7×1エッジ行506からの量子化AC係数の数608、
・その次に、1×7エッジ列508における非ゼロ量子化AC係数の数610、
・その次に、1×7エッジ列508における非ゼロ量子化AC係数の数610以上の数であるところの、1×7エッジ列508からの量子化AC係数の数612、
・その次に、量子化DC係数502の予測のデルタであってもよいDC誤差項614。
【0084】
ある実装では、7×7サブブロック504における非ゼロ量子化AC係数602の数は0から49の範囲(0および49を含む)であり、フォーマット600において数602の6ビットベース2符号化として二値化される。
【0085】
所与のブロック500を二値化する際、
図7に示されるように、7×7サブブロック504の量子化AC係数はジグザグスキャン順序にしたがって二値化され、それは
図7の符号1が付された量子化AC係数から始まり、
図7の符号49が付された量子化AC係数まで図示されるように続く。ジグザグスキャン順序は、ラスタスキャン順序で直列化する場合よりも少ない数の量子化AC係数の直列化を可能とする。これにより、エントロピーコーダが符号化すべきシンボル数が少なくなる。特に、7×7サブブロック504の量子化AC係数を直列化する際、メモリ内カウンタは、7×7サブブロック504内の非ゼロ量子化AC係数の数602に設定されてもよい。7×7サブブロック504における非ゼロ量子化AC係数の数602は、所与のブロック500を二値化する前に決定されてもよい。例えば、7×7サブブロック504における非ゼロ量子化AC係数の数602は、元の圧縮イメージから所与のブロック500を再生するために元の圧縮イメージを復号する際に決定されてもよい。
【0086】
7×7サブブロック504における非ゼロ量子化AC係数の数602が0より大きいことを仮定すると、カウンタは、7×7サブブロック504を通じたジグザグスキャン順序において非ゼロ量子化AC係数が二値化されるたびに、1だけ減じられる。7×7サブブロック504の二値化はカウンタが0に到達した後に完了してもよい。一例として、
図8は、ジグザグスキャン順序における位置1、3および6に三つの非ゼロAC係数を有する量子化AC係数の例示的7×7サブブロック800を模式的に示す。非ゼロ係数の数が分かっているので、7×7サブブロック800の直列化は、
図8に示されるように3番目の非ゼロAC係数が位置6で発生した後、停止してもよい。さらに、このサブブロック800について、フォーマット600において量子化AC係数を六つ604だけ二値化すればよい。特に、位置1から位置6まで(位置1、6を含む)の量子化AC係数のみを二値化すればよい。7×7サブブロック504における非ゼロ量子化AC係数の数602が0の場合、フォーマット600において7×7サブブロック504の量子化AC係数602を二値化する必要はない。このシナリオは、7×7サブブロック504の量子化AC係数を破線で囲まれた箱604で表すことにより、
図6に示されている。
【0087】
7×1エッジ行506および1×7エッジ列508は、それぞれ、7×7サブブロック504と同様に二値化されてもよい。例外は、7×1エッジ行506における非ゼロ量子化AC係数の数606および1×7エッジ列508における非ゼロ量子化AC係数の数610は、0から7の範囲内(0および7を含む)の値であり、フォーマット600において、6ビットベース2符号化の代わりに3ビットベース2符号化として二値化されることである。他の違いはこれらのエッジ係数を通じたスキャン順序は直線的であって
図7に示されるようなジグザグパターンを有さないことであり、これは
図7においてサブブロック706および708を通じた対応する矢印で示される。7×7サブブロック504と同様に、7×1エッジ行506または1×7サブブロック508における非ゼロ係数の数が0である場合、それらのブロックにおける対応する量子化AC係数の二値化は、
図6の破線で囲まれた箱608および612で示されるように、不要である。
AC係数およびDC誤差項二値化フォーマット
【0088】
本発明のある実装では、各量子化AC係数604、608、612およびDC誤差項614は、ブロック二値化フォーマット600において、指数ゴロム符号で二値化され、それはユナリ長の後に直接符号ビットを置くことによって負の数まで拡張される。
図9は量子化AC係数およびDC誤差項のために用いられる二値化フォーマット900を模式的に示す。フォーマット900は、総じて、係数指数902と、符号ビット904と、残差906と、を含む。
【0089】
ある実装では、係数指数902は、残差906によって表される値のビット長を表すユナリ値である。指数902は、ユナリ値の終わりを示すゼロ(0)ターミナルビットで終わる。
【0090】
次に、符号ビット904は、残差906によって表される値が正の値か負の値かを表す二値の値(0または1)である。ある実装では、一(1)ビット値は正の数に対応する符号ビット904として用いられ、ゼロ(0)ビット値は負の数に対応する符号ビット904として用いられる。
【0091】
最後に、残差906は、量子化AC係数およびDC誤差項の値を表す二値の値である。残差906の先頭の、最上位の、二値の桁は省略してもよい。全ての正の数の先頭桁は1であるからである。
【0092】
例えば、フォーマット900によると、十進数47は以下のビットシーケンスで表されてもよい。1111110 0 01111。この例では、残差906は先頭の一(1)ビットを省略する。また、この例では、指数902はユナリで六(6)であり、六(6)ビット(例えば、101111)を含む47の完全な二値表現のビット長を表す。この例で分かるように、指数902は残差906から省略される先頭の一(1)ビットをカウントする。
【0093】
ある実装では、量子化AC係数およびDC誤差項がゼロ(0)である場合、フォーマット900は使われない。代わりに、ブロックフォーマット600において、ゼロ(0)値が単一のゼロ(0)ビットとして単純に二値化される。以下の表は、フォーマット900にしたがい、数0から9がいかに表されるかを示す。
【表1】
【0094】
ビン選択
操作308で、確率モデルのビンが符号化対象の各二値シンボルについて選択される。選択は、二値シンボルが7×7サブブロック504や7×1エッジ行506や1×7サブブロック508やDC誤差項からの非二値シンボルを二値化したか否かを含む各種状況的ファクタに依存して変わりうる。
7×7サブブロックのビン選択
【0095】
7×7サブブロック504の非ゼロ係数の数602を符号化する六つの二値シンボルについて、上ブロックおよび左ブロックの7×7サブブロック504における非ゼロ係数の数602の平均がビンインデクスを選択するために用いられる。これは、平均のlog1.59をとることによって、0から9まで(0および9を含む)のビンインデクスにマップされる。これまで符号化された値と組み合わせて符号化されているシンボルインデクスは、平均非ゼロインデクスと組み合わされて、ビンの完全インデクスが与えられる。それまでに復号された数についての追加的情報およびシンボルインデクスは、算術コーダが49の非ゼロより上の値に最も低い可能な確率を適応的に割り当てるのに十分である。
【0096】
この文脈で、用語「組み合わされた」は、二つのビンインデクスのうちの一方が他方の範囲によってスケールされた後のそれら二つのビンインデクスの加算を意味するために用いられる。例えば、インデクスaが0から9までの範囲(0および9を含む)にある場合、かつ、それが他のインデクスbと組み合わされた場合、その結果は
a+10・b
として定義される。
【0097】
上述したように、7×7係数604はジグザグスキャンを用いて符号化され、そのジグザグスキャンは、ラスタスキャン順序を用いて符号化した場合よりも符号化対象の係数を顕著に少なくすることを可能とし、その結果、より良い圧縮が得られる。7×7係数604のそれぞれについて、左ブロック、上ブロックおよび左上ブロックからの7×7ブロック504における同じジグザグ位置での隣接する三つの量子化係数は、それぞれ、重み13、13および6で平均される。これは、32を加えつつ接するブロックの重要性をおおよそ倍にすることを可能とし、シフト動作により平均化を完了することを可能とする。重み付け平均は、残っているlog1.59非ゼロと係数インデクスとこれまで符号化された係数指数のシンボルの数と、組み合わされて、7×7量子化係数指数902の各ビットについての完全ビンインデクスが生成される。引き続く符号ビット904のビンは、現在の成分のみに基づいて、選択される。最後に、残差906を記述するビットのビンは、成分と、0から48までの(0および48を含む)係数インデクスと、残っているlog1.59非ゼロと、によって指定されるビンインデクスを用いて符号化される。
7×1エッジ行および1×7サブブロックについてのビン選択
【0098】
7×1カテゴリはいくつかの鍵となる違いを伴う同様のビンインデクスを用いる。最初に、7×1エッジ行506における非ゼロ606の数は0から7まで(0および7を含む)であって、記述するのに3つの二値シンボルしか必要としない。ここで先立つものは、成分と7×7サブブロック504における非ゼロ602の数を7で除したものと最後に以前に復号された7×7サブブロック504における非ゼロの最も離れた水平座標との組み合わせである。
【0099】
実際の量子化AC係数608について、u番目のインデクス左エッジDCT係数、ここで、
u ∈[1,8)
は、左に隣接するブロックからの完全マッチング行と共にそのインデクスにおける行全体の残りを用いることによって予測可能である。
【0100】
本発明のある実装では、2DDCT値のu番目の行の全体は、ブロックのエッジにおける1DDCTの対応する係数を計算するのに使用される。同じ計算を実行することで、左側に隣接するブロックのその最も右側の(7番目の)ピクセル列の1DDCTを確立することができる。既知の過去のブロックの7番目の列の1DDCTのu番目インデクスは、現在のブロックの最も左側の行のu番目のインデクスと似ているかそれと同じだと仮定されてもよい。全ての8つの隣接ピクセルが同じになる傾向があるからである。したがって、最終的な周波数空間値F0,uは、現在のブロックの最も左側の(0番目)列の1DDCTの既知の部分から、左に隣接する隣接ブロックの7番目の列の1DDCTを減じることによって、評価されてもよい。
【0101】
詳細には、DCTの基底要素は以下の様に表されてもよい:
【0102】
であって、
x, u ∈[0,8)
と
とを伴う。
【0103】
したがって、コサイン空間値Fu,v、ここで、
u, v ∈[0,8)
、は、ピクセル空間値px,yから定義されてもよく、ここで、
x, y ∈[0,8)
であるが、以下の様に表されてもよい:
【0104】
【0105】
DCTは、それが直交するように定義されてもよい。したがって:
【0106】
【0107】
コサイン空間値F
u,vを定義する上記の式は、式の両辺に
を乗じることで以下の関係を提供することによって異なるように表されてもよい。
【0108】
【0109】
上記の関係は、ある列の単一の1DDCT係数がブロックの2DDCTの対応する行全体から計算されてもよいよう解釈されてもよい。同様に、ある行の単一の1DDCT係数は、ブロックの2DDCTの対応する列から計算されてもよい。
【0110】
隣接サンプルブロックの隣接行の1DDCT値は同様である蓋然性が高いので、u番目のエッジ値Fu,0は以下の関係によって表されうる。以下の関係では、Fu,vは、位置u, vにおける2DDCT係数を表し、Au,vは、以下の位置における2DDCT係数を表す。
【0111】
【0112】
Fu,0を予測する際、以下の関係の指数は指数のビンインデクスとして入力される。
【0113】
【0114】
予測値の指数のそのビンインデクスは、成分と、行に残る非ゼロの数と、係数インデクスと、指数の現在のユナリビットのインデクスと、と組み合わせられる。予測の符号もまたFu,0の符号のビンインデクスとして用いられ得る。その値は、一般に、残差値の最初の7ビットを予測するために役に立つ。したがって、最初の7ビットについて、ビンインデクスは、成分および量子化係数の指数に加えて、予測されたFu,0の7つの最上位ビットを含む。
【0115】
水平7×1列に適用された上述のものと同様の技術が、量子化係数の垂直1×7行にも適用されてもよい。
DC誤差項を予測するためのビン
【0116】
63のAC係数が分かると、予測対象の最後の要素はDC係数である。DC係数を直接符号化する代わりに、予測が行われる。DC誤差項として知られるDC係数と予測との間の差分(デルタ)が代わりに符号化される。DC誤差項は、予測の確からしさに対応するビンインデクスで符号化されてもよい。
【0117】
DC誤差項のビンインデクスは、最大予測と最小予測との間の差分のlog2の組み合わせとして、平均から最も遠い予測のlog2と共に設定されてもよい。平均から最も遠い予測の符号はまた、DC誤差項の符号ビットのただひとつのビンインデクスとして用いられてもよい。最後に、DC誤差項の残差は、確率を蓄積するためのそのビンインデクスがカウントされるにつれて、最大予測と最小予測との間の差分の長さのみを用いてもよい。
【0118】
図3に戻り、操作310で、符号化対象の二値シンボルについて選択されたビンから、現在の推定確率を算出する。符号化対象の二値シンボルについて選択されたビンから推定確率を算出するために、選択されたビンの現在の0カウンタを、現在の0カウンタと現在の1カウンタとの和で除してもよい。あるいはまた、選択されたビンの現在の1カウンタがその和で除されてもよい。いずれにせよ、推定確率は、符号化対象の二値シンボルが0シンボルまたは1シンボルである確率を表し、1引く推定確率は符号化対象の二値シンボルが0シンボルまたは1シンボルの他方である確率を表す。推定確率を用いることで、二値シンボルを算術符号化する際の、現在の間隔の比例的サブ間隔を特定することができる。
【0119】
操作312で、二値シンボルは、選択されたビンの現在の推定確率に基づいて算術符号化される。推定確率は、現在の二値シンボルが「0」または「1」である確率を供給してもよい。推定確率から、現在の二値シンボルが「0」または「1」の他方である確率を決定することができる。これら二つの推定確率を用いることで、「0」二値シンボルおよび「1」二値シンボルに対応する二つのサブ範囲を決定することができ、二つのサブ範囲は算術コーダが現在の二値シンボルを符号化するために用いるものである。
【0120】
基本的に、操作312で二値シンボルを算術符号化することは、現在の間隔から始まってもよい。符号化される最初の二値シンボルについて、現在の間隔は[0, 1)に初期化される。次いで、現在の間隔は二つのサブ間隔にサブ分割され、一方のサブ間隔は「1」シンボルのためのものであり、他方のサブ間隔は「0」シンボルのためのものである。現在の間隔のサブ分割は符号化されている二値シンボルについて計算された推定確率に基づく。特に、「1」シンボルのサブ間隔のサイズと、「0」シンボルのサブ間隔のサイズと、は、そのシンボルが符号化されている二値シンボルである推定確率に比例する。符号化されている二値シンボルに対応するサブ間隔が選択され、そのサブ間隔が、符号化対象の次の二値シンボルがあるならばそれの新たな現在の間隔となる。推定確率に基づいて現在の間隔の両方のサブ間隔を算出する代わりに、符号化されている二値シンボルに対応するサブ間隔のみが算出されてもよい。符号化される最後の二値シンボルに対応する最後のサブ間隔は、次いで、それを他の全ての可能な最後の間隔と区別するのに十分なビットで表される。
【0121】
操作314で、確率モデルの選択されたビンは更新される。例えば、所与の二値シンボルについてビンが選択され、その二値シンボルの値が「0」である場合、選択されたビンの0カウンタが増大される。したがって、そのビンが次に選択されるとき、「0」の確率は少し高くなる。
【0122】
DC誤差項
本発明のある実装では、DC係数の予測が算出され、実際のDC係数と予測との間の差分(DC誤差項)が符号化される。実際のDC係数の代わりにDC誤差項を符号化することによって、さらなる圧縮が達成される。実際のDC係数は、解凍中、予測を再度生成し、それをさらに圧縮されたイメージにおいて符号化されているDC誤差項と組み合わせることによって、復元されうる。
【0123】
目標は、予測と実際のDC係数との間の数値的差分を最小化する正確な予測を生成することである。総じて、差分が小さいほど(すなわち、予測が正確なほど)、さらに圧縮されたイメージにおいてその差分を符号化するのに必要なビット数が少なくなる。平均で、DC係数の符号化は、元の圧縮イメージの全データサイズの約8%ほどを占めうる。したがって、元のエントロピーエンコーダの予測よりも平均でより正確な予測を生成することは、かなりの追加的な圧縮を生む可能性がある。
【0124】
総じて、二つの異なる予測手法が提供される。第1の予測手法は、本明細書において「ローカル輝度予測」と称される。第2の予測手法は、本明細書において「ローカル勾配予測」と称される。両方の手法は、総じて、成分のターゲット量子化DCTブロックに対応するサンプルブロックにおけるサンプルと、同じ成分のターゲット量子化DCTブロックの上の量子化DCTブロックに対応するサンプルブロックにおける隣接サンプルと、同じ成分のターゲット量子化DCTブロックの左の量子化DCTブロックに対応するサンプルブロックにおける隣接サンプルと、に基づく。
【0125】
ターゲットサンプルブロックが成分のブロックの最初の行に対応するために上のサンプルブロックが利用可能でない場合、予測はターゲットサンプルブロックおよび左のサンプルブロックのサンプルのみに基づいてもよい。ターゲットサンプルブロックが成分のブロックの最初の列に対応するために左のサンプルブロックが利用可能でない場合、予測はターゲットサンプルブロックおよび上のサンプルブロックのサンプルのみに基づいてもよい。ターゲットサンプルブロックが成分の左上ブロックに対応するために上ブロックおよび左ブロックのいずれも利用可能でない場合、ある実装では、予測は生成されない。
【0126】
ある実装では、上サンプルブロックおよび左サンプルブロックの一方または両方が利用可能でない場合、異なる予測手法が用いられるか、または予測は行われない。より一般的には、本明細書で説明されるローカル輝度予測手法およびローカル勾配予測手法が、他の量子化DC係数予測手法の代わりに、またはそれと連携して、用いられてもよい。さらに、異なるターゲット量子化DCTブロックについて異なる予測手法が用いられてもよい。例えば、追加的な処理は、所与のターゲット量子化DCTブロックについて、ローカル勾配予測手法よりも、ローカル輝度予測手法または他の手法のほうがより適切である(例えば、より正確な予測を行うと推定される)と判定し、その所与のブロックについてローカル勾配予測手法を用いる代わりに、その予測手法を用いることでその所与のブロックについて予測を生成してもよい。
【0127】
ある実装では、所与のブロックについて複数の予測手法を用いることで複数の予測を生成し、最も正確であると推定された予測を所与のブロックのものとして用いる。例えば、所与のブロックについてローカル輝度予測手法およびローカル勾配予測手法の両方を用いてもよく、最も正確であると推定された予測を所与のブロックの予測として用いてもよい。
【0128】
用語「上」および「左」は、成分の量子化DCTブロックがDCTベースのエンコーダによって処理される順序によって定義される。総じて、処理順序は、成分内で、左から右へ、および上から下へであり、ここで、成分の四つの辺は上下左右と指定され、下は上の反対であり、左は右の反対である。処理順序のため、成分のターゲット量子化DCTブロックの「上」にある(すなわち、成分の上により近い)、その成分の量子化DCTブロックおよび成分のターゲット量子化DCTブロックの左にある、その成分の量子化DCTブロックが、ターゲット量子化DCTブロックの前に処理される。したがって、ターゲット量子化DCTブロックが処理されるときには、ターゲットブロックについて上ブロックおよび左ブロックが利用可能である前提で、上量子化DCTブロックおよび左量子化DCTブロックを処理することによって決定される情報が利用可能である。
ローカル輝度予測手法
【0129】
ローカル輝度予測手法は、予測として、ターゲットサンプルブロックと上サンプルブロックおよび左サンプルブロックの両方との間のエッジにおける16個全てのサンプルペアの間の差分を最小化する全体的な輝度を算出する。これは
図10に示される。示されるように、ターゲット8×8サンプルブロック1002は、サンプルT0,0からT0,7までを含む最も左のサンプル列を有する。ここで、文字「T」はターゲットサンプルブロック1002のサンプルを指すために用いられ、「X, Y」はターゲットブロック1002のX番目の列およびY番目の行のサンプルを指すために用いられる整数である。ターゲットブロック1002はまた、サンプルT0,0からT7,0までを含む上端のサンプル行を有する。ターゲットブロック1002の残りのセルもまたサンプルを有するが、
図10では、より明確な例を提供するためにそれらに符号は付されない。同様に、左ブロック1004は、サンプルL7,0からL7,7までを含む最も右のサンプル列を有する。ここで、文字「L」は左サンプルブロック1004のサンプルを指すために用いられる。同様に、上ブロック1006は、サンプルA0,7からA7,7までを含む下端のサンプル行を有する。ここで、文字「A」は上サンプルブロック1006のサンプルを指すために用いられる。ターゲットブロック1002と同様に、左ブロック1004および上ブロック1006もまたその残りのセルにサンプルを有するが、それらには
図10では明示的に符号が付されない。
【0130】
図11を参照すると、それは本発明のある実装に係る、成分のターゲット量子化DCTブロックの量子化DC係数の予測を生成するための、ローカル輝度予測手法の高位操作のフローチャート1100である。総じて、操作1102、1104、1106、1108および1110は成分の各ターゲット量子化DCTブロックに対して行われてもよく、該各ターゲット量子化DCTブロックについて、その成分の上量子化DCTブロックおよび左量子化DCTブロックが処理順序で利用可能である。明確な例を提供するために、手法の操作は
図10に関して以下に説明される。手法は、手元の実装の要件にしたがい、ソフトウエアやハードウエアやソフトウエアとハードウエアとの組み合わせで実装されてもよい。
【0131】
操作1102で、ターゲットサンプルブロック1002、左サンプルブロック1004および上サンプルブロック1006が取得される。ターゲットサンプルブロック1002はターゲット量子化DCTブロックに対応する逆量子化されたDCTブロックに逆DCTを適用することによって取得されてもよく、ここで、DC係数は、逆DCTが適用される先の対応する逆量子化されたDCTブロックにおける所定のダミー値に設定される。ある実装では、DC係数の所定のダミー値はゼロ(0)である。この入力での逆DCTの出力はターゲットサンプルブロック1002である。対応する逆量子化されたDCTブロックは、ターゲット量子化DCTブロックの量子化DCT係数を逆量子化することによって、ターゲット量子化DCTブロックから取得されてもよい。逆量子化は、元々ターゲットDCTブロックを量子化するために用いられたのと同じか同等の量子化テーブルに基づいてもよい。DC係数は逆DCTに入力される対応する逆量子化されたDCTブロックにおける所定のダミー値に設定されるが、これは予測が行われていることを表すため、かつ、復号中または解凍中の逆係数プリプロセッサにとってターゲット量子化DCTブロックの実際の量子化DC係数へのアクセスは利用可能でないからである。
【0132】
ある実装では、逆DCTによるサンプル出力を最初逆レベルシフトすることで、ターゲットサンプルブロック1002を、ターゲットサンプルブロック1002の各サンプルが符号無し整数を表すNビット値となるように、生成する。ここで、Nは例えば2、4、8、10または12であってもよい。
【0133】
左サンプルブロック1004および上サンプルブロック1006は、同様に逆DCTを対応する逆量子化されたDCTブロックに適用することによって、取得されてもよい。しかしながら、左サンプルブロック1004および上サンプルブロック1006について、逆量子化されたDC係数は、逆DCTに入力される対応する逆量子化されたDCTブロックにおいて維持される。これらの逆量子化されたDC係数はターゲット量子化DCTブロックでなされたようにダミー値に設定されることはない。これらの係数は、ターゲット量子化DCTブロックが処理順序で処理されるときまでには逆係数プリプロセッサに利用可能であるからである。ターゲットブロック1002のサンプルと同様に、逆DCTによって出力される左ブロック1004および上ブロック1006のサンプルもまた最初に逆レベルシフトされてもよい。
【0134】
操作1104で、ターゲットサンプルブロック1002と左サンプルブロック1004および上サンプルブロック1006のそれぞれとの間のエッジに沿ってサンプル差分が算出され、全部で十六(16)のサンプル差分が得られる。特に、ある実装では、以下の十六(16)のサンプル差分が算出されてもよい:
【表2】
【0135】
上の表のABSは差分の絶対値を指す。
【0136】
操作1106で、十六(16)の差分の平均が計算される。
【0137】
操作1108で、十六(16)の差分のうち、操作1106で算出された平均から最も遠いひとつ以上が、予測を行う目的で、廃棄される。ある実装では、固定数のはずれ値が特定される。例えば、十六(16)の差分のうち、平均から最も遠い八つ(8)がはずれ値として特定され、廃棄されてもよい。
【0138】
操作1110で、操作1108ではずれ値を廃棄した後に残っている差分の平均を算出する。算出された平均は、ターゲット量子化DCTブロックの量子化DC係数の予測として用いられる。
【0139】
ローカル輝度予測アプローチの変形例では、左の境界および上の境界に沿った十六(16)個のサンプルペアのそれぞれの平均が計算される。例えば、16個の平均のうちのひとつは左の境界に沿ったサンプルペア{T7,3}、{T0,3}の平均でありうる。次いで、16個の平均のメジアンが計算され、そのメジアンに最も近い八つの平均の平均が計算され予測として用いられる。このとき、メジアンからより遠い八つの平均は無視される。
【0140】
ローカル輝度予測アプローチまたはその変形例は、イメージが、ターゲットサンプルブロック1002と左サンプルブロック1004および上サンプルブロック1006のそれぞれとの間の境界において急なエッジを有する場合に、より正確な予測を行うことができる。しかしながら、多くのイメージは、サンプルブロックエッジ境界と交差する滑らかな勾配を有する。例えば、日没の写真イメージは、空が水平線において青からオレンジへと徐々に移り変わるイメージであって、サンプルブロックエッジ境界と交差する滑らかな勾配を有しうる。滑らかな勾配を有するイメージについてより正確な予測を行うために、ローカル勾配予測アプローチが用いられてもよい。
ローカル勾配予測手法
【0141】
ローカル勾配予測手法は、サンプルブロックにおける隣接サンプルのペアの間の差分(すなわち、勾配)の独立性を利用し、それはサンプルブロックの輝度と独立している。したがって、ターゲットサンプルブロックの勾配を用いることで、ターゲット量子化DCTブロックの量子化DC係数の予測を計算することができる。ある実装では、左のサンプルブロックおよび上のサンプルブロックからの境界勾配もまた、予測を計算するために用いられる。これは
図12Aに示される。示されるように、ターゲット8×8サンプルブロック1202は、二つの最も左の垂直列1210と、二つの上端の水平行1212と、を有する。左の8×8サンプルブロック1204は、ターゲットブロック1202の垂直列1210と境界を接する二つの最も右側の垂直列1208を有する。上の8×8サンプルブロック1206は、ターゲットブロック1202の水平行1212と境界を接する二つの下端の水平行1214を有する。
【0142】
総じて、ローカル勾配予測手法は、左ブロック1204の水平勾配とターゲットブロック1202の対応する水平勾配との間の差分を算出し、かつ、上ブロック1206の垂直勾配とターゲットブロック1204の対応する垂直勾配との間の差分を算出する。ここで、左ブロック1204の水平勾配は左ブロック1204の最も右側の列1208のサンプルの間の差分として算出され、上ブロック1206の垂直勾配は上ブロック1206の下端の行1214のサンプルの間の差分として算出され、ターゲットブロック1202の水平勾配はターゲットブロック1202の最も左側の列1210のサンプルの間の差分として算出され、ターゲットブロック1202の垂直勾配はターゲットブロック1202の上端の行1212のサンプルの間の差分として算出される。
【0143】
対応する勾配の間の各差分は勾配差分としてとられる。勾配差分は、エッジに向けた対応する勾配の向きおよび大きさに依存する正の値または負の値であり、またはその向きおよび大きさが等しい場合はゼロである。したがって、同じまたは同様の向きおよび大きさを有する対応する勾配は互いに相殺する傾向にある。しかしながら、イメージは滑らかな勾配を有する傾向にある。勾配差分の正または負(すなわち、非ゼロ)の値はこれを反映する。これは
図12Bに示される。影付き矢印1216は、左ブロック1204とターゲットブロック1202との間のエッジに向けた左ブロック1204における水平勾配を表し、影付き矢印1218は、左ブロック1204とターゲットブロック1202との間のエッジに向けたターゲットブロック1202における対応する水平勾配を表す。ここで、水平勾配1216は、左ブロック1204とターゲットブロック1202との間のエッジに向けた、サンプルL6,1およびL7,1(例えば、L6,1引くL7,1)の間の差分として算出されてもよく、対応する水平勾配1218は、そのエッジに向けた、サンプルT1,1およびT0,1(例えば、T1,1引くT,01)の間の差分として算出されてもよい。
図12Cにおいて、影付き矢印1220は、上ブロック1206とターゲットブロック1202と間のエッジに向けた上ブロック1206における垂直勾配を表し、影付き矢印1222は、そのエッジに向けたターゲットブロック1202における対応する垂直勾配を表す。
【0144】
勾配(例えば、1216)が負の値である場合、勾配を算出するために区別されたサンプルにおいてエッジに向けて成分の強度が増大する。逆に、勾配が正の値である場合、区別されたサンプルにおいてエッジに向けて成分の強度が減少する。勾配がゼロである場合、成分は区別されたサンプルにおいてエッジに向けて一定の強度を有する。
【0145】
上述のように、勾配とその反対の勾配との間の差分は勾配差分としてとられてもよい。ある実装では、量子化DC係数の実際のローカル勾配予測は全ての十六(16)の勾配差分の平均として算出される。ローカル勾配予測は平均で、ローカル輝度アプローチによって生成される予測よりも正確である。これは、平均で、イメージは、サンプルブロック境界における急なエッジよりも、サンプルブロック境界を交差する滑らかな勾配をより多く有するからである。
【0146】
図13を参照すると、それは本発明のある実装に係る、成分のターゲット量子化DCTブロックの量子化DC係数の予測を生成するための、ローカル勾配予測手法の高位操作のフローチャート1300である。総じて、操作1302、1304、1306、1308および1310は成分の各ターゲット量子化DCTブロックに対して行われてもよく、該各ターゲット量子化DCTブロックについて、その成分の上量子化DCTブロックおよび左量子化DCTブロックが処理順序で利用可能である。明確な例を提供するために、手法の操作は
図12Aに関して以下に説明される。手法は、係数プリプロセッサおよび逆係数プリプロセッサによって実装されてもよく、手元の実装の要件にしたがい、ソフトウエアやハードウエアやソフトウエアとハードウエアとの組み合わせで実装されてもよい。
【0147】
操作1302で、ターゲットサンプルブロック1202、左サンプルブロック1204および上サンプルブロック1206が取得される。これらのブロックは、ローカル輝度予測手法の操作1102でブロック1002、1004および1006が取得されるのと同じやりかたで取得されてもよい。逆DCTは、対応する逆量子化されたDCTブロックに適用されてもよい。操作1102と同様に、ターゲットブロック1202に対応する逆量子化されたDCTブロックのDC係数は、DC係数にダミー値を有する逆量子化されたDCTブロックに逆DCTが適用される前に、ダミー値、例えばゼロ(0)に設定される。また、操作1102と同様に、左ブロック1204および上ブロック1206に対応する逆量子化されたDCTブロックのDC係数は、逆DCTを行う前に置き換えられることはない。
【0148】
操作1304で、三十二(32)のエッジ勾配が以下の表で規定されるように算出される。各勾配は有向である。特に、水平勾配の場合、左ブロック1204とターゲットブロック1202との間のエッジに向けてであり、垂直勾配の場合、上ブロック1206とターゲットブロック1202との間のエッジに向けてである。
【表3】
【0149】
上の表の勾配のそれぞれは、勾配がエッジに向けて増大するか(負の値)、またはエッジに向けて減少するか(正の値)、または一定に維持されるか(ゼロ)に依存してゼロまたは正の値または負の値である。
【0150】
操作1306で、対応する勾配の間の差分は、以下の表で規定されるように、十六(16)の勾配差分として算出される。
【0151】
上の表で、水平勾配および垂直勾配は操作1304の一部として算出される。各勾配差分は、対応する勾配が同等に反対でなければ正の値または負の値であり、同等に反対であればゼロである。
【0152】
操作1308で、十六(16)の勾配差分の和が計算される。
【0153】
操作1310で、操作1308で算出された和の平均が算出される。算出された平均は、ターゲット量子化DCTブロックの量子化DC係数の予測として用いられてもよい。
【0154】
上述したようないくつかの実装では、対応する逆量子化されたDC係数ではなく量子化されたDC係数についての予測が算出されたが、ある実装では、対応する量子化DC係数ではなく逆量子化されたDC係数についての予測が算出される。両方の場合で、予測は、逆DCTによってサンプルに変換される逆量子化されたDCT係数に基づいて同じように算出されることを注意しておく。予測が逆量子化されたDC係数についてのものである場合、実際の逆量子化されたDC係数は逆係数プリプロセッサによって、それ自身が生成した予測と、さらに圧縮されたイメージに符号化されているデルタと、を組み合わせることによって復元されてもよい。いずれにせよ、DC係数を量子化するのに典型的に用いられる小さな量子化ステップサイズのため、予測は十分に正確である。
9.1 基本的なコンピューティングデバイス
【0155】
ここで
図14を参照すると、
図14は、本発明の実施例が実施され得る基本的なコンピューティングデバイス1400を示すブロック図である。コンピューティングデバイス1400と、それらの接続、関係及び機能を含むそのコンポーネントとは、例示のみを意味し、実施例の実装を限定することを意味するものではない。実施例を実装するのに適切な他のコンピューティングデバイスは、異なる接続、関係及び機能を有するコンポーネントを含む異なるコンポーネントを有し得る。
【0156】
コンピューティングデバイス1400は、バス1402、又はメインメモリ1406のアドレス解決を行い、かつ、コンピューティングデバイス1400の種々のコンポーネント間で及び種々のコンポーネントの中でデータを転送するための他の通信機構を含み得る。
【0157】
コンピューティングデバイス1400はまた、情報を処理するための、バス1402と結合した1つ以上のハードウェアプロセッサ1404を含み得る。ハードウェアプロセッサ1404は、汎用マイクロプロセッサ、システム・オン・チップ(SoC)、又は他のプロセッサであり得る。
【0158】
ランダムアクセスメモリ(RAM)又は他の動的ストレージデバイスなどのメインメモリ1406はまた、情報やプロセッサ1404によって実行されるソフトウェア命令を格納するためにバス1402に結合され得る。メインメモリ1406はまた、プロセッサ1404によって実行されるソフトウェア命令の実行中に一時変数又は他の中間情報を格納するために使用され得る。
【0159】
ソフトウェア命令は、プロセッサ1404へアクセス可能な記憶媒体に格納される場合、ソフトウェア命令で特定される動作を実行するように、コンピュータデバイス1400を、カスタマイズされた特定用途のコンピューティングデバイスにする。「ソフトウェア」、「ソフトウェア命令」、「コンピュータプログラム」、「コンピュータ実行可能命令」及び「プロセッサ実行可能命令」の語は、人間が読取り可能であるかどうかを問わず、特定の動作を実行するためにコンピューティングデバイスを指示する任意の機械可読情報を含むものと広く解釈されるべきであり、これらに限定されないが、アプリケーションソフトウェア、デスクトップアプリケーション、スクリプト、バイナリ、オペレーティングシステム、デバイスドライバ、ブートローダ、シェル、ユーティリティ、システムソフトウェア、ジャバスクリプト、ウェブページ、ウェブアプリケーション、プラグイン、組み込みソフトウェア、マイクロコード、コンパイラ、デバッガ、インタプリタ、バーチャルマシン、リンカ、テキストエディタを含む。
【0160】
コンピューティングデバイス1400はまた、静的情報及びプロセッサ1404のためのソフトウェア命令を格納するための、バス1402に結合された読み取り専用メモリ(ROM)1408又は他の静的ストレージデバイスを含み得る。
【0161】
1つ以上の大容量ストレージデバイス1410は、磁性式メモリ、光学式メモリ、半導体メモリ、光磁気メモリ、フラッシュメモリ、又は他の利用可能な大容量ストレージ技術などの固定又は取り外し可能な媒体に、情報及びソフトウェア命令を永続的に格納するために、バス1402に接続され得る。大容量ストレージは、ネットワーク上で共有され得、又は、専用の大容量ストレージであり得る。通常、大容量ストレージデバイス1410(例えば、デバイスに対するメインハードディスク)の少なくとも1つは、オペレーティングシステム、ユーザアプリケーションプログラム、ドライバ、他のサポートファイル、及び全ての種類の他のデータファイルを含む、コンピューティングデバイスの動作を方向付けるためのプログラム本体とデータを格納する。
【0162】
コンピューティングデバイス1400は、バス1402を介して、情報をコンピュータユーザに表示するための液晶ディスプレイ(LCD)又は他の電子的な視覚ディスプレイなどのディスプレイ1412と接続され得る。いくつかの構成では、(例えば、抵抗性、容量性等の)タッチ検知技術を組み込んだタッチ感知表面は、タッチジェスチャ(例えば指又はスタイラス)入力をプロセッサ1404へ通信するために、タッチ検知ディスプレイを形成するようにディスプレイ1412に重畳され得る。
【0163】
アルファベットキー及び他のキーを含む入力デバイス1414は、情報及びコマンドの選択をプロセッサ1404へ通信するためにバス1402へ接続され得る。アルファベットキー及び他のキーに加えて又は代わりに、インプットデバイス1414は、例えばパワー(オン/オフ)ボタン、「ホーム」ボタン、ボリュームコントロールボタン等の、1つ以上の物理的なボタン又はスイッチを含み得る。
【0164】
ユーザ入力デバイスの他の種別は、プロセッサ1404へ方向情報やコマンドの選択を通信するため、及び、ディスプレイ1412上でのカーソルの移動を制御するためのマウス、トラックボール、又はカーソル方向キーなどのカーソル制御1416であり得る。当該入力デバイスは、通常、デバイスが平面上の位置を特定できるようにする第1軸(例えば、x)と第2軸(例えば、y)の二軸の2つの自由度を有する。
【0165】
図14に図示された構成のような、1つ以上のディスプレイ1412、入力デバイス1414、及びカーソルコントロール1416が、コンピューティングデバイス1400の外部コンポーネント(すなわち周辺デバイス)であるいくつかの構成に対し、他の構成において、ディスプレイ1412のいくつか又は全て、入力デバイス1414及びカーソルコントロール1416は、コンピューティングデバイス1400の形成因子の一部として統合される。
【0166】
ここで開示されるシステム、方法、及びモジュールの機能は、メインメモリ1406に含まれる1以上のソフトウェア命令の1以上のプログラムをプロセッサ1404が実行することに応じて、コンピューティングデバイス1400によって実行され得る。そのようなソフトウェア命令は、ストレージデバイス1410などの他の記憶媒体からメインメモリ1406へと読み込まれ得る。メインメモリ1406に含まれるソフトウェア命令の実行は、プロセッサ1404に実施例の機能を発揮させる。
【0167】
実施例の機能及び動作がコンピューティングデバイス1400のソフトウェア命令を用いて全体的に実施される一方、ハードワイヤード又はプログラマブル回路(例えばASIC、FPGA等)が、目下の実装の要件に従って、他の実施形態において適所で又は機能を発揮するためのソフトウェア命令との組み合わせで用いられ得る。
【0168】
ここで使用される"記憶媒体"の語は、コンピューティングデバイスを特定の様式で動作させるデータ及びソフトウェア命令の少なくとも1つを格納する非一時的な媒体として参照される。そのような記憶媒体は、不揮発性の媒体及び/又は揮発性の媒体を備えてもよい。不揮発性媒体は、ストレージデバイス1410などの、例えば、不揮発性ランダムアクセスメモリ(NVRAM)、フラッシュメモリ、光学ディスク、磁性ディスク、又は半導体ドライブを含む。揮発性媒体はメインメモリ1406などの動的メモリを含む。記憶媒体の共通の形式は、例えば、フロッピーディスク、フレキシブル・ディスク、ハードディスク、半導体ドライブ、磁性テープ若しくは任意の他の磁性データ記憶媒体、CD-ROM、任意の他の光学データ記憶媒体、ホールのパターン(空孔)を複数有する任意の物理的な媒体、RAM、PROM及びEPROM、フラッシュEPROM、NVRAM、フラッシュメモリ、任意の他のメモリチップ、又はカートリッジを含む。
【0169】
記憶媒体は、送信媒体とは区別されるものの、当該送信媒体と連結して使用され得る。送信媒体は、記憶媒体間で情報を転送することに使用される。例えば、送信媒体は、バス1402を備える有線を含む同軸ケーブル、銅線、及び光ファイバーを含む。送信媒体はまた、電波及び赤外データ通信中に生成されるものなどの、音波又は光波の形式をとることもできる。
【0170】
媒体の種々の形態は、実行のためにプロセッサ1404への1以上のソフトウェア命令の1以上のシーケンスの伝達に用いられ得る。例えば、ソフトウェア命令は、リモートコンピュータの磁性ディスク又は半導体ドライブ上でまず伝達され得る。リモートコンピュータは、その動的メモリへソフトウェア命令をロードし、モデムを用いて電話線を介してソフトウェア命令を送信し得る。コンピューティングデバイス1400のローカルなモデムは、電話回線でデータを受信し、データを赤外線信号に変換するための赤外線送信機を用い得る。赤外線検出機は赤外線信号で運搬されたデータを受信することができ、適切な回路がそのデータをバス1402に乗せる。バス1402は、プロセッサ1404がソフトウェア命令を読み出して実行するメインメモリ1406にデータを運搬する。メインメモリ1406によって受信されるソフトウェア命令は、プロセッサ1404によって実行される前又は実行された後の何れかにストレージデバイス1410に選択的に格納され得る。
【0171】
コンピューティングデバイス1400はまた、バス1402へ接続される通信インタフェース1418を含み得る。通信インタフェース1418は、ローカルネットワーク1422(例えば、イーサネットネットワーク、無線ローカルエリアネットワーク、セルラー電話ネットワーク、Bluetooth無線ネットワーク等)へ接続された、有線又は無線のネットワークリンク1420へ接続する双方向データ通信を提供する。通信インタフェース1418は、種々の種別の情報を表すデジタルデータストリームを伝達する電気信号、電磁信号、又は光信号を送受信する。例えば、通信インタフェース1418は、有線のネットワークインタフェースカード、一体化された無線アンテナを有する無線ネットワークインタフェースカード、又はモデム(例えば、ISDN、DSL、又はケーブルモデム)であり得る。
【0172】
ネットワークリンク1420は、通常、1以上のネットワークを通じて、他のデータデバイスへのデータ通信を提供する。例えば、ネットワークリンク1420は、ローカルネットワーク1422を通じて、ホストコンピュータ1424への又はインターネットサービスプロバイダ(ISP)1426によって運用されるデータ装置への接続を提供し得る。ISP1426は順に、「インターネット」1428として通常参照されるワールド・-ワイド・パケットデータ通信ネットワークを通じてデータ通信サービスを提供する。ローカルネットワーク1422及びインターネット1428は、デジタルデータストリームを伝達する電気信号、磁性信号、又は光信号を使用する。コンピューティングデバイス1400への及びコンピューティングデバイス600からのデジタルデータを伝達する、種々のネットワークを通じた信号、及び、ネットワークリンク1420上の、及び通信インタフェース1418を通じた信号は、送信媒体の例示の形式である。
【0173】
コンピュータシステム1400は、ネットワーク、ネットワークリンク1420、及び通信インターフェース1418を通じて、プログラムコードを含む、メッセージを送信し、データを受信し得る。例えば、サーバ1430は、インターネット1428、ISP1426、ローカルネットワーク1422、及び通信インターフェース1418を通じて、アプリケーションプログラムに対して要求されるコードを送信してもよい。
【0174】
受信コードは、受信した際にプロセッサ1404によって実行されてもよく、及び、後の実行のためにストレージデバイス1410又は他の不揮発性のストレージに格納されてもよく、或いは、そのいずれもが行われ得る。
9.2 基本的なソフトウェアシステム
【0175】
図15は、コンピューティングデバイス1400の動作を制御する、採用され得る基本的なソフトウェアシステム1500のブロック図である。ソフトウェアシステム1500と、それらの接続、関係及び機能を含むそのコンポーネントとは、例示のみを意味し、実施例の実装を限定することを意味するものではない。実施例を実装するのに適切な他のソフトウェアシステムは、異なる接続、関係及び機能を有するコンポーネントを含む異なるコンポーネントを有し得る。
【0176】
ソフトウェアシステム1500は、コンピューティングデバイス1400の動作を方向付けるために提供される。システムメモリ(RAM)1406及び固定ストレージ(例えば、ハードディスク)1410に格納され得るソフトウェアシステム1500はカーネル又はオペレーティングシステム(OS)1510を含む。
【0177】
OS1510は、プロセス、メモリ配置、ファイル入力及び出力(I/O)、及びデバイスI/Oの実行を管理することを含む、コンピュータ動作のローレベルの態様を管理する。1502A, 1502B, 1502C ... 1502Nとして表される1以上のアプリケーションプログラムは、システム1500による実行のために"ロードされ"うる(例えば、固定ストレージ1410からメモリ1406へ転送される)。アプリケーション又はデバイス1500上での使用を意図した他のソフトウェアはまた、ダウンロード可能なコンピュータで実行可能な命令のセットとして、例えば、インターネット上の場所(例えば、ウェブサーバ、アップストア又はオンラインサービス)からダウンロード及びインストールするために格納され得る。
【0178】
ソフトウェアシステム1500は、グラフィカルな(例えば、「ポイント・アンド・クリック」又は「タッチジェスチャ」)形式で、ユーザコマンド及びデータを受信するためのグラフィカルユーザインタフェース(GUI)1515を含む。これらの入力は順に、オペレーティングシステム1510及びアプリケーションプログラム1502の少なくとも1つからの命令に従ってシステム1500によって作動され得る。GUI1515はまた、ユーザが追加の入力を供給したり、又は、セッションを終了させたりする(例えば、ログオフする)とすぐに、OS1510及びアプリケーション1502からの動作結果を表示するように務める。
【0179】
OS1510は、デバイス1400のベアハードウェア1520(例えば、プロセッサ1404)上で直接的に実行し得る。代替的に、ハイパーバイザ又は仮想マシンモニタ(VMM)1530は、ベアハードウェア1520及びOS1510の間に割り込んで設けられ得る。この構成において、VMM1530はデバイス1400のOS1510及びベアハードウェア1520の間のソフトウェア"クッション"又は仮想レイヤとして作動する。
【0180】
VMM1530は、1つ以上の仮想マシンインスタンス(「ゲストマシン」)をインスタンス化し実行する。各ゲストマシンは、OS1510などの「ゲスト」オペレーティングシステムと、ゲストオペレーティングシステム上で実行するように設計された、アプリケーション1502などの1つ以上のアプリケーションとを含む。VMM1530は、仮想オペレーティングプラットフォームを有するゲストオペレーティングシステムを提供し、ゲストオペレーティングシステムの実行を管理する。
【0181】
いくつかの例において、VMM1530は、デバイス1400のベアハードウェア1520上で直接実行されているかのように、ゲストオペレーティングシステムを実行することを許容し得る。これらの例において、ベアハードウェア1520上で直接的に実行するように構成されたゲストオペレーティングシステムの同一のリビジョンはまた、修正又は再構成なしにVMM1530上で実行され得る。すなわち、VMM1530は、いくつかの例において、ゲストオペレーティングシステムに対する完全なハードウェアとCPU仮想化とを提供し得る。
【0182】
他の例において、ゲストオペレーティングシステムは、効率的にVMM1530上で実行されるように特別に設計されるか、又は、構成されてもよい。それらの例において、ゲストオペレーティングシステムは、仮想マシンモニタ上で実行する「気付かれるもの」である。すなわち、VMM1530は、いくつかの例において、ゲストオペレーティングシステムに対して準仮想化を提供することができる。
10.0 拡張及び代替例
【0183】
前述した明細書において、本発明の例示的実装について多数の特定の詳細に関して説明した。しかしながら、詳細は手元の実装の要件に従って実装ごとに変化し得る。例示的な実装は、従って、限定的な意味というよりはむしろ例示とみなされるものである。