(57)【要約】【課題】より少ない計算コストで適切な符号化を行うことを目的とする。【解決手段】動画のフレームをブロック単位で符号化する符号化装置であって、フレームのブロックのうち処理対象の対象ブロックに隣接し、符号化に用いる動きベクトルが選択済みのブロックである隣接ブロックに対し検出された動きベクトルと対象ブロックの動きベクトルとの差分値を算出し、対象ブロックに対し、隣接ブロックの動きベクトルを適用することで特定される参照ブロックの画素と対象ブロックの画素との差分値を算出する算出手段と、隣接ブロックの符号化に用いる動きベクトルが、処理時点において検出済みか否かを確認する確認手段と、算出結果と、確認結果と、に基づいて、対象ブロックの符号化に用いる動きベクトルを選択する動きベクトル選択手段とを有する。【選択図】図３
2019057886.tif 000002
【特許請求の範囲】
【請求項１】
動画のフレームをブロック単位で符号化する符号化装置であって、
前記フレームの各ブロックの動きベクトルを検出する検出手段と、
前記フレームのブロックのうち処理対象の対象ブロックに隣接し、符号化に用いる動きベクトルが選択済みのブロックである隣接ブロックに対し前記検出手段により検出された動きベクトルと前記対象ブロックの前記動きベクトルとの差分値を算出し、前記対象ブロックに対し、前記隣接ブロックの前記動きベクトルを適用することで特定される参照ブロックの画素と前記対象ブロックの画素との差分値を算出する算出手段と、
前記隣接ブロックの符号化に用いる動きベクトルが、処理時点において検出済みか否かを確認する確認手段と、
前記算出手段による算出結果と、前記確認手段による確認結果と、に基づいて、前記対象ブロックから検出される動きベクトルと、前記隣接ブロックの符号化に用いる動きベクトルと、の中から前記対象ブロックの符号化に用いる動きベクトルを選択する動きベクトル選択手段と
を有することを特徴とする符号化装置。
【請求項２】
前記動きベクトル選択手段は、前記動きベクトルの差分値が閾値以上又は前記画素の差分値が閾値以上となる隣接ブロックの動きベクトルについては、前記対象ブロックの符号化に用いる動きベクトルとして選択しないことを特徴とする請求項１に記載の符号化装置。
【請求項３】
前記動きベクトル選択手段は、前記確認手段による確認の結果、前記隣接ブロックの符号化に用いる動きベクトルを検出済みでない場合に、前記隣接ブロックの符号化に用いる動きベクトルを前記対象ブロックの符号化に用いる動きベクトルとして選択しないことを特徴とする請求項１又は２に記載の符号化装置。
【請求項４】
前記検出手段は、前記対象ブロックの第１の動きベクトルを検出し、前記対象ブロックの符号化に用いる動きベクトルとして前記対象ブロックから検出される動きベクトルが選択された場合に、前記第１のブロックに比べて精度の高い第２の動きベクトルを検出し、
前記対象ブロックの符号化に用いる動きベクトルとして前記対象ブロックから検出される動きベクトルが選択された場合に、前記対象ブロックから検出された前記第２の動きベクトルを用いて符号化を行う符号化手段をさらに有することを特徴とする請求項１乃至３の何れか１項に記載の符号化装置。
【請求項５】
前記フレームの複数のブロックを処理対象として順次選択し、選択したブロックに対し動きベクトルを順次選択するよう制御する制御手段をさらに有し、
前記確認手段は、前記対象ブロックに隣接する複数の隣接ブロックのうち、前記対象ブロックの直前に処理対象として選択された第１の隣接ブロックの符号化に用いる動きベクトルが前記処理時点において検出済みか否かを確認し、
前記動きベクトル選択手段は、前記処理時点において、前記第１の隣接ブロックの符号化に用いる動きベクトルが検出済みでない場合には、前記第１の隣接ブロックの符号化に用いる動きベクトルを前記対象ブロックの符号化に用いる動きベクトルとして選択しないことを特徴とする請求項１に記載の符号化装置。
【請求項６】
前記算出手段は、前記第１の隣接ブロックに対し、前記動きベクトルの差分値と、前記画素の差分値と、を算出し、
前記動きベクトル選択手段は、前記第１の隣接ブロックに対する前記算出手段の算出結果が予め設定された選択条件を満たし、かつ前記第１の隣接ブロックの符号化に用いる動きベクトルが検出済みの場合に、前記第１の隣接ブロックの符号化に用いる動きベクトルを前記対象ブロックの符号化に用いる動きベクトルとして選択することを特徴とする請求項５に記載の符号化装置。
【請求項７】
前記動きベクトル選択手段は、前記第１の隣接ブロックから検出される動きベクトルを前記対象ブロックの符号化に用いる動きベクトルとして選択しない場合に、前記複数の隣接ブロックのうち第１の隣接ブロック以外の第２の隣接ブロックの符号化に用いる動きベクトルに基づいて、前記第２の隣接ブロックの符号化に用いる動きベクトルを前記対象ブロックの符号化に用いる動きベクトルとするか否かを判断することを特徴とする請求項６に記載の符号化装置。
【請求項８】
前記動きベクトル選択手段は、前記複数の隣接ブロックについて、前記隣接ブロックの符号化に用いる動きベクトルを前記対象ブロックの符号化に用いる動きベクトルとして選択しない場合には、前記対象ブロックから検出される動きベクトルを前記対象ブロックの符号化に用いる動きベクトルとして選択することを特徴とする請求項７に記載の符号化装置。
【請求項９】
前記第１の隣接ブロックは、前記対象ブロックの左隣のブロックであることを特徴とする請求項５乃至８の何れか１項に記載の符号化装置。
【請求項１０】
前記検出手段は、前記対象ブロックの第１の動きベクトルを検出し、前記対象ブロックの符号化に用いる動きベクトルとして前記対象ブロックから検出される動きベクトルが選択された場合に、前記第１のブロックに比べて精度の高い第２の動きベクトルを検出し、
前記対象ブロックの符号化に用いる動きベクトルとして前記対象ブロックから検出される動きベクトルが選択された場合に、前記対象ブロックから検出された前記第２の動きベクトルを用いて符号化を行う符号化手段をさらに有し、
前記算出手段は、前記対象ブロックの第１の動きベクトルと、前記第１の隣接ブロックの前記第１の動きベクトルを用いて前記動きベクトルの差分値と前記画素の差分値を算出することを特徴とする請求項５乃至９の何れか１項に記載の符号化装置。
【請求項１１】
前記算出手段は、複数の隣接ブロックそれぞれに対し、前記動きベクトルの差分値と、前記画素の差分値を算出し、
前記動きベクトルの差分値と、前記画素の差分値とに基づいて、前記複数の隣接ブロックの中から、１つの隣接ブロックを選択するブロック選択手段をさらに有し、
前記動きベクトル選択手段は、前記ブロック選択手段により選択された隣接ブロックについての前記算出結果と前記確認結果と、に基づいて、前記選択された隣接ブロックを、前記対象ブロックの符号化に用いる動きベクトルとして選択するか否かを判断することを特徴とする請求項１に記載の符号化装置。
【請求項１２】
前記ブロック選択手段は、複数の隣接ブロックに対し予め設定された優先度に応じて、前記１つの隣接ブロックを選択することを特徴とする請求項１１に記載の符号化装置。
【請求項１３】
前記動きベクトル選択手段は、前記ブロック選択手段により選択された隣接ブロックの動きベクトルを、前記対象ブロックの符号化に用いる動きベクトルとして選択しないと判断した場合に、前記対象ブロックから検出される動きベクトルを前記対象ブロックの符号化に用いる動きベクトルとして選択することを特徴とする請求項１１又は１２に記載の符号化装置。
【請求項１４】
動画のフレームをブロック単位で符号化する符号化装置による符号化方法であって、
前記フレームの各ブロックの動きベクトルを検出する検出ステップと、
前記フレームのブロックのうち処理対象の対象ブロックに隣接し、符号化に用いる動きベクトルが選択済みのブロックである隣接ブロックに対し前記検出ステップにおいて検出された動きベクトルと前記対象ブロックの前記動きベクトルとの差分値を算出し、前記対象ブロックに対し、前記隣接ブロックの前記動きベクトルを適用することで特定される参照ブロックの画素と前記対象ブロックの画素との差分値を算出する算出ステップと、
前記隣接ブロックの符号化に用いる動きベクトルが、処理時点において検出済みか否かを確認する確認ステップと、
前記算出ステップにおける算出結果と、前記確認ステップにおける確認結果と、に基づいて、前記対象ブロックから検出される動きベクトルと、前記隣接ブロックの符号化に用いる動きベクトルと、の中から前記対象ブロックの符号化に用いる動きベクトルを選択する動きベクトル選択ステップと
を含むことを特徴とする符号化方法。
【請求項１５】
コンピュータを、請求項１乃至１３の何れか１項に記載の符号化装置の各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動画像に含まれるフレームの動きベクトルに基づいて符号化を行う符号化装置に関する。
【背景技術】
【０００２】
従来、Ｈ．２６ｘやＭＰＥＧ、ＨＥＶＣ等の符号化方式が知られている。これらの符号化方式においては、１フレームを複数のブロックに分割して、各ブロック単位に符号化を行う。また、圧縮符号化の方式としては、時間的相関性を利用した符号化方式（インター符号化）と、空間的相関性を利用した符号化方式（イントラ符号化）とがある。時間的相関を利用した符号化方式は、フレーム間の動きを探索し、当該ブロックの動きベクトルとブロック間の差分を求めて符号化を行うものである。ＨＥＶＣのインター符号化では、マージモードと呼ばれる符号化モードが導入された。符号化対象ブロックの動きベクトルが近傍ブロックの動きベクトルと同一の場合に、マージモードで符号化される。マージモードでは、対象ブロックの動きベクトルを符号化せずに符号量を抑制することができる。また、マージモードが使用され、かつ、隣接ブロックとの画素差分が０の場合に、スキップモードが選択される。特許文献１には、符号量を削減するために、スキップモードが選択される割合を増やすように動き探索の結果等を変更する方式が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平８−１２６０１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、センサのノイズ等の影響で実際には動きがないブロックにおいて、わずかな動きベクトルが誤検出され、本来であればマージモードやスキップモードで符号化されるべきブロックに対しこれらのモードを選択できない場合がある。このように、高ノイズで平坦でない画像において、符号化効率が低下するという問題があった。また、ブロック毎にパイプライン処理で符号化する場合、対象ブロックの動き探索を行うときに、対象ブロックの左隣のブロックの動きベクトルが決定していないような回路構成を取ることがある。この場合、対象ブロックの動き探索時に左隣のブロックの動きベクトルが決定していないため、左隣のブロックの動きベクトルを使用してマージモードかどうかの判定を行うことができないという問題があった。
【０００５】
本発明はこのような問題点に鑑みなされたもので、より少ない計算コストで適切な符号化を行うことを目的とする。
【課題を解決するための手段】
【０００６】
そこで、本発明は、動画のフレームをブロック単位で符号化する符号化装置であって、
前記フレームの各ブロックの動きベクトルを検出する検出手段と、前記フレームのブロックのうち処理対象の対象ブロックに隣接し、符号化に用いる動きベクトルが選択済みのブロックである隣接ブロックに対し前記検出手段により検出された動きベクトルと前記対象ブロックの前記動きベクトルとの差分値を算出し、前記対象ブロックに対し、前記隣接ブロックの前記動きベクトルを適用することで特定される参照ブロックの画素と前記対象ブロックの画素との差分値を算出する算出手段と、前記隣接ブロックの符号化に用いる動きベクトルが、処理時点において検出済みか否かを確認する確認手段と、前記算出手段による算出結果と、前記確認手段による確認結果と、に基づいて、前記対象ブロックから検出される動きベクトルと、前記隣接ブロックの符号化に用いる動きベクトルと、の中から前記対象ブロックの符号化に用いる動きベクトルを選択する動きベクトル選択手段とを有することを特徴とする。
【発明の効果】
【０００７】
本発明によれば、より少ない計算コストで適切な符号化を行うことができる。
【図面の簡単な説明】
【０００８】
【図１】第１の実施形態に係る符号化装置を示す図である。
【図２】フレーム内の各ブロックの処理順序について説明するための図である。
【図３】符号化処理を示すフローチャートである。
【図４】処理対象のフレーム内のブロックを示す図である。
【図５】パイプライン処理を模式的に示す図である。
【図６】符号化処理を示すフローチャートである。
【図７】変形例に係る符号化装置を示す図である。
【発明を実施するための形態】
【０００９】
以下、本発明の実施形態について図面に基づいて説明する。
（第１の実施形態）
図１は、第１の実施形態に係る符号化装置１００を示す図である。符号化装置１００は、動画像に含まれる各フレームを複数のブロックに分割し、ブロック単位で符号化を行う。符号化装置１００はさらに、１つのフレームに含まれる複数のブロックを処理対象のブロックとして１つずつ順次選択し、選択したブロックについて符号化を行うことにより、フレーム全体の符号化を完了する。
【００１０】
図２は、符号化装置１００の処理対象フレーム内の各ブロックの処理順序について説明するための図である。本実施形態においては、符号化装置１００は、フレームの左上のブロック２０１を１番目に処理対象として選択し、続いて右方向に並ぶ各ブロックを順次、処理対象として選択する。そして、符号化装置１００は、右端のブロック２０２まで到達すると、続いて１段下の左端のブロック２０３を処理対象として選択する。符号化装置１００は、こうして右下のブロック２０４まで順次選択することで、１つのフレームの符号化を完了する。なお、符号化装置１００は、ブロック毎にパイプライン処理により符号化を行うこととするが、パイプライン処理については後述する。
【００１１】
図１に示すように、符号化装置１００は、整数精度動き検出部１０１と、動きベクトル記憶部１０２と、差分値算出部１０３と、閾値記憶部１０４と、選択部１０５と、小数精度動き検出部１０６と、符号化部１０７と、処理制御部１０８と、を有している。以下、符号化の処理対象となるブロックを対象ブロックと称することとする。整数精度動き検出部１０１は、対象ブロックに対し、整数精度動き検出を行うことにより、整数精度動きベクトルを検出する。動きベクトル記憶部１０２は、小数精度動き検出部１０６により検出された小数精度動きベクトルを記憶する。
【００１２】
差分値算出部１０３は、対象ブロックの整数精度動きベクトルと、対象ブロックの隣接のブロックの整数精度動きベクトルとの差分値を求める。ここで、隣接のブロックとは、対象ブロックに隣接するブロックで、かつ対象ブロックの前に処理対象として既に選択されている選択済みのブロックである。差分値算出部１０３が対象ブロックに対し処理を行う時点においては、左隣のブロックの整数精度動きベクトルは検出済みである。よって、差分値を求める対象として、左隣のブロックも選択することができる。差分値算出部１０３は具体的には、水平方向の差分値の絶対値と垂直方向の差分値の絶対値との和を動きベクトルの差分値として求める。なお、動きベクトルの差分値の算出方法は実施形態に限定されるものではない。他の例としては、差分値算出部１０３は、水平方向差分値の二乗と垂直方向差分値の二乗の和を動きベクトルの差分値として求めてもよい。また、他の例としては、差分値算出部１０３は、水平方向差分値の二乗と垂直方向差分値の二乗の和の平方根を動きベクトルの差分値として求めてもよい。差分値算出部１０３はさらに、対象ブロックの動きベクトルを左隣の整数精度動きベクトルに置き換えた場合の参照ブロックを特定する。そして、差分値算出部１０３は、参照ブロックと対象ブロックの画素の差分値を算出する。
【００１３】
閾値記憶部１０４は、差分値算出部１０３により算出された差分値と比較するための閾値を記憶している。閾値記憶部１０４は、動きベクトルの差分値に対応したベクトル閾値と、画素の差分値に対応した画素閾値と、を記憶している。選択部１０５は、差分値算出部１０３により算出された動きベクトルの差分値及び画素の差分値を、それぞれベクトル閾値及び画素閾値と比較する。なお、これらの閾値はユーザの操作や、外部装置からの指定によって変更可能としてもよい。そして、選択部１０５は、比較結果に応じて、対象ブロック及び隣接ブロックの動きベクトルの中から、対象ブロックの符号化に用いる動きベクトルを選択する。なお、対象ブロックの動きベクトルの候補となる隣接ブロックは、対象ブロックに隣接ブロックのうち、対象ブロックよりも先に符号化処理の対象として選択されているブロックである。そこで、本説明においては、対象ブロックに隣接するブロックで、かつ対象ブロックよりも先に選択されているブロックを隣接ブロックと称することとする。
【００１４】
小数精度動き検出部１０６は、選択部１０５の処理結果に応じて適宜、対象ブロックの小数精度動き検出を行い、小数精度動きベクトルを検出する。小数精度動き検出部１０６により検出された小数精度動きベクトルは検出元のブロックの識別情報に対応付けて動きベクトル記憶部１０２に格納される。なお、本実施形態においては、小数精度動き検出部１０６は、選択部１０５により対象ブロックの動きベクトルが選択された場合にのみ対象ブロックの小数精度動きベクトルの検出を行う。一方で、小数精度動き検出部１０６は、選択部１０５により、隣接ブロックが選択された場合には、小数精度動きベクトルの検出は行わないものとする。なお、他の例としては、小数精度動き検出部１０６は、選択部１０５により隣接ブロックが選択された場合においても、常に対象ブロックの小数精度動きベクトルを検出することとしてもよい。符号化部１０７は、対象ブロックに対して選択された動きベクトルを用いて符号化ストリームを生成する。
【００１５】
本実施形態の符号化装置１００は、ブロック毎にパイプライン処理により符号化を行う。符号化装置１００は、３段のパイプライン処理を実行するものとする。ここで、１段は、整数精度動き検出部１０１による整数精度動きベクトル検出、差分値算出部１０３による差分値算出及び選択部１０５による選択である。２段は、小数精度動き検出部１０６による小数精度動きベクトル検出である。３段は、符号化部１０７による符号化である。処理制御部１０８は、パイプライン処理において、各部の処理タイミングを制御する。
【００１６】
図３は、符号化装置１００による符号化処理を示すフローチャートである。図４は、処理対象のフレーム内の各ブロックを示す図である。ある段（ブロックライン）の４つの連続するブロックを処理順にＡブロック、Ｂブロック、Ｃブロック、Ｄブロックとし、これらに対応する１段上の４つの連続するブロックを、Ｗブロック、Ｘブロック、Ｙブロック、Ｚブロックとする。ここでは、図４に示すＣブロックが処理対象として選択された場合を例に符号化処理を説明する。
【００１７】
図３のＳ３００において、整数精度動き検出部１０１は、対象ブロックの整数精度動きベクトルを検出する。次に、Ｓ３０１において、差分値算出部１０３は、対象ブロックの整数精度動きベクトルと左隣のブロックの整数精度動きベクトルの差分値を求める。差分値算出部１０３はまた、対象ブロックに左隣のブロックの整数精度動きベクトルを適用することにより参照ブロックを特定し、参照ブロックと対象ブロックの画素の差分値を算出する。本処理は、算出処理の一例である。図４の例において、Ｃブロックを対象ブロックとする場合、Ｂブロックが左隣のブロックである。
【００１８】
次に、Ｓ３０２において、選択部１０５は、Ｓ３０１において算出した２つの差分値に基づいて、左隣のブロックが選択条件を満たすか否かを判定する。ここで、選択条件は、左隣のブロックに対して算出された２つの差分値から左隣のブロックの動きベクトルを対象ブロックの動きベクトルとして選択することができるか否かを判断するための条件である。選択条件は、予め設定された条件である。本実施形態においては、動きベクトルの差分値がベクトル閾値未満であり、かつ画素の差分値が画素閾値未満であることが選択条件として設定されているものとする。
【００１９】
選択部１０５は、左隣のブロックが選択条件を満たす場合には（Ｓ３０２でＹｅｓ）、左隣のブロックの動きベクトルを、対象ブロックの符号化に用いる動きベクトルの候補として選択し、処理をＳ３０３へ進める。選択部１０５は、左隣のブロックが選択条件を満たさない場合には（Ｓ３０２でＮｏ）、処理をＳ３０５へ進める。ここで、左隣のブロックが選択条件を満たさない場合とは、動きベクトルの差分値がベクトル閾値以上の場合と、画素差分値が画素閾値以上の場合である。
【００２０】
Ｓ３０３において、選択部１０５は、Ｓ３０３の処理時点において、左隣のブロックの符号化に用いる動きベクトルが検出済みか否かを確認する。本処理については、図５を参照しつつ後に詳述する。選択部１０５は、左隣のブロックの符号化に用いる動きベクトルが検出済みの場合には（Ｓ３０３でＹｅｓ）、処理をＳ３０４へ進める。選択部１０５は、左隣のブロックの符号化に用いる動きベクトルを検出済みでない場合には（Ｓ３０３でＮｏ）、処理をＳ３０５へ進める。なお、動きベクトルを検出済みでない場合とは、例えば、整数精度動きベクトルは検出されているが、小数精度動きベクトルの検出が完了していない場合である。Ｓ３０４においては、選択部１０５は、左隣のブロックの符号化に用いる動きベクトルを、対象ブロックの符号化に用いる動きベクトルとして選択し、その後処理をＳ３０９へ進める。
【００２１】
Ｓ３０５においては、選択部１０５は、左隣の隣接ブロック以外の隣接ブロックを処理対象とする。図４に示すＣブロックが対象ブロックの場合、Ｘブロック、Ｙブロック、Ｚブロックが処理対象の隣接ブロックとして選択される。そして、選択部１０５は、処理対象のいずれかの隣接ブロックの動きベクトルを、対象ブロックの符号化に用いる動きベクトルとして選択することができるか否かを確認する。具体的には、選択部１０５は、処理対象の隣接ブロックそれぞれの符号化に用いる動きベクトルと、対象ブロックの動きベクトルの差分値を算出する。さらに、選択部１０５は、隣接ブロックそれぞれの符号化に用いる動きベクトルを対象ブロックに適用することにより参照ブロックを特定し、参照ブロックと対象ブロックの画素の差分値を算出する。なお、このとき用いられる、隣接ブロックの符号化に用いる動きベクトルは、小数精度動きベクトルである。そして、選択部１０５は、Ｓ３０２の処理と同様に、２つの差分値が選択条件を満たす隣接ブロックがあるか否かを確認する。選択部１０５は、選択条件を満たす隣接ブロックが存在する場合に（Ｓ３０５でＹｅｓ）、処理をＳ３０６へ進める。
【００２２】
そして、Ｓ３０６において、選択部１０５は、選択条件を満たす隣接ブロックの符号化に用いる動きベクトルを対象ブロックの符号化に用いる動きベクトルとして選択し、その後処理をＳ３０９へ進める。なお、選択部１０５は、複数の隣接ブロックが選択条件を満たす場合には、優先度が高い隣接ブロックの動きベクトルを優先的に選択するものとする。ここでは、優先度は、対象ブロックとの位置関係に応じて、符号化装置１００において、予め設定されているものとする。例えば、対象ブロックの右上、上、左上の順に優先的に選択するような優先度が設定されているものとする。なお、優先度は、対象ブロックとの位置関係に応じて定められたものであればよく、具体的な条件は実施形態に限定されるものではない。
【００２３】
また、選択部１０５は、Ｓ３０５及びＳ３０６において、処理対象の複数の隣接ブロックの中から選択条件を満たす１つの隣接ブロックを選択すればよく、そのための具体的な処理は実施形態に限定されるものではない。他の例としては、選択部１０５は、処理対象の隣接ブロックを優先度が高い順に１つずつ選択し、選択した隣接ブロックに対し選択条件を満たすか否かを検討してもよい。そして、選択部１０５は、選択条件を満たさない場合に、次の隣接ブロックを選択する、というようにして、選択した隣接ブロックが選択条件を満たすまで、処理を繰り返してもよい。
【００２４】
一方で、Ｓ３０５において、選択部１０５は、処理対象のすべての隣接ブロックが選択条件を満たさない場合には（Ｓ３０５でＮｏ）、処理をＳ３０７へ進める。Ｓ３０７において、選択部１０５は、対象ブロックから検出される動きベクトルを、対象ブロックの符号化に用いる動きベクトルとして選択する。次に、Ｓ３０８において、小数精度動き検出部１０６は、対象ブロックの小数精度動きベクトルを検出し、その後処理をＳ３０９へ進める。なお、Ｓ３０４、Ｓ３０６、Ｓ３０８の処理は、ベクトル選択処理の一例である。Ｓ３０９において、符号化部１０７は、対象ブロックに対して選択された動きベクトルを用いて対象ブロックの符号化を行う。以上で、符号化装置１００による符号化処理が完了する。以上のように、本実施形態に係る符号化装置１００は、左隣のブロックに対する差分値の算出結果と、左隣のブロックの符号化に用いる動きベクトルが検出済みか否かの確認結果と、に基づいて、対象ブロックの符号化に用いる動きベクトルを決定する。
【００２５】
図５は、符号化処理におけるパイプライン処理を模式的に示す図である。図５に示すように、ｔ１の期間において、Ａブロックに対する符号化処理が開始すると、続くｔ２の期間において、Ｂブロックに対する符号化処理が開始し、続くｔ３の期間にＣブロックに対する符号化処理が開始する。ここで、Ｃブロックを対象ブロックとして図３に示す符号化処理が実行される場合について説明する。Ｃブロックについては、ｔ３の期間において、Ｃブロックの整数精度動きベクトル検出が行われ、選択部１０５による動きベクトルの選択が行われる。ｔ３の期間においては、左隣のブロックであるＢブロックの小数精度動きベクトルの検出は完了していない。そこで、本実施形態の符号化装置１００は、ｔ３の期間において既に検出済みの整数精度動きベクトルを用いて、左隣のブロックと対象ブロックとの間での差分値の算出を行う。これにより、小数精度動きベクトルの検出前の時点において、左隣のブロックの動きベクトルを対象ブロックの符号化に用いる候補として選択するか否かを判断することができる。
【００２６】
さらに、Ｓ３０２において、差分値の算出結果に応じて、Ｃブロックの符号化に用いる動きベクトルとして、Ｃブロックの動きベクトルが選択される場合と、Ｂブロックの動きベクトルが候補として選択される場合とがある。Ｃブロックの動きベクトルが選択された場合には、ｔ４の期間に、小数精度動き検出部１０６により対象ブロック（Ｃブロック）の小数精度動きベクトルの検出が行われる（Ｓ３０７、Ｓ３０８）。
【００２７】
次に、対象ブロックの符号化に用いる動きベクトルとして、Ｂブロックの動きベクトルが候補として選択された場合について説明する。この場合には、まずＢブロックの動きベクトルを対象ブロックの動きベクトルとして用いることができるか否かを検討する。Ｂブロックの符号化に用いる動きベクトルとしては、Ｂブロックから検出される動きベクトルが選択されている場合と、Ｂブロックに隣接するブロック（Ａブロック、Ｘブロック、又はＹブロック）の動きベクトルが選択されている場合がある。
【００２８】
まず、Ｂブロックに対し、Ｂブロックから検出される動きベクトルが選択された場合について説明する。この場合には、ｔ３の期間にＢブロックの小数精度動きベクトルが検出され、検出された小数精度動きベクトルがＢブロックの符号化に用いられることになる。すなわち、Ｃブロックの１段の処理のタイミング（ｔ３の期間）において、Ｂブロックの小数精度動きベクトルの検出が完了しておらず、Ｃブロックの符号化に用いる動きベクトルとしてＢブロックの動きベクトルを選択することができない。この場合には、Ｓ３０３においてＮｏと判定され、Ｓ３０５の処理が行われる。すなわち、選択部１０５は、左隣のブロックであるＢブロックの動きベクトルは選択しないようにし、他の隣接ブロックを処理対象として選択する。これにより、Ｘブロック、Ｙブロック、Ｚブロックが処理対象として選択される。
【００２９】
そして、選択部１０５は、処理対象の隣接ブロックを対象ブロックの符号化に用いる動きベクトルとして選択可能か否かを、選択条件を用いて検討する。なお、この処理時点（ｔ３の期間）において、Ｘブロック、Ｙブロック及びＺブロックについては、それぞれのブロックの符号化に用いる動きベクトル（小数精度動きベクトル）は検出済みである。したがって、選択部１０５は、これらの隣接ブロックについては小数精度動きベクトルを用い、対象ブロックの整数精度動きベクトルを用いて、差分値の算出を行い、選択条件を満たすか否かを確認する。
【００３０】
次に、Ｂブロックに対し、Ｂブロックに隣接するブロックが選択された場合について説明する。この場合には、ｔ３の期間においては、既にＢブロックの符号化に用いる動きベクトルの検出は完了している。例えばＢブロックの符号化に用いる動きベクトルとしてＡブロックの動きベクトルが選択されるが、Ａブロックの小数精度動きベクトルはｔ２の期間に検出済みである。同様に、Ｂブロックに対して選択される隣接ブロックの小数精度動きベクトルはｔ３の期間においては検出済みである。したがって、この場合には、選択部１０５は、Ｓ３０４において左隣のブロックの符号化に用いる動きベクトルを対象ブロックの符号化に用いる動きベクトルとして選択する。なお、この場合には、対象ブロックの小数精度動きベクトル検出は省略される。
【００３１】
以上のように、本実施形態に係る符号化装置１００は、少ない計算コストで適切な符号化を行うことができる。さらに、符号化装置１００は、対象ブロックの直前に符号化処理が開始したブロック（左隣のブロック）との差分値算出においては、整数精度の動きベクトルを用いる。これにより、符号化装置１００は、対象ブロックの直前に符号化処理を開始したブロックについての小数精度動きベクトルの検出が完了していない時点においても、このブロックの動きベクトルを用いるか否かを判定することができる。すなわち、符号化装置１００は、高ノイズで平坦な画像であっても、対象ブロックの動きベクトルを隣接ブロックの動きベクトルに置き換えることによって、符号化効率を向上できる。Ｈ．２６ｘやＭＰＥＧ、ＨＥＶＣ等の符号化方式では対象ブロックの動きベクトルと隣接ブロックの動きベクトルの差分を符号化するため、対象ブロックの動きベクトルを隣接ブロックの動きベクトルに置き換えることで、符号量を減らすことができる。
【００３２】
第１の実施形態の変形例について説明する。本実施形態の符号化装置１００は、符号化処理が完了しているブロックで、かつ対象ブロックに隣接する隣接ブロックのうち左隣のブロックの動きベクトルを優先的に、対象ブロックの動きベクトルとして用いることができるか否かの判定を行った。これは、左隣のブロックの動きベクトルを用いることとした場合に符号化コストを最も削減できるためである。ただし、判定対象として優先的に選択するブロックは、符号化処理が完了しているブロックで、かつ対象ブロックに隣接する隣接ブロックであればよく、左隣のブロックに限定されるものではない。
【００３３】
（第２の実施形態）
次に、第２の実施形態に係る符号化装置１００について、第１の実施形態の符号化装置１００と異なる点について説明する。第２の実施形態に係る符号化装置１００は、符号化処理が完了しているブロックで、対象ブロックに隣接する複数の隣接ブロックそれぞれとの間で差分値の算出を行う。
【００３４】
図６は、第２の実施形態に係る符号化装置１００による符号化処理を示すフローチャートである。Ｓ６００において、整数精度動き検出部１０１は、対象ブロックの整数精度動きベクトルを検出する。本処理は、図３を参照しつつ説明したＳ３００の処理と同様である。次に、Ｓ６０１において、差分値算出部１０３は、符号化処理が完了しているブロックで、対象ブロックに隣接する複数の隣接ブロックを特定する。符号化処理が完了しているブロックで、対象ブロックに隣接するブロックとして、対象ブロックを基準として左に隣接するブロックと、左上に隣接するブロックと、上に隣接するブロックと、右上に隣接するブロックが特定される。以下、左に隣接するブロック、左上に隣接するブロック、上に隣接するブロック及び右上に隣接するブロックを、それぞれ左ブロック、左上ブロック、上ブロック、右上ブロックと称する。例えば、図４に示すＣブロックを処理対象とする場合には、左ブロックとしてＡブロックが特定され、左上ブロックとしてＸブロックが特定され、上ブロックとしてＹブロックが特定され、右上ブロックとしてＺブロックが特定される。
【００３５】
そして、差分値算出部１０３は、各隣接ブロックと対象ブロックとの組に対し、動きベクトルの差分値と、画素の差分値と、を算出する。なお、隣接ブロックのうち左ブロックについてはＳ６０１の処理時点において整数精度動きベクトルのみしか検出されていない。したがって、差分値算出部１０３は、左ブロックの整数精度動きベクトルと対象ブロックの組に対しては、両ブロックの整数精度動きベクトルとを用いて、差分値の算出を行う。一方で、左ブロック以外の隣接ブロック（左上ブロック、上ブロック、右ブロック）については、Ｓ６０１の処理時点において、小数精度動きベクトルが検出済みであるので、各隣接ブロックの動きベクトルとして小数精度動きベクトルを用いる。すなわち、差分値算出部１０３は、左以外の隣接ブロックについては、隣接ブロックの小数精度動きベクトルと対象ブロックの整数精度動きベクトルの差分値を算出する。さらに、差分値算出部１０３は、隣接ブロックの小数精度動きベクトルを対象ブロックに適用することで参照ブロックを特定し、参照ブロックの画素と対象ブロックの画素の差分値を算出する。
【００３６】
続くＳ６０２以降の処理では、各隣接ブロックの算出結果に基づいて、対象ブロックの符号化に用いる動きベクトルを選択する。まず、Ｓ６０２において、選択部１０５は、左ブロックと右上ブロックを比較対象として選択する。そして、選択部１０５は、左ブロックの動きベクトルの差分値が右上ブロックの動きベクトルの差分値以下でかつ左ブロックの画素の差分値が右上ブロックの画素の差分値以下であるという条件を満たすか否かを確認する。なお、説明の便宜上この条件を「左≦右上」と記す。選択部１０５は、条件「左≦右上」を満たす場合には（Ｓ６０２でＹｅｓ）、処理をＳ６０３へ進める。選択部１０５は、条件「左≦右上」を満たさない場合には（Ｓ６０２でＮｏ）、処理をＳ６１０へ進める。
【００３７】
Ｓ６０３において、選択部１０５は、左ブロックと上ブロックを比較対象として選択する。そして、選択部１０５は、左ブロックの動きベクトルの差分値が上ブロックの動きベクトルの差分値以下でかつ左ブロックの画素の差分値が上ブロックの画素の差分値以下であるという条件を満たすか否かを確認する。説明の便宜上、この条件を「左≦上」と記す。選択部１０５は、条件「左≦上」を満たす場合には（Ｓ６０３でＹｅｓ）、処理をＳ６０４へ進める。選択部１０５は、条件「左≦上」を満たさない場合には（Ｓ６０３でＮｏ）、処理をＳ６２０へ進める。
【００３８】
Ｓ６０４において、選択部１０５は、左ブロックと左上ブロックを比較対象として選択する。そして、選択部１０５は、左ブロックの動きベクトルの差分値が左上ブロックの動きベクトルの差分値以下でかつ左ブロックの画素の差分値が左上ブロックの画素の差分値以下であるという条件を満たすか否かを確認する。説明の便宜上、この条件を「左≦左上」と記す。選択部１０５は、条件「左≦左上」を満たす場合には（Ｓ６０４でＹｅｓ）、処理をＳ６０５へ進める。選択部１０５は、条件「左≦左上」を満たさない場合には（Ｓ６０４でＮｏ）、処理をＳ６３０へ進める。
【００３９】
Ｓ６０５において、選択部１０５は、左ブロックが選択条件を満たすか否かを判定する。本処理は、図３を参照しつつ説明したＳ３０２の処理と同様である。すなわち、選択部１０５は、左ブロックに対して算出された動きベクトルの差分値が動きベクトル閾値未満で、かつ画素の差分値が画素閾値未満である場合に、選択条件を満たすと判定する。
選択部１０５は、左ブロックが選択条件を満たす場合には（Ｓ６０５でＹｅｓ）、処理をＳ６０６へ進める。選択部１０５は、左ブロックが選択条件を満たさない場合には（Ｓ６０５でＮｏ）、処理をＳ６４０へ進める。Ｓ６０６における処理は、図３を参照しつつ説明したＳ３０４以降の処理と同様である。すなわち、Ｓ６０６の処理においては、左ブロック、左以外の隣接ブロック、又は対象ブロックの動きベクトルが選択される。選択部１０５は、Ｓ６０６の処理の後、処理をＳ６５０へ進める。
【００４０】
Ｓ６１０において、選択部１０５は、右上ブロックと上ブロックを比較対象として選択する。そして、選択部１０５は、右上ブロックの動きベクトルの差分値が上ブロックの動きベクトルの差分値以下でかつ右上ブロックの画素の差分値が上ブロックの画素の差分値以下であるという条件を満たすか否かを確認する。説明の便宜上、この条件を「右上≦上」と記す。選択部１０５は、条件「右上≦上」を満たす場合には（Ｓ６１０でＹｅｓ）、処理をＳ６１１へ進める。選択部１０５は、条件「右上≦上」を満たさない場合には（Ｓ６１０でＮｏ）、処理をＳ６２０へ進める。
【００４１】
Ｓ６１１において、選択部１０５は、右上ブロックと左上ブロックを比較対象として選択する。そして、選択部１０５は、右上ブロックの動きベクトルの差分値が左上ブロックの動きベクトルの差分値以下でかつ右上ブロックの画素の差分値が左上ブロックの画素の差分値以下であるという条件を満たすか否かを確認する。説明の便宜上、この条件を「右上≦左上」と記す。選択部１０５は、条件「右上≦左上」を満たす場合には（Ｓ６１１でＹｅｓ）、処理をＳ６１２へ進める。選択部１０５は、条件「右上≦左上」を満たさない場合には（Ｓ６１１でＮｏ）、処理をＳ６３０へ進める。
【００４２】
Ｓ６１２において、選択部１０５は、右上ブロックが選択条件を満たすか否かを判定する。本処理は、Ｓ３０２の処理（図３）と同様である。すなわち、選択部１０５は、右上ブロックに対して算出された動きベクトルの差分値がベクトル閾値未満で、かつ画素の差分値が画素閾値未満である場合に、選択条件を満たすと判定する。選択部１０５は、右上ブロックが選択条件を満たす場合には（Ｓ６１２でＹｅｓ）、処理をＳ６１３へ進める。選択部１０５は、右上ブロックが選択条件を満たさない場合には（Ｓ６１２でＮｏ）、処理をＳ６４０へ進める。Ｓ６１３において、選択部１０５は、右上ブロックの符号化に用いる動きベクトルを対象ブロックの符号化に用いる動きベクトルとして選択し、その後処理をＳ６５０へ進める。
【００４３】
Ｓ６２０において、選択部１０５は、上ブロックと左上ブロックを比較対象として選択する。そして、選択部１０５は、上ブロックの動きベクトルの差分値が左上ブロックの動きベクトルの差分値以下でかつ上ブロックの画素の差分値が左上ブロックの画素の差分値以下であるという条件を満たすか否かを確認する。説明の便宜上、この条件を「上≦左上」と記す。選択部１０５は、条件「上≦左上」を満たす場合には（Ｓ６２０でＹｅｓ）、処理をＳ６２１へ進める。選択部１０５は、条件「上≦左上」を満たさない場合には（Ｓ６２０でＮｏ）、処理をＳ６３０へ進める。
【００４４】
Ｓ６２１において、選択部１０５は、上ブロックが選択条件を満たすか否かを判定する。本処理は、Ｓ６１３の処理と同様である。選択部１０５は、上ブロックが選択条件を満たす場合に（Ｓ６２１でＹｅｓ）、処理をＳ６２２へ進める。選択部１０５は、上ブロックが選択条件を満たさない場合には（Ｓ６２１でＮｏ）、処理をＳ６４０へ進める。Ｓ６２２において、選択部１０５は、上ブロックの符号化に用いる動きベクトルを対象ブロックの符号化に用いる動きベクトルとして選択し、その後処理をＳ６５０へ進める。
【００４５】
Ｓ６３０において、選択部１０５は、左上ブロックが選択条件を満たすか否かを判定すう。本処理は、Ｓ６１３の処理と同様である。選択部１０５は、左上ブロックが選択条件を満たす場合に（Ｓ６３０でＹｅｓ）、処理をＳ６３１へ進める。選択部１０５は、左上ブロックが選択条件を満たさない場合には（Ｓ６３０でＮｏ）、処理をＳ６４０へ進める。Ｓ６３１において、選択部１０５は、左上ブロックの符号化に用いる動きベクトルを対象ブロックの符号化に用いる動きベクトルとして選択し、その後処理をＳ６５０へ進める。
【００４６】
Ｓ６４０において、選択部１０５は、対象ブロックから検出される小数精度動きベクトルを対象ブロックの符号化に用いる動きベクトルとして選択する。次に、Ｓ６４１において、小数精度動き検出部１０６は、対象ブロックの小数精度動きベクトルを検出し、その後処理をＳ６５０へ進める。Ｓ６５０において、符号化部１０７は、対象ブロックに対して選択された動きベクトルを用いて対象ブロックの符号化を行う。なお、Ｓ６５０の処理は、図３を参照しつつ説明したＳ３０９の処理と同様である。以上で、第２の実施形態に係る符号化装置１００による符号化処理が完了する。なお、第２の実施形態に係る符号化装置１００のこれ以外の構成及び処理は、第１の実施形態に係る符号化装置１００の構成及び処理と同様である。
【００４７】
以上のように、第２の実施形態に係る符号化装置１００においては、複数の隣接ブロックそれぞれについて動きベクトルの差分値と、画素の差分値を算出し、算出結果に応じて１つの隣接ブロックを選択する。そして、符号化装置１００は、選択した隣接ブロックの符号化に用いる動きベクトルが対象ブロックの符号化に用いる動きベクトルとして選択可能か否かを選択条件に従い判断する。これにより、符号化装置１００は、少ない計算コストで適切な符号化を行うことができる。ここで、１つの隣接ブロックを選択する処理は、ブロック選択処理の一例である。
【００４８】
また、第２の実施形態に係る符号化装置１００においては、対象ブロックに隣接するすべての隣接ブロックの動きベクトルの差分値と画素差分値が等しく、かつ選択条件を満たす場合には、左ブロックの動きベクトルが優先的に選択されることになる。これは、ＨＥＶＣにおいては、対象ブロックの左ブロックを表すインデックスがその他の隣接ブロックを表すインデックスより符号量が小さくなることに対応したものである。すなわち、左ブロックの動きベクトルを優先的に選択することにより、符号量をより小さくすることができる。
【００４９】
第２の実施形態の変形例について説明する。本実施形態においては、符号化装置１００においては、対象ブロックに対し、優先度が設定されており、優先度に応じて、左、右上、上、左上のブロックが順に優先的に選択されるようになっていた。ただし、符号化装置１００は、複数の隣接ブロックのうち、いずれを優先的に選択するかを、任意に設定することができる。例えば、符号化装置は、左、左上、上、右上のブロックが順に選択されるような優先度を設定してもよい。また、他の例としては、右上、上、左上、左の順に選択されるような優先度を設定してもよい。符号化装置１００は、このように左以外の隣接ブロックの優先度を高くすることにより、小数精度動きベクトルを検出済みの隣接ブロックを優先的に選択することができる。
【００５０】
また、実施形態の変形例としては、図２を参照しつつ説明した符号化装置１００の各部をそれぞれハードウェアで実現するのにかえて、ＣＰＵがＲＯＭやＨＤＤに格納されているプログラムを読み出し、このプログラムを実行することにより実現してもよい。図７は、この場合の符号化装置１００のハードウェア構成図である。符号化装置１００は、ＣＰＵ７０１と、ＲＯＭ７０２と、ＲＡＭ７０３と、ＨＤＤ７０４と、表示部７０５と、入力部７０６と、通信部７０７とを有している。ＣＰＵ７０１は、ＲＯＭ７０２に記憶された制御プログラムを読み出して各種処理を実行する。ＲＡＭ７０３は、ＣＰＵ７０１の主メモリ、ワークエリア等の一時記憶領域として用いられる。ＨＤＤ７０４は、各種データや各種プログラム等を記憶する。表示部７０５は、各種情報を表示する。入力部７０６は、キーボードやマウスを有し、ユーザによる各種操作を受け付ける。通信部７０７は、ネットワークを介して外部装置との通信処理を行う。
【００５１】
また、他の例としては、ＣＰＵ７０１は、ＲＯＭ７０２等に替えて、ＳＤカード等の記録媒体に格納されているプログラムを読み出してもよい。また、他の例としては、符号化装置１００の機能や処理の少なくとも一部は、例えば複数のＣＰＵ、ＲＡＭ、ＲＯＭ、及びストレージを協働させることにより実現してもよい。
【００５２】
以上、本発明の好ましい実施形態について詳述したが、本発明は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【００５３】
（その他の実施例）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００５４】
１００  符号化装置
１０１  整数精度動き検出部
１０３  差分値算出部
１０５  選択部
１０６  小数精度動き検出部
１０７  符号化部
【図１】
2019057886.tif 000003
【図２】
2019057886.tif 000004
【図３】
2019057886.tif 000005
【図４】
2019057886.tif 000006
【図５】
2019057886.tif 000007
【図６】
2019057886.tif 000008
【図７】
2019057886.tif 000009