(57)【要約】【課題】  オプティカルフローの正確性を向上させるための技術を提供すること。【解決手段】  ｆｌｏｗ’［ｌｖ＋１］の位置Ｃを基準とした複数の位置の動きベクトルのうちＩ２［ｌｖ］の位置Ｃから該動きベクトルに応じて離間した位置の画素値と、Ｉ１［ｌｖ］の位置Ｃの画素値と、の差分が小さい順に１つ以上の動きベクトルを特定する。該１つ以上の動きベクトルに基づく１つの動きベクトルを位置Ｃにおける要素とするｆｌｏｗ”［ｌｖ＋１］、Ｉ１［ｌｖ］、Ｉ２［ｌｖ］を用いてｆｌｏｗ［ｌｖ］を生成する。【選択図】  図１
2018107615.tif 000002
【特許請求の範囲】
【請求項１】
第１の画像及び該第１の画像を縮小することで得られる複数の縮小画像のそれぞれを画像サイズが小さい順に第１の取得画像として取得する手段と、
第２の画像及び該第２の画像を縮小することで得られる複数の縮小画像のそれぞれを画像サイズが小さい順に第２の取得画像として取得する手段と、
前回取得した第２の取得画像について生成済みのオプティカルフローを今回取得した第２の取得画像のサイズに応じて変換した変換済みオプティカルフローを生成する手段と、
前記変換済みオプティカルフローにおける着目座標位置を基準とした複数の位置に対応する動きベクトルのうち、前記今回取得した第２の取得画像内の該着目座標位置から該動きベクトルに応じて離間した画素位置の画素値と、前記今回取得した第２の取得画像と同画像サイズの第１の取得画像内の前記着目座標位置に対応する画素位置の画素値と、の差分が小さい順に１つ以上の動きベクトルを特定する特定手段と、
前記１つ以上の動きベクトルに基づいて特定した１つの動きベクトルを前記着目座標位置における要素とする新オプティカルフローを生成し、該新オプティカルフローと、前記今回取得した第２の取得画像と同画像サイズの第１の取得画像と、前記今回取得した第２の取得画像と、を用いて、前記今回取得した第２の取得画像に対するオプティカルフローを生成する生成手段と、
前記生成手段が前記第２の画像について生成したオプティカルフローを出力する出力手段と
を備えることを特徴とする画像処理装置。
【請求項２】
前記特定手段は、前記差分が最小となる１つの動きベクトルを特定し、
前記生成手段は、前記特定手段が特定した１つの動きベクトルを前記着目座標位置における要素とする新オプティカルフローを生成する
ことを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記特定手段は、前記差分が小さい順に複数の動きベクトルを特定し、
前記生成手段は、前記特定手段が特定した複数の動きベクトルの平均を前記着目座標位置における要素とする新オプティカルフローを生成することを特徴とする請求項１に記載の画像処理装置。
【請求項４】
前記特定手段は、
前記変換済みオプティカルフローの各座標位置におけるエッジ量を求め、
前記変換済みオプティカルフローにおける着目座標位置を基準とした複数の位置に対応する動きベクトルのうち、前記着目座標位置から該動きベクトルに応じて離間した画素位置におけるエッジ量と前記差分との積が小さい順に１つ以上の動きベクトルを特定する
ことを特徴とする請求項１乃至３の何れか１項に記載の画像処理装置。
【請求項５】
前記特定手段は、
前記変換済みオプティカルフローの各座標位置におけるエッジ量を求め、
前記変換済みオプティカルフローにおける着目座標位置を基準とした複数の位置に対応する動きベクトルのうち、該位置におけるエッジ量と前記差分との積が小さい順に１つ以上の動きベクトルを特定する
ことを特徴とする請求項１乃至３の何れか１項に記載の画像処理装置。
【請求項６】
前記第１の画像及び前記第２の画像のそれぞれは、複数台の撮像装置において同時刻、若しくは互いに異なる時刻に撮像された画像であることを特徴とする請求項１乃至５の何れか１項に記載の画像処理装置。
【請求項７】
前記第１の画像及び前記第２の画像のそれぞれは、単一の撮像装置において互いに異なる時刻に撮像された画像であることを特徴とする請求項１乃至５の何れか１項に記載の画像処理装置。
【請求項８】
前記第１の画像及び前記第２の画像のそれぞれは、ステレオ画像を構成する一方の視点の画像及び他方の視点の画像であることを特徴とする請求項１乃至５の何れか１項に記載の画像処理装置。
【請求項９】
画像処理装置が行う画像処理方法であって、
前記画像処理装置の第１の取得手段が、第１の画像及び該第１の画像を縮小することで得られる複数の縮小画像のそれぞれを画像サイズが小さい順に第１の取得画像として取得する工程と、
前記画像処理装置の第２の取得手段が、第２の画像及び該第２の画像を縮小することで得られる複数の縮小画像のそれぞれを画像サイズが小さい順に第２の取得画像として取得する工程と、
前記画像処理装置のオプティカルフローを生成する手段が、前回取得した第２の取得画像について生成済みのオプティカルフローを今回取得した第２の取得画像のサイズに応じて変換した変換済みオプティカルフローを生成する工程と、
前記画像処理装置の特定手段が、前記変換済みオプティカルフローにおける着目座標位置を基準とした複数の位置に対応する動きベクトルのうち、前記今回取得した第２の取得画像内の該着目座標位置から該動きベクトルに応じて離間した画素位置の画素値と、前記今回取得した第２の取得画像と同画像サイズの第１の取得画像内の前記着目座標位置に対応する画素位置の画素値と、の差分が小さい順に１つ以上の動きベクトルを特定する特定工程と、
前記画像処理装置の生成手段が、前記１つ以上の動きベクトルに基づいて特定した１つの動きベクトルを前記着目座標位置における要素とする新オプティカルフローを生成し、該新オプティカルフローと、前記今回取得した第２の取得画像と同画像サイズの第１の取得画像と、前記今回取得した第２の取得画像と、を用いて、前記今回取得した第２の取得画像に対するオプティカルフローを生成する生成工程と、
前記画像処理装置の出力手段が、前記生成工程で前記第２の画像について生成したオプティカルフローを出力する出力工程と
を備えることを特徴とする画像処理方法。
【請求項１０】
コンピュータを、請求項１乃至８の何れか１項に記載の画像処理装置の各手段として機能させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像間のオプティカルフローを求めるための技術に関するものである。
【背景技術】
【０００２】
近年、２つの画像間の各画素の対応付けを行う技術の重要性は高まっている。対応とは、基準画像の画素と同一であるとみなす参照画像の画素との関係であり、二点の座標で表現できる。ステレオ画像を入力した場合、その二点の位置関係から画素の奥行きの位置を算出でき、３次元画像処理に応用できる。また、連続して撮像された画像（動画）を入力し、その対応関係を相対座標として表現すれば、それは動きベクトルとなる。この動きベクトルの集合であるオプティカルフローを利用することによって、動体の解析、ノイズ除去、手ぶれ補正などが可能となる。なお、撮像時のシャッタースピードが十分に速ければ、動画、ステレオ画像ともに、画素の対応付けを行っており、同一の手法で対応（動きベクトル）を算出することができる。画素の対応（動きベクトル）を得る方法には、テンプレートマッチング（ブロックマッチングとも呼ばれる）、勾配法、特徴量比較による探索などがある。
【０００３】
テンプレートマッチングでは、画素に対し、その画素および周辺画素の集合であるパッチを設定する。次に基準画像の着目画素ごとに、参照画像に設定する探索点をずらしながら、着目画素のパッチと探索点のパッチの相関を求め、もっとも相関が高い探索点と着目画素の対応を動きベクトルとする。着目画素を走査して処理することにより、画素ごとの複数の動きベクトルの集合、つまり、オプティカルフローを得る。
【０００４】
勾配法は、画素の時空間の輝度変化の方向と大きさから、動きベクトルを算出する方法である。ただし、画素一点の動きベクトルを算出することは難しいため、例えば着目画素の周辺の画素は同じ動きであると仮定して、着目画素を中心とするパッチを設定して、パッチ内の画素の平均的な時空間の輝度変化から動きベクトルを算出する。勾配法の手法には、例えば、Ｌｕｃａｓ  Ｋａｎａｄｅ法（以下、ＬＫ法と称する：非特許文献１）や、Ｈｏｒｎ＆Ｓｃｈｕｎｃｋ  法（以下、ＨＫ法と称する：非特許文献２）がある。
【０００５】
特徴量比較による探索とは、画素の特徴量を多次元ベクトルで表現し、基準画像の着目画素の特徴点と参照画像上の画素の特徴量のノルムが小さい画素を対応付ける方法である。具体的には、ＳＩＦＴ法やＢＲＩＥＦ法などがあり、非特許文献３に解説されている。
【０００６】
テンプレートマッチングや勾配法には、大きな動きを検出できない、あるいは、検出精度が低い、という問題がある。そこで、ピラミッド処理と呼ばれる手法を併用することが多い。ピラミッド処理は、入力画像に対して、複数の縮小率で縮小した縮小画像を用意し、最小の縮小画像から等倍の画像の順番で、縮小画像の処理結果をより解像度の高い画像の処理に入力として処理する方式の総称である。このピラミッド処理をＬＫ法に適用した手法がピラミッドＬＫ法（非特許文献４）である。また、ピラミッド処理には特許文献１などの手法もある。特許文献１では、多重解像度画像の各解像度（各階層）の画像毎に、信頼性を評価し、信頼性の低いデータについては解像度毎に修正する。この修正により、ある解像度で求められた対応について誤りがあった場合にも、それがその解像度の中で修正され、対応の誤りが次の高解像度画像の処理に伝搬されにくくなる。
【０００７】
大きな動きを検出したとき、動体が動くことによって隠れる領域（現れる領域）であるオクルージョンが発生する。このオクルージョンを考慮したオプティカルフロー取得方法には、非特許文献５がある。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００１−１４８０１２号公報
【非特許文献】
【０００９】
【非特許文献１】Ｂ．  Ｄ．  Ｌｕｃａｓ  ａｎｄ  Ｔ．  Ｋａｎａｄｅ  （１９８１），  Ａｎ  ｉｔｅｒａｔｉｖｅ  ｉｍａｇｅ  ｒｅｇｉｓｔｒａｔｉｏｎ  ｔｅｃｈｎｉｑｕｅ  ｗｉｔｈ  ａｎ  ａｐｐｌｉｃａｔｉｏｎ  ｔｏ  ｓｔｅｒｅｏ  ｖｉｓｉｏｎ．Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  Ｉｍａｇｉｎｇ  Ｕｎｄｅｒｓｔａｎｄｉｎｇ  Ｗｏｒｋｓｈｏｐ，  ｐａｇｅｓ  １２１−−１３０
【非特許文献２】Ｂ．Ｋ．Ｐ．  Ｈｏｒｎ  ａｎｄ  Ｂ．Ｇ．  Ｓｃｈｕｎｃｋ，  ”Ｄｅｔｅｒｍｉｎｉｎｇ  ｏｐｔｉｃａｌ  ｆｌｏｗ．”  Ａｒｔｉｆｉｃｉａｌ  Ｉｎｔｅｌｌｉｇｅｎｃｅ，  ｖｏｌ  １７，  ｐｐ  １８５?２０３，  １９８１
【非特許文献３】局所勾配特徴抽出技術−ＳＩＦＴ以降のアプローチ−．  藤吉弘亘，安倍満，“局所勾配特徴抽出技術−ＳＩＦＴ以降のアプローチ−”，精密工学会誌  ７７（１２），ｐｐ１１０９−１１１６，２０１１．
【非特許文献４】Ｐｙｒａｍｉｄａｌ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  ｏｆ  ｔｈｅ  Ｌｕｃａｓ  Ｋａｎａｄｅ  Ｆｅａｔｕｒｅ  ＴｒａｃｋｅｒＤｅｓｃｒｉｐｔｉｏｎ  ｏｆ  ｔｈｅ  ａｌｇｏｒｉｔｈｍＪｅａｎ−Ｙｖｅｓ  ＢｏｕｇｕｅｔＨｔｔｐ：／／ｒｏｂｏｔｓ．ｓｔａｎｆｏｒｄ．ｅｄｕ／ｃｓ２２３ｂ０４／ａｌｇｏ＿ｔｒａｃｋｉｎｇ．ｐｄｆ
【非特許文献５】動画像編集のための動き推定，鈴木裕一，  山口  泰  ，情報処理学会研究報告．  グラフィクスとＣＡＤ研究会報告  ２００９−ＣＧ−１３５（１）  １−６  ２００９年７月
【発明の概要】
【発明が解決しようとする課題】
【００１０】
ピラミッド処理を利用してオプティカルフローを検出する方法において、解像度の低い階層の画像の画素には、異なる動きを持つ動被写体の境界が含まれることがあり、このとき画素の正しい動きを表現できない。そして、縮小画像の処理結果をより解像度の高い階層の入力として処理すると、この誤った動きが次の階層へ次々に伝播してしまう。結果として等倍画像の処理結果である最終的なオプティカルフローにおいて、動被写体の境界のオプティカルフローの正確性が低くなることがあった。
【００１１】
なお、特許文献１には、「信頼性の評価および修正を解像度毎に行わない場合には、低い階層の画像で誤った対応を求めてしまったときに、その後の解像度の高い階層では対応の修正を行うことが不可能であるため、対応点探索の精度が大幅に低下する。」とある。つまり、特許文献１に関する技術は、多重解像度画像の各解像度（各階層）の画像毎に、信頼性を評価し、信頼性の低いデータ（動きベクトル）については解像度毎に修正する技術である。同一階層内、つまり、解像度の低い画像で信頼度を判定しているため、「解像度の低い階層の画像の画素には異なる動きを持つ動被写体の境界が含まれる」ときにおこる問題を解決していない。
【００１２】
本発明はこのような問題に鑑みてなされたものであり、オプティカルフローの正確性を向上させるための技術を提供する。
【課題を解決するための手段】
【００１３】
本発明の一様態は、第１の画像及び該第１の画像を縮小することで得られる複数の縮小画像のそれぞれを画像サイズが小さい順に第１の取得画像として取得する手段と、第２の画像及び該第２の画像を縮小することで得られる複数の縮小画像のそれぞれを画像サイズが小さい順に第２の取得画像として取得する手段と、前回取得した第２の取得画像について生成済みのオプティカルフローを今回取得した第２の取得画像のサイズに応じて変換した変換済みオプティカルフローを生成する手段と、前記変換済みオプティカルフローにおける着目座標位置を基準とした複数の位置に対応する動きベクトルのうち、前記今回取得した第２の取得画像内の該着目座標位置から該動きベクトルに応じて離間した画素位置の画素値と、前記今回取得した第２の取得画像と同画像サイズの第１の取得画像内の前記着目座標位置に対応する画素位置の画素値と、の差分が小さい順に１つ以上の動きベクトルを特定する特定手段と、前記１つ以上の動きベクトルに基づいて特定した１つの動きベクトルを前記着目座標位置における要素とする新オプティカルフローを生成し、該新オプティカルフローと、前記今回取得した第２の取得画像と同画像サイズの第１の取得画像と、前記今回取得した第２の取得画像と、を用いて、前記今回取得した第２の取得画像に対するオプティカルフローを生成する生成手段と、前記生成手段が前記第２の画像について生成したオプティカルフローを出力する出力手段とを備えることを特徴とする。
【発明の効果】
【００１４】
本発明の構成によれば、オプティカルフローの正確性を向上させることができる。
【図面の簡単な説明】
【００１５】
【図１】画像処理装置のハードウェア構成例を示すブロック図。
【図２】従来のオプティカルフローの算出方法のフローチャート。
【図３】第１の実施形態に係るオプティカルフローの算出処理のフローチャート。
【図４】複数の候補位置の配置パターンの一例を示す図。
【図５】ｎ番目の差分ＳＡＤに対応するｉを求めるための処理のフローチャート。
【図６】第１の実施形態の効果を説明する図。
【図７】第２の実施形態に係るオプティカルフローの算出処理のフローチャート。
【発明を実施するための形態】
【００１６】
以下、添付図面を参照し、本発明の実施形態について説明する。なお、以下説明する実施形態は、本発明を具体的に実施した場合の一例を示すもので、特許請求の範囲に記載した構成の具体的な実施例の１つである。
【００１７】
［第１の実施形態］
本実施形態では、次のような構成を有する画像処理装置の一例について説明する。この画像処理装置は、第１の画像及び該第１の画像を縮小することで得られる複数の縮小画像のそれぞれを画像サイズが小さい順に第１の取得画像として取得する。また、画像処理装置は、第２の画像及び該第２の画像を縮小することで得られる複数の縮小画像のそれぞれを画像サイズが小さい順に第２の取得画像として取得する。また画像処理装置は、前回取得した第２の取得画像について生成済みのオプティカルフローを今回取得した第２の取得画像のサイズに応じて変換した変換済みオプティカルフローを生成する。そして画像処理装置は、変換済みオプティカルフローにおける着目座標位置を基準とした複数の位置に対応する動きベクトルのうち、今回取得した第２の取得画像内の該着目座標位置から該動きベクトルに応じて離間した画素位置の画素値と、今回取得した第２の取得画像と同画像サイズの第１の取得画像内の着目座標位置に対応する画素位置の画素値と、の差分が小さい順に１つ以上の動きベクトルを特定する。そして画像処理装置は、該１つ以上の動きベクトルに基づいて特定した１つの動きベクトルを着目座標位置における要素とする新オプティカルフローを生成し、該新オプティカルフローと、今回取得した第２の取得画像と同画像サイズの第１の取得画像と、今回取得した第２の取得画像と、を用いて、今回取得した第２の取得画像に対するオプティカルフローを生成する。そして画像処理装置は、第２の画像について生成したオプティカルフローを出力する。
【００１８】
先ず、本実施形態を含む以下の各実施形態において用いる様々な定義について説明する。以下の説明における「オプティカルフロー」（以下、ＯＦと称する場合がある）とは、基準画像に対する対象画像の動きベクトルを画素毎に登録したマップ画像である。つまり、オプティカルフローは基準画像（対象画像）と同じ解像度（縦横の画素数）を有し、基準画像の各画素に対応するオプティカルフローの要素は二次元ベクトルとなっている。
【００１９】
以下では、画像をＩと表記した場合、該画像Ｉ上の画素位置（ｘ、ｙ）における画素値はＩ（ｘ，ｙ）と表記する。オプティカルフローにおいて、画像Ｉ上の画素位置（ｘ、ｙ）に対応する要素は（ｕ（ｘ，ｙ），ｖ（ｘ，ｙ））と表記する。ｕ（ｘ，ｙ）は、画像Ｉの画素位置（ｘ、ｙ）に対応する動きベクトルの水平方向成分（Ｘ成分）を表し、ｖ（ｘ，ｙ）は、画像Ｉの画素位置（ｘ、ｙ）に対応する動きベクトルの垂直方向成分（Ｙ成分）を表している。なお、画素位置（ｘ、ｙ）をベクトルＸとして表す場合もあり、この場合、画像Ｉ上の画素位置（ｘ、ｙ）における画素値はＩ（Ｘ）と表記する。同様に、オプティカルフローにおいて、画像Ｉ上の画素位置（ｘ、ｙ）に対応する要素は（ｕ（Ｘ），ｖ（Ｘ））と表記する。また、以下では、ベクトル表記される変数Ａに下付き文字ｘを付したＡｘは、Ａのｘ成分を表すものとし、変数Ａに下付き文字ｙを付したＡｙは、Ａのｙ成分を表すものとする。
【００２０】
本実施形態では、単一の撮像装置において互いに異なる時刻に撮像された第１の画像（画像１）及び第２の画像（画像２）を取得し、第２の画像を基準とした第１の画像のオプティカルフローを生成する。なお、第１の画像及び第２の画像は単一の撮像装置において互いに異なる時刻に撮像された画像に限らず、複数台の撮像装置において同時刻に撮像された画像であっても良いし、複数台の撮像装置において互いに異なる時刻に撮像された画像であっても良い。また、本実施形態では、第１の画像及び第２の画像はモノクロ画像とし、画素値は０（黒）〜１（白）の実数値で表されるものとする。しかし、第１の画像及び第２の画像はカラー画像等であっても良いし、画素値が８ビットや１６ビット等で表されるものであっても良い。また、本実施形態では、画素位置や動きベクトルの成分を実数として扱う。よって、前述の表記法において座標値を実数で渡した場合には、バイリニア補間によって算出された画素値、あるいは、動きベクトルを得るものとする。
【００２１】
また、以下に説明するフローチャートに示した全てのステップは上から順に実行されることに限らず、一部の処理ステップで順番を入れ替えても良いし、一部の処理ステップを並列に実行しても良い。
【００２２】
先ず、本実施形態に係る画像処理装置のハードウェア構成例について、図１（ａ）のブロック図を用いて説明する。なお、図１（ａ）に示した構成は、本実施形態に係る画像処理装置が行うものとして後述する各処理を実現可能な構成の一例であって、本実施形態に係る画像処理装置のハードウェア構成として適用可能な構成は、図１（ａ）に示した構成に限らない。
【００２３】
ＣＰＵ１０２は、メモリ１０３に格納されているコンピュータプログラムやデータを用いて処理を実行する。これによりＣＰＵ１０２は、画像処理装置全体の動作制御を行うと共に、画像処理装置が行うものとして後述する各処理を実行若しくは制御する。
【００２４】
メモリ１０３は、ＨＤＤ（ハードディスクドライブ）１０４からロードされたコンピュータプログラムやデータを格納するためのエリア、Ｉ／Ｆ（インターフェース）１９０を介して外部から受信したデータを格納するためのエリアを有する。更にメモリ１０３は、ＣＰＵ１０２が各種の処理を実行する際に用いるワークエリアを有する。このようにメモリ１０３は、各種のエリアを適宜提供することができる。
【００２５】
ＨＤＤ１０４には、ＯＳ（オペレーティングシステム）や、画像処理装置が行うものとして後述する各処理をＣＰＵ１０２に実行若しくは制御させるためのコンピュータプログラムやデータが保存されている。ＨＤＤ１０４に保存されているデータには、以下の説明において既知の情報として説明するものが含まれている。ＨＤＤ１０４に保存されているコンピュータプログラムやデータは、ＣＰＵ１０２による制御に従って適宜メモリ１０３にロードされ、ＣＰＵ１０２による処理対象となる。
【００２６】
Ｉ／Ｆ１９０は、画像処理装置が外部の機器とのデータ通信を行うための通信インターフェースとして機能するものであり、例えば、画像処理装置が以下の処理において用いる画像は、このＩ／Ｆ１９０を介して外部機器から取得される。ＣＰＵ１０２、メモリ１０３、ＨＤＤ１０４、Ｉ／Ｆ１９０は何れも、バス１０１に接続されている。
【００２７】
次に、従来のオプティカルフローの算出方法について、図２のフローチャートに沿って説明する。図２のフローチャートに従った処理は、ピラミッドＬＫを利用したオプティカルフロー算出処理である。図２に示したフローチャートに従った処理は、１枚の画像に対するオプティカルフローを求めるための処理である。然るに、例えば、複数枚の画像のそれぞれについてオプティカルフローを求める場合には、該複数の画像のそれぞれについて図２のフローチャートに従った処理を行えばよい。以下では、図１（ａ）の構成を有する画像処理装置が図２のフローチャートに従った処理を行うケースについて説明する。また、図２のフローチャートに従った処理を開始する段階では、既にメモリ１０３若しくはＨＤＤ１０４には、上記の第１の画像及び第２の画像が格納されているものとする。
【００２８】
ステップＳ２０１０では、ＣＰＵ１０２は、第１の画像Ｉ１及び第２の画像Ｉ２から生成する縮小画像の枚数である最大階層数（ｍａｘ＿ｌｖ）を取得する。最大階層数ｍａｘ＿ｌｖは予め画像処理装置に設定されていたものであっても良いし、ユーザに入力させても良い。本実施形態では、Ｉ１（Ｉ２）を縮小率ｓｃａｌｅ＿ｆａｃｔｏｒ（以下ｓｆと呼称する：０＜ｓｆ＜１）に従ってｍａｘ＿ｌｖ回縮小した縮小画像のサイズ（縦及び／又は横サイズ）がＩ１（Ｉ２）のサイズ（縦及び／又は横サイズ）の５％以下となるまで縮小を行うものとした。このとき、ｓｃａｌｅ＿ｆａｃｔｏｒ＝０．５とすると、以下の式１に示す如く、ｍａｘ＿ｌｖ＝５となる。
【００２９】
【数１】
2018107615.tif 000003
【００３０】
以下では、Ｉ１を縮小率ｓｆに従ってｌｖ（ｌｖは０〜ｍａｘ＿ｌｖを満たす整数）回縮小した縮小画像をＩ１［ｌｖ］と表記する。また、Ｉ２を縮小率ｓｆに従ってｌｖ回縮小した縮小画像をＩ２［ｌｖ］と表記する。つまり、Ｉ１＝Ｉ１［０］、Ｉ２＝Ｉ２［０］である。Ｉ１に対するＩ１［ｌｖ］の縮小率ｓｃａｌｅ（Ｉ２に対するＩ２［ｌｖ］の縮小率ｓｃａｌｅ）は以下の式２で表される。
【００３１】
【数２】
2018107615.tif 000004
【００３２】
つまり、Ｉ１を縮小率ｓｃａｌｅに従って縮小することでＩ１［ｌｖ］が得られ、Ｉ２を縮小率ｓｃａｌｅに従って縮小することでＩ２［ｌｖ］が得られる。以下では一例として、ｓｆ＝０．５であるものとするが、ｓｆの値は０より大きく１未満であれば如何なる値であっても良い。なお、Ｉ１［ｍａｘ＿ｌｖ］（Ｉ２［ｍａｘ＿ｌｖ］）のサイズは、画像間の動き検出対象の動きが大きいほど小さく設定すべきであるが、処理時間など様々な要素によって応じて最適な設定をすることが望ましい。また、画像の縮小処理の際には、バイキュービック法を用いても良いし、Ｌａｎｃｚｏｓ  ３−ｌｏｂｅｄ法などの方法を用いてもよい。
【００３３】
そしてＣＰＵ１０２は、変数ｌｖの値にｍａｘ＿ｌｖを設定する。以下では、Ｉ１［ｌｖ］及びＩ２［ｌｖ］を階層ｌｖにおける画像、Ｉ１［０］及びＩ２［０］は最小階層における画像、Ｉ１［ｍａｘ＿ｌｖ］及びＩ２［ｍａｘ＿ｌｖ］は最大階層における画像と称する場合がある。
【００３４】
ステップＳ２０２０では、ＣＰＵ１０２は、ｌｖ＝ｍａｘ＿ｌｖであるか否かを判断する。この判断の結果、ｌｖ＝ｍａｘ＿ｌｖであれば、処理はステップＳ２０２５に進み、ｌｖ≠ｍａｘ＿ｌｖであれば、処理はステップＳ２０３０に進む。
【００３５】
ステップＳ２０２５では、ＣＰＵ１０２は、階層（ｍａｘ＿ｌｖ＋１）におけるオプティカルフローの全ての要素の値を０に初期化する。以下では、階層ｌｖにおけるオプティカルフローをｆｌｏｗ［ｌｖ］と表記する。つまり、ｆｌｏｗ［ｍａｘ＿ｌｖ＋１］のサイズは、ｆｌｏｗ［ｍａｘ＿ｌｖ］のｓｆ倍である。ｆｌｏｗ［ｌｖ］の解像度はＩ１［ｌｖ］、Ｉ２［ｌｖ］の解像度と同じである。そして処理はステップＳ２０５０に進む。
【００３６】
一方、ステップＳ２０３０では、ＣＰＵ１０２は、現在の変数ｌｖの値を上記の式２に代入して、縮小率ｓｃａｌｅを求める。そしてステップＳ２０４０でＣＰＵ１０２は、最近求めたオプティカルフロー（ｆｌｏｗ［ｌｖ＋１］）の各要素の値（動きベクトルの成分値）を１／ｓｆ倍してから、該オプティカルフローの縦横サイズを１／ｓｆ倍に拡大したｆｌｏｗ’［ｌｖ＋１］を生成する。拡大では、ＲＧＢ画像の拡大においてＲ、Ｇ，Ｂそれぞれの成分を独立して処理するのと同様に、動きベクトルのＸ成分、Ｙ成分を独立して処理する。この拡大には、バイリニア補間を用いても良いし、バイキュービック法等の他の方法を採用しても良い。
【００３７】
ステップＳ２０５０では、ＣＰＵ１０２は、第１の画像Ｉ１をステップＳ２０３０で求めた縮小率ｓｃａｌｅで縮小した縮小画像Ｉ１［ｌｖ］を生成する。更にＣＰＵ１０２は、第２の画像Ｉ２をステップＳ２０３０で求めた縮小率ｓｃａｌｅで縮小した縮小画像Ｉ２［ｌｖ］を生成する。本実施形態では、エイリアシングが発生しにくい画像縮小方法として面積平均法を利用しているが、これに限定されず、例えばＬａｎｃｚｏｓ  ３−ｌｏｂｅｄ法などを用いてもよい。
【００３８】
ステップＳ２０６０では、ＣＰＵ１０２は、Ｉ１［ｌｖ］の各画素を水平・垂直に一次微分することで、Ｉ１ｘ［ｌｖ］，Ｉ１ｙ［ｌｖ］を生成する。Ｉ１ｘ［ｌｖ］，Ｉ１ｙ［ｌｖ］は、それぞれＩ１［ｌｖ］に水平方向のＳｏｂｅｌフィルタをかけた画像、垂直方向のＳｏｂｅｌフィルタをかけた画像である。同様にＣＰＵ１０２は、Ｉ２［ｌｖ］の各画素を水平・垂直に一次微分することで、Ｉ２ｘ［ｌｖ］，Ｉ２ｙ［ｌｖ］を生成する。Ｉ２ｘ［ｌｖ］，Ｉ２ｙ［ｌｖ］は、それぞれＩ２［ｌｖ］に水平方向のＳｏｂｅｌフィルタをかけた画像、垂直方向のＳｏｂｅｌフィルタをかけた画像である。本実施形態では、一次微分はＳｏｂｅｌフィルタによって実現されるものとするが、これに限らない。
【００３９】
ステップＳ２０７０では、ＣＰＵ１０２は、Ｉ１［ｌｖ］，Ｉ２［ｌｖ］，Ｉ１ｘ［ｌｖ］，Ｉ１ｙ［ｌｖ］，Ｉ２ｘ［ｌｖ］，Ｉ２ｙ［ｌｖ］，ｆｌｏｗ’［ｌｖ＋１］からＬＫ法により、オプティカルフローｆｌｏｗ［ｌｖ］を生成する。ここで、ＬＫ法について説明する。説明上、Ｉ１＝Ｉ１［ｌｖ］，Ｉ２＝Ｉ２［ｌｖ］，Ｉ１ｘ＝Ｉ１ｘ［ｌｖ］，Ｉ１ｙ＝Ｉ１ｙ［ｌｖ］，Ｉ２ｘ＝Ｉ２ｘ［ｌｖ］，Ｉ２ｙ＝Ｉ２ｙ［ｌｖ］として説明する。
【００４０】
ここで、オプティカルフローｆｌｏｗ’［ｌｖ＋１］において着目画素位置Ｃ（＝（Ｃｘ、Ｃｙ））に対応する要素である動きベクトルをｕ（Ｃ）と表記する（以下の式３を参照）。
【００４１】
【数３】
2018107615.tif 000005
【００４２】
そして、上記の式３と以下の式４〜１１を用いて、ｆｌｏｗ［ｌｖ］において着目画素位置Ｃに対応する要素である動きベクトルｆｌｏｗ［ｌｖ］（Ｃ）を求める。
【００４３】
【数４】
2018107615.tif 000006
【００４４】
【数５】
2018107615.tif 000007
【００４５】
【数６】
2018107615.tif 000008
【００４６】
【数７】
2018107615.tif 000009
【００４７】
【数８】
2018107615.tif 000010
【００４８】
式中のΣは積分を示している。本実施形態では、着目画素位置を中心とすると７画素×７画素の領域内での積分を行うものとする。つまり、ｉは０から４８の値をとり、Ｘｉは、着目画素位置を中心とする４９点の画素の相対座標である。
【００４９】
式４、式７はＬＫ法における中間データであるＡ，ｂを算出する式である。Ａやｂを算出するには式４、式７で十分であるが、ｕを利用して画素をワーピングした画像Ｉ２ｘｗ、Ｉ２ｙｗを事前に作っておき、式５，式８を適用しても処理としては道義である。
【００５０】
式６は、Ｉｔ（Ｃ）の定義である。式９は、Ａ、ｂと動きベクトルの差分（ｄｕ，ｄｖ）ｔの関係を表す式である。式１０は、（ｄｕ，ｄｖ）ｔを直接算出する式９の変形式である。式１１は、最終的な動きベクトルを算出し、ｆｌｏｗ［ｌｖ］（Ｃ）を生成する式である。Ｉ１［ｌｖ］（Ｉ２［ｌｖ］）の各画素位置を着目画素位置Ｃとして上記の処理を行うことで、オプティカルフローｆｌｏｗ［ｌｖ］を得る。
【００５１】
ステップＳ２０８０では、ＣＰＵ１０２は、変数ｌｖの値を１つデクリメントする。そしてステップＳ２０９０では、ＣＰＵ１０２は、変数ｌｖの値が０以上であるか否かを判断する。この判断の結果、変数ｌｖの値が０以上である場合には、処理はステップＳ２０２０に進み、変数ｌｖの値が０未満であれば、ＣＰＵ１０２は、以上の処理により生成されたｆｌｏｗ［０］を出力する。そして図２のフローチャートに従った処理は終了する。ｆｌｏｗ［０］の出力先は特定の出力先に限らない。例えば、ｆｌｏｗ［０］をメモリ１０３やＨＤＤ１０４等のメモリに出力しても良いし、ｆｌｏｗ［０］をＩ／Ｆ１９０を介して外部の装置に対して送信しても良い。また、ＣＰＵ１０２は、生成したｆｌｏｗ［０］を用いて手ぶれ補正などの何らかの画像処理を行うようにしても良い。
【００５２】
本実施形態では、図３に示す如く、図２のフローチャートにおいてステップＳ２０５０とステップＳ２０６０との間でステップＳ３０５５の処理を行い、ステップＳ２０７０の代わりにステップＳ３０７０の処理を行う、所謂テンプレートマッチングを併用したオプティカルフローの算出処理を行う。本実施形態に係るオプティカルフローの算出処理について、図３のフローチャートを用いて説明する。図３のフローチャートにおいて図２と同じ処理ステップには同じステップ番号を付しており、該処理ステップに係る説明は省略する。
【００５３】
ステップＳ３０５５ではＣＰＵ１０２は先ず、ｆｌｏｗ’［ｌｖ＋１］における着目座標位置Ｃを基準とした複数の位置に対応する動きベクトルのうち、Ｉ２［ｌｖ］内の着目座標位置Ｃに対応する画素位置から該動きベクトルに応じて離間した画素位置の画素値と、Ｉ１［ｌｖ］内の着目座標位置Ｃに対応する画素位置の画素値と、の差分が小さい順に１つ以上の動きベクトルを特定する。そしてＣＰＵ１０２は、特定した１つ以上の動きベクトルから１つの動きベクトルを特定し、該特定した１つの動きベクトルを新オプティカルフローｆｌｏｗ”［ｌｖ＋１］における着目座標位置Ｃの要素とする。
【００５４】
以下にステップＳ３０５５における処理の詳細について説明する。ここで、複数の候補位置の配置パターンを図４のように規定する。図４では、候補位置Ｙ０を原点とし、候補位置Ｙ１〜Ｙ１２をＹ０に対する相対座標とする。つまり、候補位置Ｙ０＝（０，０）であり、候補位置Ｙ１＝（０、−３）、候補位置Ｙ６＝（３，３）となる。なお、候補位置の配置パターンは図４に示した配置パターンに限らないが、候補位置は充分に粗に配置することが望ましい。その理由については後述する。
【００５５】
先ずは、ＣＰＵ１０２は、以下の式１２〜１４を用いて、上記の差分が小さい順に１つ以上の動きベクトルを特定する。
【００５６】
【数９】
2018107615.tif 000011
【００５７】
【数１０】
2018107615.tif 000012
【００５８】
【数１１】
2018107615.tif 000013
【００５９】
式１２は、画像Ｉａにおける着目座標位置Ｃを中心とする縦横サイズが（２ｒ＋１）のパッチと、画像Ｉｂにおける着目座標位置Ｃを中心とする縦横サイズが（２ｒ＋１）のパッチと、で対応する画素位置の画素値の差の絶対値の総和ＳＡＤ（Ｓｕｍ  ｏｆ  Ａｂｓｏｌｕｔｅ  Ｄｉｆｆｅｒｅｎｃｅ）を算出する式である。ＳＡＤが低いほど画素の類似度が高いことになる。本実施形態ではｒ＝２とするが、ｒの値は２に限らない。
【００６０】
式１３は、ベクトルＶが与えられた場合に、ベクトルＶのｘ成分であるＶｘ、ｙ成分であるＶｙのそれぞれについて、四捨五入により整数値を得る式である。式１３では、Ｖｘ（Ｖｙ）に０．５を足してｆｌｏｏｒ関数で計算することにより、四捨五入を行って少数部を除去している。ｆｌｏｏｒ関数とは周知の通り、引数となる値の整数部を返す関数である。本実施形態では、sadの計算に際し、座標値をround関数を利用して整数化しているが、round関数を用いず次数として計算してもよい。この場合、前述のとおりバイリニア補間により画素値を得ることになる。
【００６１】
式１４は、Ｉ１［ｌｖ］内の着目位置Ｃにおける画素値と、Ｉ２［ｌｖ］内の着目座標位置Ｃにｆｌｏｗ’［ｌｖ＋１］内の座標位置（Ｃ＋Ｙｉ）における動きベクトル（式１３により各成分の値は変換済み）を加えた画素位置の画素値と、の差分ＳＡＤをｉ＝０〜１２について求め、求めたそれぞれの差分ＳＡＤを小さい順にソートした場合に、先頭（最小の差分ＳＡＤであり０番目）からｎ（ｎは０〜１２の整数）番目の差分ＳＡＤに対応するｉをｊとして返す関数である。ここでは、ｎ＝０として説明する。つまり、ｉ＝０〜１２のうち、差分ＳＡＤを最小にするｉをｊとして取得する。
【００６２】
つまり、上記の式１２〜１４により、差分ＳＡＤを最小にするＹｊが求まるので、ｆｌｏｗ’［ｌｖ＋１］（Ｃ＋Ｙｊ）、すなわち、ベクトルｆｌｏｗ’［ｌｖ＋１］（Ｃ＋Ｙ０）〜ｆｌｏｗ’［ｌｖ＋１］（Ｃ＋Ｙ１２）のうち差分ＳＡＤを最小にするベクトルを特定することができる。そして以下の式１５により、ｆｌｏｗ”［ｌｖ＋１］において着目座標位置Ｃに対応する動きベクトルとして、ｆｌｏｗ’［ｌｖ＋１］（Ｃ＋Ｙｊ）を設定する。
【００６３】
【数１２】
2018107615.tif 000014
【００６４】
以上説明した式１２〜１５を用いた処理を全ての着目座標位置Ｃについて行うことで、オプティカルフローｆｌｏｗ”［ｌｖ＋１］を完成させることができる。ここで、差分ＳＡＤが小さい順にｎ番目の差分ＳＡＤに対応するｉを求めるための処理について、図５のフローチャートを用いて説明する。なお、ｒｅｃ［ｉ］は、ｓとｉを要素としてもつレコードの配列であり、その要素には、「．」を使って参照するものとして説明する。
【００６５】
ステップＳ５０１０では、ＣＰＵ１０２は変数ｉを０に初期化する。ステップＳ５０２０では、ＣＰＵ１０２は、上記の式に従って差分ＳＡＤを算出し、該算出した差分ＳＡＤをｒｅｃ［ｉ］．ｓに代入する。ステップＳ５０２５では、ＣＰＵ１０２は、ｒｅｃ［ｉ］．ｉに現在の変数ｉの値を代入する。ステップＳ５０３０では、ＣＰＵ１０２は、変数ｉの値を１つインクリメントする。ステップＳ５０３５では、ＣＰＵ１０２は、変数ｉの値が１３未満であるか否かを判断する。この判断の結果、変数ｉの値が１３未満であれば、処理はステップＳ５０２０に戻り、変数ｉの値が１３以上であれば、処理はステップＳ５０４０に進む。ステップＳ５０４０では、ＣＰＵ１０２は、ｒｅｃを昇順でソートする。その結果、ｒｅｃ［ｋ］．ｓには、最小の差分ＳＡＤを０番目、最大の差分ＳＡＤを１２番目とすると、ｋ番目の差分ＳＡＤが格納されており、ｒｅｃ［ｋ］．ｉにはｋの値が格納されている。そして図５のフローチャートによる処理の結果としてｒｅｃ［ｎ］．ｉが返される。なお１３個の差分ＳＡＤのうち最小の差分に対応するｉを返すのであれば、上記のソート処理は必須ではなく、単純に差分ＳＡＤが最小となるときのｉを探して返せばよい。
【００６６】
なお、変数ｌｖの値がｍａｘ＿ｌｖである場合、ステップＳ３０５５では、上記の式１５の代わりに以下の式１６によってｆｌｏｗ”［ｌｖ＋１］（Ｃ）を決定するようにしても良い。
【００６７】
【数１３】
2018107615.tif 000015
【００６８】
図３に戻って、ステップＳ３０７０では、ＣＰＵ１０２は上記のステップＳ２０７０と同様の処理を行うが、その際、ｆｌｏｗ’［ｌｖ＋１］の代わりにｆｌｏｗ”［ｌｖ＋１］を使用する。
【００６９】
次に、上記のステップＳ３０５５の追加と、ステップＳ２０７０をステップＳ３０７０に置き換えたことによる効果について、図６を用いて説明する。図６は被写体の境界を説明する図である。図６（ａ）では、バスが右から左に移動しているが、木は静止している状態を表している。この画像を縮小すると例えば太線の矩形が一画素になるように縮小される。図６（ｂ）は、この矩形を拡大したもの表している。この矩形には静止した木の一部と動いているバスの一部が含まれており、等倍画像（Ｉ１，Ｉ２）に対応するオプティカルフローではこの矩形内に異なる複数の動きベクトルが存在する。そのため、縮小画像の画素（矩形）に対し割り当てる一つの動きベクトルと、より高解像度画像の階層や等倍画像の動きベクトルの関係は不定なものになる。図２のステップＳ２０７０の処理において入力となるｆｌｏｗ’［ｌｖ＋１］は縮小画像の階層のｆｌｏｗ［ｌｖ＋１］を単純に拡大したものであり、上記の問題を踏襲し、動被写体の境界の動きベクトルが不確かなものとなる。本実施形態では、ステップＳ３０５５においては、着目画素の周辺の画素に対応する複数の動きベクトルを参照し、着目画素に対しその動きベクトルが指す位置の画素との差分ＳＡＤを計算し、差分ＳＡＤが低い動きベクトルを選択している。これは、図６の例では、境界領域で不定であった動きベクトルでなく、その周辺の木、または、バスの領域に含まれる動きベクトルを選択していることになる。重要な点は、差分ＳＡＤの算出にｆｌｏｗ［ｌｖ＋１］を算出した階層（ｌｖ＋１）よりも高解像度の階層ｌｖの画像Ｉ１［ｌｖ］，Ｉ２［ｌｖ］を利用していることである。解像度が高いため、境界領域の動きベクトルの正確性が高まる。また、前述の配置パターンは、単純に着目画素の近傍とせず、着目画素から十分に遠く粗に配置している。これは、オプティカルフローの拡大処理により、オプティカルフローに一種のローパルフィルタがかかった状態にあり、境界だけでなく境界周辺の動きベクトルの正確度も低下している。本実施形態では、近傍４点を参照して拡大するバイリニア法を利用してオプティカルフローを２倍に拡大しているため、拡大後のオプティカルフローの動きベクトルは、半径２画素分以内の画素の動きベクトルの影響をうけてしまう。そのため、図４の配置パターンに設定される候補位置は互いに３画素以上離間している。仮に、拡大処理にタップ数の多いバイキュービック法や２倍以上の拡大を行う場合には、各候補位置は、図４の配置パターンよりも粗く配置することが好ましい。
【００７０】
本実施形態では、ステップＳ２０７０についてＬＫ法を適用したが、それに限定されない。ＨＫ法など他の勾配法やテンプレートマッチングなど他の動き検出方法を用いることも可能である。
【００７１】
＜変形例１＞
第１の実施形態では、補間の演算量削減のために式１２の関数が扱う画素位置を整数に限定したが、演算量削減不要であれば、画素位置を実数のまま扱い、補間した画素値で差分ＳＡＤを算出してもよい。また、第１の実施形態では、対応の確からしさがより高い対応点を抽出するために、差分としてＳＡＤを求めているが、ＳＡＤに限定せず、ＳＳＤ（Ｓｕｍ  ｏｆ  Ｓｑｕｒｅａｄ  Ｄｉｆｆｅｒｅｎｃｅ）や、重み付きＳＡＤ，ＳＳＤを用いてもよい。さらには、ＳＩＦＴ特徴量など画素の特徴量を多次元ベクトルで表現し、そのノルムを指標としてもよい。この場合もノルムが小さいほど、対応の確からしさは高いといえる。
【００７２】
＜変形例２＞
第１の実施形態では、１３個の差分ＳＡＤのうち最小の差分ＳＡＤに対応する動きベクトルを用いてｆｌｏｗ”［ｌｖ＋１］（Ｃ）を決定していた。しかし、１３個の差分ＳＡＤのうち最小の差分ＳＡＤ及び最小から２番目の差分ＳＡＤのそれぞれに対応する動きベクトルの平均をｆｌｏｗ”［ｌｖ＋１］（Ｃ）としても良い。この場合、以下の式１７〜１９により、ｆｌｏｗ”［ｌｖ＋１］（Ｃ）を求めることができる。
【００７３】
【数１４】
2018107615.tif 000016
【００７４】
なお、１３個の差分ＳＡＤのうち最小の差分ＳＡＤからｐ（ｐは３以上１３未満の整数）番目の差分ＳＡＤまでのそれぞれの差分ＳＡＤに対応する動きベクトルの平均をｆｌｏｗ”［ｌｖ＋１］（Ｃ）としても良い。
【００７５】
＜変形例３＞
第１の実施形態では、ステップＳ２０４０では、オプティカルフローｆｌｏｗ［ｌｖ＋１］を拡大してｆｌｏｗ’［ｌｖ＋１］を生成した。つまり、オプティカルフローをフレーム単位で拡大していたが、ｆｌｏｗ’［ｌｖ＋１］を参照する個所で、画素ごとに画素値を計算する構成であっても同様の結果を得ることができる。
【００７６】
＜変形例４＞
第１の実施形態では、単一のカメラで撮像された連続する画像である第１の画像及び第２の画像を入力してオプティカルフローを算出するものとして説明した。しかし、入力はステレオ画像（一方の視点の画像を第１の画像、他方の視点の画像を第２の画像）であってもよい。連続する画像の動きは、ステレオ画像の場合には視差（両眼視差）にあたる。そのため、同じフローで、ステレオ画像から視差マップを生成することができる。
【００７７】
＜変形例５＞
第１の実施形態では、第１の画像及び第２の画像の階層ｌｖに対応する縮小画像をステップＳ２０２０〜Ｓ２０９０のループを実行する度に逐一生成していた。しかし、第１の画像を縮小率ｓｆで再帰的に縮小した（ｍａｘ＿ｌｖ）枚の縮小画像、第２の画像を縮小率ｓｆで再帰的に縮小した（ｍａｘ＿ｌｖ）枚の縮小画像を一度に生成しておいても良い。この場合、ステップＳ２０３０の処理をステップＳ２０２０の前に行う。そして、ステップＳ２０５０では、第１の画像を縮小率ｓｆで再帰的に縮小した（ｍａｘ＿ｌｖ）枚の縮小画像、第２の画像を縮小率ｓｆで再帰的に縮小した（ｍａｘ＿ｌｖ）枚の縮小画像のうち、階層ｌｖに対応する縮小画像を取得すればよい。また、各階層毎に縮小率を変えても良い。
【００７８】
［第２の実施形態］
本実施形態を含め、以下では第１の実施形態との差分について重点的に説明し、以下で特に触れない限りは第１の実施形態と同様であるものとする。本実施形態では、オブジェクト同士のオクルージョンを考慮してオプティカルフローの算出を行う。
【００７９】
本実施形態に係るオプティカルフローの算出処理について、図７のフローチャートを用いて説明する。図７のフローチャートにおいて図２，３と同じ処理ステップには同じステップ番号を付しており、該処理ステップに係る説明は省略する。図７では、図３のフローチャートにおいてステップＳ３０５５の処理の代わりにステップＳ７０５３及びステップＳ７０５５の処理を行う。
【００８０】
ステップＳ７０３５では、ＣＰＵ１０２は、Ｉ２［ｌｖ］中の各画素に対する「オクルージョンに含まれると推定される度合い（オクルージョン度）」が登録されたマップとしてオクルージョン度マップＯを取得する。つまり、オクルージョン度マップＯは第１の画像及び第２の画像と同一の解像度を持つ二次元データである。オクルージョン度マップＯにおいて着目座標位置Ｃにおける値Ｏ（Ｃ）は、例えば、次のような方法でもって求めることができる。
【００８１】
先ず、以下の式２０に従って、ｆｌｏｗ’［ｌｖ＋１］（Ｃ）のｘ成分（ｆｌｏｗ’ｘ［ｌｖ＋１］（Ｃ））にラプラシアンフィルタをかけることでｇｘ（Ｃ）を生成する。ＫＬは７ｘ７のＤｏＧフィルタのカーネルである。
【００８２】
【数１５】
2018107615.tif 000017
【００８３】
同様に、以下の式２１に従って、ｆｌｏｗ’［ｌｖ＋１］（Ｃ）のｙ成分（ｆｌｏｗ’ｙ［ｌｖ＋１］（Ｃ））にラプラシアンフィルタをかけることでｇｙ（Ｃ）を生成する。
【００８４】
【数１６】
2018107615.tif 000018
【００８５】
そして、以下の式２２を用いて、式２０で求めたｇｘ（Ｃ）と式２１で求めたｇｙ（Ｃ）との二乗和の平方根の値を、オクルージョン度マップＯの着目座標位置Ｃにおける値（オクルージョン度Ｏ（Ｃ））として求める。
【００８６】
【数１７】
2018107615.tif 000019
【００８７】
以上の式２０〜２２に従った処理をｆｌｏｗ’［ｌｖ＋１］上の全ての着目座標位置Ｃについて行うことで、オクルージョン度マップＯを生成することができる。式２０〜２２の処理は、オプティカルフローを画像とみなした場合のエッジ量を算出することに相当する。
【００８８】
オクルージョン領域は、異なる動きを持つ被写体の境界に発生する。つまり、オプティカルフローを画像とみなした場合のエッジ部分に発生するといえる。本実施形態ではこの現象を考慮し、オプティカルフローのエッジの度合いが大きいほどオクルージョンの度合いが大きいものとしてオクルージョン度マップを生成している。そのためエッジ検出作用のある７ｘ７のラプラシアンをかけた。しかし、フィルタのカーネルサイズは特定のサイズに限るものではなく、演算量の増加を容認するのであれば、大きなサイズのフィルタを用いてもよい。また、エッジ検出のアルゴリズムもラプラシアンフィルタに限定されず、ＤｏＧ（Ｄｉｆｆｅｒｅｎｃｅ  ｏｆ  Ｇａｕｉｓａｎ）処理によりオプティカルフローのエッジを検出してもよい。また、例えば非特許文献５にあるように、フィルタ処理によらないオクルージョン領域の検出を用いてもよい。
【００８９】
ステップＳ７０５５では、ＣＰＵ１０２は、式１４の代わりに以下の式２３を用いて、ｉ＝０〜１２のうち差分ＳＡＤを最小にするｉをｊとして取得する。
【００９０】
【数１８】
2018107615.tif 000020
【００９１】
式１４と式２３とでは、Ｉ２［ｌｖ］について参照する画素位置が異なる。式２３によれば、式２３のＯの引数である座標が示すオクルージョン度が大きいほど、選択されにくくなる。なお、式２３の代わりに以下の式２４を用いて、ｉ＝０〜１２のうち差分ＳＡＤを最小にするｉをｊとして取得するようにしても良い。
【００９２】
【数１９】
2018107615.tif 000021
【００９３】
Ｉ２［ｌｖ］における画素位置（Ｃ＋Ｙｉ）がオクルージョンであれば、それに対応するｆｌｏｗ’［ｌｖ＋１］（Ｃ＋Ｙｉ）の正確性も低いことが想定されるため、Ｏ（Ｃ＋Ｙｉ）を加味するだけでも同等の効果をえることができる。
【００９４】
このように、オクルージョン度を考慮して、ｉ＝０〜１２のうち差分ＳＡＤを最小にするｉをｊとして取得する処理を行うことで、第１の実施形態よりもさらに精度の高い動きベクトルの抽出が可能となる。
【００９５】
［第３の実施形態］
第２の実施形態に係るオプティカルフロー算出処理を実行する画像処理装置のハードウェア構成例を図１（ｂ）に示す。図１（ｂ）において図１（ａ）に示した機能部と同じ機能部については同じ参照番号を付しており、該機能部に係る説明は省略する。
【００９６】
図１（ｂ）の構成では、図７のフローチャートに従った処理をＣＰＵ１０２が制御し、その制御の元、各ステップにおける処理を、以下に説明する各機能部が分担して実行する。
【００９７】
上記の第１の画像及び第２の画像を含む処理対象の画像は、画像入力部１１３によってメモリ１０３や不揮発メモリ１０５に格納される。画像縮小部１０６は、第１の画像や第２の画像に対する縮小処理、すなわち、上記のステップＳ２０５０における処理を行う。オプティカルフロー拡大部１０７は、オプティカルフローの要素及びサイズの変換処理、すなわち、上記のステップＳ２０４０の処理を行う。
【００９８】
オクルージョン度マップ生成部１０８は、オクルージョン度マップＯの生成処理、すなわち、上記のステップＳ７０５３の処理を行う。画像フィルタ部１０９は、例えばＳｏｂｅｌフィルタ処理を行って、画像の各画素を水平・垂直に一次微分する処理、すなわち、上記のステップＳ２０６０の処理を行う。
【００９９】
対応抽出部１１０は、指標算出部１１１を制御して差分ＳＡＤを算出させ、算出した差分ＳＡＤのうち最小の差分ＳＡＤに対応する動きベクトルを用いて上記のｆｌｏｗ”［ｌｖ＋１］を算出する処理、すなわち上記のステップＳ７０５５の処理を行う。
【０１００】
指標算出部１１１は、対応抽出部１１０による制御の元、差分ＳＡＤを算出する処理、すなわち、図５の上記のステップＳ５０２０における処理を行う。なお、指標算出部１１１は差分ＳＡＤの代わりに、ＳＳＤやＳＩＦＴ特徴量の差分のノルムを算出してもよい。
【０１０１】
対応算出部１１２は、画像縮小部１０６が生成した縮小画像、対応抽出部１１０が生成したオプティカルフロー、画像フィルタ部１０９が生成したフィルタ処理済みの画像を用いてＬＫ法によりオプティカルフローの算出処理（ステップＳ３０７０）を行う。
【０１０２】
本実施形態では、バスやメモリを介してデータをやりとりするがこれに限定されない。各処理部を直結してデータをやりとりする構成であってもよい。そのときは、フィルタ処理やワーピング処理用のラインバッファを各処理部がもち、画素単位で処理するパイプラインを構成することになる。また、各処理部が複数のインスタンスを持つ構成をとってもよい。
【０１０３】
図１（ｂ）において、ＣＰＵ１０２、メモリ１０３、不揮発メモリ１０５、Ｉ／Ｆ１９０を除く機能部はハードウェアで実装しても良いし、ソフトウェア（コンピュータプログラム）で実装しても良い。後者の場合、このソフトウェアは不揮発メモリ１０５に保存されている。そしてＣＰＵ１０２がこのソフトウェアを不揮発メモリ１０５からメモリ１０３に読み出して実行することで、対応する機能部の機能を実現する。
【０１０４】
また、以上説明した各実施形態や各変形例は、その一部若しくは全部を適宜組み合わせて若しくは選択的に使用しても構わない。まとめると、一般にピラミッド処理を利用して画素単位の動きベクトルの集合であるオプティカルフローを算出する方法では、解像度の低い階層のオプティカルフローを入力し、着目階層のオプティカルフローを算出する。上記の実施形態では、オプティカルフローを算出した階層よりも高解像度の階層の画像情報を用いて、動きベクトルを表現する２つの画素の対応の確からしさを現す指標を算出する工程が存在する。そして、解像度の低い階層のオプティカルフローを動きベクトルを、着目画素の周辺画素に対応する動きベクトルから、より対応の確からしさが高い動きベクトルを算出して置き換える。この動きベクトルがおきかえられたオプティカルフローを利用して着目階層のオプティカルフローを算出する。
【０１０５】
（その他の実施例）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【０１０６】
１０２：ＣＰＵ  １０３：メモリ  １０４：ＨＤＤ
【図１】
2018107615.tif 000022
【図２】
2018107615.tif 000023
【図３】
2018107615.tif 000024
【図４】
2018107615.tif 000025
【図５】
2018107615.tif 000026
【図６】
2018107615.tif 000027
【図７】
2018107615.tif 000028