〔第1実施形態〕
以下、本発明の第1実施形態を図面に基づいて説明する。
図1は、本発明の第1実施形態に係る画像処理装置100のハードウェアの構成を示す図である。画像処理装置100は、例えばデジタルカメラにより構成することができる。
画像処理装置100は、光学レンズ装置1と、シャッタ装置2と、アクチュエータ3と、CMOSセンサ4と、AFE5と、TG6と、DRAM7と、DSP8と、CPU9と、RAM10と、ROM11と、液晶表示コントローラ12と、液晶ディスプレイ13と、操作部14と、メモリカード15と、を備える。
光学レンズ装置1は、フォーカスレンズやズームレンズなどで構成される。フォーカスレンズは、被写体像をCMOSセンサ4の受光面に結像させるためレンズである。
シャッタ装置2は、CMOSセンサ4へ入射する光束を遮断する機械式のシャッタとして機能するとともに、CMOSセンサ4へ入射する光束の光量を調節する絞りとしても機能するものである。シャッタ装置2は、シャッタ羽根などから構成される。アクチュエータ3は、CPU9による制御に従って、シャッタ装置2のシャッタ羽根を開閉させる。
CMOSセンサ4は、光学レンズ装置1から入射された被写体像を光電変換(撮影)するイメージセンサである。CMOSセンサ4は、TG6から供給されるクロックパルスに従って、一定時間毎に被写体像を光電変換して画像信号を蓄積し、蓄積した画像信号を順次出力する。CMOSセンサ4は、CMOS(Complementary Metal Oxide Semiconductor)型のイメージセンサなどから構成される。
AFE(Analog Front End)5は、TG6から供給されるクロックパルスに従って、CMOSセンサ4から供給された画像信号に対し、A/D(Analog/Digital)変換処理などの各種信号処理を施すことにより、ディジタル信号を生成して出力するものである。
TG(Timing Generator)6は、CPU9による制御に従って、一定時間毎にクロックパルスをCMOSセンサ4とAFE5とにそれぞれ供給するものである。
DRAM(Dynamic Random Access Memory)7は、AFE5により生成されたディジタル信号や、DSP8により生成される画像データを一時的に記憶するものである。
DSP(Digital Signal Processor)8は、CPU9による制御に従って、DRAM7に記憶されたディジタル信号に対し、ホワイトバランス補正処理、γ補正処理、YC変換処理などの各種画像処理を施すことにより、輝度信号と色差信号とでなるフレーム画像データを生成するものである。以下の説明においては、このフレーム画像データにより表現される画像をフレーム画像と呼ぶことにする。
CPU(Central Processing Unit)9は、画像処理装置100全体の動作を制御するものである。RAM(Random Access Memory)10は、CPU9が各処理を実行する際にワーキングエリアとして機能するものである。ROM(Read Only Memory)11は、画像処理装置100が各処理を実行するのに必要なプログラムやデータを記憶するものである。CPU9は、RAM11をワーキングエリアとして、ROM12に記憶されているプログラムとの協働により各処理を実行する。
液晶表示コントローラ12は、CPU9による制御に従って、DRAM7やメモリカード15に記憶されているフレーム画像データをアナログ信号に変換して出力するものである。液晶ディスプレイ13は、液晶表示コントローラ12から供給されたアナログ信号により表現される画像などを表示する。
操作部14は、ユーザから各種ボタンの操作を受け付けるものである。操作部14は、電源ボタン、十字ボタン、決定ボタン、メニューボタン、シャッタボタンなどを備える。操作部14は、ユーザから受け付けた各種ボタンの操作に対応する信号をCPU9に供給する。CPU9は、操作部14からこれらの信号を受信すると、受信した信号に基づいた処理を実行する。
メモリカード15は、DSP8により生成されたフレーム画像データを記録する記録媒体である。
図2は、本実施形態における画像処理装置100の機能構成を示すブロック図である。本実施形態では、画像処理装置100は、画像入力部210と、画像処理部220と、操作受付部230と、表示部240と、記憶部250と、制御部260と、を備えることが想定される。
画像入力部210は、制御部260による制御に従って、複数のフレーム画像データを入力するものである。これら複数のフレーム画像データによりそれぞれ表現されるフレーム画像は、時系列的に連続している。画像入力部210は、図1に示される光学レンズ装置1と、シャッタ装置2と、アクチュエータ3と、CMOSセンサ4と、AFE5と、TG6と、DRAM7と、DSP8とにより実現され得る。
画像処理部220は、制御部260による制御に従って、後述する画像変化量算出処理や画像抽出処理を実行するものである。画像処理部220は、画像変化量算出部221と、区間指定部222と、値決定部223と、乖離度算出部224と、画像抽出部225と、を備える。
画像変化量算出部221は、画像入力部210により入力されたフレーム画像の縮小画像から、時系列的に隣接する縮小画像間の変化量(例えば、画素値の差の総和)をそれぞれ算出するものである。画像変化量算出部221は、図1に示されるCPU9により実現され得る。
区間指定部222は、画像入力部210により入力されたフレーム画像の縮小画像の全てが存在する時系列上の全区間において、所定の運動区間D(第1の区間)を順次変更しながら、変更した運動区間Dを順次指定するものである。また、区間指定部222は、前述の全区間から運動区間Dを除いた区間である非運動区間D´(第2の区間)を順次指定するものである。この運動区間Dと非運動区間D´とについては後述する。区間指定部223は、運動区間Dと非運動区間D´との指定結果を値決定部222に供給する。区間指定部222は、図1に示されるCPU9により実現され得る。運動区間Dを、例えば、全区間のうち例えば、フレーム画像の縮小画像が途切れ途切れでない一塊の区間とし、非運動区間D´を、全区間から運動区間Dを除いた区間としてもよい。
値決定部223は、区間指定部222により指定された運動区間Dに存在する各縮小画像間の変化量に基づく値(例えば、運動区間Dに存在する各縮小画像間の変化量の平均値)を、第1の値として決定するものである。また、値決定部223は、区間指定部222により指定された非運動区間D´に存在する各縮小画像間の変化量に基づく値(例えば、非運動区間D´に存在する各縮小画像間の変化量の平均値)を、第2の値として決定するものである。値決定部223は、第1の値と第2の値との決定結果を乖離度算出部224に供給する。値決定部223は、図1に示されるCPU9により実現され得る。
乖離度算出部224は、区間指定部222により運動区間Dが指定される度に、各第1の変化量と第1の値(各第1の変化量の平均値など)との乖離度(以下、第1の乖離度と呼ぶ)をそれぞれ算出するものである。また、乖離度算出部224は、区間指定部222により非運動区間D´が指定される度に、各第2の変化量と第2の値(各第2の変化量の平均値など)との乖離度(以下、第2の乖離度と呼ぶ)をそれぞれ算出するものである。乖離度算出部224は、図1に示されるCPU9により実現され得る。
画像抽出部225は、乖離度算出部224により算出された各第1の乖離度と各第2の乖離度との総和が最小になるとき、このときに区間指定部222により指定されていた運動区間Dに存在する縮小画像を、画像入力部210により入力されたフレーム画像の縮小画像の中から抽出するものである。画像抽出部225は、図1に示されるCPU9により実現され得る。
操作受付部230は、ユーザの画像処理装置100に対する操作を受け付けるものである。この操作としては、画像処理装置100に対し、ユーザが撮影を指示する操作や、ユーザが撮影する画像の枚数(以下、撮影枚数と呼ぶ)を設定する操作や、画像抽出部225が抽出するフレーム画像の枚数(以下、抽出枚数と呼ぶ)を設定する操作などがある。操作受付部230は、ユーザの操作を受け付けた結果を制御部260に供給する。操作受付部230は、図1に示される操作部14により実現され得る。
表示部240は、画像入力部210により入力されたフレーム画像などを表示するものである。表示部240は、図1に示される液晶表示コントローラ12と、液晶ディスプレイ13とにより実現され得る。
記録部250は、画像抽出部225により抽出されたフレーム画像を表現するフレーム画像データを記録するものである。記録部250は、図1に示されるメモリカード15により実現され得る。
制御部260は、各部により実行される処理を統括的に制御するものである。制御部260は、図1に示されるCPU9と、RAM10と、ROM11とにより実現され得る。
図3は、画像処理装置100が実行する連写撮影処理の流れの一例を示すフローチャートである。この連写撮影処理は、制御部260(CPU9)が実行するものとして説明する。また、この連写撮影処理は、ユーザが操作受付部230に対し所定の操作を行うことを契機として開始される。
制御部260は、連写撮影処理の開始とともに、画像入力部210により入力されるフレーム画像を表示部240に順次供給させることにより、フレーム画像をライブビュー画像として表示部240に表示させる。
ステップS1では、制御部260は、ユーザにより画像の撮影枚数および抽出枚数を設定する操作がなされたか否かを判断する。具体的には、制御部260は、撮影枚数や抽出枚数を設定する操作に対応する信号が操作受付部230から供給されたか否かにより、ユーザにより画像の撮影枚数および抽出枚数を設定する操作がなされたか否かを判断する。ステップS1の判断がYESの場合には、制御部260は、ユーザの操作に対応した撮影枚数や抽出枚数を設定した後、ステップS2に処理を進める。一方、ステップS1の判断がNOの場合には、制御部260は、ステップS1の処理をくり返す。
以降の説明においては、設定された撮影枚数としてN枚を、抽出枚数としてM枚を想定する。つまり、時系列的に連続するN枚のフレーム画像の中から、時間的に相前後するフレーム画像間で被写体の動きが大きいM枚のフレーム画像を抽出する。例えば、図4に示すように、画像処理装置100が、自動車がCMOSセンサ4の撮影範囲内を通過する際の画像を連続してN枚撮影し、このN枚の連続する画像の中から、撮影範囲内を移動している自動車が撮影されているM枚の画像のみを抽出する。
ステップS2では、制御部260は、操作受付部230から供給されるシャッタボタンの操作に応じた信号を監視する。制御部260は、ユーザによるシャッタボタンの操作に応じた信号を検出すると、画像入力部210に、時系列的に連続するN枚のフレーム画像を入力させる(連写撮影)。以下の説明においては、これらN枚のフレーム画像を、それぞれ、p[x](0≦x≦N−1)と表す。xは、各フレーム画像に付与されるインデックス番号である。ここで、時系列で最も古いフレーム画像から順番に、0,1,2,・・・N−1の各インデックス番号を付してゆく。これらフレーム画像を、インデックス番号順、つまり時系列順に配列したものを画像配列Pとする。
ステップS3では、制御部260は、撮影処理部221により、撮影されたN枚のフレーム画像を縮小して、時系列的に配列されたN枚の縮小画像を生成する。この縮小処理は、一般的に行われる画像の画素数を縮小する処理である。縮小率は、被写体の最小の大きさや手振れの影響を考慮して、カメラの特性に合わせて適宜決定してよい。以下の説明においては、このN枚の縮小画像を、それぞれ、ps[x](0≦x≦N−1)と表す。この縮小処理では、フレーム画像のインデックス番号と、このフレーム画像から生成した縮小画像のインデックス番号とを一致させておく。つまり、縮小画像についても、フレーム画像と同様に、時系列で最も古い縮小画像から順番に、0,1,2,・・・N−1のインデックス番号を付してゆく。
そして、図5に示すように、これら縮小画像を、インデックス番号順つまり時系列順に配列したものを縮小画像配列PSとする。
ステップS4では、制御部260は、画像変化量算出処理を行う。すなわち、図5に示すように、縮小画像配列PSについて、時間的に相前後する縮小画像ps[x]同士の変化量を画像変化量eとして算出する。この画像変化量eのインデックス番号を上記のxとして、この算出した各画像変化量をe[x](0≦x≦N−2)と表す。ここで、時系列で最も古い画像変化量から順番に、0,1,2,・・・N−2のインデックス番号を付してゆく。これら画像変化量e[x]を、インデックス番号順つまり時系列順に配列したものを画像変化量配列Eとする。ステップS4の画像変化量算出処理の詳細は後述する。
ステップS5では、制御部260は、N枚の縮小画像の中から被写体像の動きが比較的大きい縮小画像のみを抽出する。ステップS5の画像抽出処理の詳細は後述する。
ステップS6では、制御部260は、ステップS5の処理により抽出した縮小画像がM枚になるように調整する。これは、ユーザの操作により設定された抽出枚数はM枚であるのに対し、このM枚よりも多くの枚数の縮小画像をステップS5の処理により抽出した場合や、M枚よりも少ない枚数の縮小画像をステップS5の処理により抽出した場合には、縮小画像の枚数を、ユーザの所望するM枚に調整する必要があるからである。
よって、具体的には、抽出した縮小画像の枚数がMよりも大きい場合には、例えば、運動区間Dに含まれる画像を所定間隔おきに抽出して、画像数をM枚とする。一方、抽出した縮小画像がM枚よりも小さい場合には、例えば、運動区間Dの範囲を拡張することで、運動区間Dに含まれる縮小画像の枚数をM枚とする。
ステップS7では、制御部260は、ステップS6の処理により抽出枚数が調整された縮小画像に対応したフレーム画像データのみを記録部250に記録する。また、このとき、制御部260は、記録部250に記録される各フレーム画像データを合成した合成画像や、各フレーム画像データの縮小画像を表示部240に一時的に表示させる。
図6は、ステップS4の画像変化量算出処理の詳細な流れの一例を示すフローチャートである。図6を参照して、画像変化量算出処理の詳細について説明する。以下の説明では、この画像変化量算出処理は、制御部260による制御に従って、画像処理部220が行うものとする。
この画像変化量算出処理は、時系列上で互いに隣接する縮小画像psにおいて互いに同じ位置にある画素の画素値の差分の絶対値の総和を、画像変化量eとして算出する処理である。このため、この画像変化量eは、時系列上で互いに隣接する縮小画像psにより規定されることとなる。
この画像変化量算出処理に関する説明においては、画像変化量eの総和の暫定値をdとする。また、便宜上、縮小画像のインデックス番号を、上記のxに代えてiで表す。また、縮小画像ps[i]の画素数については、水平方向であるx方向の画素数をp、垂直方向であるy方向の画素数をqとする。また、縮小画像ps[i]上における任意の画素の位置を、座標(x,y)で表すものとする。
画像処理部220は、インデックス番号iとして0(零)を設定し(ステップS11)、暫定値dの初期値を0に設定し(ステップS12)、y座標の初期値を1に設定し(ステップS13)、x座標の初期値を1に設定する(ステップS14)。
次に、画像処理部220の画像変化量算出部221は、縮小画像ps[i]の座標(x,y)の画素の画素値と、縮小画像ps[i+1]の座標(x,y)の画素の画素値との差分の絶対値を算出し、算出した差分の絶対値を暫定値dに加える(ステップS15)。
次に、画像処理部220は、xがpであるか否かを判定する(ステップS16)。ステップS16の判定がYESの場合には、画像処理部220は、ステップS18に処理を進める。一方、ステップS16の判定がNOの場合には、画像処理部220は、座標xをインクリメント(xを1だけ増加)して(ステップS17)、ステップS15に処理を戻す。
次に、画像処理部220は、yがqであるか否かを判定する(ステップS18)。ステップS18の判定がNOの場合には、画像処理部220は、座標yをインクリメント(yを1だけ増加)して(ステップS19)、ステップS14に処理を戻す。
一方、ステップS18の判定がYESの場合には、画像処理部220は、画像変化量e[i]を暫定値dとして保持する(ステップS20)。次に、画像処理部220は、現在のインデックス番号iがN−2(Nは、ステップS1の処理において設定された撮影枚数)であるか否かを判定する(ステップS21)。ステップS21の判定がNOの場合には、画像処理部220は、カウンタiをインクリメント(iを1だけ増加)して(ステップS21)、ステップS12に処理を戻す。一方、ステップS21の判定がNOの場合には、画像処理部220は、画像変化量算出処理を終了させる。
次に図7を参照して、ステップS5の画像抽出処理について説明する。図7において、横軸はインデックス番号xを示し、縦軸は画像変化量e[x]を示す。図中、実線により示される曲線が、各インデックス番号xに対応する画像変化量e[x]を示す。また、破線により示される曲線は、後述する孤立矩形状関数r[x]を示す。なお、画像変化量e[x]の値は、整数値であるインデックス番号xごとに定まる離散値であるため、図7では画像変化量e[x]の各値を直線で結んだものを示している。
まず、運動区間Dの開始点および終了点に対応するインデックス番号を、それぞれ、x1、x2とする。すると、運動区間Dは、x1からx2までの区間として、以下のように表される。
D=[x1,x2] (0<x1<x2<N−2)
ここで、[x1,x2]とは、x1からx2までの区間を表す。これらx1、x2は、運動区間Dと非運動区間D´との区切り(境界)となる。そして、画像処理部220の区間指定部222は、以上の開始点x1、終了点x2の組合せをの全てを順次指定し、これらx1、x2の複数の各組合せによりそれぞれ規定される運動区間Dと複数の非運動区間D´とについて、以下の処理を行う。
画像処理部220の値決定部223は、区間指定部222により指定されるx1、x2の組合せのそれぞれについて、運動区間Dに含まれる全てのインデックス番号xに対応する画像変化量e[x]に基づいて、第1の値を決定する。また、画像処理部220の値決定部223は、区間指定部222により指定されるx1、x2の組合せのそれぞれについて、非運動区間D´に含まれる全てインデックス番号xに対応する画像変化量e[x]に基づいて、第2の値を決定する。具体的には、値決定部223は、運動区間Dに属する各画像変化量配列Eの平均値であるaを算出し、このaを第1の値として決定する。また、値決定部223は、非運動区間D´に属する各画像変化量配列Eの平均値であるbを算出し、このbを第2の値として決定する。
画像処理部220の乖離度算出部224は、区間指定部222により指定されるx
1、x
2の組合せのそれぞれについて、孤立矩形状関数r[x]を以下のように定義する。
この孤立矩形状関数r[x]の値は、運動区間Dではaとなり、非運動区間D´ではbとなる。
画像処理部220の乖離度算出部224は、区間指定部222により指定されるx
1、x
2の組合せのそれぞれについて、孤立矩形状関数r[x]と画像変化量配列Eとの乖離度Jを算出する。乖離度Jとは、各インデックス番号xごとの孤立矩形状関数r[x]と画像変化量配列Eとの差分の総和である。具体的には、以下の式のように、孤立矩形状関数r[x]と画像変化量配列Eとの差分を2乗した値の総和を乖離度Jとする。
乖離度Jが最小となるときに区間指定部222により指定されていたx1、x2により規定される運動区間を運動区間Dminと呼べば、画像抽出部225は、この運動区間Dminに含まれる全ての画像変化量eをそれぞれ規定する縮小画像psを、画像入力部210により入力されたフレーム画像の縮小画像の中から抽出する。
次に、ステップS5の画像抽出処理の流れの概要を説明する。以下の説明においては、乖離度Jの最小値をJminとし、乖離度Jminでの運動区間Dの開始点をm1、終了点をm2とし、開始点m1および終了点m2に対応した縮小画像配列PSのインデックス番号をxin、xoutとする。
まず、画像処理部220は、x1,x2を変化させながら乖離度Jを順次算出し、順次算出した乖離度J同士を比較することで、順次算出した各乖離度Jのうちの最小値である乖離度Jminを求める。そして、画像処理部220は、乖離度Jが最小値Jminとなるときに指定されている運動区間Dminの開始点m1、終了点m2を求める。その際、画像処理部220は、x1,x2の取り得る値の全ての組合せについて完全探索を行う。ここで、x1,x2は離散値である。
第1実施形態における完全探索とは、x1を0と(N−3)との間で変化させながら、x2をx1と(N−2)との間で変化させて、x1とx2との全ての組合せについて乖離度Jを確認する処理である。具体的には、まず、x1を0に固定して、x2を1から(N−2)まで変化させる。次に、x1を1に固定して、x2を2から(N−2)まで変化させる。次に、x1を2に固定して、x2を3から(N−2)まで変化させる。このように、画像処理部220は、x1の値を0から(N−3)まで1つずつ増加させながら、各x1のちに対応させてx2も1つずつ増加させてゆく。画像処理部220は、x1またはx2が1つ変化する度に、この度に算出される乖離度Jを確認する。
なお、通常、1回の連写撮影により得られるフレーム画像は数枚程度であるため、フレーム画像のインデックスであるxは比較的制約されることとなる。そのため、制御部260(CPU9)に対する完全探索による処理の負荷は小さいものとなる。
図8は、ステップS5の画像抽出処理の詳細な流れの一例を示すフローチャートである。図8を参照して、画像抽出処理の詳細について説明する。以下の説明では、この画像抽出処理は、制御部260による制御に従って、画像処理部220が行うものとする。
まず、画像処理部220は、Jminの初期値を無限大に近い所定値として設定する(ステップS31)。次に、画像処理部220の区間指定部222は、x1の初期値をゼロとして設定し(ステップS32)、x2の初期値をx1+1として設定する(ステップS33)。次に、画像処理部220の値決定部223は、孤立矩形状関数r[x]の運動区間Dにおける関数値a、非運動区間D´における関数値bを決定する(ステップS34)。次に、画像処理部220の乖離度算出部224は、乖離度Jを算出する(ステップS35)。
次に、画像処理部220は、ステップS35の処理により算出された乖離度JがJminより小さいか否かを判定する(ステップS36)。ステップS36の判定がNOの場合には画像処理部220は、ステップS39に処理を進める。一方、ステップS36の判定がYESの場合には、画像処理部220は、ステップS37に処理を進める。ステップS37では、画像処理部220は、ステップS35の処理により算出された乖離度JをJminとして設定する。次に、画像処理部220は、開始点m1を暫定的にx1として設定し、終了点m2を暫定的にx2として設定する(ステップS38)。
ステップS39では、画像処理部220は、x2がN−2(Nは、ステップS1の処理において設定された撮影枚数)であるか否かを判定する。ステップS39の判定がYESの場合には、画像処理部220は、ステップS41に処理を進める。次に、画像処理部220は、x1がN−3であるか否かを判定する(ステップS41)。ステップS41の判定がYESの場合には、画像処理部220は、ステップS43に処理を進める。ステップS41の判定がNOの場合には、画像処理部220は、カウンタx1をインクリメント(x1を1だけ増加)して(ステップS42)、ステップS33に処理を戻す。
一方、ステップS39の判定がNOの場合には、画像処理部220は、カウンタx2をインクリメント(x2を1だけ増加)して(ステップS40)、ステップS34に処理を戻す。
ステップS43では、ステップS33〜S41のループ処理が終了したため、開始点m1および終了点m2が確定している。これらm1、m2は、画像変化量配列Eのインデックス番号であり、m1、m2の画像変化量e[m1]、e[m2]は、それぞれ、2つの縮小画像psに基づいて算出されるものである。よって、2つの縮小画像psのいずれを画像変化量e[m1]、e[m2]に対応させてps[xin]、ps[xout]として採用するのかを決定する必要がある。そこで、ステップS43では、画像処理部220は、(m1+1)を開始点xinとして設定し、m2を終了点xoutとして設定する。
ステップS44では、縮小画像配列PSにおいて、運動区間Dの開始点の縮小画像ps[xin]から終了点の縮小画像ps[xout]までにおいて、時系列的に連続する一連の縮小画像を抽出する。そして、画像処理部220は、ステップS44の処理の後に画像抽出処理を終了させる。
第1実施形態では、画像変化量配列Eの比較対象として、a、bを関数値とする孤立矩形状関数r[x]を定義した。この関数値aは運動区間Dにおける画像変化量配列Eの平均値であり、関数値bは運動区間D´における画像変化量配列Eの平均値であるため、運動区間Dの開始点x1および終了点x2の位置に応じて動的に変化する。そのため、閾値a、bと画像変化量配列Eとを比較して、乖離度Jの最小値Jminを求めるだけで、この乖離度Jminでの開始点m1の画像変化量e[m1]、終了点m2の画像変化量e[m2]を、相対的に変化の大きい画像変化量として的確に抽出できる。よって、画像変化量の大きいフレーム画像群、すなわち被写体の動きの大きいフレーム画像群を抽出できる。
図9(a)〜(d)は、x1=1の場合における孤立矩形状関数r[x]の具体例であり、図10(a)〜(d)は、x1=3の場合における孤立矩形状関数r[x]の具体例である。図9(a)〜(d)および図10(a)〜(d)において、横軸はインデックス番号xであり、縦軸は画像変化量である。図9(a)〜(d)および図10(a)〜(d)においては、太い実線で描かれている矩形波が孤立矩形状関数r[x]を示しており、細い実線で描かれている波形が画像変化量配列Eを示している。なお、画像変化量e[x]の値は離散値であるため、これら図9(a)〜(d)および図10(a)〜(d)では、画像変化量e[x]の各値を直線で結んでいる。
これら図9(a)〜(d)および図9(a)〜(d)に示すように、孤立矩形状関数r[x]の関数値aは運動区間Dにおける画像変化量配列Eの平均値であり、関数値bは非運動区間D´における画像変化量配列E平均値であるため、運動区間Dの開始点x1および終了点x2の位置に応じて動的に変化することが判る。図10(c)において孤立矩形状関数r[x]を示す波形と画像変化量配列Eを示す波形とが最も近似するため、乖離度Jは、図10(c)のx1=3、x2=6の場合に最小となっていることが理解できる。
以上説明したように、第1実施形態に係る画像処理装置100は、孤立矩形状関数r[x]の関数値aを運動区間Dにおける画像変化量配列Eの平均値とし、関数値bを非運動区間D´における画像変化量配列Eの平均値とする。次に、関数値a、bと画像変化量配列Eとの乖離度Jが最小となるJminを求める。そして、この乖離度Jminでの開始点m1の画像変化量e[m1]に対応する画像p[xin]、終了点m2の画像変化量e[m2]に対応する画像p[xout]を求める。そして、画像配列Pの中から、フレーム画像p[xin]からフレーム画像p[xout]まで時間的に連続するフレーム画像群を抽出する。
このように、2つの関数値a、bは、一定値ではなく、運動区間Dの開始点x1および終了点x2の位置に応じて動的に変化する画像変化量配列Eの平均値である。すると、閾値a、bと画像変化量配列Eとを比較して、乖離度Jの最小値Jminを求めるだけで、この乖離度Jminでの開始点m1の画像変化量e[m1]、終了点m2の画像変化量e[m2]を、相対的に変化の大きい画像変化量として的確に抽出できる。そのため、時系列的に連続する画像配列Pの中から被写体が大きく動くフレーム画像群を精度良く抽出できる。そのため、本実施形態に係る画像処理装置100は、例えば、陸上競技や球技等のように撮影範囲内を被写体(陸上選手や球)が通過するシーンを連写撮影した画像や、体操競技のような、撮影範囲内で被写体(体操選手)が静止、移動、静止の順に動作するシーンを連写撮影した画像から、撮影範囲内で被写体の動きが大きい画像のみを適正に抽出できる。
また、例えば、手振れにより各画像変化量eの値が変動しても、つまり手振れにより図9や図10に示される画像変化量配列Eを示す波形の位置が上下方向に変動しても、関数値a、bはそれぞれ画像変化量配列Eの平均値であるため、関数値a、bもこの変動に追従することになる。よって、第1実施形態に係る画像処理装置100は、従来のような閾値の調整が不要となり、手振れなどの外乱の影響をほとんど受けないで、撮影状況によらずに被写体の動きの大きいフレーム画像群を適切に抽出でき、汎用性が高い。
画像の背景領域および被写体領域の模様がほぼ一様である場合、時間的に相前後するフレーム画像間の変化量は、フレーム画像間での被写体の動きの大きさに比例して増大する。しかしながら、実際には、フレーム画像間において被写体により隠蔽される背景領域の差分、被写体領域の面積や内容の差分、さらに手振れによる全体的なエッジの差分などが発生するため、時間的に相前後するフレーム画像間の変化量は不安定に変動するという問題がある。
そこで、第1実施形態に係る画像処理装置100では、2つの関数値a、bからなる孤立矩形状関数r[x]を定義した。この孤立矩形状関数r[x]は、運動区間Dの開始点x1および終了点x2の2つのパラメータを決定するだけで、運動区間Dでは運動区間Dに含まれる画像変化量eの平均値aが、非運動区間D´については非運動区間D´に含まれる画像変化量eの平均値bが関数値として定義される。よって、第1実施形態に係る画像処理装置100は、いくつかの画像変化量eがノイズにより多少変動しても、孤立矩形状関数r[x]と画像変化量配列Eとの相対的な関係は、この画像変化量eの変動の影響を大きく受けないので、外乱に対して強い。
ところで、連写撮影が行われる場合、ユーザによりシャッタボタンが押下されたことに起因してシャッタボタンの押下直後の一定期間にのみ手振れが発生した場合、シャッタボタン押下直後に撮影される画像の変化量が大きくなる。このような場合、例えば図4に示される撮影状況においては、シャッタボタン押下直後の撮影区間、撮影範囲内を自動車が通過していく撮影区間という2つの異なる撮影区間のそれぞれにおいて、時間的に連続するフレーム画像間の変化量が大きくなる。すると、このような場合、2つの異なる撮影区間のそれぞれからフレーム画像群を抽出してしまうことが懸念される。例えば図4に示される撮影状況においては、シャッタボタン押下直後に撮影される画像、つまり撮影範囲に被写体が存在せずに変化に乏しいフレーム画像群を抽出してしまうという問題が懸念される。
しかし、第1実施形態に係る画像処理装置100によれば、フレーム画像群を抽出する撮影区間(運動区間D)が一つだけ定まるため、不要なフレーム画像群を抽出してしまう可能性を低減できる。つまり、第1実施形態に係る画像処理装置100によれば、手振れ等の外乱の影響によって画像変化量配列Eを示す波形において山の区間が複数存在したとしても、すなわち画像変化量配列Eにおいて画像変化量eが大きくなる区間が複数存在したとしても、手振れ等の外乱の影響により画像間の変化量が大きくなった区間を抽出対象から排除して、被写体像の動きが大きい画像のみをより確実に抽出することができる。
第1実施形態に係る画像処理装置100は、縮小画像配列PSにおいて時間的に相前後する縮小画像ps同士の差分に基づいて画像変化量eを算出した。縮小画像配列PSにおいて時間的に相前後する縮小画像psに対応するフレーム画像間の撮影時間間隔は短いため、手振れや蛍光灯のフリッカなどが発生しても、時間的に相前後する縮小画像ps同士の画像変化量eが大きく変化することはないので外乱の影響を受けにくくなる。これにより、ユーザが画像処理装置100を自身の手に構えて撮影を実行する場合でも縮小画像ps同士の位置合わせ処理を実行する必要がないので、画像処理部220(CPU9)の計算負荷を低減できる。
〔第2実施形態〕
次に、本発明の第2実施形態について説明する。第2実施形態では、画像処理部220の構成およびステップS5の画像抽出処理が第1実施形態と異なる。他の構成や処理は、第1実施形態のものと同様であるので、その説明を省略する。
図11は、第2実施形態に係る画像処理装置100の機能構成を示すブロック図である。第2実施形態に係る画像処理装置100の機能構成のうち第1実施形態のものと異なるのは、画像処理部220の構成のみである。第2実施形態における画像処理部220は、画像変化量算出部221と、抽出枚数設定部226と、画像変化量特定部227と、判定部228と、画像削除部229と、画像抽出部225と、を備えることが想定される。
第2実施形態では、画像変化量算出部221は、最初に、画像入力部210により入力されたフレーム画像の縮小画像から、時間的に相前後する縮小画像間の変化量(例えば、画素値の差の総和)をそれぞれ算出するものである。そして、画像削除部229により縮小画像が削除される度に、画像入力部210により入力されたフレーム画像の縮小画像の中からこの削除された縮小画像を除いた各縮小画像について、時間的に相前後する縮小画像間の変化量を繰り返し算出する。
抽出枚数設定部226は、ユーザによる抽出枚数を設定する操作に応答して、この操作に応じた抽出枚数Mを設定するものである。この設定処理に際しては、抽出ユーザによる操作により設定される抽出枚数Mを示す信号が、制御部260を介して操作受付部230から抽出枚数設定部226に供給される。抽出枚数設定部226は、図1に示されるCPU9により実現され得る。
画像変化量特定部227は、画像削除部229により縮小画像が削除されることにより画像変化量算出部221が画像変化量を算出する度に、算出された画像変化量のうち最小となる画像変化量を特定するものである。また、このとき、画像変化量特定部227は、特定した最小となる画像変化量に対し時間的に相前後する2つの画像変化量も特定する。画像変化量特定部227は、図1に示されるCPU9により実現され得る。
判定部228は、画像変化量特定部227が各画像変化量を特定する度に、最小となる画像変化量に時系列上で前後に隣接する2つの画像変化量のうち、どちらが小さいものであるかを判定するものである。判定部228は、この判定結果を画像削除部229に供給する。判定部228は、図1に示されるCPU9により実現され得る。
画像削除部229は、判定部228から供給される判定結果が示す小さい判定された方の画像変化量を、縮小画像配列PSから削除するものである。画像削除部229は、図1に示されるCPU9により実現され得る。
第2実施形態では、画像抽出部225は、画像入力部210により入力されたフレーム画像の縮小画像の中から、画像削除部229により削除されることなく残った縮小画像を抽出するものである。
図12は、第2実施形態に係る画像抽出処理(ステップS5の処理)の流れの一例を示すフローチャートである。図12を参照して、第2実施形態に係る画像抽出処理の詳細について説明する。以下の説明では、この画像抽出処理は、制御部260による制御に従って、画像処理部220が行うものとする。
まずステップS51では、画像処理部220の画像変化量特定部227は、画像変化量配列Eの中から最小となる画像変化量eを特定する。以下の説明では、ステップS51の処理により特定された最小の画像変化量をe[k]、つまり特定された最小の画像変化量に対応するインデックス番号をkとする。
ステップS52では、画像処理部220の画像変化量特定部227は、画像変化量e[k−1]および、画像変化量e[k+1]を特定する。画像変化量e[k−1]は、画像変化量配列Pにおいて、時系列上で画像変化量e[k]よりも前(過去)に隣接する画像変化量である。画像変化量e[k+1]は、画像変化量配列Pにおいて、時系列上で画像変化量e[k]よりも後(未来)で隣接する画像変化量である。
ステップS53では、画像処理部220の判定部228は、画像変化量e[k−1]が画像変化量e[k+1]よりも小さいか否かを判定する。ステップS53の判定がYESの場合には、画像処理部220は、ステップS54に処理を進める。一方、ステップS53の判定がNOの場合には、画像処理部220は、ステップS55に処理を進める。
ステップS54では、画像処理部220の画像削除部229は、画像変化量e[k]に対応する2つの縮小画像ps[k]、ps[k+1]のうちの時系列的に前に位置する縮小画像ps[k]を、縮小画像配列PSの中から削除する。言い換えると、画像削除部229は、画像変化量e[k−1]を規定していた2つの縮小画像ps[k−1]、ps[k]のうち、時系列上で後に位置するps[k]を削除する。
ステップS55では、画像処理部220の画像削除部229は、画像変化量e[k]に対応する2つの縮小画像ps[k]、ps[k+1]のうちの時系列的に後に位置する縮小画像ps[k+1]を、縮小画像配列PSの中から削除する。言い換えると、画像削除部229は、画像変化量e[k+1]を規定していた2つの縮小画像ps[k+1]、ps[k+2]のうち、時系列上で前に位置するps[k+1]を削除する。
ステップS56では、画像処理部220の判定部228は、直前のステップS54またはステップS55の処理により縮小画像が削除された結果、縮小画像配列PSに残っている縮小画像psの枚数がMであるか否かを判定する。ステップS56の判定がNOの場合には、画像処理部220は、ステップS58に処理を進める。
ステップS58では、画像処理部220の画像削除部229は、画像変化量配列Eの中から、直前のステップS54またはステップS55の処理により削除された縮小画像psによりそれぞれ規定される2つの画像変化量eを削除する。この削除処理においては、例えば、図13に示すように、画像削除部229は、今回縮小画像ps[k]を削除した場合、この削除した縮小画像ps[k]により規定される2つの画像変化量e[k]、e[k−1]を削除するとともに、削除した縮小画像ps[k]に隣接する縮小画像ps[k−1]、ps[k+1]の平均値を示す画像変化量e[k−1]´を算出して、画像変化量配列Eに挿入する。
一方、ステップS56の判定がYESの場合には、画像処理部220の画像抽出部225は、残ったM枚の縮小画像psを抽出する(ステップS57)。このステップS57の処理の後、画像処理部220は、画像抽出処理を終了させる。
以上のように、画像処理部220は、残る縮小画像psがM枚(ステップS56でYES)となるまで、ステップS51では最小の画像変化量を抽出し続け、ステップS54,S55では縮小画像psを削除し続け、ステップS58では画像変化量eを削除し続けることとなる。そして、ステップS58において削除されることなく最終的に残った画像変化量配列Eにおいて最も小さい画像変化量eは、設定されたMの値に応じて変化するものである。つまり、設定されたMの値が小さいと、ステップS58において削除されることなく最終的に残る画像変化量配列Eのうち最も小さい画像変化量eは大きくなる。一方、設定されたMの値が大きいと、ステップS58において削除されることなく最終的に残る画像変化量配列Eにおいて最も小さい画像変化量eは小さくなる。そうすると、ステップS51では、残る縮小画像psがM枚(ステップS56でYES)となるまで、設定されたMの値に対応する特定の画像変化量(ステップS58において削除されることなく最終的に残る画像変化量配列Eのうち最も小さい画像変化量e)よりも小さい画像変化量eを全て削除し続けるといえる。
以上説明したように、第2実施形態に係る画像処理装置100は、画像変化量eを時系列的に配列して画像変化量配列Eとし、これら画像変化量e同士を比較することで相対的に小さい値の画像変化量e[k]を抽出し、この抽出した画像変化量e[k]に対応する縮小画像pを削除して、画像配列Pの中から残った縮小画像に対応するフレーム画像を抽出する。つまり、第2実施形態に係る画像処理装置100は、画像変化量e同士の相対的な関係に着目し、画像変化量配列Eの中から相対的に大きい値の画像変化量eに対応する画像pを抽出した。よって、ユーザの手振れにより画像間変化量eが変動した場合でもこの変動に追従できるので、撮影状況によらずに被写体の動きの大きい画像のみを精度良く抽出できる。
第2実施形態に係る画像処理装置100は、画像変化量e同士の相対的な関係に着目し、画像変化量配列Eの中から画像変化量eが相対的に小さい画像p、つまり、変化に乏しい冗長な画像のみを削除する。第1実施形態のように連続する画像群を抽出するのとは異なり、動きの大きい画像のみを離散的に抽出する。よって、第1実施形態のように特定の運動モデルに限定されず、被写体が画像内に滞留したり、被写体が比較的不規則に移動したりするような一般的な運動シーンに適用できる。これにより、例えば、撮影範囲内において被写体が静止と移動を不規則に繰り返すシーンの撮影画像を合成して1つの合成画像を生成する場合であっても、変化に乏しい冗長な画像ばかりを合成してしまうことを防止できる。すなわち、第2実施形態に係る画像処理装置100により抽出されたフレーム画像郡を合成することにより合成画像を作成すれば、被写体像の動きにメリハリがある合成画像を得ることができる。
〔変形等〕
なお、本発明は前記実施形態に限定されるものではなく、本発明の目的を達成できる範囲での変形、改良等は本発明に含まれるものである。
例えば、上述の第1実施形態では、x1,x2の全ての組合せについて乖離度Jを算出した。しかし、これに限らず、孤立矩形状関数r[x]の関数値a、bを算出した結果がa<bとなる場合であっても、関数値bと関数値aとの差が小さい場合には、この組合せを探索対象から外してもよい。このようにすれば、明らかに最適解ではないx1,x2の組合せを排除して、画像処理部220(CPU9)の計算処理に要する負荷を軽減して、処理を高速化できる。
また、上述の第1実施形態では、0<x1<x2<N−2として、孤立矩形状関数r[x]の山の部分を示すx1やx2が境界である0または(N−2)とならないように設定したが、これに限らず、0≦x1<x2≦N−2として、孤立矩形状関数r[x]の山の部分を示すx1やx2が境界である0または(N−2)を取り得るように設定してもよい。
また、上述の第1実施形態では、孤立矩形状関数の山の部分の形状を四角形状としたが、山の部分の形状を台形状としてもよい。
また、上述の各実施形態では、時間的に相前後する縮小画像psについて、同位置の画素値の差分の絶対値の総和を画像変化量eとして算出した。しかし、同位置の画素値の差分の2乗の総和を、画像変化量eとして算出してもよいし、画像の相違を数値化できる手法であれば、どの手法を用いてもよい。また、縮小画像psがカラー画像である場合には、縮小画像psの色成分毎に差分を算出すればよい。
また、上述の各実施形態では、画像全体に亘って画素値の差分を算出したが、これに限らず、ウインドウまたは検出枠を設定して、画像の一部についてのみ画素値の差分を算出してもよい。このようにすれば、画像処理部220の計算負荷が軽減されるので、処理を高速化できる。
また、上述の各実施形態では、画像変化量eとして縮小画像ps間の画素値の差分つまり用いた。しかし、画像変化量eは、縮小画像ps間における被写体の動きを示す動きベクトルであってもよい。
また、上述の各実施形態では、フレーム画像pを縮小して縮小画像psを生成する縮小処理、および縮小画像ps間の変化量を画像変化量eとして算出する画像変化量算出処理を連写撮影により全ての画像を取得した後に実行するようにした。しかし、連写撮影を実行しながらこれらの処理をしてもよい。
また、第1実施形態では、孤立矩形状関数r[x]の関数値aを運動区間Dにおける画像変化量配列Eの各値の平均値としたが、関数値aは運動区間Dにおける画像変化量配列Eの各値の中央値であってもよい。また、第1実施形態では、孤立矩形状関数r[x]の関数値bを非運動区間D´における画像変化量配列Eの各値の平均値としたが、関数値bは非運動区間D´における画像変化量配列Eの各値の中央値であってもよい。
また、第1実施形態では、孤立矩形状関数r[x]と画像変化量配列Eとの差分を2乗した値の総和を乖離度Jとした。しかし、孤立矩形状関数r[x]と画像変化量配列Eとの差分の絶対値の総和を乖離度Jとてもよいし、孤立矩形状関数r[x]と画像変化量配列Eとの差分を3乗した値の総和を乖離度Jとてもよい。要は、乖離度Jは、孤立矩形状関数r[x]と画像変化量配列Eとの絶対的な差分であれば何でもよい。
また、上述の各実施形態では、フレーム画像pを縮小して縮小画像psを生成する縮小処理を実行した。しかし、縮小処理を実行することなく、縮小前のフレーム画像から画像変化量を算出してもよい。ただし、この場合、手振れなどの外乱の影響を受けやすくなるので、手持ち撮影では、位置合わせ処理が必要になることが多い。よって、縮小処理を実行する方が、位置合わせ処理を実行するよりも計算負荷が低くなる。また、縮小処理では、縮小画像のアスペクト比は、縮小前のフレーム画像のアスペクト比から適宜変更されてもよい。
また、第1実施形態と第2実施形態とを組み合わせてもよい。例えば、第1実施形態の画像抽出処理により運動区間Dを抽出し、その後、第2実施形態の画像抽出処理により、運動区間Dの中からM枚のフレームを抽出するようにしてもよい。
また、本発明は、デジタルカメラに限らず、撮影機能を有していないパーソナルコンピュータなどにも適用できる。