低減されたメモリおよび帯域幅の動き適応ビデオデインターレース
【課題】メモリ及び帯域幅を低減した、動き適応ビデオデインターレースのための方法を提供する。
【解決手段】(A)複数のモードのうちの第1のモードにおいて、現在のフィールドをデインターレースすることによってフレームを生成するステップと、(B)モードのうちの第2のモードにおいて、現在のフィールドおよび反対パリティフィールドの両方を用いてデインターレースすることによってフレームを生成するステップと、(C)モードのうちの第3のモードにおいて、現在のフィールド、反対パリティフィールドおよび別のフィールドの全てを用いてデインターレースすることによってフレームを生成するステップとを含み、モードのうちの少なくとも2つを用いる。
【解決手段】(A)複数のモードのうちの第1のモードにおいて、現在のフィールドをデインターレースすることによってフレームを生成するステップと、(B)モードのうちの第2のモードにおいて、現在のフィールドおよび反対パリティフィールドの両方を用いてデインターレースすることによってフレームを生成するステップと、(C)モードのうちの第3のモードにおいて、現在のフィールド、反対パリティフィールドおよび別のフィールドの全てを用いてデインターレースすることによってフレームを生成するステップとを含み、モードのうちの少なくとも2つを用いる。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、2003年12月4日に出願された、かつ参照により全体において本明細書に援用されている同時係属中の米国特許出願第10/727,476号明細書に関連する。本発明は、一般に、ビデオデインターレースに関し、特に、低減されたメモリおよび帯域幅の動き適応ビデオデインターレース技術に関する。
【背景技術】
【0002】
インターレース走査フォーマットは、初期のビデオシステム用に帯域幅を低減するために開発され、その後ずっと、広く採用されて用いられてきた。デインターレースは、インターレースされたビデオフィールドをラスタフレームフォーマットに変換するために用いられる方法のセットである。デインターレース方法は、順次走査アプローチをサポートする現代のディスプレイにおいて普通に用いられている。
【発明の概要】
【発明が解決しようとする課題】
【0003】
従来のデインターレース方法は、移動エッジのラインフリッカおよびセレーションなどのアーチファクトを導入する。アーチファクトは、従来のアナログ陰極線管(CRT)ディスプレイでは、現代の高解像度順次走査ディスプレイほど顕著ではない。しかしながら、主流のディスプレイ技術が、CRTから液晶ディスプレイ(LCD)、プラズマおよび他の高解像度高コントラスト技術にシフトしているので、デインターレースによって導入されるアーチファクトは、消費者にとって、より顕著で、より厄介になる。
【0004】
従来のデインターレース方法には、「ウィーブ(weave)」プロセスおよび「ボブ(bob)」プロセスが含まれる。ウィーブデインターレースは、欠損ラインを反対パリティフィールドからコピーすることによって、現在のフィールドからフレームを生成する。残念ながら、ウィーブ方法は、ピクチャ内の動き領域に顕著なアーチファクトを引き起こす。ボブ方法は、現在のフィールドラインの垂直補間を実行し、結果として得られるフレームの欠損ラインを満たす。しかしながら、ボブ方法は、ラインのちらつきを引き起こし、ピクチャを不鮮明にする。
【課題を解決するための手段】
【0005】
本発明は、デインターレースのための方法に関する。この方法は、一般に、(A)複数のモードのうちの第1のモードにおいて、現在のフィールドをデインターレースすることによってフレームを生成するステップと、(B)モードのうちの第2のモードにおいて、現在のフィールドおよび反対パリティフィールドの両方を用いてデインターレースすることによってフレームを生成するステップと、(C)モードのうちの第3のモードにおいて、現在のフィールド、反対パリティフィールドおよび別のフィールドの全てを用いてデインターレースすることによってフレームを生成するステップとを含み、モードのうちの少なくとも2つを用いる。
【0006】
本発明の目的、特徴および利点には、低減されたメモリおよび帯域幅の動き適応ビデオデインターレース技術を提供することが含まれるが、この技術は、(i)画素に関する共同輝度−クロマ動き適応静止チェック方法、(ii)エッジ依存の方向フィルタ、(iii)統一された輝度およびクロマデインターレースアーキテクチャ、(iv)インプリメンテーションに都合がいい静止チェック方法、(v)3つの全てのチャネル(例えば1つの輝度チャネルおよび2つのクロマチャネル)に対して独立したデインターレースを可能にすること、(vi)23までの動作モード、(vii)カスタマイゼーションによって広範囲な潜在的帯域幅およびラインアクセス要求制限をサポートできるようにすること、および/または(viii)5.4度まで下がる角度に対して鮮明さを向上させる、改善された方向フィルタ、の提供が可能である。
【0007】
本発明の、これらおよび他の目的、特徴および利点は、次の詳細な説明ならびに添付の特許請求の範囲および図面から明らかになろう。
【図面の簡単な説明】
【0008】
【図1】4:2:2フォーマットピクチャに対する従来の輝度指数付けおよびクロマ指数付けの図である。
【図2】4:2:0フォーマットピクチャに対する従来の輝度指数付けおよびクロマ指数付けの図である。
【図3】利用可能なフィールドおよびカウンタのブロック図である。
【図4】デインターレースにおいて用いられる例示的な輝度画素の図である。
【図5】デインターレースにおいて用いられる例示的なクロマ画素の図である。
【図6a】本発明の好ましい実施形態に従ってデインターレース技術を実行する例示的なシステムのブロック図である。
【図6b】デインターレース回路の例示的なインプリメンテーションの詳細なブロック図である。
【図7】例示的な輝度およびクロマデインターレース方法の流れ図である。
【図8】2つの変数の関数としての混合要素のグラフである。
【図9】例示的な輝度角度検出方法の流れ図である。
【図10】例示的で検知可能な角度を示す図である。
【図11】第1の角度における多数のラインセグメントを示す図である。
【図12】第2の角度における多数のラインセグメントを示す図である。
【図13】第3の角度における多数のラインセグメントを示す図である。
【図14】2つの位置におけるDIFF[i]の例示的な関係の図である。
【図15】例示的で画素に関する輝度静止チェック方法の流れ図である。
【図16】例示的で画素に関するクロマ静止チェック方法の流れ図である。
【図17a−17c】表である。
【図18a−18j】式である。
【発明を実施するための形態】
【0009】
本発明は、第3世代動き適応デインターレース(TriMADI)アーキテクチャと呼んでもよい。TriMADIアーキテクチャは、一般に、画素に関する共同ルミナンス−クロミナンス静止チェック、従来のアプローチと比較して改善されたルミナンス(輝度)低角度予測、および従来のアプローチと比較して改善されたクロミナンス(クロマ)デインターレースを提供する。TriMADIアーキテクチャは、一般に、デインターレース用の信頼できる静止画素検出および画素の正確なウィーブを達成する。このアーキテクチャには、一般に、(輝度サンプルごとに)各出力フレーム画素のために、次の反対パリティフィールドの先取りおよびマルチビット(例えば2ビット)静止チェックカウンタが含まれる。
【0010】
TriMADI技術によって実行される計算は、現在のフィールドのパリティ(例えば、奇数パリティフィールドまたは偶数パリティフィールド)にかかわらず、同じであってもよい。説明を簡単にするために、(i)現在のフィールド(例えばCUR)は、トップフィールドと見なしてもよく、(ii)前のフィールド(例えばPRE)および次のフィールド(例えばNXT)の両方は、ボトムフィールドと見なしてもよい。フィールドCURには、一般に、0、2、4、...、2N−2(例えば偶数パリティ)の番号を付けられた多数のラインが含まれる。フィールドPREおよびフィールドNXTのそれぞれには、一般に、1、3、5、...、2N−1(例えば奇数パリティ)の番号を付けられた多数のラインが含まれるが、この場合に、Nは、各フィールドにおいて利用可能なライン数であってもよい。デインターレースは、一般に、フィールドCURにおける「欠損」ライン(例えば、ライン番号1、3、5、...、2N−1)を構成するが、これらのラインは、フィールドCURにおける利用可能なラインと結合された場合に、2Nラインの完全なフレームを形成する。
【0011】
TriMADIアーキテクチャには、一般に、輝度サンプルおよびクロマサンプル用の静止チェックならびに双方向(例えば3次元)混合およびウィーブを備えた角度ベースのデインターレース技術が含まれる。下記の入力/出力セクションは、一般に、(i)この技術によって用いられるフィールドと、(ii)静止チェックビットを含む画素入力/出力(I/O)と、(iii)この技術によって用いられる画素とをカバーする。この技術の流れ図は、下記のTriMADIアーキテクチャセクションで論じられる。流れ図におけるほとんどのブロックの詳細な説明は、一般に、(輝度用の)輝度デインターレース成分セクションおよび(クロマ用の)クロマデインターレース成分セクションにおいて説明される。輝度角度検出セクションおよび画素に関する静止チェックセクションは、一般に、角度検出技術および静止チェック技術を指定する。
【0012】
図1および2を参照すると、4:2:2フォーマットピクチャ(図1)および4:2:0フォーマットピクチャ(図2)用の従来の輝度指数付けおよびクロマ指数付けの図が示されている。本明細書では慣例として、(i)(u、v)を用いて、輝度(Yチャネル)サンプルの現在の出力位置を示してもよく、(ii)一般に、(cu、cv)を用いてクロマサンプルの現在の出力位置を示し、(iii)上付き文字Yを用いて輝度チャネルを示してもよく、(iv)上付き文字Cを用いて両方のクロマチャネルを同時に示してもよく、(v)一般に、上付き文字Kを用いて、クロマチャネルの1つ、すなわちCb(青)チャネルまたはCr(赤)チャネルを示してもよい。
【0013】
TriMADIアーキテクチャは、一般に、(u、v)と(cu、cv)との間の標準関係を用いる。4:2:2フォーマットに関しては、図1に示すように、cu=uおよびcv=v>>1である。4:2:0フォーマットに関しては、図2に示すように、cu=u>>lおよびcv=v>>1である。クロマ画素の水平位置は、一般に、偶数輝度水平位置に位置する。標準関係は、従来的には、MPEG−2標準、MPEG−4標準およびH.264標準によって用いられる。輝度指数付けとクロマ指数付けとの間の上記の関係は、他の標準(例えばMPEG−1)ではわずかに異なる可能性があるが、TriMADI技術は、それでも、性能における小さな変化で実行可能である。
【0014】
入力/出力セクション
図3を参照すると、利用可能なフィールドおよびカウンタのブロック図が示されている。メモリから読み出された現在のフィールドCURがトップフィールドである場合には、前のフィールドPREおよび次のフィールドNXTの両方は、図3の上半分に示すように、ボトムフィールドであってもよい。現在のフィールドCURがボトムフィールドである場合には、図3の下半分に示すように、前のフィールドPREおよび次のフィールドNXTの両方は、トップのフィールドであってもよい。一般に、フィールドCURは、フィールドPREおよびフィールドNXTの両方と反対のパリティを有する。フィールドPREは、一般に、フィールドNXTと同じパリティを有する。ビデオシーケンスの最初のフィールドおよび最後のフィールドに対しては、単一の反対パリティフィールドだけが利用可能である。かかる場合には、単一の利用可能な反対フィールドは、次のフィールドNXTおよび前のフィールドPREの両方として働いてもよい。
【0015】
静止カウンタ(例えばHSCnt[0〜3])は、同じパリティの輝度サンプルおよび反対パリティの輝度サンプルのそれぞれに対して提供してもよい。いくつかの実施形態において、カウンタHSCntは、各フレームの輝度サンプル用に倍数(例えば2ビット)を用いてもよい。現在のフィールドCURのサンプルをカウントするために用いられるビットは、TriMADIアーキテクチャの下でメモリに対して読み出し可能および書き込み可能の両方であってもよい。前のフィールドPREのサンプルおよび次のフィールドNXTのサンプルをカウントするために用いられるビットは、TriMADIアーキテクチャの下でメモリから読み出し可能であってもよい。
【0016】
図17aを参照すると、TriMADIアーキテクチャ用の入力基準のための表1が示されている。TriMADIアーキテクチャは、一般に、多数(例えば23)の動作モードをサポートする。実際の入力フィールド基準は、各モードにおいて異なってもよい。図3および以下のセクションは、一般に、最悪の場合のシナリオにおける基準を示す(例えば、モード22およびモード23)。各モード用の詳細な入力基準は、表1において見い出すことができる。
【0017】
各現在のフィールドCURに対して、(i)単一の出力フレームを生成してもよく(例えば、デインターレースが実行される)、(ii)2ビット静止カウンタHSCnt[0〜3]は、各同じパリティのフィールドの画素用に更新してもよい。カウンタHSCntは、一般に、静止チェックがイネーブルにされるTriMADIモードにおいて更新される。静止チェックは、制御信号(例えばStatCheck)が所定値(例えば1)に設定された場合に、イネーブルにしてもよい。
【0018】
図4を参照すると、デインターレースにおいて用いられる例示的な輝度画素の図が示されている。現在のフィールドCURから用いられる画素は、垂直ストライプで強調してもよい。前のフィールドPREから用いられる画素は、対角線ストライプ(左下から右上へ、および左上から右下への両方)で強調してもよい。次のフィールドNXTから用いられる画素は、左上から右下への対角線ストライプ(前のフィールドPREの画素のいくつかと重なる)で強調してもよい。現在の位置(u、v)における欠損画素は、ダイヤモンドパターンで強調してもよい。
【0019】
現在のフィールドCURの現在の位置(u、v)における欠損輝度画素を構成するために、以下の輝度画素が、一般に、利用可能であると仮定される。現在のフィールドCURにおいて、i∈{u−3、u−1、u+1、u+3}およびj∈{v−43、v−42、...、v+42、v+43}の位置(i、j)における画素は、利用可能にすべきである。前のフィールドPREにおいて、i∈{u−2、u、u+2}およびj∈{v−5、v−4、...、v+4、v+5}の位置(i、j)における画素は、利用可能にすべきである。次のフィールドNXTにおける画素について、i=uおよびj∈{v−5、v−4、...、v+4、v+5}の位置(i、j)の画素は、利用可能にすべきである。一般に、3つのラインが、前のフィールドPREにおいて用いられる。次のフィールドNXTにおいては、単一のラインを用いてもよい。いくつかの実施形態において、フィールドNXTは、前のPREより早い時間に生じる同じパリティのフィールドによって置き換えてもよい。
【0020】
図5を参照すると、デインターレースにおいて用いられる例示的なクロマ画素の図が示されている。現在のフィールドCURにおいて用いられるクロマ画素は、一般に、垂直ストライプで強調される。前のフィールドPREおよび次のフィールドNXTの両方からの画素は、対角線ストライプで強調してもよい。
【0021】
現在のフィールドCURの現在の位置(cu、cv)における欠損クロマ画素を構成するために、以下のクロマ画素が、一般に、利用可能であると仮定される。現在のフィールドCURにおいて、i∈{cu−1、cu+1}およびj∈{cv−3、cv−2、...、cv+2、cv+3}の位置(i、j)における画素は、利用可能にすべきである。前のフィールドPREにおける画素および次のフィールドNXTにおける画素について、i=cuおよびj∈{cv−3、cv−2、...、cv+2、cv+3}の位置(i、j)の画素は、利用可能にすべきである。
【0022】
境界外(OOB)条件の扱い
フィールド境界の左または右の利用不可能な画素は、常に、輝度に対して0(ゼロ)およびクロマに対して128と仮定してもよい。フィールド境界の上または下(例えば、アクティブビデオ領域の外側)の利用不可能なラインに対して、境界外画素を扱うために、2つの方法が利用可能である。上部境界の上の利用不可能なライン用の第1の方法において、ビデオの最上部ラインを、利用不可能なラインの代わりに用いてもよい。例えば、位置(−1、v)、(−2、v)、(−3、v)等における画素は、位置(0、v)における画素によって置き換えてもよい。同様に、下部境界より下の利用不可能なラインに対して、ビデオの最下部ラインを、欠損ラインの代わりに用いてもよい。第2の方法において、フィールド境界の外側の全ての画素は、デフォルト値(例えば、輝度用には0およびクロマ用には128)に設定してもよい。
【0023】
TriMADI技術は、一般に、垂直に隣接するカウンタHSCntを用いる。したがって、カウンタHSCntは、左境界の外側または右境界の外側の画素に対しては実現しなくてもよい。上部フレーム境界の上のラインにおける利用不可能なカウンタHSCntに対して、カウンタHSCntは、トップラインのカウンタHSCntで代用してもよい。同様に、下部フレーム境界の下のライン用の利用不可能なカウンタHSCntは、ボトムラインのカウンタHSCntで代用してもよい。境界外の画素を扱うのとは異なり、カウンタHSCntは、デフォルト値(0または3などの)で代用しなくてもよい。デフォルト値は、式28に誤ったフラグ(例えばisStatHist)を生成させる可能性があり、したがって、不正確なフラグ(例えば、isStationaryY、isStationaryCbおよびisStationaryCr)が、デインターレース技術によって用いられる可能性がある。
【0024】
TriMADIアーキテクチャ
TriMADIは、多数(例えば23)の動作モードを提供し、カスタマイゼーションによって広範囲の潜在帯域幅およびラインアクセス設計制限をサポートできるようにする。表1は、一般に、TriMADIアーキテクチャによってサポートされる全てのモードを列挙する。表1は、各モードの帯域幅消費に基づいてモードをグループ化してもよい。最初の2つのモードを除いて、TriMADI帯域幅は、1/2輝度フィールド増分を有してもよい。表は、書き込み用ではなく、読み出し用の帯域幅およびラインを示す。静止チェックフラグ(例えばStatCheck)がディスエーブルにされた(例えば、偽)全てのモードに対して、書き込み帯域幅はゼロである(例えば、メモリ書き込みは実行しなくてもよい)。静止チェックフラグStatCheckがイネーブルにされた(例えば、真)全てのモードに対して、書き込み帯域幅は、一般に、更新された2ビットカウンタHSCntをメモリ(例えばRAM)に逆に書き込むための1/4輝度フィールドである。静止チェックフラグStatCheckがイネーブルにされた場合に、表1に示すアクセスライン列は、4:2:0フォーマット用に用いられる1ビットのライン記憶装置を含まなくてもよい。
【0025】
各帯域幅に対して、最良のモードは、一般に、注記列にチェックで印を付けられている。帯域幅増加が増加するにつれて、出力品質は、一般に、向上する。したがって、全てのモードが利用可能な状態では、表は、利用可能な帯域幅およびライン記憶装置に基づいて最良のモードを選択するためのガイドラインとして用いてもよい。
【0026】
さらに、5つのモードには、推奨モード(例えば、黒丸に星で印を付けられた)が含まれる。帯域幅が増加するにつれて、推奨モードは、連続的で目に見える品質改善をもたらすことが可能である。全体で最良のモードは、TriMADIモード(例えば、表1におけるモード23)と呼んでもよい。
【0027】
図17aに示すように、各モードは、多数(例えば7)の1ビット制御信号、すなわち(i)ThreeLumaField(例えばT)、(ii)angleDetection(例えばA)、(iii)TwoChromaField(例えばC2)、(iv)ThreeChromaField(例えばC3)、(v)StatCheck(例えばS)、(vi)weave(例えばW)および(vii)bob(例えばB)によって一意に指定可能である。モードの説明列において、BBは、1フィールドを用いたボブを示してもよく、WVは、一般に、2フィールドを用いたウィーブを示し、B2は、2フィールドを用いた混合であり、B3は、3フィールドを用いた混合であり、DIは、方向補間を示してもよく、MWは、3フィールドを用いたメジアンウィーブである。合計列は、単一の4:2:0輝度フィールド/ラインに関連してもよい。制御信号の全ての組み合わせが、有効であり得るわけではない。TriMADIアーキテクチャによってサポートされる全ての有効モードが、一般に、表1に列挙されている。2つの追加の制御信号(例えばHSCntResetおよびHSCntDefault)を用いて、静止カウンタHSCntおよび再設定値の再設定をイネーブル/ディスエーブルにしてもよい。
【0028】
以下の信号および/またはフラグは、TriMADIアーキテクチャによって定義してもよい。制御信号(またはフラグ)ThreeLumaFieldは、一般に、以前の技術およびオーバーライドモード(例えば従来のウィーブおよびボブ)との後方互換性を可能にするために用いられる。TriMADI技術は、一般に、輝度フィールドと同数またはより少数のクロマフィールドを用いる。TriMADI技術は、一般に、輝度フィールドを超えないクロマフィールドを用いる。
【0029】
制御信号(またはフラグ)Bobを用いて、外部シーン変化検出をサポートしてもよい。信号Bobが真である場合には、ボブデインターレースを用いて、現在のフィールドに基づいた出力フレームを生成してもよい。ボブは、一般に、フィールドを空間的に補間してフレームを生成する。伝統的に、ボブデインターレースは、上および下の画素に対して空間フィルタリングを実行して、欠損画素を生成する。空間フィルタリングは、垂直フィルタリングと呼んでもよい。(AngleDetection=偽である場合に)従来のボブ方法をサポートすることに加えて、TriMADI技術は、一般に、(AngleDetection=真の場合に)、検出された角度に基づいて方向補間を実行することによって、エッジのぎざぎざを低減可能な代替ボブ方法をサポートする。代替ボブモード(ボブ+と呼ぶ)は、ライン記憶装置におけるわずかな増加を伴い、従来のボブ方法と同じ帯域幅を用いてもよい。ボブ方法は、一般に、信号threeLumaFieldが偽である場合に用いられる。ボブ+は、垂直および対角線上において空間的に補間可能である。
【0030】
制御信号(またはフラグ)Weaveを用いて、逆テレシネにおいてなどの外部ピクチャ静止検出をサポートしてもよい。ウィーブ方法は、一般に、(i)2フィールドが利用可能な場合には、従来の2フィールドウィーブ(例えばフィールド挿入)、および(ii)3フィールドが利用可能な場合には、(静止チェックによって用いられるような)3フィールドメジアンウィーブを実行する。図17aに示すように、TriMADIは、一般に、利用可能なフィールド数に依存して、合計5つのウィーブ方法をサポートする。すなわち、(i)輝度に対する2フィールドウィーブおよびクロマに対するボブ、(ii)輝度およびクロマの両方に対する2フィールドウィーブ(従来のウィーブ)、(iii)輝度に対する3フィールドメジアンウィーブおよびクロマに対するボブ、(iv)輝度に対する3フィールドメジアンウィーブおよびクロマに対する2フィールドウィーブ、および(v)輝度およびクロマの両方に対する3フィールドメジアンウィーブである。ウィーブは、一般に、トップフィールドおよびボトムフィールドから画素を補間して、フレームを形成する。メジアンウィーブは、3つのフィールドを用いてもよいが、典型的には、ウィーブは、トップフィールドおよびボトムフィールドだけを用いてもよい。ウィーブ-は、一般に、輝度をウィーブするが、クロマをボブして、(追加的なクロマフィールドを読み出す)帯域幅を節約する。MADIは、一般に、画素ベースで適応的に、ウィーブとボブとの間で混合する。ReMADIは、画素ベースで、ボブ+とウィーブとの間の混合であってもよい。TriMADIはまた、隣接する同じパリティのフィールド間での静止チェックを用いて、画素ベースでボブ+とウィーブとの間の適応選択を改善してもよい。
【0031】
制御信号(またはフラグ)AngleDetectionが真である場合には、角度検出動作は、イネーブルにしてもよい。検出された角度に基づいて、一般に、方向補間を用いて、欠損サンプルを生成する。方向補間は、一般に、角度内容のジャギーを低減する。制御信号AngleDetectionが偽である場合には、角度検出動作はディスエーブルにしてもよく、デフォルト角度(例えば90°)が、TriMADI技術の残りによって用いられる。
【0032】
制御信号(またはフラグ)のセット(例えばTwoChromaFieldおよびThreeChromaField)を用いて、TriMADI方法によって用いられる多くのクロマフィールドを制御してもよい。信号TwoChromaFieldおよび信号ThreeChromaFieldの両方が偽である場合には、現在のフィールドCURの単一のクロマフィールドが一般に用いられ、ボブ方法(垂直フィルタリングまたは方向補間)を用いて欠損クロマサンプルを生成してもよい。信号TwoChromaFieldだけが真である場合には、前のフィールドPREおよび現在のフィールドCURのクロマフィールドは、TriMADI方法によって用いてもよい。信号ThreeChromaFieldだけが真である場合には、前のフィールドPRE、現在のフィールドCURおよび次のフィールドNXTのクロマフィールドは、TriMADI方法によって用いてもよい。一般に、信号TwoChromaFieldおよび信号ThreeChromaFieldは、同時に真にすべきではない。信号ThreeChromaFieldは、信号ThreeLumaFieldが真である場合には、用いてもよい。信号ThreeLumaFieldが偽である場合には、信号ThreeChromaFieldもまた偽であってもよい。
【0033】
信号(またはフラグ)StatCheckを用いて、静止チェック方法をイネーブル/ディスエーブルにしてもよい。信号StatCheckが真である場合には、静止チェック方法をイネーブルにして、経時的にほとんど変化しないエリアにわたる性能を改善してもよい。静止チェック方法は、一般に、信号isStationaryY、isStationaryCbおよびisStationaryCrを制御するが、これらの信号は、デインターレース技術によって用いてもよい。信号StatCheckは、一般に、信号ThreeLumaFieldが真である場合に用いられる。なぜなら、静止チェックは、前のフィールドPREおよび次のフィールドNXTの両方にアクセスするからである。したがって、信号ThreeLumaFieldが偽である場合には、信号StatCheckもまた偽であってもよい。
【0034】
制御信号(またはフラグ)HSCntResetを用いて、静止チェックカウンタHSCntの再設定をイネーブル/ディスエーブルにしてもよい。制御信号(またはフラグ)HSCntDefaultは、一般に、再設定値用に2ビットのデフォルト値(例えば0〜3)を提供する。信号HSCntResetが偽である場合には、信号HSCntにおける値は、メモリからロードしてラインバッファに記憶してもよい。そうでなければ、一般に、信号HSCntDefaultにおける値は、HSCntラインバッファを初期化するために用いられる。信号HSCntResetが真である場合には、メモリは、カウンタHSCntの値を検索するために読み出さなくてもよい。なぜなら、値は、信号HSCntDefaultにおけるデフォルト値によって無効にしてもよいからである。
【0035】
起動時または信号StatCheckが0から1にトグルされたときに、本方法は、最初に、第1に処理されるフィールド(例えばトップ)のパリティと一致するカウンタ用に、オーバーライドフィールド(例えばトップ)を0にして、次に、第2に処理されるフィールドのパリティと一致するカウンタ用に、他の(例えばボトム)オーバーライドフィールドをゼロにする。かかるものとして、TriMADI方法を実行する制御ソフトウェアおよび/またはハードウェアは、HSCntReset=真、およびHSCntDefault=0を設定すべきである。カウンタHSCntを0に再設定する代わりに、制御ソフトウェア/ハードウェアは、信号StatCheckが0から1にトグルされ、かつWeaveが1から0にトグルされた場合には、カウンタHSCntを3(例えば、HSCntReset=真、およびHSCntDefaut=3)に再設定してもよい。上記は、フォースウィーブが前のフィールドにおいて用いられ、かつ静止チェックがちょうどイネーブルにされた場合には、実行してもよい。なぜなら、外部的に制御されるウィーブは、通常、最近のフィールドが静止的だったということの印であるからである。したがって、カウンタHSCntを3のデフォルト値に再設定することは、0に再設定すること(例えば、静止カウンタHSCntを最初から再構成すること)よりよく静止状態を反映し得る。さらに、外部制御信号は、フィールド境界または起動時にのみ変更されるべきである。制御信号は、フィールドをデインターレースしている間に変更すべきではない。
【0036】
図6aを参照すると、本発明の好ましい実施形態に従ってTriMADI技術を実行する例示的なシステム94のブロック図が示されている。システム94には、一般に、回路(またはモジュール)96、回路(またはモジュール)98および回路(またはモジュール)100が含まれる。信号セット(例えばCONTROL)は、回路96から回路100に転送してもよい。信号(例えばDATA)は、回路98と回路100との間でやりとりしてもよい。信号(例えばFRAME)は、回路100によって生成および供給してもよい。信号(例えばFIELD)は、回路98によって受信してもよい。
【0037】
回路96は、コントローラ回路として実現してもよい。回路96は、信号CONTROLと集合的に呼ばれる多数の信号を生成するように動作可能である。信号CONTROLには、一般に、信号ThreeChromaField、TwoChromaField、ThreeLumaField、AngleDetection、BOB、WEAVE、StatCheck、HSCntResetおよびHSCntDefaultが含まれる。一般に、信号CONTROLの成分によって、回路100は、1つまたは複数のルミナンスフィールドおよび1つまたは複数のクロミナンスフィールドのために、前のフィールドおよび次のフィールドを別々に用いて動作することが可能になる。
【0038】
回路98は、ランダムアクセスメモリ(RAM)回路として実現してもよい。回路98は、デインターレース動作において回路100が用いるために、信号FIELDで受信される1つまたは複数のフィールドを一度にバッファするように動作可能であってもよい。回路98はまた、様々なカウンタHSCntを記憶するように構成してもよい。
【0039】
回路100は、デインターレース回路として実現してもよい。回路100は、少なくとも2つのモードを用い、信号DATAにおいて受信されたフィールドをデインターレースすることによって、信号FRAMEにおけるフレームを生成するように動作可能であってもよい。モードグループは、一般に、表1(図17a)に示し、下記で詳細に論じる。
【0040】
図6bを参照すると、回路100の例示的なインプリメンテーションの詳細なブロック図が示されている。制御信号は、一般に、細線で示され、データ信号は、一般に、太線で示されている。回路100には、一般に、Yチャネル角度検出ブロック(またはモジュール)102、制御信号デコーダブロック(またはモジュール)104、Yチャネル静止チェックブロック(またはモジュール)106、Cbチャネル静止チェックブロック(またはモジュール)108、Crチャネル静止チェックブロック(またはモジュール)110、HSCntバッファブロック(またはモジュール)112、Yチャネルデインターレースブロック(またはモジュール)114、Cbチャネルデインターレースブロック(またはモジュール)116、Crチャネルデインターレースブロック(またはモジュール)118、および更新静止カウンタブロック(またはモジュール)120が含まれる。
【0041】
回路100は、一般に、いくつかの内部制御信号によって制御されるが、これらの信号は、信号(例えばenableAngleDetectionY)、信号(例えばenableStatCheckY)、信号(例えばenableStatCheckC)、信号(例えばweaveTwoFieldY)、信号(例えばweaveTwoFieldC)、信号(例えばweaveThreeFieldY)、信号(例えばweaveThreeFieldC)、信号(例えばoneFieldY)、信号(例えばoneFieldC)、信号(例えばthreeFieldY)および信号(例えばthreeFieldC)である。図18aに示すように、内部制御信号は、式セット1に従い、外部制御信号を用いて、制御信号デコーダブロック104によってデコードしてもよい。さらに、以下の制御信号は、角度検出ブロック102ならびに静止チェックブロック106、108および110によって内部で生成してもよいが、これらの信号は、信号(例えばisAngle)、信号(例えばangleFit)、信号(例えばα)、信号(例えばstatY)、信号(例えばstatCb)、信号(例えばstatCr)、信号(例えばisStationaryY)、信号(例えばisStationaryCb)および信号(例えばisStationaryCr)である。
【0042】
Yチャネルに対して、角度検出ブロック102によって角度検出を実行し、上側の2つの輝度ラインと下側の2つの輝度ラインとの間に強い角度相関が存在するかどうかを判定してもよい。次に、角度情報は、輝度静止チェックブロック106およびデインターレースブロック114によって用いてもよい。角度検出は、一般に、輝度チャネル用に実行されるが、オプションとして、クロマチャネル用には実行しなくてもよい。
【0043】
次に、回路100は、一般に、静止チェックブロック106、108および110において静止チェック方法を用いて、静止(例えばスチール)画素を非静止画素から区別してもよい。静止チェックの結果(例えば信号isStationaryY、isStationaryCbおよびisStationaryCr)は、デインターレースブロック114、116および118にそれぞれ伝達してもよい。静止チェックは、3つの全てのチャネルに対して独立して実行してもよいが、現在の画素位置に対する静止カウンタHSCntは、一般に、3つのチャネルに対して一緒に更新される。カウンタHSCntの単一の値は、3つの全てのチャネル用に静止チェックブロック106、108および110によって用いてもよい。
【0044】
図7を参照すると、例示的な輝度およびクロマデインターレース方法140の流れ図が示されている。デインターレース方法(またはプロセス)140には、一般に、ステップ(またはブロック)142、ステップ(またはブロック)144、ステップ(またはブロック)146、ステップ(またはブロック)148、ステップ(またはブロック)150、ステップ(またはブロック)152、ステップ(またはブロック)154、ステップ(またはブロック)156、ステップ(またはブロック)158、ステップ(またはブロック)160、ステップ(またはブロック)162およびステップ(またはブロック)164が含まれる。TriMADIアーキテクチャは、一般に、輝度およびクロマデインターレースの両方に対して同じデインターレース方法140を用いる。クロマデインターレースと輝度デインターレースとの間の差は、制御信号および結果(例えばx’s)がどのように計算されるかであり得る。
【0045】
クロマデインターレースに対して、全ての制御信号は、信号の対応クロマバージョンによって置き換えてもよい(例えば、上付き文字Yを上付き文字CまたはKと置き換える)。例えば信号weaveTwoFieldYは、信号weaveTwoFieldCと置き換えてもよく、信号weaveThreeFieldYは、信号weaveThreeFieldCと置き換えてもよく、信号oneFieldYは、信号oneFieldCと置き換えてもよく、信号threeFieldYは、信号threeFieldCと置き換えてもよい等である。さらに、全てのx’sは、対応するxKバージョンと置き換えてもよい。
【0046】
ステップ142において、デインターレース方法140は、信号weaveTwoFieldの値をチェックしてもよい。値が真である場合には(例えばステップ142の真ブランチ)、方法140は、ステップ144においてweaveTwoField方法を利用して計算された変数(例えばxw2)を用いて、出力サンプル変数(例えばXout)を生成してもよい。値が偽である場合には(例えばステップ142の偽ブランチ)、方法140は、ステップ146に進んでもよい。
【0047】
ステップ146において、デインターレース方法140は、信号isStationaryおよび信号weaveThreeFieldYにおける値のブール論理和(例えばシンボル「||」)をチェックしてもよい。論理和が真である場合には(例えばステップ146の真ブランチ)、方法140は、ステップ148においてweaveThreeField方法を用いて計算された変数(例えばxw3)を用いて、出力サンプル変数Xoutを生成してもよい。論理和が偽である場合には(例えばステップ146の偽ブランチ)、方法140は、ステップ150に進んでもよい。
【0048】
ステップ150において、デインターレース方法140は、信号isAngleYにおける値をチェックしてもよい。値が真である場合には(例えばステップ150の真ブランチ)、方法140は、ステップ152に進んでもよい。値が偽である場合には(例えばステップ150の偽ブランチ)、方法140は、ステップ156に進んでもよい。
【0049】
ステップ152において、デインターレース方法140は、信号angleFitの値をチェックしてもよい。値が真である場合には(例えばステップ152の真ブランチ)、方法140は、ステップ154において角度信号αにおける変数(例えばxdf)を用いて、出力サンプル変数Xoutを生成してもよい。値が偽である場合には(例えばステップ152の偽ブランチ)、方法140は、ステップ156に進んでもよい。
【0050】
ステップ156において、デインターレース方法140は、信号oneFieldの値をチェックしてもよい。値が真である場合には(例えばステップ156の真ブランチ)、方法140は、ステップ158において垂直空間フィルタリング方法(例えばボブ方法)を用いて計算された変数(例えばxvf)を用いて、出力サンプル変数Xoutを生成してもよい。値が偽である場合には(例えばステップ156の偽ブランチ)、方法140は、ステップ160に進んでもよい。
【0051】
ステップ160において、デインターレース方法140は、信号threeFieldの値をチェックしてもよい。値が真である場合には(例えばステップ160の真ブランチ)、方法140は、ステップ162において2フィールド混合方法(例えばB2方法)を用いて計算された変数(例えばxB2)を用いて、出力サンプル変数Xoutを生成してもよい。値が偽である場合には(例えばステップ160の偽ブランチ)、方法140は、ステップ162において3フィールド混合方法(例えばB3方法)を用いて計算された変数(例えばxB3)を用いて、出力サンプル変数Xoutを生成してもよい。
【0052】
いくつかの実施形態において、角度検出は、クロマチャネルに対して実行しなくてもよい。したがって、(i)クロマデインターレースにおいて、角度情報は、利用不可能でもよく、(ii)信号isAngleCは、常に偽であり、(iii)信号angleFitKおよび信号xDFKの両方における値は、無視してもよい。いくつかの実施形態において、信号isAngleに対応する全ブランチは、クロマ用のインプリメンテーションでは省略してもよい。
【0053】
輝度デインターレース成分
信号weaveTwoFieldYにおける値が真である場合には、ウィーブ方法を用いて輝度出力を生成してもよい。変数xw2は、一般に、前のフィールドPREVにおける同じ場所の画素である。したがって、輝度デインターレースに対して、xw2の値は、図18aに示すように、式2によって定義してもよい。式2において、PRE[u][v]は、前の反対パリティフィールドにおける配列された輝度サンプルであってもよい。前の(反対パリティ)フィールドのPREフィールドは、ウィーブ用に用いてもよい。しかしながら、3:2プルダウンスキームを有する入力ビデオに対して、ウィーブは、次のフィールドNXTを用いて実行してもよい。かかる場合において、前のフィールドPREは、TriMADI方法による処理の前に、次のフィールドNXTと交換してもよい。
【0054】
3フィールドメジアンウィーブは、一般に、現在の画素が静止的であると判定された場合(例えば、信号isStationaryが真である)かまたは信号weaveThreeFieldYが真である場合(図7を参照)に用いられる。図18aに示すように、メジアンウィーブ出力変数xw3は、式セット3によって計算してもよい。式セット3において、変数xvfは、式4において定義してもよく、変数xcoは、変数xcp、xcnおよびxvfのメジアンとして定義してもよい。
【0055】
補間される画素がエッジ画素ではないと宣言された場合には(例えば信号isAngle=偽)、図18bに示すように、4タップ垂直フィルタを適用し、補間される変数xvfを式4によって生成してもよい。変数xvfは、範囲[0、255]にクリップすべきである。
【0056】
補間される画素がエッジ画素であると宣言された場合には(例えば信号isAngle=真)、図18bに示すように、方向フィルタを適用し、補間される変数xdfを式5によって生成してもよい。角度変数αは、検出された角度であってもよく、変数bおよび変数l(小文字のL)は、角度αから得てもよい。上記の方向フィルタにおいて用いられる4つの画素は、一般に、位置(u、v)に「方向的に」集中される。例えば、α=2の場合に対して、図12を参照されたい。
【0057】
補間される画素Xoutは、ローカル垂直動作に劇的な変化をもたらすべきではない。したがって、以下の「保護」条件を課してもよい。
(1)local_set={CUR[u−1][v−1]、CUR[u+1][v−1]、CUR[u−1][v+1]、CUR[u+1][v+1]、xout[u][v−1]}
(2)min_set={local_set、max(CUR[u−1][v]、CUR[u+1][v])}
(3)max_set=local_set、min(CUR[u−1][v−1]、CUR[u+1][v])}
(4)min0=min_setの最小値
(5)min1=min_setの2番目の最小値
(6)max0=max_setの最大値
(7)max1=max_setの2番目の最大値
(8)max_side_gradient=max(|CUR[u−1][v−1]−CUR[u+1][v−1]|、|CUR[u−1][v+1]−CUR[u+1][v+1]|)
(9)min_side_gradient=min(|CUR[u−1][v−1]−CUR[u+1][v−1]|、|CUR[u−1][v+1]−CUR[u+1][v+1]|)
(10)gradient=max(min(max0−min1、max1−min0、max_side_gradient)、min_side_gradient)
【0058】
図18bに示すように、角度適合値(例えばangleFITY)は、式6によって計算してもよい。式6において、パラメータc3は、一般に、0〜15の整数値および9のデフォルト値を備えたプログラム可能なパラメータである。上記の条件が満たされた場合には、xdf(式5において定義されるような)は、生成された最終出力として用いてもよい。そうでなければ、画素は、非エッジ画素として処理してもよい(図7を参照)。式6における「勾配」演算は、一般に異常値を拒絶するローカル画素変動のものさしである。勾配演算は、一般に、多くの「壊れた」対角線、特により低いコントラストのラインを修正する一方で、著しく目立つ新しい誤った角度補間を導入しない。「側部勾配」が一般に過度に大きな勾配を防ぐので、ピクチャの外側のlocal_set画素用にゼロのデフォルト値を用いることは、許容できる。
【0059】
図18bに示すように、変数xcoと変数xvfとの混合、および最終的な混合変数(例えばxblend)の生成は、式7によって計算してもよい。式7において、(i)xcp=PRE[u][v]は、配列された画素の、前のフィールド画素であってもよく、
(ii)
【0060】
【数1】
【0061】
は、threeFieldYが真である場合には、同じ場所の次のフィールド画素であってもよく、threeFieldYが偽である場合には、xcpと同じであり、(iii)xco=メジアン(xcp、xcn、xvf)は、一般に、混合を伴う、画素に関するウィーブ用に用いられる。変数xB2は、一般に、前のフィールドにおける同じ場所の画素で垂直にフィルタリングされた値から導き出される(例えばボブ)。変数xB3は、前および次のフィールドにおける同じ場所の画素で垂直にフィルタリングされた値から導き出してもよい(例えばボブ)。
【0062】
図18bに示すように、混合要素(例えばμ)は、式セット8によって計算してもよい。式セット8において、パラメータΔτは、集合{2、4、8、16}におけるプログラム可能なパラメータであってもよい。Δτのデフォルト値は、信号ThreeLumaFieldが真である場合には16であってもよく、信号ThreeLumaFieldが偽である場合には8であってもよい。τの値は、図18cに示すように、式セット9によって計算してもよい。式セット9において、パラメータτscaleおよびnscaleは、一般に、集合{1、...、16}におけるプログラム可能なパラメータである。nscale用のデフォルト値は、8であってもよい。τscale用のデフォルト値は、信号ThreeLumaFieldが真である場合には8であってもよく、信号ThreeLumaFieldが偽である場合には4であってもよい。3フィールド混合に対して、デフォルト値は、τ3およびxn用のスケーリングを生じなくてもよい。2フィールド混合に対して、xnは、次のフィールドNXTが前のフィールドPREとして扱われるので、常に0であってもよい。かかるものとして、nscaleは、一般に、2フィールド混合に影響しない。
【0063】
図8を参照すると、変数xcoおよびxvfの関数としての混合要素μのグラフが示されている。混合要素μは、多数のフィールドの時空間的な非線形混合用に用いてもよい。混合方法において用いられる変数τ1(式セット9を参照)は、動き適応デインターレースおよび動き補償デインターレースに類似してもよい。変数τ2の使用によって、一般に、移動エッジの近辺(エッジ上ではない)におけるアーチファクトが回避される。かかる状況において、最大値が用いられる場合には、変数τ1は、極めて大きくなる可能性があり、したがって、一般に、垂直フィルタの代わりに、時間フィルタリングが用いられる。変数τ2を組み込むことによって新しい顕著なアーチファクトが導入される可能性はない。図8の関数は、(上記に対して丸めを正確に指定するために)以下の擬似コードで表わしてもよい。
diff=max(|xvf−xcp|、|xvf−xcn|)−τ
temp=xvf−xco
if(diff≦0) xblend=xco
else if(diff≧Δτ) xblend=xvf
else if(temp<0) xblend=xco+(diff×temp−(Δτ>>1))/Δτ
else xblend=xco+(diff×temp+(Δτ>>1))/Δτ
ここで、τscaleは、集合{1/4、1/2、1、2}における値を取ってもよく、Δτは、集合{4、8、16、32}における値を取ってもよい。
【0064】
クロマデインターレース成分
信号weaveTwoFieldCが真である場合には、ウィーブ方法を用いてクロマ出力変数を生成してもよい。変数xW2Kは、一般に、前のフィールドPREにおける同じ場所の画素である。したがって、図18cに示すように、クロマデインターレースに対して、xw2Kの値は、式10によって定義してもよい。式10において、PREK[cu][cv]は、前の反対パリティフィールドにおける同じ場所の輝度サンプルであってもよい。さらに、フィールドPREK(前の反対パリティフィールド)は、ウィーブ用に用いられる。しかしながら、3:2プルダウンスキームを有するビデオシーケンスに対して、ウィーブは、次のフィールドNXTを用いて実行してもよい。かかる場合において、前のフィールドPREは、TriMADI方法によって処理される前に、次のフィールドNXTと交換してもよい。
【0065】
3フィールドメジアンウィーブは、一般に、現在の画素が静止的であると判定された場合(例えば信号isStationaryKが真である)かまたは信号weaveThreeFieldCが真である場合に用いられる(図7を参照)。図18cに示すように、メジアンウィーブ出力(例えばxw3K)は、式セット11によって計算してもよい。式セット11において、変数xvfKおよびxcoKは、式12および13によってそれぞれ定義してもよい。
【0066】
補間される画素がエッジ画素ではないと宣言された場合には(例えば信号isAngleC=偽)、図18cに示すように、2タップ垂直フィルタリングを適用し、式12によって補間値を生成してもよい。式12において、変数xvfKは、範囲[0、255]にクリップすべきである。クロマ垂直フィルタリングに対して、輝度垂直フィルタリング用に用いられる4タップフィルタの代わりに、2タップフィルタを用いてもよい。
【0067】
クロマ混合は、本質的に輝度混合と同じであってもよい。輝度混合と比較したクロマ混合の差は、変数τがどのように計算されるかであり得る。図18dに示すように、式13を用いて、xvfKをxcoKと混合してもよい。式13において、(i)xcpK=PREK[cu][cv]は、配列された画素の、前のフィールド画素であってもよく、(ii)
【0068】
【数2】
【0069】
は、信号threeFieldCが真である場合には、次のフィールドにおける配列された画素であってもよく、信号threeFieldCが偽である場合には、前のフィールドにおける配列された画素であってもよく、(iii)xcoK=メジアン(xcpK、xcnK、xvfK)は、混合を伴う、画素に関するウィーブ用に用いてもよい。
【0070】
変数xB2Kは、一般に、前のフィールドにおける同じ場所の画素で垂直にフィルタリングされた値から導き出される(例えばボブ)。変数xB3Kは、前および次のフィールドにおける同じ場所の画素で垂直にフィルタリングされた値から導き出してもよい(例えばボブ)。
【0071】
図18dに示すように、混合要素変数(例えばμK)は、式セット14によって計算してもよい。式セット14において、パラメータΔτCは、集合{1、2、4、8}におけるプログラム可能なパラメータであってもよい。ΔτCのデフォルト値は、信号ThreeChromaFieldが真である場合には8であってもよく、信号TwoChromaFieldが真である場合には4であってもよい。図18dに示すように、変数τKは、式セット15によって計算してもよい。式セット15において、パラメータnscaleは、輝度混合において定義されるのと同じプログラム可能なパラメータであってもよく、τscaleCは、集合{1、...、16}におけるプログラム可能なパラメータであってもよい。τscaleCのデフォルト値は、信号ThreeChromaFieldが真である場合には8であってもよく、信号TwoChromaFieldが真である場合には4であってもよい。3フィールド混合に対して、デフォルト値は、一般に、τ3およびxn用にはスケーリングを生じない。2フィールド混合に対して、変数xnは、次のフィールドNXTKが前のフィールドPREKとして処理されるので、0であってもよい。かかるものとして、nscaleの値は、一般に、2フィールド混合に影響しない。
【0072】
クロマ混合は、一般に、輝度におけるのと同じ混合技術を用いる。擬似コードにおいて、クロマ混合は、以下のように提示してもよい。
temp=xvfK−xcoK
diff=max(|xvfK−xcpK|、|xvfK−xcnK|)−τK
if(diff≦0) xblendK=xcoK
else if(diff≧ΔτC) xblendK=xvfK
else if(temp<0) xblendK=xcoK+(diff×temp−(ΔτC>>1))/ΔτC
else xblendK=xcoK+(diff×temp+(ΔτC>>1))/ΔτC
【0073】
輝度角度検出
図9を参照すると、例示的な輝度角度検出方法180の流れ図が示されている。角度検出方法(またはプロセス)180には、一般に、ステップ(またはブロック)182、ステップ(またはブロック)184、ステップ(またはブロック)186およびステップ(またはブロック)188が含まれる。輝度角度検出方法180は、(i)現在の位置がエッジかどうかということ、および(ii)そうである場合には、エッジの角度を判定するために用いられる。
【0074】
ステップ182において、方法180は、信号(例えばenableAngleDetection)をチェックして、角度検出がイネーブルまたはディスエーブルにされているかどうかを判定してもよい。角度検出がイネーブルにされている場合には(例えばステップ182の真ブランチ)、方法は、ステップ184に進んでもよい。ステップ184において、変数DIFFを計算してもよい。後で、ステップ186において、信号isAngleを真に設定してもよい。角度検出がディスエーブルにされている場合には(例えばステップ182の偽ブランチ)、方法180は、ステップ188において、信号isAngleを偽に設定してもよい。
【0075】
図10を参照すると、例示的な検出可能角度を示す図が示されている。角度検出モジュール102は、ピクチャを検査し、位置(u、v)の近くの角度の特徴においてエッジを検出してもよい。TriMADIアーキテクチャにおいて、ピクチャは、水平軸190に対する多数(例えば2〜19)の角度に沿って探索してもよい。左(例えば指数−9)から右(例えば指数9)へ、角度は、それぞれ、174.6°、172.4°、171.3°、169.7°、167.5°、164.1°、158.2°、146.3°、116.6°、90.0°、63.4°、33.7°、21.8°、15.9°、12.5°、10.3°、8.7°、7.6°および5.4°であってもよい。図10に示すように、角度指数iは、−9≦i≦9の範囲を有してもよい。指数は、−21、−15、−13、−11、−9、−7、−5、−3、−1、0、1、3、5、7、9、11、13、15および21のベースオフセット(例えばb)に対応する。ベースオフセットは、一般に、上側ラインと下側ラインとの間の画素距離として定義される。したがって、角度αは、tan-1(2/b)であってもよい。図17bに示すように、角度指数i、ベースオフセットbおよび検出角度α間のマッピングが、表2に要約されている。さらに、ベース指数bは、角度指数iの関数であってもよく、逆も同様である。90.0°の角度は、角度検出の正確さを向上させる有効な検出角度と見なしてもよい。
【0076】
図18dに示すように、現在のフィールドCURの位置(u、v)における画素を補間するために、アレイDIFF[i]は、式16によって各角度指数i用に計算してもよい。式16において、相関ウィンドウは、2Wのサイズを有してもよい。さらに、図18dに示すように、変数lは、式17によって定義してもよい。
【0077】
24のサイズ(例えばW=12)を有する相関ウィンドウによって、一般に、アレイDIFFを計算するための優れた正確さが提供される。より大きなウィンドウサイズによって、低角度用の角度検出精度を改善することが可能である。特定用途の基準を満たすために、他のウィンドウサイズを実現してもよい。
【0078】
図11〜13を参照すると、3つの例示的な角度用の図が示されている。図11は、一般に、63.4°の第1の角度でDIFF[i]を計算するために用いられる多数(例えばN=24)のラインセグメント200a〜200nを示す。図12は、一般に、33.7°の第2の角度におけるNラインセグメント202a〜202nを示す。図13は、一般に、21.8°の第3の角度におけるNラインセグメント204a〜204nを示す。各例において、一意のアレイDIFF[i]は、N=24のラインセグメントに沿った(2W+3×2W=4×24=96)ペアに関する絶対差合計として計算してもよいが、これらのラインセグメントのそれぞれは、図における多数の黒色を接続する。特定用途の基準を満たすために、ラインセグメントの他の数、ラインセグメントの他の長さおよびラインセグメントの他の間隔を実現してもよい。
【0079】
実験結果に基づくと、画素あたり4ビットの低減された精度が、現在のフィールドCURにおける少なくとも16階調の平均ステップ高を備えたエッジを捕捉するのに十分である可能性があり、したがって、知覚性能に著しい影響を及ぼすことなく、ハードウェアコストを大いに低減することが可能である。式16において、DIFFの計算は、高い計算複雑性(例えば、それぞれ96の加算および絶対値を備えた19のDIFF)を有するように見える。実際には、インプリメンテーションは、より少数の計算を有することが可能である。高速計算は、一般に、位置(u、v)におけるDIFF[i](DIFF(u、v)[i]として表示される)と位置(u、v−1)におけるDIFF[i](DIFF(u、v-1)[i]として表示される)との間の関係を探究することによって、達成可能である。
【0080】
図14を参照すると、位置(u、v−1)および位置(u、v)におけるDIFF[i]の例示的な関係の図が示されている。各アレイDIFF[i]は、96の加算および絶対値を用いるが、式16におけるほとんどの絶対差合計(SAD)項は、位置(u、v−1)および(u、v)にとって共通である。2つの位置のDIFF[i]間の差は、スライドウィンドウにおける左の境界210および右の境界212である。したがって、図18eに示すように、式16は、式セット18として再定式化してもよい。(ほとんどのケースにおいて)DIFF(u、v-1)[i]が周知である場合には、DIFF(u、v)[i]は、わずかな労力で計算可能である。式セット18に示すように、高速技術は、2+3+3=8の加算および絶対値を利用して、位置(u、v)用に各DIFF[i]を計算する。したがって、計算の複雑性は、12分の1に低減可能である。行における左端の画素(例えばDIFF(u、v=0)[i])に対して、完全な計算を実行してもよい。なぜなら、DIFF(u、v=-1)[i]が存在しないからである。
【0081】
19アレイDIFFを計算した後で、下記の規則に従って、補間される現在の画素がエッジに位置するかどうかの判定を下してもよい。項の以下の定義を、規則によって用いてもよい。
(1)DIFF_min1=DIFF[α]は、19DIFFの最小値であってもよい。
(2)DIFF_min2=DIFF[β]は、2番目の最小であってもよい。
(3)DIFF_min3は、3番目の最小値であってもよい。
(4)DIFF_maxは、最大値であってもよい。
DIFF_min1=DIFF[α]==DIFF_min2=DIFF[β]の場合には、αの値は、真ん中の角度の指数であるはずである(例えば|α|<|β|)。同様に、DIFF_min2=DIFF[β]==DIFF_min3の場合には、βの値は、DIFF_min2およびDIFF_min3の真ん中の指数であるはずである。図17bに示すように、中心角(例えば90°)に対する指数iの距離は、表3において定義してもよい。いくつかの実施形態において、ハードウェアインプリメンテーションは、「均衡」の場合を壊すために別の規則を用いることによって、より単純にすることが可能である。特定用途の基準を満たすために、他の規則を実行してもよい。
(5)変数(例えばLEFT)は、αの左の直接隣接する角度として定義してもよく、変数(例えばRIGHT)は、αの右の直接隣接する角度として定義してもよい。図18eに示すように、変数LEFTおよびRIGHTは、式セット19に従って決定してもよい。
(6)いくつかの変数(例えばUpLeft、UpRight、DownLeft、DownRight)は、ウィンドウのラインu−1およびラインu+1における左端の画素および右端の画素であってもよい。図18eに示すように、変数UpLeft、UpRight、DownLeftおよびDownRightは、式セット20によって決定してもよい。
(7)閾値マトリックス(例えばTH_DIFF)は、角度用の最大の可能なSADを定義してもよい。マトリックスTH_DIFFは、角度に依存した8ビットのプログラム可能な閾値を記憶してもよい。DIFFを計算する際に各画素が4ビットで表わされる場合には、図17bに示すように、TH_DIFF用のデフォルト値は、表4において定義してもよい。8ビットのDIFF計算用に、表4のデフォルト値に16を掛けてもよい。
【0082】
以下の条件が満たされる場合に、画素は、角度画素(例えばisAngleフラグ=真)であると宣言してもよい。
isAngle=
(a) DIFF_min1*21<c1*DIFF_max
(b)&& DIFF_min1≦TH_DIFF[α]
(c)&& DIFF_min1!=DIFF_min2|| DIFF_min2!=DIFF_min3
(d)&& max(|UpLeft−DownLeft|、|UpRight−DownRight|)<c2
(e1)&& ((|α−β|==1)
(e2)||(DIFF_min1*2<DIFF_min2
&& DIFF[LEFT]<((3*DIFF_min2>>1) && DIFF[RIGHT]<((3*DIFF_min2>>1))
【0083】
条件(a)におけるパラメータc1は、7のデフォルト値を備えた、{3、5、...、15、18}からのプログラム可能なパラメータであってもよい。条件(d)におけるパラメータc2は、プログラム可能な閾値であってもよい。画素UpLeft、UpRight、DownLeftおよびDownRightの主要な4ビットのみが用いられる場合には、閾値は、4のデフォルト値を備えた4ビット整数として実現してもよい。画素の8ビット全てが用いられる場合には、閾値は、64のデフォルト値を備えた8ビット整数として実現してもよい。
【0084】
条件(a)は、一般に、少なくとも1つの他の方向よりはるかによい角度方向を確立することによって、背景フリッカを回避する。条件(b)は、最小の角度強度を確立可能である。条件(c)は、一般に、3つの角度が等しく優れている場合に、誤った角度で終了しないようにする。条件(c)は、低減されたビット深度および/または低コントラスト領域の場合に役立つ可能性がある。条件(d)は、アーチファクトを低減するための追加的な基準を加えることが可能である。条件(e1)および(e2)は、論理「OR」してもよい。条件(e1)は、一般に、最良の2つの角度が隣接してもよいことを述べる。条件(e2)は、条件(e1)が満たされないときで、最良の2つの角度が隣接していない場合に、DIFFに対して追加条件を確立してもよい。さらに、信号isAngleが真である場合には、角度αは、方向フィルタ用に現在の画素の角度として定義してもよい。
【0085】
角度検出プロセスが、u−3、u−1、u+lおよびu+3のラインを利用するので、角度検出プロセスは、トップラインおよびボトムライン用のフィールド境界の外側のラインにアクセスしてもよい。さらに、角度検出プロセスが大きなウィンドウサイズ(例えばv±43)を用いることが可能なので、プロセスは、左フィールド境界および右フィールド境界近くの利用不可能な画素にアクセスしてもよい。
【0086】
上記に示すように、フィールド境界の左および右の全ての利用不可能な輝度画素は、0の値を有すると仮定してもよい。かかるものとして、フィールド境界の左および右の埋め込み画素(例えば、ピクチャ境界の外側の計算される画素)は、問題を起こすことがないであろう。しかしながら、フィールド境界のトップの上、およびボトムの下のラインに対して、いくつかの可能なアプローチを用いてもよい。すなわち、(1)角度検出をディスエーブルにして、埋め込み画素の代わりに実際の画素値を用い、(2)角度検出をディスエーブルにして、埋め込み画素を黒(例えば、0の値を有する)と仮定し、(3)角度検出をイネーブルにして、境界外ラインの代わりにトップ/ボトムラインを用い、(4)角度検出をイネーブルにして、全ての境界外画素用にデフォルト値(例えば0)を仮定する。図17bに示すように、上記のアプローチの性能は、一般に、表5において提供される。図17cに示すように、様々なパラメータのリストは、表6に見い出すことができる。
【0087】
画素に関する静止チェック技術
TriMADIアーキテクチャは、一般に、画素に関する静止チェックを用いて、経時的にほとんどまたは全く変化しない(例えば静止的)領域にわたって鮮明な出力を提供する。図6に示すように、静止チェックは、各チャネル(例えばY、Cb、Cr)に対して独立して実行してもよい。各チャネルに対して、静止チェックは、2つの出力ブール信号(またはフラグ)、すなわち(i)isStationaryおよび(ii)statを生成してもよい。信号isStationaryは、一般に、現在のフィールドCURの出力を生成するためにデインターレース技術によって用いられる。信号statは、2ビットの静止カウンタHSCntを更新するために用いてもよい。カウンタHSCntは、過去に処理された静止フィールドの数を追跡するために用いてもよい。カウンタHSCntは、3つの全てのチャネルの静止フラグに基づいて更新してもよい。
【0088】
図15を参照すると、例示的で画素に関する輝度静止チェック方法220の流れ図が示されている。輝度静止チェック方法(またはプロセス)220には、一般に、ステップ(またはブロック)222、ステップ(またはブロック)224、ステップ(またはブロック)226、ステップ(またはブロック)228、ステップ(またはブロック)230、ステップ(またはブロック)232およびステップ(またはブロック)234が含まれる。
【0089】
ステップ222において、信号enableStatCheckYを検査してもよい。信号enableStatCheckYが偽の場合には(例えばステップ222の偽ブランチ)、静止チェック方法220は、ステップ224において、信号isStationaryYを偽に設定し、信号statYを偽に設定してもよい。信号enableStatCheckYが真である場合には(例えばステップ222の真ブランチ)、いくつかのフラグ(または信号)を、ステップ226、228および230において生成してもよい。
【0090】
ステップ226において、フラグ(例えばisStatHist)を計算してもよい。ステップ228において、第1のフラグ(例えばstatLum[0])および第2のフラグ(例えばstatLum[1])を生成してもよい。ステップ230において、フラグ(例えばisLumAngleStat)は、信号isAngleおよび信号angleFitに基づいて計算してもよい。ステップ232において、信号isStationaryYは、フラグisStatHist、フラグstatLum[0]およびフラグisLumAngleStatに基づいて計算してもよい。ステップ234において、フラグstatYは、フラグstatLum[1]に設定してもよい。
【0091】
図15に示すように、いくつかのフラグを生成して、輝度静止チェック方法220の内で用いてもよい。フラグstatLum[0]およびフラグstatLum[1]は、一般に、現在のフィールドCURならびに反対パリティフィールドPREおよびNXTにおける周辺画素が静止的かどうかを知らせる。フラグstatLum[0]は、より厳密な条件で計算してもよく、現在のフィールドCURをデインターレースするために用いられる。フラグstatLum[1]は、より緩やかな条件で計算してもよく、静止カウンタHSCntを更新するために用いられる。さらに、フラグstatLum[1]用に計算された値は、静止チェック技術のフラグstatYにおいて出力してもよい。
【0092】
フラグisLumAngleStatは、現在の画素がエッジ画素であると判定された場合に、輝度静止チェックをより強固にする追加的制約であってもよい。フラグisStatHistは、一般に、現在の位置が過去に十分に静止的だったかどうかを知らせる。フラグisStatHistは、カウンタHSCntに基づいて計算してもよい。フラグisStatHistは、輝度静止チェック方法220およびクロマ静止チェック方法の両方によって用いてもよい。フラグisStationaryYは、一般に、現在の画素が静止的かどうかを知らせるために、輝度デインターレース技術によって用いられる。
【0093】
輝度静止フラグは、現在の画素のローカル動作、1つまたは複数の水平方向周辺画素の動作に基づき、かつ前のフィールドPREと次のフィールドNXTとの間の変化に基づいて計算してもよい。現在のラインの位置v−4〜v+4のローカル動作は、計算において用いてもよい。図18fおよび18gに示すように、計算の詳細は、一般に、式21、式セット22、式セット23、式24、式セット25および式26によって規定される。パラメータActOffset、ActScaleおよびMaxResidueは、以下のように定義されたプログラム可能なパラメータであってもよい。
(1)ActScale=6のデフォルト値を備えた{2、3、4、5、6、7、8、9}
(2)ActOffset=7のデフォルト値を備えた{0、1、2、...、14、15}
(3)MaxResidue=15のデフォルト値を備えた{12、13、...、19}
【0094】
いくつかの実施形態において、式21〜26における全ての中間媒介変数の完全な計算は、回避してもよい。式セット22から、パラメータhstatcntおよび剰余は、所定のサイズ(例えば9)のスライディングウィンドウ内でパラメータtdiffactに基づいて計算してもよい。ほとんどの中間媒介変数が、位置(u、v−1)と位置(u、v)との間で共有可能なので、スライディングウィンドウにおけるパラメータtdiffactおよびパラメータlumActは、一時的にバッファしてもよく、したがって、単に、ウィンドウにおける右端の位置に対応する変数だけを個別に計算してもよい。
【0095】
輝度静止チェックの正確さを改善するために、フラグisLumAngleStatは、現在の輝度画素の角度情報に基づいて計算してもよい。図18gに示すように、フラグisLumAngleStatは、式27によって計算してもよい。式27において、変数MinHistAngleは、[0、1、2、3]の範囲を備えたプログラム可能なパラメータであってもよく、2のデフォルト値を有してもよい。より大きなMinHistAngle値は、一般に、より厳しい条件を与える。より厳しい条件は、より小さい偽検出(例えば、誤った真)の機会に帰着することが可能であるが、しかしより高いミス検出(誤った偽)の機会に帰着する可能性がある。同様に、より小さなMinHistAngle値は、一般に、より緩やかな条件を与え、したがってより小さなミス検出の機会と共に、より高い偽検出の機会を与える。
【0096】
フラグisStatHistを用いて、現在の画素位置(および垂直方向周辺画素)が過去に静止的だったかどうかを示してもよい。フラグisStatHistは、輝度静止チェック技術およびクロマ静止チェック技術の両方によって用いてもよい。図18gに示すように、フラグisStatHistは、式28によって生成してもよい。式28において、パラメータMinHistCenter、パラメータMinHistAdjacentおよびパラメータMinHistSumは、静止チェック技術の性能に影響するプログラム可能なパラメータであってもよい。パラメータの範囲は、それぞれ、[0、1、2、3]、[3、4、5、6]、および[0、1、...、14、15]であってもよい。デフォルト値は、それぞれ、2、6および9であってもよい。パラメータのより大きな値は、一般に、より厳しい条件をもたらす。より厳しい条件は、より小さい偽検出(例えば、誤った真)の機会に帰着することが可能であるが、しかしより高いミス検出(誤った偽)の機会に帰着する可能性がある。同様に、より小さな値は、一般に、より緩やかな条件を与え、したがってより小さなミス検出の機会と共に、より高い機会の偽検出を与える。
【0097】
フラグisStationaryYは、輝度デインターレース技術によって用いてもよい(図6および7を参照)。図18gにおいて式29に示すように、フラグisStationaryYは、フラグstatLum[0]、フラグisLumAngleStatおよびフラグisStatHistの論理積として生成してもよい。
【0098】
図16を参照すると、例示的で画素に関するクロマ静止チェック方法240の流れ図が示されている。クロマ静止チェック方法(またはプロセス)240には、一般に、ステップ(またはブロック)242、ステップ(またはブロック)244、ステップ(またはブロック)246、ステップ(またはブロック)248、ステップ(またはブロック)250およびステップ(またはブロック)252が含まれる。
【0099】
ステップ242において、信号enableStatCheckCを検査してもよい。信号enableStatCheckCが偽の場合には(例えばステップ242の偽ブランチ)、静止チェック方法240は、ステップ244において、信号isStationaryCを偽に設定し、信号statCを偽に設定してもよい。信号enableStatCheckCが真である場合には(例えばステップ242の真ブランチ)、多数のフラグ(または信号)をステップ246および248で生成してもよい。
【0100】
ステップ246において、フラグisStatHistを計算してもよい。ステップ248において、フラグ(例えばstatCK)を生成してもよい。ステップ250において、信号isStationaryYは、フラグisStatHistおよびフラグstatCKに基づいて計算してもよい。ステップ252において、フラグstatKは、フラグstatCKに設定してもよい。一般に静止フラグのより厳しいバージョンおよびより緩やかなバージョンの両方を生成する輝度静止チェックにおけるのと異なり、2つのクロマチャネルのそれぞれに対して、単一のフラグ(例えばstatCK)だけを生成してもよい。フラグstatCKは、一般に、現在のフィールド(例えばCURK)および反対パリティフィールド(例えばPREKおよびNXTK)における画素が静止的かどうかを知らせる。さらに、フラグstatCKを用いて、フラグisStaionaryKを計算してもよい。
【0101】
同じ静止チェック技術を、両方のクロマチャネル用に用いてもよい。図6に示すように、CbチャネルおよびCrチャネル用のクロマ静止チェック方法240は、独立して実行してもよい。クロマ静止チェック方法240は、一般に、輝度静止チェック方法220におけるのと同じフラグisStatHistを用いる。
【0102】
フラグstatCKは、現在の画素および1つまたは複数の水平方向周辺画素のローカル動作に基づいて計算してもよい。フラグstatCKは、前のフィールドPREと次のフィールドNXTとの間の変化に基づいてもよい。(4:2:0フォーマットおよび4:2:2フォーマットの両方における)クロマチャネルの潜在的な水平ダウンサンプリングゆえに、現在のラインの位置v−2〜v+2(輝度における±4ではなく)のローカル動作を、計算において用いてもよい。
【0103】
図18hおよび18iに示すように、statCKフラグは、式30〜式35によって生成される。式30〜式35において、パラメータActOffsetC、パラメータActScaleCおよびパラメータMaxResidueCは、以下に従うプログラム可能なパラメータであってもよい。
(1)ActScaleC=13のデフォルト値を備えた{9、...、16}
(2)ActOffsetC=7のデフォルト値を備えた{0、1、2、...、15}
(3)MaxResidueC=15のデフォルト値を備えた{12、13、...、19、}
【0104】
現在の画素が静止的で、現在の位置において履歴的に静止的である場合には、クロマ画素は、静止的であると見なされる。かかるものとして、図18jに示すように、フラグisStationaryKは、式36によって生成してもよい。
【0105】
静止チェックカウンタHSCntは、静止チェックがイネーブルにされた場合には(例えば、statCheckまたはenableStatCheckYが真である場合には)、更新してもよい。カウンタHSCntの更新が、追加的な書き込み帯域幅を消費する可能性があるので、カウンタHSCntは、静止チェックがディスエーブルにされた場合には、更新しなくてもよい。
【0106】
静止チェックがイネーブルされた場合、および静止チェックが、3つの全てのチャネルに対して実行された後で(例えば、statY、statCbおよびstatCrが全て設定された後で)、図18jに示すように、現在の出力位置用のカウンタHSCntは、式37によって更新してもよい。カウンタHSCntは、一般に、現在の位置が、3つの全てのチャネルにおいて静止的であると分かった場合には、1(最高3まで)だけ増分される。弱く静止的である場合には(例えば、輝度は静止的であるが、しかし、クロマの少なくとも1つが静止的ではない)、カウンタHSCntは、2で割ってもよい。カウンタHSCntは、現在のフィールドCURが静止的ではないと判定された場合には、0に再設定してもよい。潜在的なクロマダウンサンプリングゆえに、全ての輝度サンプルが、対応するクロマサンプルを有するわけではない場合がある。したがって、全てのフラグstatYが、対応するフラグstatCbおよび対応するフラグstatCrを有するわけではない場合がある。
【0107】
クロマフラグの欠如は、以下のように扱ってもよい。水平クロマダウンサンプリングに関して(例えば4:2:2フォーマットおよび4:2:0フォーマット用の)、フラグstatKは、全ての奇数v’s用には存在しない(図1および2を参照)。かかる場合において、位置v>>1においてなされたクロマ判定(例えば、同じラインのv−1における輝度サンプルに対応するクロマサンプルの判定)を用いてもよい。
【0108】
垂直クロマダウンサンプリングに関して(例えば4:2:0フォーマット用の)、フラグstatKは、1つおきの輝度ライン用には存在しない(図2を参照)。かかる場合に、最も最近にデインターレースされた輝度ライン(例えばu−2)において用いられたクロマ判定を用いてもよい。したがって、クロマ幅のサイズの2つの1ビットライン記憶装置(例えばstatCbライン記憶装置およびstatCrライン記憶装置)を用いて、クロマライン全体の判定を記憶してもよい。かかるものとして、輝度幅の追加的な1ビットライン記憶装置(クロマは、4:2:0フォーマットにおいて2で水平にダウンサンプリングされ、かつ2つのクロマチャネルが存在する)を実現してもよい。ボトムフィールドのトップ輝度ラインにとって、前のクロマ判定は存在しない。かかる場合に、フラグstatCbおよびフラグstatCrは、真であると仮定してもよい(例えば、式37において用いられるクロマ判定を無視する)。1ビットライン記憶装置に記憶された情報は、メモリに書き込む必要はない。かかるものとして、1ビットライン記憶装置は、読み出し帯域幅も書き込み帯域幅も増加させる可能性がない。
【0109】
カウンタHSCntは、フラグisStatHistを計算する場合およびカウンタHSCntを更新する場合には、読み出してもよい。全体的には、垂直隣接カウンタHSCntだけを用いてもよい(例えば、x∈{u−2、u−1、u、u+l、u+2}の場合にカウンタHSCnt[x][v]だけを用いてもよい)。水平隣接HSCntは、一般に、用いられない。したがって、カウンタHSCntの依存は、一般に、同じライン内には存在しない。しかしながら、依存は、垂直隣接カウンタHSCnt間には存在してもよい。
【0110】
上記の結果として、インプリメンテーションにおいて輝度デインターレースおよびクロマデインターレースを完全には同期できない場合には、カウンタHSCnt[u][v]の更新は、次のラインにおける同じ垂直位置をデインターレースする前に更新が行われる限りは、遅延させてもよい。例えば、カウンタHSCnt[u][v]は、HSCnt[(u+2)−2][v]が用いられる位置(u+2、v)をデインターレースする前に更新してもよい。カウンタHSCntの更新が遅延される場合には、statY/Cb/Crビットは、各遅延される位置のために追跡されるべきである。結果としての柔軟性によって、一般に、輝度処理およびクロマ処理は、遅延がライン未満である限りは、大ざっぱに同期させることが可能になる(正確な遅延は未知である)。
【0111】
いくつかの実施形態において、前の動き補償された反対パリティフィールド(例えばPREMC)および次の動き補償された反対パリティフィールド(例えばNXTMC)は、それぞれ、前のフィールドPREおよび次のフィールドNXTの代わりに用いてもよい。したがって、xco用の混合式は、前の動き補償された反対パリティフィールドPREMCおよび次の動き補償された反対パリティフィールドNXTMCにおける同じ場所の画素(例えばPREMC[u][v]およびNXTMC[u][v])から導き出してもよい。同様に、静止チェックカウンタもまた動き補償してもよい。
【0112】
他の実施形態において、輝度およびクロマの両方のためにただ単一の静止カウンタHSCntを有する代わりに、別個の静止履歴カウンタを、各カラーチャネル用に実現してもよい(例えば3つのカウンタHSCnt)。かかるものとして、全てのチャネル用に一緒に、または各チャネル用に独立して静止フラグisStationaryを判定することなど、別個のカウンタを用いて、より多くの自由を提供し得る。
【0113】
いくつかの実施形態において、低角度をよりよく検出するために、より大きなウィンドウを角度検出技術によって用いてもよい。一般に、全ての角度用のウィンドウサイズは同じであってもよい(例えば24画素幅)。より大きなウィンドウは、低角度を検出する際に正確さを向上させるが、より大きなウィンドウは、より高角度に対してはミス検出の可能性を低減することが可能である。したがって、異なる角度に対して、可変ウィンドウサイズを実現してもよい。より大きなウィンドウサイズを低角度用に用いてもよく、より小さなウィンドウサイズを高角度用に用いてもよい。計算において用いられる異なるサンプル数ゆえに、異なる角度のDIFFは、最終的角度候補を決定する場合に、異なるように重み付けしてもよい。
【0114】
さらに他の実施形態において、独立した輝度/クロマデインターレースを可能にするように、クロマ角度検出を実行してもよい。クロマ角度検出は、予測方法または検出方法に基づいてもよい。予測方法は、一般に、輝度角度に基づいてクロマ角度を予測するので、計算を軽減する。しかしながら、予測方法は、輝度およびクロマが無相関の場合には、辛うじて実行可能である。
【0115】
検出方法は、一般に、輝度角度検出におけるようにクロマ角度を検出する。検出方法は、予測方法よりも正確な角度を提供可能である。検出方法によって、一般に、独立した輝度/クロマデインターレースが可能になる。クロマダウンサンプリングゆえに、輝度におけるように全ての19角度を検出する代わりに、クロマ角度検出においては、より少数の角度候補を確立してもよい。
【0116】
クロマ角度検出が実行される場合には、輝度におけるのと同じ適合チェック方法を用いてもよい。図18g示すように、方向フィルタリングされた結果(例えばxdfK)(図7を参照)は、式38によって計算してもよい。式38において、
【0117】
【数3】
【0118】
であり、ここで、αKは、クロマ角度であってもよく、lは、上側ラインの列オフセットであってもよく、式17によって定義される。
【0119】
図6〜9および15〜18jの図、式および表によって実行される機能は、本明細書の教示に従ってプログラムされた従来の汎用デジタルコンピュータを用いて実行してもよく、これは、当業者には明らかであろう。適切なソフトウェアコーディングは、本開示の教示に基づき、熟練したプログラマによって容易に準備可能であり、これもまた当業者には明らかであろう。
【0120】
本明細書で説明しているように、本発明はまた、ASIC、FPGAを準備することによってか、または従来のコンポーネント回路の適切なネットワークを相互接続することによって実行してもよく、これらの修正は、当業者には容易に明らかになろう。
【0121】
したがって、本発明にはまた、本発明に従ってプロセスを実行するようにコンピュータをプログラムするために利用できる命令を含む記憶媒体であってもよいコンピュータ製品を含むことができる。記憶媒体には、限定するわけではないが、フロッピー(登録商標)ディスク、光ディスク、CD−ROM、光磁気ディスク、ROM、RAM、EPROM、EEPROM、フラッシュメモリ、磁気もしくは光カードを含む任意のタイプのディスク、または電子命令を記憶するのに適した任意のタイプの媒体を含むことができる。本明細書で用いるように、用語は「同時」は、いくらかの共通の期間を共有するイベントを示すように意味されているが、しかしこの用語は、同じ時点で始まるか、同じ時点で終了するか、または同じ持続期間を有するイベントに限定されるようには意味されていない。
【0122】
本発明の好ましい実施形態に関連して、本発明を特に図示および説明したが、本発明の範囲から逸脱することなく、形態および詳細における様々な変更を行い得ることが、当業者には理解されよう。
【技術分野】
【0001】
本出願は、2003年12月4日に出願された、かつ参照により全体において本明細書に援用されている同時係属中の米国特許出願第10/727,476号明細書に関連する。本発明は、一般に、ビデオデインターレースに関し、特に、低減されたメモリおよび帯域幅の動き適応ビデオデインターレース技術に関する。
【背景技術】
【0002】
インターレース走査フォーマットは、初期のビデオシステム用に帯域幅を低減するために開発され、その後ずっと、広く採用されて用いられてきた。デインターレースは、インターレースされたビデオフィールドをラスタフレームフォーマットに変換するために用いられる方法のセットである。デインターレース方法は、順次走査アプローチをサポートする現代のディスプレイにおいて普通に用いられている。
【発明の概要】
【発明が解決しようとする課題】
【0003】
従来のデインターレース方法は、移動エッジのラインフリッカおよびセレーションなどのアーチファクトを導入する。アーチファクトは、従来のアナログ陰極線管(CRT)ディスプレイでは、現代の高解像度順次走査ディスプレイほど顕著ではない。しかしながら、主流のディスプレイ技術が、CRTから液晶ディスプレイ(LCD)、プラズマおよび他の高解像度高コントラスト技術にシフトしているので、デインターレースによって導入されるアーチファクトは、消費者にとって、より顕著で、より厄介になる。
【0004】
従来のデインターレース方法には、「ウィーブ(weave)」プロセスおよび「ボブ(bob)」プロセスが含まれる。ウィーブデインターレースは、欠損ラインを反対パリティフィールドからコピーすることによって、現在のフィールドからフレームを生成する。残念ながら、ウィーブ方法は、ピクチャ内の動き領域に顕著なアーチファクトを引き起こす。ボブ方法は、現在のフィールドラインの垂直補間を実行し、結果として得られるフレームの欠損ラインを満たす。しかしながら、ボブ方法は、ラインのちらつきを引き起こし、ピクチャを不鮮明にする。
【課題を解決するための手段】
【0005】
本発明は、デインターレースのための方法に関する。この方法は、一般に、(A)複数のモードのうちの第1のモードにおいて、現在のフィールドをデインターレースすることによってフレームを生成するステップと、(B)モードのうちの第2のモードにおいて、現在のフィールドおよび反対パリティフィールドの両方を用いてデインターレースすることによってフレームを生成するステップと、(C)モードのうちの第3のモードにおいて、現在のフィールド、反対パリティフィールドおよび別のフィールドの全てを用いてデインターレースすることによってフレームを生成するステップとを含み、モードのうちの少なくとも2つを用いる。
【0006】
本発明の目的、特徴および利点には、低減されたメモリおよび帯域幅の動き適応ビデオデインターレース技術を提供することが含まれるが、この技術は、(i)画素に関する共同輝度−クロマ動き適応静止チェック方法、(ii)エッジ依存の方向フィルタ、(iii)統一された輝度およびクロマデインターレースアーキテクチャ、(iv)インプリメンテーションに都合がいい静止チェック方法、(v)3つの全てのチャネル(例えば1つの輝度チャネルおよび2つのクロマチャネル)に対して独立したデインターレースを可能にすること、(vi)23までの動作モード、(vii)カスタマイゼーションによって広範囲な潜在的帯域幅およびラインアクセス要求制限をサポートできるようにすること、および/または(viii)5.4度まで下がる角度に対して鮮明さを向上させる、改善された方向フィルタ、の提供が可能である。
【0007】
本発明の、これらおよび他の目的、特徴および利点は、次の詳細な説明ならびに添付の特許請求の範囲および図面から明らかになろう。
【図面の簡単な説明】
【0008】
【図1】4:2:2フォーマットピクチャに対する従来の輝度指数付けおよびクロマ指数付けの図である。
【図2】4:2:0フォーマットピクチャに対する従来の輝度指数付けおよびクロマ指数付けの図である。
【図3】利用可能なフィールドおよびカウンタのブロック図である。
【図4】デインターレースにおいて用いられる例示的な輝度画素の図である。
【図5】デインターレースにおいて用いられる例示的なクロマ画素の図である。
【図6a】本発明の好ましい実施形態に従ってデインターレース技術を実行する例示的なシステムのブロック図である。
【図6b】デインターレース回路の例示的なインプリメンテーションの詳細なブロック図である。
【図7】例示的な輝度およびクロマデインターレース方法の流れ図である。
【図8】2つの変数の関数としての混合要素のグラフである。
【図9】例示的な輝度角度検出方法の流れ図である。
【図10】例示的で検知可能な角度を示す図である。
【図11】第1の角度における多数のラインセグメントを示す図である。
【図12】第2の角度における多数のラインセグメントを示す図である。
【図13】第3の角度における多数のラインセグメントを示す図である。
【図14】2つの位置におけるDIFF[i]の例示的な関係の図である。
【図15】例示的で画素に関する輝度静止チェック方法の流れ図である。
【図16】例示的で画素に関するクロマ静止チェック方法の流れ図である。
【図17a−17c】表である。
【図18a−18j】式である。
【発明を実施するための形態】
【0009】
本発明は、第3世代動き適応デインターレース(TriMADI)アーキテクチャと呼んでもよい。TriMADIアーキテクチャは、一般に、画素に関する共同ルミナンス−クロミナンス静止チェック、従来のアプローチと比較して改善されたルミナンス(輝度)低角度予測、および従来のアプローチと比較して改善されたクロミナンス(クロマ)デインターレースを提供する。TriMADIアーキテクチャは、一般に、デインターレース用の信頼できる静止画素検出および画素の正確なウィーブを達成する。このアーキテクチャには、一般に、(輝度サンプルごとに)各出力フレーム画素のために、次の反対パリティフィールドの先取りおよびマルチビット(例えば2ビット)静止チェックカウンタが含まれる。
【0010】
TriMADI技術によって実行される計算は、現在のフィールドのパリティ(例えば、奇数パリティフィールドまたは偶数パリティフィールド)にかかわらず、同じであってもよい。説明を簡単にするために、(i)現在のフィールド(例えばCUR)は、トップフィールドと見なしてもよく、(ii)前のフィールド(例えばPRE)および次のフィールド(例えばNXT)の両方は、ボトムフィールドと見なしてもよい。フィールドCURには、一般に、0、2、4、...、2N−2(例えば偶数パリティ)の番号を付けられた多数のラインが含まれる。フィールドPREおよびフィールドNXTのそれぞれには、一般に、1、3、5、...、2N−1(例えば奇数パリティ)の番号を付けられた多数のラインが含まれるが、この場合に、Nは、各フィールドにおいて利用可能なライン数であってもよい。デインターレースは、一般に、フィールドCURにおける「欠損」ライン(例えば、ライン番号1、3、5、...、2N−1)を構成するが、これらのラインは、フィールドCURにおける利用可能なラインと結合された場合に、2Nラインの完全なフレームを形成する。
【0011】
TriMADIアーキテクチャには、一般に、輝度サンプルおよびクロマサンプル用の静止チェックならびに双方向(例えば3次元)混合およびウィーブを備えた角度ベースのデインターレース技術が含まれる。下記の入力/出力セクションは、一般に、(i)この技術によって用いられるフィールドと、(ii)静止チェックビットを含む画素入力/出力(I/O)と、(iii)この技術によって用いられる画素とをカバーする。この技術の流れ図は、下記のTriMADIアーキテクチャセクションで論じられる。流れ図におけるほとんどのブロックの詳細な説明は、一般に、(輝度用の)輝度デインターレース成分セクションおよび(クロマ用の)クロマデインターレース成分セクションにおいて説明される。輝度角度検出セクションおよび画素に関する静止チェックセクションは、一般に、角度検出技術および静止チェック技術を指定する。
【0012】
図1および2を参照すると、4:2:2フォーマットピクチャ(図1)および4:2:0フォーマットピクチャ(図2)用の従来の輝度指数付けおよびクロマ指数付けの図が示されている。本明細書では慣例として、(i)(u、v)を用いて、輝度(Yチャネル)サンプルの現在の出力位置を示してもよく、(ii)一般に、(cu、cv)を用いてクロマサンプルの現在の出力位置を示し、(iii)上付き文字Yを用いて輝度チャネルを示してもよく、(iv)上付き文字Cを用いて両方のクロマチャネルを同時に示してもよく、(v)一般に、上付き文字Kを用いて、クロマチャネルの1つ、すなわちCb(青)チャネルまたはCr(赤)チャネルを示してもよい。
【0013】
TriMADIアーキテクチャは、一般に、(u、v)と(cu、cv)との間の標準関係を用いる。4:2:2フォーマットに関しては、図1に示すように、cu=uおよびcv=v>>1である。4:2:0フォーマットに関しては、図2に示すように、cu=u>>lおよびcv=v>>1である。クロマ画素の水平位置は、一般に、偶数輝度水平位置に位置する。標準関係は、従来的には、MPEG−2標準、MPEG−4標準およびH.264標準によって用いられる。輝度指数付けとクロマ指数付けとの間の上記の関係は、他の標準(例えばMPEG−1)ではわずかに異なる可能性があるが、TriMADI技術は、それでも、性能における小さな変化で実行可能である。
【0014】
入力/出力セクション
図3を参照すると、利用可能なフィールドおよびカウンタのブロック図が示されている。メモリから読み出された現在のフィールドCURがトップフィールドである場合には、前のフィールドPREおよび次のフィールドNXTの両方は、図3の上半分に示すように、ボトムフィールドであってもよい。現在のフィールドCURがボトムフィールドである場合には、図3の下半分に示すように、前のフィールドPREおよび次のフィールドNXTの両方は、トップのフィールドであってもよい。一般に、フィールドCURは、フィールドPREおよびフィールドNXTの両方と反対のパリティを有する。フィールドPREは、一般に、フィールドNXTと同じパリティを有する。ビデオシーケンスの最初のフィールドおよび最後のフィールドに対しては、単一の反対パリティフィールドだけが利用可能である。かかる場合には、単一の利用可能な反対フィールドは、次のフィールドNXTおよび前のフィールドPREの両方として働いてもよい。
【0015】
静止カウンタ(例えばHSCnt[0〜3])は、同じパリティの輝度サンプルおよび反対パリティの輝度サンプルのそれぞれに対して提供してもよい。いくつかの実施形態において、カウンタHSCntは、各フレームの輝度サンプル用に倍数(例えば2ビット)を用いてもよい。現在のフィールドCURのサンプルをカウントするために用いられるビットは、TriMADIアーキテクチャの下でメモリに対して読み出し可能および書き込み可能の両方であってもよい。前のフィールドPREのサンプルおよび次のフィールドNXTのサンプルをカウントするために用いられるビットは、TriMADIアーキテクチャの下でメモリから読み出し可能であってもよい。
【0016】
図17aを参照すると、TriMADIアーキテクチャ用の入力基準のための表1が示されている。TriMADIアーキテクチャは、一般に、多数(例えば23)の動作モードをサポートする。実際の入力フィールド基準は、各モードにおいて異なってもよい。図3および以下のセクションは、一般に、最悪の場合のシナリオにおける基準を示す(例えば、モード22およびモード23)。各モード用の詳細な入力基準は、表1において見い出すことができる。
【0017】
各現在のフィールドCURに対して、(i)単一の出力フレームを生成してもよく(例えば、デインターレースが実行される)、(ii)2ビット静止カウンタHSCnt[0〜3]は、各同じパリティのフィールドの画素用に更新してもよい。カウンタHSCntは、一般に、静止チェックがイネーブルにされるTriMADIモードにおいて更新される。静止チェックは、制御信号(例えばStatCheck)が所定値(例えば1)に設定された場合に、イネーブルにしてもよい。
【0018】
図4を参照すると、デインターレースにおいて用いられる例示的な輝度画素の図が示されている。現在のフィールドCURから用いられる画素は、垂直ストライプで強調してもよい。前のフィールドPREから用いられる画素は、対角線ストライプ(左下から右上へ、および左上から右下への両方)で強調してもよい。次のフィールドNXTから用いられる画素は、左上から右下への対角線ストライプ(前のフィールドPREの画素のいくつかと重なる)で強調してもよい。現在の位置(u、v)における欠損画素は、ダイヤモンドパターンで強調してもよい。
【0019】
現在のフィールドCURの現在の位置(u、v)における欠損輝度画素を構成するために、以下の輝度画素が、一般に、利用可能であると仮定される。現在のフィールドCURにおいて、i∈{u−3、u−1、u+1、u+3}およびj∈{v−43、v−42、...、v+42、v+43}の位置(i、j)における画素は、利用可能にすべきである。前のフィールドPREにおいて、i∈{u−2、u、u+2}およびj∈{v−5、v−4、...、v+4、v+5}の位置(i、j)における画素は、利用可能にすべきである。次のフィールドNXTにおける画素について、i=uおよびj∈{v−5、v−4、...、v+4、v+5}の位置(i、j)の画素は、利用可能にすべきである。一般に、3つのラインが、前のフィールドPREにおいて用いられる。次のフィールドNXTにおいては、単一のラインを用いてもよい。いくつかの実施形態において、フィールドNXTは、前のPREより早い時間に生じる同じパリティのフィールドによって置き換えてもよい。
【0020】
図5を参照すると、デインターレースにおいて用いられる例示的なクロマ画素の図が示されている。現在のフィールドCURにおいて用いられるクロマ画素は、一般に、垂直ストライプで強調される。前のフィールドPREおよび次のフィールドNXTの両方からの画素は、対角線ストライプで強調してもよい。
【0021】
現在のフィールドCURの現在の位置(cu、cv)における欠損クロマ画素を構成するために、以下のクロマ画素が、一般に、利用可能であると仮定される。現在のフィールドCURにおいて、i∈{cu−1、cu+1}およびj∈{cv−3、cv−2、...、cv+2、cv+3}の位置(i、j)における画素は、利用可能にすべきである。前のフィールドPREにおける画素および次のフィールドNXTにおける画素について、i=cuおよびj∈{cv−3、cv−2、...、cv+2、cv+3}の位置(i、j)の画素は、利用可能にすべきである。
【0022】
境界外(OOB)条件の扱い
フィールド境界の左または右の利用不可能な画素は、常に、輝度に対して0(ゼロ)およびクロマに対して128と仮定してもよい。フィールド境界の上または下(例えば、アクティブビデオ領域の外側)の利用不可能なラインに対して、境界外画素を扱うために、2つの方法が利用可能である。上部境界の上の利用不可能なライン用の第1の方法において、ビデオの最上部ラインを、利用不可能なラインの代わりに用いてもよい。例えば、位置(−1、v)、(−2、v)、(−3、v)等における画素は、位置(0、v)における画素によって置き換えてもよい。同様に、下部境界より下の利用不可能なラインに対して、ビデオの最下部ラインを、欠損ラインの代わりに用いてもよい。第2の方法において、フィールド境界の外側の全ての画素は、デフォルト値(例えば、輝度用には0およびクロマ用には128)に設定してもよい。
【0023】
TriMADI技術は、一般に、垂直に隣接するカウンタHSCntを用いる。したがって、カウンタHSCntは、左境界の外側または右境界の外側の画素に対しては実現しなくてもよい。上部フレーム境界の上のラインにおける利用不可能なカウンタHSCntに対して、カウンタHSCntは、トップラインのカウンタHSCntで代用してもよい。同様に、下部フレーム境界の下のライン用の利用不可能なカウンタHSCntは、ボトムラインのカウンタHSCntで代用してもよい。境界外の画素を扱うのとは異なり、カウンタHSCntは、デフォルト値(0または3などの)で代用しなくてもよい。デフォルト値は、式28に誤ったフラグ(例えばisStatHist)を生成させる可能性があり、したがって、不正確なフラグ(例えば、isStationaryY、isStationaryCbおよびisStationaryCr)が、デインターレース技術によって用いられる可能性がある。
【0024】
TriMADIアーキテクチャ
TriMADIは、多数(例えば23)の動作モードを提供し、カスタマイゼーションによって広範囲の潜在帯域幅およびラインアクセス設計制限をサポートできるようにする。表1は、一般に、TriMADIアーキテクチャによってサポートされる全てのモードを列挙する。表1は、各モードの帯域幅消費に基づいてモードをグループ化してもよい。最初の2つのモードを除いて、TriMADI帯域幅は、1/2輝度フィールド増分を有してもよい。表は、書き込み用ではなく、読み出し用の帯域幅およびラインを示す。静止チェックフラグ(例えばStatCheck)がディスエーブルにされた(例えば、偽)全てのモードに対して、書き込み帯域幅はゼロである(例えば、メモリ書き込みは実行しなくてもよい)。静止チェックフラグStatCheckがイネーブルにされた(例えば、真)全てのモードに対して、書き込み帯域幅は、一般に、更新された2ビットカウンタHSCntをメモリ(例えばRAM)に逆に書き込むための1/4輝度フィールドである。静止チェックフラグStatCheckがイネーブルにされた場合に、表1に示すアクセスライン列は、4:2:0フォーマット用に用いられる1ビットのライン記憶装置を含まなくてもよい。
【0025】
各帯域幅に対して、最良のモードは、一般に、注記列にチェックで印を付けられている。帯域幅増加が増加するにつれて、出力品質は、一般に、向上する。したがって、全てのモードが利用可能な状態では、表は、利用可能な帯域幅およびライン記憶装置に基づいて最良のモードを選択するためのガイドラインとして用いてもよい。
【0026】
さらに、5つのモードには、推奨モード(例えば、黒丸に星で印を付けられた)が含まれる。帯域幅が増加するにつれて、推奨モードは、連続的で目に見える品質改善をもたらすことが可能である。全体で最良のモードは、TriMADIモード(例えば、表1におけるモード23)と呼んでもよい。
【0027】
図17aに示すように、各モードは、多数(例えば7)の1ビット制御信号、すなわち(i)ThreeLumaField(例えばT)、(ii)angleDetection(例えばA)、(iii)TwoChromaField(例えばC2)、(iv)ThreeChromaField(例えばC3)、(v)StatCheck(例えばS)、(vi)weave(例えばW)および(vii)bob(例えばB)によって一意に指定可能である。モードの説明列において、BBは、1フィールドを用いたボブを示してもよく、WVは、一般に、2フィールドを用いたウィーブを示し、B2は、2フィールドを用いた混合であり、B3は、3フィールドを用いた混合であり、DIは、方向補間を示してもよく、MWは、3フィールドを用いたメジアンウィーブである。合計列は、単一の4:2:0輝度フィールド/ラインに関連してもよい。制御信号の全ての組み合わせが、有効であり得るわけではない。TriMADIアーキテクチャによってサポートされる全ての有効モードが、一般に、表1に列挙されている。2つの追加の制御信号(例えばHSCntResetおよびHSCntDefault)を用いて、静止カウンタHSCntおよび再設定値の再設定をイネーブル/ディスエーブルにしてもよい。
【0028】
以下の信号および/またはフラグは、TriMADIアーキテクチャによって定義してもよい。制御信号(またはフラグ)ThreeLumaFieldは、一般に、以前の技術およびオーバーライドモード(例えば従来のウィーブおよびボブ)との後方互換性を可能にするために用いられる。TriMADI技術は、一般に、輝度フィールドと同数またはより少数のクロマフィールドを用いる。TriMADI技術は、一般に、輝度フィールドを超えないクロマフィールドを用いる。
【0029】
制御信号(またはフラグ)Bobを用いて、外部シーン変化検出をサポートしてもよい。信号Bobが真である場合には、ボブデインターレースを用いて、現在のフィールドに基づいた出力フレームを生成してもよい。ボブは、一般に、フィールドを空間的に補間してフレームを生成する。伝統的に、ボブデインターレースは、上および下の画素に対して空間フィルタリングを実行して、欠損画素を生成する。空間フィルタリングは、垂直フィルタリングと呼んでもよい。(AngleDetection=偽である場合に)従来のボブ方法をサポートすることに加えて、TriMADI技術は、一般に、(AngleDetection=真の場合に)、検出された角度に基づいて方向補間を実行することによって、エッジのぎざぎざを低減可能な代替ボブ方法をサポートする。代替ボブモード(ボブ+と呼ぶ)は、ライン記憶装置におけるわずかな増加を伴い、従来のボブ方法と同じ帯域幅を用いてもよい。ボブ方法は、一般に、信号threeLumaFieldが偽である場合に用いられる。ボブ+は、垂直および対角線上において空間的に補間可能である。
【0030】
制御信号(またはフラグ)Weaveを用いて、逆テレシネにおいてなどの外部ピクチャ静止検出をサポートしてもよい。ウィーブ方法は、一般に、(i)2フィールドが利用可能な場合には、従来の2フィールドウィーブ(例えばフィールド挿入)、および(ii)3フィールドが利用可能な場合には、(静止チェックによって用いられるような)3フィールドメジアンウィーブを実行する。図17aに示すように、TriMADIは、一般に、利用可能なフィールド数に依存して、合計5つのウィーブ方法をサポートする。すなわち、(i)輝度に対する2フィールドウィーブおよびクロマに対するボブ、(ii)輝度およびクロマの両方に対する2フィールドウィーブ(従来のウィーブ)、(iii)輝度に対する3フィールドメジアンウィーブおよびクロマに対するボブ、(iv)輝度に対する3フィールドメジアンウィーブおよびクロマに対する2フィールドウィーブ、および(v)輝度およびクロマの両方に対する3フィールドメジアンウィーブである。ウィーブは、一般に、トップフィールドおよびボトムフィールドから画素を補間して、フレームを形成する。メジアンウィーブは、3つのフィールドを用いてもよいが、典型的には、ウィーブは、トップフィールドおよびボトムフィールドだけを用いてもよい。ウィーブ-は、一般に、輝度をウィーブするが、クロマをボブして、(追加的なクロマフィールドを読み出す)帯域幅を節約する。MADIは、一般に、画素ベースで適応的に、ウィーブとボブとの間で混合する。ReMADIは、画素ベースで、ボブ+とウィーブとの間の混合であってもよい。TriMADIはまた、隣接する同じパリティのフィールド間での静止チェックを用いて、画素ベースでボブ+とウィーブとの間の適応選択を改善してもよい。
【0031】
制御信号(またはフラグ)AngleDetectionが真である場合には、角度検出動作は、イネーブルにしてもよい。検出された角度に基づいて、一般に、方向補間を用いて、欠損サンプルを生成する。方向補間は、一般に、角度内容のジャギーを低減する。制御信号AngleDetectionが偽である場合には、角度検出動作はディスエーブルにしてもよく、デフォルト角度(例えば90°)が、TriMADI技術の残りによって用いられる。
【0032】
制御信号(またはフラグ)のセット(例えばTwoChromaFieldおよびThreeChromaField)を用いて、TriMADI方法によって用いられる多くのクロマフィールドを制御してもよい。信号TwoChromaFieldおよび信号ThreeChromaFieldの両方が偽である場合には、現在のフィールドCURの単一のクロマフィールドが一般に用いられ、ボブ方法(垂直フィルタリングまたは方向補間)を用いて欠損クロマサンプルを生成してもよい。信号TwoChromaFieldだけが真である場合には、前のフィールドPREおよび現在のフィールドCURのクロマフィールドは、TriMADI方法によって用いてもよい。信号ThreeChromaFieldだけが真である場合には、前のフィールドPRE、現在のフィールドCURおよび次のフィールドNXTのクロマフィールドは、TriMADI方法によって用いてもよい。一般に、信号TwoChromaFieldおよび信号ThreeChromaFieldは、同時に真にすべきではない。信号ThreeChromaFieldは、信号ThreeLumaFieldが真である場合には、用いてもよい。信号ThreeLumaFieldが偽である場合には、信号ThreeChromaFieldもまた偽であってもよい。
【0033】
信号(またはフラグ)StatCheckを用いて、静止チェック方法をイネーブル/ディスエーブルにしてもよい。信号StatCheckが真である場合には、静止チェック方法をイネーブルにして、経時的にほとんど変化しないエリアにわたる性能を改善してもよい。静止チェック方法は、一般に、信号isStationaryY、isStationaryCbおよびisStationaryCrを制御するが、これらの信号は、デインターレース技術によって用いてもよい。信号StatCheckは、一般に、信号ThreeLumaFieldが真である場合に用いられる。なぜなら、静止チェックは、前のフィールドPREおよび次のフィールドNXTの両方にアクセスするからである。したがって、信号ThreeLumaFieldが偽である場合には、信号StatCheckもまた偽であってもよい。
【0034】
制御信号(またはフラグ)HSCntResetを用いて、静止チェックカウンタHSCntの再設定をイネーブル/ディスエーブルにしてもよい。制御信号(またはフラグ)HSCntDefaultは、一般に、再設定値用に2ビットのデフォルト値(例えば0〜3)を提供する。信号HSCntResetが偽である場合には、信号HSCntにおける値は、メモリからロードしてラインバッファに記憶してもよい。そうでなければ、一般に、信号HSCntDefaultにおける値は、HSCntラインバッファを初期化するために用いられる。信号HSCntResetが真である場合には、メモリは、カウンタHSCntの値を検索するために読み出さなくてもよい。なぜなら、値は、信号HSCntDefaultにおけるデフォルト値によって無効にしてもよいからである。
【0035】
起動時または信号StatCheckが0から1にトグルされたときに、本方法は、最初に、第1に処理されるフィールド(例えばトップ)のパリティと一致するカウンタ用に、オーバーライドフィールド(例えばトップ)を0にして、次に、第2に処理されるフィールドのパリティと一致するカウンタ用に、他の(例えばボトム)オーバーライドフィールドをゼロにする。かかるものとして、TriMADI方法を実行する制御ソフトウェアおよび/またはハードウェアは、HSCntReset=真、およびHSCntDefault=0を設定すべきである。カウンタHSCntを0に再設定する代わりに、制御ソフトウェア/ハードウェアは、信号StatCheckが0から1にトグルされ、かつWeaveが1から0にトグルされた場合には、カウンタHSCntを3(例えば、HSCntReset=真、およびHSCntDefaut=3)に再設定してもよい。上記は、フォースウィーブが前のフィールドにおいて用いられ、かつ静止チェックがちょうどイネーブルにされた場合には、実行してもよい。なぜなら、外部的に制御されるウィーブは、通常、最近のフィールドが静止的だったということの印であるからである。したがって、カウンタHSCntを3のデフォルト値に再設定することは、0に再設定すること(例えば、静止カウンタHSCntを最初から再構成すること)よりよく静止状態を反映し得る。さらに、外部制御信号は、フィールド境界または起動時にのみ変更されるべきである。制御信号は、フィールドをデインターレースしている間に変更すべきではない。
【0036】
図6aを参照すると、本発明の好ましい実施形態に従ってTriMADI技術を実行する例示的なシステム94のブロック図が示されている。システム94には、一般に、回路(またはモジュール)96、回路(またはモジュール)98および回路(またはモジュール)100が含まれる。信号セット(例えばCONTROL)は、回路96から回路100に転送してもよい。信号(例えばDATA)は、回路98と回路100との間でやりとりしてもよい。信号(例えばFRAME)は、回路100によって生成および供給してもよい。信号(例えばFIELD)は、回路98によって受信してもよい。
【0037】
回路96は、コントローラ回路として実現してもよい。回路96は、信号CONTROLと集合的に呼ばれる多数の信号を生成するように動作可能である。信号CONTROLには、一般に、信号ThreeChromaField、TwoChromaField、ThreeLumaField、AngleDetection、BOB、WEAVE、StatCheck、HSCntResetおよびHSCntDefaultが含まれる。一般に、信号CONTROLの成分によって、回路100は、1つまたは複数のルミナンスフィールドおよび1つまたは複数のクロミナンスフィールドのために、前のフィールドおよび次のフィールドを別々に用いて動作することが可能になる。
【0038】
回路98は、ランダムアクセスメモリ(RAM)回路として実現してもよい。回路98は、デインターレース動作において回路100が用いるために、信号FIELDで受信される1つまたは複数のフィールドを一度にバッファするように動作可能であってもよい。回路98はまた、様々なカウンタHSCntを記憶するように構成してもよい。
【0039】
回路100は、デインターレース回路として実現してもよい。回路100は、少なくとも2つのモードを用い、信号DATAにおいて受信されたフィールドをデインターレースすることによって、信号FRAMEにおけるフレームを生成するように動作可能であってもよい。モードグループは、一般に、表1(図17a)に示し、下記で詳細に論じる。
【0040】
図6bを参照すると、回路100の例示的なインプリメンテーションの詳細なブロック図が示されている。制御信号は、一般に、細線で示され、データ信号は、一般に、太線で示されている。回路100には、一般に、Yチャネル角度検出ブロック(またはモジュール)102、制御信号デコーダブロック(またはモジュール)104、Yチャネル静止チェックブロック(またはモジュール)106、Cbチャネル静止チェックブロック(またはモジュール)108、Crチャネル静止チェックブロック(またはモジュール)110、HSCntバッファブロック(またはモジュール)112、Yチャネルデインターレースブロック(またはモジュール)114、Cbチャネルデインターレースブロック(またはモジュール)116、Crチャネルデインターレースブロック(またはモジュール)118、および更新静止カウンタブロック(またはモジュール)120が含まれる。
【0041】
回路100は、一般に、いくつかの内部制御信号によって制御されるが、これらの信号は、信号(例えばenableAngleDetectionY)、信号(例えばenableStatCheckY)、信号(例えばenableStatCheckC)、信号(例えばweaveTwoFieldY)、信号(例えばweaveTwoFieldC)、信号(例えばweaveThreeFieldY)、信号(例えばweaveThreeFieldC)、信号(例えばoneFieldY)、信号(例えばoneFieldC)、信号(例えばthreeFieldY)および信号(例えばthreeFieldC)である。図18aに示すように、内部制御信号は、式セット1に従い、外部制御信号を用いて、制御信号デコーダブロック104によってデコードしてもよい。さらに、以下の制御信号は、角度検出ブロック102ならびに静止チェックブロック106、108および110によって内部で生成してもよいが、これらの信号は、信号(例えばisAngle)、信号(例えばangleFit)、信号(例えばα)、信号(例えばstatY)、信号(例えばstatCb)、信号(例えばstatCr)、信号(例えばisStationaryY)、信号(例えばisStationaryCb)および信号(例えばisStationaryCr)である。
【0042】
Yチャネルに対して、角度検出ブロック102によって角度検出を実行し、上側の2つの輝度ラインと下側の2つの輝度ラインとの間に強い角度相関が存在するかどうかを判定してもよい。次に、角度情報は、輝度静止チェックブロック106およびデインターレースブロック114によって用いてもよい。角度検出は、一般に、輝度チャネル用に実行されるが、オプションとして、クロマチャネル用には実行しなくてもよい。
【0043】
次に、回路100は、一般に、静止チェックブロック106、108および110において静止チェック方法を用いて、静止(例えばスチール)画素を非静止画素から区別してもよい。静止チェックの結果(例えば信号isStationaryY、isStationaryCbおよびisStationaryCr)は、デインターレースブロック114、116および118にそれぞれ伝達してもよい。静止チェックは、3つの全てのチャネルに対して独立して実行してもよいが、現在の画素位置に対する静止カウンタHSCntは、一般に、3つのチャネルに対して一緒に更新される。カウンタHSCntの単一の値は、3つの全てのチャネル用に静止チェックブロック106、108および110によって用いてもよい。
【0044】
図7を参照すると、例示的な輝度およびクロマデインターレース方法140の流れ図が示されている。デインターレース方法(またはプロセス)140には、一般に、ステップ(またはブロック)142、ステップ(またはブロック)144、ステップ(またはブロック)146、ステップ(またはブロック)148、ステップ(またはブロック)150、ステップ(またはブロック)152、ステップ(またはブロック)154、ステップ(またはブロック)156、ステップ(またはブロック)158、ステップ(またはブロック)160、ステップ(またはブロック)162およびステップ(またはブロック)164が含まれる。TriMADIアーキテクチャは、一般に、輝度およびクロマデインターレースの両方に対して同じデインターレース方法140を用いる。クロマデインターレースと輝度デインターレースとの間の差は、制御信号および結果(例えばx’s)がどのように計算されるかであり得る。
【0045】
クロマデインターレースに対して、全ての制御信号は、信号の対応クロマバージョンによって置き換えてもよい(例えば、上付き文字Yを上付き文字CまたはKと置き換える)。例えば信号weaveTwoFieldYは、信号weaveTwoFieldCと置き換えてもよく、信号weaveThreeFieldYは、信号weaveThreeFieldCと置き換えてもよく、信号oneFieldYは、信号oneFieldCと置き換えてもよく、信号threeFieldYは、信号threeFieldCと置き換えてもよい等である。さらに、全てのx’sは、対応するxKバージョンと置き換えてもよい。
【0046】
ステップ142において、デインターレース方法140は、信号weaveTwoFieldの値をチェックしてもよい。値が真である場合には(例えばステップ142の真ブランチ)、方法140は、ステップ144においてweaveTwoField方法を利用して計算された変数(例えばxw2)を用いて、出力サンプル変数(例えばXout)を生成してもよい。値が偽である場合には(例えばステップ142の偽ブランチ)、方法140は、ステップ146に進んでもよい。
【0047】
ステップ146において、デインターレース方法140は、信号isStationaryおよび信号weaveThreeFieldYにおける値のブール論理和(例えばシンボル「||」)をチェックしてもよい。論理和が真である場合には(例えばステップ146の真ブランチ)、方法140は、ステップ148においてweaveThreeField方法を用いて計算された変数(例えばxw3)を用いて、出力サンプル変数Xoutを生成してもよい。論理和が偽である場合には(例えばステップ146の偽ブランチ)、方法140は、ステップ150に進んでもよい。
【0048】
ステップ150において、デインターレース方法140は、信号isAngleYにおける値をチェックしてもよい。値が真である場合には(例えばステップ150の真ブランチ)、方法140は、ステップ152に進んでもよい。値が偽である場合には(例えばステップ150の偽ブランチ)、方法140は、ステップ156に進んでもよい。
【0049】
ステップ152において、デインターレース方法140は、信号angleFitの値をチェックしてもよい。値が真である場合には(例えばステップ152の真ブランチ)、方法140は、ステップ154において角度信号αにおける変数(例えばxdf)を用いて、出力サンプル変数Xoutを生成してもよい。値が偽である場合には(例えばステップ152の偽ブランチ)、方法140は、ステップ156に進んでもよい。
【0050】
ステップ156において、デインターレース方法140は、信号oneFieldの値をチェックしてもよい。値が真である場合には(例えばステップ156の真ブランチ)、方法140は、ステップ158において垂直空間フィルタリング方法(例えばボブ方法)を用いて計算された変数(例えばxvf)を用いて、出力サンプル変数Xoutを生成してもよい。値が偽である場合には(例えばステップ156の偽ブランチ)、方法140は、ステップ160に進んでもよい。
【0051】
ステップ160において、デインターレース方法140は、信号threeFieldの値をチェックしてもよい。値が真である場合には(例えばステップ160の真ブランチ)、方法140は、ステップ162において2フィールド混合方法(例えばB2方法)を用いて計算された変数(例えばxB2)を用いて、出力サンプル変数Xoutを生成してもよい。値が偽である場合には(例えばステップ160の偽ブランチ)、方法140は、ステップ162において3フィールド混合方法(例えばB3方法)を用いて計算された変数(例えばxB3)を用いて、出力サンプル変数Xoutを生成してもよい。
【0052】
いくつかの実施形態において、角度検出は、クロマチャネルに対して実行しなくてもよい。したがって、(i)クロマデインターレースにおいて、角度情報は、利用不可能でもよく、(ii)信号isAngleCは、常に偽であり、(iii)信号angleFitKおよび信号xDFKの両方における値は、無視してもよい。いくつかの実施形態において、信号isAngleに対応する全ブランチは、クロマ用のインプリメンテーションでは省略してもよい。
【0053】
輝度デインターレース成分
信号weaveTwoFieldYにおける値が真である場合には、ウィーブ方法を用いて輝度出力を生成してもよい。変数xw2は、一般に、前のフィールドPREVにおける同じ場所の画素である。したがって、輝度デインターレースに対して、xw2の値は、図18aに示すように、式2によって定義してもよい。式2において、PRE[u][v]は、前の反対パリティフィールドにおける配列された輝度サンプルであってもよい。前の(反対パリティ)フィールドのPREフィールドは、ウィーブ用に用いてもよい。しかしながら、3:2プルダウンスキームを有する入力ビデオに対して、ウィーブは、次のフィールドNXTを用いて実行してもよい。かかる場合において、前のフィールドPREは、TriMADI方法による処理の前に、次のフィールドNXTと交換してもよい。
【0054】
3フィールドメジアンウィーブは、一般に、現在の画素が静止的であると判定された場合(例えば、信号isStationaryが真である)かまたは信号weaveThreeFieldYが真である場合(図7を参照)に用いられる。図18aに示すように、メジアンウィーブ出力変数xw3は、式セット3によって計算してもよい。式セット3において、変数xvfは、式4において定義してもよく、変数xcoは、変数xcp、xcnおよびxvfのメジアンとして定義してもよい。
【0055】
補間される画素がエッジ画素ではないと宣言された場合には(例えば信号isAngle=偽)、図18bに示すように、4タップ垂直フィルタを適用し、補間される変数xvfを式4によって生成してもよい。変数xvfは、範囲[0、255]にクリップすべきである。
【0056】
補間される画素がエッジ画素であると宣言された場合には(例えば信号isAngle=真)、図18bに示すように、方向フィルタを適用し、補間される変数xdfを式5によって生成してもよい。角度変数αは、検出された角度であってもよく、変数bおよび変数l(小文字のL)は、角度αから得てもよい。上記の方向フィルタにおいて用いられる4つの画素は、一般に、位置(u、v)に「方向的に」集中される。例えば、α=2の場合に対して、図12を参照されたい。
【0057】
補間される画素Xoutは、ローカル垂直動作に劇的な変化をもたらすべきではない。したがって、以下の「保護」条件を課してもよい。
(1)local_set={CUR[u−1][v−1]、CUR[u+1][v−1]、CUR[u−1][v+1]、CUR[u+1][v+1]、xout[u][v−1]}
(2)min_set={local_set、max(CUR[u−1][v]、CUR[u+1][v])}
(3)max_set=local_set、min(CUR[u−1][v−1]、CUR[u+1][v])}
(4)min0=min_setの最小値
(5)min1=min_setの2番目の最小値
(6)max0=max_setの最大値
(7)max1=max_setの2番目の最大値
(8)max_side_gradient=max(|CUR[u−1][v−1]−CUR[u+1][v−1]|、|CUR[u−1][v+1]−CUR[u+1][v+1]|)
(9)min_side_gradient=min(|CUR[u−1][v−1]−CUR[u+1][v−1]|、|CUR[u−1][v+1]−CUR[u+1][v+1]|)
(10)gradient=max(min(max0−min1、max1−min0、max_side_gradient)、min_side_gradient)
【0058】
図18bに示すように、角度適合値(例えばangleFITY)は、式6によって計算してもよい。式6において、パラメータc3は、一般に、0〜15の整数値および9のデフォルト値を備えたプログラム可能なパラメータである。上記の条件が満たされた場合には、xdf(式5において定義されるような)は、生成された最終出力として用いてもよい。そうでなければ、画素は、非エッジ画素として処理してもよい(図7を参照)。式6における「勾配」演算は、一般に異常値を拒絶するローカル画素変動のものさしである。勾配演算は、一般に、多くの「壊れた」対角線、特により低いコントラストのラインを修正する一方で、著しく目立つ新しい誤った角度補間を導入しない。「側部勾配」が一般に過度に大きな勾配を防ぐので、ピクチャの外側のlocal_set画素用にゼロのデフォルト値を用いることは、許容できる。
【0059】
図18bに示すように、変数xcoと変数xvfとの混合、および最終的な混合変数(例えばxblend)の生成は、式7によって計算してもよい。式7において、(i)xcp=PRE[u][v]は、配列された画素の、前のフィールド画素であってもよく、
(ii)
【0060】
【数1】
【0061】
は、threeFieldYが真である場合には、同じ場所の次のフィールド画素であってもよく、threeFieldYが偽である場合には、xcpと同じであり、(iii)xco=メジアン(xcp、xcn、xvf)は、一般に、混合を伴う、画素に関するウィーブ用に用いられる。変数xB2は、一般に、前のフィールドにおける同じ場所の画素で垂直にフィルタリングされた値から導き出される(例えばボブ)。変数xB3は、前および次のフィールドにおける同じ場所の画素で垂直にフィルタリングされた値から導き出してもよい(例えばボブ)。
【0062】
図18bに示すように、混合要素(例えばμ)は、式セット8によって計算してもよい。式セット8において、パラメータΔτは、集合{2、4、8、16}におけるプログラム可能なパラメータであってもよい。Δτのデフォルト値は、信号ThreeLumaFieldが真である場合には16であってもよく、信号ThreeLumaFieldが偽である場合には8であってもよい。τの値は、図18cに示すように、式セット9によって計算してもよい。式セット9において、パラメータτscaleおよびnscaleは、一般に、集合{1、...、16}におけるプログラム可能なパラメータである。nscale用のデフォルト値は、8であってもよい。τscale用のデフォルト値は、信号ThreeLumaFieldが真である場合には8であってもよく、信号ThreeLumaFieldが偽である場合には4であってもよい。3フィールド混合に対して、デフォルト値は、τ3およびxn用のスケーリングを生じなくてもよい。2フィールド混合に対して、xnは、次のフィールドNXTが前のフィールドPREとして扱われるので、常に0であってもよい。かかるものとして、nscaleは、一般に、2フィールド混合に影響しない。
【0063】
図8を参照すると、変数xcoおよびxvfの関数としての混合要素μのグラフが示されている。混合要素μは、多数のフィールドの時空間的な非線形混合用に用いてもよい。混合方法において用いられる変数τ1(式セット9を参照)は、動き適応デインターレースおよび動き補償デインターレースに類似してもよい。変数τ2の使用によって、一般に、移動エッジの近辺(エッジ上ではない)におけるアーチファクトが回避される。かかる状況において、最大値が用いられる場合には、変数τ1は、極めて大きくなる可能性があり、したがって、一般に、垂直フィルタの代わりに、時間フィルタリングが用いられる。変数τ2を組み込むことによって新しい顕著なアーチファクトが導入される可能性はない。図8の関数は、(上記に対して丸めを正確に指定するために)以下の擬似コードで表わしてもよい。
diff=max(|xvf−xcp|、|xvf−xcn|)−τ
temp=xvf−xco
if(diff≦0) xblend=xco
else if(diff≧Δτ) xblend=xvf
else if(temp<0) xblend=xco+(diff×temp−(Δτ>>1))/Δτ
else xblend=xco+(diff×temp+(Δτ>>1))/Δτ
ここで、τscaleは、集合{1/4、1/2、1、2}における値を取ってもよく、Δτは、集合{4、8、16、32}における値を取ってもよい。
【0064】
クロマデインターレース成分
信号weaveTwoFieldCが真である場合には、ウィーブ方法を用いてクロマ出力変数を生成してもよい。変数xW2Kは、一般に、前のフィールドPREにおける同じ場所の画素である。したがって、図18cに示すように、クロマデインターレースに対して、xw2Kの値は、式10によって定義してもよい。式10において、PREK[cu][cv]は、前の反対パリティフィールドにおける同じ場所の輝度サンプルであってもよい。さらに、フィールドPREK(前の反対パリティフィールド)は、ウィーブ用に用いられる。しかしながら、3:2プルダウンスキームを有するビデオシーケンスに対して、ウィーブは、次のフィールドNXTを用いて実行してもよい。かかる場合において、前のフィールドPREは、TriMADI方法によって処理される前に、次のフィールドNXTと交換してもよい。
【0065】
3フィールドメジアンウィーブは、一般に、現在の画素が静止的であると判定された場合(例えば信号isStationaryKが真である)かまたは信号weaveThreeFieldCが真である場合に用いられる(図7を参照)。図18cに示すように、メジアンウィーブ出力(例えばxw3K)は、式セット11によって計算してもよい。式セット11において、変数xvfKおよびxcoKは、式12および13によってそれぞれ定義してもよい。
【0066】
補間される画素がエッジ画素ではないと宣言された場合には(例えば信号isAngleC=偽)、図18cに示すように、2タップ垂直フィルタリングを適用し、式12によって補間値を生成してもよい。式12において、変数xvfKは、範囲[0、255]にクリップすべきである。クロマ垂直フィルタリングに対して、輝度垂直フィルタリング用に用いられる4タップフィルタの代わりに、2タップフィルタを用いてもよい。
【0067】
クロマ混合は、本質的に輝度混合と同じであってもよい。輝度混合と比較したクロマ混合の差は、変数τがどのように計算されるかであり得る。図18dに示すように、式13を用いて、xvfKをxcoKと混合してもよい。式13において、(i)xcpK=PREK[cu][cv]は、配列された画素の、前のフィールド画素であってもよく、(ii)
【0068】
【数2】
【0069】
は、信号threeFieldCが真である場合には、次のフィールドにおける配列された画素であってもよく、信号threeFieldCが偽である場合には、前のフィールドにおける配列された画素であってもよく、(iii)xcoK=メジアン(xcpK、xcnK、xvfK)は、混合を伴う、画素に関するウィーブ用に用いてもよい。
【0070】
変数xB2Kは、一般に、前のフィールドにおける同じ場所の画素で垂直にフィルタリングされた値から導き出される(例えばボブ)。変数xB3Kは、前および次のフィールドにおける同じ場所の画素で垂直にフィルタリングされた値から導き出してもよい(例えばボブ)。
【0071】
図18dに示すように、混合要素変数(例えばμK)は、式セット14によって計算してもよい。式セット14において、パラメータΔτCは、集合{1、2、4、8}におけるプログラム可能なパラメータであってもよい。ΔτCのデフォルト値は、信号ThreeChromaFieldが真である場合には8であってもよく、信号TwoChromaFieldが真である場合には4であってもよい。図18dに示すように、変数τKは、式セット15によって計算してもよい。式セット15において、パラメータnscaleは、輝度混合において定義されるのと同じプログラム可能なパラメータであってもよく、τscaleCは、集合{1、...、16}におけるプログラム可能なパラメータであってもよい。τscaleCのデフォルト値は、信号ThreeChromaFieldが真である場合には8であってもよく、信号TwoChromaFieldが真である場合には4であってもよい。3フィールド混合に対して、デフォルト値は、一般に、τ3およびxn用にはスケーリングを生じない。2フィールド混合に対して、変数xnは、次のフィールドNXTKが前のフィールドPREKとして処理されるので、0であってもよい。かかるものとして、nscaleの値は、一般に、2フィールド混合に影響しない。
【0072】
クロマ混合は、一般に、輝度におけるのと同じ混合技術を用いる。擬似コードにおいて、クロマ混合は、以下のように提示してもよい。
temp=xvfK−xcoK
diff=max(|xvfK−xcpK|、|xvfK−xcnK|)−τK
if(diff≦0) xblendK=xcoK
else if(diff≧ΔτC) xblendK=xvfK
else if(temp<0) xblendK=xcoK+(diff×temp−(ΔτC>>1))/ΔτC
else xblendK=xcoK+(diff×temp+(ΔτC>>1))/ΔτC
【0073】
輝度角度検出
図9を参照すると、例示的な輝度角度検出方法180の流れ図が示されている。角度検出方法(またはプロセス)180には、一般に、ステップ(またはブロック)182、ステップ(またはブロック)184、ステップ(またはブロック)186およびステップ(またはブロック)188が含まれる。輝度角度検出方法180は、(i)現在の位置がエッジかどうかということ、および(ii)そうである場合には、エッジの角度を判定するために用いられる。
【0074】
ステップ182において、方法180は、信号(例えばenableAngleDetection)をチェックして、角度検出がイネーブルまたはディスエーブルにされているかどうかを判定してもよい。角度検出がイネーブルにされている場合には(例えばステップ182の真ブランチ)、方法は、ステップ184に進んでもよい。ステップ184において、変数DIFFを計算してもよい。後で、ステップ186において、信号isAngleを真に設定してもよい。角度検出がディスエーブルにされている場合には(例えばステップ182の偽ブランチ)、方法180は、ステップ188において、信号isAngleを偽に設定してもよい。
【0075】
図10を参照すると、例示的な検出可能角度を示す図が示されている。角度検出モジュール102は、ピクチャを検査し、位置(u、v)の近くの角度の特徴においてエッジを検出してもよい。TriMADIアーキテクチャにおいて、ピクチャは、水平軸190に対する多数(例えば2〜19)の角度に沿って探索してもよい。左(例えば指数−9)から右(例えば指数9)へ、角度は、それぞれ、174.6°、172.4°、171.3°、169.7°、167.5°、164.1°、158.2°、146.3°、116.6°、90.0°、63.4°、33.7°、21.8°、15.9°、12.5°、10.3°、8.7°、7.6°および5.4°であってもよい。図10に示すように、角度指数iは、−9≦i≦9の範囲を有してもよい。指数は、−21、−15、−13、−11、−9、−7、−5、−3、−1、0、1、3、5、7、9、11、13、15および21のベースオフセット(例えばb)に対応する。ベースオフセットは、一般に、上側ラインと下側ラインとの間の画素距離として定義される。したがって、角度αは、tan-1(2/b)であってもよい。図17bに示すように、角度指数i、ベースオフセットbおよび検出角度α間のマッピングが、表2に要約されている。さらに、ベース指数bは、角度指数iの関数であってもよく、逆も同様である。90.0°の角度は、角度検出の正確さを向上させる有効な検出角度と見なしてもよい。
【0076】
図18dに示すように、現在のフィールドCURの位置(u、v)における画素を補間するために、アレイDIFF[i]は、式16によって各角度指数i用に計算してもよい。式16において、相関ウィンドウは、2Wのサイズを有してもよい。さらに、図18dに示すように、変数lは、式17によって定義してもよい。
【0077】
24のサイズ(例えばW=12)を有する相関ウィンドウによって、一般に、アレイDIFFを計算するための優れた正確さが提供される。より大きなウィンドウサイズによって、低角度用の角度検出精度を改善することが可能である。特定用途の基準を満たすために、他のウィンドウサイズを実現してもよい。
【0078】
図11〜13を参照すると、3つの例示的な角度用の図が示されている。図11は、一般に、63.4°の第1の角度でDIFF[i]を計算するために用いられる多数(例えばN=24)のラインセグメント200a〜200nを示す。図12は、一般に、33.7°の第2の角度におけるNラインセグメント202a〜202nを示す。図13は、一般に、21.8°の第3の角度におけるNラインセグメント204a〜204nを示す。各例において、一意のアレイDIFF[i]は、N=24のラインセグメントに沿った(2W+3×2W=4×24=96)ペアに関する絶対差合計として計算してもよいが、これらのラインセグメントのそれぞれは、図における多数の黒色を接続する。特定用途の基準を満たすために、ラインセグメントの他の数、ラインセグメントの他の長さおよびラインセグメントの他の間隔を実現してもよい。
【0079】
実験結果に基づくと、画素あたり4ビットの低減された精度が、現在のフィールドCURにおける少なくとも16階調の平均ステップ高を備えたエッジを捕捉するのに十分である可能性があり、したがって、知覚性能に著しい影響を及ぼすことなく、ハードウェアコストを大いに低減することが可能である。式16において、DIFFの計算は、高い計算複雑性(例えば、それぞれ96の加算および絶対値を備えた19のDIFF)を有するように見える。実際には、インプリメンテーションは、より少数の計算を有することが可能である。高速計算は、一般に、位置(u、v)におけるDIFF[i](DIFF(u、v)[i]として表示される)と位置(u、v−1)におけるDIFF[i](DIFF(u、v-1)[i]として表示される)との間の関係を探究することによって、達成可能である。
【0080】
図14を参照すると、位置(u、v−1)および位置(u、v)におけるDIFF[i]の例示的な関係の図が示されている。各アレイDIFF[i]は、96の加算および絶対値を用いるが、式16におけるほとんどの絶対差合計(SAD)項は、位置(u、v−1)および(u、v)にとって共通である。2つの位置のDIFF[i]間の差は、スライドウィンドウにおける左の境界210および右の境界212である。したがって、図18eに示すように、式16は、式セット18として再定式化してもよい。(ほとんどのケースにおいて)DIFF(u、v-1)[i]が周知である場合には、DIFF(u、v)[i]は、わずかな労力で計算可能である。式セット18に示すように、高速技術は、2+3+3=8の加算および絶対値を利用して、位置(u、v)用に各DIFF[i]を計算する。したがって、計算の複雑性は、12分の1に低減可能である。行における左端の画素(例えばDIFF(u、v=0)[i])に対して、完全な計算を実行してもよい。なぜなら、DIFF(u、v=-1)[i]が存在しないからである。
【0081】
19アレイDIFFを計算した後で、下記の規則に従って、補間される現在の画素がエッジに位置するかどうかの判定を下してもよい。項の以下の定義を、規則によって用いてもよい。
(1)DIFF_min1=DIFF[α]は、19DIFFの最小値であってもよい。
(2)DIFF_min2=DIFF[β]は、2番目の最小であってもよい。
(3)DIFF_min3は、3番目の最小値であってもよい。
(4)DIFF_maxは、最大値であってもよい。
DIFF_min1=DIFF[α]==DIFF_min2=DIFF[β]の場合には、αの値は、真ん中の角度の指数であるはずである(例えば|α|<|β|)。同様に、DIFF_min2=DIFF[β]==DIFF_min3の場合には、βの値は、DIFF_min2およびDIFF_min3の真ん中の指数であるはずである。図17bに示すように、中心角(例えば90°)に対する指数iの距離は、表3において定義してもよい。いくつかの実施形態において、ハードウェアインプリメンテーションは、「均衡」の場合を壊すために別の規則を用いることによって、より単純にすることが可能である。特定用途の基準を満たすために、他の規則を実行してもよい。
(5)変数(例えばLEFT)は、αの左の直接隣接する角度として定義してもよく、変数(例えばRIGHT)は、αの右の直接隣接する角度として定義してもよい。図18eに示すように、変数LEFTおよびRIGHTは、式セット19に従って決定してもよい。
(6)いくつかの変数(例えばUpLeft、UpRight、DownLeft、DownRight)は、ウィンドウのラインu−1およびラインu+1における左端の画素および右端の画素であってもよい。図18eに示すように、変数UpLeft、UpRight、DownLeftおよびDownRightは、式セット20によって決定してもよい。
(7)閾値マトリックス(例えばTH_DIFF)は、角度用の最大の可能なSADを定義してもよい。マトリックスTH_DIFFは、角度に依存した8ビットのプログラム可能な閾値を記憶してもよい。DIFFを計算する際に各画素が4ビットで表わされる場合には、図17bに示すように、TH_DIFF用のデフォルト値は、表4において定義してもよい。8ビットのDIFF計算用に、表4のデフォルト値に16を掛けてもよい。
【0082】
以下の条件が満たされる場合に、画素は、角度画素(例えばisAngleフラグ=真)であると宣言してもよい。
isAngle=
(a) DIFF_min1*21<c1*DIFF_max
(b)&& DIFF_min1≦TH_DIFF[α]
(c)&& DIFF_min1!=DIFF_min2|| DIFF_min2!=DIFF_min3
(d)&& max(|UpLeft−DownLeft|、|UpRight−DownRight|)<c2
(e1)&& ((|α−β|==1)
(e2)||(DIFF_min1*2<DIFF_min2
&& DIFF[LEFT]<((3*DIFF_min2>>1) && DIFF[RIGHT]<((3*DIFF_min2>>1))
【0083】
条件(a)におけるパラメータc1は、7のデフォルト値を備えた、{3、5、...、15、18}からのプログラム可能なパラメータであってもよい。条件(d)におけるパラメータc2は、プログラム可能な閾値であってもよい。画素UpLeft、UpRight、DownLeftおよびDownRightの主要な4ビットのみが用いられる場合には、閾値は、4のデフォルト値を備えた4ビット整数として実現してもよい。画素の8ビット全てが用いられる場合には、閾値は、64のデフォルト値を備えた8ビット整数として実現してもよい。
【0084】
条件(a)は、一般に、少なくとも1つの他の方向よりはるかによい角度方向を確立することによって、背景フリッカを回避する。条件(b)は、最小の角度強度を確立可能である。条件(c)は、一般に、3つの角度が等しく優れている場合に、誤った角度で終了しないようにする。条件(c)は、低減されたビット深度および/または低コントラスト領域の場合に役立つ可能性がある。条件(d)は、アーチファクトを低減するための追加的な基準を加えることが可能である。条件(e1)および(e2)は、論理「OR」してもよい。条件(e1)は、一般に、最良の2つの角度が隣接してもよいことを述べる。条件(e2)は、条件(e1)が満たされないときで、最良の2つの角度が隣接していない場合に、DIFFに対して追加条件を確立してもよい。さらに、信号isAngleが真である場合には、角度αは、方向フィルタ用に現在の画素の角度として定義してもよい。
【0085】
角度検出プロセスが、u−3、u−1、u+lおよびu+3のラインを利用するので、角度検出プロセスは、トップラインおよびボトムライン用のフィールド境界の外側のラインにアクセスしてもよい。さらに、角度検出プロセスが大きなウィンドウサイズ(例えばv±43)を用いることが可能なので、プロセスは、左フィールド境界および右フィールド境界近くの利用不可能な画素にアクセスしてもよい。
【0086】
上記に示すように、フィールド境界の左および右の全ての利用不可能な輝度画素は、0の値を有すると仮定してもよい。かかるものとして、フィールド境界の左および右の埋め込み画素(例えば、ピクチャ境界の外側の計算される画素)は、問題を起こすことがないであろう。しかしながら、フィールド境界のトップの上、およびボトムの下のラインに対して、いくつかの可能なアプローチを用いてもよい。すなわち、(1)角度検出をディスエーブルにして、埋め込み画素の代わりに実際の画素値を用い、(2)角度検出をディスエーブルにして、埋め込み画素を黒(例えば、0の値を有する)と仮定し、(3)角度検出をイネーブルにして、境界外ラインの代わりにトップ/ボトムラインを用い、(4)角度検出をイネーブルにして、全ての境界外画素用にデフォルト値(例えば0)を仮定する。図17bに示すように、上記のアプローチの性能は、一般に、表5において提供される。図17cに示すように、様々なパラメータのリストは、表6に見い出すことができる。
【0087】
画素に関する静止チェック技術
TriMADIアーキテクチャは、一般に、画素に関する静止チェックを用いて、経時的にほとんどまたは全く変化しない(例えば静止的)領域にわたって鮮明な出力を提供する。図6に示すように、静止チェックは、各チャネル(例えばY、Cb、Cr)に対して独立して実行してもよい。各チャネルに対して、静止チェックは、2つの出力ブール信号(またはフラグ)、すなわち(i)isStationaryおよび(ii)statを生成してもよい。信号isStationaryは、一般に、現在のフィールドCURの出力を生成するためにデインターレース技術によって用いられる。信号statは、2ビットの静止カウンタHSCntを更新するために用いてもよい。カウンタHSCntは、過去に処理された静止フィールドの数を追跡するために用いてもよい。カウンタHSCntは、3つの全てのチャネルの静止フラグに基づいて更新してもよい。
【0088】
図15を参照すると、例示的で画素に関する輝度静止チェック方法220の流れ図が示されている。輝度静止チェック方法(またはプロセス)220には、一般に、ステップ(またはブロック)222、ステップ(またはブロック)224、ステップ(またはブロック)226、ステップ(またはブロック)228、ステップ(またはブロック)230、ステップ(またはブロック)232およびステップ(またはブロック)234が含まれる。
【0089】
ステップ222において、信号enableStatCheckYを検査してもよい。信号enableStatCheckYが偽の場合には(例えばステップ222の偽ブランチ)、静止チェック方法220は、ステップ224において、信号isStationaryYを偽に設定し、信号statYを偽に設定してもよい。信号enableStatCheckYが真である場合には(例えばステップ222の真ブランチ)、いくつかのフラグ(または信号)を、ステップ226、228および230において生成してもよい。
【0090】
ステップ226において、フラグ(例えばisStatHist)を計算してもよい。ステップ228において、第1のフラグ(例えばstatLum[0])および第2のフラグ(例えばstatLum[1])を生成してもよい。ステップ230において、フラグ(例えばisLumAngleStat)は、信号isAngleおよび信号angleFitに基づいて計算してもよい。ステップ232において、信号isStationaryYは、フラグisStatHist、フラグstatLum[0]およびフラグisLumAngleStatに基づいて計算してもよい。ステップ234において、フラグstatYは、フラグstatLum[1]に設定してもよい。
【0091】
図15に示すように、いくつかのフラグを生成して、輝度静止チェック方法220の内で用いてもよい。フラグstatLum[0]およびフラグstatLum[1]は、一般に、現在のフィールドCURならびに反対パリティフィールドPREおよびNXTにおける周辺画素が静止的かどうかを知らせる。フラグstatLum[0]は、より厳密な条件で計算してもよく、現在のフィールドCURをデインターレースするために用いられる。フラグstatLum[1]は、より緩やかな条件で計算してもよく、静止カウンタHSCntを更新するために用いられる。さらに、フラグstatLum[1]用に計算された値は、静止チェック技術のフラグstatYにおいて出力してもよい。
【0092】
フラグisLumAngleStatは、現在の画素がエッジ画素であると判定された場合に、輝度静止チェックをより強固にする追加的制約であってもよい。フラグisStatHistは、一般に、現在の位置が過去に十分に静止的だったかどうかを知らせる。フラグisStatHistは、カウンタHSCntに基づいて計算してもよい。フラグisStatHistは、輝度静止チェック方法220およびクロマ静止チェック方法の両方によって用いてもよい。フラグisStationaryYは、一般に、現在の画素が静止的かどうかを知らせるために、輝度デインターレース技術によって用いられる。
【0093】
輝度静止フラグは、現在の画素のローカル動作、1つまたは複数の水平方向周辺画素の動作に基づき、かつ前のフィールドPREと次のフィールドNXTとの間の変化に基づいて計算してもよい。現在のラインの位置v−4〜v+4のローカル動作は、計算において用いてもよい。図18fおよび18gに示すように、計算の詳細は、一般に、式21、式セット22、式セット23、式24、式セット25および式26によって規定される。パラメータActOffset、ActScaleおよびMaxResidueは、以下のように定義されたプログラム可能なパラメータであってもよい。
(1)ActScale=6のデフォルト値を備えた{2、3、4、5、6、7、8、9}
(2)ActOffset=7のデフォルト値を備えた{0、1、2、...、14、15}
(3)MaxResidue=15のデフォルト値を備えた{12、13、...、19}
【0094】
いくつかの実施形態において、式21〜26における全ての中間媒介変数の完全な計算は、回避してもよい。式セット22から、パラメータhstatcntおよび剰余は、所定のサイズ(例えば9)のスライディングウィンドウ内でパラメータtdiffactに基づいて計算してもよい。ほとんどの中間媒介変数が、位置(u、v−1)と位置(u、v)との間で共有可能なので、スライディングウィンドウにおけるパラメータtdiffactおよびパラメータlumActは、一時的にバッファしてもよく、したがって、単に、ウィンドウにおける右端の位置に対応する変数だけを個別に計算してもよい。
【0095】
輝度静止チェックの正確さを改善するために、フラグisLumAngleStatは、現在の輝度画素の角度情報に基づいて計算してもよい。図18gに示すように、フラグisLumAngleStatは、式27によって計算してもよい。式27において、変数MinHistAngleは、[0、1、2、3]の範囲を備えたプログラム可能なパラメータであってもよく、2のデフォルト値を有してもよい。より大きなMinHistAngle値は、一般に、より厳しい条件を与える。より厳しい条件は、より小さい偽検出(例えば、誤った真)の機会に帰着することが可能であるが、しかしより高いミス検出(誤った偽)の機会に帰着する可能性がある。同様に、より小さなMinHistAngle値は、一般に、より緩やかな条件を与え、したがってより小さなミス検出の機会と共に、より高い偽検出の機会を与える。
【0096】
フラグisStatHistを用いて、現在の画素位置(および垂直方向周辺画素)が過去に静止的だったかどうかを示してもよい。フラグisStatHistは、輝度静止チェック技術およびクロマ静止チェック技術の両方によって用いてもよい。図18gに示すように、フラグisStatHistは、式28によって生成してもよい。式28において、パラメータMinHistCenter、パラメータMinHistAdjacentおよびパラメータMinHistSumは、静止チェック技術の性能に影響するプログラム可能なパラメータであってもよい。パラメータの範囲は、それぞれ、[0、1、2、3]、[3、4、5、6]、および[0、1、...、14、15]であってもよい。デフォルト値は、それぞれ、2、6および9であってもよい。パラメータのより大きな値は、一般に、より厳しい条件をもたらす。より厳しい条件は、より小さい偽検出(例えば、誤った真)の機会に帰着することが可能であるが、しかしより高いミス検出(誤った偽)の機会に帰着する可能性がある。同様に、より小さな値は、一般に、より緩やかな条件を与え、したがってより小さなミス検出の機会と共に、より高い機会の偽検出を与える。
【0097】
フラグisStationaryYは、輝度デインターレース技術によって用いてもよい(図6および7を参照)。図18gにおいて式29に示すように、フラグisStationaryYは、フラグstatLum[0]、フラグisLumAngleStatおよびフラグisStatHistの論理積として生成してもよい。
【0098】
図16を参照すると、例示的で画素に関するクロマ静止チェック方法240の流れ図が示されている。クロマ静止チェック方法(またはプロセス)240には、一般に、ステップ(またはブロック)242、ステップ(またはブロック)244、ステップ(またはブロック)246、ステップ(またはブロック)248、ステップ(またはブロック)250およびステップ(またはブロック)252が含まれる。
【0099】
ステップ242において、信号enableStatCheckCを検査してもよい。信号enableStatCheckCが偽の場合には(例えばステップ242の偽ブランチ)、静止チェック方法240は、ステップ244において、信号isStationaryCを偽に設定し、信号statCを偽に設定してもよい。信号enableStatCheckCが真である場合には(例えばステップ242の真ブランチ)、多数のフラグ(または信号)をステップ246および248で生成してもよい。
【0100】
ステップ246において、フラグisStatHistを計算してもよい。ステップ248において、フラグ(例えばstatCK)を生成してもよい。ステップ250において、信号isStationaryYは、フラグisStatHistおよびフラグstatCKに基づいて計算してもよい。ステップ252において、フラグstatKは、フラグstatCKに設定してもよい。一般に静止フラグのより厳しいバージョンおよびより緩やかなバージョンの両方を生成する輝度静止チェックにおけるのと異なり、2つのクロマチャネルのそれぞれに対して、単一のフラグ(例えばstatCK)だけを生成してもよい。フラグstatCKは、一般に、現在のフィールド(例えばCURK)および反対パリティフィールド(例えばPREKおよびNXTK)における画素が静止的かどうかを知らせる。さらに、フラグstatCKを用いて、フラグisStaionaryKを計算してもよい。
【0101】
同じ静止チェック技術を、両方のクロマチャネル用に用いてもよい。図6に示すように、CbチャネルおよびCrチャネル用のクロマ静止チェック方法240は、独立して実行してもよい。クロマ静止チェック方法240は、一般に、輝度静止チェック方法220におけるのと同じフラグisStatHistを用いる。
【0102】
フラグstatCKは、現在の画素および1つまたは複数の水平方向周辺画素のローカル動作に基づいて計算してもよい。フラグstatCKは、前のフィールドPREと次のフィールドNXTとの間の変化に基づいてもよい。(4:2:0フォーマットおよび4:2:2フォーマットの両方における)クロマチャネルの潜在的な水平ダウンサンプリングゆえに、現在のラインの位置v−2〜v+2(輝度における±4ではなく)のローカル動作を、計算において用いてもよい。
【0103】
図18hおよび18iに示すように、statCKフラグは、式30〜式35によって生成される。式30〜式35において、パラメータActOffsetC、パラメータActScaleCおよびパラメータMaxResidueCは、以下に従うプログラム可能なパラメータであってもよい。
(1)ActScaleC=13のデフォルト値を備えた{9、...、16}
(2)ActOffsetC=7のデフォルト値を備えた{0、1、2、...、15}
(3)MaxResidueC=15のデフォルト値を備えた{12、13、...、19、}
【0104】
現在の画素が静止的で、現在の位置において履歴的に静止的である場合には、クロマ画素は、静止的であると見なされる。かかるものとして、図18jに示すように、フラグisStationaryKは、式36によって生成してもよい。
【0105】
静止チェックカウンタHSCntは、静止チェックがイネーブルにされた場合には(例えば、statCheckまたはenableStatCheckYが真である場合には)、更新してもよい。カウンタHSCntの更新が、追加的な書き込み帯域幅を消費する可能性があるので、カウンタHSCntは、静止チェックがディスエーブルにされた場合には、更新しなくてもよい。
【0106】
静止チェックがイネーブルされた場合、および静止チェックが、3つの全てのチャネルに対して実行された後で(例えば、statY、statCbおよびstatCrが全て設定された後で)、図18jに示すように、現在の出力位置用のカウンタHSCntは、式37によって更新してもよい。カウンタHSCntは、一般に、現在の位置が、3つの全てのチャネルにおいて静止的であると分かった場合には、1(最高3まで)だけ増分される。弱く静止的である場合には(例えば、輝度は静止的であるが、しかし、クロマの少なくとも1つが静止的ではない)、カウンタHSCntは、2で割ってもよい。カウンタHSCntは、現在のフィールドCURが静止的ではないと判定された場合には、0に再設定してもよい。潜在的なクロマダウンサンプリングゆえに、全ての輝度サンプルが、対応するクロマサンプルを有するわけではない場合がある。したがって、全てのフラグstatYが、対応するフラグstatCbおよび対応するフラグstatCrを有するわけではない場合がある。
【0107】
クロマフラグの欠如は、以下のように扱ってもよい。水平クロマダウンサンプリングに関して(例えば4:2:2フォーマットおよび4:2:0フォーマット用の)、フラグstatKは、全ての奇数v’s用には存在しない(図1および2を参照)。かかる場合において、位置v>>1においてなされたクロマ判定(例えば、同じラインのv−1における輝度サンプルに対応するクロマサンプルの判定)を用いてもよい。
【0108】
垂直クロマダウンサンプリングに関して(例えば4:2:0フォーマット用の)、フラグstatKは、1つおきの輝度ライン用には存在しない(図2を参照)。かかる場合に、最も最近にデインターレースされた輝度ライン(例えばu−2)において用いられたクロマ判定を用いてもよい。したがって、クロマ幅のサイズの2つの1ビットライン記憶装置(例えばstatCbライン記憶装置およびstatCrライン記憶装置)を用いて、クロマライン全体の判定を記憶してもよい。かかるものとして、輝度幅の追加的な1ビットライン記憶装置(クロマは、4:2:0フォーマットにおいて2で水平にダウンサンプリングされ、かつ2つのクロマチャネルが存在する)を実現してもよい。ボトムフィールドのトップ輝度ラインにとって、前のクロマ判定は存在しない。かかる場合に、フラグstatCbおよびフラグstatCrは、真であると仮定してもよい(例えば、式37において用いられるクロマ判定を無視する)。1ビットライン記憶装置に記憶された情報は、メモリに書き込む必要はない。かかるものとして、1ビットライン記憶装置は、読み出し帯域幅も書き込み帯域幅も増加させる可能性がない。
【0109】
カウンタHSCntは、フラグisStatHistを計算する場合およびカウンタHSCntを更新する場合には、読み出してもよい。全体的には、垂直隣接カウンタHSCntだけを用いてもよい(例えば、x∈{u−2、u−1、u、u+l、u+2}の場合にカウンタHSCnt[x][v]だけを用いてもよい)。水平隣接HSCntは、一般に、用いられない。したがって、カウンタHSCntの依存は、一般に、同じライン内には存在しない。しかしながら、依存は、垂直隣接カウンタHSCnt間には存在してもよい。
【0110】
上記の結果として、インプリメンテーションにおいて輝度デインターレースおよびクロマデインターレースを完全には同期できない場合には、カウンタHSCnt[u][v]の更新は、次のラインにおける同じ垂直位置をデインターレースする前に更新が行われる限りは、遅延させてもよい。例えば、カウンタHSCnt[u][v]は、HSCnt[(u+2)−2][v]が用いられる位置(u+2、v)をデインターレースする前に更新してもよい。カウンタHSCntの更新が遅延される場合には、statY/Cb/Crビットは、各遅延される位置のために追跡されるべきである。結果としての柔軟性によって、一般に、輝度処理およびクロマ処理は、遅延がライン未満である限りは、大ざっぱに同期させることが可能になる(正確な遅延は未知である)。
【0111】
いくつかの実施形態において、前の動き補償された反対パリティフィールド(例えばPREMC)および次の動き補償された反対パリティフィールド(例えばNXTMC)は、それぞれ、前のフィールドPREおよび次のフィールドNXTの代わりに用いてもよい。したがって、xco用の混合式は、前の動き補償された反対パリティフィールドPREMCおよび次の動き補償された反対パリティフィールドNXTMCにおける同じ場所の画素(例えばPREMC[u][v]およびNXTMC[u][v])から導き出してもよい。同様に、静止チェックカウンタもまた動き補償してもよい。
【0112】
他の実施形態において、輝度およびクロマの両方のためにただ単一の静止カウンタHSCntを有する代わりに、別個の静止履歴カウンタを、各カラーチャネル用に実現してもよい(例えば3つのカウンタHSCnt)。かかるものとして、全てのチャネル用に一緒に、または各チャネル用に独立して静止フラグisStationaryを判定することなど、別個のカウンタを用いて、より多くの自由を提供し得る。
【0113】
いくつかの実施形態において、低角度をよりよく検出するために、より大きなウィンドウを角度検出技術によって用いてもよい。一般に、全ての角度用のウィンドウサイズは同じであってもよい(例えば24画素幅)。より大きなウィンドウは、低角度を検出する際に正確さを向上させるが、より大きなウィンドウは、より高角度に対してはミス検出の可能性を低減することが可能である。したがって、異なる角度に対して、可変ウィンドウサイズを実現してもよい。より大きなウィンドウサイズを低角度用に用いてもよく、より小さなウィンドウサイズを高角度用に用いてもよい。計算において用いられる異なるサンプル数ゆえに、異なる角度のDIFFは、最終的角度候補を決定する場合に、異なるように重み付けしてもよい。
【0114】
さらに他の実施形態において、独立した輝度/クロマデインターレースを可能にするように、クロマ角度検出を実行してもよい。クロマ角度検出は、予測方法または検出方法に基づいてもよい。予測方法は、一般に、輝度角度に基づいてクロマ角度を予測するので、計算を軽減する。しかしながら、予測方法は、輝度およびクロマが無相関の場合には、辛うじて実行可能である。
【0115】
検出方法は、一般に、輝度角度検出におけるようにクロマ角度を検出する。検出方法は、予測方法よりも正確な角度を提供可能である。検出方法によって、一般に、独立した輝度/クロマデインターレースが可能になる。クロマダウンサンプリングゆえに、輝度におけるように全ての19角度を検出する代わりに、クロマ角度検出においては、より少数の角度候補を確立してもよい。
【0116】
クロマ角度検出が実行される場合には、輝度におけるのと同じ適合チェック方法を用いてもよい。図18g示すように、方向フィルタリングされた結果(例えばxdfK)(図7を参照)は、式38によって計算してもよい。式38において、
【0117】
【数3】
【0118】
であり、ここで、αKは、クロマ角度であってもよく、lは、上側ラインの列オフセットであってもよく、式17によって定義される。
【0119】
図6〜9および15〜18jの図、式および表によって実行される機能は、本明細書の教示に従ってプログラムされた従来の汎用デジタルコンピュータを用いて実行してもよく、これは、当業者には明らかであろう。適切なソフトウェアコーディングは、本開示の教示に基づき、熟練したプログラマによって容易に準備可能であり、これもまた当業者には明らかであろう。
【0120】
本明細書で説明しているように、本発明はまた、ASIC、FPGAを準備することによってか、または従来のコンポーネント回路の適切なネットワークを相互接続することによって実行してもよく、これらの修正は、当業者には容易に明らかになろう。
【0121】
したがって、本発明にはまた、本発明に従ってプロセスを実行するようにコンピュータをプログラムするために利用できる命令を含む記憶媒体であってもよいコンピュータ製品を含むことができる。記憶媒体には、限定するわけではないが、フロッピー(登録商標)ディスク、光ディスク、CD−ROM、光磁気ディスク、ROM、RAM、EPROM、EEPROM、フラッシュメモリ、磁気もしくは光カードを含む任意のタイプのディスク、または電子命令を記憶するのに適した任意のタイプの媒体を含むことができる。本明細書で用いるように、用語は「同時」は、いくらかの共通の期間を共有するイベントを示すように意味されているが、しかしこの用語は、同じ時点で始まるか、同じ時点で終了するか、または同じ持続期間を有するイベントに限定されるようには意味されていない。
【0122】
本発明の好ましい実施形態に関連して、本発明を特に図示および説明したが、本発明の範囲から逸脱することなく、形態および詳細における様々な変更を行い得ることが、当業者には理解されよう。
【特許請求の範囲】
【請求項1】
動き適応ビデオデインターレースの方法であって、
(A)複数のモードのうちの第1のモードにおいて、現在のフィールドをデインターレースすることによってフレームを生成するステップと、
(B)前記モードのうちの第2のモードにおいて、前記現在のフィールドおよび反対パリティフィールドの両方を用いてデインターレースすることによって前記フレームを生成するステップと、
(C)前記モードのうちの第3のモードにおいて、前記現在のフィールド、前記反対パリティフィールドおよび別のフィールドの全てを用いてデインターレースすることによって前記フレームを生成するステップと、
(D)画素ベースごとの静止状態を決定するステップであって、前記現在のフィールドの現在の画素の前記静止状態が、(i)前記現在の画素のローカル動作、(ii)1つまたは複数の水平方向周辺画素の動作、および(iii)前記反対パリティフィールドと前記別のフィールドとの間の前記現在の画素に隣接する複数の画素の複数の変化に基づくステップと、
(E)前記静止状態が真であれば、前記第3のモードを選択するステップと、
を含む方法。
【請求項2】
(i)メモリ制約および(ii)システム帯域幅制約の少なくとも1つの制約が、(a)システムまたは(b)前記システムの特定の動作モードの1つを特徴づけるように、前記モードの異なる組み合わせの間で切り替わるステップをさらに含む、請求項1に記載の方法。
【請求項3】
(i)前記フレームを生成するように構成されたモジュールの外部のメモリに、(ii)前記フレームを生成するために、(a)前記第1のモードにおけるデータのわずか1フィールドの値、(b)前記第2のモードにおけるデータのわずか2フィールドの値、および(c)前記第3のモードにおけるデータのわずか3フィールドの値をバッファするステップをさらに含む、請求項1に記載の方法。
【請求項4】
(i)メモリから、前記フレームを生成するように構成されたモジュールへ、(ii)前記フレームを生成するために、(a)前記第1のモードにおける前記現在のフィールドに他ならないフィールド、(b)前記第2のモードにおける前記現在のフィールドおよび前記反対パリティフィールドに他ならないフィールド、ならびに(c)前記第3のモードにおける前記現在のフィールド、前記反対パリティフィールド、および前記別のフィールドに他ならないフィールドを転送するステップをさらに含む、請求項1に記載の方法。
【請求項5】
前記モードの第4のモードにおいて、(i)1つまたは複数のルミナンスフィールドの可変数および(ii)1つまたは複数のクロミナンスフィールドの前記可変数の両方を用いてデインターレースすることによって、前記フレームを生成するステップをさらに含む、請求項1に記載の方法。
【請求項6】
前記第1のモード、前記第2のモード、前記第3のモードおよび前記第4のモードの間で切り替わるステップをさらに含む、請求項5に記載の方法。
【請求項7】
システム再構成に応じて、デインターレースにおいて用いられるルミナンスフィールドの数を変更するステップをさらに含む、請求項1に記載の方法。
【請求項8】
システム再構成に応じて、デインターレースにおいて用いられるクロミナンスフィールドの数を変更するステップをさらに含む、請求項1に記載の方法。
【請求項9】
前記反対パリティフィールドおよび前記別のフィールドの両方が、前記現在のフィールドの前の時間に生じる、請求項1に記載の方法。
【請求項10】
現在のフィールドをバッファするように構成されたメモリと、
(i)複数のモードのうちの第1のモードにおいて、前記現在のフィールドをデインターレースすることによってフレームを生成し、(ii)前記モードのうちの第2のモードにおいて、前記現在のフィールドおよび反対パリティフィールドの両方を用いてデインターレースすることによって前記フレームを生成し、(iii)前記モードのうちの第3のモードにおいて、前記現在のフィールド、前記反対パリティフィールドおよび別のフィールドの全てを用いてデインターレースすることによって前記フレームを生成し、(iv)画素ベースごとの静止状態を決定し、前記現在のフィールドの現在の画素の前記静止状態が、(a)前記現在の画素のローカル動作、(b)1つまたは複数の水平方向周辺画素の動作、および(c)前記反対パリティフィールドと前記別のフィールドとの間の前記現在の画素に隣接する複数の画素の複数の変化に基づき、かつ(v)前記静止状態が真であれば、前記第3のモードを選択するように構成されたモジュールと、
を含むシステム。
【請求項11】
動き適応ビデオデインターレースの方法であって、
(A)現在のフィールドの静止状態が偽であることを示す複数の構成信号を生成するステップであって、前記現在のフィールドの現在の画素の前記静止状態が、(i)前記現在の画素のローカル動作、(ii)1つまたは複数の水平方向周辺画素の動作、および(iii)前のフィールドと次のフィールドとの間の前記現在の画素に隣接する複数の画素の複数の変化に基づくステップと、
(B)第1のモードにおいて、前記現在のフィールド、前記前のフィールドおよび前記次のフィールドを時空間的に混合することによってフレームを生成するステップと、
(C)第2のモードにおいて、前記現在のフィールドおよび前記前のフィールドを時空間的に混合することによって前記フレームを生成するステップと、
(D)前記時空間的混合のために前記前のフィールドおよび前記次のフィールドの1つまたは複数から複数のフィールド画素を選択するステップと、
を含む方法。
【請求項12】
第3のモードにおいて、前記現在のフィールドおよび前記次のフィールドを時空間的に混合することによって前記フレームを生成するステップをさらに含む、請求項11に記載の方法。
【請求項13】
前記時空間的混合が、メジアン演算を含む、請求項11に記載の方法。
【請求項14】
前記時空間的混合が、非線形動作を含む、請求項11に記載の方法。
【請求項15】
前記前のフィールドと前記次のフィールドとの間の差に基づいて、空間フィルタリングからの変更を制限するステップをさらに含む、請求項11に記載の方法。
【請求項16】
現在のフィールドをデインターレースするために、前のフィールドおよび次のフィールドの利用を別々にイネーブルにする複数の構成信号を生成するように構成されたコントローラと、
(i)前記現在のフィールドの静止状態が偽であることを示す前記構成信号に基づいて、(a)第1のモードにおいて、前記現在のフィールド、前記前のフィールドおよび前記次のフィールドを時空間的に混合し、ならびに(b)第2のモードにおいて、前記現在のフィールドおよび前記前のフィールドを時空間的に混合することによってフレームを生成し、(ii)前記時空間的混合において用いるための前記前のフィールドおよび前記次のフィールドの1つまたは複数から複数のフィールド画素を選択するように構成されたモジュールと、
を含み、
前記現在のフィールドの現在の画素の前記静止状態が、(a)前記現在の画素のローカル動作、(b)1つまたは複数の水平方向周辺画素の動作、および(c)前記前のフィールドと前記次のフィールドとの間の前記現在の画素に隣接する複数の画素の複数の変化に基づくシステム。
【請求項1】
動き適応ビデオデインターレースの方法であって、
(A)複数のモードのうちの第1のモードにおいて、現在のフィールドをデインターレースすることによってフレームを生成するステップと、
(B)前記モードのうちの第2のモードにおいて、前記現在のフィールドおよび反対パリティフィールドの両方を用いてデインターレースすることによって前記フレームを生成するステップと、
(C)前記モードのうちの第3のモードにおいて、前記現在のフィールド、前記反対パリティフィールドおよび別のフィールドの全てを用いてデインターレースすることによって前記フレームを生成するステップと、
(D)画素ベースごとの静止状態を決定するステップであって、前記現在のフィールドの現在の画素の前記静止状態が、(i)前記現在の画素のローカル動作、(ii)1つまたは複数の水平方向周辺画素の動作、および(iii)前記反対パリティフィールドと前記別のフィールドとの間の前記現在の画素に隣接する複数の画素の複数の変化に基づくステップと、
(E)前記静止状態が真であれば、前記第3のモードを選択するステップと、
を含む方法。
【請求項2】
(i)メモリ制約および(ii)システム帯域幅制約の少なくとも1つの制約が、(a)システムまたは(b)前記システムの特定の動作モードの1つを特徴づけるように、前記モードの異なる組み合わせの間で切り替わるステップをさらに含む、請求項1に記載の方法。
【請求項3】
(i)前記フレームを生成するように構成されたモジュールの外部のメモリに、(ii)前記フレームを生成するために、(a)前記第1のモードにおけるデータのわずか1フィールドの値、(b)前記第2のモードにおけるデータのわずか2フィールドの値、および(c)前記第3のモードにおけるデータのわずか3フィールドの値をバッファするステップをさらに含む、請求項1に記載の方法。
【請求項4】
(i)メモリから、前記フレームを生成するように構成されたモジュールへ、(ii)前記フレームを生成するために、(a)前記第1のモードにおける前記現在のフィールドに他ならないフィールド、(b)前記第2のモードにおける前記現在のフィールドおよび前記反対パリティフィールドに他ならないフィールド、ならびに(c)前記第3のモードにおける前記現在のフィールド、前記反対パリティフィールド、および前記別のフィールドに他ならないフィールドを転送するステップをさらに含む、請求項1に記載の方法。
【請求項5】
前記モードの第4のモードにおいて、(i)1つまたは複数のルミナンスフィールドの可変数および(ii)1つまたは複数のクロミナンスフィールドの前記可変数の両方を用いてデインターレースすることによって、前記フレームを生成するステップをさらに含む、請求項1に記載の方法。
【請求項6】
前記第1のモード、前記第2のモード、前記第3のモードおよび前記第4のモードの間で切り替わるステップをさらに含む、請求項5に記載の方法。
【請求項7】
システム再構成に応じて、デインターレースにおいて用いられるルミナンスフィールドの数を変更するステップをさらに含む、請求項1に記載の方法。
【請求項8】
システム再構成に応じて、デインターレースにおいて用いられるクロミナンスフィールドの数を変更するステップをさらに含む、請求項1に記載の方法。
【請求項9】
前記反対パリティフィールドおよび前記別のフィールドの両方が、前記現在のフィールドの前の時間に生じる、請求項1に記載の方法。
【請求項10】
現在のフィールドをバッファするように構成されたメモリと、
(i)複数のモードのうちの第1のモードにおいて、前記現在のフィールドをデインターレースすることによってフレームを生成し、(ii)前記モードのうちの第2のモードにおいて、前記現在のフィールドおよび反対パリティフィールドの両方を用いてデインターレースすることによって前記フレームを生成し、(iii)前記モードのうちの第3のモードにおいて、前記現在のフィールド、前記反対パリティフィールドおよび別のフィールドの全てを用いてデインターレースすることによって前記フレームを生成し、(iv)画素ベースごとの静止状態を決定し、前記現在のフィールドの現在の画素の前記静止状態が、(a)前記現在の画素のローカル動作、(b)1つまたは複数の水平方向周辺画素の動作、および(c)前記反対パリティフィールドと前記別のフィールドとの間の前記現在の画素に隣接する複数の画素の複数の変化に基づき、かつ(v)前記静止状態が真であれば、前記第3のモードを選択するように構成されたモジュールと、
を含むシステム。
【請求項11】
動き適応ビデオデインターレースの方法であって、
(A)現在のフィールドの静止状態が偽であることを示す複数の構成信号を生成するステップであって、前記現在のフィールドの現在の画素の前記静止状態が、(i)前記現在の画素のローカル動作、(ii)1つまたは複数の水平方向周辺画素の動作、および(iii)前のフィールドと次のフィールドとの間の前記現在の画素に隣接する複数の画素の複数の変化に基づくステップと、
(B)第1のモードにおいて、前記現在のフィールド、前記前のフィールドおよび前記次のフィールドを時空間的に混合することによってフレームを生成するステップと、
(C)第2のモードにおいて、前記現在のフィールドおよび前記前のフィールドを時空間的に混合することによって前記フレームを生成するステップと、
(D)前記時空間的混合のために前記前のフィールドおよび前記次のフィールドの1つまたは複数から複数のフィールド画素を選択するステップと、
を含む方法。
【請求項12】
第3のモードにおいて、前記現在のフィールドおよび前記次のフィールドを時空間的に混合することによって前記フレームを生成するステップをさらに含む、請求項11に記載の方法。
【請求項13】
前記時空間的混合が、メジアン演算を含む、請求項11に記載の方法。
【請求項14】
前記時空間的混合が、非線形動作を含む、請求項11に記載の方法。
【請求項15】
前記前のフィールドと前記次のフィールドとの間の差に基づいて、空間フィルタリングからの変更を制限するステップをさらに含む、請求項11に記載の方法。
【請求項16】
現在のフィールドをデインターレースするために、前のフィールドおよび次のフィールドの利用を別々にイネーブルにする複数の構成信号を生成するように構成されたコントローラと、
(i)前記現在のフィールドの静止状態が偽であることを示す前記構成信号に基づいて、(a)第1のモードにおいて、前記現在のフィールド、前記前のフィールドおよび前記次のフィールドを時空間的に混合し、ならびに(b)第2のモードにおいて、前記現在のフィールドおよび前記前のフィールドを時空間的に混合することによってフレームを生成し、(ii)前記時空間的混合において用いるための前記前のフィールドおよび前記次のフィールドの1つまたは複数から複数のフィールド画素を選択するように構成されたモジュールと、
を含み、
前記現在のフィールドの現在の画素の前記静止状態が、(a)前記現在の画素のローカル動作、(b)1つまたは複数の水平方向周辺画素の動作、および(c)前記前のフィールドと前記次のフィールドとの間の前記現在の画素に隣接する複数の画素の複数の変化に基づくシステム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6a】
【図6b】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17a】
【図17b】
【図17c】
【図18a】
【図18b】
【図18c】
【図18d】
【図18e】
【図18f】
【図18g】
【図18h】
【図18i】
【図18j】
【図2】
【図3】
【図4】
【図5】
【図6a】
【図6b】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17a】
【図17b】
【図17c】
【図18a】
【図18b】
【図18c】
【図18d】
【図18e】
【図18f】
【図18g】
【図18h】
【図18i】
【図18j】
【公開番号】特開2013−42526(P2013−42526A)
【公開日】平成25年2月28日(2013.2.28)
【国際特許分類】
【出願番号】特願2012−223983(P2012−223983)
【出願日】平成24年10月9日(2012.10.9)
【分割の表示】特願2009−534575(P2009−534575)の分割
【原出願日】平成19年9月24日(2007.9.24)
【出願人】(591007686)エルエスアイ コーポレーション (93)
【Fターム(参考)】
【公開日】平成25年2月28日(2013.2.28)
【国際特許分類】
【出願日】平成24年10月9日(2012.10.9)
【分割の表示】特願2009−534575(P2009−534575)の分割
【原出願日】平成19年9月24日(2007.9.24)
【出願人】(591007686)エルエスアイ コーポレーション (93)
【Fターム(参考)】
[ Back to top ]