(57)【要約】【課題】位置ずれが少ない接合画像を生成することができる画像処理装置、画素処理方法、プログラム、及びカメラを提供する。【解決手段】本実施の形態にかかる画像処理装置２０は、複数の画像における画像間の動きベクトルを導出する動きベクトル導出部２１と、第１の画像から第２の画像までの蓄積誤差に基づいて、第１の画像から第２の画像までの対象区間に含まれる画像における動きベクトルを補正する補正部４０と、補正部４０によって補正された動きベクトルに基づいて、前記接合画像を構成する前記複数のテクスチャをフレームメモリに書き込むテクスチャ書き込み部２８とを備えたものである。【選択図】図１
2015201826.tif 000002
【特許請求の範囲】
【請求項１】
複数の画像に基づく複数のテクスチャを接合して接合画像を生成する画像処理装置であって、
前記複数の画像における画像間の動きベクトルを導出する動きベクトル導出部と、
第１の画像から第２の画像までの蓄積誤差に基づいて、前記第１の画像から前記第２の画像までの対象区間に含まれる画像における動きベクトルを補正する補正部と、
前記補正部によって補正された動きベクトルに基づいて、前記接合画像を構成する前記複数のテクスチャをフレームメモリに書き込むテクスチャ書き込み部と
を備えることを特徴とする画像処理装置。
【請求項２】
前記補正部は、前記第１の画像から前記第２の画像までの蓄積誤差に基づいて、前記第１の画像と前記第２の画像との間の画像を含む複数の画像における動きベクトルを補正する、
ことを特徴とする請求項１記載の画像処理装置。
【請求項３】
前記第１の画像と前記第２の画像とを比較して前記蓄積誤差を取得する蓄積誤差取得部を備える
ことを特徴とする請求項１又は２に記載の画像処理装置。
【請求項４】
ユーザによって決定された、前記第１の画像に含まれる被写体の位置と前記第２の画像に含まれる前記被写体の位置とに基づいて、前記蓄積誤差を取得する蓄積誤差取得部を備える
ことを特徴とする請求項１〜３のいずれか一項に記載の画像処理装置。
【請求項５】
前記第２の画像は、前記第１の画像に含まれていた被写体が視野から外れた後、再度、前記被写体が視野内となった画像である、
ことを特徴とする請求項１〜４のいずれか１項に記載の画像処理装置。
【請求項６】
前記補正部は、前記蓄積誤差を前記対象区間に含まれる複数のフレームに対しｎ（ｎは０を含む整数）画素ずつ均等に割り当てて、動きベクトルを補正する、
ことを特徴とする請求項１〜５のいずれか１項に記載の画像処理装置。
【請求項７】
前記補正部は、
前記蓄積誤差を前記対象区間に含まれる複数のフレームに対しｎ（ｎは０を含む整数）画素ずつ均等に割り当て、
前記蓄積誤差から均等に割り当てた補正量を除いた誤差残差を割り当てる割当フレームを前記対象区間から抽出し、
前記割当フレームに１画素ずつ誤差残差を割り当てて、前記動きベクトルを補正する、
ことを特徴とする請求項１〜６のいずれか１項に記載の画像処理装置。
【請求項８】
複数の画像を撮影する撮像部と、
請求項１〜７のいずれか１項に記載の画像処理装置と、
を備えることを特徴とするカメラ。
【請求項９】
複数の画像に基づく複数のテクスチャを接合して接合画像を生成する画像処理方法であって、
前記複数の画像における画像間の動きベクトルを導出する動きベクトル導出ステップと、
第１の画像から第２の画像までの蓄積誤差に基づいて、前記第１の画像から前記第２の画像までの対象区間に含まれる画像における動きベクトルを補正する補正ステップと、
前記補正ステップによって補正された動きベクトルに基づいて、前記接合画像を構成する前記複数のテクスチャをフレームメモリに書き込むテクスチャ書き込みステップと
を有することを特徴とする画像処理方法。
【請求項１０】
複数の画像に基づく複数のテクスチャを接合して接合画像を生成する画像処理をコンピュータに実行させるプログラムであって、
前記複数の画像における画像間の動きベクトルを導出する動きベクトル導出ステップと、
第１の画像から第２の画像までの蓄積誤差に基づいて、前記第１の画像から前記第２の画像までの対象区間に含まれる画像における動きベクトルを補正する補正ステップと、
前記補正ステップによって補正された動きベクトルに基づいて、前記接合画像を構成する前記複数のテクスチャをフレームメモリに書き込むテクスチャ書き込みステップと
をコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理装置、画像処理方法、プログラム及びカメラに関する。
【背景技術】
【０００２】
近年、長大な被写体をカバーするように手動でカメラを動かして動画を撮影して、静止画パノラマを作成する手法が実用化されている。この手法では、動画を構成するフレーム画像を接合することで、パノラマ画像を生成している。パノラマ静止画の作成手法は、デジタルカメラの付加機能などの形で一般化している。この手法では、パンニング撮影における動きベクトルを導出して、それに基づいて画像をつなぎ合わせる幅を制御することを基本としている。
【０００３】
さらに、複数の静止画像もしくは動画シーケンスを接続してより大きな画像を構成する技術が存在している（特許文献１、非特許文献１）。この技術は、パノラマのほかフォトモザイキングなどと呼ばれて一般的に広く知られている。特にデジタルカメラの普及以降は、このような処理を自動もしくは半自動で行うソフトウェアも普及している。パノラマ静止画は基本的に直線的なカメラ軌跡を前提としているが、原理的に２次元的な自由なカメラ軌跡で撮影された動画の接合が可能である。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−２６６６６７号公報
【非特許文献】
【０００５】
【非特許文献１】M. G. Gonzalez, P. Holifield and M. Varley, "Improved Video Mosaic Construction by Accumulated Alignment Error Distribution", Proceedings of the British Machine Conference, pp. 38.1-38.11, BMVA Press, September 1998.
【発明の概要】
【発明が解決しようとする課題】
【０００６】
２次元的な自由なカメラ軌跡で撮影された動画の接合においては原理的に、非特許文献１の第３章に記載の”Looping Path Problem”が多くの場合に発生する。Looping Path Problem”とはループ状のカメラ軌跡により撮影された動画を接合する折に、同じ場所にあるべきものが、動きベクトルの誤差の蓄積を原因とする位置ずれを起こすものである。例えば、図６に示すように、人を被写体７２としてループ状にカメラを移動すると、接合画像７１中で同じ被写体７２の位置がずれてしまう。
【０００７】
非特許文献１においては、誤差の蓄積を関わる画像の位置を微妙に変化させる処理を繰り返すことで解決している。また、この誤差蓄積は純粋に画像処理を原因とするものなので、高精度の方位センサ・姿勢センサ・加速度センサなどの情報を併用することにより、解決・軽減が期待できる。
【０００８】
しかし画像の位置修正を伴う繰り返し処理の計算コストは非常に大きく、微妙な位置調整にはサブピクセル処理が必須であるので、それに伴う内挿処理などによりテクスチャの劣化が不可避である。さらに十分に高性能で小型のセンサを小型・軽量・安価な機器に導入するのは現実的でない。このように、Looping Path Problemによって、適切に接合画像を生成するのが困難になってしまう。
また、被写体７２が視野から外れない場合でも、”Looping Path Problem”と同様の課題が生じることがある。すなわち、”Looping Path Problem”のように被写体７２が一旦視野から外れる場合に限らず、カメラを大きく動かして、視野を変化させる場合でも、接合画像において、被写体７２が二重に表示されてしまうことがある。
【０００９】
本発明は上記の点に鑑みなされたもので、位置ずれの少ない接合画像を生成することができる画像処理装置、画像処理方法、プログラム、及びカメラを提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の一態様にかかる画像処理装置は、複数の画像に基づく複数のテクスチャを接合して接合画像を生成する画像処理装置であって、前記複数の画像における画像間の動きベクトルを導出する動きベクトル導出部と、第１の画像から第２の画像までの蓄積誤差に基づいて、前記第１の画像から前記第２の画像までの対象区間に含まれる画像における動きベクトルを補正する補正部と、前記補正部によって補正された動きベクトルに基づいて、前記接合画像を構成する前記複数のテクスチャをフレームメモリに書き込むテクスチャ書き込み部と、を備えることを特徴とするものである。
【００１１】
本発明の一態様にかかる画像処理方法は、複数の画像に基づく複数のテクスチャを接合して接合画像を生成する画像処理方法であって、前記複数の画像における画像間の動きベクトルを導出する動きベクトル導出ステップと、第１の画像から第２の画像までの蓄積誤差に基づいて、前記第１の画像から前記第２の画像までの対象区間に含まれる画像における動きベクトルを補正する補正ステップと、前記補正ステップによって補正された動きベクトルに基づいて、前記接合画像を構成する前記複数のテクスチャをフレームメモリに書き込むテクスチャ書き込みステップと、を有することを特徴とするものである。
【００１２】
本発明の一態様にかかるプログラムは、複数の画像に基づく複数のテクスチャを接合して接合画像を生成する画像処理をコンピュータに実行させるプログラムであって、前記複数の画像における画像間の動きベクトルを導出する動きベクトル導出ステップと、第１の画像から第２の画像までの蓄積誤差に基づいて、前記第１の画像から前記第２の画像までの対象区間に含まれる画像における動きベクトルを補正する補正ステップと、前記補正ステップによって補正された動きベクトルに基づいて、前記接合画像を構成する前記複数のテクスチャをフレームメモリに書き込むテクスチャ書き込みステップとをコンピュータに実行させることを特徴とするものである。
【発明の効果】
【００１３】
本発明によれば、位置ずれの少ない接合画像を生成することができる画像処理装置、画像処理方法、プログラム、及びカメラを提供できる。
【図面の簡単な説明】
【００１４】
【図１】本実施形態にかかるカメラの構成を示すブロック図である。
【図２】開始フレームと終了フレームを示す図である。
【図３】ユーザの操作入力を示す図である。
【図４】本実施形態にかかる画像処理方法を示すフローチャートである。
【図５】接合画像を示す図である。
【図６】Looping Path Problemが生じた接合画像を示す図である。
【発明を実施するための形態】
【００１５】
本実施の形態にかかる画像処理装置は、例えば、動画撮影用のカメラに搭載されるものである。そして、カメラのユーザが、パノラマ静止画モードを選択すると、動画に基づいてパノラマ静止画を生成する。
【００１６】
画像処理装置は、撮像方向を変えて撮像された複数の画像を接合して接合画像を生成するものである。例えば、ユーザがパン操作を行って、カメラの撮像方向を水平方向（左右方向）に変えていく。すなわち、時間的に連続して撮影された静止画の集合である動画の取得中にカメラを動かすと、カメラの視野が変わる。こうして取得した動画の各フレーム（静止画）から得られたテクスチャを接合していくことで、接合画像が生成される。例えば、フレームメモリにテクスチャを上書きしていくことで、１枚の接合画像を生成することができる。ここで、テクスチャは、フレームそのものでもよいし、フレームの一部の領域を切り出したものでもよい。なお、カメラの視野とは、カメラで撮像することができる範囲を意味するものであり、カメラ（撮像部）の画角によって定まる。したがって、ユーザがパン操作によりカメラの向きを変えることで、視野が変化する。
【００１７】
もちろん、撮像方向は水平方向だけでなく、鉛直方向（上下方向）に変えてもよい。
このように、画像処理装置は、ユーザが手動でカメラを２次元的に自由に動かして撮影した動画を用いて、接合画像を生成する。接合画像は、撮像部が取得する画像の画像サイズよりも大きい画素サイズを有している。
【００１８】
本実施の形態は、２次元的な自由なカメラ軌跡で撮影された動画の接合において、Looping Path Problemを事後処理によって軽減する画像処理装置、及び画像処理方法を提供することにある。本実施の形態では、サブピクセル処理が不要となるため、簡便な処理で、テクスチャの書き込み位置を補正することができる。よって、位置ずれの少ない接合画像を生成することができる。
【００１９】
次に、実施形態にかかる画像処理装置、及びカメラの構成について、図１を用いて説明する。図１は本実施形態にかかる画像処理装置を用いたカメラの構成を示すブロック図である。
【００２０】
カメラ１００は、撮像部１０と、画像処理装置２０と、表示部３０と、を備えている。画像処理装置２０は、動画から接合画像を生成するための画像処理を行う。画像処理装置２０は、動きベクトル導出部２１と、動きベクトル保存部２２と、補正部４０と、蓄積誤差取得部５０と、テクスチャ書き込み部２８、及びフレームメモリ２９とを備えている。補正部４０は、第１の補正部２３と、第２の補正部２４とを備えている。蓄積誤差取得部５０は、開始フレーム番号入力部２５と、終了フレーム番号入力部２６と、蓄積誤差入力部２７とを備えている。
【００２１】
フレームメモリ２９は、垂直方向及び水平方向において所定の画素数を有している。例えば、フレームメモリ２９は、矩形の画素構造となっている。そして、フレームメモリ２９には、画素間の動きベクトルに応じた画素位置に、接合画像を構成するテクスチャが書き込まれる。
【００２２】
撮像部１０は、撮像素子１１と、撮像レンズ１２とを備えている。撮像部１０は、撮像レンズ１２を介して撮像素子１１に入力された被写体からの光を光電変換して動画を生成し、その動画を画像処理装置２０に出力する。撮像レンズ１２は、フォーカスやズーム等を調整するため、複数のレンズやアクチュエータを備えている。撮像素子１１は、ＣＣＤ(charge coupled device)素子やＣＭＯＳ(Complementary Metal Oxide sensor)素子である。撮像部１０で取得された動画は、画像処理装置２０に入力される。表示部３０は、液晶ディスプレイや有機ＥＬ（Electroluminescence）ディスプレイなどの表示装置を備えている。そして、撮像部１０が取得した動画を表示する。すなわち、表示部３０は、動画の各フレームを順次表示していく。なお、カメラ１００には、ユーザが操作を行うための操作部（不図示）が設けられている。例えば、表示部３０がタッチパネルとすると、表示部３０が操作部となる。もちろん、操作部は、ボタン等であってもよい。
【００２３】
なお、画像処理装置２０の各ブロックは、ハードウェア的には、任意のコンピュータのＣＰＵ（Central Processing Unit）、メモリ、その他のＬＳＩ（Large Scale Integration）で実現でき、ソフトウェア的にはメモリにロードされたプログラムなどによって実現される。図１では、それらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは、当業者には理解されるところである。
【００２４】
撮像部１０は、動画を構成するフレーム画像を画像処理装置２０に入力する。動きベクトル導出部２１は、フレーム画像について動きベクトルを導出する。動きベクトル導出部２１は、例えば、連続する２つのフレーム画像間の大域的動きベクトルを動きベクトルとして導出する。動きベクトルの導出には、公知のマッチング評価手法を用いることができる。例えば、動きベクトル導出部２１は、２つのフレーム画像を画素単位でマッチングして、最も誤差が小さくなる時のずれ量を動きとして検出する。そして、動きベクトル導出部２１は、フレーム画像間の動きを２次元ベクトルの形で導出する。
【００２５】
動きベクトル導出部２１は、フレーム画像の画素サイズと同じ画素サイズの矩形テクスチャを用いている。そして、２つのフレーム画像の矩形テクスチャを比較して、動きベクトルを導出している。動きベクトル導出部２１は、連続して入力されるフレーム画像について動きベクトルを順次導出する。
【００２６】
動きベクトル保存部２２は、動きベクトル導出部２１が導出した動きベクトルを保存する。例えば、動きベクトル保存部２２は、時系列にしたがって動きベクトルを履歴として記憶する。動きベクトル保存部２２は、フレーム毎に導出された動きベクトルをフレーム番号に対応付けて保存する。すなわち、動きベクトル保存部２２は、フレーム番号順に動きベクトルを記録する。
【００２７】
テクスチャ書き込み部２８には、撮像部１０からのフレーム画像が入力されている。テクスチャ書き込み部２８は、フレーム画像のテクスチャをフレームメモリ２９に書き込む。すなわち、テクスチャ書き込み部２８は、フレームメモリ２９において、動きベクトルに応じた位置にテクスチャを書き込む。これにより、フレームメモリ２９は、新しいフレームのテクスチャが順次上書きされていく。フレームメモリ２９上のテクスチャの存在する部分を包含する最少の矩形が接合画像となる。
【００２８】
さらに、画像処理装置２０は、Looping Path Problemによって生じる蓄積誤差を軽減するための画像処理を行う。具体的には、被写体を含む開始フレームと、開始フレームに含まれる被写体が画像内に一旦含まれなくなった後、再度画像内に含まれるようになった画像である終了フレームとの間の区間を対象区間として、対象区間内で発生する蓄積誤差を算出する。そして、対象区間で発生した蓄積誤差を補正して、接合画像を生成する。こうすることで、蓄積誤差を軽減することができる。画像処理装置２０は、蓄積誤差を補正する第１の補正部２３と第２の補正部２４とを設けた補正部４０を備えている。
【００２９】
なお、第１の補正部２３、第２の補正部２４において、後記の補正が行われるが、まずは補正を行わないオリジナルの動きベクトル群を用いて、テクスチャ書き込み部２８がテクスチャをフレームメモリ２９に書き込む。すなわち、テクスチャ書き込み部２８は、時間的に後のフレーム画像のテクスチャの上書きを繰り返すことにより接合画像を生成する。
【００３０】
蓄積誤差取得部５０は、被写体が視野から外れる前後における、被写体の位置誤差である蓄積誤差を取得する。すなわち、蓄積誤差取得部５０は、対象区間において蓄積された蓄積誤差を取得する。
【００３１】
補正前の接合画像では、上記のようにLooping Path Problemによって誤差が蓄積してしまうため、同一の被写体の位置がずれてしまう。蓄積誤差入力部２７は、補正前の接合画像における蓄積誤差を第１の補正部２３に入力する。
【００３２】
例えば、ある被写体について一度視野からはずれて再び視野内に入ってくるような動画シーケンスで接合画像を生成する場合、接合画像において、被写体の位置ずれが発生する。視野から外れる前における被写体の所定の点を示す位置Ｐ１と、視野から外れた後における被写体の所定の点を示す位置Ｐ２として、その位置ずれを蓄積誤差とする。蓄積誤差は、水平成分、及び垂直成分を有するため、(dev_x, dev_y)（単位は整数画素）としてベクトル形式で表される。
【００３３】
また、蓄積誤差取得部５０は、接合する動画のフレーム群を照査して、位置Ｐ１に相当する部分が視野から外れる前のフレームを対象区間の開始フレームとして、位置Ｐ２に相当する部分が視野から外れる前のフレームを対象区間の終了フレームとする。なお、位置Ｐ２に相当する部分が最終フレームまで外れない場合は、全体の最終フレームを対象区間の終了フレームとする。
【００３４】
開始フレーム番号入力部２５は、開始フレームの開始フレーム番号f_beginを第１の補正部２３に入力する。終了フレーム番号入力部２６は、終了フレームの番号f_endを第１の補正部２３に入力する。
【００３５】
ここで、図２を参照して、フレーム画像の軌跡、並びに、開始フレームと終了フレームについて説明する。図２は、動画全体の先頭フレーム６１から最終フレーム６２までのフレーム画像の軌跡を示す図である。図２において、矢印がフレーム画像の中心位置の軌跡を示している。この例では、フレーム画像の軌跡が先頭フレーム６１の位置Ａから矢印に沿って視野を２次元的に移動して、最終フレーム６２の位置Ｂまで移動している。また、図２では、フレームの水平方向をｘ方向、垂直方向をｙ方向とする２次元直交座標系を示している。
【００３６】
この例では、先頭フレーム６１において特定の被写体７２が含まれている。次に、フレーム画像は、先頭フレーム６１の位置Ａから最終フレーム６２の位置Ｂまでループ状に移動させる。さらに、位置Ａから矢印に沿ってフレーム画像を移動していくと、一旦、フレーム画像に被写体が含まれなくなった後、再度、フレーム画像に被写体７２が現れる。そして、最終フレーム６２の位置Ｂまでフレーム画像を移動させる。このように、ある被写体７２について一度視野から外れて再び視野内に入ってくるような動画シーケンスで接合画像を生成する。
【００３７】
そして、被写体７２が視野から外れる前の位置Ｃでのフレームを対象区間の開始フレームとする。被写体７２が視野から一旦外れた後の位置Ｄでのフレームを対象区間の終了フレームとする。対象区間の開始フレームと終了フレームは、ユーザが決定してもよい。例えば、ユーザは取得した動画を見て、開始フレーム、及び終了フレームを決定することができる。
【００３８】
なお、処理対象となる被写体７２は、ユーザが選択するようにしてもよい。例えば、ユーザがタッチパネル画面やマウス等で接合画像又はフレーム画像を見ながら、特定の被写体７２を枠６３で囲む。こうすることで、接合画像を構成するフレーム画像を取得中に一旦撮像部１０のフレーム内から外れる被写体７２を設定することができる。例えば、ユーザは、接合画像において位置ずれが大きい被写体７２を選択することができる。
【００３９】
また、ユーザが被写体７２を決定すると、蓄積誤差取得部５０は、各フレーム画像にパターンマッチングなどを行い、被写体７２が含まれているか否かを判定する。そして、蓄積誤差取得部５０は、被写体７２が視野から外れる前後のフレーム画像を比較することで、被写体７２の位置ずれを取得し、この位置ずれを蓄積誤差としている。このように、蓄積誤差取得部５０は、開始フレームに含まれる被写体７２の位置と、終了フレームに含まれる被写体７２の位置とを比較して蓄積誤差を取得する。なお、被写体７２の位置ずれは、被写体７２の全体に着目して求めてもよく、被写体７２の一部に着目して求めてもよい。また、蓄積誤差を求める２つのフレームは、対象区間の開始フレーム、及び終了フレームと同じであってもよく、異なっていてもよい。
【００４０】
また、処理対象となる被写体７２の位置ずれをユーザの操作入力に基づいて取得するようにしてもよい。例えば、ユーザはタッチパネル画面やマウス等で接合画像又はフレーム画像を見ながら、処理対象となる位置ずれした被写体７２それぞれについて、少なくとも１点ずつ指定する。蓄積誤差取得部５０は、その指定された点に基づいて蓄積誤差を取得することができる。
【００４１】
ここで図３を参照してユーザの操作入力について説明する。図３は、動画全体の先頭フレーム６１から最終フレーム６２までのフレーム画像の軌跡を示す図である。図３において、矢印がフレーム画像の中心位置の軌跡を示している。この例では、先頭フレーム６１が対象区間の開始フレームとなっており、最終フレーム６２が対象区間の終了フレームとなっている。よって、先頭フレームの位置Ａと開始フレームの位置Ｃが同じ位置になっており、最終フレームの位置Ｂと終了フレームの位置Ｄが同じ位置になっている。
【００４２】
まず、対象区間の開始フレームにおける被写体７２の１点を位置Ｐ１として選択する。次に、終了フレームにおける被写体７２の１点を位置Ｐ２として選択することができる。このように、ユーザが位置Ｐ１および位置Ｐ２を決定すると、蓄積誤差取得部５０は、位置Ｐ１と位置Ｐ２より被写体７２の位置ずれを取得しこの位置ずれを蓄積誤差とする。
【００４３】
第１の補正部２３は、対象区間に含まれる各フレームに対して、蓄積誤差を均等に分散させる。第１の補正部２３は、対象区間に含まれる複数のフレームに、ｎ（ｎは０を含む整数）画素ずつ均等に割り当てて補正する。第１の補正部２３は、対象区間に含まれる全フレームの動きベクトルに対して蓄積誤差の補正を行う。
【００４４】
第２の補正部２４は、蓄積誤差から第１の補正部２３での補正量を除いた誤差残差を割り当てる割当フレームを対象区間から抽出する。そして、第２の補正部２４は、抽出した割当フレームに１画素ずつ誤差残差を割り当てて、動きベクトルを補正する。すなわち、第２の補正部２４は、対象区間の一部のフレームに対して誤差残差を分散する。したがって、第２の補正部２４は、対象区間に含まれる複数のフレームの一部について動きベクトルの補正を行う。
【００４５】
テクスチャ書き込み部２８は、第１の補正部２３と第２の補正部２４での補正結果に基づいて、テクスチャをフレームメモリ２９に書き込む。こうすることで、蓄積誤差を補正した接合画像がフレームメモリ２９に格納される。さらに、表示部３０は接合画像を表示する。
【００４６】
以下、画像処理装置２０の各ブロックでの処理について、図４を参照して詳細に説明する。図４は、本実施形態にかかる画像処理方法を示すフローチャートである。以下の説明では、蓄積誤差を補正する処理を中心に説明する。すなわち、カメラ１００における通常の処理、すなわち蓄積誤差を補正する処理以外の処理は公知の手法を用いることができるため説明を省略する。
【００４７】
開始フレーム番号入力部２５は、対象区間の開始フレーム番号f_beginを第１の補正部２３に入力する（Ｓ１１）。終了フレーム番号入力部２６は、対象区間の終了フレーム番号f_endを第１の補正部２３に入力する（Ｓ１２）。開始フレーム、及び終了フレームはユーザが決定してもよく、画像処理装置２０が決定してもよい。
【００４８】
蓄積誤差入力部２７は、蓄積誤差の成分devを第１の補正部２３に入力する（Ｓ１３）。なお、蓄積誤差は水平方向及び垂直方向の成分を持った蓄積誤差ベクトルとして第１の補正部２３に入力される。水平方向の蓄積誤差dev_xを補正する処理と、垂直方向の蓄積誤差dev_yを補正するための処理は同様である。よって、蓄積誤差の成分（dev_x, dev_y）をdevとして省略して説明する。すなわち、水平方向の蓄積誤差dev_x、及び垂直方向の蓄積誤差dev_yに対して、それぞれ下記のステップＳ１４〜ステップＳ２１の処理を行う。水平方向の蓄積誤差dev_xを補正する場合は、dev＝dev_xとなり、垂直方向の蓄積誤差を補正する場合は、dev=dev_yとなる。そして、画像処理装置２０は、水平・垂直方向のそれぞれについて独立に同一アルゴリズムの処理を行う。
【００４９】
なお、蓄積誤差取得部５０は、被写体７２が視野から外れる前と後のフレーム画像のテクスチャにおける被写体７２の位置的なずれから、蓄積誤差ベクトル(dev_x, dev_y)を取得している。すなわち、蓄積誤差取得部５０は、２つのフレーム画像のテクスチャに基づいて蓄積誤差ベクトルを取得する。
【００５０】
次に、第１の補正部２３は、対象区間を構成するフレーム数spanをspan＝f_end−f_beginとして算定する（Ｓ１４）。すなわち、フレーム数spanは、対象区間に含まれるフレームの数であるため、終了フレーム番号と開始フレーム番号との差分として算出される。
【００５１】
次に、第１の補正部２３は、蓄積誤差の成分devを対象区間内の各フレームに割り当てる補正値vadjをvadj=dev/spanとして算出する（Ｓ１５）。第１の補正部２３は、切り捨ての整数演算で、補正値vadjを算出している。したがって、蓄積誤差の成分devの絶対値がフレーム数span以上の場合に、フレームの動きベクトルについて調整すべく補正値vadjが導出される。一方、蓄積誤差の成分devの絶対値がフレーム数未満の場合、補正値vadjは０となる。
【００５２】
そして、第１の補正部２３は、対象区間の全ての動きベクトルの成分から補正値vadjを減算して、第１の補正を行う（Ｓ１６）。第１の補正部２３は、対象区間に含まれる複数のフレームに対しｎ（ｎは０を含む整数である）画素ずつ均等に割り当てて補正する。すなわち、第１の補正部２３は、対象区間内の全てのフレームの動きベクトルについてそれぞれｎ画素ずつ補正する。ｎは負の整数であってもよい。第１の補正部２３による第１の補正では、対象区間の全フレームの動きベクトルの補正値が等しくなる。
【００５３】
次に、第２の補正部２４が、第１の補正後の誤差残差res_devをres_dev＝dev−vadj＊spanとして演算する（Ｓ１７）。すなわち、第２の補正部２４は、蓄積誤差の成分devから、補正値vadjとフレーム数spanとの積を減算して、誤差残差res_devを算出する。誤差残差res_devは、蓄積誤差の成分devと、第１の補正部２３で補正された補正量（vadj＊span）との差分となる。蓄積誤差から、第１の補正部２３での補正量を除くことで、誤差残差res_devが算出される。
【００５４】
誤差残差res_devの絶対値は、フレーム数spanよりも小さくなる。サブピクセル処理を回避するために、第２の補正部２４は、対象区間においてＸフレーム（Ｘは１以上の整数）置きに１画素ずつ増減を行うことによって、対応する。そのため、第２の補正部２４は、補正を行うフレームを選ぶためのフレーム間隔ivlをivl = span / res_devとして計算する（Ｓ１８）。第２の補正部２４は、フレーム間隔ivlを切り捨ての整数演算により求めている。すなわち、フレーム間隔ivlは０を除く正負の整数として算出される。
【００５５】
第２の補正部２４は、対象区間の動きベクトルの成分につき、｜ivl｜フレーム置きに、ivl / ｜ivl｜だけ減算する（Ｓ１９）。なお、｜ivl｜はフレーム間隔ivlの絶対値である。第２の補正部２４は、対象区間に含まれる複数のフレームから、誤差残差res_devを割り当てるフレームを抽出している。そして、抽出したフレームに１画素ずつ誤差残差を割り当てている。こうすることで、サブピクセル処理を回避することができる。
【００５６】
次に、第２の補正部２４は、誤差残差res_devをres_dev=res_dev −span/ivlとして更新する（Ｓ２０）。すなわち、Ｓ１７で求めた誤差残差res_devとＳ１９の処理で補正された補正量span/ivlとの差分に基づいて誤差残差を更新する。
【００５７】
第２の補正部２４は、Ｓ２０で更新された誤差残差res_devの絶対値｜res_dev｜が閾値thよりも小さいか否かを判定する（Ｓ２１）。誤差残差の絶対値｜res_dev｜が閾値thよりも小さい場合（Ｓ２１のＹＥＳ）、適切に補正が行われているため、処理を終了する。
【００５８】
誤差残差の絶対値｜res_dev｜が閾値th以上場合（Ｓ２１のＮＯ）、ステップＳ１８に戻り、処理を繰り返す。すなわち、対象区間に含まれる複数のフレームから、第２の補正部２４が１画素ずつ誤差残差を割り当てるフレームを抽出する。そして、最新の誤差残差の絶対値｜res_dev｜が閾値thよりも小さくなるまで、第２の補正部２４が同様の処理を繰り返す。すなわち、第２の補正部２４は、誤差残差と閾値とを比較して、比較結果に応じて、再度補正を行うかどうかを決定している。第２の補正部２４は、更新した誤差残差の絶対値が閾値以下に収束するまで、繰り返し動きベクトルを補正する。
【００５９】
上記の処理を、水平成分、及び垂直成分のそれぞれについて行う。そして、補正を行った動きベクトル群を用いて、テクスチャ書き込み部２８が、時間的に後のフレームの上書きを繰り返す。これにより、図５に示すように、蓄積誤差が補正された接合画像７１が生成される。補正後の接合画像７１では、被写体７２が視野から外れる前後において、被写体７２がフレームメモリ２９の同じ位置に書き込まれる。よって、Looping Path Problemによって生じる蓄積誤差を軽減することができる。これにより、位置ずれの少ない接合画像を生成することができる。
【００６０】
また、高精度の方位センサ、姿勢センサ、加速度センサなどを用いずに、補正を行うことができる。よって、カメラの小型化や低コスト化に資することができる。
【００６１】
また、第１の補正部２３が全フレームの動きベクトルに対して同じ補正値で補正した後、さらに第２の補正部２４が補正を行う動きベクトルを抽出している。これにより、サブピクセル処理を回避することができる。よって、簡素な処理で、Looping Path Problemによって生じる蓄積誤差を軽減することが可能になる。したがって、位置ずれの少ない接合画像を短時間で生成することができる。
【００６２】
また、第２の補正部２４は、更新した誤差残差と閾値thとを比較して、比較結果に応じて再度補正を行うかどうかを決定している。こうすることで、誤差残差の絶対値を閾値以下に収束させることができる。例えば、閾値thを３画素とすると、蓄積誤差を３画素未満にすることができる。よって、より位置ずれの少ない接合画像を生成することができる。
【００６３】
蓄積誤差を吸収するような動きベクトルの補正が対象区間全域に施されて、接合画像全体に違和感を与えることなく”Looping Path Problem”を軽減することが可能になる。なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、記録媒体、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
【００６４】
以下、上記の処理について、具体的な値を用いて説明する。もちろん、本実施形態は、下記に示す具体的な値に限られものでなない。
【００６５】
開始フレーム番号f_begin＝４８０［frame］、終了フレーム番号f_end＝５６０［frame］としたとき、ステップＳ１４のフレーム数span＝８０［frame］となる。また、蓄積誤差dev＝−２１０［pixel］とする。
【００６６】
ステップＳ１５における補正値vadj=dev/spanの切り捨て整数演算の結果、vadj=(int)（−２１０／８０）＝−２［pixel/frame］となる。したがって、ステップＳ１６では、対象区間の全ての動きベクトルから、−２画素だけ減算する。すなわち、第１の補正部２３は、対象区間に含まれる全てフレームの動きベクトルについて２画素加算する。
【００６７】
ステップＳ１７において、第２の補正部２４が誤差残差res_dev＝dev−vadj＊spanとして計算すると、誤差残差res_dev＝−２１０−（−２×８０）＝−５０［pixel］となる。ステップＳ１８において、第２の補正部２４がフレーム間隔ivl = span / res_devとして計算すると、切り捨ての整数演算であるので、フレーム間隔(int)ivl＝（８０／（−５０））＝−１となる。
【００６８】
ステップＳ１９では、｜ivl｜＝１フレーム置きに、動きベクトルを、ivl / ｜ivl｜＝−１［pixel］だけ減算する。すなわち、誤差残差res_devが負なので、１フレーム置きに、動きベクトルに１画素加算する。
【００６９】
Ｓ２０では、誤差残差res_dev=res_dev −span/ivlとして更新すると、誤差残差res_dev=−５０−８０／（−１）＝３０となる。ステップＳ２１では、更新された誤差残差res_devを閾値thと比較する。閾値th＝３であるので、ステップＳ１８に戻る。
【００７０】
２回目のステップＳ１８において、フレーム間隔ivl = span / res_devとして計算すると、フレーム間隔ivl＝(int)（８０／３０）＝２となる。したがって、２回目のステップＳ１９では、｜ivl｜＝２フレーム置きに、動きベクトルを、ivl / ｜ivl｜＝１［pixel］だけ減算する。ここでは、誤差残差res_devが正であるので、２フレーム置きに、動きベクトルを１画素減算する。ここでは、偶数フレームのみ、又は奇数フレームのみ、動きベクトルを補正する。
【００７１】
２回目のステップＳ２０では、誤差残差res_dev=res_dev −span/ivlとして更新すると、誤差残差res_dev=３０−８０／（２）＝−１０となる。ステップＳ２１では、更新された誤差残差res_dev＝−１０を閾値ｔｈと比較する。閾値ｔｈ＝３であるので、ステップＳ１８に戻る。
【００７２】
３回目のステップＳ１８において、フレーム間隔ivl = span / res_devとして計算すると、フレーム間隔ivl＝(int)（８０／（−１０））＝８となる。したがって、３回目のステップＳ１９では、｜ivl｜＝８フレーム置きに、動きベクトルを、ivl / ｜ivl｜＝−１［pixel］だけ減算する。ここでは、誤差残差res_devが負であるので、８フレーム置きに、動きベクトルを１画素加算する。
【００７３】
２回目のステップＳ２０では、誤差残差res_dev=res_dev −span/ivlとして更新すると、誤差残差res_dev=−１０＋８０／（８）＝０となる。ステップＳ２１では、更新された誤差残差res_dev＝０を閾値ｔｈと比較する。閾値ｔｈ＝３であるので、処理を終了する。すなわち、誤差残差が十分小さくなるので、処理を終了する。
【００７４】
以上の手法により、手動でカメラを２次元的に自由に動かして撮影した動画を接合しての静止画像の作成において、往復的なカメラ軌跡での撮影の折に位置ずれが発生することを回避する。もちろん、カメラ１００をパンチルト操作可能な雲台に取り付けることで、カメラ１００を手動ではなく電動で動かすこともできる。
【００７５】
以上、本発明を実施の形態をもとに説明した。この実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００７６】
上記画像処理のうちの一部又は全部は、コンピュータプログラムによって実行されてもよい。上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体（ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（ｔａｎｇｉｂｌｅ  ｓｔｏｒａｇｅ  ｍｅｄｉｕｍ）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ)、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ)、フラッシュＲＯＭ、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００７７】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は上記実施の形態に限られたものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
【００７８】
例えば、以下のような構成であっても、位置ずれの少ない接合画像を生成することができる、という効果を奏することができる。複数の画像に基づく複数のテクスチャを接合して接合画像を生成する画像処理装置であって、前記複数の画像における画像間の動きを導出する導出部と、前記画像間の動きに基づいて、前記接合画像を構成する前記複数のテクスチャをフレームメモリに書き込むテクスチャ書き込み部と、被写体を含む第１の画像と、前記被写体の少なくとも一部を含むとともに前記第１の画像よりも後に撮像された第２の画像とを解析し、前記第１の画像における前記被写体の位置と、前記第２の画像における前記被写体の位置とを検出する検出手段と、前記テクスチャ書込部は、前記第１の画像と前記第２の画像との間の画像を、前記第１の画像における前記被写体の位置、及び、前記第２の画像における前記被写体の位置に基づいて、前記フレームメモリに書き込む、ことを特徴とする画像処理装置。
【００７９】
また、被写体を含むフレームを対象区間の開始フレームとし、その被写体が視野内に一旦含まれなくなった後、再度視野内に含まれるようになったフレームを対象区間の終了フレームとするのは一例であり、必ずしも被写体が視野内に一旦含まれなくなった後のフレームを終了フレームとしなくてもよい。
【００８０】
”Looping Path Problem”のように被写体７２が一旦視野から外れる場合に限らず、カメラを大きく動かして、視野を変化させる場合でも、接合画像において、被写体７２が二重に表示されてしまうことがある。このような場合でも、上記の画像処理方法を用いれば、接合画像における位置ずれを低減することができる。さらに、第１の画像から第２の画像までに蓄積された蓄積誤差を補正する方法は、上記の方法に限定されるものでない。
【００８１】
よって、本実施の形態に係る画像処理装置は、以下のような構成を有していてもよい。複数の画像に基づく複数のテクスチャを接合して接合画像を生成する画像処理装置であって、前記複数の画像における画像間の動きベクトルを導出する動きベクトル導出部（例えば、図１における動きベクトル導出部２１）と、第１の画像から第２の画像までの蓄積誤差に基づいて、前記第１の画像から前記第２の画像までの対象区間に含まれる画像における動きベクトルを補正する補正部（例えば、図１における補正部４０）と、前記補正部によって補正された動きベクトルに基づいて、前記接合画像を構成する前記複数のテクスチャをフレームメモリに書き込むテクスチャ書き込み部（例えば、図１におけるテクスチャ書き込み部２８）と、備えることを特徴とする画像処理装置。このような構成によれば、第１の画像から第２の画像までの蓄積誤差に基づいて、複数の画像の動きベクトルを補正しているため、接合画像における被写体の位置ずれを低減することができる。さらに、方位センサ・姿勢センサ・加速度センサなどの情報を用いずに、蓄積誤差を補正することができるため、小型化、軽量化、及び低コスト化を図ることができる。
【００８２】
前記補正部は、前記第１の画像から前記第２の画像までの蓄積誤差に基づいて、前記第１の画像と前記第２の画像との間の画像を含む複数の画像における動きベクトルを補正するようにしてもよい。この構成によれば、第１の画像と第２の画像との間の画像における動きベクトルを補正することができる。
【００８３】
前記第１の画像と前記第２の画像とを比較して前記蓄積誤差を取得する蓄積誤差取得部を備えてもよい。こうすることで、蓄積誤差を正確に取得することができるため、接合画像における被写体の位置ずれをより低減することができる。
【００８４】
前記蓄積誤差取得部は、ユーザによって決定された、前記第１の画像に含まれる被写体の位置と前記第２の画像に含まれる前記被写体の位置とに基づいて、前記蓄積誤差を取得しもよい。これにより、蓄積誤差の抽出をユーザが被写体の位置ずれから目視などにより決定することができる。
【００８５】
上記の画像処理装置において、前記第２の画像は、前記第１の画像に含まれていた被写体が視野から外れた後、再度、前記被写体が視野内となった画像であってもよい。これにより、”Looping Path Problem”によって生じる位置ずれを低減することができる。なお、この場合、第１の画像及び第２の画像には被写体が含まれ、第１の画像と第２の画像との間には、被写体が含まれていない第３の画像があることになる。
【００８６】
前記補正部は、前記蓄積誤差を前記対象区間に含まれる複数のフレームに対しｎ（ｎは０を含む整数）画素ずつ均等に割り当てて、動きベクトルを補正するようにしてもよい。こうすることで、対象区間の全フレームの動きベクトルの補正値を等しくすることができる。
【００８７】
前記補正部は、前記蓄積誤差を前記対象区間に含まれる複数のフレームに対しｎ（ｎは０を含む整数）画素ずつ均等に割り当て、前記蓄積誤差から均等に割り当てた補正量を除いた誤差残差を割り当てる割当フレームを前記対象区間から抽出し、前記割当フレームに１画素ずつ誤差残差を割り当てて、前記動きベクトルを補正するようにしてもよい。こうすることで、サブピクセル処理を回避することができる。
【００８８】
また、本実施の形態に係る画像処理方法は、以下のような構成を有していてもよい。複数の画像に基づく複数のテクスチャを接合して接合画像を生成する画像処理方法であって、前記複数の画像における画像間の動きベクトルを導出する動きベクトル導出ステップと、第１の画像から第２の画像までの蓄積誤差に基づいて、前記第１の画像から前記第２の画像までの対象区間に含まれる画像における動きベクトルを補正する補正ステップと、前記補正ステップによって補正された動きベクトルに基づいて、前記接合画像を構成する前記複数のテクスチャをフレームメモリに書き込むテクスチャ書き込みステップと、を有することを特徴とする画像処理方法。第１の画像から第２の画像までの蓄積誤差に基づいて、複数の画像の動きベクトルを補正しているため、接合画像における被写体の位置ずれを低減することができる。
【００８９】
また、本実施の形態に係る画像処理プログラムは、以下のような構成を有していてもよい。複数の画像に基づく複数のテクスチャを接合して接合画像を生成する画像処理をコンピュータに実行させるプログラムであって、前記複数の画像における画像間の動きベクトルを導出する動きベクトル導出ステップと、第１の画像から第２の画像までの蓄積誤差に基づいて、前記第１の画像から前記第２の画像までの対象区間に含まれる画像における動きベクトルを補正する補正ステップと、前記補正ステップによって補正された動きベクトルに基づいて、前記接合画像を構成する前記複数のテクスチャをフレームメモリに書き込むテクスチャ書き込みステップと、をコンピュータに実行させることを特徴とするプログラム。第１の画像から第２の画像までの蓄積誤差に基づいて、複数の画像の動きベクトルを補正しているため、接合画像における被写体の位置ずれを低減することができる。
【符号の説明】
【００９０】
１０  撮像部
１１  撮像素子
１２  撮像レンズ
２０  画像処理装置
２１  動きベクトル導出部
２２  動きベクトル保存部
２３  第１の補正部
２４  第２の補正部
２５  開始フレーム番号入力部
２６  終了フレーム番号入力部
２７  蓄積誤差入力部
２８  テクスチャ書き込み部
２９  フレームメモリ
３０  表示部
４０  補正部
５０  蓄積誤差取得部
【図１】
2015201826.tif 000003
【図２】
2015201826.tif 000004
【図３】
2015201826.tif 000005
【図４】
2015201826.tif 000006
【図５】
2015201826.tif 000007
【図６】
2015201826.tif 000008