(57)【要約】【課題】  一つのブロック内に複数サイズの直交変換ブロックを持つストリームの復号において、復号器側でサイズの異なる直交変換ブロックの係数データを連続して入力する場合、処理方法が異なるブロックサイズの係数データを連続して処理する必要があり、効率的な並列処理が難しかった。【解決手段】  復号器側で、ブロックサイズが同一の直交変換ブロックの係数データを連続して入力することが可能となり、処理方法が同一となる係数データが連続して入力されるため、効率的な並列処理が可能となる。【選択図】  図１
2012147293.tif 000002
【特許請求の範囲】
【請求項１】
画像を構造的に異なるサイズの複数のブロックに分割し、分割ブロック単位ごとに変換と可変長符号化を伴う符号化処理を行う画像符号化装置であって、
所定の構造単位に含まれる分割ブロックを対象分割ブロックとして構造順に取得する取得手段と、
前記対象分割ブロックを変換し、可変長符号化して可変長符号化係数データを生成する生成手段と、
前記可変長符号化係数データを並び替える制御手段とを有することを特徴とする画像符号化装置。
【請求項２】
画像を構造的に異なるサイズの複数のブロックに分割し、分割ブロック単位ごとに変換と可変長符号化を伴う符号化処理を行う画像符号化装置における画像符号化方法であって、
所定の構造単位に含まれる分割ブロックを対象分割ブロックとして構造順に取得する取得工程と、
前記対象分割ブロックを変換し、可変長符号化して可変長符号化係数データを生成する生成工程と、
前記可変長符号化係数データを並び替える制御工程とを有することを特徴とする画像符号化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は画像符号化装置、画像符号化方法及びプログラム、画像復号装置、画像復号方法及びプログラムに関する。
【背景技術】
【０００２】
動画像の圧縮記録方法として、ＭＰＥＧ−２  Ｖｉｄｅｏ（以下、ＭＰＥＧ−２と略す。）Ｈ．２６４等の方式が知られている。さらに、Ｈ．２６４をベースとした改良技術が提案されている。
ＭＰＥＧ−２やＨ．２６４では、マクロブロックとよばれる画像を格子状に区切った縦横１６×１６の格子ブロックを一つの処理単位としている。直交変換するブロックサイズは、ＭＰＥＧ−２では８×８、Ｈ．２６４ではでは８×８または、４×４となる。つまり、一つのマクロブロックの中に、複数の直交変換ブロックが存在することになる。一方、Ｈ．２６４をベースとした改良技術では、画像を格子状に区切った格子ブロックをＬＣＴＢ（Ｌａｒｇｅｓｔ  Ｃｏｄｉｎｇ  Ｔｒｅｅ  Ｂｌｏｃｋ）、とよび、そのサイズは６４×６４となっている。ＬＣＴＢは、領域四分木構造を使ってＣＴＢ（Ｃｏｎｄｉｎｇ  Ｔｒｅｅ  Ｂｌｏｃｋ）とよばれるより小さいサイズに分割される。なお、木構造データを探索、または、入出力を行うためには走査順を特定する必要があり、ブロックデータを木構造の前順の走査順に入出力などの各処理を行っている。
【０００３】
さらに、ＣＴＢは、ＴＵ（Ｔｒａｎｓｆｏｒｍ  Ｕｎｉｔ）とよばれる直交変換ブロックを含み、このＴＵも領域四分木構造を使って、より小さいサイズに分割される。ＣＴＢやＴＵは、ヘッダー情報として分割フラグを持ち、分割フラグがＴｒｕｅのブロックは、１／４サイズの４つの分割ブロックを内包する構造をとり、分割フラグがＦａｌｓｅとなるブロックは、分割ブロックを内包しない代わりにブロックの実データを持つことになる。例えば、非分割のＴＵのみが、画像ブロックを直交変換することにより得られる係数データを持つことになる。このように、一つのＬＣＴＢ（格子ブロック）は、階層構造的に複数の異なるサイズの直交変換サイズのブロックを持つことになる。
【０００４】
領域四分木構造を用いて符号化されるＣＴＢやＴＵは，シリアル化されてデコーダに伝送されるが、同時に分割フラグを伝送し、デコーダ側でその分割フラグ情報をパースすることにより、ＣＴＢやＴＵの領域四分木構造を再構築することができる。なお、ブロック分割構造を決定するには様々な方法が存在するが、例えば、ラグランジュ乗数を用いてブロックのコストを計算し、よりコストが低いブロックの分割パターンを選択することにより、分割構造を決定することができる。ラグランジュ乗数を用いたコスト計算については、特許文献１に記載されている。
【０００５】
一方、最近のＣＰＵはＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）とよばれる並列処理命令をもっている。ＳＩＭＤ演算とは、複数のデータに対して同一命令を同時に実行する演算である。例えば、数値データを２５６ビットのレジスタに格納して演算を実行することが可能であり、１サンプルあたりのデータが１６ビットであれば１６サンプル同時に演算を実行できることになる。さらに、１ピクセル（サンプル）、１６ビットとして画像ブロック処理に適用した場合、４×４ブロックの処理は４列（４サンプル）の処理を４行分行うことにより４ブロックの処理を同時に処理することができる。８×８ブロックの処理は８列（８サンプル）の処理を８行分行うことにより２ブロックを同時に処理することができる。ただし、４×４ブロックと８×８ブロックのようにデータの粒度が異なるブロックの処理は、行の処理回数や処理手順そのもの異なるため、それらを同時に混在させて演算することは難しい。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００５−１９１７０６号公報
【非特許文献】
【０００７】
【非特許文献１】ＩＳＯ／ＩＥＣ  １３８１８−２：２０００  Ｉｎｆｏｒｍａｔｉｏｎ  ｔｅｃｈｎｏｌｏｇｙ  −−  Ｇｅｎｅｒｉｃ  ｃｏｄｉｎｇ  ｏｆ  ｍｏｖｉｎｇ  ｐｉｃｔｕｒｅｓ  ａｎｄ  ａｓｓｏｃｉａｔｅｄ  ａｕｄｉｏ  ｉｎｆｏｒｍａｔｉｏｎ：  Ｖｉｄｅｏ
【非特許文献２】ＩＳＯ／ＩＥＣ  １４４９６−１０；２００４  Ｉｎｆｏｒｍａｔｉｏｎ  ｔｅｃｈｎｏｌｏｇｙ  −−  Ｃｏｄｉｎｇ  ｏｆ  ａｕｄｉｏ−ｖｉｓｕａｌ  ｏｂｊｅｃｔｓ  −−  Ｐａｒｔ  １０：  Ａｄｖａｎｃｅｄ  Ｖｉｄｅｏ  Ｃｏｄｉｎｇ
【発明の概要】
【発明が解決しようとする課題】
【０００８】
複数サイズの直交変換ブロックが混在する画像の復号処理において、同一サイズの直交変換ブロックの係数データ復号処理は、同一サイズの直交変換ブロックの組を作って並列演算処理を容易に実行できる。しかし、同一サイズの直交変換ブロックの係数データが連続して入力されない場合には、同一サイズブロックの組を作ることが難しく、並列演算処理を実行することが難しかった。
【０００９】
したがって、本発明は上述した課題を解決するためになされたものであり、並列演算処理を容易に実行することを目的としている。
【課題を解決するための手段】
【００１０】
上述の問題点を解決するため、本発明の画像符号化装置は以下の構成を有する。すなわち、画像を構造的に異なるサイズの複数のブロックに分割し、分割ブロック単位ごとに変換と可変長符号化を伴う符号化処理を行う画像符号化装置であって、所定の構造単位に含まれる分割ブロックを対象分割ブロックとして構造順に取得する取得手段と、前記対象分割ブロックを変換し、可変長符号化して可変長符号化係数データを生成する生成手段と、
前記可変長符号化係数データを並び替える制御手段とを有する。
【発明の効果】
【００１１】
復号処理において、同一サイズの直交変換ブロックの可変長符号化係数データが連続して入力されるため、同一サイズブロックの組を作ることが容易となり、並列演算処理を容易に実行することが可能となる。
【図面の簡単な説明】
【００１２】
【図１】実施形態１における分割ブロックの可変長符号化係数データ生成を示すフローチャートである。
【図２】画像フレーム符号化方法を示すフローチャートである。
【図３】格子ブロック符号化方法を示すフローチャートである。
【図４】実施形態２における分割ブロック復号方法を示すフローチャートである。
【図５】画像フレーム復号方法を示すフローチャートである。
【図６】格子ブロック復号方法を示すフローチャートである。
【図７】格子ブロックの分割例を示す図である。
【図８】（ａ）〜（ｄ）格子ブロックの分割階層ごとの分割フラグ状態の例を示す図である。
【図９】本符号化方法および復号方法が実行されるハードウェア構成例を示す図である。
【図１０】本符号化方法が実行されるハードウェア構成の変形例を示す図である。
【図１１】本復号方法が実行されるハードウェア構成の変形例を示す図である。
【図１２】（ａ）〜（ｂ）画像フレームのストリームデータ構造の例を示す図である。
【図１３】（ａ）〜（ｂ）格子ブロックのストリームデータ構造の例を示す図である。
【図１４】（ａ）〜（ｂ）係数データのＳＩＭＤ演算を実行する組を示す図である。
【図１５】実施形態３における分割ブロックの可変長符号化係数データ生成を示すフローチャートである。
【図１６】実施形態４における分割ブロック復号方法を示すフローチャートである。
【図１７】（ａ）〜（ｂ）シーケンスヘッダー情報のデータ構造を示す図である。
【図１８】再配置データの例を示す図である。
【発明を実施するための形態】
【００１３】
以下、添付の図面を参照して、本願発明をその好適な実施形態に基づいて詳細に説明する。なお、以下の実施形態において示す構成は一例に過ぎず、本発明は図示された構成に限定されるものではない。
【００１４】
＜実施形態１＞
画像の符号化方法について図１、図２、図３、図８、図９を参照して説明する。
【００１５】
図９は、本実施形態における符号化方法を含んだ符号化プログラムを実行するための構成を示している。本符号化プログラムはハードディスク装置（以下、ＨＤＤと略す）９０３に記録されており、ＲＡＭ９０２にロードされ、以下で示される各ステップをＣＰＵ９０１が実行する符号化処理がなされる。テンポラリーバッファと出力バッファは、ソフトウェアとしてのメモリ領域としてＲＡＭ９０２内に生成される。入力画像データはＨＤＤ９０３から読みだされ、符号化データはＲＡＭ９０２内の出力バッファを介して、ＨＤＤ９０３に記録されるものとする。このとき、符号化データが順に出力バッファへ出力されることにより、決められたデータ構造に従った符号化データの並びであるストリームが生成されることになる。
【００１６】
図２は、フレームを縦横６４画素からなる格子で区切った格子ブロックをラスター順に処理し、フレーム全体を符号化するフレーム符号化方法を示すフローチャートである。なお、画像フレームの符号化にあたり、プロファイルやレベル、画像の幅や高さなどの画像の属性データを符号化したシーケンスヘッダー情報を符号化しておくものとする。また、画像が複数のフレームから構成される動画データの場合には、図２で説明される画像フレーム符号化処理が、複数のフレームに対して連続的に行われるものとする。Ｓ２００は、フレームヘッダー情報を生成するステップである。Ｓ２０１は、ラスター順に処理対象の格子ブロック画像を取得するステップである。Ｓ２０２は、処理対象の格子ブロック画像に対し、格子ブロック符号化処理を実行するステップである。Ｓ２０３は、フレーム内の全格子ブロック処理の終了を判定するステップである。
【００１７】
以下、処理の流れを説明する。Ｓ２００は、フレームヘッダー情報を生成する。フレームヘッダー情報は、イントラ・インターなどのフレームタイプなど、フレームの符号化ごとに変化する符号化属性データを符号化した符号の集合である。
【００１８】
Ｓ２０１では、ラスター順に処理対象の格子ブロック画像として６４×６４の画像を取得する。第一回目の処理は画像左上のブロックであり、Ｓ２０１が実行されるごとにラスター順に次のブロックが取得される。
【００１９】
Ｓ２０２は、Ｓ２０１で取得した処理対象の格子ブロック画像に対し、図３の説明で後述する格子ブロック符号化フローを実行するステップである。
【００２０】
Ｓ２０３は、フレーム内の全格子ブロックの処理を判定し、全ての格子ブロックの処理が終了していれば処理を終了し、終了していなければ、Ｓ２０１、Ｓ２０２を繰り返し実行する。これにより、フレームのストリームとして、図１２（ａ）のように、フレームヘッダー情報の後に複数の格子ブロック符号化データが並ぶデータ構造を持つストリームが生成される。また、格子ブロック符号化データは、図１３（ａ）のように格子ブロックヘッダー情報と可変長係数データからなる。図１３についての詳細は後述する。
【００２１】
図３は、図２のＳ２０２で実行される格子ブロックの符号化フローを示すフローチャートである。Ｓ３０１は、対象格子ブロックの予測モードを決定し、対象格子ブロックのブロックデータ（残差データ）を生成するステップである。Ｓ３０２は、対象格子ブロック分割構造を決定するステップである。Ｓ３０３は、対象格子ブロックのヘッダ情報を生成するステップである。Ｓ３０４は、可変長符号化係数データ生成フローを実行するステップである。
【００２２】
以下、処理の流れを説明する。Ｓ３０１では、フレーム内予測、動き補償予測を実行して、対象格子ブロックの予測モードを決定し、同時に、格子ブロックのブロックデータ（残差データ）を生成する。本実施形態で、ブロックデータ（残差データ）とは、フレーム内予測や動き補償予測で作られる予測画像と原画のブロックごとの差分画像であり、ここでは、格子ブロックのブロックデータ（残差データ）は、６４×６４のデータとなる。
【００２３】
Ｓ３０２では、格子ブロックのブロックデータ（残差データ）の分割構造を決定する。本実施形態では、分割ブロックサイズは、６４×６４（分割なしであるが、便宜上分割ブロックとして表現するものとする）、３２×３２、１６×１６、８×８とする。ここでの分割構造の決定とは、格子ブロックを構造的に分割したサイズの異なる直交変換ブロックの最適な組み合わせを決めるということであり、様々なブロックの組み合わせのコストを算出し、もっともコストの低いものを選択することで分割構造を決定できる。その分割構造は、領域四分木構造で表現され、例えば、図７のように分割されることになる。
【００２４】
Ｓ３０３では、予測モード情報と分割構造情報を生成して、格子ブロックヘッダー情報として出力バッファへ出力する。予測モード情報は、予測モード（イントラブロックであるかインターブロックなど）とそれに付随するサブデータ（動きベクトルなど）を符号化したものである。本実施形態では、分割構造情報は１ビットのフラグの情報として表現される。例えば、格子ブロックが図７のように分割され、ブロックを分割の有無を示す分割フラグを分割する場合１、分割しない場合０と表現すると、各階層のブロックごとの分割フラグは、図８のように表現される。図８において、数値は分割フラグを示し、「−」はフラグが不要なことを示し、括弧内の数値は、構造順の順番を表す。本実施形態では、構造順とは、ブロック単位では左上、右上、左下、右下の順とし、階層単位では四分木構造を前順で走査する順番をあらわすものとする。この分割フラグを構造順に走査すると、６４×６４ブロックは分割されるため１、３２×３２の左上ブロックは分割されるため１、１６×１６の左上ブロックは分割されないため０、１６×１６の右上ブロックは分割されないため０などのように走査されることになる。よって、この分割フラグを構造順に走査して並べた分割構造情報は「１１０１００００１１０００」と表現される。なお、８×８ブロックは、これ以上分割しないため、分割フラグを挿入しない。分割フラグが１のブロックは、内包する分割ブロックが係数データを持つため、それ自体は係数データを持たないことになる。
【００２５】
Ｓ３０４では、図１の説明で後述する可変長符号化係数データ生成フローを実行して、可変長符号化係数データを生成する。
図１は、分割ブロックデータ（残差データ）に対して、図３のＳ３０４で実行される可変長符号化係数データ生成フローを実行するフローチャートである。分割ブロックデータとは、格子ブロックのブロックデータ（残差データ）を図３のＳ３０２で決定した分割構造に基づいて、分割したブロックのデータのことである。Ｓ１０１は、処理対象の分割ブロックデータ（残差データ）を構造順に取得するステップである。Ｓ１０２は、処理対象の分割ブロックの可変長符号化係数データを生成するステップである。Ｓ１０３は、全ての分割ブロックが処理されたか否かを判定するステップである。Ｓ１０４は、全ての可変長符号化係数データをサイズ順に並び替えするステップである。
【００２６】
以下、処理の流れを説明する。Ｓ１０１では、処理対象の分割ブロックデータ（残差データ）を構造順に取得する。この分割ブロックデータ（残差データ）は、Ｓ３０２で決定された分割構造に基づいて、Ｓ３０１で生成した格子ブロックの残差データの矩形領域を切りだすことにより取得できる。
【００２７】
Ｓ１０２では、分割ブロックデータ（残差データ）に対し、直交変換・量子化・可変長符号化を実行して可変長符号化係数データを生成し、テンポラリーバッファへ出力する。
【００２８】
Ｓ１０３では、格子ブロック内の全ての分割ブロックが処理されたかを判定する。判定の結果、全ての分割ブロックが処理されていたらＳ１０４を実行し、分割ブロックが処理されていなければＳ１０１、Ｓ１０２を実行する。Ｓ１０１、Ｓ１０２は、全ての分割ブロックが処理されるまで、繰り返し実行される。
【００２９】
Ｓ１０４は、格子ブロック内の全ての可変長符号化係数データに対し、その可変長符号化係数データの元となる直交変換ブロックサイズの大きい順を第一ファクター、構造順を第二ファクターとして、順にテンポラリーバッファから取り出し、出力バッファへ出力する。つまり、テンポラリーバッファの可変長符号化係数データをサイズ順に並び替えながら出力バッファへコピーしていることになる。
【００３０】
格子ブロック内に存在する分割ブロックの可変長符号化係数データの生成後、直交変換ブロックサイズ順に並び替えるという処理を持つことにより、可変長符号化係数データがブロックサイズ順に並んだデータ構造を持つストリームを生成することができる。例えば、並び替えを実行せず、直接、構造順に可変長符号化係数データを出力した場合のストリームデータ構造は、図１３の（ａ）のようになる。しかし、本実施形態におけるストリームデータ構造は、可変長符号化係数データが並び替えされるため、図１３の（ｂ）のように直交変換ブロックサイズ順に並ぶことになる。このストリームのデータ構造は、復号器へ同一サイズの直交変換ブロックの可変長符号化係数データを連続して入力することを可能とし、復号処理において同一サイズブロックの組を作ることが容易なため、逆量子化や逆直交変換など処理を並列に実行しやすくなる。
【００３１】
なお、本実施形態では、格子ブロックを予測単位とし、格子ブロックが複数の直交変換ブロック構造的に内包するように説明しているが、これに限定されない。例えば、格子ブロックを符号化単位ブロックにさらに分割し、分割された符号化単位ブロックが構造的に直交変換ブロックを持つ構成をとっても、本実施形態で示した効果は同様にえることができる。また、並び替えの単位を格子ブロックとして説明したが、スライスなど複数の格子ブロックの集合を単位として、その集合単位で可変長符号化係数データを並び替えたり、格子ブロックをさらに分割した分割ブロック単位ごとに並び替えをしてもよい。
【００３２】
また、可変長符号化係数データは、その元となる直交変換ブロックの大きさを第一ファクターとして並び替える形で説明したが、それに限定されず、小さい順などで並び替えてもよい。
【００３３】
また、本実施形態では、Ｓ１０２で直交変換・量子化・可変長符号化を実施する形で説明している。しかし、Ｓ３０１で、直交変換、量子化、可変長符号化、逆量子化、逆直交変換、可変長符号化を実行して、再構築画像を生成し、再構築画像と原画の差分と可変長符号化による符号量からラグランジュ乗数を用いたコスト計算を行う構成をとってもよい。その際に、可変長符号化により生成した可変長符号化係数データを保存しておき、Ｓ１０２では、分割ブロックデータ（残差データ）の符号化する代わりに該当ブロックに対応する可変長符号化係数データを取得して、出力バッファへ出力する構成をとっても同様の効果をえることができる。
【００３４】
さらに、本実施形態では符号化されたデータはＨＤＤ９０３に記録される例をとって説明したが、これに限定されず、通信インターフェース９０５を解して通信回路に送信したり、外部記録装置に接続し、可搬メディアに記録してももちろん構わない。
【００３５】
本実施形態における符号化方法は、図９の変代わりに、図１０のように、直交変換器１００３、量子化器１００４、可変長符号化器１００５といった専用のハードウェアを持った構成で行われてもよい。このとき、直交変換、量子化、可変長符号化ステップがＣＰＵ１００１により実行されるのでなく、ＣＰＵ１００１が各処理をそれぞれのハードウェアに実行させること以外は、図１で示されるフローと同様である。
【００３６】
＜実施形態２＞
画像の復号方法について図４、図５、図６、図９を参照して説明する。
図９は、本実施形態における復号化方法を含んだ復号プログラムを実行するための構成を示しており、ＨＤＤ９０３に記録されたプログラム、ＲＡＭ９０２にロードされ、以下で示される各ステップをＣＰＵ９０１が実行することにより復号処理がなされる。なお、入力データはＨＤＤ９０３から読みだされ、生成された画像データは、ＶＲＡＭ９０４を介して、ディスプレーで出力されるものとする。また、ＣＰＵ９０１は、５１２ビット幅のレジスタを持ったＳＩＭＤ演算器を持ち、１６ビットのデータを同時に３２サンプル処理できる機能を持つものとする。
【００３７】
図５は、フレームを縦横６４画素からなる格子で区切った格子ブロックをラスター順に復号し、画像フレーム符号化処理を示すフローである。なお、画像フレームを復号する前に、プロファイルやレベル、画像の幅や高さなどの画像の属性データを符号化したシーケンスヘッダー情報を復号しておくものとする。また、ストリームが複数のフレームから構成される動画データの場合には、図５で説明される画像フレーム復号処理が、複数のフレームに対して連続的に行われる。Ｓ５００は、フレームヘッダー情報を復号するステップである。Ｓ５０１は、ラスター順に処理対象格子ブロックの符号化データを取得するステップである。Ｓ５０２は、処理対象格子ブロックの符号化データに対し、格子ブロック復号フローを実行するステップであるＳ５０３は、フレーム内の全格子ブロックの復号処理終了を判定するステップである。
【００３８】
以下、処理の流れを説明する。Ｓ５００は、フレームヘッダー情報を復号し、フレームタイプを取得する。Ｓ５０１では、ラスター順に処理対象格子ブロックの符号化データを取得する。第一回目の処理は画像左上の格子ブロックの符号化データの取得であり、以下、Ｓ５０１が実行されるごとに、ラスター順に次の格子ブロック符号化データが取得される。
【００３９】
Ｓ５０２は、Ｓ５０１で取得した処理対象の格子ブロック符号化データに対し、図６の説明で後述する格子ブロックの復号フローを実行する。
【００４０】
Ｓ５０３は、フレーム内の全格子ブロックの処理の終了を判定し、全ての格子ブロックの処理が終了していれば処理を終了し、終了していなければ、Ｓ５０１、Ｓ５０２を実行する。このように、全格子ブロックの処理が終了するまで、Ｓ５０１、Ｓ５０２は繰り返し実行される。
【００４１】
図６は、図５のＳ５０２でから実行され、格子ブロックの復号画像を生成する格子ブロック復号処理を示すフローチャートである。格子ブロック符号化データは、図１３のように、格子ブロックヘッダー情報と複数の可変長符号化係数データからなるデータである。Ｓ６０１は、格子ブロックヘッダー情報を復号するステップである。Ｓ６０２は、分割ブロック復号フローを実行し、格子ブロックの残差データを生成ステップである。Ｓ６０３は、格子ブロックの予測画像データを生成するステップである。Ｓ６０４は、予測画像データと残差データから復号画像を生成するステップである。
【００４２】
以下、処理の流れを説明する。Ｓ６０１は、格子ブロックのヘッダー情報を復号する。Ｓ６０２は、図４で説明される分割ブロック復号フローを実行し、残差データを生成する。
【００４３】
Ｓ６０３は、Ｓ６０１で生成したヘッダー情報から、格子ブロックの予測モードを取得し、その予測モードに従って、フレーム内予測や動き補償を実行し、予測画像データを生成する。Ｓ６０４は、予測画像データと残差データから復号画像を生成する。
【００４４】
図４は、図６のＳ６０４で示された、格子ブロックの残差データを生成する分割ブロック復号フローを示してものである。Ｓ４０１は、分割ブロックデータ（残差データ）の後述の再配置データを取得するステップである。Ｓ４０２は、処理対象の分割ブロックの可変長符号化係数データを入力順に取得するステップである。Ｓ４０３は、可変長符号化係数データから分割ブロックデータを生成するステップである。Ｓ４０４は、分割ブロックデータ（残差データ）を配置するステップである。Ｓ４０５は、全ての分割ブロックが処理されたかを判定するステップである。
【００４５】
以下、処理の流れを説明する。Ｓ４０１では、分割ブロックデータ（残差データ）の再配置データを分割ブロックごとに取得する。再配置データとは、サイズ順に並んだ可変長符号化係数データと、可変長符号化係数データに対応する分割ブロックデータ（残差データ）の領域四分木構造に基づいた格子ブロック内の位置とそのブロックサイズの対応関係を示す情報である。例えば、図７のように分割された場合、再配置データは図１８のような、可変長符号化係数データに対応する分割ブロックデータ（残差データ）のブロック番号とブロックサイズ、格子ブロックデータ（残差データ）内の位置を座標で表現したものからなる。また、再配置データは、格子ブロックヘッダー情報に埋め込まれた分割構造情報をパースすることによってえられる。
【００４６】
図８を用いて分割構造情報のパースの仕方について説明する。図８は、図７の分割構造に対し、分割階層ごとの分割の状態を示してものである。分割構造情報は、本実施形態では「１１０１００００１１０００」といったビット列で表現され、各ビットが分割フラグの状態を示している。図８の数値は分割フラグを示し、「−」はフラグが不要なことを示し、（  ）内の数値は、ブロック番号であり、分割構造情報のビットの順番に当たる。第０番ビットの値は１でありこれは０番ブロック（６４×６４）が分割されることを示す。０番ブロック（６４×６４）が分割されているため、第１番ビットは１番ブロック（３２×３２）の分割状態を示し１であるためこれも分割されている。１番ブロック（３２×３２）は分割されているため、第２番ビットは２番ブロック（１６×１６）の分割状態を示し、０であるため分割されていない。第３ビットは３番ブロック（１６×１６）の分割状態を示し、１であるため分割されている。このように処理を続けることにより、領域四分木構造を再構築することができる。次にサイズ順に並んだ可変長符号化係数データと領域四分木構造に基づいた各分割ブロックの対応関係について説明する。可変長符号化係数データは、大きい順に並び替えが行われた状態で、ストリームに格納されているとすると、図１３（ｂ）のように、格納されることになる。図７における３２×３２ブロックのうち構造順に第１のブロックは７番ブロックであり、図１３（ｂ）において格納順に第１の係数データは、７番ブロックの可変長符号化係数データ７にあたる。図７において３２×３２ブロックのうち構造順に第２のブロックは８番ブロックであり、図１３（ｂ）において格納順に第２の可変長符号化係数データは、８番ブロックの可変長符号化係数データにあたる。図７において構造順に第３のブロックは、１６×１６のブロックになり、構造順に第１番目の１６×１６ブロックは、０番ブロックであたり、図１３（ｂ）において格納順に第３の係数データ０は、０番ブロックの係数データにあたる。このように処理を続けることにより、可変長符号化係数データと、そのサイズと格子ブロック内での位置が特定され、再配置データが生成できる。
【００４７】
Ｓ４０２は、対象の分割ブロックの可変長符号化係数データを入力順に取得する。このとき、同時に並列処理可能な数の可変長符号化係数データを取得する。例えば、画像データの１サンプルが１６ビットとすると、５１２ビットのＳＩＭＤ演算器は、８サンプルのデータを同時に演算でき、６４×６４、３２×３２、１６×１６、８×８の直交変換ブロックを、それぞれ、１、１，２，４の数だけ並列に処理できる。ただし、６４×６４ブロックを処理する場合には、画像データ一行は６４サンプルであり、ＳＩＭＤ演算レジスタが５１２ビットでは足らないため、２つのレジスタを使って、二回の計算を実施することになる。
【００４８】
Ｓ４０３では、Ｓ４０２で取得した複数の可変長符号化係数データに対して、可変長復号を行い、逆量子化、逆直交変換を行って、分割ブロックデータ（残差データ）を生成する。このとき、逆量子化、逆直交変換は、ＳＩＭＤ演算器を使って同時に実行する。
【００４９】
Ｓ４０４では、再配置データに基づいて、対象の分割ブロックデータ（残差データ）を格子ブロックの残差データとして配置していく。ここでの配置とは、格子ブロックの残差データ（６４×６４）を格納するメモリ領域の再配置データが示す位置に残差データを矩形としてコピーすることである。例えば、図７のような分割構造をもつ格子ブロックがブロックサイズの大きい順に配置されていくことになる。
【００５０】
Ｓ４０５では、全ての分割ブロック処理が終了したかを判定する。判定の結果、全ての分割ブロックが処理されていたら処理を終了し、分割ブロックが処理されていなければ処理が終わるまで、Ｓ４０２〜Ｓ４０４を実行する。処理が終了すると、格子ブロックの残差データ（６４×６４）が生成されることになる。
【００５１】
このような実施形態をとることにより、実施形態１で説明した符号化方法により生成したストリームを復号することができる。さらに、同一サイズの可変長符号化係数データが連続して入力されることにより、効率的にＳＩＭＤ演算を実行することができる。例えば、図１４の（ａ）および図１４の（ｂ）は、図７で示される分割構造において、逆直交変換の入力データとなる係数データを５１２ビット（３２サンプル）ごとに組み合わせた例であり、上段が同時実行可能なサンプル数、下段が係数データの大きさを示している。図１４の（ａ）のように係数が並び替えされていないブロックをＳＩＭＤ演算する場合、係数データ（１６×１６）の処理は、同時に係数データ（１６×１６）を処理できる。しかし、２つの係数データ（１６×１６）の組が構成できないため、１６サンプル同時演算となる個所が存在する。係数データを「−」で表現する個所は、ダミーデータを入力して演算を行うことになる。一方、図１４の（ｂ）は、同一サイズの係数データが連続するため、同一サイズの係数データの組を作りやすく、ダミーデータを使った無駄な演算が減り、ＳＩＭＤ演算の効率があがる。
【００５２】
本実施形態では符号化されたデータがＨＤＤ９０３に記録される例をとって説明したが、これに限定されず、通信インターフェース９０５を解して通信回路に受信したり、外部記録装置に接続し、可搬メディアから入力しても構わない。
本実施形態における復号方法は、図９の代わりに、図１１のように、逆直交変換器１１０３、逆量子化器１１０４、逆可変長符号化器１１０５といった専用のハードウェアを持った構成状で行われてもよい。このとき、逆直交変換、逆量子化、可変長復号化ステップがＣＰＵ１１０１により実行されるのでなく、ＣＰＵ１１０１が各処理をそれぞれのハードウェアに実行させること以外は、図２で示されるフローと同様である。このとき、逆直交変換器や逆量子化器は、内部に複数の演算ユニットを持つことにより、同時に複数のブロックデータを処理でき、スループットが向上する。
【００５３】
＜実施形態３＞
分割ブロックの可変長符号化係数データ生成に関して、図１５を使って説明する。なお、とくに、記述がない場合、その構成および各ステップの動作は、実施形態１と同様とする。本実施形態では、可変長符号化係数データの並び替えを行うかどうかを示す情報を並び替え情報を定義する。
【００５４】
本実施形態では、分割ブロックの可変長符号化係数データ生成に先だって、図２のＳ２００で生成するフレームヘッダー情報に含まれる並び替え情報符号を復号して並び替え情報を得る。並び替え情報は、本実施形態では、並び替える場合を実施する場合には１を、並び替えを実施しない場合には０となる１ビットの並び替え情報符号を挿入するものとするが、これに限定されない。つまり、フレームヘッダー情報は、図１２（ｂ）のようになる。
【００５５】
なお、並び替えを行うか否かの判断は、ユーザー指定により行われる。本符号化方法により生成されるストリームは、特にソフトウェアがＳＩＭＤを使って復号処理を実施する場合に、有効な技術である。そのため、ユーザーが復号のターゲットとしてＳＩＭＤを使うソフトウェアと判断した場合には、並び替え情報符号に１を、そうでない場合には０を挿入するといった形になる。
【００５６】
図１５は、分割ブロックの可変長符号化係数データ生成するフローチャートである。本フローは、図３のＳ３０４において、図１で説明されるフローの代わりに実行される。Ｓ１５０１は、並び替え情報を取得するステップである。Ｓ１５０２は、可変長符号化係数データを並び替えるか否かを判定するステップである。Ｓ１５０３は、可変長符号化係数データをコピーするステップである。
【００５７】
以下、ステップの流れについて詳細に説明する。Ｓ１５０１では、並び替え情報の取得するステップである。本実施形態では、ユーザーがあらかじめ指定した情報を取得する。
【００５８】
Ｓ１５０２は、並び替え情報に従って可変長符号化係数データを並び替えるかを判定し、並び替えを行うと判断した場合にはＳ１０４を実行し、並び替えをしないと判断した場合には、Ｓ１５０３を実行する。
【００５９】
Ｓ１５０３は、格子ブロック内の全ての可変長符号化係数データを、その構造順に、テンポラリーバッファから取り出し、出力バッファへ順に出力する。つまり、単純にコピーする工程となる。
【００６０】
本実施形態では、フレームヘッダーに、並び替え情報を符号として埋め込んだがそれに限定されず、シーケンス、スライス、格子ブロックなどのヘッダーに並び替え情報を埋め込んでもよい。図１７はシーケンスヘッダー情報の例であるが、図１７（ｂ）のようにシーケンスヘッダーに並び替え情報を埋め込んでもよい。また、並び替え情報符号そのものをストリームに挿入するのでなく、例えばソフトウェアデコーダ向けプロファイルを定義して、プロファイルに応じてそこから並び替え情報を生成してもよい。プロファイルは、図１７（ａ）のように、シーケンスヘッダー情報にそのプロファイルＩＤが埋め込むことにより識別される。例えば、Ｓ１５０１では、符号化ストリームのプロファイルがソフトウェアデコーダ向けと設定された場合には、並び替えをするという並び替え情報を取得し、そうでない場合には並び替えをしないという並び替え情報を取得するという構成をとるといった構成である。
また、符号化に先立ち、復号側と通信を行い、復号側がＳＩＭＤを使ったソフトウェアであるか否かを問い合わせ、ＳＩＭＤを使っている場合に本発明を適用しても良い。
【００６１】
本実施形態では、一旦処理対象の分割データを可変著符号化してからテンポラリーバッファに保持した後に並び替えを行う手法を用いて説明したが、これに限定されない。開始直後に並び替え情報を取得し、構造順に分割ブロックデータを符号化しつつ、並び替え情報によって出力先を変更しても良い。例えば、並び替え情報が“１”の時には、可変著符号化データはテンポラリーバッファで保持される。格子ブロック内の全ての分割ブロックデータの符号化が終了した後、出力バッファへのテンポラリーバッファからの読み出し順を変えることで並び替えを実現する。並び替え情報が“０”の時は出力バッファに直接出力しても構わない。この場合、コピーの動作が不要にできる。
【００６２】
＜実施形態４＞
図１６は、格子ブロックの残差データを生成する分割ブロック復号フローを示してものである。本実施形態では、分割ブロックの可変長符号化係数データ生成に先だって、図５のＳ５００で復号するフレームヘッダー情報に並び替え情報が含まれ、フレームヘッダーの復号時にその並び替え情報が復号されるものとして説明する。本実施形態では、並び替える場合を実施する場合には１を、並び替えを実施しない場合には０となる１ビットの並び替え情報符号が挿入されているとして説明するが、これに限定されない。例えば、フレームヘッダー情報は、図１２（ｂ）のようになっている。Ｓ１６０１は、並び替え情報を取得するステップである。Ｓ１６０２は、並び替え情報に従って、可変長符号化係数データを並び替えられているかを判定するステップである。
【００６３】
以降、処理の流れについて説明する。Ｓ１６０１では、フレームヘッダー情報に含まれていた並び替え情報を取得する。
Ｓ１６０２では、Ｓ１６０１で取得した並び替え情報に基づいて、可変長符号化係数データを並び替えられているかを判定する。並び替えられていると判定された場合にはＳ４０１を実行して再配置データを取得し、並び替えられていないと判定された場合には、Ｓ４０１を実行しない。
【００６４】
Ｓ４０４では、再配置データに基づいて、格子ブロック（６４×６４）の残差データとして、分割ブロックデータ（残差データ）配置する。並び替えがなされず再配置データが取得しない場合には、構造順に分割ブロックデータ（残差データ）を配置する。
【図１】
2012147293.tif 000003
【図２】
2012147293.tif 000004
【図３】
2012147293.tif 000005
【図４】
2012147293.tif 000006
【図５】
2012147293.tif 000007
【図６】
2012147293.tif 000008
【図７】
2012147293.tif 000009
【図８】
2012147293.tif 000010
【図９】
2012147293.tif 000011
【図１０】
2012147293.tif 000012
【図１１】
2012147293.tif 000013
【図１２】
2012147293.tif 000014
【図１３】
2012147293.tif 000015
【図１４】
2012147293.tif 000016
【図１５】
2012147293.tif 000017
【図１６】
2012147293.tif 000018
【図１７】
2012147293.tif 000019
【図１８】
2012147293.tif 000020