(57)【特許請求の範囲】
【請求項１】
イントラブロックコピー基準ブロック単位で符号化する画像符号化装置であって、
符号化情報格納メモリに格納された符号化情報から処理対象ピクチャ内の処理対象ブロックのブロックベクトル候補を導出するブロックベクトル候補導出部と、
前記ブロックベクトル候補から選択ブロックベクトルを選択する選択部と、
前記選択ブロックベクトルにより参照する参照ブロックについて、参照可能領域の内部を参照するように前記参照ブロックの参照位置を補正する参照位置補正部と、
前記参照ブロックの参照位置に基づいて、前記処理対象ピクチャ内の復号済み画素を、前記処理対象ブロックの予測値として復号画像メモリから取得する予測部とを備え、
前記参照位置補正部は、前記処理対象ブロックを含むイントラブロックコピー基準ブロックの直前に符号化処理された固定数のイントラブロックコピー基準ブロックを参照可能領域とし、符号化処理が完了しているか否かに関わらず、前記参照可能領域より前のイントラブロックコピー基準ブロックと、前記処理対象ブロックを含むイントラブロックコピー基準ブロックとを無効参照領域として設定することを特徴とする画像符号化装置。
【請求項２】
イントラブロックコピー基準ブロック単位で符号化する画像符号化方法であって、
符号化情報格納メモリに格納された符号化情報から処理対象ピクチャ内の処理対象ブロックのブロックベクトル候補を導出するブロックベクトル候補導出ステップと、
前記ブロックベクトル候補から選択ブロックベクトルを選択する選択ステップと、
前記選択ブロックベクトルにより参照する参照ブロックについて、参照可能領域の内部を参照するように前記参照ブロックの参照位置を補正する参照位置補正ステップと、
前記参照ブロックの参照位置に基づいて、前記処理対象ピクチャ内の復号済み画素を、前記処理対象ブロックの予測値として復号画像メモリから取得する予測ステップとを備え、
前記参照位置補正ステップは、前記処理対象ブロックを含むイントラブロックコピー基準ブロックの直前に符号化処理された固定数のイントラブロックコピー基準ブロックを参照可能領域とし、符号化処理が完了しているか否かに関わらず、前記参照可能領域より前のイントラブロックコピー基準ブロックと、前記処理対象ブロックを含むイントラブロックコピー基準ブロックとを無効参照領域として設定することを特徴とする画像符号化方法。
【請求項３】
イントラブロックコピー基準ブロック単位で符号化する画像符号化プログラムであって、
符号化情報格納メモリに格納された符号化情報から処理対象ピクチャ内の処理対象ブロックのブロックベクトル候補を導出するブロックベクトル候補導出ステップと、
前記ブロックベクトル候補から選択ブロックベクトルを選択する選択ステップと、
前記選択ブロックベクトルにより参照する参照ブロックについて、参照可能領域の内部を参照するように前記参照ブロックの参照位置を補正する参照位置補正ステップと、
前記参照ブロックの参照位置に基づいて、前記処理対象ピクチャ内の復号済み画素を、前記処理対象ブロックの予測値として復号画像メモリから取得する予測ステップとをコンピュータに実行させ、
前記参照位置補正ステップは、前記処理対象ブロックを含むイントラブロックコピー基準ブロックの直前に符号化処理された固定数のイントラブロックコピー基準ブロックを参照可能領域とし、符号化処理が完了しているか否かに関わらず、前記参照可能領域より前のイントラブロックコピー基準ブロックと、前記処理対象ブロックを含むイントラブロックコピー基準ブロックとを無効参照領域として設定することを特徴とする画像符号化プログラム。
【請求項４】
イントラブロックコピー基準ブロック単位で復号する画像復号装置であって、
符号化情報格納メモリに格納された符号化情報から処理対象ピクチャ内の処理対象ブロックのブロックベクトル候補を導出するブロックベクトル候補導出部と、
前記ブロックベクトル候補から選択ブロックベクトルを選択する選択部と、
前記選択ブロックベクトルにより参照する参照ブロックについて、参照可能領域の内部を参照するように前記参照ブロックの参照位置を補正する参照位置補正部と、
前記参照ブロックの参照位置に基づいて、前記処理対象ピクチャ内の復号済み画素を、前記処理対象ブロックの予測値として復号画像メモリから取得する予測部とを備え、
前記参照位置補正部は、前記処理対象ブロックを含むイントラブロックコピー基準ブロックの直前に符号化処理された固定数のイントラブロックコピー基準ブロックを参照可能領域とし、符号化処理が完了しているか否かに関わらず、前記参照可能領域より前のイントラブロックコピー基準ブロックと、前記処理対象ブロックを含むイントラブロックコピー基準ブロックとを無効参照領域として設定することを特徴とする画像復号装置。
【請求項５】
イントラブロックコピー基準ブロック単位で復号する画像復号方法であって、
符号化情報格納メモリに格納された符号化情報から処理対象ピクチャ内の処理対象ブロックのブロックベクトル候補を導出するブロックベクトル候補導出ステップと、
前記ブロックベクトル候補から選択ブロックベクトルを選択する選択ステップと、
前記選択ブロックベクトルにより参照する参照ブロックについて、参照可能領域の内部を参照するように前記参照ブロックの参照位置を補正する参照位置補正ステップと、
前記参照ブロックの参照位置に基づいて、前記処理対象ピクチャ内の復号済み画素を、前記処理対象ブロックの予測値として復号画像メモリから取得する予測ステップとを備え、
前記参照位置補正ステップは、前記処理対象ブロックを含むイントラブロックコピー基準ブロックの直前に符号化処理された固定数のイントラブロックコピー基準ブロックを参照可能領域とし、符号化処理が完了しているか否かに関わらず、前記参照可能領域より前のイントラブロックコピー基準ブロックと、前記処理対象ブロックを含むイントラブロックコピー基準ブロックとを無効参照領域として設定することを特徴とする画像復号方法。
【請求項６】
イントラブロックコピー基準ブロック単位で復号する画像復号プログラムであって、
符号化情報格納メモリに格納された符号化情報から処理対象ピクチャ内の処理対象ブロックのブロックベクトル候補を導出するブロックベクトル候補導出ステップと、
前記ブロックベクトル候補から選択ブロックベクトルを選択する選択ステップと、
前記選択ブロックベクトルにより参照する参照ブロックについて、参照可能領域の内部を参照するように前記参照ブロックの参照位置を補正する参照位置補正ステップと、
前記参照ブロックの参照位置に基づいて、前記処理対象ピクチャ内の復号済み画素を、前記処理対象ブロックの予測値として復号画像メモリから取得する予測ステップとをコンピュータに実行させ、
前記参照位置補正ステップは、前記処理対象ブロックを含むイントラブロックコピー基準ブロックの直前に符号化処理された固定数のイントラブロックコピー基準ブロックを参照可能領域とし、符号化処理が完了しているか否かに関わらず、前記参照可能領域より前のイントラブロックコピー基準ブロックと、前記処理対象ブロックを含むイントラブロックコピー基準ブロックとを無効参照領域として設定することを特徴とする画像復号プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像をブロックに分割し、予測を行う画像符号化及び復号技術に関する。
【背景技術】
【０００２】
画像の符号化及び復号では、処理の対象となる画像を所定数の画素の集合であるブロックに分割し、ブロック単位で処理をする。適切なブロックに分割し、画面内予測（イントラ予測）、画面間予測（インター予測）を適切に設定することにより、符号化効率が向上する。【０００３】
特許文献１には符号化・復号対象のブロックに隣接する復号済みの画素を用いて予測画像を得るイントラ予測技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−２４６９７５号公報
【発明の概要】
【０００５】
しかしながら、特許文献１の技術は符号化・復号対象のブロックに隣接する復号済みの画素のみを予測に用いるものであり、予測効率が悪い。
【０００６】
上記課題を解決する本発明のある態様では、符号化情報格納メモリに格納された符号化情報から処理対象ピクチャ内の処理対象ブロックのブロックベクトル候補を導出するブロックベクトル候補導出部と、前記ブロックベクトル候補から選択ブロックベクトルを選択する選択部と、前記選択ブロックベクトルにより参照する参照ブロックについて、参照可能領域の内部を参照するように前記参照ブロックの参照位置を補正する参照位置補正部とを備え、前記参照ブロックの参照位置に基づいて、前記処理対象ピクチャ内の復号済み画素を、前記処理対象ブロックの予測値として復号画像メモリから取得する。
【０００７】
本発明によれば、高効率な画像符号化・復号処理を低負荷で実現することができる。
【図面の簡単な説明】
【０００８】
【図１】本発明の実施の形態に係る画像符号化装置のブロック図である。
【図２】本発明の実施の形態に係る画像復号装置のブロック図である。
【図３】ツリーブロックを分割する動作を説明するためのフローチャートである。
【図４】入力された画像をツリーブロックに分割する様子を示す図である。
【図５】ｚ−スキャンを説明する図である。
【図６Ａ】ブロックの分割形状を示す図である。
【図６Ｂ】ブロックの分割形状を示す図である。
【図６Ｃ】ブロックの分割形状を示す図である。
【図６Ｄ】ブロックの分割形状を示す図である。
【図６Ｅ】ブロックの分割形状を示す図である。
【図７】ブロックを４分割する動作を説明するためのフローチャートである。
【図８】ブロックを２分割または３分割する動作を説明するためのフローチャートである。
【図９】ブロック分割の形状を表現するためのシンタックスである。
【図１０Ａ】イントラ予測を説明するための図である。
【図１０Ｂ】イントラ予測を説明するための図である。
【図１１】インター予測の参照ブロックを説明するための図である。
【図１２Ａ】符号化ブロック予測モードを表現するためのシンタックスである。
【図１２Ｂ】符号化ブロック予測モードを表現するためのシンタックスである。
【図１３】インター予測に関するシンタックスエレメントとモードの対応を示す図である。
【図１４】制御点２点のアフィン変換動き補償を説明するための図である。
【図１５】制御点３点のアフィン変換動き補償を説明するための図である。
【図１６】図１のインター予測部１０２の詳細な構成のブロック図である。
【図１７】図１６の通常予測動きベクトルモード導出部３０１の詳細な構成のブロック図である。
【図１８】図１６の通常マージモード導出部３０２の詳細な構成のブロック図である。
【図１９】図１６の通常予測動きベクトルモード導出部３０１の通常予測動きベクトルモード導出処理を説明するためのフローチャートである。
【図２０】通常予測動きベクトルモード導出処理の処理手順を表すフローチャートである。
【図２１】通常マージモード導出処理の処理手順を説明するフローチャートである。
【図２２】図２のインター予測部２０３の詳細な構成のブロック図である。
【図２３】図２２の通常予測動きベクトルモード導出部４０１の詳細な構成のブロック図である。
【図２４】図２２の通常マージモード導出部４０２の詳細な構成のブロック図である。
【図２５】図２２の通常予測動きベクトルモード導出部４０１の通常予測動きベクトルモード導出処理を説明するためのフローチャートである。
【図２６】履歴予測動きベクトル候補リスト初期化・更新処理手順を説明する図である。
【図２７】履歴予測動きベクトル候補リスト初期化・更新処理手順における、同一要素確認処理手順のフローチャートである。
【図２８】履歴予測動きベクトル候補リスト初期化・更新処理手順における、要素シフト処理手順のフローチャートである。
【図２９】履歴予測動きベクトル候補導出処理手順を説明するフローチャートである。
【図３０】履歴マージ候補導出処理手順を説明するフローチャートである。
【図３１Ａ】履歴予測動きベクトル候補リスト更新処理の一例を説明するための図である。
【図３１Ｂ】履歴予測動きベクトル候補リスト更新処理の一例を説明するための図である。
【図３１Ｃ】履歴予測動きベクトル候補リスト更新処理の一例を説明するための図である。
【図３２】Ｌ０予測であってＬ０の参照ピクチャ（ＲｅｆＬ０Ｐｉｃ）が処理対象ピクチャ（ＣｕｒＰｉｃ）より前の時刻にある場合の動き補償予測を説明するための図である。
【図３３】Ｌ０予測であってＬ０予測の参照ピクチャが処理対象ピクチャより後の時刻にある場合の動き補償予測を説明するための図である。
【図３４】双予測であってＬ０予測の参照ピクチャが処理対象ピクチャより前の時刻にあって、Ｌ１予測の参照ピクチャが処理対象ピクチャより後の時刻にある場合の動き補償予測の予測方向を説明するための図である。
【図３５】双予測であってＬ０予測の参照ピクチャとＬ１予測の参照ピクチャが処理対象ピクチャより前の時刻にある場合の動き補償予測の予測方向を説明するための図である。
【図３６】双予測であってＬ０予測の参照ピクチャとＬ１予測の参照ピクチャが処理対象ピクチャより後の時刻にある場合の動き補償予測の予測方向を説明するための図である。
【図３７】本発明の実施の形態の符号化復号装置のハードウェア構成の一例を説明するための図である。
【図３８】平均マージ候補導出処理手順を説明するフローチャートである。
【図３９Ａ】イントラブロックコピーの有効参照領域を説明する図である。
【図３９Ｂ】イントラブロックコピーの有効参照領域を説明する図である。
【図４０】図１のイントラ予測部１０３の詳細な構成のブロック図である。
【図４１】図２のイントラ予測部２０４の詳細な構成のブロック図である。
【図４２】イントラブロックコピー予測部３５２のブロック図である。
【図４３】イントラブロックコピー予測部３６２のブロック図である。
【図４４】イントラブロックコピー予測部３５２の予測イントラブロックコピー処理を説明するためのフローチャートである。
【図４５】イントラブロックコピー予測部３６２の予測イントラブロックコピー処理を説明するためのフローチャートである。
【図４６】マージイントラブロックコピー処理を説明するためのフローチャートである。
【図４７】予測イントラブロックコピーのブロックベクトルモード導出処理の処理手順を表すフローチャートである。
【図４８】参照位置補正部３８０及び参照位置補正部４８０の処理を説明する図である。
【図４９】参照位置を補正する様子を示す図である。
【図５０Ａ】参照可能領域を矩形状とした場合の左上および右下の位置を説明する図である。
【図５０Ｂ】参照可能領域を矩形状とした場合の左上および右下の位置を説明する図である。
【図５０Ｃ】参照可能領域を矩形状とした場合の左上および右下の位置を説明する図である。
【図５０Ｄ】参照可能領域を矩形状とした場合の左上および右下の位置を説明する図である。
【図５１】参照可能領域が矩形でない部分の参照位置を補正する処理を説明する図である。
【図５２Ａ】参照位置を補正する様子を示す図である。
【図５２Ｂ】参照位置を補正する様子を示す図である。
【図５３】参照位置補正部３８０及び参照位置補正部４８０の処理を説明する図である。
【図５４Ａ】参照可能領域を２つに分解する様子を説明する図である。
【図５４Ｂ】参照可能領域を２つに分解する様子を説明する図である。
【図５４Ｃ】参照可能領域を２つに分解する様子を説明する図である。
【図５４Ｄ】参照可能領域を２つに分解する様子を説明する図である。
【図５５】参照可能領域を２つに分解し、それぞれの参照位置を補正する処理を説明する図である。
【発明を実施するための形態】
【０００９】
本実施の形態において使用する技術、及び技術用語を定義する。
【００１０】
＜ツリーブロック＞
実施の形態では、所定の大きさで符号化・復号処理対象画像を均等分割する。この単位をツリーブロックと定義する。図４では、ツリーブロックのサイズを１２８ｘ１２８画素としているが、ツリーブロックのサイズはこれに限定されるものではなく、任意のサイズを設定してよい。処理対象（符号化処理においては符号化対象、復号処理においては復号対象に対応する。）のツリーブロックは、ラスタスキャン順、すなわち左から右、上から下の順序で切り替わる。各ツリーブロックの内部は、さらに再帰的な分割が可能である。ツリーブロックを再帰的に分割した後の、符号化・復号の対象となるブロックを符号化ブロックと定義する。また、ツリーブロック、符号化ブロックを総称してブロックと定義する。適切なブロック分割を行うことにより効率的な符号化が可能となる。ツリーブロックのサイズは、符号化装置と復号装置で予め取り決めた固定値とすることもできるし、符号化装置が決定したツリーブロックのサイズを復号装置に伝送するような構成をとることもできる。ここでは、ツリーブロックの最大サイズを１２８ｘ１２８画素、ツリーブロックの最小サイズを１６ｘ１６画素とする。また、符号化ブロックの最大サイズを６４ｘ６４画素、符号化ブロックの最小サイズを４ｘ４画素とする。
【００１１】
＜予測モード＞
処理対象符号化ブロック単位で、処理対象画像の処理済み画像信号から予測を行うイントラ予測（MODE_INTRA）、及び処理済み画像の画像信号から予測を行うインター予測（MODE_INTER）を切り替える。
処理済み画像は、符号化処理においては符号化が完了した信号を復号した画像、画像信号、ツリーブロック、ブロック、符号化ブロック等に用いられ、復号処理においては復号が完了した画像、画像信号、ツリーブロック、ブロック、符号化ブロック等に用いられる。
このイントラ予測（MODE_INTRA）とインター予測（MODE_INTER）を識別するモードを予測モード（PredMode）と定義する。予測モード（PredMode）はイントラ予測（MODE_INTRA）、またはインター予測（MODE_INTER）を値として持つ。
【００１２】
＜イントラブロックコピー予測＞
イントラブロックコピー（Intra Block Copy）予測は、処理対象ピクチャにおける復号済みの画素を予測値として参照し、処理対象ブロックを符号化／復号する処理である。そして、処理対象ブロックから参照する画素までの距離は、ブロックベクトルで表す。ブロックベクトルは処理対象ピクチャを参照し、参照ピクチャは一意に定まるため、参照インデックスは不要である。ブロックベクトルと動きベクトルの違いは、参照するピクチャが処理対象ピクチャか処理済みピクチャかである。また、ブロックベクトルは、適応動きベクトル解像度（AMVR）を用いて、1画素精度または4画素精度を選択できる。
イントラブロックコピーでは、予測イントラブロックコピーモードと、マージイントラブロックコピーモードの２つのモードを選択可能である。
予測イントラブロックコピーモードは、処理済みの情報から導出する予測ブロックベクトルと、差分ブロックベクトルから、処理対象ブロックのブロックベクトルを決定するモードである。予測ブロックベクトルは、処理対象ブロックに隣接する処理済みブロックと、予測ブロックベクトルを特定するためのインデックスから導出する。予測ブロックベクトルを特定するためのインデックス、差分ブロックベクトルはビットストリームで伝送する。
マージイントラブロックコピーモードは、差分動きベクトルを伝送せずに、処理対象ブロックに隣接する処理済みブロックのイントラブロックコピー予測情報から、処理対象ブロックのイントラブロックコピー予測情報を導出するモードである。
【００１３】
＜インター予測＞
処理済み画像の画像信号から予測を行うインター予測では、複数の処理済み画像を参照ピクチャとして用いることができる。複数の参照ピクチャを管理するため、Ｌ０（参照リスト０）とＬ１（参照リスト１）の２種類の参照リストを定義し、それぞれ参照インデックスを用いて参照ピクチャを特定する。ＰスライスではＬ０予測（Pred_L0）が利用可能である。ＢスライスではＬ０予測（Pred_L0）、Ｌ１予測（Pred_L1）、双予測（Pred_BI）が利用可能である。Ｌ０予測（Pred_L0）はＬ０で管理されている参照ピクチャを参照するインター予測であり、Ｌ１予測（Pred_L1）はＬ１で管理されている参照ピクチャを参照するインター予測である。双予測（Pred_BI）はＬ０予測とＬ１予測が共に行われ、Ｌ０とＬ１のそれぞれで管理されている１つずつの参照ピクチャを参照するインター予測である。Ｌ０予測、Ｌ１予測、双予測を特定する情報を、インター予測モードと定義する。以降の処理において出力に添え字ＬＸが付いている定数、変数に関しては、Ｌ０、Ｌ１ごとに処理が行われることを前提とする。
【００１４】
＜予測動きベクトルモード＞
予測動きベクトルモードは、予測動きベクトルを特定するためのインデックス、差分動きベクトル、インター予測モード、参照インデックスを伝送し、処理対象ブロックのインター予測情報を決定するモードである。予測動きベクトルは、処理対象ブロックに隣接する処理済みブロック、または処理済み画像に属するブロックで処理対象ブロックと同一位置またはその付近（近傍）に位置するブロックから導出した予測動きベクトル候補と、予測動きベクトルを特定するためのインデックスから導出する。
【００１５】
＜マージモード＞
マージモードは、差分動きベクトル、参照インデックスを伝送せずに、処理対象ブロックに隣接する処理済みブロック、または処理済み画像に属するブロックで処理対象ブロックと同一位置またはその付近（近傍）に位置するブロックのインター予測情報から、処理対象ブロックのインター予測情報を導出するモードである。
【００１６】
処理対象ブロックに隣接する処理済みブロック、およびその処理済みブロックのインター予測情報を空間マージ候補と定義する。処理済み画像に属するブロックで処理対象ブロックと同一位置またはその付近（近傍）に位置するブロック、およびそのブロックのインター予測情報から導出されるインター予測情報を時間マージ候補と定義する。各マージ候補はマージ候補リストに登録され、マージインデックスにより、処理対象ブロックの予測で使用するマージ候補を特定する。
【００１７】
＜隣接ブロック＞
図１１は、予測動きベクトルモード、マージモードで、インター予測情報を導出するために参照する参照ブロックを説明する図である。Ａ０，Ａ１，Ａ２，Ｂ０，Ｂ１，Ｂ２，Ｂ３は、処理対象ブロックに隣接する処理済みブロックである。Ｔ０は、処理済み画像に属するブロックで、処理対象画像における処理対象ブロックと同一位置またはその付近（近傍）に位置するブロックである。
【００１８】
Ａ１，Ａ２は、処理対象符号化ブロックの左側に位置し、処理対象符号化ブロックに隣接するブロックである。Ｂ１，Ｂ３は、処理対象符号化ブロックの上側に位置し、処理対象符号化ブロックに隣接するブロックである。Ａ０，Ｂ０，Ｂ２はそれぞれ、処理対象符号化ブロックの左下、右上、左上に位置するブロックである。
【００１９】
予測動きベクトルモード、マージモードにおいて隣接ブロックをどのように扱うかの詳細については後述する。
【００２０】
＜アフィン変換動き補償＞
アフィン変換動き補償は、符号化ブロックを所定単位のサブブロックに分割し、分割された各サブブロックに対して個別に動きベクトルを決定して動き補償を行うものである。各サブブロックの動きベクトルは、処理対象ブロックに隣接する処理済みブロック、または処理済み画像に属するブロックで処理対象ブロックと同一位置またはその付近（近傍）に位置するブロックのインター予測情報から導出する１つ以上の制御点に基づき導出する。本実施の形態では、サブブロックのサイズを４ｘ４画素とするが、サブブロックのサイズはこれに限定されるものではないし、画素単位で動きベクトルを導出してもよい。
【００２１】
図１４に、制御点が２つの場合のアフィン変換動き補償の例を示す。この場合、２つの制御点が水平方向成分、垂直方向成分の２つのパラメータを有する。このため、制御点が２つの場合のアフィン変換を、４パラメータアフィン変換と呼称する。図１４のＣＰ１、ＣＰ２が制御点である。
図１５に、制御点が３つの場合のアフィン変換動き補償の例を示す。この場合、３つの制御点が水平方向成分、垂直方向成分の２つのパラメータを有する。このため、制御点が３つの場合のアフィン変換を、６パラメータアフィン変換と呼称する。図１５のＣＰ１、ＣＰ２、ＣＰ３が制御点である。
【００２２】
アフィン変換動き補償は、予測動きベクトルモードおよびマージモードのいずれのモードにおいても利用可能である。予測動きベクトルモードでアフィン変換動き補償を適用するモードをサブブロック予測動きベクトルモードと定義し、マージモードでアフィン変換動き補償を適用するモードをサブブロックマージモードと定義する。
【００２３】
＜符号化ブロックのシンタックス＞
図１２Ａ、図１２Ｂ、および図１３を用いて、符号化ブロックの予測モードを表現するためのシンタックスを説明する。図１２Ａのpred_mode_flagは、インター予測か否かを示すフラグである。pred_mode_flagが0であればインター予測となり、pred_mode_flagが１であればイントラ予測となる。イントラ予測の場合には、イントラブロックコピー予測であるかを示すフラグであるpred_mode_ibc_flagを送る。イントラブロックコピー予測である場合（pred_mode_ibc_flag=1）は、merge_flagを送る。merge_flagは、マージイントラブロックコピーモードとするか、予測イントラブロックコピーモードとするかを示すフラグである。マージイントラブロックコピーモードである場合（merge_flag=1）は、マージインデックスmerge_idxを送る。イントラブロックコピー予測でない場合（pred_mode_ibc_flag=0）、通常イントラ予測とし、通常イントラ予測の情報intra_pred_modeを送る。
インター予測の場合にはmerge_flagを送る。merge_flagは、マージモードとするか、予測動きベクトルモードとするかを示すフラグである。予測動きベクトルモードの場合（merge_flag=0）、サブブロック予測動きベクトルモードを適用するか否かを示すフラグinter_affine_flagを送る。サブブロック予測動きベクトルモードを適用する場合（inter_affine_flag=1）、cu_affine_type_flagを送る。cu_affine_type_flagは、サブブロック予測動きベクトルモードにおいて、制御点の数を決定するためのフラグである。
一方、マージモードの場合（merge_flag=1）、図１２Ｂのmerge_subblock_flagを送る。merge_subblock_flagは、サブブロックマージモードを適用するか否かを示すフラグである。サブブロックマージモードの場合（merge_subblock_flag=1）、マージインデックスmerge_subblock_idxを送る。一方、サブブロックマージモードでない場合（merge_subblock_flag=0）、三角マージモードを適用するか否かを示すフラグmerge_triangle_flagを送る。三角マージモードを適用する場合（merge_triangle_flag=1）、ブロックを分割する方向merge_triangle_split_dir、および分割された２つのパーティションごとにマージ三角インデックスmerge_triangle_idx0,merge_triangle_idx1を送る。一方、三角マージモードを適用しない場合（merge_triangle_flag=0）、マージインデックスmerge_idxを送る。
図１３にインター予測の各シンタックスエレメントの値と、それに対応する予測モードを示す。merge_flag=0,inter_affine_flag=0は、通常予測動きベクトルモード（Inter Pred Mode）に対応する。merge_flag=0,inter_affine_flag=1は、サブブロック予測動きベクトルモード（Inter Affine Mode）に対応する。merge_flag=1,merge_subblock_flag=0,merge_trianlge_flag=0は、通常マージモード（Merge Mode）に対応する。merge_flag=1,merge_subblock_flag=0,merge_trianlge_flag=1は、三角マージモード（Triangle Merge Mode）に対応する。merge_flag=1,merge_subblock_flag=1は、サブブロックマージモード（Affine Merge Mode）に対応する。
【００２４】
＜ＰＯＣ＞
ＰＯＣ（Picture Order Count）は符号化されるピクチャに関連付けられる変数であり、ピクチャの出力順序に応じた１ずつ増加する値が設定される。ＰＯＣの値によって、同じピクチャであるかを判別したり、出力順序でのピクチャ間の前後関係を判別したり、ピクチャ間の距離を導出したりすることができる。例えば、２つのピクチャのＰＯＣが同じ値を持つ場合、同一のピクチャであると判断できる。２つのピクチャのＰＯＣが違う値を持つ場合、ＰＯＣの値が小さいピクチャのほうが、先に出力されるピクチャであると判断でき、２つのピクチャのＰＯＣの差が時間軸方向でのピクチャ間距離を示す。
【００２５】
（第１の実施の形態）
本発明の第１の実施の形態に係る画像符号化装置１００及び画像復号装置２００について説明する。
【００２６】
図１は、第１の実施の形態に係る画像符号化装置１００のブロック図である。実施の形態の画像符号化装置１００は、ブロック分割部１０１、インター予測部１０２、イントラ予測部１０３、復号画像メモリ１０４、予測方法決定部１０５、残差生成部１０６、直交変換・量子化部１０７、ビット列符号化部１０８、逆量子化・逆直交変換部１０９、復号画像信号重畳部１１０、および符号化情報格納メモリ１１１を備える。
【００２７】
ブロック分割部１０１は、入力された画像を再帰的に分割して、符号化ブロックを生成する。ブロック分割部１０１は、分割対象となるブロックを水平方向と垂直方向にそれぞれ分割する４分割部と、分割対象となるブロックを水平方向または垂直方向のいずれかに分割する２−３分割部とを含む。ブロック分割部１０１は、生成した符号化ブロックを処理対象符号化ブロックとし、その処理対象符号化ブロックの画像信号を、インター予測部１０２、イントラ予測部１０３および残差生成部１０６に供給する。また、ブロック分割部１０１は、決定した再帰分割構造を示す情報をビット列符号化部１０８に供給する。ブロック分割部１０１の詳細な動作は後述する。
【００２８】
インター予測部１０２は、処理対象符号化ブロックのインター予測を行う。インター予測部１０２は、符号化情報格納メモリ１１１に格納されているインター予測情報と、復号画像メモリ１０４に格納されている復号済みの画像信号とから、複数のインター予測情報の候補を導出し、導出した複数の候補の中から適したインター予測モードを選択し、選択されたインター予測モード、及び選択されたインター予測モードに応じた予測画像信号を予測方法決定部１０５に供給する。インター予測部１０２の詳細な構成と動作は後述する。
【００２９】
イントラ予測部１０３は、処理対象符号化ブロックのイントラ予測を行う。イントラ予測部１０３は、復号画像メモリ１０４に格納されている復号済みの画像信号を参照画素として参照し、符号化情報格納メモリ１１１に格納されているイントラ予測モード等の符号化情報に基づくイントラ予測により予測画像信号を生成する。イントラ予測では、イントラ予測部１０３は、複数のイントラ予測モードの中から適したイントラ予測モードを選択し、選択されたイントラ予測モード、及び選択されたイントラ予測モードに応じた予測画像信号を予測方法決定部１０５に供給する。イントラ予測部１０３の詳細な構成と動作は後述する。
【００３０】
復号画像メモリ１０４は、復号画像信号重畳部１１０で生成した復号画像を格納する。復号画像メモリ１０４は、格納している復号画像を、インター予測部１０２、イントラ予測部１０３に供給する。
【００３１】
予測方法決定部１０５は、イントラ予測とインター予測のそれぞれに対して、符号化情報及び残差の符号量、予測画像信号と処理対象画像信号との間の歪量等を用いて評価することにより、最適な予測モードを決定する。イントラ予測の場合は、予測方法決定部１０５は、イントラ予測モード等のイントラ予測情報を符号化情報としてビット列符号化部１０８に供給する。インター予測のマージモードの場合は、予測方法決定部１０５は、マージインデックス、サブブロックマージモードか否かを示す情報（サブブロックマージフラグ）等のインター予測情報を符号化情報としてビット列符号化部１０８に供給する。インター予測の予測動きベクトルモードの場合は、予測方法決定部１０５は、インター予測モード、予測動きベクトルインデックス、Ｌ０、Ｌ１の参照インデックス、差分動きベクトル、サブブロック予測動きベクトルモードか否かを示す情報（サブブロック予測動きベクトルフラグ）等のインター予測情報を符号化情報としてビット列符号化部１０８に供給する。さらに、予測方法決定部１０５は、決定した符号化情報を符号化情報格納メモリ１１１に供給する。予測方法決定部１０５は、残差生成部１０６及び予測画像信号を復号画像信号重畳部１１０に供給する。
【００３２】
残差生成部１０６は、処理対象の画像信号から予測画像信号を減ずることにより残差を生成し、直交変換・量子化部１０７に供給する。
【００３３】
直交変換・量子化部１０７は、残差に対して量子化パラメータに応じて直交変換及び量子化を行い直交変換・量子化された残差を生成し、生成した残差をビット列符号化部１０８と逆量子化・逆直交変換部１０９とに供給する。
【００３４】
ビット列符号化部１０８は、シーケンス、ピクチャ、スライス、符号化ブロック単位の情報に加えて、符号化ブロック毎に予測方法決定部１０５によって決定された予測方法に応じた符号化情報を符号化する。具体的には、ビット列符号化部１０８は、符号化ブロック毎の予測モードPredModeを符号化する。予測モードがインター予測（MODE_INTER）の場合、ビット列符号化部１０８は、マージモードか否かを判別するフラグ、サブブロックマージフラグ、マージモードの場合はマージインデックス、マージモードでない場合はインター予測モード、予測動きベクトルインデックス、差分動きベクトルに関する情報、サブブロック予測動きベクトルフラグ等の符号化情報（インター予測情報）を規定のシンタックス（ビット列の構文規則）に従って符号化し、第１のビット列を生成する。予測モードがイントラ予測（MODE_INTRA）の場合、ビット列符号化部１０８は、イントラブロックコピーか否かを判別するフラグを規定のシンタックスに従って符号化する。イントラブロックコピーの場合は、マージモードならばマージインデックス、マージモードでないならば予測ブロックベクトルインデックス、差分ブロックベクトル等の符号化情報（イントラ予測情報）を規定のシンタックスに従って符号化する。イントラブロックコピーでない場合は、イントラ予測モード等の符号化情報（イントラ予測情報）を規定のシンタックスに従って符号化する。以上の符号化により、第１のビット列を生成する。また、ビット列符号化部１０８は、直交変換及び量子化された残差を規定のシンタックスに従ってエントロピー符号化して第２のビット列を生成する。ビット列符号化部１０８は、第１のビット列と第２のビット列を規定のシンタックスに従って多重化し、ビットストリームを出力する。
【００３５】
逆量子化・逆直交変換部１０９は、直交変換・量子化部１０７から供給された直交変換・量子化された残差を逆量子化及び逆直交変換して残差を算出し、算出した残差を復号画像信号重畳部１１０に供給する。
【００３６】
復号画像信号重畳部１１０は、予測方法決定部１０５による決定に応じた予測画像信号と逆量子化・逆直交変換部１０９で逆量子化及び逆直交変換された残差を重畳して復号画像を生成し、復号画像メモリ１０４に格納する。なお、復号画像信号重畳部１１０は、復号画像に対して符号化によるブロック歪等の歪を減少させるフィルタリング処理を施した後、復号画像メモリ１０４に格納してもよい。
【００３７】
符号化情報格納メモリ１１１は、予測方法決定部１０５で決定した、予測モード（インター予測またはイントラ予測）等の符号化情報を格納する。インター予測の場合は、符号化情報格納メモリ１１１が格納する符号化情報には、決定した動きベクトル、参照リストＬ０、Ｌ１の参照インデックス、履歴予測動きベクトル候補リスト等のインター予測情報が含まれる。またインター予測のマージモードの場合は、符号化情報格納メモリ１１１が格納する符号化情報には、上述の各情報に加え、マージインデックス、サブブロックマージモードか否かを示す情報（サブブロックマージフラグ）のインター予測情報が含まれる。またインター予測の予測動きベクトルモードの場合は、符号化情報格納メモリ１１１が格納する符号化情報には、上述の各情報に加え、インター予測モード、予測動きベクトルインデックス、差分動きベクトル、サブブロック予測動きベクトルモードか否かを示す情報（サブブロック予測動きベクトルフラグ）等のインター予測情報が含まれる。イントラ予測の場合は、符号化情報格納メモリ１１１が格納する符号化情報には、決定したイントラ予測モード等のイントラ予測情報が含まれる。
【００３８】
図２は、図１の画像符号化装置に対応した本発明の実施の形態に係る画像復号装置の構成を示すブロックである。実施の形態の画像復号装置は、ビット列復号部２０１、ブロック分割部２０２、インター予測部２０３、イントラ予測部２０４、符号化情報格納メモリ２０５、逆量子化・逆直交変換部２０６、復号画像信号重畳部２０７、および復号画像メモリ２０８を備える。
【００３９】
図２の画像復号装置の復号処理は、図１の画像符号化装置の内部に設けられている復号処理に対応するものであるから、図２の符号化情報格納メモリ２０５、逆量子化・逆直交変換部２０６、復号画像信号重畳部２０７、および復号画像メモリ２０８の各構成は、図１の画像符号化装置の符号化情報格納メモリ１１１、逆量子化・逆直交変換部１０９、復号画像信号重畳部１１０、および復号画像メモリ１０４の各構成とそれぞれ対応する機能を有する。
【００４０】
ビット列復号部２０１に供給されるビットストリームは、規定のシンタックスの規則に従って分離される。ビット列復号部２０１は、分離された第１のビット列を復号し、シーケンス、ピクチャ、スライス、符号化ブロック単位の情報、及び、符号化ブロック単位の符号化情報を得る。具体的には、ビット列復号部２０１は、符号化ブロック単位でインター予測（MODE_INTER）かイントラ予測（MODE_INTRA）かを判別する予測モードPredModeを復号する。予測モードがインター予測（MODE_INTER）の場合、ビット列復号部２０１は、マージモードか否かを判別するフラグ、マージモードの場合はマージインデックス、サブブロックマージフラグ、予測動きベクトルモードである場合はインター予測モード、予測動きベクトルインデックス、差分動きベクトル、サブブロック予測動きベクトルフラグ等に関する符号化情報（インター予測情報）を規定のシンタックスに従って復号し、符号化情報（インター予測情報）をインター予測部２０３、およびブロック分割部２０２を介して符号化情報格納メモリ２０５に供給する。予測モードがイントラ予測（MODE_INTRA）の場合、ビット列復号部２０１は、イントラブロックコピーか否かを判別するフラグを復号する。イントラブロックコピーの場合は、マージモードならばマージインデックス、マージモードでないならば予測ブロックベクトルインデックス、差分ブロックベクトル等の符号化情報（イントラ予測情報）を規定のシンタックスに従って復号する。イントラブロックコピーでない場合は、イントラ予測モード等の符号化情報（イントラ予測情報）を規定のシンタックスに従って復号する。以上の復号により、符号化情報（イントラ予測情報）をインター予測部２０３またはイントラ予測部２０４、およびブロック分割部２０２を介して符号化情報格納メモリ２０５に供給する。ビット列復号部２０１は、分離した第２のビット列を復号して直交変換・量子化された残差を算出し、直交変換・量子化された残差を逆量子化・逆直交変換部２０６に供給する。
【００４１】
インター予測部２０３は、処理対象の符号化ブロックの予測モードPredModeがインター予測（MODE_INTER）で予測動きベクトルモードである時に、符号化情報格納メモリ２０５に記憶されている既に復号された画像信号の符号化情報を用いて、複数の予測動きベクトルの候補を導出して、導出した複数の予測動きベクトルの候補を、後述する予測動きベクトル候補リストに登録する。インター予測部２０３は、予測動きベクトル候補リストに登録された複数の予測動きベクトルの候補の中から、ビット列復号部２０１で復号され供給される予測動きベクトルインデックスに応じた予測動きベクトルを選択し、ビット列復号部２０１で復号された差分動きベクトルと選択された予測動きベクトルから動きベクトルを算出し、算出した動きベクトルを他の符号化情報とともに符号化情報格納メモリ２０５に格納する。ここで供給・格納する符号化ブロックの符号化情報は、予測モードPredMode、Ｌ０予測、及びＬ１予測を利用するか否かを示すフラグpredFlagL0[xP][yP], predFlagL1[xP][yP]、Ｌ０、Ｌ１の参照インデックスrefIdxL0[xP][yP], refIdxL1[xP][yP]、Ｌ０、Ｌ１の動きベクトルmvL0[xP][yP], mvL1[xP][yP]等である。ここで、xP、yPはピクチャ内での符号化ブロックの左上の画素の位置を示すインデックスである。予測モードPredModeがインター予測（MODE_INTER）で、インター予測モードがＬ０予測（Pred_L0）の場合、Ｌ０予測を利用するか否かを示すフラグpredFlagL0は１、Ｌ１予測を利用するか否かを示すフラグpredFlagL1は０である。インター予測モードがＬ１予測（Pred_L1）の場合、Ｌ０予測を利用するか否かを示すフラグpredFlagL0は０、Ｌ１予測を利用するか否かを示すフラグpredFlagL1は１である。インター予測モードが双予測（Pred_BI）の場合、Ｌ０予測を利用するか否かを示すフラグpredFlagL0、Ｌ１予測を利用するか否かを示すフラグpredFlagL1は共に１である。さらに、処理対象の符号化ブロックの予測モードPredModeがインター予測（MODE_INTER）でマージモードの時に、マージ候補を導出する。符号化情報格納メモリ２０５に記憶されている既に復号された符号化ブロックの符号化情報を用いて、複数のマージの候補を導出して後述するマージ候補リストに登録し、マージ候補リストに登録された複数のマージ候補の中からビット列復号部２０１で復号され供給されるマージインデックスに対応したマージ候補を選択し、選択されたマージ候補のＬ０予測、及びＬ１予測を利用するか否かを示すフラグpredFlagL0[xP][yP], predFlagL1[xP][yP]、Ｌ０、Ｌ１の参照インデックスrefIdxL0[xP][yP], refIdxL1[xP][yP]、Ｌ０、Ｌ１の動きベクトルmvL0[xP][yP], mvL1[xP][yP]等のインター予測情報を符号化情報格納メモリ２０５に格納する。ここで、xP、yPはピクチャ内での符号化ブロックの左上の画素の位置を示すインデックスである。インター予測部２０３の詳細な構成と動作は後述する。
【００４２】
イントラ予測部２０４は、処理対象の符号化ブロックの予測モードPredModeがイントラ予測（MODE_INTRA）の時に、イントラ予測を行う。ビット列復号部２０１で復号された符号化情報にはイントラ予測モードが含まれている。イントラ予測部２０４は、ビット列復号部２０１で復号された符号化情報に含まれるイントラ予測モードに応じて、復号画像メモリ２０８に格納されている復号済みの画像信号からイントラ予測により予測画像信号を生成し、生成した予測画像信号を復号画像信号重畳部２０７に供給する。イントラ予測部２０４は、画像符号化装置１００のイントラ予測部１０３に対応するものであるから、イントラ予測部１０３と同様の処理を行う。
【００４３】
逆量子化・逆直交変換部２０６は、ビット列復号部２０１で復号された直交変換・量子化された残差に対して逆直交変換及び逆量子化を行い、逆直交変換・逆量子化された残差を得る。
【００４４】
復号画像信号重畳部２０７は、インター予測部２０３でインター予測された予測画像信号、またはイントラ予測部２０４でイントラ予測された予測画像信号と、逆量子化・逆直交変換部２０６により逆直交変換・逆量子化された残差とを重畳することにより、復号画像信号を復号し、復号した復号画像信号を復号画像メモリ２０８に格納する。復号画像メモリ２０８に格納する際には、復号画像信号重畳部２０７は、復号画像に対して符号化によるブロック歪等を減少させるフィルタリング処理を施した後、復号画像メモリ２０８に格納してもよい。
【００４５】
次に、画像符号化装置１００におけるブロック分割部１０１の動作について説明する。図３は、画像をツリーブロックに分割し、各ツリーブロックをさらに分割する動作を示すフローチャートである。まず、入力された画像を、所定サイズのツリーブロックに分割する（ステップＳ１００１）。各ツリーブロックについては、所定の順序、すなわちラスタスキャン順に走査し（ステップＳ１００２）、処理対象のツリーブロックの内部を分割する（ステップＳ１００３）。
【００４６】
図７は、ステップＳ１００３の分割処理の詳細動作を示すフローチャートである。まず、処理対象のブロックを４分割するか否かを判断する（ステップＳ１１０１）。
【００４７】
処理対象ブロックを４分割すると判断した場合は、処理対象ブロックを４分割する（ステップＳ１１０２）。処理対象ブロックを分割した各ブロックについて、Ｚスキャン順、すなわち左上、右上、左下、右下の順に走査する（ステップＳ１１０３）。図５は、Ｚスキャン順の例であり、図６Ａの６０１は、処理対象ブロックを４分割した例である。図６Ａの６０１の番号０〜３は処理の順番を示したものである。そしてステップＳ１１０１で分割した各ブロックについて、図７の分割処理を再帰的に実行する（ステップＳ１１０４）。
【００４８】
処理対象ブロックを４分割しないと判断した場合は、２−３分割を行う（ステップＳ１１０５）。
【００４９】
図８は、ステップＳ１１０５の２−３分割処理の詳細動作を示すフローチャートである。まず、処理対象のブロックを２−３分割するか否か、すなわち２分割または３分割の何れかを行うか否かを判断する（ステップＳ１２０１）。
【００５０】
処理対象ブロックを２−３分割すると判断しない場合、すなわち分割しないと判断した場合は、分割を終了する（ステップＳ１２１１）。つまり、再帰的な分割処理により分割されたブロックに対して、さらなる再帰的な分割処理はしない。
【００５１】
処理対象のブロックを２−３分割すると判断した場合は、さらに処理対象ブロックを２分割するか否か（ステップＳ１２０２）を判断する。
【００５２】
処理対象ブロックを２分割すると判断した場合は、処理対象ブロックを上下（垂直方向）に分割するか否かを判断し（ステップＳ１２０３）、その結果に基づき、処理対象ブロックを上下（垂直方向）に２分割する（ステップＳ１２０４）か、処理対象ブロックを左右（水平方向）に２分割する（ステップＳ１２０５）。ステップＳ１２０４の結果、処理対象ブロックは、図６Ｂの６０２に示す通り、上下（垂直方向）２分割に分割され、ステップＳ１２０５の結果、処理対象ブロックは、図６Ｄの６０４に示す通り、左右（水平方向）２分割に分割される。
【００５３】
ステップＳ１２０２において、処理対象のブロックを２分割すると判断しなかった場合、すなわち３分割すると判断した場合は、処理対象ブロックを上中下（垂直方向）に分割するか否かを判断し（ステップＳ１２０６）、その結果に基づき、処理対象ブロックを上中下（垂直方向）に３分割する（ステップＳ１２０７）か、処理対象ブロックを左中右（水平方向）に３分割する（ステップＳ１２０８）。ステップＳ１２０７の結果、処理対象ブロックは、図６Ｃの６０３に示す通り、上中下（垂直方向）３分割に分割され、ステップＳ１２０８の結果、処理対象ブロックは、図６Ｅの６０５に示す通り、左中右（水平方向）３分割に分割される。
【００５４】
ステップＳ１２０４、ステップＳ１２０５、ステップＳ１２０７、ステップＳ１２０８のいずれかを実行後、処理対象ブロックを分割した各ブロックについて、左から右、上から下の順に走査する（ステップＳ１２０９）。図６Ｂ〜Ｅの６０２から６０５の番号０〜２は処理の順番を示したものである。分割した各ブロックについて、図８の２−３分割処理を再帰的に実行する（ステップＳ１２１０）。
【００５５】
ここで説明した再帰的なブロック分割は、分割する回数、または、処理対象のブロックのサイズ等により、分割要否を制限してもよい。分割要否を制限する情報は、符号化装置と復号化装置の間で予め取り決めを行うことで、情報の伝達を行わない構成で実現してもよいし、符号化装置が分割要否を制限する情報を決定し、ビット列に記録することにより、復号化装置に伝達する構成で実現してもよい。
【００５６】
あるブロックを分割したとき、分割前のブロックを親ブロックと呼び、分割後の各ブロックを子ブロックと呼ぶ。
【００５７】
次に、画像復号装置２００におけるブロック分割部２０２の動作について説明する。ブロック分割部２０２は、画像符号化装置１００のブロック分割部１０１と同様の処理手順でツリーブロックを分割するものである。ただし、画像符号化装置１００のブロック分割部１０１では、画像認識による最適形状の推定や歪レート最適化等最適化手法を適用し、最適なブロック分割の形状を決定するのに対し、画像復号装置２００におけるブロック分割部２０２は、ビット列に記録されたブロック分割情報を復号することにより、ブロック分割形状を決定する点が異なる。
【００５８】
第１の実施の形態のブロック分割に関するシンタックス（ビット列の構文規則）を図９に示す。coding_quadtree()はブロックの４分割処理にかかるシンタックスを表す。multi_type_tree()はブロックの２分割または３分割処理にかかるシンタックスを表す。qt_splitはブロックを４分割するか否かを示すフラグである。ブロックを４分割する場合は、qt_split=1とし、４分割しない場合は、qt_split=0とする。４分割する場合(qt_split=1)、４分割した各ブロックについて、再帰的に４分割処理をする(coding_quadtree(0), coding_quadtree(1), coding_quadtree(2), coding_quadtree(3)、引数の０〜３は図６Ａの６０１の番号に対応する。)。４分割しない場合(qt_split=0)は、multi_type_tree()に従い、後続の分割を決定する。mtt_splitは、さらに分割をするか否かを示すフラグである。さらに分割をする場合(mtt_split=1)、垂直方向に分割するか水平方向に分割するかを示すフラグであるmtt_split_verticalと、２分割するか３分割するかを決定するフラグであるmtt_split_binaryを伝送する。mtt_split_vertical=1は、垂直方向に分割することを示し、mtt_split_vertical=0は、水平方向に分割することを示す。mtt_split_binary=1は、２分割することを示し、mtt_split_binary=0は３分割することを示す。２分割する場合(mtt_split_binary=1)、２分割した各ブロックについて、再帰的に分割処理をする(multi_type_tree(0), multi_type_tree(1)、引数の０〜１は図６Ｂ〜Ｄの６０２または６０４の番号に対応する。)。３分割する場合(mtt_split_binary=0)、３分割した各ブロックについて、再帰的に分割処理をする(multi_type_tree(0), multi_type_tree(1), multi_type_tree(2)、０〜２は図６Ｂの６０３または図６Ｅの６０５の番号に対応する。)。mtt_split=0となるまで、再帰的にmulti_type_treeを呼び出すことにより、階層的なブロック分割を行う。
【００５９】
＜イントラ予測＞
実施の形態に係るイントラ予測方法は、図１の画像符号化装置１００のイントラ予測部１０３および図２の画像復号装置２００のイントラ予測部２０４において実施される。
実施の形態に係るイントラ予測方法について、図面を用いて説明する。イントラ予測方法は符号化ブロック単位で符号化及び復号の処理の何れでも実施される。
＜符号化側のイントラ予測部１０３の説明＞
図４０は図１の画像符号化装置１００のイントラ予測部１０３の詳細な構成を示す図である。通常イントラ予測部３５１は、処理対象の符号化ブロックに隣接する復号済み画素から、通常イントラ予測により予測画像信号を生成し、複数のイントラ予測モードの中から適したイントラ予測モードを選択し、選択されたイントラ予測モード、及び選択されたイントラ予測モードに応じた予測画像信号を予測方法決定部１０５に供給する。図１０Ａ及び図１０Ｂにイントラ予測の例を示す。図１０Ａは、通常イントラ予測の予測方向とイントラ予測モード番号の対応を示したものである。例えば、イントラ予測モード５０は、垂直方向に画素をコピーすることによりイントラ予測画像を生成する。イントラ予測モード１は、ＤＣモードであり、処理対象ブロックのすべての画素値を参照画素の平均値とするモードである。イントラ予測モード０はＰｌａｎａｒモードであり、垂直方向・水平方向の参照画素から２次元的なイントラ予測画像を作成するモードである。図１０Ｂは、イントラ予測モード４０の場合のイントラ予測画像を生成する例である。処理対象ブロックの各画素に対し、イントラ予測モードの示す方向の参照画素の値をコピーする。イントラ予測モードの参照画素が整数位置でない場合には、周辺の整数位置の参照画素値から補間により参照画素値を決定する。
イントラブロックコピー予測部３５２は、復号画像メモリ１０４から処理対象の符号化ブロックと同一の画像信号の復号済み領域を取得し、イントラブロックコピー処理により、予測画像信号を生成し、予測方法決定部１０５に供給する。イントラブロックコピー予測部３５２の詳細な構成と処理については後述する。
＜復号側のイントラ予測部２０４の説明＞
図４１は図２の画像復号装置２００のイントラ予測部２０４の詳細な構成を示す図である。
通常イントラ予測部３６１は、処理対象の符号化ブロックに隣接する復号済み画素から、通常イントラ予測により予測画像信号を生成し、複数のイントラ予測モードの中から適したイントラ予測モードを選択し、選択されたイントラ予測モード、及び選択されたイントラ予測モードに応じた予測画像信号を得る。この予測画像信号がスイッチ３６４を経由して復号画像信号重畳部２０７に供給される。図４１の通常イントラ予測部３６１の処理は、図４０の通常イントラ予測部３５１に対応するものであるため、詳細の説明を省略する。
イントラブロックコピー予測部３６２は、復号画像メモリ２０８から処理対象の符号化ブロックと同一の画像信号の復号済み領域を取得し、イントラブロックコピー処理により、予測画像信号を得る。この予測画像信号がスイッチ３６４を経由して復号画像信号重畳部２０７に供給される。イントラブロックコピー予測部３６２の詳細な構成と処理については後述する。
【００６０】
＜インター予測＞
実施の形態に係るインター予測方法は、図１の画像符号化装置のインター予測部１０２および図２の画像復号装置のインター予測部２０３において実施される。
【００６１】
実施の形態によるインター予測方法について、図面を用いて説明する。インター予測方法は符号化ブロック単位で符号化及び復号の処理の何れでも実施される。
【００６２】
＜符号化側のインター予測部１０２の説明＞
図１６は図１の画像符号化装置のインター予測部１０２の詳細な構成を示す図である。通常予測動きベクトルモード導出部３０１は、複数の通常予測動きベクトル候補を導出して予測動きベクトルを選択し、選択した予測動きベクトルと、検出された動きベクトルとの差分動きベクトルを算出する。検出されたインター予測モード、参照インデックス、動きベクトル、算出された差分動きベクトルが通常予測動きベクトルモードのインター予測情報となる。このインター予測情報がインター予測モード判定部３０５に供給される。通常予測動きベクトルモード導出部３０１の詳細な構成と処理については後述する。
【００６３】
通常マージモード導出部３０２では複数の通常マージ候補を導出して通常マージ候補を選択し、通常マージモードのインター予測情報を得る。このインター予測情報がインター予測モード判定部３０５に供給される。通常マージモード導出部３０２の詳細な構成と処理については後述する。
【００６４】
サブブロック予測動きベクトルモード導出部３０３では複数のサブブロック予測動きベクトル候補を導出してサブブロック予測動きベクトルを選択し、選択したサブブロック予測動きベクトルと、検出した動きベクトルとの差分動きベクトルを算出する。検出されたインター予測モード、参照インデックス、動きベクトル、算出された差分動きベクトルがサブブロック予測動きベクトルモードのインター予測情報となる。このインター予測情報がインター予測モード判定部３０５に供給される。
【００６５】
サブブロックマージモード導出部３０４では複数のサブブロックマージ候補を導出してサブブロックマージ候補を選択し、サブブロックマージモードのインター予測情報を得る。このインター予測情報がインター予測モード判定部３０５に供給される。
【００６６】
インター予測モード判定部３０５では通常予測動きベクトルモード導出部３０１、通常マージモード導出部３０２、サブブロック予測動きベクトルモード導出部３０３、サブブロックマージモード導出部３０４から供給されるインター予測情報に基づいて、インター予測情報を判定する。インター予測モード判定部３０５から判定結果に応じたインター予測情報が動き補償予測部３０６に供給される。
【００６７】
動き補償予測部３０６では判定されたインター予測情報に基づいて、復号画像メモリ１０４に格納されている参照画像信号に対してインター予測を行う。動き補償予測部３０６の詳細な構成と処理については後述する。
【００６８】
＜復号側のインター予測部２０３の説明＞
図２２は図２の画像復号装置のインター予測部２０３の詳細な構成を示す図である。
【００６９】
通常予測動きベクトルモード導出部４０１は複数の通常予測動きベクトル候補を導出して予測動きベクトルを選択し、選択した予測動きベクトルと、復号した差分動きベクトルとの加算値を算出して動きベクトルとする。復号されたインター予測モード、参照インデックス、動きベクトルが通常予測動きベクトルモードのインター予測情報となる。このインター予測情報がスイッチ４０８を経由して動き補償予測部４０６に供給される。通常予測動きベクトルモード導出部４０１の詳細な構成と処理については後述する。
【００７０】
通常マージモード導出部４０２では複数の通常マージ候補を導出して通常マージ候補を選択し、通常マージモードのインター予測情報を得る。このインター予測情報がスイッチ４０８を経由して動き補償予測部４０６に供給される。通常マージモード導出部４０２の詳細な構成と処理については後述する。
【００７１】
サブブロック予測動きベクトルモード導出部４０３では複数のサブブロック予測動きベクトル候補を導出してサブブロック予測動きベクトルを選択し、選択したサブブロック予測動きベクトルと、復号した差分動きベクトルとの加算値を算出して動きベクトルとする。復号されたインター予測モード、参照インデックス、動きベクトルがサブブロック予測動きベクトルモードのインター予測情報となる。このインター予測情報がスイッチ４０８を経由して動き補償予測部４０６に供給される。
【００７２】
サブブロックマージモード導出部４０４では複数のサブブロックマージ候補を導出してサブブロックマージ候補を選択し、サブブロックマージモードのインター予測情報を得る。このインター予測情報がスイッチ４０８を経由して動き補償予測部４０６に供給される。
【００７３】
動き補償予測部４０６では判定されたインター予測情報に基づいて、復号画像メモリ２０８に格納されている参照画像信号に対してインター予測を行う。動き補償予測部４０６の詳細な構成と処理については符号化側の動き補償予測部３０６と同様である。
【００７４】
＜通常予測動きベクトルモード導出部（通常AMVP）＞
図１７の通常予測動きベクトルモード導出部３０１は、空間予測動きベクトル候補導出部３２１、時間予測動きベクトル候補導出部３２２、履歴予測動きベクトル候補導出部３２３、予測動きベクトル候補補充部３２５、通常動きベクトル検出部３２６、予測動きベクトル候補選択部３２７、動きベクトル減算部３２８を含む。
【００７５】
図２３の通常予測動きベクトルモード導出部４０１は、空間予測動きベクトル候補導出部４２１、時間予測動きベクトル候補導出部４２２、履歴予測動きベクトル候補導出部４２３、予測動きベクトル候補補充部４２５、予測動きベクトル候補選択部４２６、動きベクトル加算部４２７を含む。
【００７６】
符号化側の通常予測動きベクトルモード導出部３０１および復号側の通常予測動きベクトルモード導出部４０１の処理手順について、それぞれ図１９、図２５のフローチャートを用いて説明する。図１９は符号化側の通常動きベクトルモード導出部３０１による通常予測動きベクトルモード導出処理手順を示すフローチャートであり、図２５は復号側の通常動きベクトルモード導出部４０１による通常予測動きベクトルモード導出処理手順を示すフローチャートである。
【００７７】
＜通常予測動きベクトルモード導出部（通常AMVP）：符号化側の説明＞
図１９を参照して符号化側の通常予測動きベクトルモード導出処理手順を説明する。図１９の処理手順の説明において、図１９に示した通常という言葉を省略することがある。
【００７８】
まず、通常動きベクトル検出部３２６でインター予測モードおよび参照インデックス毎に通常動きベクトルを検出する（図１９のステップＳ１００）。
【００７９】
続いて、空間予測動きベクトル候補導出部３２１、時間予測動きベクトル候補導出部３２２、履歴予測動きベクトル候補導出部３２３、予測動きベクトル候補補充部３２５、予測動きベクトル候補選択部３２７、動きベクトル減算部３２８で、通常予測動きベクトルモードのインター予測で用いる動きベクトルの差分動きベクトルをＬ０、Ｌ１毎にそれぞれ算出する（図１９のステップＳ１０１〜Ｓ１０６）。具体的には処理対象ブロックの予測モードPredModeがインター予測（MODE_INTER）で、インター予測モードがＬ０予測（Pred_L0）の場合、Ｌ０の予測動きベクトル候補リストmvpListL0を算出して、予測動きベクトルmvpL0を選択し、Ｌ０の動きベクトルmvL0の差分動きベクトルmvdL0を算出する。処理対象ブロックのインター予測モードがＬ１予測（Pred_L1）の場合、Ｌ１の予測動きベクトル候補リストmvpListL1を算出して、予測動きベクトルmvpL1を選択し、Ｌ１の動きベクトルmvL1の差分動きベクトルmvdL1を算出する。処理対象ブロックのインター予測モードが双予測（Pred_BI）の場合、Ｌ０予測とＬ１予測が共に行われ、Ｌ０の予測動きベクトル候補リストmvpListL0を算出して、Ｌ０の予測動きベクトルmvpL0を選択し、Ｌ０の動きベクトルmvL0の差分動きベクトルmvdL0を算出するとともに、Ｌ１の予測動きベクトル候補リストmvpListL1を算出して、Ｌ１の予測動きベクトルmvpL1を算出し、Ｌ１の動きベクトルmvL1の差分動きベクトルmvdL1をそれぞれ算出する。
【００８０】
Ｌ０、Ｌ１それぞれについて、差分動きベクトル算出処理を行うが、Ｌ０、Ｌ１ともに共通の処理となる。したがって、以下の説明においてはＬ０、Ｌ１を共通のＬＸとして表す。Ｌ０の差分動きベクトルを算出する処理ではＬＸのＸが０であり、Ｌ１の差分動きベクトルを算出する処理ではＬＸのＸが１である。また、ＬＸの差分動きベクトルを算出する処理中に、ＬＸではなく、もう一方のリストの情報を参照する場合、もう一方のリストをＬＹとして表す。
【００８１】
ＬＸの動きベクトルmvLXを使用する場合（図１９のステップＳ１０２：ＹＥＳ）、ＬＸの予測動きベクトルの候補を算出してＬＸの予測動きベクトル候補リストmvpListLXを構築する（図１９のステップＳ１０３）。通常予測動きベクトルモード導出部３０１の中の空間予測動きベクトル候補導出部３２１、時間予測動きベクトル候補導出部３２２、履歴予測動きベクトル候補導出部３２３、予測動きベクトル候補補充部３２５で複数の予測動きベクトルの候補を導出して予測動きベクトル候補リストmvpListLXを構築する。図１９のステップＳ１０３の詳細な処理手順については図２０のフローチャートを用いて後述する。
【００８２】
続いて、予測動きベクトル候補選択部３２７により、ＬＸの予測動きベクトル候補リストmvpListLXからＬＸの予測動きベクトルmvpLXを選択する（図１９のステップＳ１０４）。ここで、予測動きベクトル候補リストmvpListLXの中で、ある１つの要素（０から数えてｉ番目の要素）をmvpListLX[i]として表す。動きベクトルmvLXと予測動きベクトル候補リストmvpListLXの中に格納された各予測動きベクトルの候補mvpListLX[i]との差分であるそれぞれの差分動きベクトルを算出する。それら差分動きベクトルを符号化したときの符号量を予測動きベクトル候補リストmvpListLXの要素（予測動きベクトル候補）ごとに算出する。そして、予測動きベクトル候補リストmvpListLXに登録された各要素の中で、予測動きベクトルの候補毎の符号量が最小となる予測動きベクトルの候補mvpListLX[i]を予測動きベクトルmvpLXとして選択し、そのインデックスiを取得する。予測動きベクトル候補リストmvpListLXの中で最小の発生符号量となる予測動きベクトルの候補が複数存在する場合には、予測動きベクトル候補リストmvpListLXの中のインデックスiが小さい番号で表される予測動きベクトルの候補mvpListLX[i]を最適な予測動きベクトルmvpLXとして選択し、そのインデックスiを取得する。
【００８３】
続いて、動きベクトル減算部３２８で、ＬＸの動きベクトルmvLXから選択されたＬＸの予測動きベクトルmvpLXを減算し、
mvdLX = mvLX - mvpLX
としてＬＸの差分動きベクトルmvdLXを算出する（図１９のステップＳ１０５）。
【００８４】
＜通常予測動きベクトルモード導出部（通常AMVP）：復号側の説明＞
次に、図２５を参照して復号側の通常予測動きベクトルモード処理手順を説明する。復号側では、空間予測動きベクトル候補導出部４２１、時間予測動きベクトル候補導出部４２２、履歴予測動きベクトル候補導出部４２３、予測動きベクトル候補補充部４２５で、通常予測動きベクトルモードのインター予測で用いる動きベクトルをＬ０，Ｌ１毎にそれぞれ算出する（図２５のステップＳ２０１〜Ｓ２０６）。具体的には処理対象ブロックの予測モードPredModeがインター予測（MODE_INTER）で、処理対象ブロックのインター予測モードがＬ０予測（Pred_L0）の場合、Ｌ０の予測動きベクトル候補リストmvpListL0を算出して、予測動きベクトルmvpL0を選択し、Ｌ０の動きベクトルmvL0を算出する。処理対象ブロックのインター予測モードがＬ１予測（Pred_L1）の場合、Ｌ１の予測動きベクトル候補リストmvpListL1を算出して、予測動きベクトルmvpL1を選択し、Ｌ１の動きベクトルmvL1を算出する。処理対象ブロックのインター予測モードが双予測（Pred_BI）の場合、Ｌ０予測とＬ１予測が共に行われ、Ｌ０の予測動きベクトル候補リストmvpListL0を算出して、Ｌ０の予測動きベクトルmvpL0を選択し、Ｌ０の動きベクトルmvL0を算出するとともに、Ｌ１の予測動きベクトル候補リストmvpListL1を算出して、Ｌ１の予測動きベクトルmvpL1を算出し、Ｌ１の動きベクトルmvL1をそれぞれ算出する。
【００８５】
符号化側と同様に、復号側でもＬ０、Ｌ１それぞれについて、動きベクトル算出処理を行うが、Ｌ０、Ｌ１ともに共通の処理となる。したがって、以下の説明においてはＬ０、Ｌ１を共通のＬＸとして表す。ＬＸは処理対象の符号化ブロックのインター予測に用いるインター予測モードを表す。Ｌ０の動きベクトルを算出する処理ではＸが０であり、Ｌ１の動きベクトルを算出する処理ではＸが１である。また、ＬＸの動きベクトルを算出する処理中に、算出対象のＬＸと同じ参照リストではなく、もう一方の参照リストの情報を参照する場合、もう一方の参照リストをＬＹとして表す。
【００８６】
ＬＸの動きベクトルmvLXを使用する場合（図２５のステップＳ２０２：ＹＥＳ）、ＬＸの予測動きベクトルの候補を算出してＬＸの予測動きベクトル候補リストmvpListLXを構築する（図２５のステップＳ２０３）。通常予測動きベクトルモード導出部４０１の中の空間予測動きベクトル候補導出部４２１、時間予測動きベクトル候補導出部４２２、履歴予測動きベクトル候補導出部４２３、予測動きベクトル候補補充部４２５で複数の予測動きベクトルの候補を算出し、予測動きベクトル候補リストmvpListLXを構築する。図２５のステップＳ２０３の詳細な処理手順については図２０のフローチャートを用いて後述する。
【００８７】
続いて、予測動きベクトル候補選択部４２６で予測動きベクトル候補リストmvpListLXからビット列復号部２０１にて復号されて供給される予測動きベクトルのインデックスmvpIdxLXに対応する予測動きベクトルの候補mvpListLX[mvpIdxLX]を選択された予測動きベクトルmvpLXとして取り出す（図２５のステップＳ２０４）。
【００８８】
続いて、動きベクトル加算部４２７でビット列復号部２０１にて復号されて供給されるＬＸの差分動きベクトルmvdLXとＬＸの予測動きベクトルmvpLXを加算し、
mvLX = mvpLX + mvdLX
としてＬＸの動きベクトルmvLXを算出する（図２５のステップＳ２０５）。
【００８９】
＜通常予測動きベクトルモード導出部（通常AMVP）：動きベクトルの予測方法＞
図２０は本発明の実施の形態に係る画像符号化装置の通常予測動きベクトルモード導出部３０１及び画像復号装置の通常予測動きベクトルモード導出部４０１とで共通する機能を有する通常予測動きベクトルモード導出処理の処理手順を表すフローチャートである。
【００９０】
通常予測動きベクトルモード導出部３０１及び通常予測動きベクトルモード導出部４０１では、予測動きベクトル候補リストmvpListLXを備えている。予測動きベクトル候補リストmvpListLXはリスト構造を成し、予測動きベクトル候補リスト内部の所在を示す予測動きベクトルインデックスと、インデックスに対応する予測動きベクトル候補とを要素として格納する記憶領域が設けられている。予測動きベクトルインデックスの数字は０から開始され、予測動きベクトル候補リストmvpListLXの記憶領域に、予測動きベクトル候補が格納される。本実施の形態においては、予測動きベクトル候補リストmvpListLXは少なくとも２個の予測動きベクトル候補（インター予測情報）を登録することができるものとする。さらに、予測動きベクトル候補リストmvpListLXに登録されている予測動きベクトル候補数を示す変数numCurrMvpCandに０を設定する。
【００９１】
空間予測動きベクトル候補導出部３２１及び４２１は、左側に隣接するブロックからの予測動きベクトルの候補を導出する。この処理では、左側に隣接するブロック（図１１のＡ０またはＡ１）のインター予測情報、すなわち予測動きベクトル候補が利用できるか否かを示すフラグ、及び動きベクトル、参照インデックス等を参照して予測動きベクトルmvLXA導出し、導出したmvLXAを予測動きベクトル候補リストmvpListLXに追加する（図２０のステップＳ３０１）。なお、Ｌ０予測のときＸは０、Ｌ１予測のときＸは１とする（以下同様）。続いて、空間予測動きベクトル候補導出部３２１及び４２１は、上側に隣接するブロックからの予測動きベクトルの候補を導出する。この処理では、上側に隣接するブロック（図１１のＢ０，Ｂ１，またはＢ２）のインター予測情報、すなわち予測動きベクトル候補が利用できるか否かを示すフラグ、及び動きベクトル、参照インデックス等を参照して予測動きベクトルmvLXBを導出し、それぞれ導出したmvLXAとmvLXBとが等しくなければ、mvLXBを予測動きベクトル候補リストmvpListLXに追加する（図２０のステップＳ３０２）。図２０のステップＳ３０１とＳ３０２の処理は参照する隣接ブロックの位置と数が異なる点以外は共通であり、符号化ブロックの予測動きベクトル候補が利用できるか否かを示すフラグavailableFlagLXN、及び動きベクトルmvLXN、参照インデックスrefIdxN（ＮはＡまたはＢを示す、以下同様）を導出する。
【００９２】
続いて、時間予測動きベクトル候補導出部３２２及び４２２は、現在の処理対象ピクチャとは時間が異なるピクチャにおけるブロックからの予測動きベクトルの候補を導出する。この処理では、異なる時間のピクチャの符号化ブロックの予測動きベクトル候補が利用できるか否かを示すフラグavailableFlagLXCol、及び動きベクトルmvLXCol、参照インデックスrefIdxCol、参照リストlistColを導出し、mvLXColを予測動きベクトル候補リストmvpListLXに追加する（図２０のステップＳ３０３）。
【００９３】
なお、シーケンス（ＳＰＳ）、ピクチャ（ＰＰＳ）、またはスライスの単位で時間予測動きベクトル候補導出部３２２及び４２２の処理を省略することができるものとする。
【００９４】
続いて、履歴予測動きベクトル候補導出部３２３及び４２３は履歴予測動きベクトル候補リストHmvpCandListに登録されている履歴予測動きベクトル候補を予測動きベクトル候補リストmvpListLXに追加する。（図２０のステップＳ３０４）。このステップＳ３０４の登録処理手順の詳細については図２９のフローチャートを用いて後述する。
【００９５】
続いて予測動きベクトル候補補充部３２５及び４２５は予測動きベクトル候補リストmvpListLXを満たすまで、（０，０）等の、所定の値の予測動きベクトル候補を追加する（図２０のＳ３０５）。
【００９６】
＜通常マージモード導出部（通常マージ）＞
図１８の通常マージモード導出部３０２は、空間マージ候補導出部３４１、時間マージ候補導出部３４２、平均マージ候補導出部３４４、履歴マージ候補導出部３４５、マージ候補補充部３４６、マージ候補選択部３４７を含む。
【００９７】
図２４の通常マージモード導出部４０２は、空間マージ候補導出部４４１、時間マージ候補導出部４４２、平均マージ候補導出部４４４、履歴マージ候補導出部４４５、マージ候補補充部４４６、マージ候補選択部４４７を含む。
【００９８】
図２１は本発明の実施の形態に係る画像符号化装置の通常マージモード導出部３０２及び画像復号装置の通常マージモード導出部４０２とで共通する機能を有する通常マージモード導出処理の手順を説明するフローチャートである。
【００９９】
以下、諸過程を順を追って説明する。なお、以下の説明においては特に断りのない限りスライスタイプslice_typeがＢスライスの場合について説明するが、Ｐスライスの場合にも適用できる。ただし、スライスタイプslice_typeがＰスライスの場合、インター予測モードとしてＬ０予測（Pred_L0）だけがあり、Ｌ１予測（Pred_L1）、双予測（Pred_BI）がないので、Ｌ１に纏わる処理を省略することができる。
【０１００】
通常マージモード導出部３０２及び通常マージモード導出部４０２では、マージ候補リストmergeCandListを備えている。マージ候補リストmergeCandListはリスト構造を成し、マージ候補リスト内部の所在を示すマージインデックスと、インデックスに対応するマージ候補を要素として格納する記憶領域が設けられている。マージインデックスの数字は０から開始され、マージ候補リストmergeCandListの記憶領域に、マージ候補が格納される。以降の処理では、マージ候補リストmergeCandListに登録されたマージインデックスｉのマージ候補は、mergeCandList[i]で表すこととする。本実施の形態においては、マージ候補リストmergeCandListは少なくとも６個のマージ候補（インター予測情報）を登録することができるものとする。さらに、マージ候補リストmergeCandListに登録されているマージ候補数を示す変数numCurrMergeCandに０を設定する。
【０１０１】
空間マージ候補導出部３４１及び空間マージ候補導出部４４１では、画像符号化装置の符号化情報格納メモリ１１１または画像復号装置の符号化情報格納メモリ２０５に格納されている符号化情報から、処理対象ブロックに隣接するそれぞれのブロック（図１１のＢ１、Ａ１、Ｂ０、Ａ０、Ｂ２）からの空間マージ候補をＢ１、Ａ１、Ｂ０、Ａ０、Ｂ２の順に導出して、導出された空間マージ候補をマージ候補リストmergeCandListに登録する（図２１のステップＳ４０１）。ここで、Ｂ１、Ａ１、Ｂ０、Ａ０、Ｂ２または時間マージ候補Ｃｏｌのいずれかを示すＮを定義する。ブロックＮのインター予測情報が空間マージ候補として利用できるか否かを示すフラグavailableFlagN、空間マージ候補ＮのＬ０の参照インデックスrefIdxL0N及びＬ１の参照インデックスrefIdxL1N、Ｌ０予測が行われるか否かを示すＬ０予測フラグpredFlagL0NおよびＬ１予測が行われるか否かを示すＬ１予測フラグpredFlagL1N、Ｌ０の動きベクトルmvL0N、Ｌ１の動きベクトルmvL1Nを導出する。ただし、本実施の形態においては処理対象となる符号化ブロックに含まれるブロックのインター予測情報を参照せずに、マージ候補を導出するので、処理対象の符号化ブロックに含まれるブロックのインター予測情報を用いる空間マージ候補は導出しない。
【０１０２】
続いて、時間マージ候補導出部３４２及び時間マージ候補導出部４４２では、異なる時間のピクチャからの時間マージ候補を導出して、導出された時間マージ候補をマージ候補リストmergeCandListに登録する（図２１のステップＳ４０２）。時間マージ候補が利用できるか否かを示すフラグavailableFlagCol、時間マージ候補のＬ０予測が行われるか否かを示すＬ０予測フラグpredFlagL0ColおよびＬ１予測が行われるか否かを示すＬ１予測フラグpredFlagL1Col、及びＬ０の動きベクトルmvL0Col、Ｌ１の動きベクトルmvL1Colを導出する。
【０１０３】
なお、シーケンス（ＳＰＳ）、ピクチャ（ＰＰＳ）、またはスライスの単位で時間マージ候補導出部３４２及び時間マージ候補導出部４４２の処理を省略することができるものとする。
【０１０４】
続いて、履歴マージ候補導出部３４５及び履歴マージ候補導出部４４５では、履歴予測動きベクトル候補リストHmvpCandListに登録されている履歴予測動きベクトル候補をマージ候補リストmergeCandListに登録する（図２１のステップＳ４０３）。
なお、マージ候補リストmergeCandList内に登録されているマージ候補数numCurrMergeCandが、最大マージ候補数MaxNumMergeCandより小さい場合、マージ候補リストmergeCandList内に登録されているマージ候補数numCurrMergeCandが最大マージ候補数MaxNumMergeCandを上限として履歴マージ候補は導出されて、マージ候補リストmergeCandListに登録される。
【０１０５】
続いて、平均マージ候補導出部３４４及び平均マージ候補導出部４４４では、マージ候補リストmergeCandListから平均マージ候補を導出して、導出された平均マージ候補をマージ候補リストmergeCandListに追加する（図２１のステップＳ４０４）。
なお、マージ候補リストmergeCandList内に登録されているマージ候補数numCurrMergeCandが、最大マージ候補数MaxNumMergeCandより小さい場合、マージ候補リストmergeCandList内に登録されているマージ候補数numCurrMergeCandが最大マージ候補数MaxNumMergeCandを上限として平均マージ候補は導出されて、マージ候補リストmergeCandListに登録される。
ここで、平均マージ候補は、マージ候補リストmergeCandListに登録されている第１のマージ候補と第２のマージ候補の有する動きベクトルをＬ０予測及びＬ１予測毎に平均して得られる動きベクトルを有する新たなマージ候補である。
【０１０６】
続いて、マージ候補補充部３４６及びマージ候補補充部４４６では、マージ候補リストmergeCandList内に登録されているマージ候補数numCurrMergeCandが、最大マージ候補数MaxNumMergeCandより小さい場合、マージ候補リストmergeCandList内に登録されているマージ候補数numCurrMergeCandが最大マージ候補数MaxNumMergeCandを上限として追加マージ候補を導出して、マージ候補リストmergeCandListに登録する（図２１のステップＳ４０５）。最大マージ候補数MaxNumMergeCandを上限として、Ｐスライスでは、動きベクトルが（０，０）の値を持つ予測モードがＬ０予測（Pred_L0）のマージ候補を追加する。Ｂスライスでは、動きベクトルが（０，０）の値を持つ予測モードが双予測（Pred_BI）のマージ候補を追加する。マージ候補を追加する際の参照インデックスは、すでに追加した参照インデックスと異なる。
【０１０７】
続いて、マージ候補選択部３４７及びマージ候補選択部４４７では、マージ候補リストmergeCandList内に登録されているマージ候補からマージ候補を選択する。符号化側のマージ候補選択部３４７では、符号量とひずみ量を算出することによりマージ候補を選択し、選択されたマージ候補を示すマージインデックス、マージ候補のインター予測情報を、インター予測モード判定部３０５を介して動き補償予測部３０６に供給する。一方、復号側のマージ候補選択部４４７では、復号されたマージインデックスに基づいて、マージ候補を選択し、選択されたマージ候補を動き補償予測部４０６に供給する。
【０１０８】
＜履歴予測動きベクトル候補リストの更新＞
次に、符号化側の符号化情報格納メモリ１１１及び復号側の符号化情報格納メモリ２０５に備える履歴予測動きベクトル候補リストHmvpCandListの初期化方法および更新方法について詳細に説明する。図２６は履歴予測動きベクトル候補リスト初期化・更新処理手順を説明するフローチャートである。
【０１０９】
本実施の形態では、履歴予測動きベクトル候補リストHmvpCandListの更新は、符号化情報格納メモリ１１１及び符号化情報格納メモリ２０５で実施されるものとする。インター予測部１０２及びインター予測部２０３の中に履歴予測動きベクトル候補リスト更新部を設置して履歴予測動きベクトル候補リストHmvpCandListの更新を実施させてもよい。
【０１１０】
スライスの先頭で履歴予測動きベクトル候補リストHmvpCandListの初期設定を行い、符号化側では予測方法決定部１０５で通常予測動きベクトルモードまたは通常マージモードが選択された場合に履歴予測動きベクトル候補リストHmvpCandListを更新し、復号側では、ビット列復号部２０１で復号された予測情報が通常予測動きベクトルモードまたは通常マージモードの場合に履歴予測動きベクトル候補リストHmvpCandListを更新する。
【０１１１】
通常予測動きベクトルモードまたは通常マージモードでインター予測を行う際に用いるインター予測情報を、インター予測情報候補hMvpCandとして履歴予測動きベクトル候補リストHmvpCandListに登録する。インター予測情報候補hMvpCandには、Ｌ０の参照インデックスrefIdxL0およびＬ１の参照インデックスrefIdxL1、Ｌ０予測が行われるか否かを示すＬ０予測フラグpredFlagL0およびＬ１予測が行われるか否かを示すＬ１予測フラグpredFlagL1、Ｌ０の動きベクトルmvL0、Ｌ１の動きベクトルmvL1が含まれる。
【０１１２】
符号化側の符号化情報格納メモリ１１１及び復号側の符号化情報格納メモリ２０５に備える履歴予測動きベクトル候補リストHmvpCandListに登録されている要素（すなわち、インター予測情報）の中に、インター予測情報候補hMvpCandと同じ値のインター予測情報が存在する場合は、履歴予測動きベクトル候補リストHmvpCandListからその要素を削除する。一方、インター予測情報候補hMvpCandと同じ値のインター予測情報が存在しない場合は、履歴予測動きベクトル候補リストHmvpCandListの先頭の要素を削除し、履歴予測動きベクトル候補リストHmvpCandListの最後に、インター予測情報候補hMvpCandを追加する。
【０１１３】
本発明の符号化側の符号化情報格納メモリ１１１及び復号側の符号化情報格納メモリ２０５に備える履歴予測動きベクトル候補リストHmvpCandListの要素の数は６とする。
【０１１４】
まず、スライス単位での履歴予測動きベクトル候補リストHmvpCandListの初期化を行う（図２６のステップＳ２１０１）。スライスの先頭で履歴予測動きベクトル候補リストHmvpCandListのすべての要素を空にし、履歴予測動きベクトル候補リストHmvpCandListに登録されている履歴予測動きベクトル候補の数（現在の候補数）NumHmvpCandの値は0に設定する。
【０１１５】
なお、履歴予測動きベクトル候補リストHmvpCandListの初期化をスライス単位（スライスの最初の符号化ブロック）で実施するとしたが、ピクチャ単位、タイル単位やツリーブロック行単位で実施しても良い。
【０１１６】
続いて、スライス内の符号化ブロック毎に以下の履歴予測動きベクトル候補リストHmvpCandListの更新処理を繰り返し行なう（図２６のステップＳ２１０２〜Ｓ２１０７）。
【０１１７】
まず、符号化ブロック単位での初期設定を行う。同一候補が存在するか否かを示すフラグidenticalCandExistにFALSE（偽）の値を設定し、削除対象の候補を示す削除対象インデックスremoveIdxに０を設定する（図２６のステップＳ２１０３）。
【０１１８】
登録対象のインター予測情報候補hMvpCandが存在するか否かを判定する（図２６のステップＳ２１０４）。符号化側の予測方法決定部１０５で通常予測動きベクトルモードまたは通常マージモードと判定された場合、または復号側のビット列復号部２０１で通常予測動きベクトルモードまたは通常マージモードとして復号された場合、そのインター予測情報を登録対象のインター予測情報候補hMvpCandとする。符号化側の予測方法決定部１０５でイントラ予測モード、サブブロック予測動きベクトルモードまたはサブブロックマージモードと判定された場合、または復号側のビット列復号部２０１でイントラ予測モード、サブブロック予測動きベクトルモードまたはサブブロックマージモードとして復号された場合、履歴予測動きベクトル候補リストHmvpCandListの更新処理を行わず、登録対象のインター予測情報候補hMvpCandは存在しない。登録対象のインター予測情報候補hMvpCandが存在しない場合はステップＳ２１０５〜Ｓ２１０６をスキップする（図２６のステップＳ２１０４：ＮＯ）。登録対象のインター予測情報候補hMvpCandが存在する場合はステップＳ２１０５以下の処理を行う（図２６のステップＳ２１０４：ＹＥＳ）。
【０１１９】
続いて、履歴予測動きベクトル候補リストHmvpCandListの各要素の中に登録対象のインター予測情報候補hMvpCandと同じ値の要素（インター予測情報）、すなわち同一の要素が存在するか否かを判定する（図２６のステップＳ２１０５）。図２７はこの同一要素確認処理手順のフローチャートである。履歴予測動きベクトル候補の数NumHmvpCandの値が０の場合（図２７のステップＳ２１２１：ＮＯ）、履歴予測動きベクトル候補リストHmvpCandListは空で、同一候補は存在しないので図２７のステップＳ２１２２〜Ｓ２１２５をスキップし、本同一要素確認処理手順を終了する。履歴予測動きベクトル候補の数NumHmvpCandの値が0より大きい場合（図２７のステップＳ２１２１のＹＥＳ）、履歴予測動きベクトルインデックスhMvpIdxが0からNumHmvpCand-1まで、ステップＳ２１２３の処理を繰り返す（図２７のステップＳ２１２２〜Ｓ２１２５）。まず、履歴予測動きベクトル候補リストの０から数えてhMvpIdx番目の要素HmvpCandList[hMvpIdx]がインター予測情報候補hMvpCandと同一か否かを比較する（図２７のステップＳ２１２３）。同一の場合（図２７のステップＳ２１２３：ＹＥＳ）、同一候補が存在するか否かを示すフラグidenticalCandExistにTRUE（真）の値を設定し、削除対象の要素の位置を示す削除対象インデックスremoveIdxに現在の履歴予測動きベクトルインデックスhMvpIdxの値を設定し、本同一要素確認処理を終了する。同一でない場合（図２７のステップＳ２１２３：ＮＯ）、hMvpIdxを1インクリメントし、履歴予測動きベクトルインデックスhMvpIdxがNumHmvpCand-1以下であれば、ステップＳ２１２３以降の処理を行う。
【０１２０】
再び図２６のフローチャートに戻り、履歴予測動きベクトル候補リストHmvpCandListの要素のシフト及び追加処理を行う（図２６のステップＳ２１０６）。図２８は図２６のステップＳ２１０６の履歴予測動きベクトル候補リストHmvpCandListの要素シフト／追加処理手順のフローチャートである。まず、履歴予測動きベクトル候補リストHmvpCandListに格納されている要素を除いてから新たな要素を追加するか、要素を除かずに新たな要素追加するかを判定する。具体的には同一候補が存在するか否かを示すフラグidenticalCandExistにTRUE（真）またはNumHmvpCandが6か否かを比較する（図２８のステップＳ２１４１）。同一候補が存在するか否かを示すフラグidenticalCandExistにTRUE（真）または現在の候補数NumHmvpCandが6のいずれかの条件を満たす場合（図２８のステップＳ２１４１：ＹＥＳ）、履歴予測動きベクトル候補リストHmvpCandListに格納されている要素を除いてから新たな要素を追加する。インデックスiの初期値をremoveIdx + 1の値に設定する。この初期値からNumHmvpCandまで、ステップＳ２１４３の要素シフト処理を繰り返す。（図２８のステップＳ２１４２〜Ｓ２１４４）。HmvpCandList[ i -  1 ]にHmvpCandList[ i ]の要素をコピーすることで要素を前方にシフトし（図２８のステップＳ２１４３）、iを１インクリメントする（図２８のステップＳ２１４２〜Ｓ２１４４）。続いて、履歴予測動きベクトル候補リストの最後に相当する０から数えて(NumHmvpCand-1)番目 HmvpCandList[NumHmvpCand-1]にインター予測情報候補hMvpCandを追加し（図２８のステップＳ２１４５）、本履歴予測動きベクトル候補リストHmvpCandListの要素シフト・追加処理を終了する。一方、同一候補が存在するか否かを示すフラグidenticalCandExistにTRUE（真）およびNumHmvpCandが6のいずれの条件も満たさない場合（図２８のステップＳ２１４１：ＮＯ）、履歴予測動きベクトル候補リストHmvpCandListに格納されている要素を除かずに、履歴予測動きベクトル候補リストの最後にインター予測情報候補hMvpCandを追加する（図２８のステップＳ２１４６）。ここで、履歴予測動きベクトル候補リストの最後とは、０から数えてNumHmvpCand番目のHmvpCandList[NumHmvpCand]である。また、NumHmvpCandを１インクリメントして、本履歴予測動きベクトル候補リストHmvpCandListの要素シフトおよび追加処理を終了する。
【０１２１】
図３１は履歴予測動きベクトル候補リストの更新処理の一例を説明する図である。６つの要素（インター予測情報）を登録済みの履歴予測動きベクトル候補リストHmvpCandListに新たな要素を追加する場合、履歴予測動きベクトル候補リストHmvpCandListの前方の要素から順に新たなインター予測情報と比較して（図３１Ａ）、新たな要素が履歴予測動きベクトル候補リストHmvpCandListの先頭から３番目の要素HMVP2と同じ値であれば、履歴予測動きベクトル候補リストHmvpCandListから要素HMVP2を削除して後方の要素HMVP3〜HMVP5を前方に１つずつシフト（コピー）し、履歴予測動きベクトル候補リストHmvpCandListの最後に新たな要素を追加して（図３１Ｂ）、履歴予測動きベクトル候補リストHmvpCandListの更新を完了する（図３１Ｃ）。
【０１２２】
＜履歴予測動きベクトル候補導出処理＞
次に、符号化側の通常予測動きベクトルモード導出部３０１の履歴予測動きベクトル候補導出部３２３、復号側の通常予測動きベクトルモード導出部４０１の履歴予測動きベクトル候補導出部４２３で共通の処理である図２０のステップＳ３０４の処理手順である履歴予測動きベクトル候補リストHmvpCandListからの履歴予測動きベクトル候補の導出方法について詳細に説明する。図２９は履歴予測動きベクトル候補導出処理手順を説明するフローチャートである。
【０１２３】
現在の予測動きベクトル候補の数numCurrMvpCandが予測動きベクトル候補リストmvpListLXの最大要素数（ここでは２とする）以上または履歴予測動きベクトル候補の数がNumHmvpCandの値が0の場合（図２９のステップＳ２２０１のＮＯ）、図２９のステップＳ２２０２からＳ２２０９の処理を省略し、履歴予測動きベクトル候補導出処理手順を終了する。現在の予測動きベクトル候補の数numCurrMvpCandが予測動きベクトル候補リストmvpListLXの最大要素数である２より小さい場合、かつ履歴予測動きベクトル候補の数NumHmvpCandの値が０より大きい場合（図２９のステップＳ２２０１のＹＥＳ）、図２９のステップＳ２２０２からＳ２２０９の処理を行う。
【０１２４】
続いて、インデックスｉが１から、４と履歴予測動きベクトル候補の数numCheckedHMVPCandのいずれか小さい値まで、図２９のステップＳ２２０３からＳ２２０８の処理を繰り返す（図２９のステップＳ２２０２〜Ｓ２２０９）。現在の予測動きベクトル候補の数numCurrMvpCandが予測動きベクトル候補リストmvpListLXの最大要素数である２以上の場合（図２９のステップＳ２２０３：ＮＯ）、図２９のステップＳ２２０４からＳ２２０９の処理を省略し、本履歴予測動きベクトル候補導出処理手順を終了する。現在の予測動きベクトル候補の数numCurrMvpCandが予測動きベクトル候補リストmvpListLXの最大要素数である２より小さい場合（図２９のステップＳ２２０３：ＹＥＳ）、図２９のステップＳ２２０４以降の処理を行う。
【０１２５】
続いて、ステップＳ２２０５からＳ２２０７までの処理をＹが０と１（Ｌ０とＬ１）についてそれぞれ行う（図２９のステップＳ２２０４〜Ｓ２２０８）。現在の予測動きベクトル候補の数numCurrMvpCandが予測動きベクトル候補リストmvpListLXの最大要素数である２以上の場合（図２９のステップＳ２２０５：ＮＯ）、図２９のステップＳ２２０６からＳ２２０９の処理を省略し、本履歴予測動きベクトル候補導出処理手順を終了する。現在の予測動きベクトル候補の数numCurrMvpCandが予測動きベクトル候補リストmvpListLXの最大要素数である２より小さい場合（図２９のステップＳ２２０５：ＹＥＳ）、図２９のステップＳ２２０６以降の処理を行う。
【０１２６】
続いて、履歴予測動きベクトル候補リストHmvpCandListの中に、符号化／復号対象動きベクトルの参照インデックスrefIdxLXと同じ参照インデックスの要素であり、予測動きベクトルリストmvpListLXのどの要素とも異なる要素の場合（図２９のステップＳ２２０６：ＹＥＳ）、予測動きベクトル候補リストの０から数えてnumCurrMvpCand番目の要素mvpListLX[numCurrMvpCand]に履歴予測動きベクトル候補HmvpCandList[NumHmvpCand - i]のLYの動きベクトルを追加し（図２９のステップＳ２２０７）、現在の予測動きベクトル候補の数numCurrMvpCandを１インクリメントする。履歴予測動きベクトル候補リストHmvpCandListの中に、符号化／復号対象動きベクトルの参照インデックスrefIdxLXと同じ参照インデックスの要素であり、予測動きベクトルリストmvpListLXのどの要素とも異なる要素がない場合（図２９のステップＳ２２０６：ＮＯ）、ステップＳ２２０７の追加処理をスキップする。
【０１２７】
以上の図２９のステップＳ２２０５からＳ２２０７の処理をＬ０とＬ１で双方ともに行う（図２９のステップＳ２２０４〜Ｓ２２０８）。インデックスｉを１インクリメントし、インデックスｉが４と履歴予測動きベクトル候補の数NumHmvpCandのいずれか小さい値以下の場合、再びステップＳ２２０３以降の処理を行う（図２９のステップＳ２２０２〜Ｓ２２０９）。
【０１２８】
＜履歴マージ候補導出処理＞
次に、符号化側の通常マージモード導出部３０２の履歴マージ候補導出部３４５、復号側の通常マージモード導出部４０２の履歴マージ候補導出部４４５で共通の処理である図２１のステップＳ４０４の処理手順である履歴マージ候補リストHmvpCandListからの履歴マージ候補の導出方法について詳細に説明する。図３０は履歴マージ候補導出処理手順を説明するフローチャートである。
【０１２９】
まず、初期化処理を行う（図３０のステップＳ２３０１）。isPruned[i]の0から(numCurrMergeCand -1)番目のそれぞれの要素にFALSEの値を設定し、変数numOrigMergeCandに現在のマージ候補リストに登録されている要素の数numCurrMergeCandを設定する。
【０１３０】
続いて、インデックスhMvpIdxの初期値を1に設定し、この初期値からNumHmvpCandまで、図３０のステップＳ２３０３からステップＳ２３１０までの追加処理を繰り返す（図３０のステップＳ２３０２〜Ｓ２３１１）。現在のマージ候補リストに登録されている要素の数numCurrMergeCandが(最大マージ候補数MaxNumMergeCand-1)以下でなければ、マージ候補リストのすべての要素にマージ候補が追加されたので、本履歴マージ候補導出処理を終了する（図３０のステップＳ２３０３のＮＯ）。現在のマージ候補リストに登録されている要素の数numCurrMergeCandが(最大マージ候補数MaxNumMergeCand-1)以下の場合、ステップＳ２３０４以降の処理を行う。sameMotionにFALSE（偽）の値を設定する（図３０のステップＳ２３０４）。続いて、インデックスiの初期値を0に設定し、この初期値からnumOrigMergeCand-1まで図３０のステップＳ２３０６、Ｓ２３０７の処理を行う（図３０のＳ２３０５〜Ｓ２３０８）。履歴動きベクトル予測候補リストの０から数えて(NumHmvpCand - hMvpIdx)番目の要素HmvpCandList[NumHmvpCand- hMvpIdx]がマージ候補リストの０から数えてi番目の要素mergeCandList[i]と同じ値か否かを比較する（図３０のステップＳ２３０６）。
【０１３１】
マージ候補の同じ値とはマージ候補が持つすべての構成要素（インター予測モード、参照インデックス、動きベクトル）の値が同じ場合にマージ候補が同じ値とする。マージ候補が同じ値、かつisPruned[i]がFALSEの場合（図３０のステップＳ２３０６のＹＥＳ）、sameMotionおよびisPruned[i]共にTRUE（真）を設定する（図３０のステップＳ２３０７）。同じ値でない場合（図３０のステップＳ２３０６のＮＯ）、ステップＳ２３０７の処理をスキップする。図３０のステップＳ２３０５からステップＳ２３０８までの繰り返し処理が完了したらsameMotionがFALSE（偽）か否かを比較し（図３０のステップＳ２３０９）、sameMotionが FALSE（偽）の場合（図３０のステップＳ２３０９のＹＥＳ）、すなわち履歴予測動きベクトル候補リストの０から数えて(NumHmvpCand - hMvpIdx)番目の要素HmvpCandList[NumHmvpCand - hMvpIdx]はmergeCandListに存在しないので、マージ候補リストのnumCurrMergeCand番目のmergeCandList[numCurrMergeCand]に履歴予測動きベクトル候補リストの０から数えて(NumHmvpCand - hMvpIdx)番目の要素HmvpCandList[NumHmvpCand - hMvpIdx]を追加し、numCurrMergeCandを1インクリメントする（図３０のステップＳ２３１０）。インデックスhMvpIdxを１インクリメントし（図３０のステップＳ２３０２）、図３０のステップＳ２３０２〜Ｓ２３１１の繰り返し処理を行う。
履歴予測動きベクトル候補リストのすべての要素の確認が完了するか、マージ候補リストのすべての要素にマージ候補が追加されたら、本履歴マージ候補の導出処理を完了する。
【０１３２】
＜平均マージ候補導出処理＞
次に、符号化側の通常マージモード導出部３０２の平均マージ候補導出部３４４、復号側の通常マージモード導出部４０２の平均マージ候補導出部４４４で共通の処理である図２１のステップＳ４０３の処理手順である平均マージ候補の導出方法について詳細に説明する。図３８は平均マージ候補導出処理手順を説明するフローチャートである。
【０１３３】
まず、初期化処理を行う（図３８のステップＳ１３０１）。変数numOrigMergeCandに現在のマージ候補リストに登録されている要素の数numCurrMergeCandを設定する。
【０１３４】
続いて、マージ候補リストの先頭から順に走査し、２つの動き情報を決定する。１つ目の動き情報を示すインデックスi=0、２つ目の動き情報を示すインデックスj=1とする。（図３８のステップＳ１３０２〜Ｓ１３０３）。現在のマージ候補リストに登録されている要素の数numCurrMergeCandが(最大マージ候補数MaxNumMergeCand-1)以下でなければ、マージ候補リストのすべての要素にマージ候補が追加されたので、本履歴マージ候補導出処理を終了する（図３８のステップＳ１３０４）。現在のマージ候補リストに登録されている要素の数numCurrMergeCandが(最大マージ候補数MaxNumMergeCand-1)以下の場合は、ステップＳ１３０５以降の処理を行う。
【０１３５】
マージ候補リストのi番目の動き情報mergeCandList[i]とマージ候補リストのj番目の動き情報mergeCandList[j]がともに無効であるか否かを判定し（図３８のステップＳ１３０５）、ともに無効である場合は、mergeCandList[i]とmergeCandList[j]の平均マージ候補の導出を行わず、次の要素に移る。mergeCandList[i]とmergeCandList[j]がともに無効でない場合は、Xを0と1として以下の処理を繰り返す（図３８のステップＳ１３０６からＳ１３１４）。
【０１３６】
mergeCandList[i]のLX予測が有効であるかを判定する（図３８のステップＳ１３０７）。mergeCandList[i]のLX予測が有効である場合は、mergeCandList[j]のLX予測が有効であるかを判定する（図３８のステップＳ１３０８）。mergeCandList[j]のLX予測が有効である場合、すなわち、mergeCandList[i]のLX予測とmergeCandList[j]のLX予測がともに有効である場合は、mergeCandList[i]のLX予測の動きベクトルとmergeCandList[j]のLX予測の動きベクトルを平均したLX予測の動きベクトルとmergeCandList[i]のLX予測の参照インデックスを有するLX予測の平均マージ候補を導出してaverageCandのLX予測に設定し、averageCandのLX予測を有効とする（図３８のステップＳ１３０９）。図３８のステップＳ１３０８で、mergeCandList[j]のLX予測が有効でない場合、すなわち、mergeCandList[i]のLX予測が有効、かつmergeCandList[j]のLX予測が無効である場合は、mergeCandList[i]のLX予測の動きベクトルと参照インデックスを有するLX予測の平均マージ候補を導出してaverageCandのLX予測に設定し、averageCandのLX予測を有効とする（図３８のステップＳ１３１０）。図３８のステップＳ１３０７で、mergeCandList[i]のLX予測が有効でない場合、mergeCandList[j]のLX予測が有効であるか否かを判定する（図３８のステップＳ１３１１）。mergeCandList[j]のLX予測が有効である場合、すなわちmergeCandList[i]のLX予測が無効、かつmergeCandList[j] のLX予測が有効である場合は、mergeCandList[j]のLX予測の動きベクトルと参照インデックスを有するLX予測の平均マージ候補を導出してaverageCandのLX予測に設定し、averageCandのLX予測を有効とする（図３８のステップＳ１３１２）。図３８のステップＳ１３１１で、mergeCandList[j]のLX予測が有効でない場合、すなわちmergeCandList[i]のLX予測、mergeCandList[j]のLX予測がともに無効である場合は、averageCandのLX予測を無効とする（図３８のステップＳ１３１２）。
【０１３７】
以上のように生成されたL0予測、L1予測またはBI予測の平均マージ候補averageCandを、マージ候補リストのnumCurrMergeCand番目のmergeCandList[numCurrMergeCand]に追加し、numCurrMergeCandを1インクリメントする（図３８のステップＳ１３１５）。以上で、平均マージ候補の導出処理を完了する。
【０１３８】
なお、平均マージ候補は動きベクトルの水平成分と動きベクトルの垂直成分それぞれで平均される。
【０１３９】
＜動き補償予測処理＞
動き補償予測部３０６は、符号化において現在予測処理の対象となっているブロックの位置およびサイズを取得する。また、動き補償予測部３０６は、インター予測情報をインター予測モード判定部３０５から取得する。取得したインター予測情報から参照インデックスおよび動きベクトルを導出し、復号画像メモリ１０４内の参照インデックスで特定される参照ピクチャを、動きベクトルの分だけ予測ブロックの画像信号と同一位置より移動させた位置の画像信号を取得した後に予測信号を生成する。
【０１４０】
インター予測におけるインター予測モードがL0予測やL1予測のような、単一の参照ピクチャからの予測の場合には、１つの参照ピクチャから取得した予測信号を動き補償予測信号とし、インター予測モードがBI予測のような、予測モードが２つの参照ピクチャからの予測の場合には、２つの参照ピクチャから取得した予測信号を重みづけ平均したものを動き補償予測信号とし、動き補償予測信号を予測方法決定部１０５に供給する。ここでは双予測の重みづけ平均の比率を１：１とするが、他の比率を用いて重みづけ平均を行っても良い。例えば、予測対象となっているピクチャと参照ピクチャとのピクチャ間隔が近いものほど重みづけの比率が大きくなるようにしてもよい。また、重みづけ比率の算出をピクチャ間隔の組み合わせと重みづけ比率との対応表を用いて行うようにしても良い。
【０１４１】
動き補償予測部４０６は、符号化側の動き補償予測部３０６と同様の機能をもつ。動き補償予測部４０６は、インター予測情報を、通常予測動きベクトルモード導出部４０１、通常マージモード導出部４０２、サブブロック予測動きベクトルモード導出部４０３、サブブロックマージモード導出部４０４から、スイッチ４０８を介して取得する。動き補償予測部４０６は、得られた動き補償予測信号を、復号画像信号重畳部２０７に供給する。
【０１４２】
＜インター予測モードについて＞
単一の参照ピクチャからの予測を行う処理を単予測と定義し、単予測の場合はＬ０予測またはＬ１予測という、参照リストＬ０、Ｌ１に登録された２つの参照ピクチャのいずれか一方を利用した予測を行う。
【０１４３】
図３２は単予測であってＬ０の参照ピクチャ（ＲｅｆＬ０Ｐｉｃ）が処理対象ピクチャ（ＣｕｒＰｉｃ）より前の時刻にある場合を示している。図３３は単予測であってＬ０予測の参照ピクチャが処理対象ピクチャより後の時刻にある場合を示している。同様に、図３２および図３３のＬ０予測の参照ピクチャをＬ１予測の参照ピクチャ（ＲｅｆＬ１Ｐｉｃ）に置き換えて単予測を行うこともできる。
【０１４４】
２つの参照ピクチャからの予測を行う処理を双予測と定義し、双予測の場合はＬ０予測とＬ１予測の双方を利用してＢＩ予測と表現する。図３４は双予測であってＬ０予測の参照ピクチャが処理対象ピクチャより前の時刻にあって、Ｌ１予測の参照ピクチャが処理対象ピクチャより後の時刻にある場合を示している。図３５は双予測であってＬ０予測の参照ピクチャとＬ１予測の参照ピクチャが処理対象ピクチャより前の時刻にある場合を示している。図３６は双予測であってＬ０予測の参照ピクチャとＬ１予測の参照ピクチャが処理対象ピクチャより後の時刻にある場合を示している。
【０１４５】
このように、Ｌ０／Ｌ１の予測種別と時間の関係は、Ｌ０が過去方向、Ｌ１が未来方向とは限定されずに用いることが可能である。また双予測の場合に、同一の参照ピクチャを用いてＬ０予測及びＬ１予測のそれぞれを行ってもよい。なお、動き補償予測を単予測で行うか双予測で行うかの判断は、例えばＬ０予測を利用するか否か及びＬ１予測を利用するか否かを示す情報（例えば、フラグ）に基づき判断される。
【０１４６】
＜参照インデックスについて＞
本発明の実施の形態では、動き補償予測の精度向上のために、動き補償予測において複数の参照ピクチャの中から最適な参照ピクチャを選択することを可能とする。そのため、動き補償予測で利用した参照ピクチャを参照インデックスとして利用するとともに、参照インデックスを差分動きベクトルとともにビットストリーム中に符号化する。
【０１４７】
＜通常予測動きベクトルモードに基づく動き補償処理＞
動き補償予測部３０６は、図１６の符号化側におけるインター予測部１０２でも示されるように、インター予測モード判定部３０５において、通常予測動きベクトルモード導出部３０１によるインター予測情報が選択された場合には、このインター予測情報をインター予測モード判定部３０５から取得し、現在処理対象となっているブロックのインター予測モード、参照インデックス、動きベクトルを導出し、動き補償予測信号を生成する。生成された動き補償予測信号は、予測方法決定部１０５に供給される。
【０１４８】
同様に、動き補償予測部４０６は、図２２の復号側におけるインター予測部２０３でも示されるように、復号の過程でスイッチ４０８が通常予測動きベクトルモード導出部４０１に接続された場合には、通常予測動きベクトルモード導出部４０１によるインター予測情報を取得し、現在処理対象となっているブロックのインター予測モード、参照インデックス、動きベクトルを導出し、動き補償予測信号を生成する。生成された動き補償予測信号は、復号画像信号重畳部２０７に供給される。
【０１４９】
＜通常マージモードに基づく動き補償処理＞
動き補償予測部３０６は、図１６の符号化側におけるインター予測部１０２でも示されるように、インター予測モード判定部３０５において、通常マージモード導出部３０２によるインター予測情報が選択された場合には、このインター予測情報をインター予測モード判定部３０５から取得し、現在処理対象となっているブロックのインター予測モード、参照インデックス、動きベクトルを導出し、動き補償予測信号を生成する。生成された動き補償予測信号は、予測方法決定部１０５に供給される。
【０１５０】
同様に、動き補償予測部４０６は、図２２の復号側におけるインター予測部２０３でも示されるように、復号の過程でスイッチ４０８が通常マージモード導出部４０２に接続された場合には、通常マージモード導出部４０２によるインター予測情報を取得し、現在処理対象となっているブロックのインター予測モード、参照インデックス、動きベクトルを導出し、動き補償予測信号を生成する。生成された動き補償予測信号は、復号画像信号重畳部２０７に供給される。
【０１５１】
＜サブブロック予測動きベクトルモードに基づく動き補償処理＞
動き補償予測部３０６は、図１６の符号化側におけるインター予測部１０２でも示されるように、インター予測モード判定部３０５において、サブブロック予測動きベクトルモード導出部３０３によるインター予測情報が選択された場合には、このインター予測情報をインター予測モード判定部３０５から取得し、現在処理対象となっているブロックのインター予測モード、参照インデックス、動きベクトルを導出し、動き補償予測信号を生成する。生成された動き補償予測信号は、予測方法決定部１０５に供給される。
【０１５２】
同様に、動き補償予測部４０６は、図２２の復号側におけるインター予測部２０３でも示されるように、復号の過程でスイッチ４０８がサブブロック予測動きベクトルモード導出部４０３に接続された場合には、サブブロック予測動きベクトルモード導出部４０３によるインター予測情報を取得し、現在処理対象となっているブロックのインター予測モード、参照インデックス、動きベクトルを導出し、動き補償予測信号を生成する。生成された動き補償予測信号は、復号画像信号重畳部２０７に供給される。
【０１５３】
＜サブブロックマージモードに基づく動き補償処理＞
動き補償予測部３０６は、図１６の符号化側におけるインター予測部１０２でも示されるように、インター予測モード判定部３０５において、サブブロックマージモード導出部３０４によるインター予測情報が選択された場合には、このインター予測情報をインター予測モード判定部３０５から取得し、現在処理対象となっているブロックのインター予測モード、参照インデックス、動きベクトルを導出し、動き補償予測信号を生成する。生成された動き補償予測信号は、予測方法決定部１０５に供給される。
【０１５４】
同様に、動き補償予測部４０６は、図２２の復号側におけるインター予測部２０３でも示されるように、復号の過程でスイッチ４０８がサブブロックマージモード導出部４０４に接続された場合には、サブブロックマージモード導出部４０４によるインター予測情報を取得し、現在処理対象となっているブロックのインター予測モード、参照インデックス、動きベクトルを導出し、動き補償予測信号を生成する。生成された動き補償予測信号は、復号画像信号重畳部２０７に供給される。
【０１５５】
＜アフィン変換予測に基づく動き補償処理＞
通常予測動きベクトルモード、および通常マージモードでは、以下のフラグに基づいてアフィンモデルによる動き補償が利用できる。以下のフラグは、符号化処理においてインター予測モード判定部３０５により決定されるインター予測の条件に基づいて以下のフラグに反映され、ビットストリーム中に符号化される。復号処理においては、ビットストリーム中の以下のフラグに基づいてアフィンモデルによる動き補償を行うか否かを特定する。
【０１５６】
sps_affine_enabled_flagは、インター予測において、アフィンモデルによる動き補償が利用できるか否かを表す。sps_affine_enabled_flagが０であれば、シーケンス単位でアフィンモデルによる動き補償ではないように抑制される。また、inter_affine_flag とcu_affine_type_flag は、符号化ビデオシーケンスのＣＵ（符号化ブロック）シンタックスにおいて伝送されない。sps_affine_enabled_flagが１であれば、符号化ビデオシーケンスにおいてアフィンモデルによる動き補償を利用できる。
【０１５７】
sps_affine_type_flagは、インター予測において、6パラメータアフィンモデルによる動き補償が利用できるか否かを表す。sps_affine_type_flagが０であれば、6パラメータアフィンモデルによる動き補償ではないように抑制される。また、cu_affine_type_flagは、符号化ビデオシーケンスのＣＵシンタックスにおいて伝送されない。sps_affine_type_flagが１であれば、符号化ビデオシーケンスにおいて6パラメータアフィンモデルによる動き補償を利用できる。sps_affine_type_flagが存在しない場合には、０であるものとする。
【０１５８】
PまたはBスライスを復号している場合、現在処理対象となっているＣＵにおいて、inter_affine_flagが１であれば、現在処理対象となっているＣＵの動き補償予測信号を生成するために、アフィンモデルによる動き補償が用いられる。inter_affine_flagが０であれば、現在処理対象となっているＣＵにアフィンモデルは用いられない。inter_affine_flagが存在しない場合には、０であるものとする。
【０１５９】
PまたはBスライスを復号している場合、現在処理対象となっているＣＵにおいて、cu_affine_type_flagが１であれば、現在処理対象となっているＣＵの動き補償予測信号を生成するために、6パラメータアフィンモデルによる動き補償が用いられる。cu_affine_type_flagが０であれば、現在処理対象となっているＣＵの動き補償予測信号を生成するために、4パラメータアフィンモデルによる動き補償が用いられる。
【０１６０】
アフィンモデルによる動き補償では、サブブロック単位で参照インデックスや動きベクトルが導出されることから、サブブロック単位で処理対象となっている参照インデックスや動きベクトルを用いて動き補償予測信号を生成する。
【０１６１】
4パラメータアフィンモデルは２つの制御点のそれぞれの動きベクトルの水平成分及び垂直成分の４つのパラメータからサブブロックの動きベクトルを導出し、サブブロック単位で動き補償を行うモードである。
【０１６２】
＜イントラブロックコピー（ＩＢＣ）＞
図３９を参照してイントラブロックコピーの有効参照領域を説明する。図３９Ａは符号化ツリーブロック単位をイントラブロックコピー基準ブロックとして、有効参照領域を決定する場合の例である。図３９Ａの５００、５０１、５０２、５０３、５０４は符号化ツリーブロックであり、５０４が処理対象の符号化ツリーブロックである。５０５は、処理対象符号化ブロックである。符号化ツリーブロックの処理順は、５００、５０１、５０２、５０３、５０４の順とする。この場合、処理対象符号化ブロック５０５を含む符号化ツリーブロック５０４の直前に処理された３つの符号化ツリーブロック５０１、５０２、５０３を処理対象符号化ブロック５０５の有効参照領域とする。符号化ツリーブロック５０１より前に処理された符号化ツリーブロック、及び処理対象符号化ブロック５０５より前に処理が完了しているか否かに関わらず、処理対象符号化ブロック５０５を含む符号化ツリーブロック５０４に含まれる領域はすべて無効参照領域とする。
【０１６３】
図３９Ｂは、符号化ツリーブロックを４分割した単位をイントラブロックコピー基準ブロックとして、有効参照領域を決定する場合の例である。図３９Ｂの５１５、５１６は符号化ツリーブロックであり、５１６が処理対象の符号化ツリーブロックである。符号化ツリーブロック５１５は５０６、５０７、５０８、５０９に４分割され、５１６は５１０、５１１、５１２、５１３に４分割される。５１４は処理対象符号化ブロックである。イントラブロックコピー基準ブロックの処理順は、５０６、５０７、５０８、５０９、５１０、５１１、５１２、５１３の順とする。この場合、処理対象符号化ブロック５１４を含むイントラブロックコピー基準ブロック５１１の直前に処理された３つのイントラブロックコピー基準ブロック５０８、５０９、５１０を処理対象符号化ブロック５１４の有効参照領域とする。イントラブロックコピー基準ブロック５０８より前に処理された符号化ツリーブロック、及び処理対象符号化ブロック５１４より前に処理が完了しているか否かに関わらず、処理対象符号化ブロック５１４を含むイントラブロックコピー基準ブロック５１１に含まれる領域はすべて無効参照領域とする。
【０１６４】
＜予測イントラブロックコピー：符号化側の説明＞
図４４を参照して符号化側の予測イントラブロックコピー処理手順を説明する。
まず、ブロックベクトル検出部３７５でブロックベクトルmvLを検出する（図４４のステップＳ４５００）。   続いて、ＩＢＣ空間ブロックベクトル候補導出部３７１、ＩＢＣ履歴予測ブロックベクトル候補導出部３７２、ＩＢＣ予測ブロックベクトル候補補充部３７３、ＩＢＣ予測ブロックベクトル候補選択部３７６、ブロックベクトル減算部３７８で、予測ブロックベクトルモードで用いるブロックベクトルの差分ブロックベクトルを算出する（図４４のステップＳ４５０１〜Ｓ４５０３）。
【０１６５】
予測ブロックベクトルの候補を算出してブロックベクトル候補リストmvpListを構築する（図４４のステップＳ４５０１）。イントラブロックコピー予測部３５２の中のＩＢＣ空間ブロックベクトル候補導出部３７１、ＩＢＣ履歴ブロックベクトル候補導出部３７２、ＩＢＣ予測ブロックベクトル候補補充部３７３で複数の予測ブロックベクトルの候補を導出して予測ブロックベクトル候補リストmvpListを構築する。図４４のステップＳ４５０１の詳細な処理手順については図４７のフローチャートを用いて後述する。
【０１６６】
続いて、ＩＢＣ予測ブロックベクトル候補選択部３７６により、予測ブロックベクトル候補リストmvpListLから予測ブロックベクトルmvpLを選択する（図４４のステップＳ４５０２）。ブロックベクトルmvLと予測ブロックベクトル候補リストmvpListLの中に格納された各予測ブロックベクトルの候補mvpListL[i]との差分であるそれぞれの差分ブロックベクトルを算出する。それら差分ブロックベクトルを符号化したときの符号量を予測ブロックベクトル候補リストmvpListLの要素ごとに算出する。そして、予測ブロックベクトル候補リストmvpListLに登録された各要素の中で、予測ブロックベクトルの候補毎の符号量が最小となる予測ブロックベクトルの候補mvpListL[i]を予測ブロックベクトルmvpLとして選択し、そのインデックスiを取得する。予測ブロックベクトル候補リストmvpListLの中で最小の発生符号量となる予測ブロックベクトルの候補が複数存在する場合には、予測ブロックベクトル候補リストmvpListLの中のインデックスiが小さい番号で表される予測ブロックベクトルの候補mvpListL[i]を最適予測ブロックベクトルmvpLとして選択し、そのインデックスiを取得する。
【０１６７】
続いて、ブロックベクトル減算部３７８で、ブロックベクトルmvLから選択された予測ブロックベクトルmvpLを減算し、
mvdL = mvL - mvpL
として差分ブロックベクトルmvdLを算出する（図４４のステップＳ４５０３）。
【０１６８】
＜予測イントラブロックコピー：復号側の説明＞
次に、図４５を参照して復号側の予測ブロックベクトルモード処理手順を説明する。復号側では、ＩＢＣ空間予測ブロックベクトル候補導出部４７１、ＩＢＣ履歴ブロックベクトル候補導出部４７２、ＩＢＣ予測ブロックベクトル補充部４７３で、予測ブロックベクトルモードで用いるブロックベクトルを算出する（図４５のステップＳ４６００〜Ｓ４６０２）。具体的には予測ブロックベクトル候補リストmvpListLを算出して、予測ブロックベクトルmvpLを選択し、ブロックベクトルmvLを算出する。
【０１６９】
予測ブロックベクトルの候補を算出して予測ブロックベクトル候補リストmvpListLを構築する（図４５のステップＳ４６０１）。イントラブロックコピー予測部３６２の中のＩＢＣ空間ブロックベクトル候補導出部４７１、ＩＢＣ履歴ブロックベクトル候補導出部４７２、ＩＢＣブロックベクトル補充部４７３で複数の予測ブロックベクトルの候補を算出し、予測ブロックベクトル候補リストmvpListLを構築する。図４５のステップＳ４６０１の詳細な処理手順については説明を省略する。   続いて、ＩＢＣ予測ブロックベクトル候補選択部４７６で予測ブロックベクトル候補リストmvpListLからビット列復号部２０１にて復号されて供給される予測ブロックベクトルのインデックスmvpIdxLに対応する予測ブロックベクトルの候補mvpListL[mvpIdxL]を選択された予測ブロックベクトルmvpLとして取り出す（図４５のステップＳ４６０１）。   続いて、ブロックベクトル加算部４７８でビット列復号部２０１にて復号されて供給される差分ブロックベクトルmvdLと予測ブロックベクトルmvpLを加算し、
mvL = mvpL + mvdL
としてブロックベクトルmvLを算出する（図４５のステップＳ４６０２）。
【０１７０】
＜予測ブロックベクトルモード：ブロックベクトルの予測方法＞
図４７は本発明の実施の形態に係る動画像符号化装置のイントラブロックコピー予測部３５２及び動画像復号装置のイントラブロックコピー予測部３６２とで共通する機能を有する予測イントラブロックコピーモード導出処理の処理手順を表すフローチャートである。
【０１７１】
イントラブロックコピー予測部３５２及びイントラブロックコピー予測部３６２では、予測ブロックベクトル候補リストmvpListLを備えている。予測ブロックベクトル候補リストmvpListLはリスト構造を成し、予測ブロックベクトル候補リスト内部の所在を示す予測ブロックベクトルインデックスと、インデックスに対応する予測ブロックベクトル候補を要素として格納する記憶領域が設けられている。予測ブロックベクトルインデックスの数字は０から開始され、予測ブロックベクトル候補リストmvpListLの記憶領域に、予測ブロックベクトル候補が格納される。本実施の形態においては、予測ブロックベクトル候補リストmvpListLは３個の予測ブロックベクトル候補を登録することができるものとする。さらに、予測ブロックベクトル候補リストmvpListLに登録されている予測ブロックベクトル候補数を示す変数numCurrMvpIbcCandに０を設定する。
【０１７２】
ＩＢＣ空間ブロックベクトル候補導出部３７１及び４７１は、左側に隣接するブロックからの予測ブロックベクトルの候補を導出する（図４７のステップＳ４８０１）。この処理では、左側に隣接するブロック（Ａ０またはＡ１）の予測ブロックベクトル候補が利用できるか否かを示すフラグavailableFlagLA、及びブロックベクトルmvLAを導出し、mvLAを予測ブロックベクトル候補リストmvpListLに追加する。続いて、ＩＢＣ空間ブロックベクトル候補導出部３７１及び４７１は、上側に隣接するブロック（Ｂ０，Ｂ１またはＢ２）からの予測ブロックベクトルの候補を導出する（図４７のステップＳ４８０２）。この処理では、上側に隣接するブロックの予測動きベクトル候補が利用できるか否かを示すフラグavailableFlagLB、及びブロックベクトルmvLBを導出し、mvLAとmvLBが等しくなければ、mvLBを予測ブロックベクトル候補リストmvpListLに追加する。図４７のステップＳ４８０１とＳ４８０２の処理は参照する隣接ブロックの位置と数が異なる点以外は共通であり、符号化ブロックの予測ブロックベクトル候補が利用できるか否かを示すフラグavailableFlagLN、及び動きベクトルmvLN（ＮはＡまたはＢ、以下同様）を導出する。
【０１７３】
続いて、ＩＢＣ履歴ブロックベクトル候補導出部３７２及び４７２は履歴ブロックベクトル候補リストHmvpIbcCandListに登録されている履歴ブロックベクトル候補を予測ブロックベクトル候補リストmvpListLに追加する。（図４７のステップＳ４８０３）。このステップＳ４８０３の登録処理手順の詳細については図２９のフローチャートで示された動作の説明において、動きベクトルをブロックベクトル、参照インデックスのリストをＬ０、履歴予測動きベクトル候補リストHmvpCandListを履歴ブロックベクトル候補リストHmvpIbcCandListとした場合の動作と同様であれば良いため、説明を省略する。
【０１７４】
続いてＩＢＣ予測ブロックベクトル補充部３７３及び４７３は予測ブロックベクトル候補リストmvpListLを満たすまで（０，０）等、所定の値のブロックベクトルを追加する（図４７のＳ４８０４）。
【０１７５】
＜マージイントラブロックコピーモード導出部＞
図４２のイントラブロックコピー予測部３５２は、ＩＢＣ空間ブロックベクトル候補導出部３７１、ＩＢＣ履歴ブロックベクトル候補導出部３７２、ＩＢＣブロックベクトル補充部３７３、参照位置補正部３８０、参照領域境界補正部３８１、ＩＢＣマージ候補選択部３７４、ＩＢＣ予測モード判定部３７７を含む。
【０１７６】
図４３のイントラブロックコピー予測部３６２は、ＩＢＣ空間ブロックベクトル候補導出部４７１、ＩＢＣ履歴ブロックベクトル候補導出部４７２、ＩＢＣブロックベクトル補充部４７３、ＩＢＣマージ候補選択部４７４、参照位置補正部４８０、参照領域境界補正部４８１、ブロックコピー部４７７を含む。
【０１７７】
図４６は本発明の実施の形態に係る動画像符号化装置のイントラブロックコピー予測部３５２及び動画像復号装置のイントラブロックコピー予測部３６２とで共通する機能を有するマージイントラブロックコピーモード導出処理の手順を説明するフローチャートである。
【０１７８】
イントラブロックコピー予測部３５２及びイントラブロックコピー予測部３６２では、マージイントラブロックコピー候補リストmergeIbcCandListを備えている。マージイントラブロックコピー候補リストmergeIbcCandListはリスト構造を成し、マージイントラブロックコピー候補内部の所在を示すマージインデックスと、インデックスに対応するマージイントラブロックコピー候補を要素として格納する記憶領域が設けられている。マージインデックスの数字は０から開始され、マージイントラブロックコピー候補リストmergeIbcCandListの記憶領域に、マージイントラブロックコピー候補が格納される。以降の処理では、マージイントラブロックコピー候補リストmergeIbcCandListに登録されたマージインデックスｉのマージ候補は、mergeIbcCandList [i]で表すこととする。本実施の形態においては、マージ候補リストmergeCandListは少なくとも３個のマージイントラブロックコピー候補を登録することができるものとする。さらに、マージイントラブロックコピー候補リストmergeIbcCandListに登録されているマージイントラブロックコピー候補数を示す変数numCurrMergeIbcCandに０を設定する。
【０１７９】
ＩＢＣ空間ブロックベクトル候補導出部３７１及びＩＢＣ空間ブロックベクトル候補導出部４７１では、動画像符号化装置の符号化情報格納メモリ１１１または動画像復号装置の符号化情報格納メモリ２０５に格納されている符号化情報から、処理対象ブロックの左側と上側に隣接するブロックからの空間マージ候補Ａ，Ｂを導出して、導出された空間マージ候補をマージイントラブロックコピー候補リストmergeIbcCandListに登録する（図４６のステップＳ４７０１）。ここで、空間マージ候補Ａ，Ｂのいずれかを示すＮを定義する。ブロックＮのイントラブロックコピー予測情報が空間ブロックベクトルマージ候補Ｎとして利用できるか否かを示すフラグavailableFlagN、ブロックベクトルmvLを導出する。ただし、本実施の形態においては処理対象となる符号化ブロックを含むブロックに含まれる他の符号化ブロックを参照せずに、ブロックベクトルマージ候補を導出するので、処理対象の符号化ブロックを含むブロックに含まれる空間ブロックベクトルマージ候補は導出しない。
【０１８０】
続いて、ＩＢＣ履歴ブロックベクトル候補導出部３７２及びＩＢＣ履歴ブロックベクトル候補導出部４７２では、履歴予測ブロックベクトル候補リストHmvpIbcCandListに登録されている履歴予測ブロックベクトル候補をマージイントラブロックコピー候補リストmergeIbcCandListに追加する（図４６のステップＳ４７０２）。本実施例においては、mergeIbcCandListに追加済みのブロックベクトルと履歴予測ブロックベクトル候補のブロックベクトルが同一の値を持つ場合には、mergeIbcCandListへの追加を行わないものとする。
【０１８１】
続いて、ＩＢＣ予測ブロックベクトル補充部３７３及びＩＢＣ予測ブロックベクトル補充部４７３は、マージイントラブロックコピー候補リストmergeIbcCandList内に登録されているマージ候補数numCurrMergeIbcCandが、最大イントラブロックマージ候補数MaxNumMergeIbcCandより小さい場合、マージイントラブロックコピー候補リストmergeIbcCandList内に登録されているマージ候補数numCurrMergeIbcCandが最大マージ候補数MaxNumMergeIbcCandを上限として追加イントラブロックマージ候補を導出して、マージイントラブロックコピー候補リストmergeIbcCandListに登録する（図４６のステップＳ４７０３）。最大マージ候補数MaxNumMergeIbcCandを上限として、（０，０）の値を持つブロックベクトルをマージイントラブロックコピー候補リストmergeIbcCandListに追加する。
【０１８２】
続いて、ＩＢＣマージ候補選択部３７４及びＩＢＣマージ候補選択部４７４では、マージイントラブロックコピー候補リストmergeIbcCandList内に登録されているイントラブロックマージ候補から１つを選択する（図４６のステップＳ４７０４）。ＩＢＣマージ候補選択部３７４では、参照位置の復号画像を復号画像メモリ１０４から取得して符号量とひずみ量を算出することによりマージ候補を選択し、選択されたイントラブロックマージ候補を示すマージインデックスをＩＢＣ予測モード判定部３７７に供給する。ＩＢＣ予測モード判定部３７７は、符号量とひずみ量を算出することによりマージモードか否かを選択し、その結果を予測方法決定部１０５に供給する。一方、復号側のＩＢＣマージ候補選択部４７４では、復号されたマージインデックスに基づいて、イントラブロックマージ候補を選択し、選択したイントラブロックマージ候補を参照位置補正部４８０に供給する。
【０１８３】
続いて、参照位置補正部３８０及び参照位置補正部４８０では、イントラブロックマージ候補に対し参照位置を補正する処理を行う（図４６のステップＳ４７０５）。参照位置補正部３８０及び参照位置補正部４８０の処理の詳細は後述する。
【０１８４】
続いて、参照領域境界補正部３８１及び参照領域境界補正部４８１では、イントラブロックマージ候補に対し参照領域境界を補正する処理を行う（図４６のステップＳ４７０６）。参照位置補正部３８１及び参照位置補正部４８１の処理の詳細は後述する。
【０１８５】
ブロックコピー部４７７は、参照位置の復号画像を復号画像メモリ２０８から取得し、復号画像信号重畳部２０７に供給する。ここで、ブロックコピー部４７７では、輝度成分と色差成分がコピーされる。
【０１８６】
上記のブロックベクトルmvLは輝度のブロックベクトルを示す。色差のブロックベクトルmvCは、色差フォーマットが４２０の場合、
mvC = ( ( mvL >> ( 3 + 2 ) ) * 32
となる。上式により、mvCのx,y成分それぞれが処理される。
【０１８７】
＜参照位置補正部＞
図４８は、参照位置補正部３８０及び参照位置補正部４８０の処理を説明するフローチャートである。いま、イントラブロックコピー基準ブロックの単位は符号化ツリーブロック（CTU）であり、その大きさは128x128画素でないものとする。
【０１８８】
まず、参照ブロックの左上および右下の位置を算出する（Ｓ６００１）。参照ブロックとは、処理対象符号化ブロックがブロックベクトルを用いて参照するブロックを示す。参照ブロックの左上を( xRefTL, yRefTL )、右下を( xRefBR, yRefBR )とすると、
( xRefTL, yRefTL ) = ( xCb + ( mvL[ 0 ] >> 4 ), yCb + ( mvL[ 1 ] >> 4 ) )
( xRefBR, yRefBR ) = ( xRefTL + cbWidth - 1, yRefTL + cbHeight - 1 ) 
となる。ここで、処理対象符号化ブロックの位置を(xCb,yCb)、ブロックベクトルを(mvL[0],mvL[1])とし、処理対象符号化ブロックの幅はcbWidth、高さはcbHeightとする。
次に、CTUの大きさが128x128画素か否かを判定する（Ｓ６００２）。いま、その大きさは128x128画素でないので（Ｓ６００２：ＮＯ）、参照可能領域の左上および右下の位置を算出する（Ｓ６００３）。参照可能領域の左上を( xAvlTL, yAvlTL )、右下を( xAvlBR, yAvlBR )とすると、
NL = Min( 1, 7 - CtbLog2SizeY ) - ( 1 << ((7 - CtbLog2SizeY) << 1) )
( xAvlTL, yAvlTL ) = ( ((xCb >> CtbLog2SizeY) + NL) << CtbLog2SizeY,
(yCb >> CtbLog2SizeY) << CtbLog2SizeY )
( xAvlBR, yAvlBR ) = ( ((xCb >> CtbLog2SizeY) << CtbLog2SizeY) - 1,
(((yCb >> CtbLog2SizeY) + 1) << CtbLog2SizeY) - 1 )
となる。ここで、CTUのサイズはCtbLog2SizeYとする。
【０１８９】
次に、参照ブロックのx方向の参照位置が、参照可能領域の左上より小さいか否かを判定する（Ｓ６００４）。判定が偽ならば（Ｓ６００４：ＮＯ）、次の処理（Ｓ６００６）に進む。一方、判定が真ならば（Ｓ６００４：ＹＥＳ）、参照可能領域の左上に合わせてx方向の参照位置を補正する（Ｓ６００５）。
【０１９０】
図４９は、参照位置を補正する様子を示す図である。６００１は処理対象符号化ツリーブロックを、６００２は処理対象符号化ブロックを、６００３は参照可能領域を示す。いま、参照ブロックr2が６０１１に位置していたとすると、x方向の参照位置が、参照可能領域の左上より小さい（Ｓ６００４：ＹＥＳ）。よって、xRefTL=xAvlTLとして６０１２の位置に参照位置を補正する（Ｓ６００５）。ここで、Ｓ６００１にあるようにxRefBR=xRefTL+cbWidth-1であるから、xRefTLを補正したことに伴ってxRefBRも補正されることになる。この参照位置の補正において、ブロックベクトルmvL[0]を補正しても良い。つまり、
mvL[0] = (xAvlTL - xCb) << 4
と補正する。これにより、xRefTL=xAvlTLとなるので、参照位置を補正できる。
【０１９１】
このように、参照ブロックが参照可能領域の外部に位置していた場合に、その参照位置を補正することによって、参照可能となる。
【０１９２】
いま、イントラブロックコピー予測部３５２において構築したブロックベクトル候補リストのうち、いくつかのブロックベクトルが参照可能領域の外側であったとする。参照位置を補正しない場合には、それらのブロックベクトルによる参照が不可能なので、それらのブロックベクトルをＩＢＣマージモードの候補とすることが出来ない。一方、本発明において参照位置を補正する場合には、構築したブロックベクトル候補リストの全てのブロックベクトルは、参照可能領域の内側となる。よって、全てのブロックベクトルによる参照が可能であり、全てのブロックベクトルをＩＢＣマージモードの候補とすることが出来る。従って、ＩＢＣマージモード選択部３７４において、全てのブロックベクトルに対応するそれぞれのＩＢＣマージモードの候補から最適な予測モードを選択できるので、符号化効率が向上する。
【０１９３】
いま、イントラブロックコピー予測部３６２において構築したブロックベクトル候補リストのうち、いくつかのブロックベクトルが参照可能領域の外側であったとする。参照位置を補正しない場合には、それらのブロックベクトルによる参照が不可能なので、それらのブロックベクトルを用いたＩＢＣマージモードは、復号することが出来ない。本発明ではない符号化装置では、それらのブロックベクトルを用いたＩＢＣマージモードを示すマージインデックスは、符号化しないものとして動作する。しかし、動作不良などのため、そのようなマージインデックスが符号化されて、ビットストリームが生成される可能性がある。あるいはパケットロスなどによりビットストリームの一部が欠けるなどして、復号結果がそのようなマージインデックスとなる可能性がある。このような不完全なビットストリームを復号しようとすると、参照可能領域の外側を参照しようとして正しくない位置の復号画像メモリにアクセスする可能性がある。その結果、復号装置によって復号結果が異なったり、復号処理が停止したりする。一方、本発明において参照位置を補正する場合には、構築したブロックベクトル候補リストの全てのブロックベクトルは、参照可能領域の内側となる。従って、このような不完全なビットストリームを復号しても、参照可能領域の内側に参照位置が補正されて参照が可能となる。このように、参照位置を補正することにより、メモリアクセス範囲を保証する。その結果、復号装置によって復号結果が同じになり、復号処理を継続できるので、復号装置のロバスト性を向上させることができる。
【０１９４】
また、参照位置の補正においてブロックベクトルを補正する場合、その対象は輝度のブロックベクトルである。ここで、色差のブロックベクトルは、輝度のブロックベクトルから算出される。つまり、輝度のブロックベクトルを補正すれば、色差のブロックベクトルも補正されることになる。よって、色差において、再び参照位置を補正する必要はない。ブロックベクトルを補正しない場合に輝度と色差の両方で参照可能か否かを判定する必要があるのに比べて、処理量を削減することができる。
【０１９５】
加えて、参照位置の補正においてブロックベクトルを補正する場合、補正したブロックベクトルは、処理対象符号化ブロックのブロックベクトルとして、符号化情報格納メモリ１１１または符号化情報格納メモリ２０５に格納される。つまり、補正した参照位置とブロックベクトルが指す位置が同じである。ここで、復号結果を復号画像メモリに保存する際にデブロックフィルタ処理をすることがある。このフィルタ処理において、ブロック境界に面した２つのブロックが持つブロックベクトルの差分によって、フィルタの強度を制御する。ブロックベクトルを補正しない場合には補正した参照位置とブロックベクトルが指す位置が異なるのに比べて、より適切なフィルタの強度となるため、符号化効率を向上させることができる。
【０１９６】
続いて、参照ブロックのy方向の参照位置が、参照可能領域の左上より小さいか否かを判定する（Ｓ６００６）。判定が偽ならば（Ｓ６００６：ＮＯ）、次の処理（Ｓ６００８）に進む。一方、判定が真ならば（Ｓ６００６：ＹＥＳ）、参照可能領域の左上に合わせてy方向の参照位置を補正する（Ｓ６００７）。
【０１９７】
いま、参照ブロックr4が６０２１に位置していたとすると、y方向の参照位置が、参照可能領域の左上より小さい（Ｓ６００６：ＹＥＳ）。よって、yRefTL=yAvlTLとして６０２２の位置に参照位置を補正する（Ｓ６００７）。ここで、Ｓ６００１にあるようにyRefBR=yRefTL+cbHeight-1であるから、yRefTLを補正したことに伴ってyRefBRも補正されることになる。この参照位置の補正において、ブロックベクトルmvL[1]を補正しても良い。つまり、
mvL[1] = (yAvlTL - yCb) << 4
と補正する。これにより、yRefTL=yAvlTLとなるので、参照位置を補正できる。
【０１９８】
続いて、参照ブロックのx方向の参照位置が、参照可能領域の右下より大きいか否かを判定する（Ｓ６００８）。判定が偽ならば（Ｓ６００８：ＮＯ）、次の処理（Ｓ６０１０）に進む。一方、判定が真ならば（Ｓ６００８：ＹＥＳ）、参照可能領域の右下に合わせてx方向の参照位置を補正する（Ｓ６００９）。
【０１９９】
いま、参照ブロックr7が６０３１に位置していたとすると、x方向の参照位置が、参照可能領域の右下より大きい（Ｓ６００８：ＹＥＳ）。よって、xRefBR=xAvlBRとして６０３２の位置に参照位置を補正する（Ｓ６００９）。ここで、Ｓ６００１にあるようにxRefBR=xRefTL+cbWidth-1、つまりxRefTL=xRefBR-(cbWidth-1)であるから、xRefBRを補正したことに伴ってxRefTLも補正されることになる。この参照位置の補正において、ブロックベクトルmvL[0]を補正しても良い。つまり、
mvL[0] = (xAvlBR - (xCb + cbWidth - 1)) << 4
と補正する。これにより、xRefBR=xAvlBRとなるので、参照位置を補正できる。
【０２００】
続いて、参照ブロックのy方向の参照位置が、参照可能領域の右下より大きいか否かを判定する（Ｓ６０１０）。判定が偽ならば（Ｓ６０１０：ＮＯ）、処理を終了する。一方、判定が真ならば（Ｓ６０１０：ＹＥＳ）、参照可能領域の右下に合わせてy方向の参照位置を補正する（Ｓ６０１１）。
【０２０１】
いま、参照ブロックr5が６０４１に位置していたとすると、y方向の参照位置が、参照可能領域の右下より大きい（Ｓ６０１０：ＹＥＳ）。よって、yRefBR=yAvlBRとして６０４２の位置に参照位置を補正する（Ｓ６０１１）。ここで、Ｓ６００１にあるようにyRefBR=yRefTL+cbHeight-1、つまりyRefTL=yRefBR-(cbHeight-1)であるから、yRefBRを補正したことに伴ってyRefTLも補正されることになる。この参照位置の補正において、ブロックベクトルmvL[1]を補正しても良い。つまり、
mvL[1] = (yAvlBR - (yCb + cbHeitght - 1)) << 4
と補正する。これにより、yRefBR=yAvlBRとなるので、参照位置を補正できる。
【０２０２】
ここで、参照ブロックr1が６０５１に位置している場合について説明する。この場合は、参照ブロックがr2の場合と同様に、x方向の参照位置を補正する。さらに、参照ブロックがr4の場合と同様に、y方向の参照位置を補正する。その結果、参照ブロックr1は、参照可能領域の内部である６０５２に位置する。
【０２０３】
参照ブロックr3が６０６１に位置している場合、参照ブロックr6が６０６２に位置している場合、参照ブロックr8が６０６３に位置している場合は、上記と同様にx,y各方向の参照位置を補正する。その結果、それぞれの参照ブロックは、参照可能領域の内部に位置する。
【０２０４】
以上により、CTUの大きさが128x128画素でない場合の処理は終了する。一方、CTUの大きさが128x128画素の場合（Ｓ６００２：YES）、参照可能領域を矩形状とした場合の左上および右下の位置を算出する（Ｓ６０１２）。
【０２０５】
図５０は、参照可能領域を矩形状とした場合の左上および右下の位置を説明する図である。図５０Ａの場合、処理対象の符号化ツリーブロック６１０１は４分割されており、その分割の左上に処理対象の符号化ブロック６１０２が位置している。このとき、参照可能領域は６１０３内の斜線部のように逆Ｌ字形となる。参照可能領域を矩形状とした場合、その範囲は６１０３の矩形状の範囲とする。参照可能領域を矩形状とした場合、参照ブロックの左上を( xRefTL, yRefTL )、右下を( xRefBR, yRefBR )とすると、
offset[4] = {0, 64, 128, 128}
NL = -offset[3 - blk_idx], NR = offset[blk_idx]
( xAvlTL, yAvlTL ) = ( (xCb >> CtbLog2SizeY) << CtbLog2SizeY + NL,
(yCb >> CtbLog2SizeY) << CtbLog2SizeY )
( xAvlBR, yAvlBR ) = ( ((xCb >> CtbLog2SizeY) << CtbLog2SizeY) - 1 + NR,
(((yCb >> CtbLog2SizeY) + 1) << CtbLog2SizeY) - 1 )
となる。ここで、blk_idxは、処理対象の符号化ブロックの位置を示すインデックスである。処理対象の符号化ツリーブロックを４分割したうち、処理対象の符号化ブロックが左上に位置している場合は、blk_idx=0とする。同様に、処理対象の符号化ブロックがそれぞれ右上、左下、右下に位置している場合は、blk_idxは1,2,3とする。図５０Ａはblk_idx=0の場合を示す図である。同様に、図５０Ｂから図５０Ｄは、それぞれblk_idx=1から3の場合を示す図である。
【０２０６】
次に、参照可能領域が矩形でない部分の参照位置を補正する（Ｓ６０１３）。図５１は、参照可能領域が矩形でない部分の参照位置を補正する処理を説明するフローチャートである。まず、参照可能領域の左上の位置を算出する（Ｓ６０２１）。参照可能領域は図５０の斜線部なので、blk_idx=3の場合を除いて、左上の位置は６１１１と６１１２の2点ある。それぞれ(X1, Y1),(X2, Y2)とすると、
offset[4] = {64, 128, 64, 0}, NL = offset[blk_idx]
(X1, Y1) = (xAvlTL, yAvlTL + 64)
(X2, Y2) = (xAvlTL + NL, yAvlTL)
となる。
【０２０７】
次に、参照可能領域の左上に合わせて参照位置を補正するか否かを判定する（Ｓ６０２２）。この判定では、blk_idx=3でなく、かつ参照ブロックがX2とY1より小さい領域に位置している場合に真と判定する（Ｓ６０２２：ＹＥＳ）。偽の場合（Ｓ６０２２：ＮＯ）、次の処理（Ｓ６０２６）に進む。
【０２０８】
次に、参照ブロックと参照可能領域のx方向との差分が、参照ブロックと参照可能領域のy方向との差分より小さいか否かを判定する（Ｓ６０２３）。判定が真の場合（Ｓ６０２３：ＹＥＳ）、x方向の参照位置を補正する（Ｓ６０２４）。一方、判定が偽の場合（Ｓ６０２３：ＮＯ）、y方向の参照位置を補正する（Ｓ６０２５）。
【０２０９】
図５２Ａは、Ｓ６０２４とＳ６０２５において、参照位置を補正する様子を示す図である。いま、blk_idx=0である。参照ブロックr1が６２０１に位置していたとすると、blk_idx=3でなく、かつ参照ブロックの左上がX2（６１１２のx方向）とY1（６１１１のy方向）より小さい領域に位置している（Ｓ６０２２：ＹＥＳ）。また、参照ブロックと参照可能領域のx方向との差分が、参照ブロックと参照可能領域のy方向との差分より小さい（Ｓ６０２３：ＹＥＳ）。よって、xRefTL=xAvlTL+NLとして６２０２の位置にx方向の参照位置を補正する（Ｓ６０２４）。ここで、Ｓ６００１にあるようにxRefBR=xRefTL+cbWidth-1であるから、xRefTLを補正したことに伴ってxRefBRも補正されることになる。この参照位置の補正において、ブロックベクトルmvL[0]を補正しても良い。つまり、
mvL[0] = (xAvlTL + NL - xCb) << 4
と補正する。これにより、xRefTL=xAvlTL+NLとなるので、参照位置を補正できる。
【０２１０】
一方、参照ブロックr2が６２０３に位置していたとすると、blk_idx=3でなく、かつ参照ブロックの左上がX2（６１１２のx方向）とY1（６１１１のy方向）より小さい領域に位置している（Ｓ６０２２：ＹＥＳ）。また、参照ブロックと参照可能領域のx方向との差分が、参照ブロックと参照可能領域のy方向との差分より小さくない（Ｓ６０２３：ＮＯ）。よって、yRefTL=yAvlTL+64として６２０４の位置にy方向の参照位置を補正する（Ｓ６０２５）。ここで、Ｓ６００１にあるようにyRefBR=yRefTL+cbHeight-1であるから、yRefTLを補正したことに伴ってyRefBRも補正されることになる。この参照位置の補正において、ブロックベクトルmvL[0]を補正しても良い。つまり、
mvL[1] = (yAvlTL + 64 - yCb) << 4
と補正する。これにより、yRefTL=yAvlTL+64となるので、参照位置を補正できる。
【０２１１】
ここで、参照ブロックr3が６２０５に位置していたとする。この場合、参照ブロックと参照可能領域のx方向との差分が、参照ブロックと参照可能領域のy方向との差分より小さい（Ｓ６０２３：ＹＥＳ）。よって、参照ブロックr1と同様にx方向の参照位置を補正することで、６２０６に位置する（Ｓ６０２４）。この時点において、参照ブロックは参照可能領域の外側である。しかし、後述のＳ６００６とＳ６００７の処理により、y方向の参照位置を補正する。結局、参照ブロックは、参照可能領域の内側となる。
【０２１２】
続いて、参照可能領域の右下の位置を算出する（Ｓ６０２６）。参照可能領域は図５０の斜線部なので、blk_idx=0の場合を除いて、右下の位置は６１１３と６１１４の2点ある。それぞれ(X3, Y3),(X4, Y4)とすると、
offset[4] = {0, 64, 128, 64}, NR = offset[blk_idx]
(X3, Y3) = (xAvlBR, yAvlBR - 64)
(X4, Y4) = (xAvlBR - NR, yAvlBR)
となる。
【０２１３】
次に、参照可能領域の右下に合わせて参照位置を補正するか否かを判定する（Ｓ６０２７）。この判定では、blk_idx=0でなく、かつ参照ブロックがX4とY3より大きい領域に位置している場合に真と判定する（Ｓ６０２７：ＹＥＳ）。偽の場合（Ｓ６０２７：ＮＯ）、処理を終了する。
【０２１４】
次に、参照ブロックと参照可能領域のx方向との差分が、参照ブロックと参照可能領域のy方向との差分より小さいか否かを判定する（Ｓ６０２８）。判定が真の場合（Ｓ６０２８：ＹＥＳ）、x方向の参照位置を補正する（Ｓ６０２９）。一方、判定が偽の場合（Ｓ６０２８：ＮＯ）、y方向の参照位置を補正する（Ｓ６０３０）。
【０２１５】
図５２Ｂは、Ｓ６０２９とＳ６０３０において、参照位置を補正する様子を示す図である。いま、blk_idx=3である。参照ブロックr1が６２１１に位置していたとすると、blk_idx=0でなく、かつ参照ブロックの右下がX4（６１１４のx方向）とY3（６１１３のy方向）より大きい領域に位置している（Ｓ６０２７：ＹＥＳ）。また、参照ブロックと参照可能領域のx方向との差分が、参照ブロックと参照可能領域のy方向との差分より小さい（Ｓ６０２８：ＹＥＳ）。よって、xRefBR=xAvlBRとして６２１２の位置にx方向の参照位置を補正する（Ｓ６０２９）。ここで、Ｓ６００１にあるようにxRefBR=xRefTL+cbWidth-1、つまりxRefTL=xRefBR-(cbWidth-1)であるから、xRefBRを補正したことに伴ってxRefTLも補正されることになる。この参照位置の補正において、ブロックベクトルmvL[0]を補正しても良い。つまり、
mvL[0] = (xAvlBR - NR - (xCb + cbWitdh - 1)) << 4
と補正する。これにより、xRefBR=xAvlBRとなるので、参照位置を補正できる。
【０２１６】
一方、参照ブロックr2が６２１３に位置していたとすると、blk_idx=0でなく、かつ参照ブロックの右下がX4（６１１４のx方向）とY3（６１１３のy方向）より大きい領域に位置している（Ｓ６０２７：ＹＥＳ）。また、参照ブロックと参照可能領域のx方向との差分が、参照ブロックと参照可能領域のy方向との差分より小さくない（Ｓ６０２８：ＮＯ）。よって、yRefBR=yAvlBRとして６２１４の位置にy方向の参照位置を補正する（Ｓ６０３０）。ここで、Ｓ６００１にあるようにyRefBR=yRefTL+cbHeight-1、つまりyRefTL=yRefBR-(cbHeight-1)であるから、yRefBRを補正したことに伴ってyRefTLも補正されることになる。この参照位置の補正において、ブロックベクトルmvL[1]を補正しても良い。つまり、
mvL[1] = (yAvlBR - 64 - (yCb + cbHeight - 1)) << 4
と補正する。これにより、yRefBR=yAvlBRとなるので、参照位置を補正できる。
【０２１７】
ここで、参照ブロックr3が６２１５に位置していたとする。この場合、参照ブロックと参照可能領域のx方向との差分が、参照ブロックと参照可能領域のy方向との差分より小さくない（Ｓ６０２８：ＮＯ）。よって、参照ブロックr2と同様にy方向の参照位置を補正することで、６２１６に位置する（Ｓ６０３０）。この時点において、参照ブロックは参照可能領域の外側である。しかし、後述のＳ６００８とＳ６００９の処理により、x方向の参照位置を補正する。結局、参照ブロックは、参照可能領域の内側となる。
【０２１８】
図５２では、blk_idx=0と3の場合を例に参照位置を補正する処理を説明した。blk_idx=1や2の場合、blk_idx=0と3の場合と同様に参照位置を補正する処理をする。
【０２１９】
参照可能領域が矩形でない部分の参照位置を補正する処理（Ｓ６０１３）の後、Ｓ６００４からＳ６０１１の処理をする。以上により、CTUの大きさが128x128画素の場合の処理は終了する。
【０２２０】
いま、参照可能領域が矩形でない部分の参照位置を補正する処理（Ｓ６０１３）において、参照可能領域の左上に合わせてx方向の参照位置を補正する処理（Ｓ６０２４）をしたとする。すると、参照ブロックのx方向の参照位置が、参照可能領域の左上より小さくなることはないので、Ｓ６００４の判定は常に偽（Ｓ６００４：ＮＯ）となる。従って、Ｓ６０２４の処理をした場合は、Ｓ６００４とＳ６００５の処理をしないようにしても良い。同様に、Ｓ６０２５の処理をした場合はＳ６００６とＳ６００７の処理をしないようにしても良いし、Ｓ６０２９の処理をした場合はＳ６００８とＳ６００９の処理をしないようにしても良いし、Ｓ６０３０の処理をした場合はＳ６０１０とＳ６０１１の処理をしないようにしても良い。
【０２２１】
また、図５１のフローチャートにおいて、ステップＳ６０２３の比較処理を省略し、常にステップＳ６０２４を実行するような構成を取っても良いし、常にステップＳ６０２５を実行するような構成を取っても良い。同様に、ステップＳ６０２８の比較処理を省略し、常にステップＳ６０２９を実行するような構成を取っても良いし、常にステップＳ６０３０を実行するような構成を取っても良い。そのような構成においては、簡便な処理で参照位置を補正することが可能となる。
【０２２２】
図４８では、CTUの大きさが128x128画素の場合において、Ｓ６０１２、Ｓ６０１３およびＳ６００４からＳ６０１１の処理を用いて参照位置を補正している。これに代わり、図５３のように、参照可能領域を２つに分解し、それぞれの参照位置を補正する処理（Ｓ６１０１）によっても実現出来る。
【０２２３】
図５４は、参照可能領域を２つに分解する様子を説明する図である。図５０において参照可能領域を矩形状としているのとは異なり、図５４では参照可能領域を２つに分解している。処理対象の符号化ツリーブロック（６１０１）を４分割したうち、処理対象の符号化ブロック（６１０２）が左上に位置している場合は、blk_idx=0とする。同様に、処理対象の符号化ブロックがそれぞれ右上、左下、右下に位置している場合は、blk_idxは1,2,3とする。図５４Ａはblk_idx=0の場合を示す図である。同様に、図５４Ｂから図５４Ｄは、それぞれblk_idx=1から3の場合を示す図である。また、一方の参照可能領域（６３０１）を参照可能領域Ａとし、他方の参照可能領域（６３０２）を参照可能領域Ｂとする。
【０２２４】
図５５は、参照可能領域を２つに分解し、それぞれの参照位置を補正する処理（Ｓ６１０１）を説明するフローチャートである。図５５において、図４８と同じ処理には同じステップ番号を付し、説明を省略する。まず、参照可能領域Ａの左上および右下の位置を算出する（Ｓ６１１１）。参照可能領域Ａの左上を( xAvlTL, yAvlTL )、右下を( xAvlBR, yAvlBR )とすると、
xOffsetTL[4] = {-128, -128, -64, 0}, yOffsetTL[4] = {64, 64, 64, 0}
xOffsetBR[4] = {0, 0, 0, 128}, yOffsetBR[4] = {128, 128, 128, 64}
( xAvlTL, yAvlTL ) = ( (xCb >> CtbLog2SizeY) << CtbLog2SizeY
+ xOffsetTL[blk_idx],
(yCb >> CtbLog2SizeY) << CtbLog2SizeY + yOffsetTL[blk_idx])
( xAvlBR, yAvlBR ) = ( ((xCb >> CtbLog2SizeY) << CtbLog2SizeY) - 1
+ xOffsetBR[blk_idx],
(((yCb >> CtbLog2SizeY) + 1) << CtbLog2SizeY) - 1 + yOffsetBR[blk_idx] )となる。
【０２２５】
次に、参照ブロックが参照可能領域Ａの外部か否かについて、
out_xRefTL = xRefTL < xAvlTL
out_yRefTL = yRefTL < yAvlTL
out_xRefBR = xRefBR > xAvlBR
out_yRefBR = yRefBR > yAvlBR
として算出する（Ｓ６１１２）。
【０２２６】
次に、参照可能領域Ｂの左上および右下の位置を算出する（Ｓ６１１３）。参照可能領域Ｂの左上を( xAvlTL, yAvlTL )、右下を( xAvlBR, yAvlBR )とすると、
xOffsetTL[4] = {-64, 0, 0, 0}, yOffsetTL[4] = {0, 0, 0, 0}
xOffsetBR[4] = {0, 64, 128, 64}, yOffsetBR[4] = {128, 64, 64, 128}
( xAvlTL, yAvlTL ) = ( (xCb >> CtbLog2SizeY) << CtbLog2SizeY
+ xOffsetTL[blk_idx],
(yCb >> CtbLog2SizeY) << CtbLog2SizeY + yOffsetTL[blk_idx])
( xAvlBR, yAvlBR ) = ( ((xCb >> CtbLog2SizeY) << CtbLog2SizeY) - 1
+ xOffsetBR[blk_idx],
(((yCb >> CtbLog2SizeY) + 1) << CtbLog2SizeY) - 1 + yOffsetBR[blk_idx] )
となる。
【０２２７】
次に、参照ブロックのx方向の参照位置が参照可能領域Ａの左上より小さく、かつ参照ブロックのx方向の参照位置が参照可能領域Ｂの左上より小さいか否かを判定する（Ｓ６１１４）。判定が偽ならば（Ｓ６１１４：ＮＯ）、次の処理（Ｓ６１１６）に進む。一方、判定が真ならば（Ｓ６１１４：ＹＥＳ）、参照可能領域Ｂの左上に合わせてx方向の参照位置を補正する（Ｓ６００５）。Ｓ６００５の処理はすでに説明しているため、説明を省略する。
【０２２８】
続いて、参照ブロックのy方向の参照位置が参照可能領域Ａの左上より小さく、かつ参照ブロックのy方向の参照位置が参照可能領域Ｂの左上より小さいか否かを判定する（Ｓ６１１６）。判定が偽ならば（Ｓ６１１６：ＮＯ）、次の処理（Ｓ６１１８）に進む。一方、判定が真ならば（Ｓ６１１６：ＹＥＳ）、参照可能領域Ｂの左上に合わせてy方向の参照位置を補正する（Ｓ６００７）。Ｓ６００７の処理はすでに説明しているため、説明を省略する。
【０２２９】
次に、参照ブロックのx方向の参照位置が参照可能領域Ａの右下より大きく、かつ参照ブロックのx方向の参照位置が参照可能領域Ｂの右下より大きいか否かを判定する（Ｓ６１１８）。判定が偽ならば（Ｓ６１１８：ＮＯ）、次の処理（Ｓ６１２０）に進む。一方、判定が真ならば（Ｓ６１１８：ＹＥＳ）、参照可能領域Ｂの右下に合わせてx方向の参照位置を補正する（Ｓ６００９）。Ｓ６００９の処理はすでに説明しているため、説明を省略する。
【０２３０】
次に、参照ブロックのy方向の参照位置が参照可能領域Ａの右下より大きく、かつ参照ブロックのy方向の参照位置が参照可能領域Ｂの右下より大きいか否かを判定する（Ｓ６１２０）。判定が偽ならば（Ｓ６１２０：ＮＯ）、処理を終了する。一方、判定が真ならば（Ｓ６１２０：ＹＥＳ）、参照可能領域Ｂの右下に合わせてy方向の参照位置を補正する（Ｓ６０１１）。Ｓ６０１１の処理はすでに説明しているため、説明を省略する。
【０２３１】
以上により、CTUの大きさが128x128画素の場合において、参照ブロックが参照可能領域の外部に位置していたとしても、参照位置を補正して参照可能となる。また、参照可能領域を２つに分解してそれぞれの参照位置を補正することで、処理を簡易化して演算量を削減することが出来る。ここでは、一方の参照可能領域（６３０１）を参照可能領域Ａとし、他方の参照可能領域（６３０２）を参照可能領域Ｂとしている。代わりに、参照可能領域Ａと参照可能領域Ｂを入れ替えて、一方の参照可能領域（６３０１）を参照可能領域Ｂとし、他方の参照可能領域（６３０２）を参照可能領域Ａとして処理しても良い。
【０２３２】
本実施例では、CTUの大きさが128x128画素か否かを判定し（Ｓ６００２）、処理を切り替えている。これは、イントラブロックコピー基準ブロックが、符号化ツリーブロックを４分割した単位か否か判定するようにしても良いし、CTUの大きさが符号化ブロックの最大サイズより大きいか否かを判定するようにしても良い。
【０２３３】
以上に述べた全ての実施の形態は、複数を組み合わせても良い。
【０２３４】
以上に述べた全ての実施の形態において、画像符号化装置が出力するビットストリームは、実施の形態で用いられた符号化方法に応じて復号することができるように特定のデータフォーマットを有している。ビットストリームは、ＨＤＤ、ＳＳＤ、フラッシュメモリ、光ディスク等のコンピュータ等で読み解き可能な記録媒体に記録して提供しても良いし、有線あるいは無線のネットワークを通してサーバから提供しても良い。従って、この画像符号化装置に対応する画像復号装置は、提供手段によらず、この特定のデータフォーマットのビットストリームを復号することができる。
【０２３５】
画像符号化装置と画像復号装置の間でビットストリームをやりとりするために、有線または無線のネットワークが用いられる場合、通信路の伝送形態に適したデータ形式にビットストリームを変換して伝送してもよい。その場合、画像符号化装置が出力するビットストリームを通信路の伝送形態に適したデータ形式の符号化データに変換してネットワークに送信する送信装置と、ネットワークから符号化データを受信してビットストリームに復元して画像復号装置に供給する受信装置とが設けられる。送信装置は、画像符号化装置が出力するビットストリームをバッファするメモリと、ビットストリームをパケット化するパケット処理部と、ネットワークを介してパケット化された符号化データを送信する送信部とを含む。受信装置は、ネットワークを介してパケット化された符号化データを受信する受信部と、受信された符号化データをバッファするメモリと、符号化データをパケット処理してビットストリームを生成し、画像復号装置に提供するパケット処理部とを含む。
【０２３６】
画像符号化装置と画像復号装置の間でビットストリームをやりとりするために、有線または無線のネットワークが用いられる場合、送信装置、受信装置に加え、さらに、送信装置が送信する符号化データを受信し、受信装置に供給する中継装置が設けられても良い。中継装置は、送信装置が送信するパケット化された符号化データを受信する受信部と、受信された符号化データをバッファするメモリと、パケットされた符号化データとネットワークに送信する送信部とを含む。さらに、中継装置は、パケット化された符号化データをパケット処理してビットストリームを生成する受信パケット処理部と、ビットストリームを蓄積する記録媒体と、ビットストリームをパケット化する送信パケット処理部を含んでも良い。
【０２３７】
また、画像復号装置で復号された画像を表示する表示部を構成に追加することで、表示装置としても良い。その場合、表示部は、復号画像信号重畳部２０７により生成され、復号画像メモリ２０８に格納された復号画像信号を読み出して画面に表示する。
【０２３８】
また、撮像部を構成に追加し、撮像した画像を画像符号化装置に入力することで、撮像装置としても良い。その場合、撮像部は、撮像した画像信号をブロック分割部１０１に入力する。
【０２３９】
図３７に、本実施の形態の符号化復号装置のハードウェア構成の一例を示す。符号化復号装置は、本発明の実施の形態に係る画像符号化装置、および画像復号装置の構成を包含する。係る符号化復号装置９０００は、ＣＰＵ９００１、コーデックＩＣ９００２、Ｉ／Ｏインターフェース９００３、メモリ９００４、光学ディスクドライブ９００５、ネットワークインターフェース９００６、ビデオインターフェース９００９を有し、各部はバス９０１０により接続される。
【０２４０】
画像符号化部９００７と画像復号部９００８は、典型的にはコーデックＩＣ９００２として実装される。本発明の実施の形態に係る画像符号化装置の画像符号化処理は、画像符号化部９００７により実行され、本発明の実施の形態に係る画像復号装置における画像復号処理は、画像復号部９００８により実行される。Ｉ／Ｏインターフェース９００３は、例えばＵＳＢインターフェースにより実現され、外部のキーボード９１０４、マウス９１０５等と接続する。ＣＰＵ９００１は、Ｉ／Ｏインターフェース９００３を介して入力したユーザー操作に基づき、ユーザーの所望する動作を実行するように符号化復号装置９０００を制御する。キーボード９１０４、マウス９１０５等によるユーザーの操作としては、符号化、復号のどちらの機能を実行するかの選択、符号化品質の設定、ビットストリームの入出力先、画像の入出力先等がある。
【０２４１】
ユーザーがディスク記録媒体９１００に記録された画像を再生する操作を所望する場合、光学ディスクドライブ９００５は、挿入されたディスク記録媒体９１００からビットストリームを読出し、読み出したビットストリームを、バス９０１０を介してコーデックＩＣ９００２の画像復号部９００８に送る。画像復号部９００８は入力したビットストリームに対して本発明の実施の形態に係る画像復号装置における画像復号処理を実行し、復号画像を、ビデオインターフェース９００９を介して外部のモニタ９１０３へ送る。また、符号化復号装置９０００は、ネットワークインターフェース９００６を有し、ネットワーク９１０１を介して、外部の配信サーバ９１０６や、携帯端末９１０７と接続可能である。ユーザーがディスク記録媒体９１００に記録された画像に変えて、配信サーバ９１０６や携帯端末９１０７に記録された画像を再生することを所望する場合は、ネットワークインターフェース９００６は、入力されたディスク記録媒体９１００からビットストリームを読出すことに変えて、ネットワーク９１０１よりビットストリームを取得する。また、ユーザーがメモリ９００４に記録された画像を再生することを所望する場合は、メモリ９００４に記録されたビットストリームに対して、本発明の実施の形態に係る画像復号装置における画像復号処理を実行する。
【０２４２】
ユーザーが外部のカメラ９１０２で撮像した画像を符号化しメモリ９００４に記録する操作を所望する場合、ビデオインターフェース９００９は、カメラ９１０２から画像を入力し、バス９０１０を介し、コーデックＩＣ９００２の画像符号化部９００７に送る。画像符号化部９００７は、ビデオインターフェース９００９を介して入力した画像に対して本発明の実施の形態に係る画像符号化装置における画像符号化処理を実行し、ビットストリームを作成する。そしてビットストリームを、バス９０１０を介し、メモリ９００４へ送る。ユーザーがメモリ９００４に変えて、ディスク記録媒体９１００にビットストリームを記録することを所望する場合は、光学ディスクドライブ９００５は、挿入されたディスク記録媒体９１００に対しビットストリームの書き出しを行う。
【０２４３】
画像符号化装置を有し画像復号装置を有さないハードウェア構成や、画像復号装置を有し画像符号化装置を有さないハードウェア構成を実現することも可能である。そのようなハードウェア構成は、例えばコーデックＩＣ９００２が、画像符号化部９００７、または画像復号部９００８にそれぞれ置き換わることにより実現される。
【０２４４】
以上の符号化及び復号に関する処理は、ハードウェアを用いた伝送、蓄積、受信装置として実現しても良いのは勿論のこと、ＲＯＭ（リード・オンリー・メモリ）やフラッシュメモリ等に記憶されているファームウェアや、コンピュータ等のソフトウェアによって実現しても良い。そのファームウェアプログラム、ソフトウェアプログラムをコンピュータ等で読み取り可能な記録媒体に記録して提供しても良いし、有線あるいは無線のネットワークを通してサーバから提供しても良いし、地上波あるいは衛星ディジタル放送のデータ放送として提供しても良い。
【０２４５】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組み合わせにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【産業上の利用可能性】
【０２４６】
本発明は、画像をブロックに分割して予測を行う画像符号化及び復号技術に利用できる。
【符号の説明】
【０２４７】
１００  画像符号化装置、  １０１  ブロック分割部、  １０２  インター予測部、  １０３  イントラ予測部、１０４  復号画像メモリ、  １０５  予測方法決定部、  １０６  残差生成部、  １０７  直交変換・量子化部、  １０８  ビット列符号化部、  １０９  逆量子化・逆直交変換部、  １１０  復号画像信号重畳部、  １１１  符号化情報格納メモリ、  ２００  画像復号装置、  ２０１  ビット列復号部、  ２０２  ブロック分割部、  ２０３  インター予測部、  ２０４  イントラ予測部、  ２０５  符号化情報格納メモリ、  ２０６  逆量子化・逆直交変換部、  ２０７  復号画像信号重畳部、  ２０８  復号画像メモリ。
【図１】
0006958768.tif 000002
【図２】
0006958768.tif 000003
【図３】
0006958768.tif 000004
【図４】
0006958768.tif 000005
【図５】
0006958768.tif 000006
【図６Ａ】
0006958768.tif 000007
【図６Ｂ】
0006958768.tif 000008
【図６Ｃ】
0006958768.tif 000009
【図６Ｄ】
0006958768.tif 000010
【図６Ｅ】
0006958768.tif 000011
【図７】
0006958768.tif 000012
【図８】
0006958768.tif 000013
【図９】
0006958768.tif 000014
【図１０Ａ】
0006958768.tif 000015
【図１０Ｂ】
0006958768.tif 000016
【図１１】
0006958768.tif 000017
【図１２Ａ】
0006958768.tif 000018
【図１２Ｂ】
0006958768.tif 000019
【図１３】
0006958768.tif 000020
【図１４】
0006958768.tif 000021
【図１５】
0006958768.tif 000022
【図１６】
0006958768.tif 000023
【図１７】
0006958768.tif 000024
【図１８】
0006958768.tif 000025
【図１９】
0006958768.tif 000026
【図２０】
0006958768.tif 000027
【図２１】
0006958768.tif 000028
【図２２】
0006958768.tif 000029
【図２３】
0006958768.tif 000030
【図２４】
0006958768.tif 000031
【図２５】
0006958768.tif 000032
【図２６】
0006958768.tif 000033
【図２７】
0006958768.tif 000034
【図２８】
0006958768.tif 000035
【図２９】
0006958768.tif 000036
【図３０】
0006958768.tif 000037
【図３１Ａ】
0006958768.tif 000038
【図３１Ｂ】
0006958768.tif 000039
【図３１Ｃ】
0006958768.tif 000040
【図３２】
0006958768.tif 000041
【図３３】
0006958768.tif 000042
【図３４】
0006958768.tif 000043
【図３５】
0006958768.tif 000044
【図３６】
0006958768.tif 000045
【図３７】
0006958768.tif 000046
【図３８】
0006958768.tif 000047
【図３９Ａ】
0006958768.tif 000048
【図３９Ｂ】
0006958768.tif 000049
【図４０】
0006958768.tif 000050
【図４１】
0006958768.tif 000051
【図４２】
0006958768.tif 000052
【図４３】
0006958768.tif 000053
【図４４】
0006958768.tif 000054
【図４５】
0006958768.tif 000055
【図４６】
0006958768.tif 000056
【図４７】
0006958768.tif 000057
【図４８】
0006958768.tif 000058
【図４９】
0006958768.tif 000059
【図５０Ａ】
0006958768.tif 000060
【図５０Ｂ】
0006958768.tif 000061
【図５０Ｃ】
0006958768.tif 000062
【図５０Ｄ】
0006958768.tif 000063
【図５１】
0006958768.tif 000064
【図５２Ａ】
0006958768.tif 000065
【図５２Ｂ】
0006958768.tif 000066
【図５３】
0006958768.tif 000067
【図５４Ａ】
0006958768.tif 000068
【図５４Ｂ】
0006958768.tif 000069
【図５４Ｃ】
0006958768.tif 000070
【図５４Ｄ】
0006958768.tif 000071
【図５５】
0006958768.tif 000072