ビデオ処理技術分野における問題例
今日使用されているビデオ処理技術は、長年にわたるこうした技術の発展を追跡することによって最適に理解される。発展の様々な段階において、その時々で業界に直面する問題に取り組むために、機能が追加されてきた。互換性および整合性を維持するために、解決のために機能が設計された問題がその後消え失せても、後の技術は、こうした機能の一部を維持している場合がある。その結果、現在の技術は、様々なときに業界に直面する一連の以前の問題、標準グループ間の折衷、変化する技術ベースの制約および機会などを反映する、こうした歴史に基づく機能の凝集と見なすことができる。
ビデオ処理技術の上述した性質の結果、その分野で働く者が、ビデオ処理技術のいくつかの局面に関する固定した発想を開発してきた。あるビデオ処理情報を解釈する方法に関する固定概念、およびこうしたビデオ情報を「正しく」処理する方法に関する固定概念がある。本発明者が認識するように、こうした固定概念の多くは、あまり根拠がなく、再考の必要がある。
固定概念の中の主要部分は、一般に、ビデオ情報は、ブロードキャストソース、記憶媒体(DVDディスクなど)、または他のソースのいずれかから受信された形で処理されるべきであることである。しかし、多くのビデオ標準は、ビデオ情報が表示の前に処理されるという見込みで設計されてはいない。例えば、従来のテレビは、複雑な処理機能に対応しておらず、これらの装置は、単に、ビデオ情報を受信し、表示するだけである。したがって、ビデオ情報が受信される形は、こうした情報の効率的な処理に容易に対応しない可能性がある。
その結果、容認されている多くのビデオ情報の形に対して標準の処理アルゴリズムを直接適用することによって、様々なアーティファクト(artifact)が生成される。当業者は、時々これらのアーティファクトに気付いている。しかし、こうした専門家は、使用されている技術の根本的な前提を問題として取り上げるのではなく、問題を是正するために、しばしばローカルパッチに頼ってきた。こうした解決策は、用途に固有のいくつかの状況における問題は隠すかもしれないが、一般には問題を解決しない。
例えば、ビデオ情報は、ビデオ処理パイプラインによって、非線形の形で受信され、インターレースされ、色度サブサンプリング(chroma subsampled)され、輝度関連の色空間(luma−related color space)(Y’U’V’情報など)の何らかの変形で表されることが多い。(「非線形」という用語は、受信信号と、その信号から生成された、結果として得られた出力明度との間に非線形の関係があることを意味し、前の文章での他の用語については、以下で十分説明する)。専門家は、様々な線形型処理アルゴリズムをこの情報に適用して、例えばビデオ情報をサイズ変更したり、ビデオ情報を他の情報と組合せ(例えば合成)たりすることによって、所定の方法でそれを変更しようと試みる可能性がある。本発明者が認識するように、これらのアルゴリズムの多くは、この性質の非線形ビデオ情報を処理するとき、最適な結果、または正しい結果すら提供しない。インターレース済みの色度サブサンプリングされた4:2:2または4:2:0の情報(以下で定義される)の処理は、こうした低品質の結果を悪化させる。例えば、4:2:2または4:2:0の情報の処理は、ビデオ処理パイプラインの様々な段階を通じて誤差の伝搬をもたらし得る。
処理済みの結果の不完全性は、肉眼で見える場合も見えない場合もあるが、様々なアーティファクトとなって現れる。この場合もまた、当業者は、結果の品質の低さに気付いてはいるが、その原因を識別していない場合がある。これは、専門家が多くのビデオ符号化標準の複雑な性質を完全には理解していないことによる場合がある。また、専門家は、非線形情報を処理するのに線形アルゴリズムを使用していることを知らない場合もある。実際に、一部の場合、専門家は、間違って、線形情報を扱っていると確信している場合がある。また、ビデオ処理技術分野における一般の焦点は、必ずしもこうした情報の中間処理および補正ではなく、画像情報の生成を目標としてきた。
線形型アルゴリズムを非線形情報に適用することは、ビデオ処理技術分野における、上述した固定した発想の一例にすぎない。以下で説明するように、ディザリングの場合など、最適な結果を生成しない他の多くの技術が修正されるようになった。例えば、専門家は、少量のランダムノイズを入力画像情報に追加し、次いで結果として得られたノイズ画像を量子化することによって、一部のディザリング量子化アルゴリズム(dithering−quantization algorithm)によってもたらされるアーティファクトを是正しようと試みる場合がある。これらの技術は、次いでノイズ画像と量子化された結果との間の差を計算することによって、量子化誤差を推定する。これは、ディザリングアーティファクトを直すという効果はあり得るが、元の画像情報に加えられたランダムノイズの量に比べて出力画像のノイズを増やしてしまうという代償がある。
慣習や慣れのために、重大ではあるが捕らえにくい欠点を認識することなく、ビデオ処理技術分野において引き続き適用される定着した考えの例は他にも数多く存在する。本明細書に記載された改良の一般的な主題は、代替の解決策の設計と結合された、こうした凝り固まった考え方の再考を伴う。
ビデオ処理の分野は、用語が豊富である。したがって、前付として、読者を助けるために、以下に、ビデオ処理分野におけるいくつかのトピックの概論について述べる。例えば、これまでに上記で使用されたいくつかの用語(線形、インターレース、輝度、色度サブサンプリングなど)について、以下で定義する。用語の一般的な事項として、「画像情報」という用語は、本文書を通じて、それだけには限定されないが、動画情報を含めて、任意の種類の可視出力としてレンダリングされ得る広範囲のクラスの情報を表すために使用される。
背景概念
・色空間およびその関連についての検討
色は、3つの成分を使用して指定することができる。個別の色成分を使用した色コンテンツの伝達に依存する画像ストリームは、コンポーネント映像(component video)と呼ばれる。共通仕様の1つでは、赤、緑、および青(RGB)の成分を使用して色を定義する。より正式には、RGB成分は、所与のスペクトルに知覚的に同等の色を作り出す基準ランプの比例強度を示す。一般に、RGB色空間は、その原色およびその白色点に関連付けられている色度値によって指定することができる。白色点とは、基準白色に関連付けられている色度を指す。
カラー画像を再生する電子装置は、3つのタイプの光源を提供することによって、人間の視覚の三原色の性質を補う。3つのタイプの光源は、人間の観察者にとって異なる色として感知される異なるスペクトル応答を生成する。例えば、ブラウン管(CRT)は、異なる色を作り出すために赤色、緑色、および青色の燐光体を提供し、したがって、上述したRGB色空間の何らかの変形体を補う。他の技術は、燐光体を使用するのではなく、少なくとも3種類の光を発する光源を使用して色を再生する。
しかし、RGB符号化モデルは、画像情報の伝達に効率的な選択肢ではなく、一部のより古い標準に十分準拠していない。したがって、画像情報は、一般に、RGB以外の何らかの符号化モデルを使用して、目的の装置に送信される。画像情報は、受信されると、表示装置によって、RGB関連の色空間に内部で変換されて表示され得る。「ガンマの検討」という見出し下で後述されるように、各R、G、Bの成分データは、R’値、G’値、B’値と呼ばれる、そのガンマ補正前の形(pre−gamma corrected form)によって表すことができる。(一般に、慣習通り、プライム記号は、この開示では非線形情報を示している)。
この点に関する共通の方式は、輝度関連の成分(Y)および色度関連の成分を参照することによって色を定義することである。輝度とは、一般に、感知される光の強度(明度)を指す。輝度は、「輝度」(Y’)と呼ばれるその非線形の対応物を得るために、(「ガンマの検討」下で後述するようにして)ガンマ補正前の形で表すことができる。色度成分は、輝度に対する画像情報の色コンテンツを定義する。例えば、デジタル領域において、記号「Cb」は、差B’−Y’の尺度がnビットの整数(一般に8ビット値で−127・・・128の範囲からの)の表現に相当し、記号「Cr」は、差R’−Y’の尺度がnビットの整数の表現に相当する。記号「Pb」は、Cbのアナログの対応物を指し、記号「Pr」は、Crのアナログの対応物を指す。また、記号PbおよびPrは、公称範囲[−0.5・・・0.5]のCbまたはCrのデジタル正規化形を指し得る。CbCrおよびPbPrによって定義される成分画像情報は、非線形の情報を表すため、形式的にプライム記号が付されてもよい(Cb’Cr’およびPb’Pr’など)。しかし、Pb、Pr、Cb、またはCrは常に非線形データを指すため、プライム記号での表記は、便宜上および慣習上、省略されることが多い(例えば、Y’Pb’Pr’の代わりに、表記Y’PbPrが使用される)。
色コンテンツは、(上述したコンポーネントビデオではなく)コンポジットビデオとして伝えることもできる。コンポジット信号は、輝度および色度情報を1つの信号に結合する。例えば、符号化システムY’UVにおいて、Uは、B−Yの変倍バージョンを表し、Vは、R−Yの変倍バージョンを表す。次いで、これらの輝度および色度の成分は、単一の信号を提供するために処理される。符号化システムY’IQは、所定の方法でU成分およびY成分を変換することによって形成された別のコンポジット符号化システムを定義する。業界が歴史的にY関連の色空間(Y’CbCr、Y’PbPr、YUV、YIQなど)の使用を奨励してきた1つの理由は、こうした色空間での色画像情報の低減は、RGB色空間で表される画像情報に比べてより容易に行うことができるからである。こうした色空間は、白黒画像情報用に開発された古い標準との下位互換性もある。「輝度関連の情報」という用語は、一般に、明度関連の成分および色度関連の成分を有する任意の色空間を指し、上述した色空間の少なくともすべてを含む。
一般に、1つまたは複数のマトリックスアフィン変換を使用して、色コンテンツをある色空間から別の色空間に変換することができる。より正式には、メタメリズムの特性によって、ある1組の色空間係数を別の1組のマッチング関数によって表すことができるようになる(ここでは、「メタメリズム」とは、同じ1組の色空間係数にマッピングし、したがって知覚的に同じであるように見える、すなわち同じ色に見える2つのスペクトルを指す)。
・ガンマの検討
ブラウン管(CRT)は、線形応答伝達関数を有していない。言い換えれば、CRTに適用された電圧と、CRTによって生成された、結果として得られた輝度との関係は、一次関数を定義しない。より詳細には、CRTの予想される理論的な応答は、5/2べき法則に比例する応答を有し、つまり、所与の入力電圧「V」について、結果として得られるCRTの輝度「L」は、L=V2.5として計算することができる。伝達関数は、本明細書では「ガンマ応答関数」とも呼ばれ、電圧信号の指数は、「ガンマ」と呼ばれる。
一方、画像情報がカメラによって捕捉されるか、3Dレンダリングシステムによって生成されるとき、画像情報は、線形RGB色空間で表され、これは、受信信号と出力明度との間に線形の関係があることを意味する。カメラの直線性と表示の非直線性との間の格差に対処するために、カメラは、従来、ガンマの逆数を適用することによってカメラが生成した信号を予め補正する。言い換えれば、カメラの伝達関数(時として符号化伝達関数と呼ばれる)は、CRT輝度応答のほぼ逆関数である。符号化伝達関数(または逆ガンマ)の適用の結果は、非線形の形の「ガンマ補正済み」画像情報を生成することである。非線形信号がディスプレイ装置を通過するとき、線形に近い輝度が生成される。再度、上述された表記によれば、非線形(または補正前の)画像情報は、R’G’B’やY’CbCr(この場合、Cb成分およびCr成分へのプライム記号は暗に含まれている)など、その成分をプライム記号で表記することによって示される。
したがって、画像情報をその輝度−色度非線形(補正済み)形式で格納し、送信することが一般的で標準的となっている。互換性を維持するために、CRT上に表示される信号を生成する任意のソースは、まず、逆関数を信号に適用しなければならない。
特別な考慮として、伝達関数を使用した画像情報の符号化では、一般に、特別な近似関数を関数の低電圧部分に適用する。つまり、符号化技術は、一般に、画像センサでのノイズの影響を低減するために、この部分に線形セグメントを提供する。このセグメントは、定義済みの「つま先型スロープ(toe slope)」を有する「線形テール(linear tail)」と呼ばれる。これらの装置は、その物理的な構造のために0に近い線形の輝度−電圧応答を有するため、このセグメントは、実際のCRT上に表示される画像情報の品質を向上させる。
・輝度情報に対する色度情報のサンプリングおよびアラインメント
人の視覚は、光の色度成分より光の強度の変化に対してより反応する。符号化システムは、この事実を利用して、輝度情報(Y’)の量に比べて、符号化される色度(CbCr)情報の量を低減する。この技術は、色度サブサンプリングと呼ばれる。このサンプリング方式を表すために、総称してL:M:Nと表される数字表記を使用することができる。この場合、「L」は、輝度成分(Y’)のサンプリング基準係数を表し、「M」および「N」は、輝度サンプリング(Y’)に対する色度サンプリング(それぞれCbおよびCr)を指す。例えば、表記4:4:4は、輝度サンプルごとに色度サンプルが1つあるY’CbCrデータを指すことができる。表記4:2:2は、(水平方向に)2つの輝度サンプルごとに色度サンプルが1つあるY’CbCrデータを指すことができる。表記4:2:0は、2×2クラスタの輝度サンプルごとに色度サンプルが1つあるY’CbCrデータを指すことができる。例えば、表記4:1:1は、(水平方向に)4つの輝度サンプルごとに色度サンプルが1つあるY’CbCrデータを指すことができる。
符号化方式が色度情報より多くの輝度情報を提供する環境では、デコーダは、提供された色度情報に基づいて補間を行うことによって、「欠けている」色度情報を再構築することができる。より一般には、ダウンサンプリングは、最初の1組の画像サンプルと比較してより少ない画像サンプルを生成する任意の技術を指す。アップサンプリングは、最初の1組の画像サンプルと比較してより多い画像サンプルを生成する任意の技術を指す。したがって、上述した補間は、アップサンプリングの一種を定義している。
また、符号化方式は、色度サンプルを対応する輝度サンプルに空間的に「合わせる」方法を指定する。符号化方式は、この点で異なる。色度サンプルが輝度サンプルの「上に」直接配置されるように、色度サンプルを輝度サンプルに合わせる。これは、コサイティング(cositing)と呼ばれる。他の方式は、輝度サンプルの2次元アレイ内の隙間空間に色度サンプルを配置する。
・量子化の検討
量子化は、個別の数値が色成分(または白黒情報)の信号振幅に割り当てられる方法を指す。デジタル領域において、数値は、所定のステップ数で所定の範囲(範囲全体)の色空間値にわたる。例えば、各成分が0から255までの値と想定できるように、255のステップを使用して各成分値を記述するのが一般的である。8ビットを使用して各色値を表すのが一般的である。
高精度数からより低い精度数に変換することによって、時として様々なアーティファクトが生成され得る。この問題に対処するために、Floyd−Steinbergアルゴリズムなど、様々な誤差分散アルゴリズムが考案されている。誤差分散アルゴリズムは、量子化の四捨五入の影響によって生成された誤差を隣接するピクセル位置に分散させることができる。Floyd−Steinbergアルゴリズムに関するこれ以上の背景情報は、下記の発明を実施するための最良の形態の本文内に記載されている。
・インターレース表現対プログレッシブ(Progressive)表現の検討
もともと、テレビは、トップダウンプログレッシブスイープ式(top−down progressive sweep fashion)で白黒画像のみを表示していた。現在、従来のテレビ信号は、インターレース式でスキャンされている。インターレースでは、ビデオフレームの第1のフィールドが捕捉され、次いでそのすぐ後に、ビデオフレームの第2のフィールドが捕捉される(例えばその後1/50または1/60秒)。第2のフィールドが第1のフィールドの走査線間の隙間空間に情報を捕捉するように、第2のフィールドは、第1のフィールドに対してわずかな量だけ垂直方向にオフセットされる。ビデオ情報は、人間の閲覧者によって概ね情報の連続した単一フローとして感知されるように、第1および第2のフィールドを次々に表示することによって表される。
しかし、コンピュータモニタおよび他の表示機器は、インターリーブ式ではなく、プログレッシブ式で画像情報を表示する。したがって、装置がインターレースされた情報をコンピュータモニタ上に表示するには、反対のフィールドのデータを補間すること(「デインターレース」と呼ばれるプロセス)によって、プログレッシブフレームをインターレースフィールドレートで表示する必要がある。例えば、インターレースされたフィールドを表示するには、両側のフィールドを検査することによって、線間の空間的位置の「欠けている」データを補間する必要がある。「プログレッシブフォーマット」という用語は、一般に、任意のノンインターレースの画像フォーマットを指す。
(例えばビデオカメラからの)画像情報は、一般的には、インターレース形式で格納され、例えば、第1のフィールドは、第2のフィールドとは(意味的に)別に格納される。画像情報が単にインターレース式TVディスプレイに表示される場合、そのY’UVインターレース情報をCRTに直接渡すことができる。CRTは、内部で、Y’UV情報をR’G’B’情報に変換し、この信号を使用して出力銃(output gun)を駆動させる。
インターレースは、画像情報の有効な垂直解像度を倍にするため、有利である。しかし、インターレースも、アーティファクトをもたらす可能性がある。これは、オブジェクトは60hzで動くが、インターレース式の表示では、30hzごとに情報の半分しか表示されないからである。この現象によってもたらされる、結果として得られたアーティファクトは、時として「フェザリング」と呼ばれる。アーティファクトは、特に、動作が激しいビデオの表示に現れ、そこでは、オブジェクトは、奇数線と偶数線に別れて現れてしまう。
上記の黒点のトピックのそれぞれに関する追加情報は、いくつかの入門書に記載されている(例えば、非特許文献1参照)。
Charles Poyton's well-regarded Digital Video and HDTV (Morgan Kaufmann Publishers, 2003)
以下の説明では、画像処理パイプラインを向上させる様々な方式を記載する。これらの方式は、当技術分野での固定した概念の再考に基づいて画像情報を処理する新しい方法を提案する。(セクションAに記載した)第1のクラスの改良は、抽象的に、任意の画像処理パイプラインに適用することができる。(セクションBに記載した)第2のクラスの改良は、より具体的に、画像処理パイプラインの技術固有または実装固有の用途のいくつかに適用される。
一例の方式によれば、画像処理パイプラインによって受信された画像情報は、線形形式に変換され、次いで、その形式で処理される。一実装形態例では、例えば、受信された輝度関連の画像情報(Y’CbCr)は、線形RGB形式に変換され、その形式で処理される。処理タスク例には、デインターレース、サイズ変更(変倍)、合成、アルファブレンディング、エッジ検出、シャープニングなどがある。画像情報を(非線形空間に対して)線形空間で処理することは、一般に、アーティファクトが少ない出力結果を生成するため、相当な利点がある。
別の方式例によれば、画像情報は、フルチャネル(4:4:4)および高精度フォーマットに変換され、そのフォーマットで処理され、その後、情報がより低い精度に量子化される。より高い精度情報は、浮動小数点フォーマットで表すことができる。フルチャネルおよび高精度情報の処理は、アーティファクトが少ない出力結果を生成し、情報がパイプラインで処理されるにつれて、色度解像度の劣化を低減し得るため、有利である。
別の方式例によれば、4:2:0インターレース済み画像情報を処理するために、特別な対策が提供される。こうした特別な対策は、アップサンプリング操作をデインターレース操作と統合する方法を提供する。この方式は、いくつかの理由のために有益である。例えば、この方式は、例えば、いわゆる「クロマバグ」処理アーティファクトを生成することなく、4:2:0情報が正しく処理されることをより確実にする。
別の方式例によれば、画像情報を、理論的に正しい線形空間ではなく、擬似線形空間に変換するために、特別な伝達関数を適用することができる。次いで、(非線形信号に適用することを考慮に入れるためにこれらのアルゴリズムを変更する必要なく)線形型アルゴリズムを使用して、画像情報に対する処理をこの擬似線形空間で行う。この方式は、利用可能な処理ハードウェアを使用してより迅速に行うことができる数学的演算を伴うために、有益である。また、この方式は、誤り訂正機構をこれらのアルゴリズムに組み込むことによって、画像処理アルゴリズムを変更する必要性をなくす。誤り訂正機構の目的は、非線形データを処理するために線形アルゴリズムを使用する負の効果を最低限に抑えることであった。しかし、これらの誤り機構の設計およびアプリケーションは、多くの場合、元の処理アルゴリズムより複雑になっていった。
別の方式例によれば、一意の誤差分散アルゴリズムが適用される。元の画像情報のピクセルごとに、アルゴリズムは、元の画像、ノイズ情報、および誤差項によって定義された合計を量子化する。これによって、その特定のピクセルの量子化された値が得られる。次いでアルゴリズムは、量子化された値と元の値との間の差を計算することによって、処理されるべき次のピクセルの誤差項を計算する。この方式は、本質的にノイズを元の画像情報に追加し、ノイズ画像情報を量子化する当技術分野の既知の方式より優れており、これらの既知の技術は、次いで、元の画像情報ではなく、ノイズ画像情報を参照して誤差項を計算する。したがって、本明細書に開示された方式とは異なり、既知の技術は、それに追加されたノイズ情報に比例して、元の画像情報を劣化させる。別の改良として、本明細書に記載された方式は、ノイズ生成器自体が宛先画像情報においてアーティファクトを生成しないように、反復期間が十分長く、十分に「ノイズのような」疑似ランダムの特徴を有するノイズ生成器を使用する。
別の方式によれば、変倍操作を行うために、Catmull−Romフィルタの変形が使用される。この方式は、画像情報をサイズ変更するのに必要なフィルタカーネルの数、および各カーネルによって必要とされるタップ数を計算し、次いでフィルタカーネルを事前に計算することを伴う。次いで、これらのフィルタカーネルは、画像情報に適用される。より詳細には、カーネルを、画像情報の行や列に周期的に適用することができる。この方式は、いくつかの理由のために有利である。例えば、動的に計算されたフィルタカーネルの使用によって、既知のいくつかの用途に見られるアーティファクトの一部が低減する。フィルタカーネルの事前の計算は、フィルタの実際の適用を促進するため、有利である。周期的に適用されるカーネルの最低限の組を適切に使用することによって、追加の効率関連の利点がある。
別の方式によれば、画像処理パイプラインを実施するためのコードの生成の機能について記載されている。この機能は、どのような操作をパイプラインが実行すべきなのかを指定する要件を受信し、次いで、こうした機能を実施するためにこうしたモジュールのライブラリからコードモジュールを選択的にアセンブルする。この機能は、必要ではないモジュールをライブラリから組み込まない。この方式は、多くの理由のために有益である。例えば、より効率的で、したがってより速く稼働し得るコードの生成の一助になる。
最後に、別の方式は、グラフィックス・プロセッシング・ユニット(GPU)を使用して、画像処理パイプラインのいくつかの態様、または画像処理パイプラインにおける機能のすべてを実施する。特定の実装形態は、画像フィルタリングを実行するために、ピクセルシェーダ(GPU内のデジタル信号プロセッサ(DSP))を適用する。ある場合には、ピクセルシェーダの1つまたは複数のテクスチャユニットを、フィルタカーネルの重みに割り当てることができ、1つまたは複数の他のテクスチャユニットを、(カーネルのタップに関連付けられている)同じ入力画像情報の異なるデルタシフトバージョン(delta−shifted version)に割り当てることができる。この方式は、ピクセルシェーダのベクトル処理機能のために、CPU実装に比べて潜在的により大きい処理速度および処理容量を提供するため、有益である。
この説明では、方式の追加の特徴およびそれに付随する利益について記載する。
専門用語に関して、「画像処理」という用語は、任意の視覚形式でユーザによって消費され得る任意の種類の情報を含むものである。画像処理は、アナログフォーマット、デジタルフォーマット、またはデジタルフォーマットとアナログフォーマットの組合せなど、任意のフォーマットで表される情報を表すことができる。画像情報は、静止画像情報(デジタル写真など)および/または可動情報(動画情報など)を表すことができる。画像情報の用語の使用によって、さらにこれ以上の変形が企図される。
「画像処理パイプライン」という用語は、画像情報を処理する任意の機能を指す。パイプラインは、連続して、すなわち次々に1つの画像情報に対して作用する少なくとも2つの機能構成要素を含む。
「線形化」という用語は、画像情報を、その非線形の補正前の形式から線形形式に変換することを指す。「非線形化」という用語は、線形化の逆の操作を指す。
「輝度関連の画像情報」という用語は、明度関連の成分(Y’など)および色度成分を有する画像情報を指す。「輝度関連の色空間」という用語は、輝度関連の画像情報(Y’CbCrなど)を形成する複数の標準のうちの任意の1つを指す。
一般に、記載した主題の構造的な側面に関して、本明細書に記載されている任意の機能は、ソフトウェア、ファームウェア(固定論理回路など)、手動処理、またはこれらの実装の組合せを使用して実施することができる。「モジュール」、「機能」、および「論理」という用語は、本明細書で使用する場合、一般に、ソフトウェア、ファーム、またはソフトウェアとファームウェアとの組合せを表す。ソフトウェアの実装の場合、モジュール、機能、または論理という用語は、1つ又は複数の処理装置(CPUなど)上で実行されるときに指定されたタスクを実行するプログラムコードを表す。プログラムコードは、1つまたは複数のノンリムーバブルおよび/またはリムーバブルコンピュータ可読メモリ装置に格納することができる。
この主題の手順の側面に関して、いくつかの操作は、ある順序で実行される別個のステップを構成するものとして記載されている。こうした実装は、例であり、非限定的なものである。本明細書に記載されたいくつかのステップは、まとめて、単一の操作で実行することができ、いくつかのステップは、この開示に記載されている例で使用される順序とは異なる順序で実行することができる。
この開示は、以下の内容を含む。
A.ビデオ処理パイプラインの一般の改良例
A.1.画像情報のRGB(線形)色空間での処理
A.2.パイプライン内での浮動小数点フルチャネル画像情報の使用
A.3.4:2:0画像情報の特別な対策
A.4.画像情報の擬似線形空間での処理
A.5.誤差分散アルゴリズムの改良
A.6.フィルタカーネルの動的計算
B.ビデオ処理パイプラインの実装関連の改良例
B.1.パイプライン処理コードの最適な生成
B.2.画像処理を実行するためのGPUの一般的な使用
B.3.ピクセルシェーダ関連の改良
C.コンピュータ環境例
A.ビデオ処理パイプラインの一般の改良例
A.1.画像情報のRGB(線形)色空間での処理
図1は、画像情報(ビデオ情報など)を処理する画像処理パイプライン例100を示している。概要として、最上行のモジュールは、様々なソース(カメラ、スキャナ、ディスク、記憶媒体、デジタルネットワークなど)のうちの任意のものから画像情報を受信し、次いで画像情報を、処理するための形式に変換する。図の中央の大きいモジュールは、処理済みの画像情報を生成する、こうした処理を表す。最下行のモジュールは、処理済みの画像情報を、宛先サイト(テレビ、コンピュータモニタ、記憶媒体、デジタルネットワークなど)への出力に適したどんな形式にも変換する。
この開示の個別のサブセクションで識別されている、画像処理パイプライン100に特有の有利な態様がいくつかある。このサブセクションは、画像情報を線形形式で処理することに焦点を置く。他の改良は、画像情報を、RGB色空間内のプログレッシブ(デインターレース)形式でさらに処理するものに起因する。それに対して、当技術分野での一般的な手法は、4:4:4または4:2:2のインターレース済みY’UV情報の処理を行うことである。本発明者が理解するように、画像情報を非線形の色空間で処理することによって、様々なアーティファクトがもたらされる。図1のパイプライン100で具体化された手法は、これらの問題を克服する。
次に、図1に示されている各モジュールについて説明する。
モジュールの最上行に関して、非ディザリングモジュール(undithering module)102は、第1の精度を有する受信したY’CbCr画像情報を、第2の精度を有する画像情報に変換するものであり、この場合、第2の精度は、第1の精度より高い。モジュール102は、非ディザリング型の処理を行うことによってこのタスクを行う。つまり、ディザリング操作(図示せず)を使用して、パイプライン100に供給される入力画像情報を第1の精度に量子化した可能性がある。モジュール102は、実質的に、これらの量子化操作の逆を適用して、第2のより高い精度をもたらす。
アップサンプルモジュール104は、第1のサンプル数を有する入力画像情報を、第2のサンプル数を有する出力画像情報に変換するものであり、この場合、第2のサンプル数は、第1のサンプル数より多い。一般的なアプリケーションでは、画像情報は、色度情報(CbまたはCr)に比べてより多くの輝度情報(Y’)のサンプルがある形式でパイプラインによって受信されており、これは、目は輝度情報により反応を示すからであり、これによって、顕著な劣化を被ることなく、輝度情報に比べて色度情報の量を低減することができる。アップサンプルモジュール104は、一般的には、色度サンプルが輝度サンプルと同程度であるように、色度サンプルの数を増やすように働く。例えば、アップサンプルモジュール104は、4:2:0または4:2:2のY’CbCr画像情報を4:4:4Y’PbPr情報に変換することができる。モジュール104によって行われるアップサンプリング操作は、既存のサンプルを補間する(したがって実質的に変倍操作を行う)ことによって、サンプルの数を増やす。こうした補間技術は、正確な結果を提供するために、異なる標準が、輝度情報に対して色度情報をどのように位置付けるかを特に考慮する必要があることが多い。
モジュール106は、4:4:4のY’CbCr画像情報にマトリックス変換を適用して、それを別の色空間、つまりR’G’B’色空間に変換する。
次いでモジュール108は、伝達関数をそれに適用することによって、非線形R’G’B’画像情報を線形形式に変換する。繰り返すが、R’G’B’画像情報に関連付けられているプライム記号(’)は、画像情報が非線形形式のものであることを示し、プライム記号がない(RGBなど)ことは、通常、画像情報が線形データを示すことを示している(ただし、上述したように、非線形情報を表すために信号が参照されたことが慣例的にわかっている場合、プライムを取り除くことが一般的でもあることを除く)。図1のモジュール108の下に図1に示されているモデル伝達関数は、使用されている伝達関数の一般の形を示しており、これは、CRT(図示せず)の固有の伝達関数の一般的な形でもある。このモデル伝達関数は、その「つま先」領域に適用される特別な検討を考慮するために、線形テールをその曲線のV=0部分付近で使用することができることも示している。
モジュール110は、任意選択で、画像情報をインターレース形式からプログレッシブフォーマットに変換するために、画像情報に対してデインターレース操作を行う。このタスクの実行の際に、RGB画像情報、または元のY’CbCr画像情報(例えば4:2:0情報の特別な場合)を使用することによって、モジュール110を誘導することができる。しかし、デインターレース操作は、好ましくは、線形RGB空間で行われるべきである。これは、デインターレースが実際に(例えば既存のサンプルの補間を伴う)画像処理の形だからであり、したがって、この処理を線形空間で行うことによって、より正確な結果が得られる。
モジュール112は、任意選択で、線形RGB情報の三原色を変換して、その情報を別の色空間で表す。この変換は、ビデオ処理パイプラインの下流にある成分において実行される処理に望ましいいかなる原色にも対応するようにその三原色を変換するために、マトリックス変換をRGB情報に適用することを含んでもよい。一例では、モジュール112は、異なる様々なタイプの画像情報を共通の色空間に変換することができ、これによって、後の操作でこの情報をミキシングすることが容易になる。
モジュール114は、一般に、変換された色空間を有する画像情報の任意の種類の処理を表す。この時点では、処理は、この特定の例において、a)線形形式、b)RGB色空間、c)4:4:4(フルチャネル)形式、およびd)プログレッシブ形式の画像情報に作用する。アーティファクトを低減するために、処理が線形色空間で行われることが好ましいが、画像処理パイプラインが利益を与えるにためにこのリストに列挙されているすべての態様が存在している必要はない。
任意のイベントにおいて、モジュール114は、画像情報の任意の種類の処理を行うことができる。基本的に、処理は、例えば、任意の種類の画像フィルタリング操作を含めて、出力画像=SomeFunction(入力画像)などの画像情報の任意の変換を含む。こうした処理操作の代表的な非限定的リストには、a)合成、b)アルファブレンディング(様々なフェードやディゾルブなど)、c)エッジ検出、d)シャープニング、e)サイズ変更(より大きいまたはより小さい画像サイズへの変倍)、f)デインターレース(まだ実行されていない場合)などがある。合成は、ある種類の画像情報を別の種類の画像情報とミキシングすることを伴う。例えば、モジュール114を使用して、DVDディスクから引き出されたビデオ画像情報の上にグラフィックス(例えばテキスト情報)を組み合わせることができる。アルファブレンディングは、アルファ係数(ある色が別の色にとけ込む度合いを判定する)に基づいて色を混ぜ合わせることを伴う。例えば、混合操作は、次の式、最終的な色=ソースの色*ソースの混合係数+宛先の色*宛先の混合係数によって管理される。この式で、宛先ピクセルカラーは、予め存在するシーンのピクセルの色を表し、ソースピクセルカラーは、混合エンジンが宛先ピクセルに追加しようとする新しいピクセルカラーを表す。混合係数は、0から1までの間で変動し、ソースピクセルカラーおよび宛先ピクセルカラーが最終的な色値でどれだけの貢献度を有するかを制御するために使用される。繰り返すが、これらは単に、多数の潜在的な処理アプリケーションの代表的な例にすぎない。一般に、上述したビデオ処理アプリケーションの多くは、アフィン加重をソースとターゲットとの画像情報の間の移行に付加する。この種のアプリケーションでは、非線形加重の使用によって、画像情報の全体的な輝度を非常に迅速に低減させることができる。これは単に、線形画像情報のその処理によって、現在の解決策が取り除いたり低減したりすることができるアーティファクトの一例にすぎない。
図1の下の行のモジュールは、一般に、上述した上の行の操作を逆にする。つまり、モジュール114での処理の後、モジュール116は、任意選択で、画像情報を、RGB色空間に戻すなど、別の色空間に変換する。モジュール118は、インターレース形式で格納または表示する必要がある場合、画像情報のオプションの再インターレースを適用する。モジュール120は、(適切な場合)伝達関数を適用して、再度RGB画像情報を非線形形式(R’G’B’)に変換する。モジュール122は、R’G’B’画像情報の色空間を、その輝度成分(Y’)をその色度成分(PbPrなど)から分離するフォーマットに変更し直す。モジュール124は、任意選択で、Y’PbPr画像情報をサブサンプリングして、輝度サンプル(Y’)の量に比べて色度サンプル(PbPr)の量を低減する。つまり、このモジュール124は、(輝度サンプルごとに色度サンプルが1つある)Y’PbPr4:4:4画像情報を(輝度サンプルに比べて色度サンプルがより少ない)Y’PbPr4:2:2または4:2:0画像情報に変換することができる。最後に、モジュール126は、量子化操作を画像情報に適用する。量子化操作には、画像情報をより低い精度に変換して、ネットワーク、記憶装置、ディスプレイなどを介して効率的な伝達を容易にする効果がある。量子化操作は、そうでなければ量子化によって生成された四捨五入の誤差によってもたらされ得るアーティファクトを低減するために、ディザリング操作と結合することができる。後のサブセクションでさらに詳述するように、ディザリング操作には、画像情報が処理されるにつれて、これらの誤差を隣接するピクセルに拡散させ、したがって、アーティファクトの効果を軽減する効果がある。
図2は、上述した操作をフローチャートの形で要約する手順200を示す。ステップ202は、入力画像情報をRGBなどの線形色空間に変換することを伴う。また、この情報は、好ましくは、デインターレースされてプログレッシブ形式に、またアップサンプリングされて4:4:4(フルチャネル)形式にされる。したがってステップ202は、図1の上の行のモジュールに対応する。
ステップ204は、画像情報に対する任意の種類(および組合せ)の処理タスクをその線形形式で行うことを伴う。
ステップ206は、処理された線形画像情報を特定のアプリケーションによって要求されるどんな出力フォーマットにも変換することを表す。これは、処理された線形画像情報を非線形色空間に変換し、それを再インターレースし、ダウンサンプリングし、量子化することなどを伴い得る。ステップ206は、図1の下の行のモジュールに対応する。
A.2.パイプライン内での浮動小数点フルチャネル画像情報の使用
図1に戻ると、パイプライン100は、(c)任意選択で線形のセマンティクスでもよい(b)比較的高い精度を有する(a)フルチャネル画像情報(すなわち4:4:4)を使用するため、既知の方式より優れた結果も提供する。より詳細には、上述したように、パイプライン100は、それが受信する画像情報を、その元の形式より高い精度に変換する。また、パイプライン100は、輝度サンプルに比べて情報の色度サンプルの量を増やすことによって、画像情報をフルチャネル形式(4:4:4)に変換する。次いで、高精度のフルチャネル画像情報に対する様々な処理タスクが実行される。処理が行われた後、パイプライン100は、任意選択で、再度、処理済みの画像情報をより低い精度のサブサンプル済み形式に変換することができる。
一般に、画像情報の高精度のフルチャネル形式への変換は、実質的に、情報のノイズ成分に比べて情報の信号成分を増幅し、したがって、この情報に対して実行される処理がより正確な結果をもたらすことができるようになる。それに対して、パイプラインの様々な中間接合部で高精度の、および/またはフルチャネル画像情報を使用しない既知の方式は、パイプラインに沿って誤差を伝搬し、(本質的に色コンテンツを減らすことによって)画像情報の解像度を低減する可能性がある。図1は、一般に、処理モジュール128に流れる128とラベル付けされた情報ブロックによる高精度のフルチャネル画像情報の処理を示している(しかし、デインターレースモジュール110など、この図の他のモジュールも、高精度のフルチャネル形式の画像の処理からの恩恵を受けることができる)。
一例によって、より具体的に説明する。通常の精度4:2:0または4:2:2のY’UV画像情報と比べて高精度の線形RGB画像情報で作業する利点を考える。4:2:0および4:2:2の画像情報が、輝度情報の量に比べて色度情報の量の(それぞれ)1/2および1/4を提供することを思い出されたい。一般的には、高精細(HD)画像情報(特に1920xl080i,2.07mpixel)が1280x720p(0.92mpixel)または720x480p(0.35mpixel)の解像度に縮小される。パイプラインは、この状況で、4:2:0のサブサンプリングフォーマットでの縮小操作を行う場合(1920x1080から1280x720など)、2.07mpixelの輝度情報および0.52mpixelの色度情報を、0.92mpixelの輝度情報、および0.23mpixelの色度情報に縮小する。しかし、パイプラインがまず、4:4:4にアップサンプリングし、次いで高精度RGB(例えば浮動)に変換し、次いで縮小し、次いで4:4:4YUVに変換する場合、パイプラインは、実質的に、0.92mpixelの輝度情報および0.52mpixelの色度情報を維持する。言い換えれば、この状況での高精度処理の使用によって、パイプラインは、元の色度情報のほぼすべてを維持することができる。
高精度中間画像情報を達成する1つの方法は、浮動小数点フォーマットを使用して情報を表すことである。浮動小数点数は、仮数成分(仮数部)および指数成分(指数部)を有する。指数部は、仮数部がどのようにシフトされるかを定義する。このフォーマットを使用して、浮動小数点情報は、(例えば指数部を変更することによって)それに応じて情報の表現をシフトすることによって、非常に低い値から非常に高い値まで表すことができる。16ビットの浮動小数点表示、32ビットの浮動小数点表示などを含めて、任意のビット数を有する任意の種類の浮動小数点表示を使用することができる。画像処理パイプライン100で使用するための特に適した形式の浮動小数点は、いわゆるFP16浮動小数点フォーマットであるが、他の種類の浮動小数点表示を使用することができる。
A.3.4:2:0画像情報の特別な対策
再考するために、背景セクションで説明したように、4:4:4画像情報は、Y’の4つのサンプルごとにCbおよびCrの4つのサンプルを含む。4:2:2画像情報は、Y’の4つのサンプルごとにCbの2つのサンプル、およびCrの2つのサンプルを含む。4:2:0画像情報は、各走査線上のCbおよびCrのサンプル、ならびにCbおよびCrの走査線とを、Y’のものの半分だけ含む。言い換えれば、色度情報の解像度は、水平方向および垂直方向の輝度情報のものの半分である。例えば、フル画像解像度が720×480である場合、色度情報は、わずかに360×240で格納される。4:2:0では、各走査線に欠けているサンプルを補間する必要があるだけではなく、色度情報の全走査線を上下の走査線から補間する必要がある。図3は、MPEG2インターレース済みの4:2:0画像情報の例を示している。4:2:0画像情報の処理に関するこれ以上の情報は、Don Munsil and Stacey Spears, "The Chroma Up-sampling Error and the 4:2:0 Interlaced Chroma Problem," DVD Benchmark, April, 2001 (December, 2002, updated January, 2003)で見つけることができる。
4:2:0画像情報の色度情報の不足および位置のアラインメントは、この情報を処理する際にいくつかの問題をもたらす。大ざっぱに言えば、4:2:0の画像情報を正しく解釈するために、処理パイプライン100のある段階が処理パイプライン100の別の段階の分析を必要とするので、問題が生じる可能性がある。図1のアップサンプリングモジュール104およびマトリックス変換モジュール106の例を考える。4:2:0画像情報を正しく解釈するために、アップサンプリングモジュール104は、任意選択で、デインターレースモジュール110によって提供される情報である画像情報において色情報がどのように表されるかに関する知識を必要とする。しかし、デインターレースモジュール110は、アップサンプリングモジュール104に対して下流に配置されるため、この知識は、アップサンプリングモジュール104には使用できない。モジュール104および106は、デインターレース分析の利益なしに4:2:0情報を処理する場合、補正が難しい、または不可能であり得る画像情報の誤差を生成し得る。この難問は、結局、(例えば4:2:2画像情報とは異なり)4:2:0における走査線を、デインターレース分析において互いに独立して扱うことができないという事実から起こる。
この問題に取り組むために、図1のパイプライン100は、4:2:0画像情報を扱う特別な対策を組み込むことができる。全般的な対策として、前の段階によってそれに供給される情報のみを原子論的に分析することを各段階に求めるのではなく、様々な段階で行われる分析(および様々な段階で使用可能な情報)がパイプラインの他の段階により広範にわたって共有されるように、パイプライン100を変更することができる。
特に、パイプライン100におけるデインターレースモジュール110の位置によってもたらされる問題に関して、デインターレース分析(モジュール110によって実行される)が、例えばアップサンプリング分析(モジュール104によって実行される)との関連でより早く行われるように、パイプライン100が変更されてもよい。図1は、破線130によってこの方策を示している。あるいは、デインターレースモジュール110は、同様にアップサンプルモジュール104に提供された元の入力画像情報を検査することによって、デインターレース分析を実行することができる。つまり、デインターレースモジュール110は、画像情報がどのようにデインターレースされるかをよりよく理解するために、元の画像情報との組合せでモジュール108の出力に対する分析を行うことができる。
パイプライン100内の個々のモジュールによって別々に実行される分析を共有し、それによって4:2:0の画像情報の色度情報の不足により効果的に取り組むために、これ以上のモジュール統合の対策を考案することができる。
A.4.画像情報の擬似線形空間での処理
上記のセクションは、アーティファクトをほとんど生成しない画像処理パイプラインを設計する目標に取り組んだ。しかし、画像処理パイプラインは、効率的な方法で出力結果を提供するべきである。画像処理パイプラインは、十分な速度、および許容できる数の処理リソースでそれを行うと、効果的な方法で結果を生成する。このために、このサブセクションは、パイプライン100の複雑さを低減するために、図1に示したパイプライン100に適用できる様々な近似を提案する。
つまり、このサブセクションは、ほぼ線形の、しかし完全には線形ではない画像情報を提供するように、図1に示したパイプライン100を変更することを提案する。その結果、これらの変換は、画像情報を、理論上正しい線形空間ではなく、「疑似線形」空間に変換すると言われる。利点は、(モジュール108および120において)伝達関数によって必要とされる数学的演算のハードウェア実装をかなり簡略化することができ、その結果、画像情報のより迅速でより効率的な処理がもたらされることである。より詳細には、選択された操作は、一般的には、(数学的により正確である)元の対応物の関数より1桁速く実行する。疑似線形の画像情報はほぼ線形であるため、画像を擬似線形空間で処理する負の影響は最小である。したがって、ほとんどの用途を満たす出力結果を提供するための変更なしに、線形の性質の任意のアルゴリズムをこの情報に適用することができる。
図4は、上述した近似に関する情報をさらに提供する。より詳細には、図4は、図1の処理パイプライン100のいくつかのモジュールの変更のみを表しており、したがって、図1に示した全処理パイプライン100の概略図のみを含む。
図4に示されているパイプラインの抜粋400は、図1の伝達関数モジュール108の代わりに伝達関数モジュール402を含む。(モジュール108が行うように)画像情報の数学的に正確な変換を適用して、それを線形空間に変換するためにする代わりに、モジュール402は、画像情報を上述した擬似線形空間に変換する近似伝達関数(g_approx(x))を適用する。このモジュール402は、図1のモジュール108によって必要とされるより正確な伝達関数より「安い」ため、g_approx(x)伝達関数を用いる。
モジュール404は、図1の処理モジュール114の対応物を表す。モジュール404は、疑似線形の画像情報に対する任意の数の処理タスクを疑似線形処理空間で行う。
次いでモジュール406、408、および410は、処理済みの画像情報を、(ディスプレイ、記憶装置、ネットワークターゲットサイトなど)出力に適したフォーマットに変換するタスクを行う。モジュール406は、特に、モジュール402の操作の逆、つまりg_approx’(x)を適用することによって、モジュール402の効果を取り除く責任が課される。モジュール408は、伝達関数g_in(x)を適用することによって、モジュール406の出力を線形化する。この操作が行われるのは、次の段階410が線形入力を受け入れるように設計されているからである。次いで、モジュール410は、逆伝達関数(g_out’(x))を適用して、必要ないかなる出力形式にも適合するように、最終的なガンマ補正済み出力画像情報を生成する。実際の実装形態では、モジュール406、408、および410は、モジュール412によって実行される、F(x)によって表される単一の変換に統合することができる。
重要なことに、モジュール404によって疑似線形色空間に適用されるアルゴリズムは、図1のモジュール114において「正しい」線形色空間に適用されるアルゴリズムと同じである。言い換えれば、図4によって表される処理方式は、画像処理アルゴリズム自体の特別な調整は必要ない。それに対して、既知の前の方式によって取られた手法は、画像情報が受信されたいかなる非線形空間でも処理を行い、次いでその場限りの、またアプリケーション固有の様々な補正率をアルゴリズムに適用して、任意のアーティファクトを修正しようとするものである。しかし、これらの補正率は、不正確であり、任意のイベントで、一般的に複雑であることが多かった。より一般には、前の技術は、情報を疑似線形形式に変換し、次いでこの疑似線形形式を上述した方法で取り除く、包括的で一般に適用可能な手法を適用していない。
このサブセクションの残りの解説では、図4の上述したモジュールを実施するために使用できる近似例について記述する。まず初めに、ガンマ処理を行うために使用される伝達関数は、一般的には、べき関数(x0.45、またはx1/0.45≒x2.222の逆数など)、またはいくつかの関数の組合せであることに留意されたい。べき関数は、一般的には、使用可能なハードウェアを使用してピクセルごとに計算するには非常に費用がかかる。
しかし、x0.45は、xの平方根にほぼ等しく、言い換えれば、x0.45≒x0.50であることに留意されたい。また、x1/0.45は、x2にほぼ等しく、言い換えれば、x1/0.45≒x*xである。x1/2を計算するために最適化されたハードウェアが存在し、この計算は、一般のべき関数によって必要とされる演算より速い(多くの場合1桁)。また、ハードウェアは、2乗x2を非常に速く行うことができる。これは単なる乗算だからである。したがって、これらの近似は、伝達関数の実施に関連付けられている処理コストを著しく削減することができる。
より正式には、モジュール402によって実行される関数g_approx(x)は、x2*sign(x)の形をとることができ、モジュール406によって実行される逆伝達関数は、(abs(x))1/2*sign(x)の形をとることができる。(特別な問題として、伝達関数および逆伝達関数は、ゼロに近い線形テールセグメントを適用し得ることに留意されたい)。
上記の手段は、以下の一連の操作例を使用して、関数g_in(x)およびg_out(x)によって表される異なる入力および出力の範囲全体に汎用化することができる。
1)逆線形近似g_approx(x)=x2=x*xを画像情報に適用する。モジュール402は、このステップを実行することができる。
2)データを擬似線形空間で処理する。モジュール404は、このステップを実行することができる。
3)線形近似g_approx’(x)を適用する。モジュール406は、この操作を実行することができる。
4)伝達関数g_in(x)を適用して、モジュール406の出力を線形化する。モジュール408は、この操作を実行することができる。
5)逆伝達関数g_out’(x)をモジュール408の出力に適用して、情報を所望のg_out空間で生成する。
ステップ(3)〜(5)は、単一関数、F(x)にマージすることができる。つまり、
F(x)=g_out’(g_in(g_approx’(x)))となる。
パイプラインがガンマ2.222とガンマ2.4までの間で変換する場合、関数F(x)は、次のように表すことができる。
上記のアルゴリズムのコストは、g_approx(x)関数によって必要とされる非常に「安い」1つの対話、続いて情報の擬似線形空間での処理、続いてF(x)関数によって必要とされる1つの潜在的に高価な対話を伴う。しかし、式F(x)は、単に、指数の乗算を求めるため、この関数のコストは、元の逆関数ほど悪くない。したがって、図4に示されている解決策は、全線形/非線形サイクルのコストをほぼ半減する可能性がある純効果を有する。また、上述したように、この解決策は、モジュール404によって実行されるアルゴリズムの特別なカスタマイズを必要としないという意味で有利である。
図5は、上述した操作を要約し、図2に示した線形手順200の対応物である手順500を示している。ステップ502は、入力画像情報を擬似線形空間に変換することを伴う。ステップ504は、モジュール404を使用して画像情報に対する処理を擬似線形空間で行うことを伴う。また、ステップ506は、処理された情報を、出力に適切な非線形色空間に変換することを伴う。
A.5.誤差分散アルゴリズムの改良
量子化によって必要な近似は、適切に処理されない場合、アーティファクトを生成する可能性があるため、高精度画像情報の低精度フォーマットへの量子化によって、誤差がもたらされる可能性がある。様々な誤差分散アルゴリズムは、量子化によってもたらされた誤差を分散させ、したがってアーティファクトを最低限に抑えるように働く。こうした誤差分散は、ディザリングの形である。
図6は、量子化によってもたらされる誤差を分散させるためのFloyd−Steinbergアルゴリズムの既知の適用を示している。画像内のあるピクセル(またはより一般には画素)を表す画像の点Xについて考察する。この画素Xの量子化は、画素の高精度表現とそれが量子化される値との間の差として計算される、誤り差をもたらす。Flyod−Steinbergアルゴリズムは、この差を異なる成分に分割し、次いでこれらの成分を、画素Xに隣接する(アルゴリズムによってまだ処理されていない)画素に分散する。処理がこうした隣接する画素まで進むと、この画素に前に分散された誤差成分は、それに追加され、次いで、この画素は、それを量子化し、別の誤り差を計算し、この誤差を隣接する画素に分散することによって、上述したように処理される。全画像の処理は、左から右へ、下から上へなど、様々な方法で進むことができる。
Floyd−Steinbergアルゴリズムは、それが隣接する画素に分散する誤差成分に異なる重みを割り当てる。図6は、画素Xに隣接する画素に(時計回りに)割り当てられた7、1、5、3の重みを示している。より正確には、誤差成分に割り当てられる加重係数は、7/16、1/16、5/15、3/16であり、この場合、分母「16」は、隣接する画素に割り当てられた重みの合計を反映している。
しかし、Floyd−Steinbergなどの誤差分散アルゴリズムは、時として、様々なアーティファクトを有する宛先画像を生成する。こうしたアーティファクトは、ある画像コンテンツにより特に目立つ、視覚によって認識できるパターンとして現れ得る。既知の方式は、ランダムノイズを元の画像に追加して、誤差分散アルゴリズムによってもたらされたパターンを不明瞭にすることによって、この問題に取り組んできた。しかし、この対応策は、それ自体様々な欠陥を有し得る。まず、既知の技術は、ノイズを元の画像に追加し、次いで、元のノイズ画像を(以下でより入念に説明する方法で)ベースラインとして量子化する。この技術は、誤差分散アルゴリズムによってもたらされるアーティファクトを不明瞭にする効果はないが、最終的な宛先画像を劣化させる。つまり、宛先画像のノイズは、元の画像に追加されたノイズに比例して増える。第2に、既知の方式は、比較的短い反復期間を有するノイズ生成器を使用してノイズを追加し得る。したがって、ノイズ生成器は、(場合によっては、ノイズ生成器が隠すように設計された誤差分散アーティファクトの幾らかの痕跡とともに)宛先画像で視覚的に認識できるそれ自体のパターンタイプのアーティファクトを生成し得る。
図7は、上記で識別された問題のうちの前者をより詳しく説明する手順700を示している。手順700の目的は、元の画像情報(「Original」)を量子化して、誤差分散アルゴリズムを使用して宛先画像情報(「Final」)を生成することである。ステップ702は、1つの画像要素i(ピクセルなど)について、ノイズ情報を元の画像情報に追加することによって「Temp」画像情報を生成することを伴う。ステップ704は、Temp画像情報および「Error_Term(i)」画像情報によって定義された合計を量子化することによって、Final画像情報を生成することを含む。Error_Termは、前に生成された画素の前の量子化に基づいて、画素iに追加された誤差成分を表す。ステップ706は、(処理されるべき将来の画素に適用されるべき)次のError_Term成分を、こうして計算されたFinal画像情報−Temp画像情報と定義することを伴う。このアルゴリズムの適用には、上述した結果として生じる欠点とともに、ノイズ画像を本質的に量子化する純効果がある。
図8は、当技術分野における上記の問題を克服するシステム800を示している。ディザリングモジュール802は、誤差分散アルゴリズムを使用して元の画像情報804を宛先画像情報806に変換する。誤差分散アルゴリズムは、上述したFloyd−Steinbergアルゴリズムを含むが、このアルゴリズムに限定されない。ノイズ生成器808は、ランダムノイズを量子化プロセスに挿入して、誤差分散アルゴリズムによって生成されたアーティファクトの一部を不明瞭にするのを助ける。
システム800は、少なくとも2つの点で、既知の方式とは異なる。まず、システム800は、本質的に、元の画像情報804ではなく、ノイズ情報を量子化プロセスに追加する。言い換えれば、元の画像情報804は、前の技術における元の画像+ノイズ情報ではなく、誤差項が測定されるベースラインのままである。したがって、システム800のノイズ量の増加によって、必ずしも、宛先画像情報806が徐々に目にわずらわしくなるという影響があるわけではない。これは、隣接する画素に伝搬される誤差項が、元の画像情報804に対する宛先画像情報806の逸脱の測度を維持し、したがって、誤差分散アルゴリズムは、量子化プロセスに追加されるランダムノイズの効果を連続的に補正しようとするからである。
図9は、上記の処理を説明する手順900を示している。ステップ902は、画素iの元の画像情報、ノイズ情報、および誤差項の合計を量子化することによって、画素iについて最終的な画像情報を生成することを伴う。ステップ904は、画素iについての最終的な画像情報と元の画像情報との間の差を計算することによって、1つ又は複数の隣接する画素に分散される誤差項を計算することを伴う。
一例によって、より具体的に説明する。タスクは、値23.3を有する画素を最も近い整数に量子化することであると仮定する。図7に示されている既知の方式では、ノイズ情報の+0.4の量がこの値に追加され、それが23.7になると仮定する。この画素の最終的な画像値は、24となり、伝搬される誤差項は、−0.3となる(最終的な出力画像値とノイズ画像値23.7との間の差)。それに対して、図9の改良された方式では、伝搬される誤差項は、−0.7となる(最終的な出力画像値と元の画像値との間の差)。
以下で、上記の技術を、Floyd−Steinberg誤差分散アルゴリズムの適用に基づいて、より正式に説明する。アルゴリズムのタスクは、画像のピクセルごとに、高精度値Vを量子化し、それをピクセルアレイPのピクセル位置P(x,y)に格納することであり、この場合、P(x,y)は、Vより低い精度を有する。アルゴリズムによって生成された誤差項は、ピクセルアレイPと同じサイズを有する高精度誤差アレイEに格納される。ピクセルP(x,y)の誤差項は、対応する場所のE(x,y)に格納される。アルゴリズムにおける関数「round()」は、高精度数を最も近い低精度数に四捨五入する。アルゴリズムにおける関数「random()」は、範囲{−0.5・・・0.5}でランダム高精度数を戻す。一時的な値「Desired」および「Error」は、高精度値である。実際の誤差伝搬係数は、Floyd−Steinberg誤差伝搬アルゴリズムから来る。
第2の改良として、ノイズ生成器808は、既知の手法とは異なり、相対的に長い反復パターンを使用する。「相対的に長い」という句は、画像情報の全フレームを処理するときに、ノイズ生成器808がその数字を繰り返さないこと、または少なくとも、宛先画像情報806において認識できるアーティファクトを生成するほどそれ自体を繰り返さないこととし、相対語で解釈することができる。この要件を満たす1つの特定の乱数生成器は、いわゆるR250ランダムノイズ生成器である。
A.6.フィルタカーネルの動的計算
変倍フィルタは、画像情報がソースサイズから宛先サイズにサイズ変更されるとき、図1に示したパイプライン100における様々な接合部で使用することができる。例えば、モジュール114で行われる処理は、用途に応じて、および/またはユーザによって入力された制御信号に応じて、画像情報を拡大または縮小することを伴い得る。変倍は、サンプリングモジュール104および124など、パイプライン100における他の接合部でも行うこともできる。
いくつかのフィルタリングアルゴリズムを、変倍アルゴリズムとともに使用することができる。特定の既知のタイプのフィルタの1つは、いわゆるCatmull−Romフィルタである。この種類のフィルタを画像情報のサイズ変更のタスクに適用することによって、結果的に、ある程度、画像情報の縁のシャープニングがもたらされる。
このサブセクションでは、ピクセルごとに計算され、画像情報に適用される、変倍に使用されるフィルタ(この種類のフィルタに限定されるものではないが、Catmull−Romタイプのフィルタなど)について説明する。これは、画像情報におけるピクセルごとの別々のフィルタの動的計算および適用として概念化することができる。各フィルタは、1つまたは複数のカーネルを含み、各カーネルは、1つまたは複数のタップを有し得る。カーネルは、画像情報におけるピクセルに適用される重みを定義する。タップは、カーネルが作用する画像情報サンプルを定義する。この方法でフィルタカーネルを計算したり、適用したりしないことによって、ビートパターン(beat pattern)など、様々なアーティファクトが宛先画像に生成され得る。
しかし、ピクセルごとの個別のフィルタカーネルの計算は、カーネルを計算するために関わる時間量の点で、法外に費用がかかり得る。これは、何らかのハードウェアでの画像情報のリアルタイムの表示を妨げる可能性がある。この問題に対処するために、このサブセクションでは、入力画像情報のすべての行や列のフィルタ位相カーネル(filter phase kernel)を動的に計算し、次いでこうしたカーネルを適用するための効率的な方式を定義する。概要として、この方式は、元の画像情報の行(または列)に必要なカーネル数を計算し、カーネルによって必要とされるタップ数を計算し、カーネルを格納するための格納アレイを割り振り、必要なカーネル数を計算し、アレイに格納することを伴う。これらのステップは、引き続き、アレイに格納されているフィルタカーネルを画像情報に適用する。
このアルゴリズムは、カーネルがその適用の前に計算されるため、効率的である。また、いくつかの場合、比較的少数の計算済みカーネルを、画像情報のより大きい行または列に周期的に適用することができるため、計算の節約が達成される。また、特定の行または列に割り当てられた同じカーネルを、その画像情報の他の行または列(それぞれ)に適用することができる。言い換えれば、特定のアプリケーションのサイズ変更要件に応じて、画像情報の単一のピクセルごとに個別のフィルタを計算する必要はない。
図10は、上述した設計のフィルタモジュール1002を実装するシステム1000の概要を示している。フィルタモジュール1002は、動的カーネル事前計算モジュール(dynamic kernel pre−calculation module)1004を含む。このモジュール1004の目的は、まず、特定の変倍操作に必要なカーネル数、およびカーネルに必要なタップ数を計算することである。カーネル数およびタップ数は、画像情報がサイズ変更される方法(後述する方法)に応じて決まる。次いで、事前計算モジュール1004は、所望のカーネル数を事前に計算し、格納モジュール1006にカーネルを格納する。次いで、カーネル適用モジュール100は、カーネル格納モジュール1006内のカーネルを画像情報に適用して、所望のフィルタリング挙動を達成する。上述したように、その適用の前のカーネルの計算は、フィルタリングプロセスをより速く稼働させるのを助ける。さらに、わずかなカーネルを事前に計算することのみを必要とする変倍操作についてのフィルタ計算の複雑さは、非常に大きく低減される。
図10の右側の部分は、カーネル1010を、画像情報1014の特定の行1012にどのように繰り返し適用できるかを示している。カーネル1010は、連続して、周期的に適用される(ある場合には、各カーネルは、1つの出力ピクセルに適用される)。例えば、比較的長い行の画像情報についてのカーネルが少数ある場合、これらのカーネルは、連続して適用され、画像情報の行が処理されるにつれて、何度も繰り返される。つまり、事前に格納されたカーネルは、リストを形成し、これらのカーネルは、次々に行に適用され、リスト内の最後のカーネルに遭遇すると、折り返して先頭に戻り、リストの一番上から再度引き出すことによって、処理が続行する。適用技術の反復挙動は、図10に示しているループ1016によって表される。カーネル1010を、類似の方法で他の行に適用することができる。さらに、画像情報1014の列に適用されるカーネルに関して類似の処理を繰り返すことができる。
カーネル数およびタップ数を計算するためにモジュール1004によって使用できるアルゴリズム例について、以下に記載する。モジュール1004は、アルゴリズムを、画像情報1014のx寸法およびy寸法における変倍に別々に適用する。したがって、アルゴリズムは、x寸法における変倍に設定されるが、例えば、幅への参照を高さに変更することによって、アルゴリズムをy寸法にも適用することもできる。x寸法において、アルゴリズムで使用される「ScaleRatio」は、所望の最終的な(目的の)画像幅に対する元の画像幅の比率を定義する。アルゴリズムで使用される「天井」関数は、実数を次に高い整数に丸める。アルゴリズムの「gcd」機能は、2つの整数の最も大きい共通分母を計算する。
一例として、高さ720ピクセルのソース画像情報を、高さ480ピクセルの宛先画像情報に垂直方向に変倍することを考える。上記のアルゴリズムをこのシナリオに適用することによって、以下が得られる。
ScaleRatio=720/480=1.5
タップ=ceiling(ScaleRatio*4)=6
カーネル=480/gcd(720,480)=480/240=2
したがって、モジュール1004は、それぞれ6タップの2つのカーネルを事前に計算し、事前に割り振る必要がある。サイズ変更操作は、ピクセルの行に沿って移動するにつれて、2つのカーネル間でピンポン方式で交互に行われる。
一例として、高さ721ピクセルのソース画像情報を、高さ480ピクセルの宛先画像情報に垂直方向に変倍することを考える。上記のアルゴリズムをこのシナリオに適用することによって、以下が得られる。
ScaleRatio=721/480=1.5021
タップ=ceiling(ScaleRatio*4)=7
タップが奇数であるため、1を追加し、8が得られる。
カーネル=480/gcd(721,480)=480/1=480
したがって、モジュール1004は、それぞれ8タップの480のカーネルを事前に計算し、事前に割り振る必要がある。サイズ変更操作は、480個の出力ピクセルの1つずつに一意のカーネルを使用する。しかし、同じ組の480個のカーネルを、ピクセルの垂直方向のすべての列に使用することができるので、さらにかなりの節約が実現される。また、実社会での実用の場合、宛先とソ―スのサイズの間の比率は、かなり簡単な比率になる傾向にあり、結果として得られた必要なカーネル数が管理しやすい数字になる。(例えば所定の閾値を超えるなど)特定の大きい数のフィルタカーネルを要求するサイズ変更要求をユーザが入力するのを防ぐ特別な制限を課すこともできる。
図11は、上述した操作を要約する手順1100を示す。ステップ1102は、水平寸法および/または垂直寸法において画像の所望のサイズ変更を達成するのに必要なカーネル数(およびカーネル当たりのタップ)を判定することを伴う。事前計算モジュール1004は、上記で提供されたアルゴリズムを使用してこのタスクを実行することができる。ステップ1104は、ステップ1004で計算されたカーネル数を格納するために、カーネル格納モジュール1006内の空間を割り当てることを伴う。ステップ1106は、実際に、カーネルを事前に計算し、格納することを伴う。また、ステップ1108は、格納モジュール1006に格納された事前に計算されたカーネルを画像情報に適用することを伴う。適用は、任意の所与の行または列を処理しながらカーネルを周期的に順番に行うことによって進む。
B.ビデオ処理パイプラインの実装関連の改良例
B.1.パイプライン処理コードの最適な生成
以下のセクションでは、セクションAに比べてより技術固有の性質の図1のビデオ処理パイプライン100のいくつかの実装形態を提供する。まず初めに、図12は、このセクションの改良を説明する基礎として働く画像処理パイプライン1200の高レベルの概要を示している。
図12に示されているパイプライン1200は、入力段階1202、処理段階1204、および出力段階1206によって定義されている処理段階を含む。入力段階1202に関しては、入力ソース1208は、画像情報の任意のソースを表す。ソース1208は、一般に、(例えばカメラやスキャナによって作成された)新しく捕捉された画像情報、または(ディスクから、またはIPネットワークを介して受信されたなど)何らかのチャネルを介して入力段階1202に表示される、以前に捕捉された画像情報を含み得る。前者の場合、捕捉処理機能1210は、ソース1208から受信された画像情報に対して、任意の種類の予備的処理を行うことができる。後者の場合、デコーダ機能1212は、任意の種類のストリームベースの情報抽出および復元を実行して、画像データを生成する。一般に、こうした処理は、受信された情報において、画像情報を音声情報から分離し、その情報を解凍することなどを含み得る。処理段階1204に関しては、処理機能1214は、画像情報の複数のストリームを合成信号にミキシングするなど、結果として得られた画像情報に対する任意の種類の処理を行う。出力段階に関しては、出力処理機能1216は、処理済みの画像情報に対して、出力装置1218へのその出力に備えて実行される任意の種類の処理を表す。出力装置1218は、テレビ、コンピュータモニタなどを表し得る。出力装置は、記憶装置も表し得る。さらに、出力「装置」(または出力機能1216)は、情報を装置に格納する、またはネットワークを介して配布するために用意する圧縮およびフォーマティング機能(マルチプレクサなど)を提供することができる。
一般に、図1に記載されている処理操作は、任意の方法で、段階(1202、1204、1206)にわたって分散することができる。例えば、処理段階1204は、一般に、図1に示されている処理モジュール114を実施する。各段階(1202、1204、1206)は、物理的に、与えられたタスクを行う単一の装置として、または直列式または並列式に連結される複数の装置として実装することができる。機能は、ソフトウェアとハードウェアの任意の組合せによって実施することができる。
図13は、図12に示されている画像処理パイプライン1200を構成するシステム例1300を示している。より詳細には、システム例1300は、それが図1に示されている画像処理操作の任意の組合せを実行するように、パイプライン1200を実施するコンピュータコードを自動的に生成する機能を含み得る。
上述した方法で機能するには、システム1300は、構成モジュール1302を含む。構成モジュール1302は、構成済みのパイプラインが満たすべき要件を定義するパイプライン要件情報1304を受信する。要件情報1304は、複数の構成要素を有することができる。入力要件構成要素1306は、パイプラインが受信すると予想される画像情報の特徴を定義する。入力要件構成要素1306は、処理することができる単一の種類の画像情報を定義してもよく、または処理することができる許容し得る複数の種類の画像情報の1組を定義することもできる。許容し得る入力情報の複数の特徴を便利に指定する1つの方法は、使用されるビデオ符号化標準を指定することであり、これは、許容し得る色空間、色度サブサンプリング方式、ガンマ伝達関数など、画像処理が有する多数の特徴を含み得る。例えば、ITU−R Recommendation BT.601は、画像情報のスタジオデジタル符号化(studio digital coding)を定義する国際標準である。この標準は、画像情報のY’CbCr符号化を使用する。ITU−R Recommendation BT.709は、高精細ビデオ情報のスタジオ符号化を定義する国際標準である。高精細(HD)コンテンツは、一般的には、1920×1080、1280×720など、標準精細(SD)より高いビデオコンテンツを表す。これらは、画像処理パイプラインが処理できる多くのビデオ符号化標準のうちのほんの2つである。
出力要件構成要素1308は、パイプラインが出力すると予想される画像情報の特徴を定義する。つまり、出力要件構成要素1308は、特定の出力装置に適合するように生成することができる単一の種類の画像情報を定義してもよく、または異なる種類の出力装置に適合するように生成することができる許容し得る複数の種類の画像情報の1組を定義することもできる。この場合も同様に、許容し得る出力情報の複数の特徴を便利に指定する1つの方法は、使用されるビデオ符号化標準を指定することである。
中間処理要件構成要素1310は、パイプラインが入力画像情報に対して行うべき処理タスクの性質を定義する。それだけには限定されないが、サイズ変更(変倍)、合成、アルファブレンディング、エッジ検出など、任意の数の処理タスクを指定することができる。
一般に、人間の観察者は、パイプライン要件1304を手動で選択することができる。あるいは、1つまたは複数の要件1304を、パイプラインが使用される環境から自動的に推論することができる。
入力パイプライン要件1304が与えられた場合、構成モジュール1302は、静的な分析を使用してコードモジュールのライブラリ1312と対話するタスクを行って、パイプライン要件1304を満たすコードモジュールのカスタム集合(custom aggregation)を集める。これを行う1つの方法は、任意の種類の入力情報を、任意の種類の中間処理を伴う任意の種類の出力情報にマッピングするマスター方程式を生成することである。このマスター方程式は、いくつかの構成要素を含む。こうした構成要素は、ライブラリ1312に格納されているそれぞれのコードモジュールに関連付けられている。この実装形態では、構成モジュール1302は、入力パイプライン要件1304から見て必要ないすべての構成要素を取り除くことによって、コードモジュールのカスタム集合をコンパイルするタスクを行う。これは、ライブラリ1312からいくつかのコードモジュールを選択し、他のモジュールを省く効果がある。
構成モジュール1302によって実行される処理の結果は、最適化パイプラインコード1314であり、これは、次いで、画像情報を処理するために適用することができる。このコード1314は、求められる機能のみを実行するように合理化される。その結果、このコードに基づいて構築されたパイプラインは、特定の用途では決して使用されない、異なる多くのタスクを処理する様々な連関したサブルーチンを有する、すなわち大規模な包括的プログラム(large catch−all program)より速くその操作を実行する可能性を有する。
ほんの一例を挙げてみると、特定の用途におけるビデオパイプラインのタスクは、インターレース済み4:2:2 Y’CbCr画像情報を中間線形プログレッシブ4:4:4 RGB色空間に変換し、RGB色空間での合成を行い、次いで結果として得られた処理済み情報をテレビに出力することであると仮定する。こうした一連の操作は、一部の操作(アップサンプリング、伝達マトリックス変換(transfer matrix conversion)、伝達関数の適用、合成など)を呼び出すが、他の操作は呼び出さない。したがって、構成モジュール1302は、必要な計算を実行するのに必要なコードのみを生成することになる。
構成操作について、モジュールの包含および省略の状況で上述してきた。しかし、より高度な構成機能は、選択されたコードモジュールを特に効率的な方法で結合する、選択されたコードモジュールに共通の、結果として得られたコードを取り除くなど、他の最適化操作を実行することができる。
構成モジュール1302を実施する方法がいくつかある。この機能を実施する1つの方法は、ソースコードを分析したり、冗長コードを取り除いたりする何らかの能力をすでに有している既存の構成ツール(例えば従来のC++コンパイラなど)を活用して、こうした機能を、適切なモジュールを選択することによって、パイプラインコードを最適化する当面のタスクに適用することである。
図14は、上記の説明をフローチャートの形で要約する手順1400を示す。ステップ1402は、ビデオパイプライン要件を入力することを伴う。ステップ1404は、入力要件を満たす最適なコードを判定することを伴う。ステップ1406は、最適なコードを出力し、実行することを伴う。
B.2.画像処理を実行するためのGPUの一般的な使用
図15は、図12に示された画像パイプライン(およびより抽象的には、図1に示されたビデオ処理操作100)の態様を実施するために使用できるシステム例1500の概要を示す。システム1500は、1つまたは複数のCPUを含むコンピュータ(パーソナルコンピュータなど)を表し得る。システム1500は、図1に示されているいくつかの画像処理タスク(またはすべての画像処理タスク)をグラフィックスモジュール機能に割り当てる。グラフィックス処理機能は、1つまたは複数のグラフィックス・プロセッシング・ユニット(当分野ではGPUと呼ばれる)を含み得る。一般に、図15は、システム1500のCPUによって実行できる機能を、システム1500のグラフィックスモジュール機能によって実行できる機能と区別するための破線を含む(が、この区別は、単に例にすぎず、他のCPU/GPUの割り当てが可能である)。
背景として、GPUは、一般に、CPUのような処理装置であるが、分岐タイプの判定を行う能力は一般にあまり備えていない。システムは、一般的には、GPUを使用して、(頂点シェーダ、ピクセルシェーダなどを伴う)3次元処理パイプラインを使用した情報のレンダリングなど、繰り返し実行される情報集約型レンダリングタスク(information−intensive rendering task)を実行する。したがって、GPUの使用の中核は、GPUを使用して、様々なシーン、キャラクタ、特殊効果などをレンダリングするゲームおよびシミュレーション技術である。反復型または情報集約型のタスクをGPUに割り振ることによって、システムのCPUを解放して他のハイエンドの管理タスクを行えるようにし、したがって、こうしたシステムの性能が向上する。この場合、システム1500は、ゲーム情報を生成するのではなく、グラフィックスモジュール機能を使用して、任意の種類の出力装置への出力前に、受信された画像情報(ビデオ情報など)を変更する。例えば、システム1500の1つの用途は、DVDからビデオ情報を受信し、(例えばビデオ情報上にテキスト文字を結合することによって)グラフィックス機能内のビデオ情報における合成を実行し、次いで結果として得られた信号をテレビに出力することである。
上記の概要を踏まえて、次に、図15の構成要素例のそれぞれについて、以下で説明する。後のサブセクション(B.3)では、図1に示したパイプライン100の態様を実施するために、グラフィックスモジュール機能をどのように使用できるかに関する、より固有の情報を提供する。
まず初めに、システム1500は、画像情報をいくつかのソースのうちの任意の1つから受け付ける。例えば、システム1500は、ネットワーク1502(インターネットに結合されているリモートソースなど)、任意の種類のデータベース1504、任意の種類のコンピュータ可読ディスク媒体1506(光ディスク、DVDなど)、または他の何らかのソース1508から画像情報を受け付けることができる。いかなる場合でも、受信された情報は、画像情報と音声情報との組合せを含んでいてもよい。逆多重化ユニット1510は、画像情報から音声情報を分離する。音声処理機能1512は、音声情報を処理する。
画像デコーダ1514は、画像情報を処理する。画像デコーダ1514は、圧縮された画像情報を、例えば、その受信されたフォーマットから、他の何らかのフォーマットに変換することができる。画像デコーダ1514の出力は、いわゆる純粋な画像情報、および画像サブストリーム情報を含むことができる。純粋な画像情報は、ディスプレイ装置にレンダリングされる主な画像ストリームを構成する。画像サブストリーム情報は、クローズキャプション情報、任意のグラフィックオーバーレイ情報(様々なグラフィカル編集制御など)、DVDプレイヤに表示される様々な種類のサブ画像などの、純粋な画像情報に関連付けられている任意の補助情報を構成することができる。(別の実装形態では、ビデオデコーダの何らかの態様を、グラフィックスモジュール機能に割り当てることができる)。
一実装形態例では、ビデオミキシングレンダラー(VMR)モジュール1516は、こうして受信された画像情報の処理において中心的な役割を果たす。概要として、VMRモジュール1516は、グラフィックスインタフェース1518およびディスプレイドライバ1520と対話し、ディスプレイドライバ1520は次いで、グラフィックスモジュール1522を制御する。この対話は、グラフィックスモジュール1522の機能を探ることを伴い得る。また、この対話は、グラフィックスインタフェース1518、ディスプレイドライバ1520、およびグラフィックスモジュール1522による画像情報の処理の調整も伴う。一実装形態では、グラフィックスインタフェース1518は、Microsoft(登録商標)CorporationのDirectXによって提供されるDirectDraw機能を使用して実施することができる。DirectDrawは、この状況では、VMRモジュール1516をグラフィックスモジュール1522に通信上結合するためのメッセージ伝達用コンジット(messaging conduit)として働く。グラフィックスモジュール1522自体は、コンピュータまたは同様の装置内で固定モジュールを構成したり、グラフィックスカードなど、脱着式のユニットを構成したりすることができる(一般に、この開示の最初のセクションで言及した本発明の譲受人に譲渡された出願は、グラフィックスモジュール1522と対話するためにVMRモジュール1516が使用できるデータ構造例に関する詳細を提供する。この対話は、本開示の焦点ではないため、こうした対話の詳細は、ここでは繰り返さない)。
グラフィックスモジュール1522自体は、1つまたは複数のグラフィックス・プロセッシング・ユニット(GPU)1524を含む。上述したように、システムは、図1に示されている処理操作の任意の組合せをGPU1524に割り当てることができる。GPU1524は、ピクセルシェーダ1526を使用してこれらのタスクを行う。ピクセルシェーダは、ピクセルごとに画像情報に対する様々な種類の操作を行うことができる機能を指す。サブセクションB.3は、一般的なピクセルシェーダのアーキテクチャ、および図1に示した操作を実行するためにこうした技術がどのように使用されるかに関する追加の情報を提供する。
GPU1524は、グラフィックスモジュール1522に関連付けられているローカルメモリ1528と対話することができる。このローカルメモリ1528は、任意の数の格納関連の目的を果たすことができる。例えば、このメモリ1528は、次いで(ディスプレイモニタ、テレビ、記憶装置、ネットワークターゲットなど)出力装置1530に転送される最終的な画像面を格納することができる。
B.3.ピクセルシェーダ関連の改良
背景として、図16は、3D処理パイプラインで一般に使用されるピクセルシェーダ1600の既知のアーキテクチャを示している。一般的なピクセルシェーダアプリケーションの各ピクセルは、RGBA(赤、緑、青、アルファ)など、各値が別々のチャネルに対応する、4つの浮動小数点値のベクトルによって表すことができる。ピクセルシェーダ1600アーキテクチャは、一連の入力/出力レジスタ(1602、1604、1606、1608)、および入力データに対する演算を行う演算論理ユニット(ALU)1610を含む。より詳細には、レジスタは、カラーレジスタ1602を含む。これらのレジスタ1602は、反復された頂点カラーデータを頂点シェーダ(図示せず)からピクセルシェーダ1600に流す。定数レジスタ1604は、ユーザ定義の定数をピクセルシェーダ1600に提供する。出力/一時レジスタ1606は、中間計算のために、一時的な記憶域を提供する。また、レジスタr0は、このレジスタセット内に、ピクセルシェーダ1600の出力を受信する。テクスチャレジスタ1608は、テクスチャデータをピクセルシェーダALU1610に提供する。ピクセルシェーダALU1610は、プログラムに基づいて演算命令およびテクスチャアドレス指定命令(texture addressing instruction)を実行する。プログラムは、1組の許容可能なピクセルシェーダコマンドから選択された命令の集まりを含む。
次の説明は、ピクセルシェーダALU1610に画像情報およびフィルタの重みを送り込むテクスチャレジスタ1608(以下、より総称的に「ユニット」と呼ぶ)の使用に特に焦点を置く。したがって、図17との関連でテクスチャの概念に関する追加の入門情報を提供する。
大ざっぱに言えば、ゲームの用途では、テクスチャは、キャラクタ、シーンなどを定義する多角形表面に「貼り付けられる」画像を定義する。図17は、テクスチャ1702が多角形1704に適用されるテクスチャ適用操作1700を示している。多角形1704は、四角形を形成するようにアセンブルされた2つの三角形の基本形状から成る。多角形1704は、4つの頂点V1、V2、V3、V4を含む。各頂点は、テクスチャ座標を含む。テクスチャ座標は、従来のUおよびVの基準システムを基準にして指定される。この基準システムでは、U座標は、一般にX軸に相当し、V座標は、一般にY軸に相当する。U軸の値は、0.0から1.0の範囲に固定され、同様に、V軸の値は、0.0から1.0の範囲に固定される。
頂点に関連付けられているテクスチャ座標は、テクスチャ1702がどのように多角形1704に配置されるかを指定する。図17の例の場合、頂点V1は、0.0,0.0のテクスチャ座標を有し、これは、テクスチャ1702の左上角に相当する。頂点V2は、テクスチャ座標1.0,0.0を有しており、これは、面1702の右上角に相当する。頂点V3は、テクスチャ座標0.0,0.5を有しており、これは、テクスチャ1702の左縁の中央に相当する。また、頂点V4は、テクスチャ座標1.0,0.5を有しており、これは、テクスチャ1702の右縁の中央に相当する。したがって、テクスチャ座標に従ってテクスチャ1702が多角形1704にマッピングされた場合、テクスチャ1702の上半分のみが多角形1704に適用される。テクスチャ1702の多角形1704への適用の結果がテクスチャ済み面1706に示されている。
3D処理パイプラインは、一般的には、ゲーム情報の生成との関連で開発された、いくつかの特別なテクスチャ処理操作を可能にする。特別な操作の1つは、折り返しモードと呼ばれる。折り返しモードでは、3D処理パイプラインは、例えばある場合、同じコンテンツを有するテクスチャの行またはマトリックスを生成するために、テクスチャを任意の回数繰り返す。ミラーモードも隣接するテクスチャを複写するが、鏡がそうするのと同じように、テクスチャを反転する(映す)。
一般の性質の任意のピクセルシェーダのトピックに関するこれ以上の情報は、Wolfgang F. Engel, Direct3D ShaderX: Vertex and Pixel Shader Tips and Tricks, Wordware Publishing, Inc., 2002など、市販のテキストのいくつかで見つけることができる。
上記の導入を踏まえて、残りの説明では、ピクセルシェーダを使用して図1に示されている画像処理パイプラインの態様を実施する新しい技術例について述べる。
まず初めに、図18は、4つのタップを含むカーネルを有する画像処理フィルタを実施するための(図15の)ピクセルシェーダ1526の適用例1800を示している。図18に示されている処理のタイプは、図1のパイプライン100によって実行される他の多くの操作の基礎でもあるため、図18に関して記載されている原理は、ピクセルシェーダ1526によって実行することができる他の種類の処理に適用される。4タップのフィルタカーネルの場合は、当然単なる例にすぎないが、以降の例では、このモデルをどのように異なるフィルタ設計に拡張できるかについて説明する。
一般に、GPU1524は、1つまたは複数の入力画像にわたってスキャンし、それぞれからピクセル値を抽出し、入力に基づいて計算を適用し、単一のピクセルを出力するように構成することができる。この操作は、output(x,y)=function(input1(x,y),input2(x,y),・・・inputp(x,y),array constants[m])と表すことができる。言い換えれば、この一般的な式は、結果(output(x,y))は、様々な入力信号(input1(x,y),input2(x,y),・・・inputp(x,y))の何らかの関数、および任意選択で、様々な定義済みの定数(array constants[m])に数学的に依存することを示している。
フィルタを使用する画像処理の特定の状況では、ピクセルシェーダ1526は、画像に適用される関連のフィルタの重みとともに、1つまたは複数の入力画像の入力を必要とする。より正式には、出力ピクセルに関連付けられている出力(Out[x])を生成するフィルタは、次のように定義することができる。
Out[x]=sum(in[x−taps/2+i]*kernel[i],i=0・・・taps−1)
言い換えれば、あるピクセルの出力(Out[x])は、異なる入力項の加重総和を表す。カーネルは、入力項に適用される加重情報を表す。次に、異なる入力項は、入力画像情報からの同じ引用のシフト済みバージョンを表すことができる。
図18は、ピクセルシェーダ1526が上記の式をどのように実施できるかを示している。示されている4タップ例1800は、ピクセルシェーダALU1804に入力を提供する一連のテクスチャユニット1802を示している。そこに示されているこの手法は、第1のテクスチャユニットにフィルタの重みを割り当てることであり、同じ画像情報の異なる4つのデルタシフトバージョンを次の4つのテクスチャユニット(カーネルの4つのタップを表す)に割り当てている。ピクセルシェーダALU1804は、テクスチャユニットに格納されている情報を読み込み(単一の読み取り操作で)、特定のピクセルの単一の出力を提供する(単一の書き込み操作で)。この手順は、画像全体を処理するために、複数回繰り返される。この手法では、サポートウィンドウにより「Tap」フィルタタップのI−D重畳フィルタを定義する。
図18に示されている操作例1800は、より正式に次のように表すことができる。使用中の1−Dカーネル例は、幅「w」ピクセル幅、およびw[−1]、w[0]、w[2]、およびw[3]のカーネルの重みを有する。重みテクスチャは、ピクセルごとにフィルタカーネルの4つの重みを計算することによって計算される。1−Dカーネルは、in[−1]、in[0]、in[l]、およびin[2]と定義された4つの入力も含む。記号Δは、1/wと定義される。これが与えられると、以下の情報は、テクスチャユニット1〜5に割り振られる。
テクスチャ1:座標0・・・1の「重みテクスチャ」
テクスチャ2:in[−1]、(0・・・1)+(−1)*Δ(すなわち0−Δから1−Δまで)の座標の入力画像
テクスチャ3:in[0]、(0・・・1)+(0)*Δの座標の入力画像
テクスチャ4:in[1]、(0・・・1)+(1)*Δの座標の入力画像
テクスチャ5:in[2]、(0・・・1)+(2)*Δ(すなわち0+2*Δから1+2*Δまで)の座標の入力画像
tnがテクスチャユニット「n」からフェッチされるピクセルを表す場合、ピクセルシェーダALU1804によって実行される計算は、以下のプログラムによって表すことができる。
言い換えれば、アレイwには、まず、最初のテクスチャユニット(t1)に格納された加重情報の値が割り当てられる。次いで、出力結果(Out.rgba)は、重みwによってテクスチャユニットt2−t5に含まれるシフト済み画像情報を変更することによって形成される。レジスタ情報に取り付けられたサフィックスは、チャネル情報を定義する。したがって、出力Out.rgbaは、赤、緑、青、およびアルファのチャネルに格納された4つの浮動小数点のベクトルを表す。1つのユニットが加重情報の格納に割り振られるため、上記のアルゴリズムは、例えば「タップ」+1入力テクスチャユニットを必要とすることがわかる。
一般に、入力画像情報がRGB形式で表される場合、テクスチャユニットは、等しい量の赤色成分、緑色成分、青色成分を格納することができる。しかし、ピクセルシェーダが輝度関連の画像情報(YUV)の処理に適用される場合、テクスチャユニットは、色度情報(U,V)に対してより多くの輝度情報を格納することができる。この対策は、人間の目が色度情報より輝度情報に敏感であるという事実を利用するので、許容できる出力結果を達成するために、輝度情報に比べて色度情報を同じだけ格納し、処理する必要はない。
上述した手法のいくつかの変形および最適化が含まれる。
1つの変形によれば、任意のテクスチャを、画像情報の無限のタイルとして扱うために、上述した折り返しモードを使用することができる。このモードを使用すると、ある手法は、0・・・1ではなく、0から1.0/gcd(SourceWidth,DestinationWidth)までの入力加重テクスチャの座標を設定することである。このテクスチャの適用の際、テクスチャプレフェッチユニット(texture prefetch unit)は、テクスチャに格納されている加重情報の次のコピーに自動的に「折り返される」。この対策によって、設計者は、カーネルの格納要件を低減し、さらに、必要なときはいつでも、その情報を複製して適用することを確実にすることができる。
別の変形によれば、カーネルは、4つを超えるタップを有していてもよい。この状況に対処するために、一実装では、カーネル加重情報の設定を4つの値のグループに分割し、それぞれを追加の入力「加重」テクスチャに割り当てることができる。6つのタップがある場合を考える。この場合、一実装形態は、2つの加重テクスチャ(第1のテクスチャは4つの値を有し、第2のテクスチャは残りの2つの値を有し、2つのスロットは未使用のままとする)を使用することができる。また、この実装形態は、6つの入力画像テクスチャを必要とする。したがって、この設計を実施するために、8テクスチャGPUを使用して、単一のパスで6つのタップのフィルタリングを行うことができる。
別の変形によれば、タップ数は、テクスチャユニットの数を超えてもよい。出力画像情報の計算が「タップ」項の合計を表すことに留意されたい。したがって、合計の計算を複数の処理パスに分割することによって、より多くのタップを計算することができる。例えば、フィルタカーネルが12個のタップを有している場合、一実装形態は、
Out[x]=sum(in[x+i]*w[i],i=0..11)を次のように計算することができる。
次いで、この実装形態は、最終的なパスを使用して結果を結合することができる。
別の考え得る実装形態は、以下の一連の演算を介して、総計のOut[x]結果を形成することができる。
後者の手法は、実質的に、前者の手法よりメモリが少なくてすむが、前者の手法に比べて2倍のメモリアクセスが必要にもなる(例えば読み込み×4および書き込み×3など)。GPUでの読み込み−変更−書き込みサイクルは、非常に費用がかかるか、場合によっては禁止されるため、後者の方式のこの特徴は、実行不可能になる可能性がある。
別の変形によれば、一実装形態は、定義された画像情報外のすべてのピクセルを黒(または他の何らかのデフォルトの値)と扱う特別なモード(「キルピクセル(kill pixel)」)を提供することができる。この対策は、表示すべきではない情報におけるエッジを自動的に「隠す」条件に適用することができる。
別の変形によれば、一実装形態は、画像情報の処理の際に上述したミラーモードを適用することができる。このモードは、画像情報の境界外の画像情報を参照するとき、画像情報を水平方向または垂直方向に映す。
図19は、上述した多くの特徴を要約する手順1900を示す。ステップ1902は、様々な入力情報をピクセルシェーダの様々な入力ユニットに割り当てることを伴う。こうした情報は、様々なテクスチャユニットに適用された画像情報および加重情報、様々な定数ユニットに適用された定数などを含むことができる。ステップ1904は、ピクセルシェーダALU1804に提供されたプログラミング命令に基づいて、ピクセルごとに出力画像情報を計算することを伴う。ステップ1906は、追加のパスが必要かどうかを判定する。必要である場合、手順1900は、図19に示されている操作のうちの1つまたは複数を1回または複数回繰り返す。ステップ1908は、最終的な出力結果をもたらす。
最後のトピックとして、図20は、図1との関連で紹介したいくつかの操作を実行するピクセルシェーダ1526の用途を示している。図20は、特に、パイプラインが4:2:2YUV画像情報を受信し、それをアップサンプリングし、線形RGB形式に変換し、結果として得られた線形情報に対する変倍を行う1つの用途例を扱う。図20に示された処理は、図18および図19に関して上記で開発された概念に基づく。
ハイブリッド平面フォーマット(hybrid planar format)(NV12など)で表される4:2:0画像情報は、輝度平面および色度平面を含むものと見なすことができることに留意されたい。したがって、この情報に対するいくつかの操作を並列で行うことが可能である。
1つの手法は、テクスチャユニットを2つのグループに分割することであり、1つのグループは、色度成分の補間に使用するためのものである。このアップサンプリング操作は、4:4:4色度情報を生成するために使用することができる拡大操作を呼び出す。次いで、ピクセルシェーダ1526は、輝度成分および補間された色度成分を使用して、ピクセルごとに、伝達マトリックスを使用して対応するR’G’B’情報を計算することができる。次に、ピクセルシェーダ1526は、伝達関数を適用して、画像情報を線形化することができる。次いで、ピクセルシェーダ1526は、第2のグループのテクスチャユニットを使用して、RGB空間でのそれ以上の変倍を行うために使用することができる。
より正式には、以下は、上記で識別した方法で画像情報を変換するために使用することができるステップのシーケンス例を識別する。
1)第1の変倍操作を行うように、上述した方法(図18に示されている)でテクスチャ1〜5を設定する。
2)上述した変倍操作を使用して、輝度情報の2倍のサンプリングレートでCbCr情報を計算する。
3)Y’CbCrからR’G’B’色空間への変換マトリックスを、マトリックスMとして16の定数のアレイにロードする。
4)以下の方法でR’G’B’情報を計算する。
5)伝達関数を使用してR’G’B’からRGBを計算する。
6)変倍された線形RGBデータを、(図18を参照して)上述したアルゴリズムを使用して、しかし6〜12のテクスチャで計算することによって、第2の変倍操作を行う。
7)水平方向の変倍が行われた後、垂直方向の変倍をRGB情報に適用する。
図20は、上述したアルゴリズムをフローチャートの形で説明する手順2000を示す。ステップ2002は、適切なテクスチャユニット(例えば第1の組のテクスチャユニット)に情報を割り当てることを伴う。ステップ2004は、第1の組のテクスチャユニットを使用して、色度情報をアップサンプリングすることを伴う。ステップ2006は、色空間の変換の実行に使用する定数をピクセルシェーダ1526にロードすることを伴う。ステップ2008は、定数を使用して、画像情報を非線形R’G’B’形式に変換することを伴う。ステップ2010は、R’G’B’情報を線形RGB形式に変換することを伴う。また、ステップ2012は、RGB情報の変倍を伴う。
C.コンピュータ環境例
一実装形態例では、コンピューティング機器によって、上記の図に示した処理の様々な態様を実行することができる。この場合、図21は、上記の図に示された処理の態様を実施するために使用できるコンピュータ環境例2100に関する情報を提供する。例えば、コンピュータを使用して、図1に示した画像処理パイプライン100の一部またはすべてを実施することができる。
コンピューティング環境2100は、汎用型コンピュータ2102およびディスプレイ装置2104を含む。しかし、コンピューティング環境2100は、他の種類のコンピューティング機器を含んでいてもよい。例えば、図示していないが、コンピュータ環境2100は、ハンドヘルドまたはラップトップ装置、セットトップボックス、ゲームコンソール、ビデオ処理/表示装置(テレビ、DVRなど)に統合された処理機能、メインフレームコンピュータなどを含み得る。さらに、図21は、説明を容易にするためにグループ化されたコンピュータ環境2100の要素を示している。しかし、コンピューティング環境2100は、分散処理構成を使用することができる。分散コンピューティング環境では、コンピューティングリソースは、その環境にわたって物理的に分散することができる。
コンピュータ例2102は、1つまたは複数のプロセッサまたは処理ユニット2106、システムメモリ2108、およびバス2110を含む。バス2110は、様々なシステム構成要素を接続する。例えば、バス2110は、プロセッサ2106をシステムメモリ2108に接続する。バス2110は、様々なバスアーキテクチャのうちの任意のバスアーキテクチャを使用するメモリバスまたはメモリコントローラ、周辺バス、高速グラフィックスポート、およびプロセッサまたはローカルバスを含めて、任意の種類のバス構造またはバス構造の組合せを使用して実装することができる。また、コンピュータ2102は、上述した方法で、1つまたは複数のGPUユニット(図示せず)に結合することもできる。
また、コンピュータ2102は、リムーバブルまたはノンリムーバブルとすることができる様々なタイプの揮発性、不揮発性媒体を含めて、様々なコンピュータ可読媒体を含むこともできる。例えば、システムメモリ2108は、ランダムアクセスメモリ(RAM)2112などの揮発性メモリ、読み取り専用メモリ(ROM)2114などの不揮発性メモリの形のコンピュータ可読媒体を含む。ROM2114は、例えば起動中など、コンピュータ2102内の要素間での情報の転送を助ける基本ルーチンを含む入力/出力システム(BIOS)2116を含む。RAM2112は、一般的には、プロセッサ2106によって迅速にアクセスできる形のデータおよび/またはプログラムモジュールを含む。
他の種類のコンピュータ記憶媒体は、ノンリムーバブル不揮発性磁気媒体から読み取り、そこに書き込むハードディスクドライブ2118、(「フロッピー(登録商標)ディスク」など)リムーバブル不揮発性磁気ディスク2122から読み取り、そこに書き込む磁気ディスクドライブ2120、およびCD−ROM、DVD−ROM、または他の光媒体など、リムーバブル不揮発性光ディスク2126から読み取り、かつ/またはそこに書き込む光ディスクドライブ2124を含む。ハードディスクドライブ2118、磁気ディスクドライブ2120、および光ディスクドライブ2124はそれぞれ、1つまたは複数のデータ媒体インタフェース2128によってシステムバス2110に接続されている。あるいは、ハードディスクドライブ2118、磁気ディスクドライブ2120、および光ディスクドライブ2124を、SCSIインタフェース(図示せず)または他の結合機構によってシステムバス2110に接続することができる。図示していないが、コンピュータ2102は、磁気カセットまたは他の磁気記憶装置、フラッシュメモリカード、CD−ROM、デジタル多用途ディスク(DVD)または他の光記憶装置、電気的消去可能プログラマブルROM(EEPROM)など、他のタイプのコンピュータ可読媒体を含むことができる。
一般に、上記で識別されたコンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、およびコンピュータ2102によって使用する他のデータの不揮発性記憶装置を提供する。例えば、可読媒体は、オペレーティングシステム2130、アプリケーションモジュール2132、他のプログラムモジュール2134、およびプログラムデータ2136を格納することができる。
コンピュータ環境2100は、様々な入力装置を含むことができる。例えば、コンピュータ環境2100は、コマンドや情報をコンピュータ2102に入力するためのキーボード2138およびポインティング装置2140(「マウス」など)を含む。コンピュータ環境2100は、マイクロフォン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、シリアルポート、スキャナ、カード読み取り装置、デジタルカメラまたはビデオカメラなど、他の入力装置(図示せず)を含み得る。入力/出力インタフェース2142は、入力装置をプロセッサ2106に結合する。より一般には、入力装置は、パラレルポート、シリアルポート、ゲームポート、ユニバーサルシリアルバス(USB)ポートなど、任意の種類のインタフェースおよびバス構造を介してコンピュータ2102に結合することができる。
コンピュータ環境2100は、ディスプレイ装置2104も含む。ビデオアダプタ2144は、ディスプレイ装置2104をバス2110に結合する。ディスプレイ装置2104に加えて、コンピュータ環境2100は、スピーカ(図示せず)、プリンタ(図示せず)など、他の出力周辺装置を含み得る。
コンピュータ2102は、リモートコンピューティング装置2146など1つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク式環境で動作する。リモートコンピューティング装置2146は、汎用パーソナルコンピュータ、ポータブルコンピュータ、サーバ、ゲームコンソール、ネットワーク拡張装置など、任意の種類のコンピュータ機器を含み得る。リモートコンピューティング装置2146は、コンピュータ2102に関して上述した特徴のすべて、またはその一部を含み得る。
WAN、LANなど、任意のタイプのネットワーク2148を使用して、コンピュータ2102をリモートコンピューティング装置2146に結合することができる。コンピュータ2102は、ネットワークインタフェース2150を介してネットワーク2148に結合し、これには、広帯域接続、モデム接続、DSL接続、または他の接続方式を使用することができる。図示されていないが、コンピューティング環境2100は、(例えば変調された無線信号、変調された赤外線信号などを介して)コンピュータ2102をリモートコンピューティング装置2146に結合する無線通信機能を提供することができる。
最後に、この開示では、いくつかの例を代替により(ケースAまたはケースBなど)示してきた。さらに、この開示は、すべての場合において、同時に使用されているケースを明示的に言及してない場合でさえ、代替を単一の実装形態で同時に使用するケース(例えばケースAおよびケースB)を含む。
さらに、本明細書にはいくつかの特徴が記載されており、まず、これらの特徴が対処することができる問題例を識別した。この説明方法は、他人が本明細書に指定された方法で問題を理解し、かつ/または明確にしたことを認めているわけではない。ビデオ処理の技術分野における問題の理解および明確化は、本発明の一部として理解されるものとする。
本発明は、構造的な特徴および/または方法動作に固有の言葉で記載されているが、添付の特許請求の範囲に定義された本発明は、記載されている固有の特徴および動作に必ずしも限定されるわけではないことを理解されたい。むしろ、固有の特徴および動作は、請求した本発明を実施する形式例として開示される。