(57)【特許請求の範囲】
【請求項１】
入力データサンプルに適応フィルタ操作を実行して出力データサンプルを生成する方法で、論理データ項目に論理計算を実行し入力データサンプルにフィルタリング計算を適用するかどうかを判別する方法であって、
（ａ）前記論理計算を、前記フィルタリング計算を組み込んだ等価な論理計算へ変換するステップと、
（ｂ）前記入力データサンプルと前記論理データ項目をデータワードに記憶するステップと、
（ｃ）データ処理装置を使用して、前記フィルタリング計算を前記データワードに適用し、その結果、フィルタ済みデータサンプルと修正済み論理データ項目を含む前記データワードを得るステップと、
（ｄ）前記修正済み論理データ項目と所定の基準とを比較するステップと、
（ｅ）前記ステップ（ｄ）の比較に従い、前記入力データサンプルまたは前記フィルタ済みデータサンプルから取り出したデータサンプルのいずれかを出力データサンプルとして出力するステップと、
を含むことを特徴とする方法。
【請求項２】
請求項１に記載の方法であって、前記ステップ（ｂ）で、複数の入力データサンプルと対応論理データ項目とをデータワードに記憶し、これにより、前記ステップ（ｃ）で、複数の入力データサンプルにフィルタリング計算を同時に適用することを特徴とする方法。
【請求項３】
請求項２に記載の方法であって、前記ステップ（ｄ）と（ｅ）とを各データサンプルについて独立して実行することを特徴とする方法。
【請求項４】
請求項１に記載の方法であって、前記ステップ（ｄ）で使用する所定の基準は、修正済み論理データ項目がとることができる最大値及び最小値であって、フィルタ済みデータサンプルから取り出すデータサンプルは、対応する論理データ項目が最大値または最小値の場合に前記ステップ（ｅ）で出力されることを特徴とする方法。
【請求項５】
請求項１に記載の方法であって、前記ステップ（ｂ）で、入力データサンプルと対応論理データ項目とは所定のビット数だけデータワード内で離しておき、フィルタリング計算適用時に相互間で調整しなくても値を増加できるようにすることを特徴とする方法。
【請求項６】
請求項１に記載の方法であって、フィルタリング計算では所定の有限長インパルス応答（ＦＩＲ）フィルタをデータワードに適用して、それぞれが所定の整数係数で乗算された入力データサンプルと隣接データサンプルの累算に等しいフィルタ済みデータサンプルを各入力データサンプルについて生成することを特徴とする方法。
【請求項７】
請求項６に記載の方法であって、前記ステップ（ｄ）で、フィルタ済みデータサンプルを使用して出力データサンプルを作成することを決定したら、フィルタ済みデータサンプルを所定の因数で除算してフィルタリング計算における整数係数の使用を訂正することで、フィルタ済みデータサンプルから導き出されたデータサンプルを生成するステップを、前記ステップ（ｅ）に組み込むことを特徴とする方法。
【請求項８】
請求項６に記載の方法であって、データワードに次々に適用する複数のカスケードフィルタでＦＩＲフィルタを構成することを特徴とする方法。
【請求項９】
請求項１に記載の方法であって、適応フィルタ操作をイメージ処理アプリケーションの一部として適用する方法で、各入力データサンプルはイメージピクセルのデータを表していることを特徴とする方法。
【請求項１０】
請求項９に記載の方法であって、適応フィルタ操作を使用して伸長イメージのデリンギングを実行し、圧縮の影響を抑制することを特徴とする方法。
【請求項１１】
請求項１０に記載の方法であって、適応フィルタ操作を使用してＭＰＥＧ−４伸長イメージのデリンギングを実行し、各入力データサンプルの論理データ項目は入力データサンプルと所定のしきい値とを比較することで生成したインデックス値であり、該インデックス値は該比較の結果により第１または第２の論理値に設定することを特徴とする方法。
【請求項１２】
請求項１１に記載の方法であって、データワードは３２ビットで、各入力データサンプルは８ビットで、各インデックス値は１ビットで、前記ステップ（ｂ）は第１及び第２の入力データサンプル及び対応インデックス値を３２ビットデータワードに格納するステップを含み、各入力データサンプルは対応インデックス値とデータワード内で４つの間隔ビットにより分離し、第１の入力データサンプルのインデックス値はデータワードに記憶されている第２の入力データサンプルと３つの間隔ビットにより分離することを特徴とする方法。
【請求項１３】
請求項１２に記載の方法であって、間隔ビットには既知の値が割り当てられていることを特徴とする方法。
【請求項１４】
請求項１２に記載の方法であって、フィルタリング計算では所定の有限長インパルス応答（ＦＩＲ）フィルタをデータワードに適用することで、それぞれ所定の整数係数で乗算された入力データサンプルと隣接データサンプルとの累算と等しいフィルタ済みデータサンプルを入力データサンプルごとに生成し、フィルタリング計算に使用する整数係数はフィルタ済みデータサンプルと修正済み論理データ項目が対応入力データサンプルと論理データ項目の最大１６倍とする方法であって、第１の入力データサンプルから作成したフィルタ済みのデータサンプルの出力を前記ステップ（ｄ）において決めた場合は、第１の入力データサンプルに対応する修正済み論理データ項目が最大値の場合に第２の入力データサンプルから作成したフィルタ済みデータサンプルを訂正するための操作を適用するステップをさらに含むことを特徴とする方法。
【請求項１５】
入力データサンプルに適応フィルタ操作を実行して出力データサンプルを生成するデータ処理装置であって、論理データ項目に論理計算を実行して入力データサンプルにフィルタリング計算を適用するかどうかを決定し、前記論理計算は前記フィルタリング計算を組み込んだ等価の論理計算に変換されている装置であって、
前記入力データサンプルと前記論理データ項目とを含むデータワードを記憶する記憶装置と、
データ処理装置であって、
（ｉ）前記入力データサンプルと前記論理データ項目とを含む前記データワードを作成し、
（ｉｉ）前記フィルタリング計算を前記データワードに適用して、その結果、フィルタ済みデータサンプルと修正済み論理データ項目を含む前記データワードを生じ、
（ｉｉｉ）前記修正済み論理データ項目と所定の基準とを比較し、
（ｉｖ）前記ステップ（ｉｉｉ）の比較結果に従い、前記入力データサンプルまたは前記フィルタ済みデータサンプルから取り出したデータサンプルのいずれかを出力データサンプルとして出力する、
一連のデータ処理操作を適用するデータ処理装置と、
を備えることを特徴とする装置。
【請求項１６】
請求項１に記載の方法を実行するようにデータ処理装置を作動できるコンピュータプログラム。
【請求項１７】
請求項１６に記載のコンピュータプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、入力データサンプルに適応フィルタ操作を実行して出力データサンプルを生成するデータ処理装置と方法に関する。適応フィルタ操作は、論理データ項目に論理計算を実行し、入力データサンプルにフィルタリング計算を適用するかどうかを判別する操作である。したがって、フィルタリング計算は、通常はすべてのデータサンプルではなく一部のデータサンプルにだけ適用するもので、かつ、各ケースにおいて実行される論理計算に従属する他のサンプルには適用しない。
【０００２】
【従来の技術】
適応フィルタ操作は、各種データ処理アプリケーションで必要になることがある。適応フィルタ操作が使用される分野には、たとえば、イメージ処理アプリケーションがある。この分野における適応フィルタ操作への入力データサンプルはイメージピクセルのデータ、例えば、当該イメージピクセルの輝度またはクロマデータを表している。適応フィルタ操作を使用する具体的なイメージ処理アプリケーションは、圧縮による影響を抑制するために伸長イメージのデリンギング（deringing）を実行するときである。イメージを圧縮してから記憶したり送信したりすると、圧縮技法がロッシー（lossy、非可逆）の場合は、伸長イメージに圧縮の影響が現れることがある。リンギングの影響はロッシー圧縮技法を使用する場合に発生する影響の１つで、この影響は均一のイメージエリアなどでは、通常は、目で見て分かるものである。
【０００３】
例えば、ＭＰＥＧ−４圧縮はロッシーなイメージ圧縮技法であるため、ＭＰＥＧ−４イメージを伸長した後はデリンギング操作を実行することが望ましいことがある。ＭＰＥＧ−４標準で定義している伸長に関する詳細事項、及びＭＰＥＧ−４標準と互換性を保つためにデリンギングを実行した方がよい機能については、ビデオ圧縮に関するＭＰＥＧ−４標準「ＩＳＯ／ＩＥＣ  １４４９６」、第２部で記述している。
【０００４】
デリンギングでは、通常、論理規則を使用して２Ｄ有限長インパルス応答（ＦＩＲ）フィルタの出力で各ピクセルを上書きするかまたはそのまま残すかを判別している。したがって、デリンギングを行うと適応フィルタ操作が行われる。したがって、通常のデリンギング技法では、各ピクセルについて当該ピクセルをＦＩＲフィルタの出力で上書きするかどうかを決定するために必要な論理規則または計算を最初に実行する。出力を上書きすることを決定したら、元のピクセルの場所にフィルタ済みのデータサンプルを出力するために、ＦＩＲフィルタリング計算を実行する。したがって、デリンギング処理はプロセッサ集中処理になることが分かる。これは、各ピクセルに論理計算を実行し、ＦＩＲフィルタの出力でピクセル値を上書きすることを決定した場合は、その論理計算に続けてフィルタリング計算を実行しなければならないからである。このデリンギング処理は、ＭＰＥＧ−４イメージの復号に必要な他の各種処理ステージを実行してからさらに実行する必要がある。しかも、通常は、１秒間に複数回（例えば１／１５秒に１回）イメージフレームを作成する必要がある。
【０００５】
したがって、適応フィルタ操作をより効果的に実行する技法を提供することが望まれている。
【０００６】
【発明の要約】
第１の側面から考えると、本発明は、入力データサンプルに適応フィルタ操作を実行して出力データサンプルを生成する方法で、論理データ項目に論理計算を実行し入力データサンプルにフィルタリング計算を適用するかどうかを判別する方法であって、（ａ）フィルタリング計算を含む等価な論理計算へ論理計算を変換するステップと、（ｂ）入力データサンプルと論理データ項目をデータワードに記憶するステップと、（ｃ）データ処理装置を使用してフィルタリング計算をデータワードに適用し、フィルタ済みデータサンプルと修正済み論理データ項目とをデータワードに記憶させるステップと、（ｄ）修正済み論理データ項目と所定の基準とを比較するステップと、（ｅ）前記ステップ（ｄ）の比較に従い、入力データサンプルまたはフィルタ済みデータサンプルから取り出したデータサンプルのいずれかを出力データサンプルとして出力するステップと、を含むことを特徴とする方法を提供する。
【０００７】
したがって、本発明では、フィルタリング計算を適用するかどうかを決定するのに必要な論理計算を、フィルタリング計算を含む等価な論理計算に変換する。次に、入力データサンプルと対応論理データ項目とを適当なパック技法などを使用してデータワードに記憶させ、その後、フィルタリング計算をデータワードに適用して、フィルタ済みデータサンプルと修正済み論理データ項目とをデータワードに記憶させる。修正済み論理データ項目と所定の基準とを比較することで、出力データサンプルを元の入力データサンプルのままするかまたはフィルタ済みデータサンプルから取り出したデータサンプルにするかを決定できる。
【０００８】
したがって、本発明では、論理計算をフィルタリング計算と同時に実行するため、フィルタリング計算を大部分のデータサンプルに適用しなければならない「最悪のケース」のシナリオなどでは、適応フィルタ操作の効率を大幅に向上させる。最悪のケースのシナリオに要する時間が非常に重要な課題になることがある。これは、最終的なシステムのリアルタイムパフォーマンスを低下させる可能性があるからである。
【０００９】
本発明を使用することで、適応フィルタ操作は通常は上記で説明した従来技法に比べ短いクロックサイクルで実行できるため、適応フィルタ操作の実行速度が向上する。速度を向上させる代わりに、クロック周波数を低減させることも可能である。これは、適応フィルタ操作の所要時間が従来技術と同じであっても実行する処理装置のクロックが遅いため、消費電力を大幅に節減できるようにするためである。具体的に実現する場合は、当然のことながら、操作の速度向上と電力消費の低減とのバランスを考慮して決めることができる。
【００１０】
従来技術の適応フィルタ操作では、通常は、適応フィルタ操作を入力データサンプルごとに順次に実行しなければならない。しかし、本発明の好ましい実施例では、複数の入力データサンプルと対応論理データ項目とをデータワードに格納し、複数の入力データサンプルについてフィルタリング計算を同時に実行できる。したがって、本発明の好ましい実施例では単一命令多重データ（ＳＩＭＤ）型の方法を使用し、複数のデータ値を単一のデータワードにパックした後にそのデータワードに複数のＳＩＭＤ操作を適用する。しかし、各データサンプルをフィルタリング計算の出力で上書きするかどうかを決定するために論理計算を実行しなければならない適応フィルタ操作の場合は、ＳＩＭＤ型の操作を使用することは通常は好ましくない。しかし、本発明の好ましい実施例では、論理計算の幾つかの側面をフィルタリング計算と平行して実行し、ＳＩＭＤ型の方法を採用することで大幅に速度が向上するため、非常に有益であることが分かった。
【００１１】
好ましい実施例ではデータワード内にパックされた複数の入力データサンプルについて同時にフィルタリング計算を適用するが、その計算に続いて好ましい実施例でステップ（ｄ）と（ｅ）を各データサンプルについて独立して実行する。
【００１２】
修正済み論理データ項目との比較するためにステップ（ｄ）で使用する所定の基準は、論理データ項目の形式に依存し、また、フィルタ済みデータサンプルから得られたデータサンプルによる入力データサンプの上書き処理を呼び出すための条件に依存する。しかし、好ましい実施例では、前記ステップ（ｄ）で使用する所定の基準は修正済み論理データ項目がとることができる最大値または最小値であって、フィルタ済みデータサンプルから取り出したデータサンプルは、対応する論理データ項目が最大値または最小値の場合前記ステップ（ｅ）で出力される。
【００１３】
データワード内における入力データサンプルと対応論理データ項目との正確な格納場所は、設計の選択により可変である。しかし、好ましくは、入力データサンプルと対応論理データ項目とはデータワード内でお互いに所定ビット数だけ離し、相互間で調整しなくてもフィルタリング計算適用時に値が増加できるようにしている。
【００１４】
フィルタリング計算の形式は様々である。しかし、好ましい実施例では、フィルタリング計算では所定の有限長インパルス応答（ＦＩＲ）フィルタをデータワードに適用することで、各入力データサンプルについて、それぞれが所定の整数係数により乗算された入力データサンプルと隣接データサンプルとの累算に等しいフィルタ済みデータサンプルを生成する。
【００１５】
通常のＦＩＲフィルタでは、整数係数は使用せず、分数係数を使用する。しかし、本発明の好ましい実施例では、すべての係数から分数因数を抽出して分数係数を整数係数に変換し、抽出した分数因数は後続のステップまで使用しないようにしている。その結果、分数因数はフィルタリング計算では使用されない。これにより、データワード内における入力データサンプルと対応論理データ項目間に必要な間隔を簡単に決定できるようになる。これは、整数入力データに整数係数を使用すると出力は整数になり、不要な分数ビットは出力されなくなるからである。
【００１６】
好ましい実施例ではＦＩＲフィルタを適用するときに整数係数を使用するため、前記ステップ（ｄ）でフィルタ済みデータサンプルを使用して出力データサンプルを作成するように決定した場合は、前記ステップ（ｅ）には、フィルタ済みデータサンプルを所定の因数で除算してフィルタリング計算における整数係数の使用を訂正することでフィルタ済みデータサンプルから取り出したデータサンプルを生成するステップを含むようにする。
【００１７】
好ましい実施例では、ＦＩＲフィルタは実際には、データワードに順次に適用する複数のカスケードフィルタにより構成される。この方法によりデータワードに対しＦＩＲフィルタを高速に適用できることが分かっている。
【００１８】
上記で説明したように、適応フィルタ操作が必要なアプリケーションは多数ある。しかし、好ましい実施例では、適応フィルタ操作は、各入力データサンプルがイメージピクセルのデータを表しているイメージ処理アプリケーションの一部に適用される。したがって、入力データサンプルは、イメージピクセルの輝度またはクロマデータなどを表すことができる。
【００１９】
本発明を使用することが特に有利なイメージ処理アプリケーションの１つは、適応フィルタ操作を実行して伸長イメージのデリンギングを実行することで圧縮の影響を抑制する場合である。具体的には、好ましい実施例では、適応フィルタ操作を使用してＭＰＥＧ−４伸長イメージのデリンギングを実行することができる。この場合、各入力データサンプルの論理データ項目は入力データサンプルと所定のしきい値とを比較することで生成されるインデックス値で、該インデックス値はその比較の結果に従い第１または第２の論理値に設定される。したがって、例として、入力データサンプルがしきい値以上の場合、対応するインデックス値は論理１の値に設定され、そうでない場合、インデックス値は論理０の値に設定される。
【００２０】
本発明の特定の実施例では、データワードは３２ビットで、各入力データサンプルは８ビットで、各インデックス値は１ビットである。この場合、前記ステップ（ｂ）は、第１及び第２の入力データサンプルと対応インデックス値とを３２ビットのデータワードに格納するステップで、データワード内では各入力データサンプルは対応インデックス値と４つの間隔ビットにより分離し、データワードに記憶されている第２の入力データサンプルと第１の入力データサンプルのインデックス値とは３つの間隔ビットにより分離している。
【００２１】
この実施例では、間隔ビットは既知の値を持ち、好ましい実施例では、間隔ビットはすべて論理０の値に設定される。
【００２２】
上記で説明した特定の実施例では、整数係数を使用するＦＩＲフィルタを使用すると、フィルタリング計算に使用する整数係数はフィルタ済みデータサンプルと修正済み論理データ項目が対応入力データサンプルと論理データ項目の最大１６倍とする方法であって、第１の入力データサンプルから作成したフィルタ済みのデータサンプルの出力を前記ステップ（ｄ）において決めた場合は、第１の入力データサンプルに対応する修正済み論理データ項目が最大値の場合に第２の入力データサンプルから作成したフィルタ済みデータサンプルを訂正するための操作を適用するステップをさらに含むことを特徴とする方法である。
【００２３】
訂正が必要な理由は、この特定の実施例では、インデックス値としては拡張用に４ビットしか割り当てられていないのに対し、値１６は５ビット（つまり１００００）を必要とするからである。したがって、第１の入力データサンプルに対応する修正済みインデックス値が最大値の場合、第２の入力データサンプルから作成されたフィルタ済みデータサンプルに論理１の値を加算することになり、したがって、そのフィルタ済みデータサンプルから１を減算する訂正が必要になる。
【００２４】
第２の側面から考えると、本発明は、入力データサンプルに適応フィルタ操作を実行して出力データサンプルを生成するデータ処理装置であって、論理データ項目に論理計算を実行して入力データサンプルにフィルタリング計算を適用するかどうかを決定し、該論理計算はフィルタリング計算を含む等価の論理計算に変換される装置であって、入力データサンプルと論理データ項目とを含むデータワードを記憶する記憶装置と、（ｉ）入力データサンプルと論理データ項目とを含むデータワードを作成し、（ｉｉ）フィルタリング計算をデータワードに適用して、フィルタ済みデータサンプルと修正済み論理データ項目とをデータワードに記憶させ、（ｉｉｉ）修正済み論理データ項目と所定の基準とを比較し、（ｉｖ）前記ステップ（ｉｉｉ）の比較結果に従い、入力データサンプルまたはフィルタ済みデータサンプルから取り出したデータサンプルのいずれかを出力データサンプルとして出力する、一連のデータ処理操作を適用するデータ処理装置と、を備えることを特徴とする装置と提供する。
【００２５】
第３の側面から考えると、本発明は、本発明の第１の側面による方法を実行するようにデータ処理装置を作動できるコンピュータプログラムを提供する。また、本発明は、本発明の第３の側面によるコンピュータプログラムで構成されるキャリア媒体に関する。
【００２６】
【好ましい実施例の説明】
本発明の好ましい実施例を説明するために、ＭＰＥＧ−４伸長イメージのデリンギングのプロセスを説明する。
【００２７】
デリンギングでは論理規則を使用し、２Ｄ  ＦＩＲフィルタの出力で各ピクセルを上書きするかまたはそのまま残すかを判別している。したがって、デリンギングでは適応フィルタ操作を適用することになる。この論理規則、つまりここで述べる論理計算は、次のステップを実行する。
−  各入力データサンプルと既知のしきい値とを比較し、サンプル＞＝しきい値の場合はインデックス値ｉ（ｘ，ｙ）を１に設定し、そうでない場合はインデックス値を０に設定する。
−  次に、各ピクセルについて、現在のピクセルを中心にした９ピクセルのブロックからのインデックス値を加算する。
言いかえると、ｉ（ｘ−１，ｙ−１）＋ｉ（ｘ，ｙ−１）＋ｉ（ｘ＋１，ｙ−１）＋ｉ（ｘ−１，ｙ）＋ｉ（ｘ，ｙ）＋ｉ（ｘ＋１，ｙ）＋ｉ（ｘ−１，ｙ＋１）＋ｉ（ｘ，ｙ＋１）＋ｉ（ｘ＋１，ｙ＋１）を計算する。
−  この合計が０または９の場合、ＦＩＲフィルタをこのピクセルに適用する。そうでない場合は、ピクセルを修正しない。
ＦＩＲフィルタの係数は次の通りである。
１／１６  ２／１６  １／１６
２／１６  ４／１６  ２／１６
１／１６  ２／１６  １／１６
【００２８】
上記で述べた既知のデリンギングプロセスを、図１のフロー図で模式的に示す。この図は典型的な従来技術の方法を示したものである。図１から分かるように、ステップ１００で、現在のピクセルを中心とした９ピクセルで構成されるブロックからのインデックス値を加算し、ステップ１１０で、インデックスの合計が最大値または最小値（この場合は９または０）かどうかを判別する。９または０の場合、プロセスはステップ１２０へ進み、フィルタリング計算が適用される（つまりＦＩＲフィルタを適用する）。次に、ステップ１３０で、フィルタ済みデータサンプルを出力し、元の入力データサンプルを上書きする。しかし、ステップ１１０で、インデックスの合計が０でも９でもないと判別された場合は、プロセスはパス１３５を経由してステップ１４０へ進み、プロセスは終了する。
【００２９】
上記のプロセスは、通常、各ピクセルに順次繰り返される。
【００３０】
図２は、本発明の好ましい実施例で使用するプロセスを模式的に示したフロー図である。まず、後述する図でも詳しく説明するように、まず、入力データサンプルと対応インデックスとをステップ２００でデータワードにパックする。次に、ステップ２１０で、このデータワードにフィルタリング計算を適用する。これにより、入力データサンプルからフィルタ済みデータサンプルが得られるだけでなく、現在のピクセルを中心とした９ピクセルのインデックス値の重み付き合計が得られる。この重み付き合計については後で詳しく説明するが、ここでは、ＦＩＲフィルタが使用している係数の結果としてこの重み付けが行われるという点に注意しておく。
【００３１】
次に、ステップ２２０で、インデックスの合計が最大値または最小値であるかどうかを判別する。ただし、ステップ２１０で実行する合計に重み付けが使用されているため、合計は９でも０でもない。詳細は後述するが、好ましい実施例では、最大値は１６で最小値は０であり、したがって、ステップ２２０ではインデックス値の合計が１６か０かを判別する。インデックスの合計が１６または０の場合プロセスはステップ２３０へ進み、フィルタ済みデータサンプルからのデータサンプルを出力する。この段階で、フィルタリング計算を適用してフィルタ済みデータサンプルを判別する必要はない。これは、インデックス値の重み付け合計を生成する操作と同時にステップ２１０ですでにこの操作は実行されているからである。ステップ２２０でインデックスの合計が１６でも０でもないと判別された場合、プロセスはパス２３５を経由してステップ２４０へ行き、プロセスを終了する。
【００３２】
図１の従来技術の方法と同様に、図２のプロセスはイメージ内の各ピクセルについて繰り返される。しかし、後で詳細に説明するように、好ましい実施例では、複数の入力データサンプルとその対応インデックス値とをステップ２００でデータワードにパックする。これは、図２のプロセスでは複数ピクセルを一度に同時に処理するために使用するためである。
【００３３】
図１と２では、各フロー図の最遅（最悪）のケースは、すべてのピクセルにフィルタリング計算を適用しなければならない場合である。つまり、判断ブロック１１０及び２２０で、それぞれ、“ｙｅｓ”のパスでブランチするプロセスである。この場合、好ましい実施例である図２の方法は明らかに高速である。これは、フィルタリング計算を適用する場合にインデックス値を別々に合計する代わりに（図１のステップ１００及び１２０のように）、これら２つのプロセスをステップ２１０で同時に実行するからである。インデックス合計が最大値でも最小値でもない場合、つまり、プロセスがステップ１１０及び２２０からそれぞれ“ｎｏ”にブランチする場合、図１及び２の図からは、図２に示す方法が明らかに有利であるとは必ずしも言えない。しかし、好ましい実施例では、１つのピクセルを同時に処理する機能を考慮すれば、図２に示したプロセスの方が明らかに高速であることが分かる。さらに、一般的には、最悪の場合に要する時間は最終的なシステムのリアルタイムパフォーマンスを低下させることが多いため、最重要課題であることを考慮すべきである。
【００３４】
図３は、デリンギングを実行するために本発明の好ましい実施例で使用しているプロセスの詳細なフローチャートである。この図では、２つの入力データサンプル（つまり、２つのピクセルからのサンプル）を同時に処理する。図３を詳細に説明する前に注意しておきたい点は、図３のプロセスではどのピクセルでも同時に処理できること、したがって、２つのピクセルをお互いに近づけておくなどの必要はない点である。実際、好ましい実施例では、ピクセルをお互いに独立させ、ＦＩＲフィルタリングアルゴリズムが行われる領域がオーバーラップしないようにしている。
【００３５】
ステップ３００では、２つの入力データサンプルを読み取り、データワードにパックする。好ましい実施例では、入力データサンプルは８ビットのサンプルで、データワード長は３２ビットであるため、２つの８ビットサンプルは３２ビットデータワードに収まる。しかし、これは単なる例であって、同じプロセスは別の長さのデータサンプルと別の長さのデータワードにも適用でき、例えば、１６ビットデータサンプルを６４ビットデータワードにパックすることもできる。
【００３６】
ステップ３１０では、２つの各入力データサンプルを所定のしきい値と比較して対応インデックス値を判別し、これら２つのインデックス値をデータワードにパックする。好ましい実施例では、ＭＰＥＧ−４標準に精通している人であれば分かるように、しきい値は８ｘ８ピクセルの正方形ごとに設定され、その６４ピクセルのブロックで最も明るいピクセルと最も暗いピクセルの中間の値が選ばれる。対象となっている特定データサンプルの値がしきい値以上の場合、インデックス値は１に設定され、そうでない場合は、インデックス値は０に設定される。
【００３７】
好ましい実施例において、ステップ３１０のプロセスを適用した後のデータワードの模式図を図４Ａに示す。したがって、最初の入力データサンプルＳ０はビット位置０から７に記憶され、対応インデックス値ｉ０はビット位置１２に記憶される。同様に、第２の入力データサンプル４２０はビット位置１６から２３に記憶され、対応インデックス値４３０はビット位置２８に記憶される。間隔ビットは、ビット位置８から１１、１３から１５、２４から２７、及び２９から３１にあり、好ましい実施例では論理０値に設定される。
【００３８】
後で詳しく説明するように、データワードにパックされているデータ項目間に間隔ビットを用意する理由は、ＦＩＲ処理ステージによりデータ項目のサイズが拡張するからであり、また、データワード内の「衝突」の程度を最小限にとどめたいためである（このようなビットを「解決」するために、通常、修正コーディングが必要）。好ましい実施例では、データワード内の関連データ項目のパッキングは、通常、以下の命令で行われる。
ＯＲＲ  ＲSIMDword，ＲSIMDword，ＲValueToPack，ＬＳＬ  ＃ＤｅｓｉｒｅｄＢｉｔＰｏｓｉｔｉｏｎ
【００３９】
したがって、この命令への入力は、ＲSIMDwordと言われるデータワードを含んだレジスタとＲValueToPackと言われるパックされるデータ項目を含んだレジスタである。レジスタＲValueToPackのデータ項目は所望のビット位置だけ左にシフトされ、データワードが含まれたレジスタの内容に加算され、その結果は当該レジスタ（つまり、レジスタＲSIMDword）に入れられる。
【００４０】
図３の説明を続けると、図４Ａに示すようにデータワードにデータ項目をパックした後、ステップ３２０でＦＩＲフィルタをデータワードに適用する。図５Ａ及び５Ｂは、好ましい実施例で使用されるＦＩＲフィルタの形式を詳細に示したものである。図５Ａに示すように、ＦＩＲフィルタをピクセルＥのデータサンプルに適用する場合、ピクセルＥを中心にした９つのピクセルのデータサンプルを考慮する必要がある。特に、必要なフィルタされたデータサンプルは、図５Ａのボックス５１０に示す方程式で与えられる。
【００４１】
しかし、本発明の好ましい実施例では、すべての係数から因数１／１６を取り除き、係数を整数の係数にする。図３のプロセスでは「１６で除算する」プロセスは後で実行するように延期されるため、ＦＩＲフィルタプロセスの一部ではない。これを図５Ｂで示すと、分数の係数５２０を整数の係数５３０で置き換え、後で「１６で除算」を実行するようにする。このステップを実行する理由は、図４Ａに示すデータワード内にパックされたデータ項目４００、４１０、４２０、及び４３０における間隔空け要件を簡単にするためである。整数の係数を使用すれば、ＦＩＲフィルタを適用することで各データ項目のサイズが拡張されることが明らかになり、好ましい実施例で、各データ項目の最大利得が１６であることが明らかになる。
【００４２】
したがって、図３のステップ３２０においてＦＩＲフィルタを適用した後、データワードの内容は図４Ｂに示すようになる。したがって、フィルタされたデータサンプルＳ’０とＳ’１（４４０と４６０）は１２ビットになり、データワードのビット位置０から１１と１６から２７に記憶される。さらに、対応する修正済みインデックス値ｉ’０とｉ’１（４５０と４７０）は、長さが５ビットに拡張される。ｉ’０はビット位置１２から１６で、ｉ’１の最下位４ビットはビット位置２８から３１になる。図４Ｂから明らかなように、修正済みインデックス値ｉ’１の最上位ビットは失われるが、後続の説明で明らかになるように、このビットはいずれにしても不要である。さらに、図４Ｂから明らかなように、修正済みインデックス値ｉ’０とフィルタ済みデータサンプルｓ’１間でビット位置１６において衝突が発生する可能性がある。実際に衝突が発生するのは修正済みインデックス値ｉ’０が最大値、つまり１６、になった時で、この場合、ビット位置１６では論理１の値になり、これによりｓ’１の値が変わる。しかし、後で説明するように、この問題は修正コードを使用し簡単に処理できる。
【００４３】
また、元の入力データサンプルは最大値として２５５になることがあるが、値２５５ｘ１６＋１でも１２ビットの数に収まるため、ｉ’０の上位ビットが論理１の値の場合でも、フィルタ済みデータサンプルｓ’１の値は割り当てられた１２ビットをオーバーフローすることはない。
【００４４】
ＦＩＲフィルタの説明を先に進める前に、ＦＩＲフィルタ自身を分解できる点つまり、一連の「カスケード」ですべて実行される幾つかのフィルタに変換できる点に注意する。適当なカスケードフィルタの３つの例を図６Ａ、６Ｂ、及び６Ｃに示す。このような複数のカスケードフィルタを適用しても元のＦＩＲフィルタ５３０を適用する場合と結果は同じであるが、通常、結果は高速で生成される。好ましい実施例では、図６Ｃの３つのカスケードフィルタ６６０、６７０、及び６８０を使用する。
【００４５】
ここで図３に戻って説明すると、ステップ３２０でＦＩＲフィルタを適用した後、プロセスはステップ３３０へ進み、インデックスの合計ｉ’０が最小値か最大値かを判別する。インデックス値はＦＩＲフィルタを通しているため、合計は単純合計ではなく、重み付き合計となる。したがって、ｉ’はｉ’＝ｉ（ｘ−１，ｙ−１）＋２＊ｉ（ｘ，ｙ−１）＋ｉ（ｘ＋１，ｙ−１）＋２＊ｉ（ｘ−１，ｙ）＋４＊ｉ（ｘ，ｙ）＋２＊ｉ（ｘ＋１，ｙ）＋ｉ（ｘ−１，ｙ＋１）＋２＊ｉ（ｘ，ｙ＋１）＋ｉ（ｘ＋１，ｙ＋１）として計算され、上書きする条件はｉ’が０または１６に等しいという条件になる。これは、ｉ’の最下位４ビットが０に等しいことと同じである。この範囲に含まれる他のすべての値（つまり１から１５）は、最下位の４ビットすべてが０になることはない。
【００４６】
したがって、ステップ３３０で要求されるテストは、図７に示すマスクを使用することで実行できる。具体的には、５ビットの修正インデックス値７００を論理ＡＮＤ操作により値が０１１１１のマスクと組み合せることで最上位ビットが０の値７２０を生成し、下位の４ビットは図７で値“ｂｃｄｅ”として示されているように修正インデックス値の下位４ビットと同じになる。“ｂｃｄｅ”が０に等しい場合、インデックスの合計ｉ’０は最小値か最大値であるためプロセスはステップ３４０へブランチし、ｓ’１の値は必要に応じ修正される。ステップ３４０を実行するために好ましい実施例で使用する修正コードは次の通りである。
ＴＳＴ        ＲanyFIRinput，＃１＜＜１２
ＳＵＢＮＥ    ＲFIRoutput，ＲFIRoutput，＃１＜＜１６
【００４７】
修正インデックス値ｉ’０が最大値になる場合、ＦＩＲフィルタが実行する重み付き合計の影響を受けるすべての関連インデックス値の論理値は１でなければならない。したがって、要求されることは、計算に使用し特定のレジスタに記憶している元のデータワードのいずれかを保存することである。これは、データワードに記憶したインデックス値のビット位置１２の値を判別できるようにするためである。したがって、ＴＳＴ命令はＦＩＲ入力データワードが含まれたレジスタからビット位置１２の値を取り出し、その値が０か１かを判別する。０の場合はＥＱフラグをセットし、そうでない場合はセットしない。
【００４８】
次にＳＵＢＮＥ命令を実行する。ビット位置１２が０の場合、処置は不要である。これは、インデックスの合計ｉ’０は最大値ではなく最小値（つまり、最上位ビットが０）であって、ｓ’１の値により影響を受けないからである。この場合、ＥＱフラグがセットされているため、ＳＵＢＮＥ命令は減算を実行しない。しかし、ビット位置１２の値が論理１の値の場合、ＳＵＢＮＥ命令は減算を実行する。この減算では、ＦＩＲ出力データワード（図４Ｂに示すデータワード）が含まれるレジスタのビット位置１６から値１を減算する。
【００４９】
上記の修正プロセスを実行したら、プロセスはステップ３５０へ進み、フィルタ済みデータサンプルＳ’０を１６で除算した値を出力し、元の入力データサンプルを上書きする。
【００５０】
次にプロセスはステップ３６０へ進み、インデックスの合計ｉ’１が最小値か最大値かを判別する。図４Ｂにより以前に説明したように、ｉ’１の最上位ビットは失われているが、図７から明らかなように、ステップ３６０で要求されているテストを実行するためにはこのビットは不要である。したがって、インデックスの合計ｉ’１が最小値または最大値の場合、ビット位置２８から３１に含まれるｉ’１の最下位４ビットはすべて０である。ステップ３６０で実行するテストでインデックスの合計が最小値または最大値であることが分かったら、プロセスはステップ３７０へ進み、フィルタ済みデータサンプルＳ’１を１６で除算した値を出力し、元の入力データ値を上書きする。そうでない場合は、プロセスはステップ３６０から３８０へ直接進みし、プロセスを終了する。
【００５１】
ステップ３５０及び３７０でＳ’０を１６で除算した値またはＳ’１を１６で除算した値のいずれかを出力するプロセスを、それぞれ、図８Ａ及び８Ｂに示す。１２ビットの数字を１６で除算することはその数の最上位８ビットを抽出することと等しいため、ステップ３５０及び３７０で要求される１６による除算の値は、該当するマスクを使用することで直接得られる。
【００５２】
したがって、図８Ａに示すように、データワード８００からＳ’０を１６で除算した値を抽出する場合、まず、データワードをマスク８１０とＡＮＤ操作し、これにより、ビット位置４から１１にＳ’０／１６の値が含まれた修正済みデータワード８２０を得る。このデータ値は、右シフト関数を実行してデータを右に４ビットシフトするだけで抽出することができ、これにより、Ｓ’０／１６の値がデータワード８３０で得られる。
【００５３】
同じ機能をステップ３７０で実行し、データ値Ｓ’１／１６を抽出することができる。この場合、元のデータワード８４０をマスク８５０とＡＮＤ操作してデータワード８６０を作成すると、値Ｓ’１／１６はビット位置２０から２７で与えられる。次に２０ビット右シフトを実行するとデータワード８７０が生成され、その中にＳ’１／１６が含まれている。
【００５４】
好ましい実施例では、切捨てによる偏向エラーを回避するために、フィルタ済みの各データサンプルＳ’０とＳ’１に値８を加算してから図８Ａと８Ｂに示す実行プロセスを実行することが望ましい。当業者であれば分かるように、この操作は「最も近い数への丸め」関数を組み込むためにこの操作を行う。８／１６は半分であるため、これは実際には１／２を加えた後に切り捨てるプロセスである。
【００５５】
図９は、本発明の好ましい実施例を使用したデータ処理装置９６０を模式的に示したブロック図である。中央処理装置９００は、１つまたは複数のバス９５０を介してキャッシュ９２０、ＲＡＭ  ９３０、及びＲＯＭ  ９４０へ接続されている。ＣＰＵ  ９００内には、複数の作業レジスタ９１０が備わっていて、ＣＰＵが操作しているデータを一時的に記憶する。本発明の好ましい実施例で使用するデリンギングコードは、好ましくはＲＯＭ  ９４０に記憶し、ＣＰＵ  ９００により取り出して実行する。好ましい実施例では、ＦＩＲフィルタの適用はＣＰＵ  ９００内の加算回路を使用して行われる。入力データサンプルと出力データサンプルは両方とも好ましくはＲＡＭ  ９３０に記憶し、インデックス値はＣＰＵ  ９００により計算し、ＣＰＵレジスタ９１０またはキャッシュ９２０内のパックされたレジスタに一時的に記憶する。
【００５６】
図９は各構成要素間の接続を模式的に示すためのものであって、通常は、ＣＰＵ  ９００、キャッシュ９２０、ＲＡＭ  ９３０、及びＲＯＭ  ９４０は１本のバスで接続されずに、複数バスの複雑な相互接続を介して接続される。
【００５７】
上記の説明から本発明の好ましい実施例によれば、ＭＰＥＧ−４標準に準拠した効果的なデリンギング適応フィルタ操作が実行できる。ＭＰＥＧ−４は普及したオープンな標準であり、かつ、デリンギングは復号操作の処理要求の大部分を占めるため（通常は全体の１／３から１／２）、本発明の技法を使用することで、復号操作の効率の大幅な向上が実現できることは明らかである。しかし、上記で説明した概念はＭＰＥＧ−４またはイメージ処理アプリケーションに限定されないことは明らかで、データ処理アプリケーションにおける適応フィルタ操作の効率を向上させる様々な状況で使用できる。
【００５８】
特定の実施例を説明してきたが、本発明はこれらに限定されず、本発明の範囲で様々な変更及び追加が可能である。例えば、以下に述べる従属項の機能を、本発明の範囲を逸脱することなく、独立項の機能と組み合せることができる。
【図面の簡単な説明】
本発明を、添付図面に示す好ましい実施例を参照し、例を使用してさらに詳細に説明する。
【図１】適応フィルタ操作を適用する従来技術の技法を説明するフロー図である。
【図２】適応フィルタ操作の適用に使用する本発明の実施例を模式的に示すフロー図である。
【図３】本発明の好ましい実施例により適用される適応フィルタ操作をさらに詳細に示すフロー図である。
【図４】Ａは、本発明の好ましい実施例により、フィルタリング計算を適用する前に入力データサンプルと対応インデックス値とを３２ビットワードにパックする様子を模式的に示す図である。Ｂは、フィルタリング計算を適用した後のデータワードの内容を模式的に示す図である。
【図５】本発明の好ましい実施例で使用されるＦＩＲフィルタを模式的に示す図である。
【図６】図５Ｂに示すフィルタを分解する例、つまり、「カスケード」で実行される複数の簡単なフィルタに変換する例を示す図である。
【図７】本発明の好ましい実施例により、修正済みインデックス値の値を解釈して最大値または最小値であるかどうかを判別する図である。
【図８】本発明の好ましい実施例により、フィルタ済みデータサンプルをデータワードから抽出して出力データサンプルとして出力する様子を示す図である。
【図９】本発明の技法を使用できるデータ処理装置を模式的に示すブロック図である。
【符号の説明】
９００  ＣＰＵ
９１０  レジスタ
９２０  キャッシュ
９３０  ＲＡＭ
９４０  ＲＯＭ
【図１】
0004002757.tif 000002
【図２】
0004002757.tif 000003
【図３】
0004002757.tif 000004
【図４】
0004002757.tif 000005
【図５】
0004002757.tif 000006
【図６】
0004002757.tif 000007
【図７】
0004002757.tif 000008
【図８】
0004002757.tif 000009
【図９】
0004002757.tif 000010