まず、実施例1に係る撮像装置の構成について説明する。図1は、実施例1に係る撮像装置の構成の一例を示す図である。
図1(A)に示すように、実施例1に係る撮像装置100は、撮像部10、表示部20、操作部30、制御部40、及び格納部50を備える。撮像装置100が、例えば、図1(B)に示す携帯電話である場合、撮像部10は携帯電話本体に設けられたカメラ、表示部20は表示画面、操作部30は操作ボタンやタッチパネル、制御部40は携帯電話に内蔵された演算装置、格納部50は携帯電話本体に内蔵、又は追加されるメモリとすることができる。また、撮像装置100が、図1(C)に示すノート型PCの場合、撮像部10はノート型PC本体に内蔵される、あるいは、装着されるカメラ、表示部20はディスプレイ、操作部30はキーボード、マウス、又はタッチパネル、制御部40はプログラムを実行するCPU、格納部50はハードディスクドライブ等とすることができる。また、撮像装置100が、図1(D)に示すデジタルカメラの場合には、撮像部10はカメラ、表示部20はデジタルカメラ本体に設けられたディスプレイ、操作部30はデジタルカメラ本体に設けられたボタンやタッチパネル、制御部40は演算装置、格納部50は不揮発性の内蔵メモリやSDカード等の外部メモリとすることができる。本実施例では撮像装置100が携帯電話であるとして説明を行う。
撮像部10は、画像を撮像し、撮像した画像を制御部40に出力する。また、撮像部10は、光学系ズーム機構を備える。撮像部10が、制御部40の制御に基づいて光学系ズーム機構を駆動することにより、光学系のズーム倍率が変更される。
表示部20は、制御部40の制御に基づいて、制御部40が表示部20に出力した画像データを表示する。また、表示部20は、制御部40の制御に基づいて、撮像部10が撮像する画像の中心、及び、ユーザが指定した領域(詳細は後述する)の中心を表示する。
操作部30は、ユーザからの操作を受付け、操作内容を表す操作信号を制御部40に出力する。
制御部40は、操作部30から操作信号を受付け、操作信号に基づいて撮像部10や表示部20を制御する。制御部40は、撮像部10から受付けた画像の画像データを表示部20に出力し、表示部20に表示させる。制御部40は、撮像部10から受付けた画像の画像データを、格納部50に格納する。また、制御部40は、表示部20を制御して、撮像部10が撮像する画像の中心、ユーザが指定した領域を示す枠、及びその中心を表示部20に表示させる。
格納部50は、撮像部10が撮像した画像を格納する。
次に、撮像装置100の制御部40のハードウェア構成について説明する。図2は、制御部40のハードウェア構成の一例を示す図である。制御部40は、入出力部401、ROM(Read Only Memory)402、中央処理装置(CPU:Central Processing Unit)403、RAM(Random Access Memory)404を備える。
入出力部401は、撮像部10、表示部20、操作部30、及び格納部50との間でデータおよび信号の送受信を行う。ROM402は、被撮像物とユーザに指定された領域との位置関係を維持するためのプログラム等を格納する。CPU403は、ROM402に格納されたプログラムを読み込んで実行する。また、ROM402に格納されたプログラムのCPU403による演算によって、図6に示す領域指定受付部411、領域計算部412、表示制御部414、ズーム倍率変更部415、画像補正部416、及び取得部417が有する機能が実行される。RAM404は、プログラムを実行する際に使用される一時的なデータを保存する。
次に、図3〜図5を用いて、撮像装置100が有する機能の概要について説明する。図3〜図5は、撮像装置100が有する機能の概要を説明するための図である。
図3(A)は、撮像装置100において、いずれの機能も選択されていない状態を示している。図3(A)では、いずれの機能も選択されていないため、表示部20に画像は映し出されていない。この状態から、撮像部10を使用した画像撮像機能(以後、カメラモードと記載する)がユーザによって選択されると、撮像装置100は、図3(B)に示すように表示部20に撮像部10が撮像する画像を表示する。また、カメラモードが選択されている状態で、更に、画像に対して領域を指定できる機能(以後、領域指定モードと記載する)がユーザにより選択されると、撮像装置100は、図3(C)に示すように表示部20の中心にポインタを表示する。
図3(C)において、ユーザが、被撮像物としての家を含む矩形の領域を指定したいとする。この場合、ユーザは、図3(C)に示すように、表示部20に表示されたポインタを指定したい領域の左上に合わせ、操作部30に設けられたボタンを押す。次に、ユーザはボタンを押したまま、カメラを移動させることによって、図4(A)に示すようにポインタを指定したい領域の右下の位置まで移動させ、ボタンを離す。これにより、ユーザは、図4(B)にハッチングで示す矩形の領域を指定することができる。撮像装置100は、図4(B)に示すように、ユーザが指定した領域(以後、指定領域と記載する)を表す枠を、表示部20に表示する。これにより、ユーザは指定領域を表示部20上で容易に確認できる。なお、本実施例に係る撮像装置100は、指定領域が設定された後、図4(B)に示すように指定領域が表示部20内に含まれるように光学系のズーム倍率を変更している。領域の指定方法は、本実施例に限られるものではなく、左上の位置でボタンを押した後にボタンを離し、右下の位置で再度同じボタンを押す、又は、別のボタンを押すことによって領域を指定するようにしても良い。
本実施例に係る撮像装置100では、撮像装置100が移動されたり、ズーム倍率が変更されても、表示部20に表示される画像内において、指定領域と被撮像物である家との位置関係が維持される。すなわち、撮像装置100は、表示部20に表示される被撮像物に合わせて、指定領域の表示位置及び大きさを変更し、被撮像物と指定領域との位置関係を維持する。また、撮像装置100は、図4(C)に示すように撮像部10が撮像する画像の中心、すなわち、表示部20の中心と、指定領域の中心とを表示部20に表示する。
また、撮像装置100は、表示部20の中心と指定領域の中心とが重なった場合に、図5(A)に示すように光学系のズーム倍率を変更する。光学系のズーム倍率を変更して、図5(B)に示すように指定領域が表示部20いっぱいに表示されるようにすることで、指定領域に含まれる画像について、撮像装置100が有する解像度を生かした撮影を行うことができる。また、ユーザは、図5(C)に示すように撮像装置100の縦横方向の向きを変えることにより、更に指定領域を拡大し、画像を撮影することもできる。
次に、上述した撮像装置100の機能を実現するために、制御部40が備える機能の一例について説明する。図6は、制御部40が有する機能の一例を示す機能ブロック図である。
制御部40は、領域指定受付部411、領域計算部412、記憶部413、表示制御部414、ズーム倍率変更部415、画像補正部416、及び取得部417を備える。
領域指定受付部411は、撮像部10が撮像した画像を取得し、画像に対して特徴点を設定する。領域指定受付部411は、設定した特徴点のデータを記憶部413に保存する。ここで特徴点とは、画像に含まれる被撮像物の特定部位を示す点のことであり、頂点や縁の点、あるいは模様などがある場合は模様の点、色の境界点などを示す。また、領域指定受付部411は、カメラモードが選択された場合には、図3(C)に示したように表示部20の中心にポインタを表示する。領域指定受付部411は、ユーザによって指定された指定領域を定義する点についても、特徴点として記憶部413に保存する。
領域計算部412は、記憶部413に保存されている特徴点のデータと、撮像部10が撮像する画像データとを使用して、指定領域と、指定領域に含まれる被撮像物との位置関係が維持されるように、指定領域の位置及びその大きさを計算する。つまり、領域計算部412は、指定領域を示す枠の表示位置及びその大きさを計算する。前述の図4の例では、領域計算部412は、ユーザが指定した矩形領域と、矩形領域に含まれる家との位置関係が維持されるように、指定領域を示す枠の表示位置及び大きさを計算する。領域計算部412は、指定領域と被撮像物との位置関係を維持するような指定領域の位置及び大きさを計算する計算処理の結果(詳細は、後述する)に基づいて、記憶部413に記憶されている特徴点のデータを更新する。
記憶部413は、例えば、RAM403とすることができ、撮像部10が撮像した画像、特徴点のデータ、及び指定領域に関するデータを記憶する。ここで、記憶部413に記憶されるデータについて説明する。
図7は、記憶部413が記憶するデータの一例を示している。記憶部413は、図7(A)に示す特徴点配列データと、図7(B)に示す指定領域データとを記憶する。図7(A)の特徴点配列データは、領域指定受付部411が撮像された画像に対して設定した特徴点、及びユーザが指定領域を設定する際に指定した点(指定領域を定義する点)に関するデータを含んでいる。特徴点配列データは、特徴点の種類、前フレームでの座標、前フレームでの特徴量、特徴点の状態(前)、指定領域内フラグ(前)、現フレームでの座標、現フレームでの特徴量、特徴点の状態(現)、指定領域内フラグ(現)、位置の妥当性、及び特徴点の信頼度の項目を有する。
ここで、図7及び図8を参照しつつ、特徴点配列データの各項目と、各項目に格納されるデータの例について説明する。図8は、撮像部10により撮像された画像の一例を表す。図8(B)は、撮像部10が新たに撮像した画像(現フレームの画像:第1の画像)の一例を示し、図8(A)は現フレームの画像を撮像する前に、撮像部10が撮像していた画像(前フレームの画像:第2の画像)の一例を示している。図8(A)に示す前フレームの画像において、P1〜P8は、領域指定受付部411が選択した特徴点を表し、P9及びP10は、指定領域を定義する点を表している。また、図8(B)に示すP1´〜P10´は、領域計算部412が実施する処理(詳細は後述する)によって、前フレームのP1〜P10にそれぞれ対応する点であると判定された点を表している。
「特徴点の種類」項目は、特徴点が領域指定受付部411によって設定された特徴点であるか、それともユーザが指定領域を設定するときに指定した点であるかを表す。図8の例では、P1〜P8は領域指定受付部411によって設定された点であるため、領域指定受付部411によって設定されたことを意味する「AUTO_ADD」が設定される。P9及びP10は、ユーザによって指定された点であるため、ユーザによって指定されたことを意味する「USER_ADD」が設定される。
「前フレームでの座標」項目は、前フレームの画像において設定された特徴点の座標を表す。すなわち、図8の例では、図8(A)に示すP1〜P10の座標が格納される。
「前フレームでの特徴量」項目は、前フレームにおける特徴点の特徴量を示す。すなわち、図8の例では、図8(A)に示すP1〜P10の特徴量が格納される。特徴量は、スカラ値でも良いし、利用する特徴量を表すのに必要なデータ構造であればスカラ値でなくても良い。
「特徴点の状態(前)」項目は、前フレームにおいて、特徴点が表示部20の画面内に存在しているか否かを示す。図8(A)の例では、P1〜P10の全ての特徴点が、画面内に存在しているため、特徴点が画面内に存在していることを示す「STAT_IN」が設定される。なお、特徴点が画面内に存在していない場合には、「STAT_OUT」が設定される。
「指定領域内フラグ(前)」項目は、前フレームにおいて、特徴点が指定領域内に存在しているか否かを表す。図8(A)では、前フレームの特徴点P1〜P7は、特徴点P9及びP10で定義される指定領域内に存在しているため、特徴点が指定領域内に存在することを示す「FLAG_IN」が設定される。また、特徴点P8については、特徴点P9及びP10で定義される指定領域の外に存在するため、特徴点が指定領域の外に存在することを意味する「FLAG_OUT」が設定される。なお、指定領域を定義する特徴点P9及びP10については、「選択領域内フラグ(前)」項目に、「FLAG_IN」を設定しても良いし、空白としても良い。
「現フレームでの座標」項目は、現フレームにおける特徴点の座標を表す。図8の例では、前フレームの特徴点P1〜P10とそれぞれ対応すると判定された、図8(B)の特徴点P1´〜P10´の座標が格納される。
「現フレームでの特徴量」項目は、現フレームの特徴点P1´〜P10´の特徴量を表す。図8の例では、図8(B)に示す特徴点P1´〜P10´の特徴量が格納される。
「特徴点の状態(現)」項目は、現フレームの特徴点が表示部20の画面内に存在するか否かを表す。図8(B)の例では、特徴点P1´〜P10´の全てが画面内に存在しているため、特徴点が画面内に存在していることを示す「STAT_IN」が設定される。なお、特徴点が画面内に存在していない場合には、「STAT_OUT」が設定される。
「指定領域内フラグ(現)」項目は、現フレームの特徴点が指定領域内にあるか否かを表す。図8(B)では、特徴点P2´〜P8´は、特徴点P9´及びP10´で定義される指定領域内に存在しているため、特徴点が指定領域内に存在することを示す「FLAG_IN」が設定される。特徴点P1´は、特徴点P9´及びP10´で定義される指定領域の外に存在するため、特徴点が指定領域の外に存在することを意味する「FLAG_OUT」が設定される。
「位置の妥当性」項目は、現フレームにおける特徴点の位置が正常であるか、異常であるか否かを表す。図8の例では、前フレームの特徴点P1〜P9と対応すると判定された現フレームの特徴点P1´〜P9´には、位置が正常であることを示す「VALID」の値が設定される。前フレームの特徴点P1〜P9と、現フレームの特徴点P1´〜P9´とは対応がとれているためである。しかしながら、前フレームの特徴点P10と対応すると判定された現フレームの特徴点P10´は、本来、図8(B)において黒丸で示すP10の位置に存在すべきである。従って、P10については、位置が異常であることを示す「INVALID」の値が設定される。
「特徴点の信頼度」項目は、その特徴点の追跡の容易さを表す。特徴点の追跡が容易な場合、「特徴点の信頼度」項目には、大きな値が設定され、特徴点の追跡が困難な場合、小さな値が設定される。
次に、図7(B)の指定領域データについて説明する。指定領域データは、指定領域を定義するためのデータであり、領域の形状、構成する指定点の配列、外接矩形中心座標、外接矩形座標(左上)、及び外接矩形座標(右下)の項目を含む。
「領域の形状」項目は、指定領域の形状(例えば、矩形、円等)を表す。図8の例では、指定領域の形状が矩形であるため、「領域の形状」項目には、「矩形」が設定されている。
「構成する指定点の配列」項目は、指定領域の形状で表された図形を表現するために必要な点の配列を表す。例えば、指定領域の形状が矩形であるならば、左上及び右下の2点であり、円ならば中心点及びその半径となる点の2点である。図8の例では、指定領域の形状が矩形であるため、「構成する指定点の配列」項目に、「矩形2点」と設定される。
「外接矩形中心座標」項目は、指定領域の中心座標を表す。「外接矩形座標(左上)」項目は、領域の形状が矩形である場合に、指定領域を示す左上の点の座標を表す。また、「外接矩形座標(右下)」項目は、領域の形状が矩形である場合に、指定領域を示す右下の点の座標を表す。領域の形状が円である場合には、「外接矩形座標(左上)」項目を円の中心を表す円中心座標、「外接矩形座標(右下)」項目を半径の点を表す半径点座標として使用しても良い。図8の例では、特徴点P10´が左上の点であり、P9´が右下の点である。従って、「外接矩形座標(左上)」項目には、現フレームの特徴点P10´の座標(x10´,y10´)が設定されている。また、「外接矩形座標(右下)」項目には、現フレームの特徴点P9´の座標(x9´,y9´)が設定されている。また、指定領域の中心座標(cx,cy)は、cx=(x9´+x10´)/2、cy=(y9´+y10´)/2で求められる。なお、指定領域データの座標は、撮像部10が撮像した画像における座標ではなく、表示部20における座標(画面上の座標)を用いて表しても良い。
再度、図6に戻り説明を続ける。表示制御部414は、撮像部10が撮像した画像に基づいて、撮像部10が撮像する画像の中心を表示する。また、表示制御部414は、記憶部413に記憶されている指定領域データを取得し、指定領域を示す枠、及び指定領域の中心を表示部20に表示する。これにより、ユーザは、指定領域を示す枠、指定領域の中心、及び画像の中心を目印として、容易にカメラの向きや位置を操作することができる。
ズーム倍率変更部415は、撮像部10に備えられた光学系ズーム機構を制御することによって、光学系のズーム倍率を変更する。ズーム倍率変更部415は、指定領域の中心と、撮像部10が撮像した画像の中心との距離が、所定の範囲内となった場合に、指定領域が表示部20いっぱいに表示されるように光学系のズーム倍率を変更する。ズーム倍率変更部415は、指定領域が表示部20いっぱいに表示されたか否かを、例えば、指定領域の一部と、表示部20の端との距離が所定の範囲内となったか否かによって判定できる。
取得部417は、撮像部10が撮像した画像のうち、指定領域に含まれる画像のみを取得し、取得した画像を記憶部413に保存する。図9は、取得部417の機能の概要について説明する図である。ここでは、図9(A)に示すように、指定領域が設定されていたとする。この場合、取得部417は、図9(B)に示す表示部20に表示された画像全体を取得するのではなく、図9(C)に示すように、指定領域に含まれる画像のみを取得する。
図6に戻り説明を続ける。画像補正部416は、取得部417が記憶部413に保存した画像に対し、補正処理を行う。具体的には、画像補正部416は、記憶部413に保存された画像が歪んでいる場合には、画像を正対させる台形補正処理を画像に対して実行する。例えば、指定領域の形が矩形と指定されているにも関わらず、記憶部413に保存された画像が、図10(A)に示すような台形となっているとする。この場合、画像補正部416は、画像が歪んでいると判定し、図10(B)に示すように、画像を正対させる台形補正処理を実行する。
また、画像補正部416は、記憶部413に保存された画像が傾いている場合には、画像の傾きを補正する傾き補正処理を実行する。例えば、画像を撮像する際に撮像装置100が、図11(A)に示すように傾いていたとする。ここで、ズーム倍率変更部415が、指定領域が表示部20いっぱいに表示されるように光学系ズームの倍率を変更すると、指定領域と表示部20との関係は、図11(B)となる。この状態で、画像を撮像すると、取得部417により取得される画像は、図11(C)となり、記憶部413に保存される画像にはハッチングで示す空白部分(余白)が生じてしまう。この場合、画像補正部416は、傾いて取得された画像を回転し、図11(D)に示すように、指定領域の下端が水平になるように画像を補正する。画像補正部416は、補正した画像を格納部50に格納する。また、画像補正部416は、画像を補正する必要がない場合には、記憶部413に保存された画像をそのまま格納部50に格納する。
次に、フローチャートを用いて制御部40が実行する処理の一例について説明する。図12及び図13は、制御部40が実行する主処理の一例を示すフローチャートである。
ユーザによりカメラモードが選択されると、図12に示すフローチャートの処理が開始される。領域指定受付部411は、撮像部10が撮像した画像をフレーム画像として取得する(ステップS10)。次に、領域指定受付部411は、ユーザによって領域選択モードが指定されたか否か判定する(ステップS11)。領域選択モードが指定された場合(ステップS11/YES)、領域指定受付部411は、表示部20にポインタを表示する(ステップS12)。
次に、領域指定受付部411は、ステップS10で取得したフレーム画像において特徴点を選択し、特徴点を記憶部413に保存する(ステップS100)。ここで、特徴点の選択及び保存処理の詳細について説明する。図14は、ステップS100の詳細な処理の一例を示すフローチャートである。
図14において、領域指定受付部411は、フレーム画像の中から、注目画素を選択し、その特徴量vを求める(ステップS101)。次に、領域指定受付部411は、選択した注目画素の特徴量vが予め定められた閾値Tvより大きいか否か判定する(ステップS102)。領域計算部412が特徴点を追跡するのに十分な特徴量を、選択した特徴点が有しているか否かを判定するためである。
選択した注目画素の特徴量vが予め定められた閾値Tvより小さい場合(ステップS102/NO)、領域指定受付部411は、次の注目画素について処理するためステップS101へ戻る。選択した注目画素の特徴量vが閾値Tvよりも大きい場合(ステップS102/YES)、領域指定受付部411は選択した注目画素と他の特徴点との距離が所定値以上か否か判定する(ステップS103)。つまり、ステップS103の処理で、領域指定受付部411は、選択した注目画素と既に決定した特徴点との距離が近すぎないかどうか判定する。
ステップS103の判定がNOの場合、領域指定受付部411は、次の注目画素について処理するためステップS101へ戻る。ステップS103の判定がYESの場合、領域指定受付部411は、選択した注目画素を特徴点として、特徴点配列データに追加する(ステップS104)。次に領域指定受付部411は、閾値Tvに対して、フレーム画像内の全ての画素を処理したか否か判定する(ステップS105)。ステップS105の判定がNOの場合、領域指定受付部411は、残りの画素について処理するため、ステップS101へ戻る。ステップS105の判定がYESの場合、領域指定受付部411は、取得したフレーム画像の中の特徴点の数が、予め定めた閾値Tv_numより大きいか否か判定する(ステップS106)。
ステップS106の判定がYESの場合、十分な数の特徴点が抽出できたとして、領域指定受付部411は本処理を終了する。ステップS106の判定がNOの場合、領域指定受付部411は、特徴量の閾値Tvの値を下げ、再びステップS101〜ステップS106の処理を実行する。
図14に示した処理が終了すると、領域指定受付部411は、図12において、ユーザが領域を指定中か否か判定する(ステップS13)。ユーザが領域を指定中か否かの判定は、例えば、ユーザが操作部30において所定のボタンを押しているか否か等によって判定できる。
領域指定受付部411は、ユーザが領域を指定中の場合(ステップS13/YES)、指定領域を定義する点を設定する処理(特徴点追加処理)が行われたか否か判定する(ステップS14)。領域指定受付部411は、特徴点追加処理が行われた場合(ステップS14/YES)、ユーザが指定した点を、特徴点として特徴点配列データに追加する(ステップS15)。そして、ステップS15の処理により指定領域が設定されたので、領域指定受付部411は、ステップS100の処理によって特徴点配列データに保存された各特徴点の「指定領域内フラグ(現)」項目の値を更新する(ステップS16)。
ステップS14の判定がNOの場合、又は、ステップS16の処理が終わると、領域計算部412は前フレームの特徴点に関する情報が、記憶部413に存在するか否か判定する(ステップS17)。前フレームの特徴点に関する情報が存在する場合(ステップS17/YES)、図13のCに進み、領域計算部412は、前フレームの特徴点と現フレームの特徴点とを対応付け、対応付けた現フレームの特徴点の位置の妥当性を検証する(ステップS200)。ここで、ステップS200の処理の詳細について説明する。図15は、ステップS200の詳細な処理の一例を示すフローチャートである。
図15において、領域計算部412は、後述する位置の妥当性を検証する処理が実行されていない特徴点(未処理の特徴点)が存在するか否か判定する(ステップS201)。未処理の特徴点が存在する場合(ステップS201/YES)、領域計算部412は、特徴点Pnを一つ選択する(ステップS202)。領域計算部412は、前フレームにおける特徴点Pnの座標(xn,yn)周辺の局所領域を取り出す(ステップS203)。次に、領域計算部412は、現フレームの画像データを走査し、ステップS203で取り出した局所領域との類似度を求める。そして、領域計算部412は、現フレームにおいて、ステップS203で取り出した局所領域と最も類似度が高い局所領域の座標(xn´,yn´),を探索する(ステップS204)。図16に、ステップS203及びステップS204の処理の概要を説明するための図を示す。
図16(A)は、前フレームの画像の概略を、図16(B)は、現フレームの画像の概略を表している。図16(A)において、領域計算部412は、図中斜線で示す特徴点P1の座標(x1,y1)周辺の局所領域(太枠で表示)を取り出す(ステップS203)。次に、領域計算部412は、図16(B)に示す現フレームの画像データを走査し、各座標において図16(A)で取り出した局所領域との類似度を求める。そして、領域計算部412は、図16(A)で取り出した局所領域と最も類似度が高い局所領域の座標(x1´,y1´)を探索する(ステップS204)。なお、特徴点の移動先を検出する方法は、本実施例のステップS203及びステップS204で示した方法に限られるものではなく、オプティカルフローや、パターンマッチング等の他の方法を用いて、特徴点の移動先を検出しても良い。
図15のフローチャートに戻り、説明を続ける。領域計算部412は、ステップS204の処理が終了すると、(xn,yn)と、(xn´,yn´)とが対応する点であるとみなせるか否か判定する(ステップS205)。例えば、領域計算部412は、類似度が予め定められた閾値を超えている場合に、(xn,yn)と、(xn´,yn´)とが対応する点であるとみなせると判定する。
ステップS205の判定がNOの場合、領域計算部412は、対応する点は、画面外に出てしまったとして、特徴点配列データの「特徴点の状態(現)」項目に、特徴点が画面外に存在することを意味する「STAT_OUT」を設定する(ステップS207)。そして、領域計算部412は、ステップS201に戻る。
ステップS205の判定がYESの場合、領域計算部412は、対応点が見つかったとして、(xn,yn)と対応付けて、「現フレームでの座標」項目に(xn´,yn´)を格納し、「特徴点の状態(現)」項目に、現フレームの特徴点が画面の内部に存在することを意味する「STAT_IN」を設定する(ステップS206)。次に、領域計算部412は、対応する特徴点間の妥当性の検証と座標の修正処理を実行する(ステップS208)。ここで、図17〜図19を用いて、ステップS208の処理の詳細について説明する。図17及び図18は、ステップS208の詳細な処理の一例を示すフローチャートである。また、図19は、ステップS208の詳細な処理を具体的に説明するための図である。
領域計算部412は、「特徴点の状態(現)」項目に「STAT_IN」が設定された全ての特徴点について、後述する処理を実行したか否か判定する(ステップS211)。ステップS211の判定がNOの場合、領域計算部412は、「特徴点の状態(現)」項目に「STAT_IN」が設定されている特徴点の中から、特徴点Pnを一つ選択する(ステップS212)。次に、領域計算部412は、「特徴点の状態(前)」項目に「STAT_IN」が設定されている、つまり、前フレームの画像において画面内に存在していた特徴点二つの組み合わせ(Pl,Pm)(l≠m≠n、lとmは、Tv_num以下の任意の数)をk組選択する(ステップS214)。ここで、(Pl,Pm)の組み合わせを、P(i)(Pl,Pm)と記載する(i=1〜k)。
ここで、図19を参照して、上述の処理について具体的に説明する。図19において、図19(A)の左図は、前フレームの画像に対して設定された特徴点の一例であり、図19(A)の右図は、前フレームの特徴点と対応すると判定された、現フレームの特徴点の一例である。ここで、ステップS212の処理で領域計算部412が選択した特徴点が、図19(A)に示すP1であったとする。この場合、領域計算部412は、別の特徴点の組み合わせとして、例えば、P(1)(P2,P3)、P(2)(P3,P4)、及びP(3)(P2,P4)の3組をステップS213で選択する。
図17のフローチャートに戻り、説明を続ける。領域計算部412は、前フレームの特徴点PnとP(i)(Pl,Pm)との内積を全て(k組分)求める(ステップS215)。ここで、PnとP(i)(Pl,Pm)との内積を求めるとは、図20(A)において、ベクトルPnlとベクトルPnmとの内積を求めることをいう。また、以後の説明において、PnとP(i)(Pl,Pm)との内積を、cosθ(P(i)(Pl,Pm))、又は、cosθ(Pni)と記載する。例えば、図20(B)において、P1とP(1)(P2,P3)との内積は、cosθ(P(1)(P2,P3))、又は、cosθ(P11)と記載される。
再度、図19を用いて具体的に説明する。図19(B)〜図19(D)の左図は、ステップS212で領域計算部412が選択した特徴点P1と、ステップS213の処理で領域計算部412が選択した特徴点の組み合わせとの、前フレームにおける関係を示している。図19の例では、領域計算部412は、ステップS214で、cosθ(P11)、cosθ(P12)、及びcosθ(P13)を求める。
次に、図17のフローチャートにおいて、領域計算部412は、ステップS214と同様に、現フレームの特徴点Pn´とP(i)´(Pl´,Pm´)との内積を全て(k組分)求める(ステップS215)。図19(B)〜図19(D)の中央に示す図は、現フレームにおける特徴点同士の関係を示している。領域計算部412は、ステップS215で、cosθ(P11´)、cosθ(P12´)、及びcosθ(P13´)を求める。
次に、領域計算部412は、変数wrongの値を0で初期化する(ステップS216)。ここで、変数wrongは、異常な特徴点の数をカウントするための変数である。
領域計算部412は、式(1)で計算される値が閾値T
inner_product以下であるか判定する(ステップS217)。3点間の位置関係が現フレームと前フレームとで同じであれば、前フレームでの内積値と現フレームでの内積値とは等しくなる。したがって、式(1)で表される値が、閾値以上である場合、ステップS212で選択した特徴点と、ステップS213で選択した特徴点の組み合わせとの位置関係が、前フレームと現フレームにおいて異なると考えられるからである。
ステップS217の判定がNOの場合、領域計算部412は変数wrongの値を増やす(ステップS218)。ステップS217の判定がYESの場合、又は、ステップS218の処理の後、領域計算部412は、内積を求めた全ての組についてステップS217の処理を行ったか否か判定する(ステップS219)。全てについて処理が終わっていない場合(ステップS219/NO)、領域計算部412は、ステップS217〜S219の処理を繰り返す。全てについて処理が終了した場合(ステップS219/YES)、領域計算部412は、変数wrongを、組数kで除した値が、予め定めた値Cよりも小さいか否か判定する(ステップS220)。
ステップS220の判定がNOの場合、「位置の妥当性」項目に、現フレームの特徴点の位置が異常であることを示す「INVALID」を設定する(ステップS222)。ステップS220の判定がYESの場合、「位置の妥当性」項目に、位置が正常であることを意味する「VALID」を設定する(ステップS221)。そして、領域計算部412は、ステップS211に戻る。
図19の例では、図19(B)〜(D)の右図に示すとおり、3組のうち、2組の値が閾値Tinner_productより大きい。従って、変数wrongの値は2となる。変数worn(=2)を、組数k(=3)で除した値は0.66となるため、予め定めた値Cを0.25とすると、図19の例では、ステップS220の判定結果はNOとなり、特徴点P1の「位置の妥当性」項目には、「INVALID」が設定される。
図17に戻り、フローチャートの説明を続ける。ステップS211の判定がYESの場合、領域計算部412は、図18のFに進み、「特徴点の状態(現)」項目に「STAT_OUT」が設定されている、又は、「位置の妥当性」項目に「INVALID」が設定されている全ての特徴点に対して、後述する処理を実行したか否か判定する(ステップS223)。ステップS223の判定がYESの場合、領域計算部412はは本処理を終了する。
ステップS223の判定がNOの場合、領域計算部412は、「位置の妥当性」項目に「VALID」が設定されている特徴点を利用して、前フレームの座標に対応する現フレームの座標を求める(ステップS224)。具体的には、式(2)を用いて、前フレームの特徴点の座標(xn,yn)から、現フレームの特徴点Pn´の座標(xn´,yn´)を求める。
前フレームの特徴点P
nの座標(x
n、y
n)が、現フレームの特徴点P
n´の座標(x
n´,y
n´)に移動したとすると、並行移動、拡大・縮小、回転による写像は式(2)のように表すことができる。
そこで、現フレームの特徴点P
n以外で、かつ、「位置の妥当性」項目に「VALID」が設定されている特徴点と、その前フレームにおける特徴点とから、式(3)で表される行列Aを求める。そして、式(2)を用いて、P
nの移動先P
n´を求める。
なお、計算に必要な特徴点の数が足りない場合は、図21(A)に示すように、前フレームにおいて直線PlPm、∠PnPlPm、及び∠PnPmPlを求める。そして、前フレームから現フレームに特徴点Pl、Pm、及びPnが相似に移動しているものと仮定し、図21(B)に示すように、直線Pn´Pl´と、直線Pn´Pm´の交点を求めることによって、Pnの移動先Pn´を求めても良い。
次に、領域計算部412は、対応点Pn´が求められたか否か判定する(ステップS225)。対応点Pn´が求められた場合(ステップS225/YES)、領域計算部412は、「特徴点の信頼度」項目の値を下げる(ステップS226)。他の特徴点を用いて位置を修正した特徴点であるため、その追跡が容易ではないと考えられるからである。
対応点Pn´が求められなかった場合(ステップS225/NO)、領域計算部412は、特徴点Pnがユーザの指定した点か否か判定する(ステップS227)。つまり、領域計算部412は、「特徴点の種類」項目に、「USER_ADD」が設定されているか否か判定する。
特徴点Pnがユーザの指定した点でない場合(ステップS227/NO)、領域計算部412は、Pnを特徴点として使用するのを中止するために、特徴点配列データからPnのデータを削除し(ステップS228)、ステップS223に戻る。Pnがユーザの指定した点である場合(ステップS227/YES)、領域計算部412は、図13のGに進み、特徴点配列データに格納されているデータを全てクリアする(ステップS22)。この結果、指定領域はクリアされ、ステップS10及びS11の処理を経て、表示部20にはポインタが表示されるようになる(ステップS12)。
図13に戻りフローチャートの説明を続ける。ステップS200の処理が終了した場合、又はステップS17の判定がNOの場合、領域計算部412は、指定領域が存在するか否か判定する(ステップS18)。指定領域が存在する場合(ステップS18/YES)、領域計算部412は、指定領域の妥当性を検証する(ステップS300)。ここで、ステップS300の処理の詳細について説明する。図22は、ステップS300の詳細な処理の一例を示すフローチャートである。
図22において、領域計算部412は、特徴点配列データに含まれる全ての特徴点Pnに対して、後述する処理を実行したか否か判定する(ステップS301)。特徴点Pnを全て処理した場合(ステップS301)、領域計算部412は、指定領域は妥当な状態であると判定し(ステップS303)、処理を終了する。
特徴点Pnを全て処理していない場合(ステップS301/NO)、領域計算部412は特徴点Pnを一つ選択する(ステップS302)。次に、領域計算部412は、現フレームの特徴点Pn´が、指定領域内に存在するか否か、つまり、「選択領域内フラグ(現)」項目に、「FLAG_IN」が設定されているか否か判定する(ステップS304)。
ステップS304の判定がYESの場合、領域計算部412は、前フレームの特徴点Pnが指定領域内にあるか否か、つまり、「選択領域内フラグ(前)」項目に、「FLAG_IN」が設定されているか否か判定する(ステップS305)。領域計算部412は、ステップS305の判定がNOの場合、指定領域は異常な状態であると判定する(ステップS307)。現フレームで指定領域内に存在している特徴点が、前フレームでは指定領域内に存在していなかったということは、特徴点と指定領域との位置関係に変更が生じていると考えられるからである。
領域計算部412は、ステップS305の判定がYESの場合、ステップS301に戻り処理を継続する。現フレームで指定領域内に存在する特徴点が、前フレームでも指定領域内にあったならば、指定領域と特徴点との位置関係に変更はないと考えられるからである。
領域計算部412は、ステップS304の判定がNOの場合、前フレームの特徴点Pnが指定領域外にあるか、つまり、「選択領域内フラグ(前)」項目に、「FLAG_OUT」が設定されているか否か判定する(ステップS306)。ステップS306の判定がYESの場合、領域計算部412は、ステップS301に戻り、処理を継続する。現フレームで指定領域外にある特徴点が、前フレームでも指定領域外にあったということは、指定領域と特徴点との位置関係に変更がないと考えられるためである。
ステップS306の判定がNOの場合、領域計算部412は、指定領域が異常な状態であると判定し(ステップS307)、処理を終了する。現フレームで指定領域外に存在している特徴点が、前フレームでは指定領域内に存在していたということは、特徴点と指定領域との位置関係に変更が生じていると考えられるからである。
図13に戻り説明を続ける。ステップS300の処理後、領域計算部412は、指定領域が妥当な状態であるか否か判定する(ステップS19)。指定領域が妥当な状態ではない場合(ステップS19/NO)、領域計算部412は、特徴点配列データに格納されているデータを全てクリアする(ステップS22)。この結果、指定領域はクリアされ、ステップS10及びS11の処理を経て、表示部20にはポインタが表示される(ステップS12)。
指定領域が妥当な状態にある場合(ステップS19/YES)、表示制御部414は、指定領域とその中心位置を表示部20に描画する(ステップS20)。
領域計算部412は、ステップS18の判定がNOの場合、又はステップS20の処理の終了後、指定領域がクリアされているか否か判定する(ステップS21)。ステップS21の判定がYESの場合、領域計算部412は、特徴点配列データに格納されているデータを全てクリアする(ステップS22)。この結果、指定領域はクリアされ、ステップS10及びS11の処理を経て、表示部20には領域指定受付部411によりポインタが表示される(ステップS12)。
指定領域がクリアされていない場合(ステップS21/NO)、又は、ステップS11の判定がNOの場合、ズーム倍率変更部415は、撮影処理(ステップS400)を実行する。ここで、ステップS400の処理の詳細について説明する。図23は、ステップS400の詳細な処理の一例を示すフローチャートである。
ズーム倍率変更部415は、ユーザによりシャッターが押されているか否か判定する(ステップS401)。本実施例では、ステップS401の「シャッターが押されている」は、「シャッターが半押しされている」であるとする。
ズーム倍率変更部415は、シャッターが押されている場合(ステップS401/YES)、ズーム倍率変更部415は、画面の中心と指定領域の中心とが一致していると判定できるほど、画面の中心と指定領域の中心との距離が小さいか否か判定する(ステップS402)。ステップS402の判定がNOの場合、ズーム倍率変更部415は、メッセージを表示部20に表示する等して、画面の中心と指定領域の中心とを合わせるように、ユーザに促す(ステップS403)。ステップS403の処理が終了すると、ズーム倍率変更部415は、ステップS402から処理を継続する。
ステップS402の判定がYESの場合、ズーム倍率変更部415は、指定領域が画面内で最大になるように光学系のズーム倍率を調整する(ステップS404)。次に、ズーム倍率変更部415は、シャッターが最後まで押し込まれたか否か判定する(ステップS405)。つまり、本実施例では、ステップS405において、ステップS401で半押しされたシャッターが、ユーザにより押し込まれたか否かを判定している。なお、ユーザが撮影操作を実行しているか否かの判定は、シャッターの押下状態に基づくものでなくても良い。例えば、ズーム倍率の変更と、撮影動作とが、別々のボタンの操作によって実行されるとする。この場合、ステップS401において所定のボタンが押されたか否かを判定し、ステップS405では、ステップS401とは異なる所定のボタンが押されたか否かを判定するようにしても良い。
ズーム倍率変更部415は、ステップS405の判定がNOの場合、又は、ステップS401の判定がNOの場合、ユーザが撮影操作を実行していない未撮影状態であると判定する(ステップS408)。
ステップS405の判定がYESの場合、取得部417は、指定領域内の画像を記憶部413に記憶させる(ステップS406)。取得部417は、ユーザが撮影操作を行い画像が撮影されたと判定し(ステップS407)、処理を終了する。
図13に戻り説明を続ける。画像補正部416は、ユーザにより画像が撮影されたか否か判定する(ステップS23)。ユーザにより画像が撮影された場合(ステップS23/YES)、画像補正部416は、記憶部413に記憶されている画像に対し、台形補正や傾き補正等の画像補正処理を施し、補正後の画像を格納部50に画像を保存する(ステップS24)。画像補正部416は、処理を終了する。
ユーザにより画像が撮影されなかった場合(ステップS23/NO)、図12のDに進み、領域指定受付部411が、再びステップS10から処理を実行する。
以上の説明から明らかなように、実施例1によれば、指定領域の中心と撮像部10が撮像する画像の中心との距離が予め定められた範囲内にある場合に、ズーム倍率変更部415は、指定領域が表示部20いっぱいに表示されるように、光学系のズーム倍率を変更する。これにより、全体の画像を撮影してから指定領域の画像を切り出すよりも高い解像度で、指定領域に含まれる被撮像物を撮影することが可能となる。
また、領域指定受付部411は、指定領域を定義する点の指定を表示部20上に表示されるポインタを使用したユーザの操作に基づいて、受付ける。これにより、ユーザは直感的な操作により、容易に指定領域を設定することが可能となる。
また、領域計算部412は、前フレームにおける複数の特徴点と、指定領域を定義する点との位置関係を使用して、前フレームにおける指定領域と、指定領域に含まれる被撮像物との位置関係が維持されるような現フレームにおける指定領域の位置及び大きさを計算する。そして、表示制御部414が、領域計算部412による計算結果に基づいて現フレームにおける指定領域を示す枠を、表示部20に表示する。これにより、ユーザは指定領域を示す枠をガイドとして使用して、全体の画像と、指定領域との関係を容易に把握することが可能となる。
また、取得部417が指定領域に含まれる画像のみを取得することで、ユーザは撮影後に指定領域を切り出す等の作業を行う必要がなくなり、ユーザの利便性が向上する。