以下本発明の実施の形態について、図面を参照しながら説明する。
(実施の形態1)
図1は、本実施の形態における画像符号化装置の構成を示すブロック図である。画像符号化装置1000は、符号化処理部1100と、符号化処理部1100の動作を制御する符号化制御部1200とを備える。
符号化処理部1100は、動画像をブロックごとに符号化することによって符号化ストリームを生成する。このような符号化処理部1100は、減算器1110、直交変換部1121、量子化部1122、エントロピー符号化部1123、逆量子化部1124、逆直交変換部1125、加算器1126、デブロッキングフィルタ1130、フレームメモリ1140、面内予測部1150、動き補償部1170、動き検出部1160、及びスイッチ1180を備える。
減算器1110は、動画像を取得するとともに、スイッチ1180から予測画像(予測ブロック)を取得する。そして、減算器1110は、その動画像に含まれる符号化対象ブロック(対象ブロック)から予測画像を減算することによって残差画像(残差ブロック)を生成する。
直交変換部1121は、減算器1110によって生成された残差画像に対して、例えば離散コサイン変換などの直交変換を行うことによって、その残差画像を複数の周波数係数からなる係数ブロックに変換する。量子化部1122は、その係数ブロックに含まれる各周波数係数を量子化することによって、量子化された係数ブロックを生成する。
エントロピー符号化部1123は、量子化部1122によって量子化された係数ブロックと、動き検出部1160によって検出された動きベクトル、ブロックパーティション情報(後述)、及び参照画像特定情報等をエントロピー符号化(可変長符号化)することによって符号化ストリームを生成する。
逆量子化部1124は、量子化部1122によって量子化された係数ブロックを逆量子化する。逆直交変換部1125は、その逆量子化された係数ブロックに含まれる各周波数係数に対して逆離散コサイン変換などの逆直交変換を行うことによって、復号残差画像(復号残差ブロック)を生成する。
加算器1126は、スイッチ1180から取得した予測画像と、逆直交変換部1125によって生成された復号残差画像とを加算することによって、局所復号画像(復号ブロック)を生成する。
なお、本実施の形態においては、上記の直交変換部1121、量子化部1122、エントロピー符号化部1123、逆量子化部1124、逆直交変換部1125、及び加算器1126で、符号化部1120を構成しているが、これに限定されない。例えば、動き検出部1160又は符号化制御部1200等をさらに加えてもよい。
デブロッキングフィルタ1130は、加算器1126によって生成された局所復号画像のブロック歪みを除去し、その局所復号画像をフレームメモリ1140に格納する。
面内予測部1150は、加算器1126によって生成された局所復号画像を用いて対象ブロックに対して面内予測を行うことによって予測画像(予測ブロック)を生成する。
動き検出部1160は、動画像に含まれる対象ブロックに対して動きベクトルを検出し、その検出された動きベクトル、ブロックパーティション情報、及び参照画像特定情報を動き補償部1170とエントロピー符号化部1123とに出力する。なお、ブロックパーティション情報とは、対象ブロック(参照ブロック)の形状を示す情報である。また、参照画像特定情報とは、フレームメモリ1140に記憶されている複数の参照画像のうちの1つを特定するための情報である。
ブロックパーティション情報は、例えば、図7に示されるように、参照ブロックの水平サイズH_SIZEと、参照ブロックの垂直サイズV_SIZEと、従来例(特許文献1、特許文献2、非特許文献1、非特許文献2)に記載されているρ及びθとを含む。
ρ及びθは、参照ブロックのパーティションを決めるパラメータであり、ρ及びθで定義される線分と直交する直線をパーティション分割境界と定義する。ρは、画素ブロックの中心からパーティション分割境界に直交する線分の長さを表す。θは、画素ブロックの中心から水平方向右側を0°とし、反時計回りを正としたときの線分の角度を表す。
また、パーティション分割境界の左側の領域をパーティション0、パーティション分割境界の右側の領域をパーティション1と定義する。言い換えれば、パーティション分割境界で区画される2つのパーティションのうち、画素ブロックの左上の画素を含むパーティションをパーティション0、もう一方をパーティション1と定義する。
動き補償部1170は、フレームメモリ1140に格納されている参照画像と、動き検出部1160によって検出された動きベクトルとを用いることによって、対象ブロックに対して動き補償を行う。動き補償部1170は、このような動き補償によって対象ブロックに対する予測画像(予測ブロック)を生成する。
なお、本発明に係る動き補償部1170は、矩形状の対象ブロックに対する動き補償と、非矩形状の対象ブロックに対する動き補償とを行なうことができる。また、本明細書中の「矩形状」には、正方形と長方形とが該当する。一方、本明細書中の「非矩形状」には、矩形状に該当しない形状、具体的には、台形、平行四辺形、三角形及び五角形等の四角形以外の多角形、円形、楕円形等が該当する。
スイッチ1180は、対象ブロックが面内予測符号化される場合には、面内予測部1150によって生成された予測画像を減算器1110および加算器1126に出力する。一方、スイッチ1180は、対象ブロックが画面間予測符号化される場合には、動き補償部1170によって生成された予測画像を減算器1110および加算器1126に出力する。
次に、図2Aを参照して、動き補償部(動き補償装置)1170の構成の一例を説明する。図2Aは、動き補償部1170のブロック図の一例である。図2Aに示される動き補償部1170は、参照ブロックメモリ1171と、フレームメモリ転送制御部1172と、参照ブロックメモリ転送制御部1173と、動き補償処理部1174とを備える。
参照ブロックメモリ1171は、フレームメモリ2140に記憶されている参照画像のうちの一部を記憶するため記憶部である。具体的には、参照画像のうちの動き補償処理部1174での処理に用いられる一部が記憶される。
なお、参照ブロックメモリ1171は、典型的には、フレームメモリ2140より記憶容量が小さく、且つフレームメモリ2140よりデータの読み出し速度が速い記憶部である。典型的には、フレームメモリ2140はDRAM(Dynamic Random Access Memory)であり、参照ブロックメモリ1171はSRAM(Static Random Access Memory)であるが、これには限定されない。
フレームメモリ転送制御部1172は、参照画像の一部の領域である画素ブロックの画素データを、フレームメモリ2140から参照ブロックメモリ1171に転送する。なお、画素ブロックとは、動き補償処理部1174で用いられる参照ブロックを含む矩形状の領域を指す。また、参照ブロックとは、参照画像の一部の領域であって、対象ブロックに対する動き補償に用いられる領域である。ここで、対象ブロックと参照ブロックとは、通常同じ形状となる。すなわち、対象ブロックが矩形状の場合には参照ブロックも矩形状となり、対象ブロックが非矩形状の場合には参照ブロックも非矩形状となる。
そこで、フレームメモリ転送制御部1172は、画素ブロックの位置及び形状を、動き検出部1160から取得した動きベクトル、ブロックパーティション情報、及び参照画像特定情報に基づいて特定する。そして、参照ブロックが矩形状の場合、フレームメモリ転送制御部1172は、参照画像そのものの画素ブロックの画素データを、フレームメモリ2140から参照ブロックメモリ1171に転送する。一方、参照ブロックが非矩形状の場合、フレームメモリ転送制御部1172は、参照ブロックを含む(典型的には、外接する)画素ブロックを参照画像の中から特定し、特定した画素ブロックの画素データを、フレームメモリ2140から参照ブロックメモリ1171に転送する。
ただし、フレームメモリ転送制御部1172は、実際には、参照ブロックが矩形状であるか非矩形状であるかにかかわらず、特定した画素ブロックの画素データに加えて、当該画素ブロックの周辺画素の画素データも合わせて転送する。具体的には、図8に示されるように、画素ブロックの画素データと、画素ブロック周辺の画素の画素データとを合わせて転送する。詳細は後述する。
参照ブロックメモリ転送制御部1173は、参照ブロックの画素データを、参照ブロックメモリ1171から動き補償処理部1174に転送する。参照ブロックメモリ転送制御部1173は、参照ブロックの位置及び形状を、動き検出部1160から取得した動きベクトル、ブロックパーティション情報、及び参照画像特定情報に基づいて特定する。
そして、参照ブロックが矩形状の場合、参照ブロックメモリ転送制御部1173は、参照ブロックメモリ1171に記憶されている画素ブロックの画素データを、そのまま動き補償処理部1174に転送する。一方、参照ブロックが非矩形状の場合、参照ブロックメモリ転送制御部1173は、矩形状の画素ブロックから非矩形状の参照ブロックを抽出し、抽出した参照ブロックの画素データを、参照ブロックメモリ1171から動き補償処理部1174に転送する。
ただし、参照ブロックメモリ転送制御部1173は、実際には、参照ブロックが矩形状であるか、非矩形状であるかにかかわらず、抽出した参照ブロックの画素データに加えて、当該参照ブロックの周辺画素の画素データも合わせて転送する。詳細は後述する。
動き補償処理部1174は、参照ブロックメモリ1171に記憶されている画素ブロックに含まれる参照ブロックを用いて、より具体的には、参照ブロックメモリ転送制御部1173によって転送された参照ブロックを用いて、対象ブロックの予測ブロックを生成する。
次に、図2Bを参照して、図1及び図2Aに示される画像符号化装置1000及び動き補償部1170の動作を説明する。図2Bは、動き補償部1170の処理を中心とした画像符号化装置1000の動作を示すフローチャートの一例である。
まず、動き検出部1160は、対象ブロックの動き検出を行い、動きベクトルとブロックパーティション情報と参照画像特定情報とを動き補償部1170に出力する(ステップS1110)。ここで、対象ブロックが矩形状の場合には、ブロックパーティション情報は省略することができる。
次に、フレームメモリ転送制御部1172は、動き検出部1160から取得した動きベクトル、ブロックパーティション情報、及び参照画像特定情報に基づいて、フレームメモリ1140に記憶されている参照画像のうち、転送の対象となる画素ブロックのアドレスを算出する処理を実行する(ステップS1120)。
画素ブロック内の座標(画素ブロック内座標)の例を図9に示す。原点は、画素ブロックの左上端で、水平方向(x座標)は右方向が正の方向とし、垂直方向(y座標)は下方向が正の方向とする。また、参照画像内の座標(参照画像内座標)の例を図10に示す。原点は、参照画像の左上端で、水平方向(x座標)は右方向が正の方向とし、垂直方向(y座標)は下方向が正の方向とする。
フレームメモリ転送制御部1172は、まず、画素ブロックの左上端を(0,0)とする座標系で画素ブロックのアドレスを算出し、算出したアドレスを参照画像の左上端を(0,0)とする座標系に変換する処理を行う。アドレス算出処理の詳細は、後述する。そして、フレームメモリ転送制御部1172は、特定した画素ブロックの画素データを、フレームメモリ1140から参照ブロックメモリ1171に転送する(ステップS1130)。
次に、参照ブロックメモリ転送制御部1173は、参照ブロックメモリ1171に記憶されている画素ブロックのうち、転送の対象となる参照ブロックを抽出する処理を実行する(ステップS1140)。以下、画素ブロックのうちの転送の対象となる画素(すなわち、参照ブロックを構成する画素)を「有効画素」、転送の対象とならない画素を「無効画素」と標記する。そして、参照ブロックメモリ転送制御部1173は、抽出された参照ブロックの画素データを、参照ブロックメモリ1171から動き補償処理部1174に転送する(ステップS1150)。
次に、動き補償処理部1174は、動き検出部1160から取得した動きベクトルと、参照ブロックメモリ転送制御部1173によって転送された参照ブロックとを用いて、対象ブロックに対する動き補償処理を実行する(ステップS1160)。そして、動き補償処理部1174は、動き補償処理によって生成された予測ブロックの画素データを、減算器1110に出力する。
減算器1110は、動き補償処理部1174から取得した予測ブロックの画素データを、対応する対象ブロックの画素データから減算することにより、残差ブロックを生成する(ステップS1170)。そして、減算器1110は、生成した残差ブロックの画素データを、符号化部1120に出力する。
符号化部1120は、減算器1110から取得した残差ブロックの画素データを符号化して符号化ストリームとして出力すると共に、ローカルエンコードして得られる復号ブロックをフレームメモリ1140に格納する(ステップS1180)。
具体的には、残差ブロックを直交変換部1121で直交変換し、量子化部1122で量子化する。そして、量子化部1122で生成された量子化係数をエントロピー符号化部1123でエントロピー符号化して、符号化ストリームを生成する。また、エントロピー符号化部1123の処理と並行して、量子化部1122で生成された量子化係数を逆量子化部1124で逆量子化し、逆直交変換部1125で逆直交変換し、加算器1126で予測ブロックを加算し、デブロッキングフィルタ1130でフィルタ処理をして得られる復号ブロックをフレームメモリ1140に格納する。
次に、図3A及び図3Bを参照して、動き補償部1170の構成及び動作の他の例を説明する。図3Aは、動き補償部1170のブロック図の他の例である。図3Bは、動き補償部1170の処理を中心とした画像符号化装置1000の動作を示すフローチャートの他の例である。なお、図2A及び図2Bとの共通点には同一の符号を付して詳しい説明は省略する。
図3Aに示される動き補償部1170は、図2Aの構成に加えて、参照ブロックメモリ状態管理部1175をさらに備える。参照ブロックメモリ状態管理部1175は、参照画像の画素データが参照ブロックメモリ1171に記憶されているか否かを、予め定められた大きさの転送ブロック単位で管理する。そして、フレームメモリ転送制御部1172は、特定した画素ブロックのうち、参照ブロックメモリ1171に記憶されていない画素データを、参照ブロックメモリ状態管理部1175で管理されている転送ブロック単位で選択的に転送する。
図11の(a)は、参照ブロックメモリ1171の構成例である。図11の(b)は、参照画像の座標と、参照ブロックメモリ1171のバンクとの関係例(解像度1920×1080pixelのとき)である。図12は、参照ブロックメモリ状態管理部1175に保持されている情報の一例である。
まず、参照ブロックメモリ1171の記憶領域は、図11の(a)に示されるように、所定のサイズ(この例では、16×16画素)のバンク(転送ブロック)に区画されている。そして、参照ブロックメモリ1171に対する画素データの書き込みは、このバンク単位で行なわれる。
参照ブロックメモリ状態管理部1175は、参照ブロックメモリ1171に保持されている画素データの参照画像内座標での水平座標を特定する情報(x_offset)と、参照ブロックメモリ1171に保持されている画素データの参照画像内座標での垂直座標を特定する情報(y_offset)と、参照ブロックメモリ1171に保持されている参照画像を特定する情報(refidx)と、動き補償に有意な画素データを保持しているかどうかの状態を表す情報(状態)とを、バンク単位で管理する。
なお、「x_offset」は、例えば、画素ブロックの頂点(左上端)の参照画像内座標での水平座標の上位4ビットに相当する。「y_offset」は、例えば、画素ブロックの頂点(左上端)の参照画像内座標での垂直座標の上位4ビットに相当する。「refidx」は、例えば、参照画像のピクチャ番号(参照画像特定情報)である。「状態」には、例えば、当該バンクに有意な画素が保持されている場合に「valid」が、有意な画素が保持されていない場合に「invalid」が設定される。
具体的には、フレームメモリ転送制御部1172が算出した参照画像内での画素ブロックの座標情報から、参照ブロックメモリ1171に保持されている画素データのx_offset、y_offset、refidx、及び状態を更新し、保持する。そして、保持した情報をフレームメモリ転送制御部1172、及び参照ブロックメモリ転送制御部1173に出力する。
参照ブロックメモリ状態管理部1175に記憶されている情報は、例えば、参照ブロックメモリ1171が図11の(a)で示される構成をし、図11の(b)に示されるが参照画像の一部を記憶している場合に、図12に示すような情報である。
フレームメモリ転送制御部1172は、加算器1126から出力された復号画像をフレームメモリ1140に参照画像として書き込む。また、動き検出部1160から取得したブロックパーティション情報と、参照画像特定情報と、動きベクトルとから動き補償をするために必要な参照画像を特定し、参照ブロックを含む画素ブロックの参照画像内座標での水平座標と垂直座標とを計算する。
そして、フレームメモリ転送制御部1172は、計算した水平座標及び垂直座標と、参照ブロックメモリ状態管理部1175から取得した参照ブロックメモリ1171に保持されている画素データのx_offset、y_offset、refidx、及び状態とを比較して、参照ブロックメモリ1171に必要な画素データが記憶されていなければ、フレームメモリ1140から当該画素データを含むバンクを読み出し、参照ブロックメモリ1171に書き込む。
参照ブロックメモリ状態管理部1175は、フレームメモリ転送制御部1172が読み出して参照ブロックメモリ1171に書き込んだ画素データのx_offset、y_offset、refidx、及び状態を更新する。一方、参照ブロックメモリ1171に必要な画素データが記憶されていれば、フレームメモリ1140からバンクは読み出さない。
図3Bに示されるフローチャートは、ステップS1122及びステップS1132が追加されている点が、図2Bに示されるフローチャートと相違する。すなわち、フレームメモリ転送制御部1172は、図3Bに示されるように、画素ブロックのアドレス算出処理(ステップS1120)の後、特定した画素ブロック全体が既に参照ブロックメモリ1171に格納されているかを確認する(ステップS1122)。
特定した画素ブロック全体が参照ブロックメモリ1171に格納されていなければ(ステップS1122でN)、フレームメモリ転送制御部1172は、特定した画素ブロックのうち、参照ブロックメモリ1171に記憶されていない画素データを、参照ブロックメモリ状態管理部1175で管理されている転送ブロック単位で選択的に転送する(ステップS1130)。そして、参照ブロックメモリ状態管理部1175は、フレームメモリ転送制御部1172による転送結果に応じて、参照ブロックメモリの状態を更新する(ステップS1132)。
図4は、本実施の形態における画像復号装置の構成を示すブロック図である。画像復号装置2000は、復号処理部2100と、復号処理部2100の動作を制御する復号制御部2200とを備える。
復号処理部2100は、符号化ストリームをブロックごとに復号することによって復号画像を生成する。このような復号処理部2100は、エントロピー復号部2111、逆量子化部2112、逆直交変換部2113、加算器2120、デブロッキングフィルタ2130、フレームメモリ2140、面内予測部2150、動き補償部2160、及びスイッチ2170を備える。
エントロピー復号部2111は、符号化ストリームを取得し、その符号化ストリームをエントロピー復号(可変長復号)し、量子化係数ブロックと、動きベクトルと、ブロックパーティション情報と、参照画像特定情報とを生成する。
逆量子化部2112は、エントロピー復号部2111によるエントロピー復号によって生成された量子化係数ブロックを逆量子化する。逆直交変換部2113は、その逆量子化された係数ブロックに含まれる各周波数係数に対して逆離散コサイン変換などの逆直交変換を行うことによって、復号残差画像(復号残差ブロック)を生成する。
なお、本実施の形態においては、上記のエントロピー復号部2111、逆量子化部2112、及び逆直交変換部2113で、復号部2110を構成しているが、これに限定されない。
加算器2120は、スイッチ2170から取得した予測画像(予測ブロック)と、逆直交変換部2113によって生成された復号残差画像とを加算することによって復号画像(復号ブロック)を生成する。
デブロッキングフィルタ2130は、加算器2120によって生成された復号画像のブロック歪みを除去し、その復号画像をフレームメモリ2140に格納するとともに、その復号画像を出力する。
面内予測部2150は、加算器2120によって生成された復号画像を用いて復号対象ブロック(対象ブロック)に対して面内予測を行うことによって予測画像(予測ブロック)を生成する。
動き補償部2160は、フレームメモリ2140に格納されている画像を参照画像と、エントロピー復号部2111によるエントロピー復号によって生成された動きベクトルとを用いて、対象ブロックに対して動き補償を行う。動き補償部2160は、このような動き補償によって対象ブロックに対する予測画像(予測ブロック)を生成する。
スイッチ2170は、対象ブロックが面予測符号化されている場合には、面内予測部2150によって生成された予測画像を加算器2120に出力する。一方、スイッチ2170は、対象ブロックが画面間予測符号化されている場合には、動き補償部2160によって生成された予測画像を加算器2120に出力する。
次に、図5Aを参照して、動き補償部(動き補償装置)2160の構成の一例を説明する。図5Aは、動き補償部2160のブロック図の一例である。図5Aに示される動き補償部2160は、参照ブロックメモリ2161と、フレームメモリ転送制御部2162と、参照ブロックメモリ転送制御部2163と、動き補償処理部2164とを備える。なお、図5Aに示される動き補償部2160の各機能ブロックは、図2Aに示される同一名称の各機能ブロックに対応する。
なお、フレームメモリ転送制御部2162は、エントロピー復号部2111から動きベクトル、ブロックパーティション情報、及び参照画像特定情報を取得する点が図2Aのフレームメモリ転送制御部1172と相違する。また、参照ブロックメモリ転送制御部2163は、エントロピー復号部2111からブロックパーティション情報を取得する点が図2Aの参照ブロックメモリ転送制御部1173と相違する。さらに、動き補償処理部2164は、生成した予測ブロックを加算器2120に出力する点が図2Aの動き補償処理部1174と相違する。
次に、図5Bを参照して、図4及び図5Aに示される画像復号装置2000及び動き補償部2160の動作を説明する。図5Bは、動き補償部2160の処理を中心とした画像復号装置2000の動作を示すフローチャートの一例である。
まず、エントロピー復号部2111は、符号化ストリームをエントロピー復号して、量子化係数ブロックと、動きベクトルと、ブロックパーティション情報と、参照画像特定情報とを生成する(ステップS1210)。
次に、フレームメモリ転送制御部2162は、エントロピー復号部2111から取得した動きベクトル、ブロックパーティション情報、及び参照画像特定情報に基づいて、転送対象となる画素ブロックのアドレスを算出する処理を実行する(ステップS1220)。なお、この処理は、図2BのステップS1120と共通する処理であって、詳細は後述する。そして、フレームメモリ転送制御部2162は、特定した画素ブロックの画素データを、フレームメモリ2140から参照ブロックメモリ2161に転送する(ステップS1230)。
次に、参照ブロックメモリ転送制御部2163は、転送の対象となる参照ブロックを抽出する処理を実行する(ステップS1240)。なお、この処理は、図2BのステップS1140と共通する処理であって、詳細は後述する。そして、参照ブロックメモリ転送制御部2163は、抽出された参照ブロックの画素データを、参照ブロックメモリ2161から動き補償処理部2164に転送する(ステップS1250)。
次に、動き補償処理部2164は、エントロピー復号部2111から取得した動きベクトルと、参照ブロックメモリ転送制御部2163によって転送された参照ブロックとを用いて、対象ブロックに対する動き補償処理を実行する(ステップS1260)。そして、動き補償処理部2164は、動き補償処理によって生成された予測ブロックの画素データを、加算器2120に出力する。
加算器2120は、逆直交変換部2113から取得した復号残差ブロックの画素データと、動き補償処理部2164から取得した予測ブロックの対応する画素データとを加算して、復号ブロック(復号画像)を生成する(ステップS1270)。なお、復号残差ブロックは、エントロピー復号部2111で生成された量子化係数ブロックを、逆量子化部2112で逆量子化し、逆直交変換部2113で逆直交変換することによって得られる。
そして、加算器2120で生成された復号画像は、デブロッキングフィルタ2130でフィルタ処理され、復号画像として出力されると共に、参照画像としてフレームメモリ2140に格納される(ステップS1280)。
次に、図6A及び図6Bを参照して、動き補償部2160の構成及び動作の他の例を説明する。図6Aは、動き補償部2160のブロック図の他の例である。図6Bは、動き補償部2160の処理を中心とした画像復号装置2000の動作を示すフローチャートの他の例である。なお、図5A及び図5Bとの共通点には同一の符号を付して詳しい説明は省略する。
図6Aに示される動き補償部2160は、図5Aの構成に加えて、参照ブロックメモリ状態管理部2165をさらに備える。参照ブロックメモリ状態管理部2165の機能は、図3Aの参照ブロックメモリ状態管理部1175と共通するので、説明は省略する。
フレームメモリ転送制御部2162は、図6Bに示されるように、画素ブロックのアドレス算出処理(ステップS1220)の後、特定した画素ブロック全体が既に参照ブロックメモリ2161に格納されていなければ(ステップS1222でN)、特定した画素ブロックのうち、参照ブロックメモリ2161に記憶されていない画素データを、参照ブロックメモリ状態管理部2165で管理されている転送ブロック単位で選択的に転送する(ステップS1230)。そして、参照ブロックメモリ状態管理部2165は、フレームメモリ転送制御部2162による転送結果に応じて、参照ブロックメモリの状態を更新する(ステップS1232)。
図13~図19を用いて、フレームメモリ転送制御部1172の参照ブロックを含む矩形状の画素ブロックのアドレス算出の詳細な動作説明を行う。図13は、フレームメモリ転送制御部1172が行う画素ブロックのアドレス算出処理の全体の流れを示すフローチャートである。なお、以下の説明は、フレームメモリ転送制御部2162にも同様に当てはまる。
まず、フレームメモリ転送制御部1172は、動き検出部1160から取得したブロックパーティション情報を用いて、動き補償処理で必要となる参照ブロックが非矩形状であるかどうかを判定する(ステップS2301)。
ステップS2301の判定の結果、参照ブロックが矩形状である場合(ステップS2301でY)には、矩形状の参照ブロックに一致する画素ブロックの左上画素とサイズとを算出する(ステップS2302)。
一方、ステップS2301の判定の結果、参照ブロックが非矩形状である場合(ステップS2301でNO)には、各非矩形パーティションに外接する矩形状の画素ブロックの左上座標とサイズとを導出する(ステップS2303)。
次に、動き補償処理部1174でのフィルタ処理に必要な画素を画素ブロックに加えるために、ステップS2302又はステップS2303で算出した画素ブロックの左上画素とサイズとを修正する処理を行う(ステップS2304)。
例えば、H.264の動き補償で用いられる6タップフィルタを用いて、水平方向の小数画素生成を行う場合は、図8に示されるように、画素ブロックの左上画素の水平座標を-2補正し、水平サイズを+5補正する。同様に、H.264の動き補償で用いられる6タップフィルタを用いて、垂直方向の小数画素生成を行う場合は、図8に示されるように、画素ブロックの左上画素の垂直座標を-2補正し、垂直サイズを+5補正する。なお、H.264の動き補償で用いられる6タップフィルタ処理を例にしたが、必ずしもそうである必要はなく、いかなるフィルタ処理であっても構わない。
次に、フレームメモリ転送制御部1172は、動き検出部1160から取得した動きベクトル情報と、画素ブロックの座標情報とを用いて、ステップS2304で導出した各パーティションに外接する画素ブロックの左上座標を動きベクトル分だけ並行移動して、参照画像内の矩形状の画素ブロックの左上座標を求める(ステップS2305)。
すなわち、ステップS2302及びステップS2303では、一旦、対象ブロックの位置での画素ブロックの左上座標を算出しており、この仮の左上座標をステップS2305で動きベクトル分だけ平行移動することにより、本来の参照ブロックの位置における画素ブロックの左上座標を得ることができる。
次に、フレームメモリ転送制御部1172は、各矩形状の画素ブロックの参照画像内の左上座標を、参照画像のフレームメモリ1140内でのアドレスに変換することによって、フレームメモリ1140から読み出す矩形状の画素ブロックを構成する画素データのアドレスを計算する(ステップS2306)。
図14は、各非矩形パーティションに外接する矩形状の画素ブロックの左上座標とサイズとを導出する処理の流れを示すフローチャートである。なお、図14~図19で示すフローチャートでは、ブロックパーティション情報として、参照ブロックの水平サイズH_SIZEと、参照ブロックの垂直サイズV_SIZEと、従来例(特許文献1、特許文献2、非特許文献1、非特許文献2)に記載されているρとθを用いて説明する。
ステップS2401では、動き検出部1160から取得したパーティション情報θが、0°<θ<90°かどうかを判定する。すなわち、ρとθとで定義される線分が、図7の第1象限(右上の領域)に位置するか否かを判定する。そして、0°<θ<90°である場合は、ステップS2402の処理を行う。ステップS2402では、0°<θ<90°のときの参照ブロックに外接する画素ブロックの左上座標とサイズとを導出する処理を行う(ステップS2402)。一方、0°<θ<90°でない場合は、ステップS2403の処理を行う(ステップS2401)。
ステップS2403では、動き検出部1160から取得したブロックパーティション情報θが、90°<θ<180°かどうかを判定する。すなわち、ρとθとで定義される線分が、図7の第2象限(左上の領域)に位置するか否かを判定する。そして、90°<θ<180°である場合は、ステップS2404の処理を行う。ステップS2404では、90°<θ<180°のときの参照ブロックに外接する画素ブロックの左上座標とサイズとを導出する処理を行う(ステップS2404)。一方、90°<θ<180°でない場合は、ステップS2405の処理を行う(ステップS2403)。
ステップS2405では、動き検出部1160から取得したパーティション情報θが、180°<θ<270°かどうかを判定する。すなわち、ρとθとで定義される線分が、図7の第3象限(左下の領域)に位置するか否かを判定する。そして、180°<θ<270°である場合は、ステップS2406の処理を行う。ステップS2406では、180°<θ<270°のときの参照ブロックに外接する画素ブロックの左上座標とサイズとを導出する処理を行う(ステップS2406)。一方、180°<θ<270°でない場合は、ステップS2407の処理を行う(ステップS2405)。
ステップS2407では、動き検出部1160から取得したパーティション情報θが、270°<θ<360°かどうかを判定する。すなわち、ρとθとで定義される線分が、図7の第4象限(右下の領域)に位置するか否かを判定する。そして、270°<θ<360°である場合は、ステップS2408の処理を行う。ステップS2408では、270°<θ<360°のときの参照ブロックに外接する画素ブロックの左上座標とサイズとを導出する処理を行う(ステップS2408)。一方、270°<θ<360°でない場合は、ステップS2409の処理を行う(ステップS2407)。
ステップS2409では、θ=90°、180°、270°、または360°のときの参照ブロックに外接する画素ブロックの左上座標とサイズとを導出する処理を行う(ステップS2409)。
図15は、0°<θ<90°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理の流れを示すフローチャートである。なお、図15~図19で示すフローチャートでは、ブロックパーティション情報と水平座標情報とからパーティション分割境界の垂直座標を導出するf(x)という関数と、ブロックパーティション情報と垂直座標情報とからパーティション分割境界の水平座標を導出するg(x)とを用いているが、この関数を下記式1及び式2に示す。
ステップS2501では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<f(H_SIZE-1)<V_SIZEかどうかを判定する。そして、0<f(H_SIZE-1)<V_SIZEである場合は、ステップS2502の処理を行う。一方、0<f(H_SIZE-1)<V_SIZEでない場合は、ステップS2512の処理を行う(ステップS2501)。
ステップS2502では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<g(0)<H_SIZEかどうかを判定する。そして、0<g(0)<H_SIZEである場合は、ステップS2503の処理を行う。一方、0<g(0)<H_SIZEでない場合は、ステップS2507の処理を行う(ステップS2502)。
ステップS2507では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<f(0)<V_SIZEかどうかを判定する。そして、0<f(0)<V_SIZEである場合は、ステップS2508の処理を行う。一方、0<f(0)<V_SIZEでない場合は、ステップS2512の処理を行い(ステップS2507)、0°<θ<90°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理を終了する。
ステップS2503では、パーティション0に外接する画素ブロックの左上画素の参照ブロック内座標を(0,0)とし(ステップS2503)、ステップS2504の処理を行う。ステップS2504では、パーティション0に外接する画素ブロックの水平サイズw=H_SIZE,垂直サイズh=V_SIZEとし(ステップS2504)、ステップS2505の処理を行う。
ステップS2505では、パーティション1に外接する画素ブロックの左上画素の参照ブロック内座標を(g(0),0)とし(ステップS2505)、ステップS2506の処理を行う。ステップS2506では、パーティション1に外接する画素ブロックの水平サイズw=H_SIZE-g(0),垂直サイズh=f(H_SIZE-1)とし(ステップS2506)、0°<θ<90°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理を終了する。
すなわち、ステップS2503~ステップS2506では、図7に示されるように、パーティション分割境界が画素ブロックの上辺及び右辺と交差する場合のパーティション0及びパーティション1に外接する画素ブロックの左上座標とサイズとを導出している。
なお、この例では、パーティション分割境界に接する2つのパーティション0、1の両方について、左上座標とサイズとを導出したが、パーティション0、1のどちらが参照ブロックであるかを特定して、特定された側の左上座標とサイズとを導出するようにしてもよい。これは、図15~図19の各処理に共通する。
ステップS2508では、パーティション0に外接する画素ブロックの左上画素の参照ブロック内座標を(0,0)とし(ステップS2508)、ステップS2509の処理を行う。ステップS2509では、パーティション0に外接する画素ブロックの水平サイズw=H_SIZE,垂直サイズh=f(H_SIZE-1)とし(ステップS2509)、ステップS2510の処理を行う。
ステップS2510では、パーティション1に外接する画素ブロックの左上画素の参照ブロック内座標を(0,f(0))とし(ステップS2510)、ステップS2511の処理を行う。ステップS2511では、パーティション1に外接する画素ブロックの水平サイズw=H_SIZE,垂直サイズh=V_SIZE-f(0)とし(ステップS2511)、0°<θ<90°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理を終了する。
すなわち、ステップS2508~ステップS2511では、パーティション分割境界が画素ブロックの左辺及び右辺と交差する場合のパーティション0及びパーティション1に外接する画素ブロックの左上座標とサイズとを導出している。
ステップS2512では、パーティション0に外接する画素ブロックの左上画素の参照ブロック内座標を(0,0)とし(ステップS2512)、ステップS2513の処理を行う。ステップS2513では、パーティション0に外接する画素ブロックの水平サイズw=g(V_SIZE-1),垂直サイズh=V_SIZEとし(ステップS2513)、ステップS2514の処理を行う。
ステップS2514では、パーティション1に外接する画素ブロックの左上画素の参照ブロック内座標を(g(0),0)とし(ステップS2514)、ステップS2515の処理を行う。ステップS2515では、パーティション1に外接する画素ブロックの水平サイズw=H_SIZE-g(0),垂直サイズh=V_SIZEとし(ステップS2515)、0°<θ<90°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理を終了する。
すなわち、ステップS2512~ステップS2515では、パーティション分割境界が画素ブロックの上辺及び下辺と交差する場合のパーティション0及びパーティション1に外接する画素ブロックの左上座標とサイズとを導出している。
なお、図16~図18についても上記と同様に、パーティション分割境界が画素ブロックのどの辺と交差するかを場合分けながら、各パーティションに外接する画素ブロックの左上座標とサイズとを算出している。
図16は、90°<θ<180°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理の流れを示すフローチャートである。
ステップS2601では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<f(0)<V_SIZEかどうかを判定する。そして、0<f(0)<V_SIZEである場合は、ステップS2602の処理を行う。一方、0<f(0)<V_SIZEでない場合は、ステップS2612の処理を行う(ステップS2601)。
ステップS2602では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<g(0)<H_SIZEかどうかを判定する。そして、0<g(0)<H_SIZEである場合は、ステップS2603の処理を行う。一方、0<g(0)<H_SIZEでない場合は、ステップS2607の処理を行う(ステップS2602)。
ステップS2607では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<f(H_SIZE-1)<V_SIZEかどうかを判定する。そして、0<f(H_SIZE-1)<V_SIZEである場合は、ステップS2608の処理を行う。一方、0<f(H_SIZE-1)<V_SIZEでない場合は、ステップS2612の処理を行い(ステップS2607)、90°<θ<180°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理を終了する。
ステップS2603では、パーティション0に外接する画素ブロックの左上画素の参照ブロック内座標を(0,0)とし(ステップS2603)、ステップS2604の処理を行う。ステップS2604では、パーティション0に外接する画素ブロックの水平サイズw=g(0),垂直サイズh=f(0)とし(ステップS2604)、ステップS2605の処理を行う。
ステップS2605では、パーティション1に外接する画素ブロックの左上画素の参照ブロック内座標を(0,0)とし(ステップS2605)、ステップS2606の処理を行う。ステップS2606では、パーティション1に外接する画素ブロックの水平サイズw=H_SIZE,垂直サイズh=V_SIZEとし(ステップS2606)、90°<θ<180°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理を終了する。
ステップS2608では、パーティション0に外接する画素ブロックの左上画素の参照ブロック内座標を(0,0)とし(ステップS2608)、ステップS2609の処理を行う。ステップS2609では、パーティション0に外接する画素ブロックの水平サイズw=H_SIZE,垂直サイズh=f(0)とし(ステップS2609)、ステップS2610の処理を行う。
ステップS2610では、パーティション1に外接する画素ブロックの左上画素の参照ブロック内座標を(0,f(H_SIZE-1))とし(ステップS2610)、ステップS2611の処理を行う。ステップS2611では、パーティション1に外接する画素ブロックの水平サイズw=H_SIZE,垂直サイズh=V_SIZE-f(H_SIZE-1)とし(ステップS2611)、90°<θ<180°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理を終了する。
ステップS2612では、パーティション0に外接する画素ブロックの左上画素の参照ブロック内座標を(0,0)とし(ステップS2612)、ステップS2613の処理を行う。ステップS2613では、パーティション0に外接する画素ブロックの水平サイズw=g(0),垂直サイズh=V_SIZEとし(ステップS2613)、ステップS2614の処理を行う。
ステップS2614では、パーティション1に外接する画素ブロックの左上画素の参照ブロック内座標を(g(V_SIZE-1),0)とし(ステップS2614)、ステップS2615の処理を行う。ステップS2615では、パーティション1の外接矩形の水平サイズw=H_SIZE-g(V_SIZE-1),垂直サイズh=V_SIZEとし(ステップS2615)、90°<θ<180°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理を終了する。
図17は、180°<θ<270°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理の流れを示すフローチャートである。
ステップS2701では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<f(0)<V_SIZEかどうかを判定する。そして、0<f(0)<V_SIZEである場合は、ステップS2702の処理を行う。一方、0<f(0)<V_SIZEでない場合は、ステップS2712の処理を行う(ステップS2701)。
ステップS2702では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<f(H_SIZE-1)<V_SIZEかどうかを判定する。そして、0<f(H_SIZE-1)<V_SIZEである場合は、ステップS2703の処理を行う。一方、0<f(H_SIZE-1)<V_SIZEでない場合は、ステップS2707の処理を行う(ステップS2702)。
ステップS2707では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<f(H_SIZE-1)<V_SIZEかどうかを判定する。そして、0<f(H_SIZE-1)<V_SIZEである場合は、ステップS2708の処理を行う。一方、0<f(H_SIZE-1)<V_SIZEでない場合は、ステップS2712の処理を行い(ステップS2707)、180°<θ<270°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理を終了する。
ステップS2703では、パーティション0に外接する画素ブロックの左上画素の参照ブロック内座標を(0,0)とし(ステップS2703)、ステップS2704の処理を行う。ステップS2704では、パーティション0に外接する画素ブロックの水平サイズw=H_SIZE,垂直サイズh=f(H_SIZE-1)とし(ステップS2704)、ステップS2705の処理を行う。
ステップS2705では、パーティション1に外接する画素ブロックの左上画素の参照ブロック内座標を(0,f(0))とし(ステップS2705)、ステップS2706の処理を行う。ステップS2706では、パーティション1に外接する画素ブロックの水平サイズw=H_SIZE,垂直サイズh=V_SIZE-f(0)とし(ステップS2706)、180°<θ<270°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理を終了する。
ステップS2708では、パーティション0に外接する画素ブロックの左上画素の参照ブロック内座標を(0,0)とし(ステップS2708)、ステップS2709の処理を行う。ステップS2709では、パーティション0に外接する画素ブロックの水平サイズw=H_SIZE,垂直サイズh=V_SIZEとし(ステップS2709)、ステップS2710の処理を行う。
ステップS2710では、パーティション1に外接する画素ブロックの左上画素の参照ブロック内座標を(0,f(0))とし(ステップS2710)、ステップS2711の処理を行う。ステップS2711では、パーティション1に外接する画素ブロックの水平サイズw=g(V_SIZE-1),垂直サイズh=V_SIZE-f(0)とし(ステップS2711)、180°<θ<270°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理を終了する。
ステップS2712では、パーティション0に外接する画素ブロックの左上画素の参照ブロック内座標を(0,0)とし(ステップS2712)、ステップS2713の処理を行う。ステップS2713では、パーティション0に外接する画素ブロックの水平サイズw=g(V_SIZE-1),垂直サイズh=V_SIZEとし(ステップS2713)、ステップS2714の処理を行う。
ステップS2714では、パーティション1に外接する画素ブロックの左上画素の参照ブロック内座標を(g(0),0)とし(ステップS2714)、ステップS2715の処理を行う。ステップS2715では、パーティション1の外接矩形の水平サイズw=H_SIZE-g(0),垂直サイズh= V_SIZEとし(ステップS2715)、180°<θ<270°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理を終了する。
図18は、270°<θ<360°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理の流れを示すフローチャートである。
ステップS2801では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<f(H_SIZE-1)<V_SIZEかどうかを判定する。そして、0<f(H_SIZE-1)<V_SIZEである場合は、ステップS2802の処理を行う。一方、0<f(H_SIZE-1)<V_SIZEでない場合は、ステップS2812の処理を行う(ステップS2801)。
ステップS2802では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<f(0)<V_SIZEかどうかを判定する。そして、0<f(0)<V_SIZEである場合は、ステップS2803の処理を行う。一方、0<f(0)<V_SIZEでない場合は、ステップS2807の処理を行う(ステップS2802)。
ステップS2807では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<f(H_SIZE-1)<V_SIZEかどうかを判定する。そして、0<f(H_SIZE-1)<V_SIZEである場合は、ステップS2808の処理を行う。一方、0<f(H_SIZE-1)<V_SIZEでない場合は、ステップS2812の処理を行い(ステップS2807)、270°<θ<360°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理を終了する。
ステップS2803では、パーティション0に外接する画素ブロックの左上画素の参照ブロック内座標を(0,0)とし(ステップS2803)、ステップS2804の処理を行う。ステップS2804では、パーティション0の外接矩形の水平サイズw=H_SIZE,垂直サイズh=f(0)とし(ステップS2804)、ステップS2805の処理を行う。
ステップS2805では、パーティション1に外接する画素ブロックの左上画素の参照ブロック内座標を(0,f(H_SIZE-1))とし(ステップS2805)、ステップS2806の処理を行う。ステップS2806では、パーティション1に外接する画素ブロックの水平サイズw=H_SIZE,垂直サイズh=V_SIZE-f(H_SIZE-1)とし(ステップS2806)、270°<θ<360°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理を終了する。
ステップS2808では、パーティション0に外接する画素ブロックの左上画素の参照ブロック内座標を(0,0)とし(ステップS2808)、ステップS2809の処理を行う。ステップS2809では、パーティション0に外接する画素ブロックの水平サイズw=H_SIZE,垂直サイズh=V_SIZEとし(ステップS2809)、ステップS2810の処理を行う。
ステップS2810では、パーティション1に外接する画素ブロックの左上画素の参照ブロック内座標を(g(V_SIZE-1),f(H_SIZE-1))とし(ステップS2810)、ステップS2811の処理を行う。ステップS2811では、パーティション1に外接する画素ブロックの水平サイズw=H_SIZE-g(V_SIZE-1),垂直サイズh=V_SIZE-f(H_SIZE-1)とし(ステップS2811)、270°<θ<360°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理を終了する。
ステップS2812では、パーティション0に外接する画素ブロックの左上画素の参照ブロック内座標を(0,0)とし(ステップS2812)、ステップS2813の処理を行う。ステップS2813では、パーティション0に外接する画素ブロックの水平サイズw=g(0),垂直サイズh=V_SIZEとし(ステップS2813)、ステップS2814の処理を行う。
ステップS2814では、パーティション1に外接する画素ブロックの左上画素の参照ブロック内座標を(g(V_SIZE-1),0)とし(ステップS2814)、ステップS2815の処理を行う。ステップS2815では、パーティション1に外接する画素ブロックの水平サイズw=H_SIZE-g(V_SIZE-1),垂直サイズh=V_SIZEとし(ステップS2815)、270°<θ<360°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理を終了する。
図19は、θ=0°,90°,180°,270°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理の流れを示すフローチャートである。
ステップS2901では、動き検出部1160から取得したブロックパーティション情報のθから、θ=0°かどうかを判定する。そして、θ=0°である場合は、ステップS2902の処理を行う。一方、θ=0°でない場合は、ステップS2906の処理を行う(ステップS2901)。
ステップS2906では、動き検出部1160から取得したブロックパーティション情報のθから、θ=90°かどうかを判定する。そして、θ=90°である場合は、ステップS2907の処理を行う。一方、θ=90°でない場合は、ステップS2911の処理を行う(ステップS2906)。
ステップS2911では、動き検出部1160から取得したブロックパーティション情報のθから、θ=180°かどうかを判定する。そして、θ=180°である場合は、ステップS2912の処理を行う。一方、θ=180°でない場合は、ステップS2916の処理を行う(ステップS2911)。
ステップS2916では、動き検出部1160から取得したブロックパーティション情報のθから、θ=270°かどうかを判定する。そして、θ=270°である場合は、ステップS2917の処理を行う(ステップS2916)。
ステップS2902では、パーティション0に外接するが層ブロックの左上画素の参照ブロック内座標を(0,0)とし(ステップS2902)、ステップS2903の処理を行う。ステップS2903では、パーティション0に外接する画素ブロックの水平サイズw=1/2*H_SIZE+ρ,垂直サイズh=V_SIZEとし(ステップS2903)、ステップS2904の処理を行う。
ステップS2904では、パーティション1に外接する画素ブロックの左上画素の参照ブロック内座標を(1/2*H_SIZE+ρ,0)とし(ステップS2904)、ステップS2905の処理を行う。ステップS2905では、パーティション1に外接する画素ブロックの水平サイズw=1/2*H_SIZE-ρ,垂直サイズh=V_SIZEとし(ステップS2905)、θ=0°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理を終了する。
ステップS2907では、パーティション0に外接する画素ブロックの左上画素の参照ブロック内座標を(0,0)とし(ステップS2907)、ステップS2908の処理を行う。ステップS2908では、パーティション0に外接する画素ブロックの水平サイズw=H_SIZE,垂直サイズh=1/2*V_SIZE-ρとし(ステップS2908)、ステップS2909の処理を行う。
ステップS2909では、パーティション1に外接する画素ブロックの左上画素の参照ブロック内座標を(0,1/2*V_SIZE-ρ)とし(ステップS2909)、ステップS2910の処理を行う。ステップS2910では、パーティション1に外接する画素ブロックの水平サイズw=H_SIZE,垂直サイズh=1/2*V_SIZE+ρとし(ステップS2910)、θ=90°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理を終了する。
ステップS2912では、パーティション0に外接する画素ブロックの左上画素の参照ブロック内座標を(0,0)とし(ステップS2912)、ステップS2913の処理を行う。ステップS2913では、パーティション0に外接する画素ブロックの水平サイズw=1/2*H_SIZE-ρ,垂直サイズh=V_SIZEとし(ステップS2913)、ステップS2914の処理を行う。
ステップS2914では、パーティション1に外接する画素ブロックの左上画素の参照ブロック内座標を(1/2*H_SIZE-ρ,0)とし(ステップS2914)、ステップS2915の処理を行う。ステップS2915では、パーティション1に外接する画素ブロックの水平サイズw=1/2*H_SIZE+ρ,垂直サイズh=V_SIZEとし(ステップS2915)、θ=180°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理を終了する。
ステップS2917では、パーティション0に外接する画素ブロックの左上画素の参照ブロック内座標を(0,0)とし(ステップS2917)、ステップS2918の処理を行う。ステップS2918では、パーティション0に外接する画素ブロックの水平サイズw=H_SIZE,垂直サイズh=1/2*V_SIZE+ρとし(ステップS2918)、ステップS2919の処理を行う。
ステップS2919では、パーティション1に外接する画素ブロックの左上画素の参照ブロック内座標を(0,1/2*V_SIZE+ρ)とし(ステップS2919)、ステップS2920の処理を行う。ステップS2920では、パーティション1に外接する画素ブロックの水平サイズw=H_SIZE,垂直サイズh=1/2*V_SIZE-ρとし(ステップS2920)、θ=270°のときの各パーティションに外接する画素ブロックの左上座標とサイズとを導出する処理を終了する。
以上、図14~図19で示したフローチャートの処理により、各非矩形パーティションに外接する画素ブロックの左上座標とサイズとが導出できる。
次に、図20~図32を用いて、参照ブロックメモリ転送制御部1173の画素ブロック内の有効画素抽出処理の詳細な動作説明を行う。図20は、参照ブロックメモリ転送制御部1173が行う画素ブロック内の有効画素抽出処理の全体の流れを示すフローチャートである。なお、以下の説明は、参照ブロックメモリ転送制御部2163にも同様に当てはまる。
まず、参照ブロックメモリ転送制御部1173は、動き検出部1160から取得したブロックパーティション情報を用いて、動き補償処理で必要となる参照ブロックが非矩形であるかどうかを判定する(ステップS3101)。ステップS3301の判定の結果、参照ブロックが矩形である場合には、画素ブロック内の全ての画素を有効画素と判定する(ステップS3102)。一方、ステップS3301の判定の結果、参照ブロックが非矩形である場合には、画素ブロック内の有効画素判定を行う(ステップS3103)。
次に、動き補償部1170で利用するフィルタ処理に必要な画素を参照ブロックに追加するために、有効画素の座標を補正する(ステップS3104)。例えば、H.264の動き補償で用いられる6タップフィルタを用いて、水平方向の小数画素生成を行う場合は、参照ブロックの左上画素の水平座標を-2補正して、水平サイズを+5補正する。H.264の動き補償で用いられる6タップフィルタを用いて、垂直方向の小数画素生成を行う場合は、参照ブロックの左上画素の垂直座標を-2補正して、垂直サイズを+5補正する。H.264の動き補償で用いられる6タップフィルタ処理を例にしたが、必ずしもそうである必要はなくいかなるフィルタ処理であっても構わない。
次に、参照ブロックメモリ転送制御部1173は、参照ブロックメモリ1171内の参照ブロックの有効画素座標の情報を求め、当該情報で特定される参照ブロックの画素データを動き補償部1170に出力する(ステップS3105)。
図21は、画素ブロック内の有効画素の判定の流れを示すフローチャートである。図21~図32で示すフローチャートでは、ブロックパーティション情報として、画素ブロックの水平サイズH_SIZEと、画素ブロックの垂直サイズV_SIZEと、従来例(特許文献1、特許文献2、非特許文献1、非特許文献2)に記載されているρとθとを用いて説明する。
ステップS3201では、動き検出部1160から取得したブロックパーティション情報θが、0°<θ<90°かどうかを判定する。そして、0°<θ<90°である場合は、ステップS3202の処理を行う。ステップS3202では、0°<θ<90°のときの画素ブロック内の有効画素の判定を行う(ステップS3202)。一方、0°<θ<90°でない場合は、ステップS3203の処理を行う(ステップS3201)。
ステップS3203では、動き検出部1160から取得したブロックパーティション情報θが、90°<θ<180°かどうかを判定する。そして、90°<θ<180°である場合は、ステップS3204の処理を行う。ステップS3204では、90°<θ<180°のときの画素ブロック内の有効画素の判定を行う(ステップS3204)。一方、90°<θ<180°でない場合は、ステップS3205の処理を行う(ステップS3203)。
ステップS3205では、動き検出部1160から取得したブロックパーティション情報θが、180°<θ<270°かどうかを判定する。そして、180°<θ<270°である場合は、ステップS3206の処理を行う。ステップS3206では、180°<θ<270°のときの画素ブロック内の有効画素の判定を行う(ステップS3206)。一方、180°<θ<270°でない場合は、ステップS3207の処理を行う(ステップS3205)。
ステップS3207では、動き検出部1160から取得したブロックパーティション情報θが、270°<θ<360°かどうかを判定する。そして、270°<θ<360°である場合は、ステップS3208の処理を行う。ステップS3208では、270°<θ<360°のときの画素ブロック内の有効画素の判定を行う(ステップS3208)。一方、270°<θ<360°でない場合は、ステップS3209の処理を行う(ステップS3207)。
ステップS3209では、θ=90°、180°、270°、または360°のときの画素ブロック内の有効画素の判定を行う(ステップS3209)。
図22は、0°<θ<90°のときの画素ブロック内の有効画素の判定の流れを示すフローチャートである。
ステップS3301では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<f(H_SIZE-1)<V_SIZEかどうかを判定する。そして、0<f(H_SIZE-1)<V_SIZEである場合は、ステップS3302の処理を行う。一方、0<f(H_SIZE-1)<V_SIZEでない場合は、ステップS3306の処理を行う(ステップS3301)。
ステップS3302では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<g(0)<H_SIZEかどうかを判定する。そして、0<g(0)<H_SIZEである場合は、ステップS3303の処理を行う。ステップS3303では、画素ブロックの上辺から右辺にパーティション分割境界がある場合の有効画素判定を行い、0°<θ<90°のときの画素ブロック内の有効画素の判定を終了する(ステップS3303)。一方、0<g(0)<H_SIZEでない場合は、ステップS3304の処理を行う(ステップS3302)。
ステップS3304では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<f(0)<V_SIZEかどうかを判定する。そして、0<f(0)<V_SIZEである場合は、ステップS3305の処理を行う。ステップS3305では、画素ブロックの左辺から右辺にパーティション分割境界がある場合の有効画素判定を行い、0°<θ<90°のときの画素ブロック内の有効画素の判定を終了する(ステップS3305)。一方、0<f(0)<V_SIZEでない場合は、ステップS3306の処理を行う(ステップS3306)。
ステップS3306では、画素ブロックの上辺から下辺にパーティション分割境界がある場合の有効画素判定を行い、0°<θ<90°のときの画素ブロック内の有効画素の判定を終了する(ステップS3306)。
図23は、90°<θ<180°のときの画素ブロック内の有効画素の判定の流れを示すフローチャートである。
ステップS3401では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<f(0)<V_SIZEかどうかを判定する。そして、0<f(0)<V_SIZEである場合は、ステップS3402の処理を行う。一方、0<f(0)<V_SIZEでない場合は、ステップS3406の処理を行う(ステップS3401)。
ステップS3402では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<g(0)<H_SIZEかどうかを判定する。そして、0<g(0)<H_SIZEである場合は、ステップS3403の処理を行う。ステップS3403では、画素ブロックの上辺から左辺にパーティション分割境界がある場合の有効画素判定を行い、90°<θ<180°のときの画素ブロック内の有効画素の判定を終了する(ステップS3403)。一方、0<g(0)<H_SIZEでない場合は、ステップS3404の処理を行う(ステップS3402)。
ステップS3404では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<f(H_SIZE-1)<V_SIZEかどうかを判定する。そして、0<f(H_SIZE-1)<V_SIZEである場合は、ステップS3405の処理を行う。ステップS3405では、画素ブロックの左辺から右辺にパーティション分割境界がある場合の有効画素判定を行い、90°<θ<180°のときの画素ブロック内の有効画素の判定を終了する(ステップS3405)。一方、0<f(H_SIZE-1)<V_SIZEでない場合は、ステップS3406の処理を行う(ステップS3406)。
ステップS3406では、画素ブロックの上辺から下辺にパーティション分割境界がある場合の有効画素判定を行い、90°<θ<180°のときの画素ブロック内の有効画素の判定を終了する(ステップS3406)。
図24は、180°<θ<270°のときの画素ブロック内の有効画素の判定の流れを示すフローチャートである。
ステップS3501では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<f(0)<V_SIZEかどうかを判定する。そして、0<f(0)<V_SIZEである場合は、ステップS3502の処理を行う。一方、0<f(0)<V_SIZEでない場合は、ステップS3506の処理を行う(ステップS3501)。
ステップS3502では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<f(H_SIZE-1)<V_SIZEかどうかを判定する。そして、0<f(H_SIZE-1)<V_SIZEである場合は、ステップS3503の処理を行う。ステップS3503では、画素ブロックの左辺から右辺にパーティション分割境界がある場合の有効画素判定を行い、180°<θ<270°のときの画素ブロック内の有効画素の判定を終了する(ステップS3503)。一方、0<f(H_SIZE-1)<V_SIZEでない場合は、ステップS3504の処理を行う(ステップS3502)。
ステップS3504では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<f(H_SIZE-1)<V_SIZEかどうかを判定する。そして、0<f(H_SIZE-1)<V_SIZEである場合は、ステップS3505の処理を行う。ステップS3505では、画素ブロックの左辺から下辺にパーティション分割境界がある場合の有効画素判定を行い、180°<θ<270°のときの画素ブロック内の有効画素の判定を終了する(ステップS3505)。一方、0<f(H_SIZE-1)<V_SIZEでない場合は、ステップS3506の処理を行う(ステップS3506)。
ステップS3506では、画素ブロックの上辺から下辺にパーティション分割境界がある場合の有効画素判定を行い、180°<θ<270°のときの画素ブロック内の有効画素の判定を終了する(ステップS3506)。
図25は、270°<θ<360°のときの画素ブロック内の有効画素の判定の流れを示すフローチャートである。
ステップS3601では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<f(H_SIZE-1)<V_SIZEかどうかを判定する。そして、0<f(H_SIZE-1)<V_SIZEである場合は、ステップS3602の処理を行う。一方、0<f(H_SIZE-1)<V_SIZEでない場合は、ステップS3606の処理を行う(ステップS3601)。
ステップS3602では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<f(0)<V_SIZEかどうかを判定する。そして、0<f(0)<V_SIZEである場合は、ステップS3603の処理を行う。ステップS3603では、画素ブロックの左辺から右辺にパーティション分割境界がある場合の有効画素判定を行い、270°<θ<360°のときの画素ブロック内の有効画素の判定を終了する(ステップS3603)。一方、0<f(0)<V_SIZEでない場合は、ステップS3604の処理を行う(ステップS3602)。
ステップS3604では、動き検出部1160から取得したブロックパーティション情報のH_SIZEとV_SIZEとから、0<f(H_SIZE-1)<V_SIZEかどうかを判定する。そして、0<f(H_SIZE-1)<V_SIZEである場合は、ステップS3605の処理を行う。ステップS3605では、画素ブロックの下辺から右辺にパーティション分割境界がある場合の有効画素判定を行い、270°<θ<360°のときの画素ブロック内の有効画素の判定を終了する(ステップS3605)。一方、0<f(H_SIZE-1)<V_SIZEでない場合は、ステップS3606の処理を行う(ステップS3606)。
ステップS3606では、画素ブロックの上辺から下辺にパーティション分割境界がある場合の有効画素判定を行い、270°<θ<360°のときの画素ブロック内の有効画素の判定を終了する(ステップS3606)。
図26は、θ=0°,90°,180°,270°のときの画素ブロック内の有効画素の判定の流れを示すフローチャートである。
ステップS3701では、動き検出部1160から取得したブロックパーティション情報のθから、θ=0°かどうかを判定する。そして、θ=0°である場合は、ステップS3702の処理を行う。一方、θ=0°でない場合は、ステップS3703の処理を行う(ステップS3701)。
ステップS3703では、動き検出部1160から取得したブロックパーティション情報のθから、θ=90°かどうかを判定する。そして、θ=90°である場合は、ステップS3704の処理を行う。一方、θ=90°でない場合は、ステップS3705の処理を行う(ステップS3705)。
ステップS3705では、動き検出部1160から取得したブロックパーティション情報のθから、θ=180°かどうかを判定する。そして、θ=180°である場合は、ステップS3706の処理を行う。一方、θ=180°でない場合は、ステップS3707の処理を行う(ステップS3705)。
ステップS3707では、動き検出部1160から取得したブロックパーティション情報のθから、θ=270°かどうかを判定する。そして、θ=270°である場合は、ステップS3708の処理を行う(ステップS3707)。
図26に記載のあるvalid_partition0(i,j)、および、valid_partition1(i,j)は、画素ブロックと同じサイズの2次元行列データであり、2つに分割されたブロックパーティションを構成する画素が画素ブロック内の各座標で有効かどうかを示す情報である。1のときに有効であることを示し、0のときに無効であることを示す。
ステップS3702では、0<=i<=1/2*H_SIZE+ρ,0<=j<V_SIZEの画素について、valid_partition0(i,j)=1、valid_partition1(i,j)=0とし、1/2*H_SIZE+ρ<=i<H_SIZE,0<=j<V_SIZEの画素について、valid_partition0(i,j)=0、valid_partition1(i,j)=1とする(ステップS3702)。
ステップS3704では、0<=i<=H_SIZE,0<=j<1/2*V_SIZE-ρの画素について、valid_partition0(i,j)=1、valid_partition1(i,j)=0とし、0<=i<=H_SIZE,1/2*V_SIZE-ρ<=j<V_SIZEの画素について、valid_partition0(i,j)=0、valid_partition1(i,j)=1とする(ステップS3704)。
ステップS3706では、0<=i<=1/2*H_SIZE-ρ、0<=j<V_SIZEの画素について、valid_partition0(i,j)=1、valid_partition1(i,j)=0とし、1/2*H_SIZE-ρ<=i<H_SIZE、0<=j<V_SIZEの画素について、valid_partition0(i,j)=0、valid_partition1(i,j)=1とする(ステップS3706)。
ステップS3708では、0<=i<=H_SIZE,0<=j<1/2*V_SIZE+ρの画素について、valid_partition0(i,j)=1、valid_partition1(i,j)=0とし、0<=i<=H_SIZE,1/2*V_SIZE+ρ<=j <V_SIZEの画素について、valid_partition0 (i,j)=0、valid_partition1(i,j)=1とする(ステップS3708)。
図27は、画素ブロックの上辺から下辺にパーティション分割境界がある場合の有効画素判定の流れを示すフローチャートである。
ステップS3801では、j=0とし、ステップS3802の処理を行う(ステップS3801)。ステップS3802では、i=0とし、ステップS3803の処理を行う(ステップS3802)。ステップS3803では、斜辺(パーティション分割境界)を成す座標(g(j),j)を算出し、ステップS3804の処理を行う(ステップS3803)。
ステップS3804では、valid_partition0(i,j)=1、valid_partition1(i,j)=0とし、ステップS3805の処理を行う(ステップS3804)。ステップS3805では、0<=i<=g(j)かどうかを判定する。そして、0<=i<=g(j)である場合は、ステップS3806の処理を行う。ステップS3806では、i++とし、ステップS3804の処理を行う(ステップS3806)。すなわち、ステップS3804~ステップS3806は、パーティション分割境界の左側に位置する画素を、パーティション0に属する画素と判定する処理である。
一方、0<=i<=g(j)ではない場合は、ステップS3807の処理を行う(ステップS3805)。
ステップS3807では、valid_partition0 (i,j)=0、valid_partition1(i,j)=1とし、ステップS3808の処理を行う(ステップS3807)。ステップS3808では、g(j)<=i< H_SIZEかどうかを判定する。そして、g(j)<=i<H_SIZEである場合は、ステップS3809の処理を行う。ステップS3809では、i++とし、ステップS3807の処理を行う(ステップS3809)。すなわち、ステップS3807~ステップS3809は、パーティション分割境界の右側に位置する画素を、パーティション1に属する画素と判定する処理である。
一方、g(j)<=i<H_SIZEではない場合は、ステップS3810の処理を行う(ステップS3808)。ステップS3810では、j<V_SIZEかどうかを判定する。そして、j<V_SIZEである場合は、ステップS3811の処理を行う。ステップS3811では、j++とし、ステップS3802の処理を行う(ステップS3811)。一方、j<V_SIZEではない場合は、画素ブロックの上辺から下辺にパーティション分割境界がある場合の有効画素判定を終了する(ステップS3810)。
図28は、画素ブロックの左辺から右辺にパーティション分割境界がある場合の有効画素判定の流れを示すフローチャートである。図28は、図27の処理と類似し、パーティション分割境界の上側に位置する画素をパーティション0に属する画素と判定し、下側に位置する画素をパーティション1に属する画素と判定する処理である。
ステップS3901では、j=0とし、ステップS3902の処理を行う(ステップS3901)。ステップS3902では、i=0とし、ステップS3903の処理を行う(ステップS3902)。ステップS3903では、斜辺(パーティション分割境界)を成す座標(i,f(i))を算出し、ステップS3904の処理を行う(ステップS3903)。
ステップS3904では、valid_partition0(i,j)=1、valid_partition1(i,j)=0とし、ステップS3905の処理を行う(ステップS3904)。ステップS3905では、0<=j<=f(i)かどうかを判定する。そして、0<=j<=f(i)である場合は、ステップS3906の処理を行う。ステップS3906では、j++とし、ステップS3904の処理を行う(ステップS3906)。一方、0<=j<=f(i)ではない場合は、ステップS3907の処理を行う(ステップS3905)。
ステップS3907では、valid_partition0(i,j)=0、valid_partition1(i,j)=1とし、ステップS3908の処理を行う(ステップS3907)。ステップS3908では、f(i)<=j<V_SIZEかどうかを判定する。そして、f(i)<=j< V_SIZEである場合は、ステップS3909の処理を行う。ステップS3909では、j++とし、ステップS3907の処理を行う(ステップS3909)。一方、f(i)<=j<V_SIZEではない場合は、ステップS3910の処理を行う(ステップS3908)。
ステップS3910では、i<H_SIZEかどうかを判定する。そして、i<H_SIZEである場合は、ステップS3911の処理を行う。ステップS3911では、i++とし、ステップS3902の処理を行う(ステップS3911)。一方、i<H_SIZEではない場合は、画素ブロックの左辺から右辺にパーティション分割境界がある場合の有効画素判定を終了する(ステップS3910)。
図29は、画素ブロックの上辺から右辺にパーティション分割境界がある場合の有効画素判定の流れを示すフローチャートである。
ステップS4001では、j=0とし、ステップS4002の処理を行う(ステップS4001)。ステップS4002では、i=0とし、ステップS4003の処理を行う(ステップS4002)。ステップS4003では、斜辺(パーティション分割境界)を成す座標(g(j),j)を算出し、ステップS4004の処理を行う(ステップS4003)。
ステップS4004では、g(j)<H_SIZEかどうかを判定する。そして、g(j)<H_SIZEである場合は、ステップS4005の処理を行う。一方、g(j)<H_SIZEでない場合は、ステップS4011の処理を行う(ステップS4004)。
ステップS4005では、valid_partition0(i,j)=1、valid_partition1(i,j)=0とし、ステップS4006の処理を行う(ステップS4005)。ステップS4006では、0<=i<=g(j)かどうかを判定する。そして、0<=i<=g(j)である場合は、ステップS4007の処理を行う。ステップS4007では、i++とし、ステップS4005の処理を行う(ステップS4007)。一方、0<=i<=g(j)ではない場合は、ステップS4008の処理を行う(ステップS4006)。すなわち、ステップS4005~ステップS4007は、パーティション分割境界の左側に位置する画素を、パーティション0に属する画素と判定する処理である。
ステップS4008では、valid_partition0(i,j)=0、valid_partition1(i,j)=1とし、ステップS4009の処理を行う(ステップS4008)。ステップS4009では、g(j)<=i<H_SIZEかどうかを判定する。そして、g(j)<=i<H_SIZEである場合は、ステップS4010の処理を行う。ステップS4010では、i++とし、ステップS4008の処理を行う(ステップS4010)。一方、g(j)<=i<H_SIZEではない場合は、ステップS4014の処理を行う(ステップS4009)。すなわち、ステップS4008~ステップS4010は、パーティション分割境界の右側に位置する画素を、パーティション1に属する画素と判定する処理である。
ステップS4011では、valid_partition0(i,j)=1、valid_partition1(i,j)=0とし、ステップS4012の処理を行う(ステップS4011)。ステップS4012では、i<H_SIZEかどうかを判定する。そして、i<H_SIZEである場合は、ステップS4013の処理を行う。ステップS4013では、i++とし、ステップS4011の処理を行う(ステップS4013)。一方、i<H_SIZEではない場合は、ステップS4014の処理を行う(ステップS4012)。すなわち、ステップS4011~ステップS4013は、パーティション分割境界と画素ブロックの右辺との交点より下側の画素を、全てパーティション0に属する画素と判定する処理である。
ステップS4014では、j<V_SIZEかどうかを判定する。そして、j<V_SIZEである場合は、ステップS4015の処理を行う。ステップS4015では、j++とし、ステップS4002の処理を行う(ステップS4015)。一方、j<V_SIZEではない場合は、復号ブロックの上辺から右辺にパーティション分割境界がある場合の有効画素判定を終了する(ステップS4014)。
図30は、画素ブロックの上辺から左辺にパーティション分割境界がある場合の有効画素判定の流れを示すフローチャートである。図30は、図29の処理と類似し、パーティション分割境界の左側に位置する画素をパーティション0に属する画素と判定し、右側に位置する画素をパーティション1に属する画素と判定し、パーティション分割境界と画素ブロックの左辺との交点より下側の画素を、全てパーティション1に属する画素と判定する処理である。
ステップS4101では、j=0とし、ステップS4102の処理を行う(ステップS4101)。ステップS4102では、i=0とし、ステップS4103の処理を行う(ステップS4102)。ステップS4103では、斜辺(パーティション分割境界)を成す座標(g(j),j)を算出し、ステップS4104の処理を行う(ステップS4103)。
ステップS4104では、0<=g(j)かどうかを判定する。そして、0<=g(j)である場合は、ステップS4105の処理を行う。一方、0<=g(j)でない場合は、ステップS4111の処理を行う(ステップS4104)。
ステップS4105では、valid_partition0(i,j)=1、valid_partition1(i,j)=0とし、ステップS4106の処理を行う(ステップS4105)。ステップS4106では、0<=i<=g(j)かどうかを判定する。そして、0<=i<=g(j)である場合は、ステップS4107の処理を行う。ステップS4107では、i++とし、ステップS4105の処理を行う(ステップS4107)。一方、0<=i<=g(j)ではない場合は、ステップS4108の処理を行う(ステップS4106)。
ステップS4108では、valid_partition0(i,j)=0、valid_partition1(i,j)=1とし、ステップS4109の処理を行う(ステップS4108)。ステップS4109では、g(j)<=i<H_SIZEかどうかを判定する。そして、g(j)<=i<H_SIZEである場合は、ステップS4110の処理を行う。ステップS4110では、i++とし、ステップS4108の処理を行う(ステップS4110)。一方、g(j)<=i<H_SIZEではない場合は、ステップS4114の処理を行う(ステップS4109)。
ステップS4111では、valid_partition0(i,j)=0、valid_partition1(i,j)=1とし、ステップS4112の処理を行う(ステップS4111)。ステップS4112では、i<H_SIZEかどうかを判定する。そして、i<H_SIZEである場合は、ステップS4113の処理を行う。ステップS4113では、i++とし、ステップS4111の処理を行う(ステップS4113)。一方、i<H_SIZEではない場合は、ステップS4114の処理を行う(ステップS4112)。
テップS4114では、j<V_SIZEかどうかを判定する。そして、j<V_SIZEである場合は、ステップS4115の処理を行う。ステップS4115では、j++とし、ステップS4102の処理を行う(ステップS4115)。一方、j<V_SIZEではない場合は、画素ブロックの上辺から左辺にパーティション分割境界がある場合の有効画素判定を終了する(ステップS4114)。
図31は、画素ブロックの左辺から下辺にパーティション分割境界がある場合の有効画素判定の流れを示すフローチャートである。図31は、図29の処理と類似し、パーティション分割境界と画素ブロックの左辺との交点より上側の画素を全てパーティション1に属する画素と判定し、パーティション分割境界の左側に位置する画素をパーティション0に属する画素と判定し、右側に位置する画素をパーティション1に属する画素と判定する処理である。
ステップS4201では、j=0とし、ステップS4202の処理を行う(ステップS4201)。ステップS4202では、i=0とし、ステップS4203の処理を行う(ステップS4202)。ステップS4203では、斜辺(パーティション分割境界)を成す座標(g(j),j)を算出し、ステップS4204の処理を行う(ステップS4203)。
ステップS4204では、0<=g(j)かどうかを判定する。そして、0<=g(j)である場合は、ステップS4205の処理を行う。一方、0<=g(j)でない場合は、ステップS4211の処理を行う(ステップS4204)。
ステップS4205では、valid_partition0(i,j)=0、valid_partition1(i,j)=1とし、ステップS4206の処理を行う(ステップS4205)。ステップS4206では、0<=i<=g(j)かどうかを判定する。そして、0<=i<=g(j)である場合は、ステップS4207の処理を行う。ステップS4207では、i++とし、ステップS4205の処理を行う(ステップS4207)。一方、0<=i<=g(j)ではない場合は、ステップS4208の処理を行う(ステップS4206)。
ステップS4208では、valid_partition0(i,j)=1、valid_partition1(i,j)=0とし、ステップS4209の処理を行う(ステップS4208)。ステップS4209では、g(j)<=i<H_SIZEかどうかを判定する。そして、g(j)<=i<H_SIZEである場合は、ステップS4210の処理を行う。ステップS4210では、i++とし、ステップS4208の処理を行う(ステップS4210)。一方、g(j)<=i<H_SIZEではない場合は、ステップS4214の処理を行う(ステップS4209)。
ステップS4211では、valid_partition0(i,j)=1、valid_partition1(i,j)=0とし、ステップS4212の処理を行う(ステップS4211)。ステップS4212では、i<H_SIZEかどうかを判定する。そして、i<H_SIZEである場合は、ステップS4213の処理を行う。ステップS4213では、i++とし、ステップS4211の処理を行う(ステップS4213)。一方、i<H_SIZEではない場合は、ステップS4214の処理を行う(ステップS4212)。
ステップS4214では、j<V_SIZEかどうかを判定する。そして、j<V_SIZEである場合は、ステップS4215の処理を行う。ステップS4215では、j++とし、ステップS4202の処理を行う(ステップS4215)。一方、j<V_SIZEではない場合は、画素ブロックの左辺から下辺にパーティション分割境界がある場合の有効画素判定を終了する(ステップS4214)。
図32は、画素ブロックの下辺から右辺にパーティション分割境界がある場合の有効画素判定の流れを示すフローチャートである。図32は、図29の処理と類似し、パーティション分割境界と画素ブロックの右辺との交点より上側の画素を全てパーティション0に属する画素と判定し、パーティション分割境界の左側に位置する画素をパーティション0に属する画素と判定し、右側に位置する画素をパーティション1に属する画素と判定する処理である。
ステップS4301では、j=0とし、ステップS4302の処理を行う(ステップS4301)。ステップS4302では、i=0とし、ステップS4303の処理を行う(ステップS4302)。ステップS4303では、斜辺(パーティション分割境界)を成す座標(g(j),j)を算出し、ステップS4304の処理を行う(ステップS4303)。
ステップS4304では、g(j)<H_SIZEかどうかを判定する。そして、g(j)<H_SIZEである場合は、ステップS4305の処理を行う。一方、g(j)<H_SIZEでない場合は、ステップS4311の処理を行う(ステップS4304)。
ステップS4305では、valid_partition0(i,j)=1、valid_partition1(i,j)=0とし、ステップS4306の処理を行う(ステップS4305)。ステップS4306では、0<=i<=g(j)かどうかを判定する。そして、0<=i<=g(j)である場合は、ステップS4307の処理を行う。ステップS4307では、i++とし、ステップS4305の処理を行う(ステップS4307)。一方、0<=i<=g(j)ではない場合は、ステップS4308の処理を行う(ステップS4306)。
ステップS4308では、valid_partition0(i,j)=0、valid_partition1(i,j)=1とし、ステップS4309の処理を行う(ステップS4308)。ステップS4309では、g(j)<=i<H_SIZEかどうかを判定する。そして、g(j)<=i<H_SIZEである場合は、ステップS4310の処理を行う。ステップS4310では、i++とし、ステップS4308の処理を行う(ステップS4310)。一方、g(j)<=i<H_SIZEではない場合は、ステップS4314の処理を行う(ステップS4309)。
ステップS4311では、valid_partition0(i,j)=1、valid_partition1(i,j)=0とし、ステップS4312の処理を行う(ステップS4311)。ステップS4312では、i<H_SIZEかどうかを判定する。そして、i<H_SIZEである場合は、ステップS4313の処理を行う。ステップS4313では、i++とし、ステップS4311の処理を行う(ステップS4313)。一方、i<H_SIZEではない場合は、ステップS4314の処理を行う(ステップS4312)。
ステップS4314では、j<V_SIZEかどうかを判定する。そして、j<V_SIZEである場合は、ステップS4315の処理を行う。ステップS4315では、j++とし、ステップS4302の処理を行う(ステップS4315)。一方、j<V_SIZEではない場合は、画素ブロックの下辺から右辺にパーティション分割境界がある場合の有効画素判定を終了する(ステップS4314)。
以上、図20~図32で示したフローチャートの処理により参照ブロックメモリ1171内での画素ブロック有効画素、すなわち参照ブロックの抽出ができる。
かかる構成によれば、フレームメモリ1140から非矩形動き補償を実施するための参照ブロックのアドレスを決定する時間を短くすることができる。そのため、動き検出部1160がヘッダ情報(動きベクトル、ブロックパーティション情報、及び参照画像特定情報等)を算出してから、フレームメモリ転送制御部1172が、参照ブロックを含む矩形状の画素ブロックを読み出し、参照ブロックメモリ1171に書き込むまでの時間を短くすることができる。
なお、非矩形の参照ブロックを含む矩形領域の参照画面座標での水平座標と垂直座標を計算する方法として外接する矩形の頂点座標から求める方法を示したが、参照ブロックを含む矩形の頂点座標から計算してもよいし、参照ブロックをなす辺の座標から計算してもよい。
(実施の形態2)
実施の形態1に係るフレームメモリ転送制御部1172は、非矩形状の参照ブロックに外接する単一の矩形画素ブロックの画素データを、フレームメモリ1140から参照ブロックメモリ1171に転送する。例えば、図33のハッチング(斜線ハッチング及びドットハッチングを含む)で示される三角形の参照ブロック3500(105画素)を動き補償に用いる場合、矩形状の画素ブロック3000(256画素)が転送の対象となる。このように、参照ブロックの形状又は大きさによっては、実際には動き補償に用いない多くの画素(上記の例では、151画素)を転送する必要が生じる可能性がある。
そこで、実施の形態2では、動き補償に用いない画素の一部を転送の対象から除外することによって、フレームメモリ1140から参照ブロックメモリ1171への転送負荷を低減することを目的とする。なお、実施の形態2に係る画像符号化装置及び画像復号装置の構成及び基本的な動作は実施の形態1と共通するので、共通点の詳しい説明は省略し、相違点を中心に説明する。
図33は、動き補償に用いられる非矩形の参照ブロックを含む矩形状の画素ブロックを示す図である。図34は、実施の形態2に係る画素ブロックの左上座標を導出する処理を示すフローチャートである。すなわち、実施の形態2は、図13のステップS2303に相当する処理が実施の形態1と相違する。
まず、実施の形態2に係るフレームメモリ転送制御部1172は、図33に示されるように、参照画像3000を予め定められた大きさの矩形状の複数の画素ブロック3100、3200、3300、3400に区画し、画素ブロック3100、3200、3300、3400の単位でフレームメモリ1140から参照ブロックメモリ1171に転送することができる。すなわち、画素ブロック3100、3200、3300、3400は、例えばDRAMのアクセス単位であって、図33の例では、8画素×8画素の正方形である。但し、画素ブロックの大きさは上記に限定されない。また、画素ブロックは正方形である必要はなく、長方形であってもよい。
そして、実施の形態2に係るフレームメモリ転送制御部1172は、複数の画素ブロック3100、3200、3300、3400のうち、非矩形状の参照ブロック3500を構成する画素を含む1以上の画素ブロック3200、3300、3400を特定し、特定した1以上の画素ブロック3200、3300、3400の画素データをフレームメモリ1140から参照ブロックメモリ1171に転送する。
図34を参照して、転送対象となる画素ブロックの左上座標を導出する処理を説明する。但し、図34は、左上座標を導出する処理の一例であって、本発明はこれに限定されない。
まず、フレームメモリ転送制御部1172は、非矩形状の参照ブロック3500の辺を構成する画素の座標を特定する(S4401)。図33の例では、斜線ハッチングで示される39画素の座標が特定される。なお、画素の座標は、x座標(横方向)及びy座標(縦方向)の組み合わせで表現され、例えば、左上の画素3101の座標は(0,0)となる。
次に、フレームメモリ転送制御部1172は、ステップS4401で特定した39画素全てに対して、ステップS4403~ステップS4405の処理を実行する(S4402、S4406)。この繰り返し処理は、非矩形の参照ブロック3500を構成する画素を含む画素ブロックの左上座標を導出する処理である。
まず、フレームメモリ転送制御部1172は、参照ブロック3500の辺を構成する画素の座標値の下3ビットを0に置き換える(S4403)。例えば、非矩形の参照ブロック3500の右上の画素3501の座標(15,2)の下3ビットを0に置き換えると、この画素3501を含む画素ブロック3200の左上の画素3201の座標(8,0)が得られる。但し、画素ブロックの大きさが異なれば0に置き換えるビット数も異なり、例えば、画素ブロックの大きさが16画素×16画素であれば、座標値の下4ビットを0に置き換えればよい。
次に、フレームメモリ転送制御部1172は、ステップS4403で導出した座標(8,0)が、後述するステップS4404で既に出力された座標であるか否かを判断する(S4403)。そして、未だ出力されていない座標である場合(S4403でNo)、フレームメモリ転送制御部1172は、ステップS4403で導出した座標(8,0)を、非矩形の参照ブロック3500を構成する画素を含む画素ブロック3200の左上座標として出力する(S4404)。
一方、次に画素3501の左下の画素3502に対してステップS4403~ステップS4405を実行したとすると、画素3501の場合と同様に、画素ブロック3200の左上の画素3201の座標(8,0)が得られる(S4403)。このため、この座標は出力されない(S4404でYes)。
上記の処理を、図33の斜線ハッチングで示される39画素に対して実行すると、例えば、画素3503の座標(9,8)から画素ブロック3400の左上の画素3401の座標(8,8)が得られ、画素3504の座標(7,10)から画素ブロック3300の左上の画素3301の座標(0,8)が得られる。
すなわち、実施の形態2の処理を図33に適用すれば、図13のステップS2303に相当する処理で、3つの画素ブロック3200、3300、3400の左上座標が得られる。一方、各画素ブロック3200、3300、3400のサイズは固定(8画素×8画素)であるので、改めて導出する必要はない。
このように、実施の形態2によれば、参照ブロック3500を動き補償で用いるために、3つの画素ブロック3200、3300、3400の画素データ(192画素)をフレームメモリ1140から参照ブロックメモリ1171に転送すればよく、実施の形態1と比較して転送負荷を低減することが可能となる。
(実施の形態3) セット・システム実装形態
*実行プログラムとそのプログラムを保持する記録メディア*
上記各実施の形態で示した画像復号方法の構成を実現するためのプログラムを記憶メディアに記録することにより、上記各実施の形態で示した処理を独立したコンピュータシステムにおいて簡単に実施することが可能となる。記憶メディアは、磁気ディスク、光ディスク、光磁気ディスク、ICカード、半導体メモリ等、プログラムを記録できるものであればよい。
さらにここで、上記各実施の形態で示した画像処理装置の応用例とそれを用いたシステムを説明する。
*ネットで接続されたシステム*
図35は、コンテンツ配信サービスを実現するコンテンツ供給システムex100の全体構成を示す図である。通信サービスの提供エリアを所望の大きさに分割し、各セル内にそれぞれ固定無線局である基地局ex106~ex110が設置されている。
このコンテンツ供給システムex100は、インターネットex101にインターネットサービスプロバイダex102および電話網ex104、および基地局ex106~ex110を介して、コンピュータex111、PDA(Personal Digital Assistant)ex112、カメラex113、携帯電話ex114、ゲーム機ex115などの各機器が接続される。
しかし、コンテンツ供給システムex100は図35のような構成に限定されず、いずれかの要素を組合せて接続するようにしてもよい。また、固定無線局である基地局ex106~ex110を介さずに、各機器が電話網ex104に直接接続されてもよい。また、各機器が近距離無線等を介して直接相互に接続されていてもよい。
カメラex113はデジタルビデオカメラ等の動画撮影が可能な機器であり、カメラex116はデジタルカメラ等の静止画撮影、動画撮影が可能な機器である。また、携帯電話ex114は、GSM(登録商標)(Global System for Mobile Communications)方式、CDMA(Code Division Multiple Access)方式、W-CDMA(Wideband-Code Division Multiple Access)方式、若しくはLTE(Long Term Evolution)方式、HSPA(High Speed Packet Access)の携帯電話、またはPHS(Personal Handyphone System)等であり、いずれでも構わない。
コンテンツ供給システムex100では、カメラex113等が基地局ex109、電話網ex104を通じてストリーミングサーバex103に接続されることで、ライブ配信等が可能になる。ライブ配信では、ユーザがカメラex113を用いて撮影するコンテンツ(例えば、音楽ライブの映像等)に対して上記各実施の形態で説明したように符号化処理を行い、ストリーミングサーバex103に送信する。一方、ストリーミングサーバex103は要求のあったクライアントに対して送信されたコンテンツデータをストリーム配信する。クライアントとしては、上記符号化処理されたデータを復号することが可能な、コンピュータex111、PDAex112、カメラex113、携帯電話ex114、ゲーム機ex115等がある。配信されたデータを受信した各機器では、受信したデータを復号処理して再生する。
なお、撮影したデータの符号化処理はカメラex113で行っても、データの送信処理をするストリーミングサーバex103で行ってもよいし、互いに分担して行ってもよい。同様に配信されたデータの復号処理はクライアントで行っても、ストリーミングサーバex103で行ってもよいし、互いに分担して行ってもよい。また、カメラex113に限らず、カメラex116で撮影した静止画像および/または動画像データを、コンピュータex111を介してストリーミングサーバex103に送信してもよい。この場合の符号化処理はカメラex116、コンピュータex111、ストリーミングサーバex103のいずれで行ってもよいし、互いに分担して行ってもよい。
また、これら符号化・復号処理は、一般的にコンピュータex111や各機器が有するLSIex500において処理する。LSIex500は、ワンチップであっても複数チップからなる構成であってもよい。なお、動画像符号化・復号用のソフトウェアをコンピュータex111等で読み取り可能な何らかの記録メディア(CD-ROM、フレキシブルディスク、ハードディスクなど)に組み込み、そのソフトウェアを用いて符号化・復号処理を行ってもよい。さらに、携帯電話ex114がカメラ付きである場合には、そのカメラで取得した動画データを送信してもよい。このときの動画データは携帯電話ex114が有するLSIex500で符号化処理されたデータである。
また、ストリーミングサーバex103は複数のサーバや複数のコンピュータであって、データを分散して処理したり記録したり配信するものであってもよい。
以上のようにして、コンテンツ供給システムex100では、符号化されたデータをクライアントが受信して再生することができる。このようにコンテンツ供給システムex100では、ユーザが送信した情報をリアルタイムでクライアントが受信して復号し、再生することができ、特別な権利や設備を有さないユーザでも個人放送を実現できる。
*放送システム*
なお、コンテンツ供給システムex100の例に限らず、図36に示すように、デジタル放送用システムex200にも、上記各実施の形態の少なくとも動画像符号化装置または動画像復号装置のいずれかを組み込むことができる。具体的には、放送局ex201では映像情報のビットストリームが電波を介して通信または衛星ex202に伝送される。このビットストリームは上記各実施の形態で説明した動画像符号化方法により符号化された符号化ビットストリームである。これを受けた放送衛星ex202は、放送用の電波を発信し、この電波を衛星放送の受信が可能な家庭のアンテナex204が受信する。受信したビットストリームを、テレビ(受信機)ex300またはセットトップボックス(STB)ex217等の装置が復号して再生する。
また、記録媒体であるCDやDVD等の蓄積メディアex214に記録したビットストリームを読み取り、復号する再生装置ex212にも上記実施の形態で示した画像復号装置を実装することが可能である。この場合、再生された映像信号はモニタex213に表示される。
また、DVD、BD等の記録メディアex215に記録した符号化ビットストリームを読み取り復号する、または記録メディアex215に映像信号を符号化し書き込むリーダ/レコーダex218にも上記各実施の形態で示した動画像復号装置または動画像符号化装置を実装することが可能である。この場合、再生された映像信号はモニタex219に表示され、符号化ビットストリームが記録された記録メディアex215により他の装置やシステムにおいて映像信号を再生することができる。また、ケーブルテレビ用のケーブルex203または衛星/地上波放送のアンテナex204に接続されたセットトップボックスex217内に動画像復号装置を実装し、これをテレビのモニタex219で表示してもよい。このときセットトップボックスではなく、テレビ内に動画像復号装置を組み込んでもよい。
*放送システム内の機器の一例としてのテレビ*
図37は、上記各実施の形態で説明した画像復号方法を用いたテレビ(受信機)ex300を示す図である。テレビex300は、上記放送を受信するアンテナex204またはケーブルex203等を介して映像情報のビットストリームを取得、または出力するチューナex301と、受信した符号化データを復調する、または外部に送信する符号化データに変調する変調/復調部ex302と、復調した映像データ、音声データを分離する、または符号化された映像データ、音声データを多重化する多重/分離部ex303を備える。また、テレビex300は、音声データ、映像データそれぞれを復号する、またはそれぞれの情報を符号化する音声信号処理部ex304、映像信号処理部ex305を有する信号処理部ex306と、復号した音声信号を出力するスピーカex307、復号した映像信号を表示するディスプレイ等の表示部ex308を有する出力部ex309とを有する。さらに、テレビex300は、ユーザ操作の入力を受け付ける操作入力部ex312等を有するインタフェース部ex317を有する。さらに、テレビex300は、各部を統括的に制御する制御部ex310、各部に電力を供給する電源回路部ex311を有する。インタフェース部ex317は、操作入力部ex312以外に、リーダ/レコーダex218等の外部機器と接続されるブリッジex313、SDカード等の記録メディアex216を装着可能とするためのスロット部ex314、ハードディスク等の外部記録メディアと接続するためのドライバex315、電話網と接続するモデムex316等を有していてもよい。なお記録メディアex216は、格納する不揮発性/揮発性の半導体メモリ素子により電気的に情報の記録を可能としたものである。テレビex300の各部は同期バスを介して互いに接続されている。
まず、テレビex300がアンテナex204等により外部から取得したデータを復号し、再生する構成について説明する。テレビex300は、リモートコントローラex220等からのユーザ操作を受け、CPU等を有する制御部ex310の制御に基づいて、変調/復調部ex302で復調した映像データ、音声データを多重/分離部ex303で分離する。さらにテレビex300は、分離した音声データを音声信号処理部ex304で復号し、分離した映像データを映像信号処理部ex305で上記各実施の形態で説明した復号方法を用いて復号する。復号した音声信号、映像信号は、それぞれ出力部ex309から外部に向けて出力される。出力する際には、音声信号と映像信号が同期して再生するよう、バッファex318、ex319等に一旦これらの信号を蓄積するとよい。また、テレビex300は、放送等からではなく、磁気/光ディスク、SDカード等の記録メディアex215、ex216から符号化された符号化ビットストリームを読み出してもよい。次に、テレビex300が音声信号や映像信号を符号化し、外部に送信または記録メディア等に書き込む構成について説明する。テレビex300は、リモートコントローラex220等からのユーザ操作を受け、制御部ex310の制御に基づいて、音声信号処理部ex304で音声信号を符号化し、映像信号処理部ex305で映像信号を上記各実施の形態で説明した符号化方法を用いて符号化する。符号化した音声信号、映像信号は多重/分離部ex303で多重化され外部に出力される。多重化する際には、音声信号と映像信号が同期するように、バッファex320、ex321等に一旦これらの信号を蓄積するとよい。なお、バッファex318~ex321は図示しているように複数備えていてもよいし、1つ以上のバッファを共有する構成であってもよい。さらに、図示している以外に、例えば変調/復調部ex302や多重/分離部ex303の間等でもシステムのオーバフロー、アンダーフローを避ける緩衝材としてバッファにデータを蓄積することとしてもよい。
また、テレビex300は、放送等や記録メディア等から音声データ、映像データを取得する以外に、マイクやカメラのAV入力を受け付ける構成を備え、それらから取得したデータに対して符号化処理を行ってもよい。なお、ここではテレビex300は上記の符号化処理、多重化、および外部出力ができる構成として説明したが、これらの処理を行うことはできず、上記受信、復号処理、外部出力のみが可能な構成であってもよい。
また、リーダ/レコーダex218で記録メディアから符号化ビットストリームを読み出す、または書き込む場合には、上記復号処理または符号化処理はテレビex300、リーダ/レコーダex218のいずれで行ってもよいし、テレビex300とリーダ/レコーダex218が互いに分担して行ってもよい。
*テレビまたはリーダ/レコーダが記録メディアへの記録再生を行う構成について*
一例として、光ディスクからデータの読み込みまたは書き込みをする場合の情報再生/記録部ex400の構成を図38に示す。情報再生/記録部ex400は、以下に説明する要素ex401~ex407を備える。光ヘッドex401は、光ディスクである記録メディアex215の記録面にレーザスポットを照射して情報を書き込み、記録メディアex215の記録面からの反射光を検出して情報を読み込む。変調記録部ex402は、光ヘッドex401に内蔵された半導体レーザを電気的に駆動し記録データに応じてレーザ光の変調を行う。再生復調部ex403は、光ヘッドex401に内蔵されたフォトディテクタにより記録面からの反射光を電気的に検出した再生信号を増幅し、記録メディアex215に記録された信号成分を分離して復調し、必要な情報を再生する。バッファex404は、記録メディアex215に記録するための情報および記録メディアex215から再生した情報を一時的に保持する。ディスクモータex405は記録メディアex215を回転させる。サーボ制御部ex406は、ディスクモータex405の回転駆動を制御しながら光ヘッドex401を所定の情報トラックに移動させ、レーザスポットの追従処理を行う。システム制御部ex407は、情報再生/記録部ex400全体の制御を行う。上記の読み出しや書き込みの処理はシステム制御部ex407が、バッファex404に保持された各種情報を利用し、また必要に応じて新たな情報の生成・追加を行うと共に、変調記録部ex402、再生復調部ex403、サーボ制御部ex406を協調動作させながら、光ヘッドex401を通して、情報の記録再生を行うことにより実現される。システム制御部ex407は例えばマイクロプロセッサで構成され、読み出し書き込みのプログラムを実行することでそれらの処理を実行する。
以上では、光ヘッドex401はレーザスポットを照射するとして説明したが、近接場光を用いてより高密度な記録を行う構成であってもよい。
図39に光ディスクである記録メディアex215の模式図を示す。記録メディアex215の記録面には案内溝(グルーブ)がスパイラル状に形成され、情報トラックex230には、予めグルーブの形状の変化によってディスク上の絶対位置を示す番地情報が記録されている。この番地情報はデータを記録する単位である記録ブロックex231の位置を特定するための情報を含み、記録や再生を行う装置において情報トラックex230を再生し番地情報を読み取ることで記録ブロックを特定することができる。また、記録メディアex215は、データ記録領域ex233、内周領域ex232、外周領域ex234を含んでいる。ユーザデータを記録するために用いる領域がデータ記録領域ex233であり、データ記録領域ex233より内周または外周に配置されている内周領域ex232と外周領域ex234は、ユーザデータの記録以外の特定用途に用いられる。情報再生/記録部ex400は、このような記録メディアex215のデータ記録領域ex233に対して、符号化された音声データ、映像データまたはそれらのデータを多重化した符号化データの読み書きを行う。
以上では、1層のDVD、BD等の光ディスクを例に挙げ説明したが、これらに限ったものではなく、多層構造であって表面以外にも記録可能な光ディスクであってもよい。また、ディスクの同じ場所にさまざまな異なる波長の色の光を用いて情報を記録したり、さまざまな角度から異なる情報の層を記録したりなど、多次元的な記録/再生を行う構造の光ディスクであってもよい。
また、デジタル放送用システムex200において、アンテナex205を有する車ex210で衛星ex202等からデータを受信し、車ex210が有するカーナビゲーションex211等の表示装置に動画を再生することも可能である。なお、カーナビゲーションex211の構成は例えば図37に示す構成のうち、GPS受信部を加えた構成が考えられ、同様なことがコンピュータex111や携帯電話ex114等でも考えられる。また、上記携帯電話ex114等の端末は、テレビex300と同様に、符号化器・復号器を両方持つ送受信型端末の他に、符号化器のみの送信端末、復号器のみの受信端末という3通りの実装形式が考えられる。
このように、上記各実施の形態で示した動画像符号化方法あるいは動画像復号方法を上述したいずれの機器・システムに用いることは可能であり、そうすることで、上記各実施の形態で説明した効果を得ることができる。
また、本発明はかかる上記実施形態に限定されるものではなく、本発明の範囲を逸脱することなく種々の変形または修正が可能である。
(実施の形態4) LSI実装形態
*LSI1 発明部のみ*
本実施の形態では、実施の形態1に示した画像復号装置を、典型的には半導体集積回路であるLSIとして実現した形態を図40に示す。フレームメモリ3をDRAM上に実現し、その他の回路やメモリをLSI上に構成している。
これらは個別に1チップ化されてもよいし、一部またはすべてを含むように1チップ化されても良い。ここではLSIとしたが、集積度の違いにより、IC、システムLSI、スーパーLSI、ウルトラLSIと呼称されることもある。
また、集積回路化の手法はLSIに限るものではなく、専用回路または汎用プロセッサで実現しても良い。LSI製造後に、プログラムすることが可能なFPGA(Field Programmable Gate Array)や、LSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用しても良い。
さらには、半導体技術の進歩または派生する別技術によりLSIに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行っても良い。バイオ技術の適応などが可能性として有り得る。
さらに加えて、本実施の形態の画像復号装置を集積化した半導体チップと、画像を描画するためのディスプレイとを組み合せて、様々な用途に応じた描画機器を構成することができる。携帯電話やテレビ、デジタルビデオレコーダー、デジタルビデオカメラ、カーナビゲーション等における情報描画手段として、本発明を利用することが可能である。ディスプレイとしては、ブラウン管(CRT)の他、液晶やPDP(プラズマディスプレイパネル)、有機ELなどのフラットディスプレイ、プロジェクターを代表とする投射型ディスプレイなどと組み合わせることが可能である。
また、本実施の形態は、システムLSIとDRAM(Dynamic Random Access Memory)の構成を示したが、eDRAM(embeded DRAM)やSRAM(Static Random Access Memory)やハードディスクなど他の記憶装置で構成してもかまわない。
(実施の形態5) セット・システム実装形態
*LSI1 全体*
上記各実施の形態で示した画像復号装置および方法は、典型的には集積回路であるLSIで実現される。一例として、図41に1チップ化されたLSIex500の構成を示す。LSIex500は、以下に説明する要素ex502~ex509を備え、各要素はバスex510を介して接続している。電源回路部ex505は電源がオン状態の場合に各部に対して電力を供給することで動作可能な状態に起動する。
また、例えば復号処理を行う場合には、LSIex500は、マイコンex502の制御に基づいて、ストリームI/Oex506によって復調処理回路ex220から得られた符号化データ、または記録メディアex215から読み出して得た符号化データを一旦メモリex511等に蓄積する。マイコンex502の制御に基づいて、蓄積したデータは処理量や処理速度に応じて適宜複数回に分けるなどされ信号処理部ex507に送られ、信号処理部ex507において音声データの復号および/または映像データの復号が行われる。ここで映像信号の復号処理は上記各実施の形態で説明した復号処理である。さらに、場合により復号された音声信号と復号された映像信号を同期して再生できるようそれぞれの信号を一旦メモリex511等に蓄積するとよい。復号された出力信号はメモリex511等を適宜介しながら、AVI/Oex509からモニタex219等に出力される。メモリex511にアクセスする際にはメモリコントローラex503を介する構成である。
なお、上記では、メモリex511がLSIex500の外部の構成として説明したが、LSIex500の内部に含まれる構成であってもよい。また、LSIex500は1チップ化されてもよいし、複数チップ化されてもよい。
なお、ここでは、LSIとしたが、集積度の違いにより、IC、システムLSI、スーパーLSI、ウルトラLSIと呼称されることもある。
また、集積回路化の手法はLSIに限るものではなく、専用回路または汎用プロセッサで実現してもよい。LSI製造後に、プログラムすることが可能なFPGA(Field Programmable Gate Array)や、LSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用してもよい。
さらには、半導体技術の進歩または派生する別技術によりLSIに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。バイオ技術の適応等が可能性としてありえる。