(57)【要約】【課題】画像の解像度が増加した場合でも、内部メモリの容量を増加させることなく、参照領域の効率的な読み出しと、動きベクトルの検出精度の低下抑制とを実現可能な動きベクトル検出装置およびその制御方法を提供する。【解決手段】動きベクトルを検出する対象画像の水平解像度が閾値以上と判定されない場合には、対象画像を１つの領域として、領域に含まれるブロックについて所定の順序で動きベクトルを検出する。対象画像の水平解像度が閾値以上と判定された場合には、対象画像を水平方向に分割した複数の領域ごとに、領域に含まれるブロックについて所定の順序で動きベクトルを検出するように、対象ブロックの処理順序を変更する。【選択図】図１
2018032949.tif 000002
【特許請求の範囲】
【請求項１】
対象画像を水平および垂直方向に分割したブロックのうち、動きベクトルを検出する対象ブロックのデータを格納する第１の格納手段と、
参照画像のうち、前記対象ブロックに対する動きベクトルを探索する探索範囲のデータを格納する第２の格納手段と、
前記探索範囲において前記対象ブロックと類似した領域を探索することにより、前記対象ブロックの動きベクトルを検出する検出手段と、
前記対象画像の水平解像度が閾値以上か否かを判定する判定手段と、
制御手段であって、
前記水平解像度が前記閾値以上と判定されない場合には、前記対象画像を１つの領域として、領域に含まれるブロックについて所定の順序で動きベクトルが検出されるように前記対象ブロックを前記第１の格納手段に格納し、
前記水平解像度が前記閾値以上と判定された場合には、前記対象画像を水平方向に分割した複数の領域ごとに、領域に含まれるブロックについて前記所定の順序で動きベクトルが検出されるように前記対象ブロックを前記第１の格納手段に格納する、
制御手段と、
を有することを特徴とする動きベクトル検出装置。
【請求項２】
前記水平解像度が第１の値である場合よりも、前記第１の値より大きい第２の値である場合の方が、前記複数の領域の数が多いことを特徴とする請求項１に記載の動きベクトル検出装置。
【請求項３】
前記検出手段および前記制御手段は、前記水平解像度が前記閾値以上と判定された場合と判定されない場合とで、前記第２の格納手段の管理方法を異ならせることを特徴とする請求項１または請求項２に記載の動きベクトル検出装置。
【請求項４】
前記検出手段および前記制御手段は、前記第２の格納手段をラインバッファとして管理し、前記水平解像度が前記閾値以上と判定された場合と判定されない場合とで、水平解像度が異なるラインバッファとして前記第２の格納手段を管理することを特徴とする請求項３に記載の動きベクトル検出装置。
【請求項５】
前記検出手段および前記制御手段は、前記水平解像度が前記閾値以上と判定されない場合には、前記対象画像と等しい水平解像度を有するラインバッファとして前記第２の格納手段を管理することを特徴とする請求項４に記載の動きベクトル検出装置。
【請求項６】
前記検出手段および前記制御手段は、前記水平解像度が前記閾値以上と判定された場合には、前記対象画像よりも少ない水平解像度を有するラインバッファとして前記第２の格納手段を管理することを特徴とする請求項４または請求項５に記載の動きベクトル検出装置。
【請求項７】
前記検出手段および前記制御手段は、前記水平解像度が前記閾値以上と判定された場合も判定されない場合も、等しい垂直解像度を有するラインバッファとして前記第２の格納手段を管理することを特徴とする請求項３から請求項６のいずれか１項に記載の動きベクトル検出装置。
【請求項８】
前記所定の順序がラスタスキャン順であることを特徴とする請求項１から請求項７のいずれか１項に記載の動きベクトル検出装置。
【請求項９】
前記複数の領域が、領域ごとに符号化を独立して実行するために設定された領域であることを特徴とする請求項１から請求項８のいずれか１項に記載の動きベクトル検出装置。
【請求項１０】
対象画像を水平および垂直方向に分割したブロックのうち、動きベクトルを検出する対象ブロックのデータを格納する第１の格納手段と、
参照画像のうち、前記対象ブロックに対する動きベクトルを探索する探索範囲のデータを格納する第２の格納手段と、
前記探索範囲において前記対象ブロックと類似した領域を探索することにより、前記対象ブロックの動きベクトルを検出する検出手段と、
前記対象画像の水平解像度が閾値以上か否かを判定する判定手段と、
前記ブロックをラスタスキャンの順序で前記第１の格納手段に格納する制御手段とを有し、
前記制御手段は、前記水平解像度が前記閾値以上と判定された場合には、前記水平解像度が前記閾値以上と判定されない場合よりも、前記ラスタスキャンのスキャンラインの長さが短くなるような順序で前記ブロックを前記第１の格納手段に格納する、
ことを特徴とする動きベクトル検出装置。
【請求項１１】
前記第２の格納手段に格納されたデータは、以降の動きベクトルの検出に用いられなくなるまで繰り返し用いられることを特徴とする請求項１から請求項９のいずれか１項に記載の動きベクトル検出装置。
【請求項１２】
対象画像を水平および垂直方向に分割したブロックのうち、動きベクトルを検出する対象ブロックのデータを格納する第１の格納手段と、
参照画像のうち、前記対象ブロックに対する動きベクトルを探索する探索範囲のデータを格納する第２の格納手段と、
前記探索範囲において前記対象ブロックと類似した領域を探索することにより、前記対象ブロックの動きベクトルを検出する検出手段と、
制御手段と、を有する動きベクトル検出装置の制御方法であって、
前記対象画像の水平解像度が閾値以上と判定されない場合、前記制御手段が、前記対象画像を１つの領域として、領域に含まれるブロックについて所定の順序で動きベクトルが検出されるように前記対象ブロックを前記第１の格納手段に格納する工程と、
前記水平解像度が前記閾値以上と判定された場合、前記制御手段が、前記対象画像を水平方向に分割した複数の領域ごとに、領域に含まれるブロックについて前記所定の順序で動きベクトルが検出されるように前記対象ブロックを前記第１の格納手段に格納する工程と、
を有することを特徴とする動きベクトル検出装置の制御方法。
【請求項１３】
対象画像を水平および垂直方向に分割したブロックのうち、動きベクトルを検出する対象ブロックのデータを格納する第１の格納手段と、
参照画像のうち、前記対象ブロックに対する動きベクトルを探索する探索範囲のデータを格納する第２の格納手段と、
前記探索範囲において前記対象ブロックと類似した領域を探索することにより、前記対象ブロックの動きベクトルを検出する検出手段と、
制御手段と、を有する動きベクトル検出装置の制御方法であって、
前記制御手段が、前記ブロックをラスタスキャンの順序で前記第１の格納手段に格納する工程を有し、
前記工程は、前記対象画像の水平解像度が閾値以上と判定された場合には、前記水平解像度が前記閾値以上と判定されない場合よりも、前記ラスタスキャンのスキャンラインの長さが短くなるような順序で前記ブロックを前記第１の格納手段に格納する工程を含む、
ことを特徴とする動きベクトル検出装置の制御方法。
【請求項１４】
コンピュータを、請求項１から請求項１１のいずれか１項に記載の動きベクトル検出装置の各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は動きベクトル検出装置およびその制御方法に関する。
【背景技術】
【０００２】
従来、動画像の符号化データ量を効率的に削減するための手法として、動き補償が知られている（非特許文献１）。動き補償には、符号化するフレーム（対象画像）と、予測に用いる参照フレーム（参照画像）との動きの情報が必要であり、動きの情報は通常、動きベクトルと呼ばれる。また、動きベクトルは、撮像装置の像触れ補正や被写体の動き予測、画像合成などにも用いられている。
【０００３】
動きベクトルは一般に、対象画像を分割したブロックをテンプレート画像として用い、参照画像の一部である探索範囲の中でテンプレート画像と相関が最も高い領域を探索するテンプレートマッチングによって、ブロックごとに検出される。探索範囲は例えばテンプレート画像として用いるブロックに対応する参照画像の位置の周辺領域として設定される。
【０００４】
探索範囲は広い方が大きな動きに対応する動きベクトルを検出可能であるが、検出に関する処理負荷が増大する。探索範囲を狭くすると、処理負荷は軽減されるが、探索すべき領域（移動先）が探索範囲に含まれなくなる可能性が増加する。移動先が探索範囲に含まれない場合、動きベクトルは検出できないか、誤った動きベクトルが検出され、符号化効率や画質の低下の原因となる。
【０００５】
このように、探索範囲の大きさは、動きベクトル検出に係る処理負荷や精度に影響を与える重要な要素であり、適切に設定することが求められる。例えば特許文献１では、撮影シーンによって探索範囲の設定を変更することが提案されている。
【０００６】
動きベクトル検出をハードウェア処理で行う場合、外部メモリに記憶されている参照画像のデータから探索範囲のデータを内部メモリに読み込んで、動きベクトルを検出する対象ブロック（テンプレート画像）との相関演算を実行する。
【０００７】
探索範囲は対象ブロックごとに設定されるが、例えば隣接するブロックに対して設定される探索範囲などは、重複部分を有する。対象ブロックが変わるごとに探索範囲のデータを内部メモリに読み込むと、他の探索範囲との重複部分について繰り返し読み込むことになるため、バスの帯域や電力の利用効率が低下する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開2008-236015号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
例えば探索範囲の大きさが全対象ブロックについて共通で、水平方向ｍ画素、垂直方向ｎ画素とする。この場合、内部メモリに参照画像の水平画素ラインのｎライン分を読み込むようにすれば、読み込んだ領域に包含される、水平方向の位置が異なる複数の探索範囲の読み込みを１度で終わらせることができる。
【００１０】
しかし、この構成を採用する場合、参照画像の水平解像度（１水平画素ラインに含まれる画素数）が増加すると、ｎライン分を読み込むために必要な内部メモリの容量を増加させる必要があるが、メモリ容量が不足する場合も考えられる。予め内部メモリの容量を多くしておくことも可能ではあるが、回路規模、消費電力、コストがいずれも増加する。
【００１１】
一方、内部メモリの容量を増加させない場合、参照画像の水平解像度が増加すると、読み込み可能なライン数が減少する。そのため、探索範囲の垂直方向の大きさが減少し、垂直方向における動きベクトルの探索精度が低下する可能性がある。
【００１２】
本発明はこのような従来技術の課題に鑑みなされたものである。本発明の目的は、画像の解像度が増加した場合でも、内部メモリの容量を増加させることなく、参照領域の効率的な読み出しと、動きベクトルの検出精度の低下抑制とを実現可能な動きベクトル検出装置およびその制御方法を提供することにある。
【課題を解決するための手段】
【００１３】
上述の目的は、対象画像を水平および垂直方向に分割したブロックのうち、動きベクトルを検出する対象ブロックのデータを格納する第１の格納手段と、参照画像のうち、対象ブロックに対する動きベクトルを探索する探索範囲のデータを格納する第２の格納手段と、探索範囲において対象ブロックと類似した領域を探索することにより、対象ブロックの動きベクトルを検出する検出手段と、対象画像の水平解像度が閾値以上か否かを判定する判定手段と、制御手段であって、水平解像度が閾値以上と判定されない場合には、対象画像を１つの領域として、領域に含まれるブロックについて所定の順序で動きベクトルが検出されるように対象ブロックを第１の格納手段に格納し、水平解像度が閾値以上と判定された場合には、対象画像を水平方向に分割した複数の領域ごとに、領域に含まれるブロックについて所定の順序で動きベクトルが検出されるように対象ブロックを第１の格納手段に格納する、制御手段と、を有することを特徴とする動きベクトル検出装置によって達成される。
【発明の効果】
【００１４】
本発明によれば、画像の解像度が増加した場合でも、内部メモリの容量を増加させることなく、参照領域の効率的な読み出しと、動きベクトルの検出精度の低下抑制とを実現可能な動きベクトル検出装置およびその制御方法を提供することができる。
【図面の簡単な説明】
【００１５】
【図１】本発明の実施形態に係る動きベクトル検出装置を用いたデジタルカメラの機能構成例を示すブロック図
【図２】実施形態における対象ブロックと探索範囲との例を示す図
【図３】実施形態における対象ブロックと探索範囲との例を示す図
【図４】実施形態における対象ブロックと探索範囲との例を示す図
【図５】実施形態で設定するタイルと探索範囲の例を示す図
【図６】実施形態における対象ブロックと探索範囲との例を示す図
【図７】実施形態で設定するタイルと探索範囲の例を示す図
【図８】実施形態における対象ブロックと探索範囲との例を示す図
【図９】実施形態に係る動きベクトル検出処理に関するフローチャート
【発明を実施するための形態】
【００１６】
以下、図面を参照しながら本発明の例示的な実施形態について詳細に説明する。なお、以下の実施形態においては、本発明に係る動きベクトル検出装置を適用可能な電子機器の一例としてのデジタルカメラに関して説明する。しかしながら、本発明において動画像を撮像したり記録したりするための構成は必須では無い。本発明は記憶装置や通信ネットワークを通じて動画像を取得可能な任意の電子機器に適用可能である。このような電子機器にはデジタルカメラをはじめ、パーソナルコンピュータ、タブレットコンピュータ、携帯電話機、スマートフォン、ＰＤＡ、ゲーム機、ドライブレコーダ、ロボットなどが含まれるが、これらに限定されない。
【００１７】
●（第１実施形態）
図１は本発明の第１実施形態に係る動きベクトル検出装置を適用したデジタルカメラの機能構成例を示すブロック図である。なお、本実施形態では動きベクトルを画像データの符号化に利用するため、図１では符号化に関する機能構成を重点的に示している。しかしながら、表示部、操作部、電源部など、一般的なデジタルカメラが備える構成に関しては、図示の有無にかかわらず本実施形態のデジタルカメラも備えている。
【００１８】
レンズ１０１は被写体の光学像を撮像部１０２の撮像面に形成する撮像光学系である。撮像部１０２は撮像面に形成された光学像を、複数の画素を備える撮像素子によって光電変換し、画像を表す電気信号（画像信号）に変換する。また、撮像部１０２は画像信号をＡ／Ｄ変換し、画像データとして現像処理部１０３に供給する。本実施形態において撮像部１０２は動画像を撮影する。
【００１９】
現像処理部１０３では、ノイズ除去、色補間（デモザイク）、欠陥画素補正、ホワイトバランス調整、ガンマ補正、色調補正、拡大縮小、YCbCr形式への色変換など、予め定められた画像処理を画像データに適用する。なお、現像処理部１０３は、被写体検出やレンズ１０１のオートフォーカス制御や、自動露出制御に用いる評価値の生成など、一般的なデジタルカメラにおいて撮像画像に対して実行する各種の処理を実行することができるが、詳細については省略する。現像処理部１０３は、画像処理後の記録用画像データを符号化回路１２０に供給する。
【００２０】
制御部１００は例えば１つ以上のプログラマブルプロセッサ（以下、単にＣＰＵと呼ぶ）とメモリとを有する。メモリのうち不揮発性のものにはプログラム、各種の設定値、ＧＵＩデータなどが格納されている。ＣＰＵはプログラムをメモリのワークエリアに読み込んで実施し、各部の動作を制御することにより、デジタルカメラの各種機能を実現する。
【００２１】
対象フレームバッファ１０４は、現像処理部１０３が出力する、符号化回路１２０で符号化する画像（対象画像）のデータを一時的に格納する。なお、対象フレームバッファ１０４と、参照画像を格納する参照フレームバッファ１０５（後述）は、符号化回路１２０の外部メモリであるDRAM（Dynamic Random Access Memory）の領域を用いるものとする。
【００２２】
符号化回路１２０は記録用の画像データを予め定められた方式で符号化し、データ量を削減した符号化画像データを生成する。本実施形態において符号化回路１２０は、動き補償予測符号化方式、例えばH.265 またはMPEG-H HEVC (High Efficiency Video Coding、以下単にＨＥＶＣと呼ぶ)に準拠した符号化を実行するものとする。符号化回路１２０は例えばＡＳＩＣ(Application Specific Integrated Circuit)やＦＰＧＡ(Field Programmable Gate Array)などのハードウェア回路である。そして、符号化回路１２０は符号化画像データを格納する画像ファイルを生成し、半導体メモリカードなどの記録メディア１１３に記録する。
【００２３】
制御部１００は、対象フレームバッファ１０４に格納されている対象画像データを、水平および垂直方向に分割したブロック単位で、かつ所定の順序で第１の格納手段である対象ブロックバッファ１０６に格納する。なお、対象ブロックバッファ１０６は、符号化回路１２０の内部メモリであるSRAM（Static Random Access Memory）で構成されているものとする。
【００２４】
制御部１００は、参照フレームバッファ１０５に格納されている参照画像データの一部を、第２の格納手段である参照ラインバッファ１０７に供給する。後述するように、制御部１００は、対象画像の水平解像度に応じて参照ラインバッファ１０７の管理方法を変更する。ここで、管理方法とは、参照ラインバッファの論理的な構成（水平および垂直方向の画素数）である。参照ラインバッファ１０７は、内部メモリであるSRAMで構成されているものとする。後で詳細に説明するように、制御部１００は、動きベクトル検出に用いられる探索範囲のデータを、同じデータを参照フレームバッファ１０５から繰り返し読み出さないように、参照フレームバッファ１０５に供給する画像データの範囲を決定する。
【００２５】
動き予測部１０８は、対象ブロックバッファ１０６に格納されている対象ブロックの画像データと類似した領域を探索範囲で探索する。具体的には動き予測部１０８は、対象ブロックの画像データをテンプレートとして、テンプレートを探索範囲内で１画素ごとにラスタスキャンさせ、各位置でテンプレートと参照画像との類似度（相関）を算出し、探索範囲内で類似度が最も高くなる位置を検出する。そして、動き予測部１０８は、対象画像におけるテンプレートの位置（例えばテンプレートの中心の座標）を起点とし、探索範囲内で検出された位置の、参照画像における座標を終点とするベクトルを、テンプレートの動きベクトルとして検出する。
【００２６】
動き予測部１０８は、検出した位置におけるテンプレートと参照画像との差分画像（予測誤差）を算出し、直交変換部１０９に出力する。また、動き予測部１０８は、ローカルデコード画像作成用に、探索範囲内で最も類似度が高いブロックを予測画像として動き補償部１１６に出力する。
【００２７】
直交変換部１０９は、差分画像に対して直交変換（例えば離散コサイン変換）を適用して変換係数を生成し、変換係数を量子化部１１０に出力する。
量子化部１１０は、量子化制御部１１１が出力する量子化ステップサイズ（または量子化パラメータ）に従い、変換係数を量子化する。量子化部１１０は、量子化した変換係数を、符号化ストリーム作成のために可変長符号化部１１２に出力するとともに、ローカルデコード画像作成のために逆量子化部１１４にも出力する。
【００２８】
可変長符号化部１１２では、量子化された変換係数に対してジグザグスキャン、オルタネートスキャン等を行い、変換係数を可変長符号化する。可変長符号化部１１２はさらに、動きベクトル、量子化ステップサイズ、ブロック分割情報、適応オフセット処理用パラメータなどの符号化情報についても可変長符号化する。そして、可変長符号化部１１２は、可変長符号化した変換係数と符号化情報とから符号化ストリームを生成し、記録メディア１１３に記録する。また可変長符号化部１１２は、ブロックごとの発生符号量を算出して量子化制御部１１１に出力する。
【００２９】
量子化制御部１１１は、可変長符号化部１１２から送られてくる発生符号量と目標符号量とから量子化ステップサイズ（または量子化パラメータ）を決定し、量子化部１１０に出力する。
【００３０】
逆量子化部１１４は、量子化部１１０が出力する変換係数を逆量子化し、ローカルデコード用の変換係数を生成する。逆量子化部１１４は、生成した変換係数を逆直交変換部１１５に出力する。
【００３１】
逆直交変換部１１５では、変換係数に直交変換部が適用した直交変換の逆変換（逆離散コサイン変換）を適用して差分画像を生成する。逆直交変換部１１５は、生成した差分画像を動き補償部１１６に出力する。
【００３２】
動き補償部１１６では、動き予測部１０８からの予測画像と、逆直交変換部１１５からの差分画像とを加算することにより、ローカルデコード用の画像データを生成する。動き補償部１１６は、生成した画像データをデブロッキングフィルタ部１１７に出力する。
【００３３】
デブロッキングフィルタ部１１７は、画像データにデブロッキングフィルタを適用して適応オフセット処理部１１８に出力する。デブロッキングフィルタは、対象ブロックの境界における不連続な歪みを平滑化するためのフィルタである。
【００３４】
適応オフセット処理部１１８は、フィルタ処理後の画像データの各画素を画素値やエッジの状態に応じて分類し、分類に応じたオフセットを加算する。なお、オフセット加算を行わないようにもできる。デブロッキングフィルタ部と適応オフセット処理部とを併せてループ内フィルタと呼ぶこともある。適応オフセット処理は、エッジ付近に発生する擬似輪郭（リンギング歪み）を抑制するための処理である。
【００３５】
適応オフセット処理部１１８の出力は、ローカルデコード画像データとして参照フレームバッファ１０５に格納される。また、適応オフセット処理部１１８は、適応オフセット処理を行ったか否か、どの分類を用いたか、バンド位置、エッジ方向、オフセット値などを適応オフセット処理用のパラメータとして符号化ストリームに含めるために可変長符号化部１１２に出力する。
このような動作により、符号化ストリームおよびローカルデコード画像が作成される。
【００３６】
HEVCにおいては動きベクトル検出処理を含む符号化処理を、CTU(Coding Tree Unit)と呼ぶ画素ブロック単位で、かつラスタスキャン順に実行する。また、対象画像を縦および／または横方向にCTU単位で分割したタイルという概念が導入されており、各タイルは他のタイルと独立した符号化や復号が可能である。タイルが設定されている場合、符号化処理は各タイル内で閉じたラスタスキャン順でタイル内のCTUに実行される。従って、タイルが設定される場合と設定されていない場合とでは、CTUの符号化順序が異なる。
【００３７】
次に、参照ラインバッファ１０７への参照画像の格納方法について説明する。
対象画像の解像度を１９２０×１０８０とし、動きベクトル探索範囲を、対象ブロック（ＣＴＵ）の外方に水平方向±５１２画素、垂直方向に±１２８ライン（画素）とした場合を例に説明する。つまり、対象ブロックが水平方向ｘ画素、垂直方向ｙ画素の大きさとすると、最大の探索範囲は、水平方向に１０２４＋ｘ画素、垂直方向に２５６＋ｙ画素となる。
【００３８】
図２（ａ）は、対象ブロック（以下、CTUと呼ぶ）と、動きベクトルの探索範囲の例を示す。ここで、CTUサイズは３２×３２画素、画像の左上角を原点とし、ラスタスキャン方向を正とするｘｙ座標系において、CTU単位の座標（Ｘ，Ｙ）を有するCTUをCTU（Ｘ，Ｙ）と表現する。従って、Ｘ＝０〜５９、Ｙ＝０〜３３の範囲の値を取り得る。
【００３９】
CTU（０，０）２０１は、対象画像で最初に処理されるCTUである。CTU（０，０）２０１については上および左方向の探索は行わない。そのため、参照画像のうち、動きベクトルの探索範囲２０２は（０，０）と（５４３，１５９）とを対角頂点とする、水平５４４（＝３２＋５１２）画素、垂直１６０（＝３２＋１２８）画素の矩形領域となる。
【００４０】
制御部１００は、CTU（０，０）２０１の符号化が開始する前に、探索範囲２０２の部分画像を参照フレームバッファ１０５から読み出して参照ラインバッファ１０７に格納する。
【００４１】
図２（ｂ）に、CTU（０，０）２０１の次に符号化されるCTU（１，０）３０１を示す。CTU（１，０）３０１に対する動きベクトル探索範囲は、（０，０）と（５７５，１５９）とを対角頂点とする、水平５７６（＝３２＋３２＋５１２）画素、垂直１６０（＝３２＋１２８）画素の矩形領域となる。
【００４２】
ここで、探索範囲のうち、CTU（０，０）の探索範囲２０２は既に参照ラインバッファ１０７に格納されている。そのため、制御部１００はCTU（１，０）３０１の符号化が開始する前に、新たに必要となる（５４４，０）と（５７５，１５９）とを対角頂点とする矩形領域３０３だけを参照フレームバッファ１０５から読み出して参照ラインバッファ１０７に格納する。
【００４３】
図３（ａ）は、CTU（４３，０）４０１を示している。CTU（４３，０）４０１に対する動きベクトル探索範囲４０２の右端は、参照画像の右端に等しい。探索範囲４０２は（８６４，０）と（１９１９，１５９）とを対角頂点とする水平１０５６画素、垂直１６０画素の矩形領域である。
【００４４】
なお、過去に動きベクトル探索領域として用いた（０，０）と（８６３，１５９）を対角頂点とする参照画像の領域４０３は、CTU（４３，０）４０１に対する動きベクトルの探索には用いられない。しかし、次のCTUライン（CTU（Ｘ，１））に対する動きベクトルの探索範囲を含んでいるため、参照ラインバッファ１０７に保持されている。
【００４５】
図３（ｂ）に示す、CTU（０，１）５０１の動きベクトル探索範囲は、（０，０）と（５４３，１９１）とを対角頂点とする矩形領域であるが、そのうち、CTU（０，０）の探索範囲２０２は既に参照ラインバッファ１０７に格納されている。そのため、制御部１００はCTU（０，１）５０１の符号化が開始する前に、新たに必要となる（０，１６０）と（５４３，１９１）とを対角頂点とする矩形領域５０３だけを参照フレームバッファ１０５から読み出して参照ラインバッファ１０７に格納する。
【００４６】
図４（ａ）は、大きさが最大（水平１０５６画素、垂直２８８画素）で、かつ上端と右端が参照画像の上端と右端に達した探索範囲６０２を示している。探索範囲６０２は、CTU（４３，５）６０１に対して設定される。探索範囲６０２は、（８６４，０）と（１９１９，２８７）とを対角頂点とする矩形領域である。
このとき、参照ラインバッファ１０７には、参照画像のうち、（０，０）と（１９１９，２８７）とを対角頂点とする矩形領域が格納されている。
【００４７】
図４（ｂ）に示す、CTU（０，６）７０１の動きベクトル探索範囲は、（０，３１）と（５４３，３１８）とを対角頂点とする矩形領域である。そのうち、CTU（０，５）の探索範囲と重複する、（３１，０）と（５４３，２８７）とを対角頂点とする範囲７０２は既に参照ラインバッファ１０７に格納されている。一方、CTU（０，５）の探索範囲と重複しない、（０，０）と（５４３，３１）とを対角頂点とする範囲を含む範囲７０３は、CTU（０，６）以降のCTUに対する動きベクトル検出で探索範囲として用いられることはない。そのため、制御部１００は、範囲７０３を保持していた参照ラインバッファ１０７の領域の一部に、参照範囲として新たに必要となる矩形領域７０４を格納する。
【００４８】
すなわち、制御部１００はCTU（０，６）７０１の符号化が開始する前に、新たに必要となる（０，２８８）と（５４３，３１９）とを対角頂点とする矩形領域７０４だけを参照フレームバッファ１０５から読み出して参照ラインバッファ１０７に格納する。
【００４９】
参照ラインバッファ１０７は、水平方向サイズが参照画像の水平解像度（ここでは１９２０画素）に等しく、垂直方向サイズが垂直探索範囲（±１２８画素）と垂直CTUサイズ（３２画素）の合計（２８８画素）に等しいラインバッファとして用いられる。
【００５０】
ここで、対象画像の解像度が例えば水平４０９６画素×垂直２１６０画素に増加した場合にも同様に、一度読み出した部分は使用されなくなるまで参照ラインバッファ１０７に保持するとする。この場合、動きベクトルの探索範囲の大きさに変更がなければ、水平４０９６画素、垂直２８８ライン（画素）を格納するための容量が参照ラインバッファ１０７に必要となる。一方、参照ラインバッファ１０７の容量を増やせない場合には、動きベクトルの探索範囲を小さくする必要があり、動きベクトルの探索精度が低下するおそれがある。
【００５１】
対象画像の解像度は今後も増加することが見込まれるが、それを見越して参照ラインバッファ１０７の容量を定めると、回路規模が増大し、コスト、消費電力、実装面積の増加要因となる。また、想定以上の解像度を有する対象画像には対応できない。
【００５２】
そのため、本実施形態においては、対象画像の水平解像度が閾値以上の場合、対象画像を水平方向に（論理的に）分割し、分割領域ごとに、各ブロックに対する動きベクトル検出を行うように動きベクトルの検出順序を変更する。例えば、HEVCにおける動きベクトルの検出であれば、対象画像を水平方向に分割する複数のタイルを設定することで、タイルごとに動きベクトルの検出を行うように変更する。
【００５３】
例えば閾値が２０４８、対象画像の解像度が例えば水平４０９６画素×垂直２１６０画素の場合、制御部１００は例えば図５（ａ）に示すようなタイルを設定する。
ここでは、対象画像を水平方向に２分割したタイル８０１とタイル８０２を設定している。なお、本明細書における画像の分割方向は、分割線に直交する方向である。従って、図５（ａ）のように分割線（タイルの境界線）が垂直方向の直線である場合、対象画像は水平方向に分割されていると記載する。タイル８０１が（０，０）と（２１５９，２０４７）とを対角頂点とする水平方向２０４８画素の矩形領域である。また、タイル８０２が（０，２０４８）と（２１５９，４０９５）とを対角頂点とする水平方向２０４８画素の矩形領域である。
【００５４】
HEVCにおいてタイルが設定された場合、符号化（動きベクトルの検出）は、タイル内の対象ブロック(CTU)について、図５（ａ）に示すようにタイルごとのラスタスキャン順で実行される。つまり、水平方向の対象ブロックの一部だけを処理して次のブロック行に移行するように、動きベクトルを検出するブロックの順序を決定するラスタスキャンの順序（または１スキャンラインの長さ）が変化する。タイル８０１の符号化とタイル８０２の符号化は並列に実行されてもよいが、本実施形態では、タイルについてもラスタスキャン順で符号化処理を実行するものとする。したがってまずタイル８０１のCTUについて符号化を行った後、タイル８０２のCTUについて符号化を行う。
【００５５】
制御部１００は、動きベクトルの検出順序の変更とともに、参照ラインバッファ１０７の管理方法（論理的な構成）を変更する。変更前、制御部１００は、対象画像の水平解像度に等しい水平方向サイズを有するラインバッファが、（垂直（上下）探索範囲＋垂直CTUサイズ）に等しいライン数存在するものとして、参照ラインバッファ１０７の読み書きを制御していた。
【００５６】
一方、変更後、制御部１００は、（水平タイルサイズ＋片方向水平探索範囲）の水平方向サイズを有するラインバッファが、（垂直（上下）探索範囲＋垂直CTUサイズ）に等しいライン数存在するものとして、参照ラインバッファ１０７の読み書きを制御する。参照ラインバッファ１０７の垂直方向サイズに変更はない。
【００５７】
タイルの設定の有無や設定するタイルの大きさは、制御部１００が例えば撮像部１０２の設定に基づいて対象画像の水平解像度を検出し、例えば予め記憶されている水平解像度とタイル設定との関係に基づいて決定することができるが、これに限定されない。本実施形態では対象画像を垂直方向に分割したタイルを設定する必要はないが、垂直方向と水平方向との両方に対象画像を分割したタイルを設定することもできる。対象画像の水平解像度と設定するタイルの大きさ（または方向ごとの分割数）との関係は、参照ラインバッファ１０７の容量と、探索範囲の大きさと、対象画像の水平解像度とに基づいて予め定めておくことができる。
【００５８】
制御部１００はタイルの設定が必要と判定される場合、設定するタイルの大きさ（または方向ごとの分割数）を符号化回路１２０に通知する。また、制御部１００は、設定したタイルごとに符号化処理が行われるように、対象フレームバッファ１０４から対象ブロックバッファ１０６に格納するブロックの読み出し順序を変更する。また、制御部１００は、参照フレームバッファ１０５から参照ラインバッファ１０７に格納する参照画像の範囲についても、変更後の動きベクトルの検出順序に対応させて変更する。
【００５９】
動き予測部１０８は、対象ブロックバッファ１０６に格納された対象ブロックの番号または参照番号内の位置（Ｘ，Ｙ）によって定まる探索範囲を参照ラインバッファ１０７から読み出して動きベクトルを検出する。この際、動き予測部１０８は、参照ラインバッファ１０７のアドレスと、記憶されている参照画像の位置との関係を、設定されているタイルの情報に基づいて判別し、探索範囲の画像データを読み出す。つまり、動き予測部１０８は、タイルの設定に応じて、参照ラインバッファ１０７の管理方法を異ならせる。
【００６０】
図５（ｂ）は、図５（ａ）に示すタイル８０１，８０２を設定した際の、符号化（動きベクトル検出）対象のCTU（対象ブロック）と動きベクトルの探索範囲を示す。ここでは、タイル８０１内のＣＴＵのうち、ラスタスキャン順で先頭のCTU（０，０）９０１と、その動きベクトルの探索範囲９０２とを示している。探索範囲９０２は（０，０）と（５４３，１５９）とを対角頂点とする、水平５４４（＝３２＋５１２）画素、垂直１６０（＝３２＋１２８）画素の矩形領域であり、タイルを設定しない場合と同じである。
【００６１】
図６（ａ）は、タイル８０１内のＣＴＵのうち、ラスタスキャン順で最初にタイル８０１の右端に位置するCTU（６３，０）１００１と、CTU（６３，０）１００１の動きベクトルの探索範囲１００２とを示している。探索範囲１００２は、（１５０４，０）と（２５５９，１５９）を対角頂点とする、水平１０５６（＝５１２＋３２＋５１２）画素、垂直１６０（＝３２＋１２８）画素の矩形領域である。
【００６２】
CTU（６３，０）１００１はタイル８０１の右端に位置する。そのため、参照画像のうち、探索範囲１００２よりｘ座標値の大きな範囲（（２５６０，０）と（４０９５，２１５９）とを対角頂点とする領域８０２１）は、タイル８０１内のＣＴＵに対する動きベクトル検出には用いられない。
【００６３】
タイル８０１内の全ＣＴＵの符号化が終了すると、タイル８０２内のＣＴＵについて同様に符号化を行う。図６（ｂ）は、タイル８０２内のＣＴＵのうち、ラスタスキャン順で先頭のCTU（０，０）１１０１と、その動きベクトルの探索範囲１１０２とを示している。探索範囲１１０２は（１５３６，０）と（２５９１，１５９）とを対角頂点とする、水平１０５６（＝５１２＋３２＋５１２）画素、垂直１６０（＝３２＋１２８）画素の矩形領域である。
【００６４】
CTU（０，０）１１０１はタイル８０２の左端に位置する。そのため、参照画像のうち、探索範囲１１０２よりｘ座標値の小さな範囲（（０，０）と（１５３５，２１５９）とを対角頂点とする領域８０１１）は、タイル８０２内のＣＴＵに対する動きベクトル検出には用いられない。
【００６５】
このように、タイル８０１，８０２の設定により、水平解像度４０９６画素の対象画素について必要となる参照ラインバッファ１０７の水平解像度を２５６０画素に削減できる。また、垂直方向については、各方向（上、下）１２８画素を探索範囲とする場合、ＣＴＵの垂直サイズを３２画素とすると、最大２８８画素（ライン）分の容量が必要である。従って、タイル８０１，８０２の設定により、水平２５６０×垂直２８８画素の容量の参照ラインバッファ１０７で、水平解像度４０９６画素×垂直解像度２１６０画素の対象画像について、参照画像の同じ領域を繰り返し読み出さずに動きベクトルを検出できる。
【００６６】
タイルを設定しない場合、参照画像の同じ領域を繰り返し読み出さずに（図２〜図４に関して説明したように）動きベクトルを検出するためには水平４０９６×垂直２８８画素の容量の参照ラインバッファ１０７が必要となる。これに対し、タイル８０１，８０２を設定した場合には水平２５６０×垂直２８８画素の容量ですむため、容量を３７．５％節約することができる。
【００６７】
探索範囲の垂直方向のサイズをｍ画素（ここでは１２８×２＋３２画素）、参照ラインバッファ１０７の容量をＴ画素とすると、読み込み可能な最大水平解像度ｎはfloor(Ｔ／ｍ)である（floor(x)はｘ以下で最大の整数を表す）。この場合、水平方向の一方向（右方向または左方向）の探索範囲の大きさをｏ（ここでは５１２画素）とすると、
タイルの水平方向のサイズ≦（ｎ−ｏ）
となるようにタイルを設定することで、探索サイズの垂直方向を減らすことなく、より大きな水平解像度を有する入力画像に対する動きベクトルの検出を効率よく実行できる。
【００６８】
ここでは、２つのタイル（水平方向の分割数が２）を設定する場合について説明したが、タイルの数をより多くすることもできる。例えば、図７（ａ）のように、対象画像の水平解像度が４０９６画素（第１の値）よりも大きな８１９２画素（第２の値）になったとする。この場合、水平方向に２分割しても各タイルの水平解像度は４０９６画素である。例えば図７（ｂ）に示すように、タイルの数（水平方向の分割数）を増加させることで、対象画像の水平解像度が４０９６画素の場合と同様の容量を有する参照ラインバッファ１０７で、参照画像の同じ領域を繰り返し読み出さずに動きベクトルを検出できる。
【００６９】
上述の通り、対象画像の水平解像度と設定するタイルの大きさ（または方向ごとの分割数）との関係は、参照ラインバッファ１０７の容量と、探索範囲の大きさと、対象画像の水平解像度とに基づいて予め定めておくことができる。そのため、制御部１００は、対象画像の水平解像度に応じて適切なタイルを設定する（対象ブロックバッファ１０６および参照ラインバッファ１０７への適切な書き込みを行う）ことができる。
【００７０】
図７（ｂ）に示す例では、タイル１３０１〜１３０４の４つを設定しているが、両端のタイル１３０１，１３０４よりも中間のタイル１３０２，１３０３の方が水平方向の大きさが小さくなっている。これは、中間のタイル１３０２，１３０３では、タイルの右端と左端の両方でタイルの外側の範囲を含む探索範囲が用いられるからである。
【００７１】
タイル１３０１についてはタイルの水平解像度２３０４画素に加え、右端から外方に最大５１２画素の探索範囲が設定される。従って、参照画像の同じ領域を繰り返し読み出さずに動きベクトルを検出するには、参照ラインバッファ１０７を２３０４＋５１２＝２８１６画素の水平解像度で管理する必要がある。タイル１３０４についても、タイルの水平解像度２３０４画素に加え、左端から外方に最大５１２画素の探索範囲が設定されるため、同様に参照ラインバッファ１０７を２８１６画素の水平解像度で管理する必要がある。
【００７２】
一方、中間のタイル１３０２，１３０３では、水平解像度１７９２画素に加え、右端から外方に最大５１２画素の探索範囲、左端から外方に最大５１２画素の探索範囲が設定される。従って、参照画像の同じ領域を繰り返し読み出さずに動きベクトルを検出するには、参照ラインバッファ１０７を５１２＋１７９２＋５１２＝２８１６画素の水平解像度で管理する必要がある。
【００７３】
例えば、対象画像の水平解像度がｄ画素、水平方向の分割数がｈ、水平方向の一方向（右方向または左方向）の探索範囲の大きさをｏとすると、
右端および左端のタイルの水平方向のサイズ＝（ｄ−２×ｏ）／ｈ＋ｏ
それ以外（中間）のタイルの水平方向のサイズ＝（ｄ−２×ｏ）／ｈ
の関係を満たすように分割すると、各タイルについて、参照ラインバッファ１０７を同一の水平解像度で管理することができる。
【００７４】
この場合も、
右端および左端のタイルの水平方向のサイズ＋ｏ≦ｎ
それ以外（中間）のタイルの水平方向のサイズ＋（２×ｏ）≦ｎ
を満たすように分割数ｈを定めると、探索サイズの垂直方向を減らすことなく、より大きな水平解像度を有する入力画像に対する動きベクトルの検出を効率よく実行できる。
【００７５】
図８（ａ）は、中間のタイル１３０２で最初に動きベクトルが検出されるCTU（７２，０）１４０１とその動きベクトルの探索範囲１４０２を示している。探索範囲１４０２は（１７９２，０）と（２８４７，１５９）とを対角頂点に有する矩形領域である。
タイル１３０２内のCTUに対して動きベクトルを検出する際、参照ラインバッファ１０７に格納される参照画像の左端の座標は（１７９２，ｙ）である。これは、タイル１３０２の左端の座標（２３０４，ｙ）よりも水平方向左側の探索範囲（５１２画素）分、左である。
【００７６】
図８（ｂ）は、中間のタイル１３０２の右端に位置するCTUのうち、最初に動きベクトルが検出されるCTU（１２７，０）１５０１とその動きベクトルの探索範囲１５０２を示している。探索範囲１５０２は（３５５２，０）と（４６０７，１５９）とを対角頂点に有する矩形領域である。
タイル１３０２内のCTUに対して動きベクトルを検出する際、参照ラインバッファ１０７に格納される参照画像の右端の座標は（４６０７，ｙ）である。これは、タイル１３０２の左端の座標（４０９５，ｙ）よりも水平方向右側の探索範囲（５１２画素）分、右である。
【００７７】
中間のタイル１３０２，１３０３内のCTUについては、全て左右両方向に探索範囲が存在する。そのため、参照画像の同じ領域を繰り返し読み出さずに動きベクトルを検出するには、参照ラインバッファ１０７を（水平タイルサイズ＋片方向水平探索範囲×２）の水平解像度で管理する必要がある。
【００７８】
ここで説明した例では、左右両端のタイル１３０１，１３０４についても、中間のタイル１３０２，１３０３についても、参照ラインバッファ１０７を２８１６画素の水平解像度で管理すれば参照画像の同じ領域を繰り返し読み出さずに動きベクトルを検出できる。従って、探索範囲の垂直サイズ（２８８画素）を変更しない場合、タイルを設定しない場合よりも約６５％少ない（２８１６／８１９２＝０．３４）容量の参照ラインバッファ１０７で、参照画像の同じ領域を繰り返し読み出さずに動きベクトルを検出できる。
【００７９】
図９は、本実施形態における動きベクトル検出動作に関するフローチャートである。
Ｓ９０１で制御部１００は、例えば撮像部１０２の設定から、動きベクトルを検出する対象の動画像の水平解像度を取得する。そして、制御部１００は、動画像の水平解像度と予め定められた閾値とを比較し、水平解像度が閾値以上と判定されればＳ９０４へ、判定されなければＳ９０２に処理を進める。
【００８０】
Ｓ９０２で制御部１００および符号化回路１２０は、符号化対象のフレーム画像（対象画像）を分割した複数のブロック（対象ブロック）について、通常の順序で動きベクトルを検出する。通常の順序は、対象画像全体を１つの領域としたラスタスキャン順である。ここで、制御部１００および符号化回路１２０は、図２および図３で説明したように、参照ラインバッファ１０７を、対象画像の水平解像度に等しい水平方向の画素数を有するラインバッファによって構成されるものとして管理して動きベクトルを検出する。それにより、参照画像から同じ領域を繰り返し読み出すことなく効率的に動きベクトルを検出する。
【００８１】
Ｓ９０３で制御部１００が参照画像の対象ブロックの全てについて動きベクトルが検出されたと判定するまで、制御部１００および符号化回路１２０はＳ９０２の処理を繰り返し実行する。Ｓ９０３で制御部１００が参照画像の全ブロックについて動きベクトルが検出されたと判定すると、対象画像に対する動きベクトル検出処理は終了する。以降、次のフレーム画像を対象画像として同様の処理を繰り返す。
【００８２】
一方、Ｓ９０４で制御部１００は、動画像の水平解像度に応じて、対象ブロックの処理順序および参照ラインバッファ１０７の管理方法を変更する。上述したように制御部１００は、
例えば対象画像を水平方向に分割した複数の論理領域（例えばHEVCにおけるタイル）を設定することにより、対象ブロックの処理順序を変更する。対象ブロックの処理順序の変更は、対象画像を水平方向に分割した複数の論理領域のそれぞれで独立して動きベクトルを検出するように変更することに相当する。あるいは、対象ブロックの順序を決定するラスタスキャンにおける１スキャンラインの長さを短くするともいえる。
【００８３】
また、制御部１００は、参照ラインバッファ１０７を、対象画像の水平解像度よりも少ない水平方向の画素数を有するラインバッファによって構成されるものとして管理するように変更する。ラインバッファの水平方向の画素数は、論理領域の水平方向サイズと水平方向の探索範囲の大きさに依存して決定される。設定する論理領域の数と、参照ラインバッファ１０７の管理方法とは、動画像の水平解像度と関連付けて予め記憶しておくことができる。
【００８４】
Ｓ９０５で制御部１００および符号化回路１２０は、符号化対象のフレーム画像（対象画像）を分割した複数のブロック（対象ブロック）について、変更後の順序で動きベクトルを検出する。変更後の順序は、対象画像を水平方向に分割した領域ごとのラスタスキャン順である。
【００８５】
Ｓ９０６で制御部１００が参照画像の対象ブロックの全てについて動きベクトルが検出されたと判定するまで、制御部１００および符号化回路１２０はＳ９０５の処理を繰り返し実行する。Ｓ９０６で制御部１００が参照画像の全ブロックについて動きベクトルが検出されたと判定すると、対象画像に対する動きベクトル検出処理は終了する。以降、次のフレーム画像を対象画像として同様の処理を繰り返す。
【００８６】
以上説明したように、本実施形態によれば、対象画像のブロックごとに動きベクトルを検出する際に、対象画像の水平解像度が閾値以上の場合には対象画像を水平方向に分割した領域ごとに各ブロックの動きベクトルを検出するようにした。あるいは、対象画像の水平解像度が閾値以上の場合、水平方向の対象ブロックの一部だけを処理して次のブロック行に移行するように、動きベクトルを検出するブロックの順序を決定するラスタスキャンの順序を変更（または１スキャンラインの長さを短く）した。そのため、動きベクトルの探索範囲の画像を保持するためのバッファの容量を対象画像の水平解像度の増加にあわせて増加させることなく、また、探索範囲を狭くすることなく、動きベクトルを検出することができる。
【００８７】
なお、ここでは動きベクトルの検出を対象画像の部分領域ごとに独立して実行するように変更する例として、HEVCにおけるタイルを用いる構成について説明した。しかしながら、本実施形態で説明した動きベクトルの検出方法は、符号化に用いられる動きベクトルの検出に限らず、任意の用途の動きベクトルの検出に用いることができる。
【００８８】
（その他の実施形態）
上述の実施形態では、タイルを設定するか否かにかかわらず、探索範囲の大きさは一定（水平方向±５１２画素、垂直方向±１２８画素）であった。しかし、参照ラインバッファ１０７の容量を少なくすることが必要な場合には、タイルを設定する場合に、水平方向の探索範囲をタイルを設定しない場合よりも少なくすることもできる。これは、もともと水平方向の探索範囲が垂直方向の探索範囲より大きく設定されることから、水平方向の探索範囲を削減しても垂直方向の探索範囲を削減するよりも動きベクトル検出の精度に与える影響が小さいからである。
【００８９】
また、上述の実施形態では、デジタルカメラの制御部１００が、タイルの設定要否や設定するタイルの大きさを決定していた。しかし、符号化回路１２０内に別の制御部（符号化制御部）を設け、符号化処理に関する制御は符号化制御部が行うようにしてもよい。この場合、制御部１００は符号化制御部に対象画像の解像度情報だけを通知する。そして、符号化制御部がタイルの設定要否や設定するタイルの大きさなどを決定する。また、対象フレームバッファ１０４から対象ブロックバッファ１０６へのデータ読み込みや参照フレームバッファ１０５から参照ラインバッファ１０７へのデータ読み込みについても、符号化制御部がタイルの設定有無に応じて制御する。
【００９０】
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００９１】
１００…制御部、１０２…撮像部、１０３…現像処理部、１０４…対象フレームバッファ、１０５…参照フレームバッファ、１０６…対象ブロックバッファ、１０７…参照ラインバッファ、１０８…動き予測部、１２０…符号化回路
【図１】
2018032949.tif 000003
【図２】
2018032949.tif 000004
【図３】
2018032949.tif 000005
【図４】
2018032949.tif 000006
【図５】
2018032949.tif 000007
【図６】
2018032949.tif 000008
【図７】
2018032949.tif 000009
【図８】
2018032949.tif 000010
【図９】
2018032949.tif 000011