(57)【特許請求の範囲】
【請求項１】
ビットストリームを復号化し、前記ビットストリームを、各ＮｘＮブロックに関する量子化された離散コサイン変換係数、動きベクトル、サイド情報にアンパックするステップと、
ＮｘＮブロックに関する前記量子化された離散コサイン変換係数を、ＭｘＭブロックに関する逆量子化された離散コサイン変換係数にマスキングし逆量子化するステップ（Ｍ≦Ｎ）と、
前記逆量子化された離散コサイン変換係数によって、ＭｘＭブロックの逆離散コサイン変換を実行するステップと、
Ｐフレームの順番をチェックすることによって、Ｐフレームにおける動きベクトルについて、動きベクトルの演算を行うステップであって、第１Ｐフレーム、第２Ｐフレーム、第３Ｐフレーム、第４Ｐフレームのように、Ｐフレームに順番をつけるステップ、第１Ｐフレームは奇数のＰフレーム、第２Ｐフレームは偶数のＰフレーム、第３Ｐフレームは奇数のＰフレームのように定義するステップ、偶数のＰフレームにおける前記動きベクトルをチェックし、前記動きベクトルを、偶数値を有する動きベクトルと奇数値を有する動きベクトルに分割するステップ、奇数のＰフレームにおける前記動きベクトルをチェックし、前記動きベクトルを、偶数値を有する動きベクトルと奇数値を有する動きベクトルに分割するステップ、偶数のＰフレームにおける奇数値を有する動きベクトルについて１方向に精度ロスを生じさせ、さらに奇数のＰフレームにおける奇数値を有する動きベクトルについて別の方向に精度ロスを生じさせるように前記動きベクトルを縮小するステップ、及び、偶数のＰフレームおよび奇数のＰフレームの両方における偶数値を有する動きベクトルについて、精度ロスを生じさせずに前記動きベクトルを縮小するステップを含むステップと、
全てのＢフレームにおける動きベクトルについて、動きベクトルの演算を行うステップと、
上記縮小された動きベクトルを用いることによって解像度のダウンサイズにおける動き補償を実行するステップと、
低解像度のビデオピクチャーを再構築する、または表示するステップとを含むことを特徴とするビデオダウンコンバージョンにおけるドリフトエラーを防ぐ方法。
【請求項２】
ビットストリームを復号化し、前記ビットストリームを、各ＮｘＮのブロックに関する量子化された離散コサイン変換係数、動きベクトル、サイド情報にアンパックするステップと、
ＮｘＮブロックに関する前記量子化された離散コサイン変換係数を、ＭｘＭブロックに関する逆量子化された離散コサイン変換係数にマスキングし逆量子化するステップ（Ｍ≦Ｎ）と、
前記逆量子化された離散コサイン変換係数によって、ＭｘＭブロックの逆離散コサイン変換を実行するステップと、
Ｐフレームの順番をチェックし、Ｐフレームにおける動きベクトルについて、動きベクトルの演算を行い、また、前記動きベクトルの予測モードをチェックし、Ｂフレームにおける動きベクトルについて、動きベクトルの演算を行うステップであって、第１Ｐフレーム、第２Ｐフレーム、第３Ｐフレーム、第４Ｐフレームのように、Ｐフレームに順番をつけるステップ、第１Ｐフレームは奇数のＰフレーム、第２Ｐフレームは偶数のＰフレーム、第３Ｐフレームは奇数のＰフレームのように定義するステップ、偶数のＰフレームにおける前記動きベクトルをチェックし、前記動きベクトルを、偶数値を有する動きベクトルと奇数値を有する動きベクトルに分割するステップ、奇数のＰフレームにおける前記動きベクトルをチェックし、前記動きベクトルを、偶数値を有する動きベクトルと奇数値を有する動きベクトルに分割するステップ、偶数のＰフレームにおける奇数値を有する動きベクトルについて１方向に精度ロスを生じさせ、さらに奇数のＰフレームにおける奇数値を有する動きベクトルについて別の方向に精度ロスを生じさせるように前記動きベクトルを縮小するステップ、偶数のＰフレームおよび奇数のＰフレームの両方における偶数値を有する動きベクトルについて、精度ロスを生じさせずに前記動きベクトルを縮小するステップ、Ｂフレームにおける動きベクトルについて、予測モードをチェックするステップ、前記Ｂフレームにおける前記動きベクトルを、前方向動きベクトルと後方向動きベクトルとに分割するステップ、前記前方向動きベクトルについて、以前のＰフレームにおいて使用される前記動きベクトルの値をチェックするステップ、前記後方向動きベクトルについて、以後のＰフレームにおいて使用される前記動きベクトルの値をチェックするステップ、前記前方向動きベクトルを、奇数値を有する動きベクトルと偶数値を有する動きベクトルとに分割するステップ、前記後方向動きベクトルを、奇数値を有する動きベクトルと偶数値を有する動きベクトルとに分割するステップ、奇数値を有する動きベクトルについて、以前のＰフレームの精度ロスが生じる方向とは別の方向に精度ロスを生じさせるように、前記前方向動きベクトルを縮小するステップ、奇数値を有する動きベクトルについて、以後のＰフレームの精度ロスが生じる方向とは別の方向に精度ロスを生じさせるように、前記後方向動きベクトルを縮小するステップ、及び、偶数値を有する動きベクトルについて、精度ロスを生じさせないように、前記前方向動きベクトルまたは前記後方向動きベクトルを縮小するステップを含むステップと、
上記縮小された動きベクトルを用いることによって解像度のダウンサイズにおける動き補償を実行するステップと、
低解像度のビデオピクチャーを再構築する、または表示するステップとを含むことを特徴とするビデオダウンコンバージョンにおけるドリフトエラーを防ぐ方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ビデオに関するものであり、特に高解像度のビデオストリームを受け取り、低解像度のビデオストリームに変換して表示するビデオダウンコンバージョンを必要とするビデオに関するものである。この方法は、従来より簡単であるが効果的であり、必要最小限のコンピュータ処理でビデオダウンコンバージョンにおける歪み、つまりドリフトエラーを防ぐ方法である。
【０００２】
【従来の技術】
ディジタル・テレビ放送方式の標準規格が世界中で広く採用されている。ＭＰＥＧ−２ビデオコーディング規格が、ビデオの符号化および復号化において選択された。米国において、次世代テレビシステム委員会(Advanced Television System Committee)は、デジタルテレビ放送用に標準テレビ(Standard TV)と、高品位テレビ(High Definition TV)との両方を使用することを決定した。以下、標準テレビ(Standard TV)をＳＤＴＶ、高品位テレビ(High Definition TV)をＨＤＴＶと呼ぶ。オーストラリア、日本のようなその他の国々においても、ＳＤＴＶに加えてＨＤＴＶでデジタルテレビが放送される予定である。欧州デジタルテレビ規格、つまり欧州ディジタル・テレビ放送方式の標準規格（ＤＶＢ）も、ＨＤＴＶ復号化を支持している。
【０００３】
ＳＤＴＶ信号とＨＤＴＶ信号の両方を受信し、復号化するために、デジタルテレビ(Digital TV)受信機は、高解像度のビデオピクチャーを復号化して再生できなければならない。以下、デジタルテレビをＤＴＶと呼ぶ。ＨＤＴＶは、非常に多くのデータプロセスを必要とするので、上記のようなＤＴＶを開発することは、難しく、またコストがかかる。
【０００４】
ＳＤＴＶ用のビデオフォーマットと、ＨＤＴＶ用のビデオフォーマットとの２つの標準的なビデオフォーマットが採用されているが、例として、ＳＤＴＶ用のビデオフォーマットとＨＤＴＶ用のビデオフォーマットとどれほど違うか説明する。
ａ）ＳＤＴＶインターレース方式：７２０画素（水平方向）ｘ４８０画素（垂直方向）ｘ３０（フレーム／秒）＝１０，３６８，０００画素。
ｂ）ＨＤＴＶプログレシブ方式：１２８０画素（水平方向）ｘ７２０画素（垂直方向）ｘ６０（フレーム／秒）＝５５，２９６，０００画素。
上記のａ）とｂ）から分かるように、ＨＤＴＶは、ＳＤＴＶより１秒当たりに５．３倍のデータ量を処理して表示する必要がある。
【０００５】
ハードウェアベースのＨＤＴＶ−ＤＴＶ受像機を開発する場合、ＨＤＴＶピクチャーを復号化するために、もっと多くのＤＲＡＭともっと高い処理能力を必要とする。このため、最終的に販売するとき、ＨＤＴＶ−ＤＴＶ受像機は非常に高価な製品となってしまう。
【０００６】
ハードウェアベースのＨＤＴＶ−ＤＴＶ受像機だけでなく、ソフトウェアベースのＨＤＴＶ−ＤＴＶ受像機も現在開発されている。ＰＣ(パーソナルコンピュータ）の性能がますますアップしており、ＰＣモニタは、すでに高解像度のＨＤＴＶピクチャーを表示する能力を備えている。
【０００７】
しかしながら、例えばペンティアムIII５５０ＭＨｚのような現行のＣＰＵスピードであっても、ＨＤＴＶピクチャーをリアルタイムで復号化して表示する場合、コンピュータの処理能力がまだ不足している。将来的には、ＰＣの能力がますますアップして、ＨＤＴＶビデオが最速のＰＣによって復号化されて再生されることが可能である。しかしながら、性能の低いＰＣは、依然としてＨＤＴＶ−ＤＴＶ番組を復号化して再生することができない。
【０００８】
ＨＤＴＶからＳＤＴＶへのダウンコンバージョンは、性能の高いＰＣでも性能の低いＰＣでもＳＤＴＶ番組だけでなく、ＨＤＴＶ番組も受信し再生できる柔軟性を提供するために考えられている。
【０００９】
同時に映像と音声をリアルタイムに復号化して再生することを実現するために、ＰＣの処理能力は、複雑なスキームを処理できるほど速くないので、ダウンコンバージョンスキームを実行するために、コンピュータを使用することは、必要とされる最も重要なことである。
【００１０】
本発明に関する先行技術は、図１と図２において図示されている。
図１において、図示されているように、高解像度のビデオのビットストリームは、シンタックス復号化またはビットストリームアンパッキングのために、可変長符号復号化部１１に送られる。マスキング・逆量子化部１２において、各８ｘ８ブロックから４ｘ４ブロックがマスクされ、逆量子化される。８ｘ８ブロックから４ｘ４ブロックがマスクされるとき、例えば、各８ｘ８ブロックの右上の４ｘ４ブロックなど、各８ｘ８ブロックの所定の位置にある画素がマスクされる。逆量子化された４ｘ４ブロックは、４ｘ４ブロックの逆離散コサイン変換を実行するために、逆離散コサイン変換部１３に送られる。
【００１１】
動きベクトル演算部１４は、ダウンコンバージョンの割合と一致するように動きベクトルの演算を行う。例えば、この場合、縮小比は２である。解像度のダウンサイズにおける動き補償は、動きベクトル演算部１４において縮小された動きベクトルを用いることによって、動き補償部１５で実行される。
【００１２】
図２は、図１とほぼ同一である。図１と図２の違いは、逆量子化とマスキングを実行する部分である。図２において、可変長符号復号化・逆量子化部２１は、可変長符号復号化と８ｘ８ブロックの逆量子化を実行する。８ｘ８ブロックから４ｘ４ブロックへのマスキングは、逆離散コサイン変換を行う逆離散コサイン変換部２３の前に、マスキング部２２で行われる。それに対して、図１において、４ｘ４ブロックの逆量子化とマスキングは、マスキング・逆量子化部１２において実行される。マスキングと逆量子化において、それほどコンピュータ処理を必要としない。動きベクトルの演算は、動きベクトル演算部２４において実行され、動き補償は、動き補償部２５において実行される。
【００１３】
図１、２において図示されている従来技術のダウンコンバージョンは、直接的なスキームであり、さらに複雑さという点では、非常に簡単である。しかしながら、ドリフトエラーが、実用上有効なスキームを制限する障壁となることがわかっている。ときどきドリフトエラーは、非常にはっきりしており、パニング(panning)とズーミング(zooming)のシーケンスにおいて不快感を与える。ドリフトエラーは、フレーム内符号化(Intra-coded)フレームによってリセットされる。さらに、このようなドリフトエラーは、ＩＰＰＰ……のような構造の符号化されたストリームでは非常に重大である。ここで、Ｉは、フレーム内符号化フレームのことであり、Ｐは、フレーム間符号化(predictive-coded)フレームのことである。
【００１４】
このようなドリフトエラーを生じさせる単純な理由は、最初のＰ（フレーム間符号化）フレームにおいて生じる小さなエラーが、次のフレーム、次の次のフレームへと伝播して歪みが蓄積し、目立つようになるからである。
【００１５】
経験的な結果に基づいて分析した結果、実際の原因は、動きベクトルをダウンサイズするたびに精度が失われているためであることが分かった。複雑でないスキームが好ましいために、図１、２において示されているように、本来の解像度のダウンサイズに基づいて動き補償が実行される。動き補償のダウンサイズと一致させるために、１／２のダウンコンバージョンの場合、２で割ることによって動きベクトルを縮小させなければならない。
【００１６】
上記の操作は、理論的には正しく、多くのシーケンスの場合、画質を良くすることができる。しかしながら、ある特定のシーケンスの場合、ドリフトエラーが非常に目立ち、許容できないほど画質が悪化することが分かっている。
【００１７】
【発明が解決しようとする課題】
上記の簡単なダウンコンバージョンスキームにおけるドリフトエラーは、特にＩＰＰＰ……のようなコーディング構造のシーケンス、またはパニング／ズーミングのシーケンスにおいて、非常にはっきりしている。しかしながら、ビデオシーケンスは、多数のパニング／ズーミングのシーケンスを含んでおり、またＩＰＰＰ……のようなコーディング構造を必要とするケースも多い。そのため、簡単なダウンコンバージョンスキームに基づいてドリフトエラーを除去することが重要である。
【００１８】
さらに、ダウンコンバージョンは、高解像度のビデオデータの処理に伴うコンピュータ処理を減らすことなので、生じるドリフトエラーを除去する方法、またはドリフトエラーの発生を防ぐ方法は、非常に簡単であり、必要とされるコンピュータ処理をかなり少なくしなければならないことも重要である。したがって、本発明のキーポイントは、少ないコンピュータ処理でドリフトエラーを除去するとともに、美しくきれいな画質を提供することである。解析する際に、奇数値を有する動きベクトルは、２で除算されることによって、＋／−０．５の精度ロス(accuracy loss)が生じる。最終的な動きベクトルは、整数でなければならないので、この精度ロスは避けられない。パニングのシーケンスまたはズーミングのシーケンス場合、毎回＋／−０．５の精度ロスが生じるならば、精度ロスが同一方向に蓄積され、数個のＰフレーム後（ほぼ１０フレームとすると）、＋１０または−１０の精度ロスが蓄積される。この場合、数個のＰフレーム後、動きベクトルは、完全に間違っており、したがって、間違った動きベクトルに基づいて参照フレームから間違ったマイクロブロックが得られるという問題が生じる。本発明は、このドリフトエラーの問題を解決するためになされたものであり、ビデオダウンコンバージョンにおけるドリフトエラーを防ぐ方法を提供する。
【００１９】
【課題を解決するための手段】
上記課題を解決するために、本発明の請求項１に記載のビデオダウンコンバージョンにおけるドリフトエラーを防ぐ方法は、ビットストリームを復号化し、前記ビットストリームを、各ＮｘＮブロックに関する量子化された離散コサイン変換係数、動きベクトル、サイド情報にアンパックするステップと、ＮｘＮブロックに関する前記量子化された離散コサイン変換係数を、ＭｘＭブロックに関する逆量子化された離散コサイン変換係数にマスキングし逆量子化するステップ（Ｍ≦Ｎ）と、前記逆量子化された離散コサイン変換係数によって、ＭｘＭブロックの逆離散コサイン変換を実行するステップと、Ｐフレームの順番をチェックすることによって、Ｐフレームにおける動きベクトルについて、動きベクトルの演算を行うステップであって、第１Ｐフレーム、第２Ｐフレーム、第３Ｐフレーム、第４Ｐフレームのように、Ｐフレームに順番をつけるステップ、第１Ｐフレームは奇数のＰフレーム、第２Ｐフレームは偶数のＰフレーム、第３Ｐフレームは奇数のＰフレームのように定義するステップ、偶数のＰフレームにおける前記動きベクトルをチェックし、前記動きベクトルを、偶数値を有する動きベクトルと奇数値を有する動きベクトルに分割するステップ、奇数のＰフレームにおける前記動きベクトルをチェックし、前記動きベクトルを、偶数値を有する動きベクトルと奇数値を有する動きベクトルに分割するステップ、偶数のＰフレームにおける奇数値を有する動きベクトルについて１方向に精度ロスを生じさせ、さらに奇数のＰフレームにおける奇数値を有する動きベクトルについて別の方向に精度ロスを生じさせるように前記動きベクトルを縮小するステップ、及び、偶数のＰフレームおよび奇数のＰフレームの両方における偶数値を有する動きベクトルについて、精度ロスを生じさせずに前記動きベクトルを縮小するステップを含むステップと、全てのＢフレームにおける動きベクトルについて、動きベクトルの演算を行うステップと、上記縮小された動きベクトルを用いることによって解像度のダウンサイズにおける動き補償を実行するステップと、低解像度のビデオピクチャーを再構築する、または表示するステップとを含むことを特徴とするものである。
【００２０】
本発明の請求項２に記載のビデオダウンコンバージョンにおけるドリフトエラーを防ぐ方法は、ビットストリームを復号化し、前記ビットストリームを、各ＮｘＮのブロックに関する量子化された離散コサイン変換係数、動きベクトル、サイド情報にアンパックするステップと、ＮｘＮブロックに関する前記量子化された離散コサイン変換係数を、ＭｘＭブロックに関する逆量子化された離散コサイン変換係数にマスキングし逆量子化するステップ（Ｍ≦Ｎ）と、前記逆量子化された離散コサイン変換係数によって、ＭｘＭブロックの逆離散コサイン変換を実行するステップと、Ｐフレームの順番をチェックし、Ｐフレームにおける動きベクトルについて、動きベクトルの演算を行い、また、前記動きベクトルの予測モードをチェックし、Ｂフレームにおける動きベクトルについて、動きベクトルの演算を行うステップであって、第１Ｐフレーム、第２Ｐフレーム、第３Ｐフレーム、第４Ｐフレームのように、Ｐフレームに順番をつけるステップ、第１Ｐフレームは奇数のＰフレーム、第２Ｐフレームは偶数のＰフレーム、第３Ｐフレームは奇数のＰフレームのように定義するステップ、偶数のＰフレームにおける前記動きベクトルをチェックし、前記動きベクトルを、偶数値を有する動きベクトルと奇数値を有する動きベクトルに分割するステップ、奇数のＰフレームにおける前記動きベクトルをチェックし、前記動きベクトルを、偶数値を有する動きベクトルと奇数値を有する動きベクトルに分割するステップ、偶数のＰフレームにおける奇数値を有する動きベクトルについて１方向に精度ロスを生じさせ、さらに奇数のＰフレームにおける奇数値を有する動きベクトルについて別の方向に精度ロスを生じさせるように前記動きベクトルを縮小するステップ、偶数のＰフレームおよび奇数のＰフレームの両方における偶数値を有する動きベクトルについて、精度ロスを生じさせずに前記動きベクトルを縮小するステップ、Ｂフレームにおける動きベクトルについて、予測モードをチェックするステップ、前記Ｂフレームにおける前記動きベクトルを、前方向動きベクトルと後方向動きベクトルとに分割するステップ、前記前方向動きベクトルについて、以前のＰフレームにおいて使用される前記動きベクトルの値をチェックするステップ、前記後方向動きベクトルについて、以後のＰフレームにおいて使用される前記動きベクトルの値をチェックするステップ、前記前方向動きベクトルを、奇数値を有する動きベクトルと偶数値を有する動きベクトルとに分割するステップ、前記後方向動きベクトルを、奇数値を有する動きベクトルと偶数値を有する動きベクトルとに分割するステップ、奇数値を有する動きベクトルについて、以前のＰフレームの精度ロスが生じる方向とは別の方向に精度ロスを生じさせるように、前記前方向動きベクトルを縮小するステップ、奇数値を有する動きベクトルについて、以後のＰフレームの精度ロスが生じる方向とは別の方向に精度ロスを生じさせるように、前記後方向動きベクトルを縮小するステップ、及び、偶数値を有する動きベクトルについて、精度ロスを生じさせないように、前記前方向動きベクトルまたは前記後方向動きベクトルを縮小するステップを含むステップと、上記縮小された動きベクトルを用いることによって解像度のダウンサイズにおける動き補償を実行するステップと、低解像度のビデオピクチャーを再構築する、または表示するステップとを含むことを特徴とするものである。
【００２８】
【発明の実施の形態】
以下、本発明の実施の形態について、説明する。まず、始めに本発明の概略について説明し、後に図面を用いて具体的に説明する。
ビデオダウンコンバージョンにおけるドリフトエラーを防ぐ方法は、２つある。一方は、より簡単で複雑でなく、多くの場合十分効果がある方法である。もう一方は、かなり複雑であるが、ドリフトエラーの発生を防ぐことができる理論的に完全な方法である。
【００２９】
前者の簡単な方法の場合、Ｐフレームをチェックし記録することが必要である。動きベクトルが奇数値を有するか偶数値を有するかのチェックが行われる。１つのＧＯＰ(Group of Picture)におけるすべてのＰフレームによって精度ロスが蓄積しないようにするために、Ｐフレーム毎に０．５の精度ロスの方向が調整されている。
【００３０】
後者の方法の場合、ＰフレームとＢフレームをチェックすることが必要である。１つのＧＯＰにおけるすべてのＰフレームとＢフレームとによって精度ロスが蓄積しないようにするために、ＰフレームとＢフレーム毎に０．５の精度ロスの方向が調整されている。ここで、Ｂフレームとは、フレーム内挿符号化(bidirectionally-coded)フレームのことである。
【００３１】
高解像度のビットストリームは、可変長符号（ＶＬＤ）復号化部によって復号化される。可変長符号復号化部からの出力は、マスキング・逆量子化部によって４ｘ４ブロックにマスキング(masking)され逆量子化されて、逆離散コサイン変換（ＩＤＣＴ）部に送られる。逆離散コサイン変換部では、逆離散コサイン変換が行われ、４ｘ４ブロックごとに、それぞれの画素値（輝度、色差）が算出される。ここでの、画素値は、Ｉフレームでは、実際の画素値そのものの値となっているが、ＰフレームとＢフレームでは対応する画素値間の差分値となっている。再構築されダウンサイズされた離散コサイン変換ブロックは、表示するために、または動き補償のケースにおいて参照するために、メモリに格納される。
【００３２】
動きベクトルは、１／２のダウンコンバージョンの場合、２で除算される方法で縮小される（１／２は、本明細書中において使用される例である）。本発明は１／２のダウンコンバージョンに限定されることなく、その他のダウンコンバージョンであってもよい。
【００３３】
第１の方法について説明する。奇数値を有する動きベクトルの場合、０．５の精度ロスは、最初のＰフレームにおいて、１つの方向に意図的に生じ、次のＰフレームにおいて、別の方向に生じる。同じようなことがそれ以降のＰフレームにおいても生じる。この操作は、水平方向の動きベクトルと垂直方向の動きベクトルの両方にも適用される。
【００３４】
第２の方法について説明する。Ｐフレームについての上記のステップに加えて、直前のＰフレームと直後のＰフレームから予測されるＢフレームのために、さらにステップが必要とされる。Ｂフレームについての前方向動きベクトルは、その直前のＰフレームにおける方向と異なる方向に０．５の精度ロスを生じさせて縮小される。一方、Ｂフレームについての後方向動きベクトルは、その直後のＰフレームにおける方向と異なる方向に０．５の精度ロスを生じさせて縮小される。
【００３５】
動き補償は、上記のダウンサイズされた動きベクトルを使用することによって、ＰフレームとＢフレームとを再構築するためのダウンサイズ基準に基づいて実行される。
【００３６】
コンピュータ処理を減らし、復号化を速めるために、ファーストＩＤＣＴアルゴリズム、ＩＤＣＴおよび動き補償のためのＭＭＸコーディング、同時ＶＬＤコーディングを使用して、現行のＣＰＵ能力に基づいてリアルタイムＨＤＴＶ復号化を行う。
【００３７】
ドリフトエラーの発生を防ぐための、または生じるドリフトエラーを除去するための発明された２つの方法の実施の形態が、図３、４、５、６、７、８によって説明されている。発明された方法についての説明は、先行技術に基づいている。先行技術に本発明の方法を適用することによって、同じように本発明の方法が説明されている。
【００３８】
図３において、適応動きベクトルの演算が説明されており、この方法は、かなり簡単であるが、効果的なスキームである。それは、Ｐフレームにおける動きベクトルのみが演算されるからである。
【００３９】
高解像度のビデオのストリームが、可変長符号復号化を行うために可変長符号復号化部３１に送られ、ストリーム中の符号化されたビットは、各ブロックについてのＤＣＴ係数、動きベクトル、サイド情報にアンパックされる。マスキング・逆量子化部３２において、マスキングおよび４ｘ４ブロックの逆量子化が行われる。その後、逆離散コサイン変換部３３において、４ｘ４ブロックの逆離散コサイン変換が行われる。
【００４０】
適応動きベクトル演算部３４において、動き補償部３６で実行されるダウンサイズ動き補償と一致するように、Ｐ（１方向予測）フレームにおける動きベクトルが縮小される。全てのＢ（双方向予測）フレームについて、通常／従来の動きベクトルの演算が、動き補償部３６で実行されるダウンサイズ動き補償と一致するように、Ｂフレームにおける動きベクトルを縮小させるために行われる。
【００４１】
適応動きベクトル演算部３４において、Ｐフレームは、第１のＰフレーム、第２のＰフレーム、第３のＰフレーム、第４のＰフレームとして記録されており、動きベクトルの演算は、Ｐフレームの順番によって異なって実行される。奇数値を有する動きベクトルは、例えば縮小係数２で縮小されるとき、＋／−０．５の精度ロスを生じさせることが分かっている。これは、動きベクトルが最終的に整数でなければならないので、避けることができない。しかしながら、このＰフレームについて＋０．５の精度ロスを生じさせ、直後のＰフレームについて−０．５の精度ロスを生じさせる縮小スキームを実行することによって、動きベクトルの精度におけるロスが蓄積しないようにできる。Ｐフレームは、次のＰフレームとＢフレームを予測するための参照として使用される。ＰフレームからＰフレームへ伝播される精度ロスを制御して減らすことができるならば、参照されるＰフレームは非常に役に立つであろう。それに対して、Ｂフレームは、他のフレームを予測するために参照として使用されないので、Ｂフレームにおける精度ロスは、重要でなく、Ｂフレームにおける精度ロスによって生じるドリフトエラーは、Ｐフレームにおける精度ロスによって生じるドリフトエラーと比べてそれほど目立たない。
【００４２】
通常動きベクトル演算部３５において、全てのＢフレームにおける動きベクトルは、Ｐフレームのように特別なことを考慮しないで、動き補償部３６で実行されるダウンサイズ動き補償と一致するように縮小される。
【００４３】
図４において、適応動きベクトルの演算方法２が説明されている。この方法は、動きベクトルについての適応縮小スキームを、ＰフレームとＢフレームの両方に適用することによって、ドリフトエラーの発生を防ぐことと生じるドリフトエラーを除去することとをより効果的に行うことができる。
【００４４】
高解像度のビデオのストリームが、可変長符号復号化を行うために可変長符号復号化部４１に送られ、ストリーム中の符号化されたビットは、各ブロックについてのＤＣＴ係数、動きベクトル、サイド情報にアンパックされる。マスキング・逆量子化部４２において、マスキングおよび４ｘ４ブロックの逆量子化が行われる。その後、逆離散コサイン変換部４３において、４ｘ４ブロックの逆離散コサイン変換が行われる。
【００４５】
適応動きベクトル演算部４４において、動き補償部４６で実行されるダウンサイズ動き補償と一致するように、Ｐフレーム（１方向予測）における動きベクトルが縮小される。全てのＢフレーム（双方向予測）について、通常／従来の動きベクトルの演算が、動き補償部４６で実行されるダウンサイズ動き補償と一致するように、Ｂフレームにおける動きベクトルを縮小させるために行われる。
【００４６】
適応動きベクトル演算部４４において、Ｐフレームは、第１のＰフレーム、第２のＰフレーム、第３のＰフレーム、第４のＰフレームとして記録されており、動きベクトルの演算は、Ｐフレームの順番によって異なって実行される。奇数値を有する動きベクトルは、例えば縮小係数２で縮小されるとき、＋／−０．５の精度ロスを生じさせることが分かっている。これは、動きベクトルが最終的に整数でなければならないので、避けることができない。しかしながら、このＰフレームについて＋０．５の精度ロスを生じさせ、直後のＰフレームについて−０．５の精度ロスを生じさせる縮小スキームを実行することによって、動きベクトルの精度におけるロスが蓄積しないようにできる。Ｐフレームは、次のＰフレームとＢフレームを予測するための参照として使用される。ＰフレームからＰフレームへ伝播される精度ロスを制御して減らすことができるならば、参照されるＰフレームは非常に役に立つであろう。
【００４７】
Ｂフレームは、他のフレームを予測するために参照として使用されないので、Ｂフレームにおける精度ロスは、重要でなく、Ｂフレームにおける精度ロスによって生じるドリフトエラーは、Ｐフレームにおける精度ロスによって生じるドリフトエラーと比べて目立たない。しかしながら、ある特定のシーケンスの場合、精度ロスが＋／−１であっても問題であり、この精度ロスによって画質が明らかに低下する。
【００４８】
図４において示された方法は、全てのＰフレームおよびＢフレームについて、動きベクトルの縮小における精度ロスから生じる可能性がある全てのものを排除することである。
【００４９】
動きベクトルの縮小において、Ｐフレームは、精度ロスが生じないように制御されるならば、Ｂフレームにおける精度ロスの最大値は、＋／−１となる。このＢフレームにおける精度ロスによっても、ある特定のシーケンスにおいて目に見える歪みが生じる。
【００５０】
適応動きベクトル演算部４５において、Ｂフレームにおける動きベクトルは、どちらの予測モードで符号化されたかどうかチェックされる。動きベクトルが、前方向動きベクトルであるならば、さらにその直前のＰフレームがどちらの方向に精度ロスを生じさせているか、つまり＋０．５かまたは−０．５かチェックされる。動きベクトルが、後方向動きベクトルであるならば、さらにその直後のＰフレームがどちらの方向に精度ロスを生じさせているか、つまり＋０．５かまたは−０．５かチェックされる。この情報に基づいて、Ｂフレームにおける動きベクトルの縮小は、＋１または−１の精度ロスを避けるように行われる。
【００５１】
動きベクトルの２つの演算方法は、図５、６、７、８においてさらに詳細に説明されている。
図５は、詳細なフローチャートによって適応動きベクトルの演算方法１を詳細に示す。図５は、適応動きベクトルの演算方法１についての実施の形態を示し、図６は、適応動きベクトルの演算方法１についての別の実施の形態を示す。
【００５２】
図５のステップＳ５０１において、ビットストリームは、ＰフレームであるかＢフレームであるかチェックされる。ビットストリームがＢフレームであるならば、演算方法１において、特別に考慮されることなく従来の動きベクトルの演算が行われる。例えば、ステップＳ５０３において、ＭＶ≧０ならば、（ＭＶ＋１）／２の演算を行い、ＭＶ＜０ならば、（ＭＶ−１）／２の演算を行う。ここで、ＭＶとは、動きベクトル(motion vector)のことである。ステップＳ５０１において、ビットストリームがＰフレームであると判定されたならば、ステップＳ５０２において、さらに処理するために、Ｐフレームの順番が記録され、奇数のＰフレームであるか、偶数のＰフレームであるか判定される。
【００５３】
第１のＰフレームが奇数のＰフレームであるとするならば、第２のＰフレームが偶数のＰフレームであり、第３のＰフレームは奇数のＰフレームであり、以下交互に偶数のＰフレーム、奇数のＰフレームとなる。全ての偶数のＰフレームにおける動きベクトルは、＋０．５の精度ロス（負の値を有する動きベクトルの場合、−０．５の精度ロス）を伴って縮小され、それに対して、全ての奇数のＰフレームにおける動きベクトルは、−０．５の精度ロス（正の値を有する動きベクトルの場合、＋０．５の精度ロス）を伴って縮小される。
【００５４】
ステップＳ５０４において、偶数のＰフレームにおける動きベクトルは、奇数値を有する動きベクトルと偶数値を有する動きベクトルとに分割される。奇数値を有する動きベクトルは、動きベクトルを縮小するために、ステップＳ５０６に送られる。ステップＳ５０６において、奇数かつ正の値を有する動きベクトルの場合、動きベクトルを縮小する際に、＋０．５の精度ロスを生じ、奇数かつ負の値を有する動きベクトルの場合、動きベクトルを縮小する際に、−０．５の精度ロスを生じる。また、偶数値を有する動きベクトルは、動きベクトルを縮小するために、ステップＳ５０７に送られる。ステップＳ５０７において、動きベクトルの縮小の際に、精度ロスは全く生じない。
【００５５】
ステップＳ５０５において、奇数のＰフレームにおける動きベクトルは、奇数値を有する動きベクトルと偶数値を有する動きベクトルとに分割される。奇数値を有する動きベクトルは、動きベクトルを縮小するために、ステップＳ５０９に送られる。ステップＳ５０９において、奇数かつ正の値を有する動きベクトルの場合、動きベクトルを縮小する際に、−０．５の精度ロスを生じ、奇数かつ負の値を有する動きベクトルの場合、＋０．５の精度ロスを生じる。また、偶数値を有する動きベクトルは、動きベクトルを縮小するために、ステップＳ５０８に送られる。ステップＳ５０８において、動きベクトルの縮小の際に、精度ロスは全く生じない。
【００５６】
ステップＳ５１０において、水平方向と垂直方向の両方において縮小された動きベクトルは、ダウンサイズ動き補償を行うために、各ミクロブロックに出力される。ここで、ＭＶｓは動きベクトル、ＭＶｘは水平方向の動きベクトル、ＭＶｙは、垂直方向の動きベクトルを表す。
【００５７】
なお、偶数のＰフレームについての破線で囲まれたファンクションは、奇数のＰフレームについての破線で囲まれたファンクションと交換されてもよい。図５は、単に例を示す。
【００５８】
ステップＳ５０６とステップＳ５０７は、図６のステップＳ６０４において示されているように、１つにまとめることが可能である。それは、１つにまとめても最終的な結果が同じだからである。
【００５９】
図６は、図５において示された実施の形態とは別の実施の形態を示す。
図６のステップＳ６０１において、ビットストリームは、ＰフレームであるかＢフレームであるかチェックされる。ビットストリームがＢフレームであるならば、演算方法１において、特別に考慮されることなく従来の動きベクトルの演算が行われる。例えば、ステップＳ６０３において、ＭＶ≧０ならば、（ＭＶ＋１）／２の演算を行い、ＭＶ＜０ならば、（ＭＶ−１）／２の演算を行う。ここで、ＭＶとは、動きベクトル(motion vector)のことである。ステップＳ６０１において、ビットストリームがＰフレームであると判定されたならば、ステップＳ６０２において、さらに処理するために、Ｐフレームの順番が記録され、奇数のＰフレームであるか、偶数のＰフレームであるか判定される。
【００６０】
第１のＰフレームが奇数のＰフレームであるとするならば、第２のＰフレームが偶数のＰフレームであり、第３のＰフレームは奇数のＰフレームであり、以下交互に偶数のＰフレーム、奇数のＰフレームとなる。全ての偶数のＰフレームにおける動きベクトルは、＋０．５の精度ロス（負の値を有する動きベクトルの場合、−０．５の精度ロス）を伴って縮小され、それに対して、全ての奇数のＰフレームにおける動きベクトルは、−０．５の精度ロス（正の値を有する動きベクトルの場合、＋０．５の精度ロス）を伴って縮小される。
【００６１】
ステップＳ６０４において、偶数のＰフレームにおける動きベクトルは、奇数値を有する動きベクトルと偶数値を有する動きベクトルとに分割されない。奇数値／偶数値を有する動きベクトルは、ステップＳ６０４において縮小が実行される。ステップＳ６０４において、奇数かつ正の値を有する動きベクトルの場合、動きベクトルを縮小する際に、＋０．５の精度ロスを生じ、奇数かつ負の値を有する動きベクトルの場合、動きベクトルを縮小する際に、−０．５の精度ロスを生じる。偶数値を有する動きベクトルは、ステップＳ６０４において、縮小の際に、精度ロスは全く生じない。この演算において、動きベクトルの値における小数点以下の端数は無視される。
【００６２】
ステップＳ６０５において、奇数のＰフレームにおける動きベクトルは、奇数値を有する動きベクトルと偶数値を有する動きベクトルとに分割される。奇数値を有する動きベクトルは、動きベクトルを縮小するために、ステップＳ６０７に送られる。ステップＳ６０７において、奇数かつ正の値を有する動きベクトルの場合、動きベクトルを縮小する際に、−０．５の精度ロスを生じ、奇数かつ負の値を有する動きベクトルの場合、＋０．５の精度ロスを生じる。偶数値を有する動きベクトルは、動きベクトルを縮小するために、ステップＳ６０６に送られる。ステップＳ６０６において、動きベクトルの縮小の際に、精度ロスは全く生じない。
【００６３】
ステップＳ６０８において、水平方向と垂直方向の両方において縮小された動きベクトルは、ダウンサイズ動き補償を行うために、各ミクロブロックに出力される。ここで、ＭＶｓは動きベクトル、ＭＶｘは水平方向の動きベクトル、ＭＶｙは、垂直方向の動きベクトルを表す。
【００６４】
図７、８は、詳細なフローチャートによって適応動きベクトルの演算方法２を示す。
Ｐフレームにおける動きベクトルの処理スキームまたは縮小スキームは図５と図６のものと同一である。Ｂフレームにおける動きフレームの縮小は、ここで説明される。
【００６５】
図７のステップＳ７０１において、ビットストリームは、ＰフレームであるかＢフレームであるかチェックされる。ビットストリームがＰフレームであるならば、ステップＳ７０２において、さらに処理するために、Ｐフレームの順番が記録され、奇数のＰフレームであるか、偶数のＰフレームであるか判定される。
【００６６】
第１のＰフレームが奇数のＰフレームであるとするならば、第２のＰフレームが偶数のＰフレームであり、第３のＰフレームは奇数のＰフレームであり、以下交互に偶数のＰフレーム、奇数のＰフレームとなる。全ての偶数のＰフレームにおける動きベクトルは、＋０．５の精度ロス（負の値を有する動きベクトルの場合、−０．５の精度ロス）を伴って縮小され、それに対して、全ての奇数のＰフレームにおける動きベクトルは、−０．５の精度ロス（正の値を有する動きベクトルの場合、＋０．５の精度ロス）を伴って縮小される。
【００６７】
ステップＳ７０３において、偶数のＰフレームにおける動きベクトルは、奇数値を有する動きベクトルと偶数値を有する動きベクトルとに分割される。奇数値を有する動きベクトルは、動きベクトルを縮小するために、ステップＳ７０５に送られる。ステップＳ７０５において、奇数かつ正の値を有する動きベクトルの場合、動きベクトルを縮小する際に、＋０．５の精度ロスを生じ、奇数かつ負の値を有する動きベクトルの場合、動きベクトルを縮小する際に、−０．５の精度ロスを生じる。偶数値を有する動きベクトルは、動きベクトルを縮小するために、ステップＳ７０６に送られる。ステップＳ７０６において、動きベクトルの縮小の際に、精度ロスは全く生じない。
【００６８】
ステップＳ７０４において、奇数のＰフレームにおける動きベクトルは、奇数値を有する動きベクトルと偶数値を有する動きベクトルとに分割される。奇数値を有する動きベクトルは、動きベクトルを縮小するために、ステップＳ７０８に送られる。ステップＳ７０８において、奇数かつ正の値を有する動きベクトルの場合、動きベクトルを縮小する際に、−０．５の精度ロスを生じ、奇数かつ負の値を有する動きベクトルの場合、＋０．５の精度ロスを生じる。偶数値を有する動きベクトルは、動きベクトルを縮小するために、ステップＳ７０７に送られる。ステップＳ７０７において、動きベクトルの縮小の際に、精度ロスは全く生じない。
【００６９】
ステップＳ７０１において、ビットストリームがＢフレームであると判定されたならば、図８のステップＳ８０１において、Ｂフレームにおける動きベクトルがチェックされ、前方向動きベクトルと後方向動きベクトルとに分割される。ここで、Ｆ−ＭＶは、前方向動きベクトルを表し、Ｂ−ＭＶは、後方向動きベクトルを表す。
【００７０】
ステップＳ８０１において、動きベクトルが前方向動きベクトルであるならば、ステップＳ８０２において、直前のＰフレームがチェックされる。次にステップＳ８０４において、直前のＰフレームが偶数のＰフレームか奇数のＰフレームか判定される。ここでは、偶数のＰフレームにおける動きベクトルが図５または図６に示された実施の形態に基づいて縮小される、つまり、奇数かつ正の値を有する動きベクトルの場合、縮小の際に＋０．５の精度ロスを生じ、奇数かつ負の値を有する動きベクトルの場合、縮小の際に−０．５の精度ロスを生じるとする。それに対して、奇数のＰフレームにおける動きベクトルが、図５および図６に示された実施の形態に基づいて縮小される、つまり、奇数かつ正の値を有する動きベクトルの場合、縮小の際に−０．５の精度ロスを生じ、奇数かつ負の値を有する動きベクトルの場合、縮小の際に＋０．５の精度ロスを生じるとする。
【００７１】
ステップＳ８０６において、前方向動きベクトルは、偶数値を有する動きベクトルと奇数値を有する動きベクトルとに分割される。ここで、前方向動きベクトルの予測されるＰフレームは、動きベクトルを縮小するための偶数のＰフレームである。奇数値を有する動きベクトルは、ステップＳ８０８において、動きベクトルの縮小の際に、奇数かつ正の値を有する動きベクトルの場合、＋０．５の精度ロスを生じ、奇数かつ負の値を有する動きの場合、−０．５の精度ロスを生じる。偶数値を有する動きベクトルは、ステップＳ８０９において、動きベクトルの縮小の際に、精度ロスを生じない。
【００７２】
ステップＳ８１０において、前方向動きベクトルは、偶数値を有する動きベクトルと奇数値を有する動きベクトルとに分割されない。ここで、前方向動きベクトルの予測されるＰフレームは、動きベクトルを縮小するための奇数のＰフレームである。ステップＳ８１０において、偶数値を有する動きベクトルと奇数値を有する動きベクトルについて、動きベクトルの縮小を行う。動きベクトルの縮小の際に、奇数かつ正の値を有する動きベクトルの場合、−０．５の精度ロスが生じ、奇数かつ負の値を有する動きベクトルの場合、＋０．５の精度ロスが生じる。さらに偶数値を有するベクトルの場合、動きベクトル縮小の際に、精度ロスが生じない。
【００７３】
ステップＳ８０１において、動きベクトルが後方向動きベクトルであるならば、ステップＳ８０３において、直後のＰフレームがチェックされる。ステップＳ８０５において、直後のＰフレームが奇数のＰフレームか偶数のＰフレームか判定される。ここでは、偶数のＰフレームにおける動きベクトルが図５または図６に示された実施の形態に基づいて縮小される、つまり、奇数かつ正の値を有する動きベクトルの場合、縮小の際に＋０．５の精度ロスを生じ、奇数かつ負の値を有する動きベクトルの場合、縮小の際に−０．５の精度ロスを生じるとする。それに対して、奇数のＰフレームにおける動きベクトルが、図５および図６に示された実施の形態に基づいて縮小される、つまり、奇数かつ正の値を有する動きベクトルの場合、縮小の際に−０．５の精度ロスを生じ、奇数かつ負の値を有する動きベクトルの場合、縮小の際に＋０．５の精度ロスを生じるとする。
【００７４】
ステップＳ８０７において、後方向動きベクトルは、偶数値を有する動きベクトルと奇数値を有する動きベクトルとに分割される。ここで、後方向動きベクトルの予測されるＰフレームは、動きベクトルを縮小するための偶数のＰフレームである。奇数値を有する動きベクトルは、ステップＳ８１１において、動きベクトルの縮小の際に、奇数かつ正の値を有する動きベクトルの場合、＋０．５の精度ロスを生じ、奇数かつ負の値を有する動きベクトルの場合、−０．５の精度ロスを生じる。偶数値を有する動きベクトルは、ステップＳ８１２において、動きベクトルの縮小の際に、精度ロスを生じない。
【００７５】
ステップＳ８１３において、前方向動きベクトルは、偶数値を有する動きベクトルと奇数値を有する動きベクトルとに分割されない。ここで、前方向動きベクトルの予測されるＰフレームは、動きベクトルを縮小するための奇数のＰフレームである。ステップＳ８１３において、偶数値を有する動きベクトルと奇数値を有する動きベクトルについて、動きベクトルの縮小を行う。動きベクトルの縮小の際に、奇数かつ正の値を有する動きベクトルの場合、−０．５の精度ロスが生じ、奇数かつ負の値を有する動きベクトルの場合、＋０．５の精度ロスが生じる。さらに偶数値を有する動きベクトルの場合、動きベクトル縮小の際に、精度ロスが生じない。
【００７６】
ステップＳ７０９において、水平方向と垂直方向の両方において縮小された動きベクトルは、ダウンサイズ動き補償を行うために、各ミクロブロックに出力される。ここで、ＭＶｓは動きベクトル、ＭＶｘは水平方向の動きベクトル、ＭＶｙは、垂直方向の動きベクトルを表す。
【００７７】
なお、本発明において８ｘ８ブロックと４ｘ４ブロックが使用されているが、これらに限定されることはない。ダウンコンバージョンの割合によって適切なブロックが選択される。さらに、本発明は１／２のダウンコンバージョンに限定されることなく、その他の割合のダウンコンバージョンであってもよい。
【００７８】
また、本発明に係るダウンコンバージョンにおけるドリフトエラーを防ぐ方法は、インターレース方式のビデオプロセスにおいても、プログレッシブ方式のビデオプロセスにおいても使用されることが可能である。
また、本発明に係るダウンコンバージョンにおけるドリフトエラーを防ぐ方法は、例えば拡大比が２の場合、動きベクトルを２倍に拡大することによって、アップコンバージョンにも適用することが可能である。
また、本発明に係るダウンコンバージョンにおけるドリフトエラーを防ぐ方法は、精度ロスだけでなく、その他のエラーを生じさせる要因が伝播することによって蓄積されるロスを防ぐために適用することも可能である。
【００７９】
【発明の効果】
本発明に係るダウンコンバージョンにおけるドリフトエラーを防ぐ方法は、ビデオダウンコンバージョンにおけるドリフトエラーを防ぐことにおいて、非常に有効であり、また効果的である。例えば、１１ビットストリームについて、本発明に係る方法を使用するダウンコンバージョンと本発明に係る方法を使用しないダウンコンバージョンとを比較するテストによれば、本発明に係る方法のスキームに切り換えた後、ビデオダウンコンバージョンにおいて生じる、目立ちかつ不適切なドリフトエラーが完全に消失する。
【００８０】
本発明に係るダウンコンバージョンにおけるドリフトエラーを防ぐ方法は、最適なビデオ復号化装置において実施される上で非常に簡単であり、動きベクトルの縮小における精度ロスによって、ドリフトエラーが生じることなく、より少ないコンピュータ処理でより速いビデオダウンコンバージョン復号化を行うことができる。
【図面の簡単な説明】
【図１】  従来の簡単なダウンコンバージョンスキームに関する先行技術の説明図を示す。
【図２】  従来の簡単なダウンコンバージョンスキームに関するまた別の先行技術の説明図を示す。
【図３】  適応動きベクトルの演算の説明図を示す。
【図４】  適応動きベクトルの演算の別の説明図を示す。
【図５】  適応動きベクトルの演算方法１のフローチャートを示す。
【図６】  適応動きベクトルの演算方法１の別のフローチャートを示す。
【図７】  適応動きベクトルの演算方法２のフローチャートを示す。
【図８】  適応動きベクトルの演算方法２のフローチャートを示す。
【符号の説明】
１１…可変長符号復号化部、  １２…マスキング・逆量子化部、  １３…逆離散コサイン変換部、  １４…動きベクトル演算部、  １５…動き補償部、  ２１…可変長符号復号化・逆量子化部、  ２２…マスキング部、  ２３…逆離散コサイン変換部、  ２４…動きベクトル演算部、  ２５…動き補償部、  ３１…可変長符号復号化部、  ３２…マスキング・逆量子化部、  ３３…逆離散コサイン変換部、  ３４…適応動きベクトル演算部、  ３５…通常動きベクトル演算部、  ３６…動き補償部、  ４１…可変長符号復号化部、  ４２…マスキング・逆量子化部、  ４３…逆離散コサイン変換部、  ４４…適応動きベクトル演算部、  ４５…適応動きベクトル演算部、  ４６…動き補償部。
【図１】
0003862479.tif 000002
【図２】
0003862479.tif 000003
【図３】
0003862479.tif 000004
【図４】
0003862479.tif 000005
【図５】
0003862479.tif 000006
【図６】
0003862479.tif 000007
【図７】
0003862479.tif 000008
【図８】
0003862479.tif 000009