以下、図面を参照し、本発明の好適な実施の形態について詳細に説明する。本実施の形態では、本発明の撮像装置をデジタルカメラに適用した場合を例にとって説明する。
(実施の形態)
図1は、デジタルカメラ1の背面図である。図1に示すように、デジタルカメラ1は、カメラ本体2の上面に配設された撮影タイミングを指示するためのシャッターボタン(レリーズボタン)3、カメラ本体2の背面に配設された電源ボタン4やメニューボタン5、上下左右の各方向ボタン(上ボタン、下ボタン、左ボタンおよび右ボタン)を有する十字ボタン6、操作内容を確定する等のためのOKボタン7、各種画面を表示する表示部22等を備えている。また、図示しないが、カメラ本体2の前面には、ファインダーや撮像レンズ等が配設されている。ユーザが電源ボタン4を押下し、電源をONすると、デジタルカメラ1は撮影可能な状態(撮影モード)となる。この撮影モードでは、撮像レンズを通して撮像素子12(図2参照)に結像されている被写体像が1フレーム(例えば1/30秒)毎に取り込まれ、ライブビュー画像として表示部22にリアルタイムに表示されるようになっている。そして、例えばシャッターボタン3の押下タイミング等で電子的な撮影が行われる。
先ず、このデジタルカメラ1の構成について説明する。図2は、デジタルカメラ1の構成例を示す概略ブロック図である。図2に示すように、デジタルカメラ1は、撮像光学系11、撮像部としての撮像素子12、AFE(Analog Front End)13、フレームメモリ14、動き検出部15、画像処理部16、記録媒体I/F17、記録媒体保持部18、記録媒体19、ビデオエンコーダ20、表示ドライバ21、表示部22、ビデオ信号出力端子23、操作部24、RAM25、ROM26、コントローラ27等を備える。
撮像光学系11は、撮像レンズ、絞り、シャッター等を含み、入射される被写体像を撮像素子12に結像する。撮像素子12は、例えばCCD(Charge Coupled Device)やCMOS(Complementary Metal Oxide Semiconductor)等の固体撮像素子であり、被写体からの光束を撮像光学系11を介して受光し、光電変換することによってフレーム単位の画像データ(アナログ電気信号)を得るものである。AFE13は、撮像素子12によって得られる画像データに対してCDS(Correlated Double Sampling)やAGC(Automatic Gain Control)等のアナログ信号処理を施した後、A/D変換処理を施してデジタル電気信号に変換する。AFE13によってデジタル化された画像データは、フレームメモリ14および動き検出部15に出力されるとともに、RAM25に一時的に記憶される。
フレームメモリ14は、動き検出部15による作業用メモリとして用いられる。このフレームメモリ14は、過去2フレーム分の画像データを記憶するための領域を備え、前回取り込まれたライブビュー画像の画像データと、今回取り込まれたライブビュー画像の画像データとが記憶される。すなわち、ライブビュー画像の表示時(以下、「ライブビュー時」と呼ぶ。)では、直前に取り込まれた直前フレームのライブビュー画像(直前フレーム画像)の画像データおよび現フレームのライブビュー画像(現フレーム画像)が記憶される。また、撮影処理が開始されるとライブビュー画像の表示が一旦停止されるが、この撮影処理中(以下、「撮影時」と呼ぶ。)では、その開始前の最後に取り込まれた撮影直前フレームのライブビュー画像(撮影直前フレーム画像)の画像データが記憶され、撮影処理後、ライブビュー画像の表示が復帰した時点で、現フレームのライブビュー画像が撮影直後フレームのライブビュー画像(撮影直後フレーム画像)として記憶される。
動き検出部15は、AFE13からの画像データをもとに、画像間の動きを検出するためのものである。図3は、動き検出部15が行う動き検出の概要を説明する説明図である。動き検出部15は、撮影処理の後、最初に取り込まれるライブビュー画像である撮影直後フレーム画像および既にフレームメモリ14に記憶されている撮影直前フレーム画像を縮小処理し、縮小処理後の撮影直前フレーム画像と縮小処理後の撮影直後フレーム画像とを比較する。そして、各画像に映る同一の被写体位置の変化量を表す動きベクトルを撮影前後検出結果として算出することによって、撮影前後動き検出部として機能する。また、ライブビュー時では、動き検出部15は、AFE13から随時入力される現フレームのライブビュー画像(現フレーム画像)を既にフレームメモリ14に記憶されている直前フレーム画像と比較する。そして、各画像に映る同一の被写体位置の変化量を表す動きベクトルを直前フレーム間検出結果として算出することによって、ライブビュー期間動き検出部として機能する。
図4は、この動き検出部15の機能構成を示す模式図である。図4に示すように、動き検出部15は、コントローラ27の撮影時間計測部273によって計測された撮影時間に応じて縮小率を設定する縮小率設定部151と、撮影直前フレーム画像および撮影直後フレーム画像を、縮小率設定部151が設定した縮小率で縮小処理する縮小処理部153と、直前フレーム間検出結果および撮影前後検出結果の信頼性を評価する信頼性判定部としての信頼性評価部155と、直前フレーム間検出結果を積算してライブビュー時の画像移動量(ライブビュー時画像移動量)を算出するとともに、撮影前後検出結果をもとに撮影時の画像移動量(撮影時画像移動量)を算出する画像移動量算出部157とを含む。また、図示しないが、動き検出部15は、直前フレーム間検出結果や撮影前後検出結果、各検出結果の信頼性の評価結果等を一時的に記憶しておくためのRAMを内部に備えている。
画像処理部16は、図2に示すように、RAM25に一旦記憶された画像データを読み出し、この画像データに対して各種の画像処理を施すとともに、記録用、表示用、パノラマ合成用等に適した画像データに変換する処理を行う。例えば、撮影画像やパノラマ画像の画像データを記録する際、あるいは記録されている画像データを表示する際等に、JPEG(Joint Photographic Experts Group)方式等に基づく画像データの圧縮処理や伸張処理を行う。また、パノラマ撮影モード中に撮影された連続性のある複数の撮影画像の画像データを合成し、1枚のパノラマ画像を生成する処理等を行う。この画像処理部16で画像処理された画像データは、記録媒体I/F17に出力されて記録媒体19に記録され、あるいはビデオエンコーダ20に出力されて表示部22に表示される。
ビデオエンコーダ20は、表示用に変換された画像データを表示ドライバ21に送出する。例えば撮影モードでは、1フレーム毎に撮像素子12から取り込まれて画像処理部16によって画像処理された画像をフレーム単位で表示部22に切換表示させ、ライブビュー画像の表示を行う。一方、再生モードでは、記録媒体19から読み出されて画像処理部16よって画像処理された撮影画像やパノラマ画像を表示部22に表示させる。また、このビデオエンコーダ20は、ビデオ信号出力端子23に接続された外部機器に対し、必要に応じて表示用の画像データを出力する。表示部22は、撮影画像やライブビュー画像の他、デジタルカメラ1の各種設定情報等を表示するためのものであり、LCD(Liquid Crystal Display)やELディスプレイ(Electroluminescence Display)等の表示装置で実現される。
記録媒体I/F17は、記録媒体保持部18によって挿脱自在に保持される記録媒体19に対して、記録用に変換された画像データ等の書き込みや、記録された画像データの読み出し等を行う。記録媒体19は、例えばxD−ピクチャーカード(登録商標)やコンパクトフラッシュ(登録商標)カード等のメモリカードである。
操作部24は、撮影タイミングの指示や、パノラマ撮影モードを含む各種の撮影モードや再生モードといったモードの設定操作、撮影条件の設定操作等、ユーザによる各種操作を受け付けて操作信号をコントローラ27に通知するためのものであり、各種機能が割り当てられたボタンスイッチ等で実現される。この操作部24は、図1のシャッターボタン3、電源ボタン4、メニューボタン5、十字ボタン6、およびOKボタン7を含む。
ROM26は、デジタルカメラ1を動作させ、このデジタルカメラ1が備える種々の機能を実現するための各種のカメラプログラムや、このカメラプログラムの実行中に使用されるデータ等を予め記憶する。RAM25は、画像処理部16やコントローラ27の作業用メモリとして用いられる。例えば、AFE13からの画像データ等が一時的に記憶され、表示部22に表示するライブビュー画像の画像データを生成する際の作業用やパノラマ画像を生成する際の作業用、撮影画像やパノラマ画像を記録媒体19に記録する際の作業用に用いられる。
コントローラ27は、操作部24からの操作信号等に応じてROM26からカメラプログラムを読み出して実行し、デジタルカメラ1を構成する各部の動作制御やメモリ制御を行ってデジタルカメラ1全体の動作を統括的に制御する。また、AF(自動焦点)、AE(自動露出)、AWB(自動ホワイトバランス)等の処理を行う。このコントローラ27は、パノラマ撮影モードにおいて撮影処理の開始タイミングを指示する撮影開始指示部271と、この撮影開始指示部271の指示によって開始された撮影処理の開始から終了までの撮影時間をカウント(計測)し、動き検出部15に出力する撮影時間計測部273とを含む。
次に、以上のように構成されるデジタルカメラ1の撮影モードの一つであるパノラマ撮影モードについて説明する。図5は、パノラマ撮影モードの概要を説明する図である。パノラマ撮影モードでは、複数回撮影処理を行って、複数の画像(以下、パノラマ画像用に撮影される撮影画像を「部分画像」という。)の画像データを生成する。例えば、ユーザは、シャッターボタン3を押下し、1枚目の部分画像を生成する。その後カメラ本体2を所定のパノラマ撮影方向へとパンニング操作し、2枚目の部分画像撮影位置に達したところで2枚目の部分画像を撮影する。以後、任意の枚数の部分画像の撮影を繰り返すことで、被写体を部分毎に撮影する。パンニング操作とは、パノラマ撮影方向に沿ってカメラ本体2を回転させながら移動させる操作のことをいう。図5では、ユーザが、シャッターボタン3の押下後にカメラ本体2を左側から右側に向けて水平方向にパンニング操作し、例えば3枚の部分画像I1,I3,I5を撮影した場合を示している。ここで、各部分画像I1,I3,I5の撮影処理は、1枚目の部分画像I1についてはシャッターボタン3の押下タイミングで行われる。2枚目以降の部分画像I3,I5については、ユーザによるカメラ本体2のパンニング操作の途中で自動的に行われる。そして、このようにして生成した部分毎の部分画像I1,I3,I5を、それぞれ隣り合う部分画像I1,I3,I5間の位置関係が合うように繋ぎ合わせて合成し、1枚のパノラマ画像I7を生成する。具体的には、部分画像I1の右端の領域A1と、部分画像I3の左端の領域A3とに映る重複部分を探索し、探索された重複部分をもとに、部分画像I1と部分画像I3とを合成する。同様にして、部分画像I3の右側の領域A5と、部分画像I5の左側の領域A7とに映る重複部分をもとに、部分画像I3と部分画像I5とを合成する。
このように、パノラマ画像を生成するためには、各部分画像の所定範囲が重複している必要があるが、一方で、重複部分が所定範囲からずれると合成箇所の探索処理に時間を要し、合成処理時間が増大してしまう。また、重複部分が著しく所定範囲からずれると、合成箇所を検出することができず、合成の結果、継ぎ目に違和感のあるパノラマ画像となる。このため、2枚目以降の部分画像の撮影処理は、重複部分が適切な範囲となるようなタイミングで行う必要がある。本実施の形態では、1枚目の撮影処理の後、移動マークとしてのポインタと、このポインタの移動目標位置を示す移動目標マークとしてのターゲットとをライブビュー画像上に表示し、ポインタをターゲット上に移動させるようなパンニング操作を促す。
図6および図7は、パノラマ撮影を行う際のデジタルカメラ1の操作を説明するための図であり、パノラマ撮影モードにおいて表示部22に表示される表示画面の遷移例を示している。パノラマ撮影モードでは先ず、ライブビュー画像の表示が開始される(図6(a))。そして、シャッターボタン3が押下されるまで待機状態となる。ユーザは、このライブビュー画像を見ながらシャッターボタン3を押下し、1枚目の部分画像の撮影タイミングを指示する。撮影タイミングを指示すると撮影処理が開始され、1枚目の部分画像が生成される。ここで、撮影処理が開始されると、ライブビュー画像の表示が一旦停止されて露光に移る。すなわち、露光中や転送中等は撮像素子12からの出力がないためライブビュー画像が取り込めず、表示部22の表示は、何も表示されないブラックアウト状態となる(図6(b))。そして、露光が終わると、画像データの転送処理や画像処理を経てライブビュー画像の表示が復帰する。また、1枚目の部分画像の撮影の後復帰したライブビュー画像上には、ポインタPMとターゲットTMとが表示され(図6(c))、2枚目の部分画像を撮影するためのターゲットTMへのパンニング操作を促す。ここで、図6(c)では、向かって右側にポインタPMが、左側にターゲットTMが配置されており、パノラマ撮影方向が“右”の場合の操作例を示している。パノラマ撮影方向は、例えばユーザが「右」または「左」のいずれか一方を選択することで確定される。なお、パノラマ撮影方向が“左”の場合には、ポインタは画面左側、ターゲットは画面右側を初期表示位置として配置される。ユーザがカメラ本体2を右方向に向けて水平方向にパンニング操作すると、ポインタPMは、動き検出部15が行う動き検出処理の結果算出されるライブビュー時画像移動量に従ってライブビュー画像とともにターゲットTMが配置される左側へと移動していく(図6(d))。
そして、図7に示すように、ポインタPMがターゲットTMの枠内に移動すると(図7(a))、撮影処理が自動的に開始される。この撮影処理においても、1枚目の部分画像の撮影処理のときと同様にライブビュー画像の表示が一旦停止され、表示部22の表示は何も表示されないブラックアウト状態となる(図7(b))。そして、露光が終わり、画像データの転送処理や画像処理の後にライブビュー画像の表示が復帰する。また、2枚目の部分画像の撮影の後復帰したライブビュー画像上には、1枚目の撮影後と同様にしてポインタPMとターゲットTMとが表示され、3枚目の部分画像を撮影するためのパンニング操作を促すが、2枚目以降の撮影処理の後では、動き検出部15が行う撮影前後動き検出処理の結果算出される撮影時画像移動量から部分画像の繋ぎ目が検出され、この繋ぎ目をもとに次の撮影位置が決定されてポインタPMの初期表示位置が調整されるようになっている。例えば、撮影処理中にカメラ本体2がほとんど動かされなければ、ポインタPMは、ライブビュー画像の右側端部の所定位置を初期表示位置として配置される(図7(c))。部分画像の撮影処理中にカメラ本体2が右方向に動かされた場合には、ポインタPMは、前述の所定位置よりもターゲットTM側を初期表示位置として配置される(図7(d))。どの程度ターゲットTM側に寄せるかは、撮影時画像移動量をもとに決定する。
ここで、動き検出部15が行う動き検出処理および撮影前後動き検出処理の原理について説明する。上記したように、動き検出部15は、動き検出対象の画像間の動きを検出する。すなわち、ライブビュー時では、動き検出処理を行い、直前フレームと現フレームとを動き検出対象とした各画像間(直前フレーム間)の動きを検出する。一方、ブラックアウト状態となってライブビュー画像の動きが検出できない撮影処理時では、撮影前後動き検出処理を行い、縮小処理した撮影直前フレーム画像と縮小処理した撮影直後フレーム画像とを動き検出対象とした各画像間(撮影前後)の動きを検出する。
図8−1および図8−2は、直前フレーム間の動き検出について説明するための図であり、図8−1は、直前フレーム画像の一例を示し、図8−2は、現フレーム画像の一例を示している。動き検出部15は先ず、図8−1に示すように、直前フレーム画像中の直前フレーム間検出エリアEb内に複数の代表点Bを設定する。代表点Bを設定する位置やそのサイズ、数等は、例えば予め設定しておく。また、現フレーム画像中に、直前フレーム画像中に設定した各代表点に対する探索範囲を設定する。設定する探索範囲のサイズは、予め設定しておく。そして、直前フレームの各代表点と対応する探索範囲とでパタンマッチングを行い、代表点と最も相関の高い位置を現フレーム画像中の各探索範囲の中から探索する。例えば、図8−1の直前フレーム画像中に設定された代表点B1に着目すると、この代表点B1の位置に対応する現フレーム画像中の探索範囲Esの中から、代表点B1の最も相関の高い位置P1が探索される。このパタンマッチングによって得られた各代表点の動きベクトルをもとに、画面全体の動きを示す代表動きベクトルを求める。動き検出処理では、このようにしてライブビュー時に随時検出される直前フレーム間検出結果を積算してライブビュー時画像移動量を算出する。
一方、撮影前後動き検出処理においても、図8−1および図8−2を参照して説明したパタンマッチングの手法を用いて動き検出を行うが、撮影前後の動き検出では、撮影直前フレーム画像と撮影直後フレーム画像とを動き検出対象とするため、撮影処理中にカメラ本体2が大きく動かされた場合等、各画像間の動きが大きい場合に、撮影直前フレーム画像中に設定される代表点に対応する動きベクトルが撮影直後フレーム画像中の探索範囲から外れてしまう事態が生じ得る。図9−1は、撮影直前フレーム画像の一例を示す図であり、図9−2は、撮影直後フレーム画像の一例を示す図である。例えば、図9−1の撮影直前フレーム画像中に設定された代表点B11に着目すると、この撮影直前フレーム画像中の代表点B11に対応する動きベクトルP11が、図9−2の撮影直後フレーム画像中の探索範囲Esから外れてしまっている。この場合、代表点B11についてのマッチングが失敗するため、正しい動き検出結果を得ることができない。
このため、撮影前後の動き検出では、撮影直前フレーム画像および撮影直後フレーム画像を所定の縮小率で縮小処理した後で、動き検出を行う。図10−1は、縮小処理後の撮影直前フレーム画像の一例を示す図であり、図10−2は、縮小処理後の撮影直後フレーム画像の一例を示す図である。この場合には、動き検出部15は、図10−1に示すように、縮小処理後の撮影直前フレーム画像中に縮小率に応じた数の代表点、探索範囲を縮小率に応じた位置に設定する。探索範囲を設定する位置や数等は、縮小率毎に予め設定しておく。そして、縮小処理後の撮影直前の代表点と縮小処理後の撮影直後フレーム画像中の探索範囲とでパタンマッチングを行う。例えば、図10−1の縮小処理後の撮影直前フレーム画像中に設定された一つの代表点Bc1を図示しており、この代表点Bc1に着目すると、図10−2に示す縮小処理後の撮影直後フレーム画像中の対応する探索範囲Esから、動きベクトルPc1が検出される。このように動き検出対象の撮影直前フレーム画像および撮影直後フレーム画像を縮小処理すれば、探索範囲のサイズを変更することなく動きベクトルの検出確率を向上させることができ、処理負荷や処理時間が増大しない。より詳細には、撮影時間が長い程撮影前後での画像の動きが大きい可能性が高いため、撮影時間に応じて縮小率を設定することによって、代表点に対応する動きベクトルが探索範囲内に収まるようにする。
次に、デジタルカメラ1の動作について説明する。図11は、デジタルカメラ1の状態遷移図である。図11に示すように、デジタルカメラ1は、電源ボタン4が押下されて電源がONされると(a1)、カメラ電源OFF状態C1から静止画撮影待機状態C3に遷移し、撮影モードとなる。撮影モードでは、撮像素子12に結像されている被写体像の画像データをRAM25に記憶し、この画像データをフレーム単位で切り換えて表示部22に表示する一連の処理を繰り返し行い、ライブビュー画像の表示を継続的に行う。また、電源ボタン4が押下されて電源がOFFされると(a3)、デジタルカメラ1は、カメラ電源OFF状態C1へと遷移する。
そして、パノラマ撮影モードが選択されると(a5)、デジタルカメラ1は、静止画撮影待機状態C3から撮影状態C5へと遷移する。ここで、1枚目の部分画像の撮影に際しては、シャッターボタン3の押下タイミングで撮影処理を開始する。そして、撮影を完了すると(a7)、デジタルカメラ1は、撮影状態C5から撮影方向検出状態C7へと遷移する。ここでは、ライブビュー画像の動きを検出することによってカメラ本体2のパンニング操作を検出し、パノラマ撮影方向を確定する。パノラマ撮影方向が確定すると(a9)、デジタルカメラ1は、撮影方向検出状態C7からライブビュー時移動量検出状態C9へと遷移する。ここでは先ず、パノラマ撮影方向をもとにポインタの初期表示位置を設定し、ライブビュー画像上にポインタとターゲットとを表示させる。そして、直前フレーム間での動き検出を随時積算することによってライブビュー時画像移動量を算出し、ポインタを移動させる。ポインタがターゲットに重なるとポインタの移動を完了し(a11)、デジタルカメラ1は、ライブビュー時移動量検出状態C9から撮影状態C5へと遷移して撮影処理を開始する。2枚目以降の撮影を完了した場合には(a13)、デジタルカメラ1は、撮影状態C5から撮影時移動量検出状態C11へと遷移する。ここでは、撮影前後の動き検出を行って撮影時画像移動量を算出する。そして、求めた撮影時画像移動量やパノラマ撮影方向をもとにポインタの初期表示位置を設定し、ライブビュー画像上にポインタとターゲットとを表示させる。検出を完了すると(a15)、デジタルカメラ1は、撮影時移動量検出状態C11からライブビュー時移動量検出状態C9へと遷移し、次の部分画像の撮影に移る。このようにして、所定枚数の部分画像を撮影したならば、生成した部分画像を合成してパノラマ画像を生成し、パノラマ撮影を終える(a17)。このとき、デジタルカメラ1は、撮影状態C5から静止画撮影待機状態C3へと遷移する。
図12は、撮影モードにおけるデジタルカメラ1の動作を示すフローチャートである。撮影モードでは先ず、コントローラ27が、撮影モードの種類を判定する。通常の撮影モード等のパノラマ撮影モード以外の撮影モードが設定されている場合には(ステップb1:No)、その撮影モードに応じた撮影動作に移り(ステップb3)、終了後、処理を終える。
一方、パノラマ撮影モードが設定されている場合には(ステップb1:Yes)、先ず1枚目の部分画像の撮影を行う。すなわち、撮影開始指示部271が、シャッターボタン3が押下されたタイミングを撮影タイミングとして撮影処理の開始を指示する。これによって撮影処理が開始され、各部の動作を制御してこのときの撮影範囲の静止画像を1枚目の部分画像として撮影する(ステップb5)。この撮影処理が開始されると、ライブビュー画像の表示が一旦停止される。このライブビュー画像の表示は、露光の後、画像データの転送処理や画像処理を終えると復帰するようになっている。
続いて、コントローラ27は、パノラマ撮影方向の指示を促す撮影方向誘導OSD(On-Screen Display)をライブビュー画像上に表示する制御を行い、この撮影方向誘導OSDによってカメラ本体2のパノラマ撮影方向へのパンニング操作を促して、例えば“左”または“右”のいずれかのパノラマ撮影方向の指示を受け付ける(ステップb7)。そして、ステップb9〜ステップb13の処理をフレーム毎に繰り返し実行し、カメラ本体2のパンニング操作を検出する。すなわち、動き検出部15が現フレーム画像と直前フレーム画像との間の動き検出を行い、直前フレーム間検出結果を積算して積算移動量を算出する(ステップb9)。そして、コントローラ27が積算移動量をもとに撮影方向判定処理を行う(ステップb11)。このとき、ユーザが撮影方向誘導OSDの表示に従ってカメラ本体2を左側に向けて水平方向に回転させれば、パノラマ撮影方向は左方向として確定される。同様にして、ユーザがカメラ本体2を右側に向けて水平方向に回転させると、パノラマ撮影方向は右方向として確定される。カメラ本体2が動かされずにパノラマ撮影方向が確定されない場合には(ステップb13:No)、ステップb9に戻る。
そして、パノラマ撮影方向を確定したならば(ステップb13:Yes)、続いてコントローラ27は、表示制御部として、ポインタとターゲットとをライブビュー画像上に表示する制御を行う(ステップb15)。具体的には、コントローラ27は、ステップb9で算出された積算移動量をもとにポインタの初期表示位置を設定し、ポインタとターゲットとをライブビュー画像上に配置する。またこのとき、ポインタとターゲットとの位置関係をパノラマ撮影方向に従って決定する。
この後、ポインタがターゲットの位置に移動するまでの間、ステップb17〜ステップb21の処理をフレーム毎に繰り返し行う。すなわち先ず、動き検出部15が動き検出処理を行い、ライブビュー時画像移動量を算出する(ステップb17)。続いてコントローラ27が、動き検出処理で算出されたライブビュー時画像移動量をもとにポインタの表示位置を移動させ、表示を更新する(ステップb19)。そして、コントローラ27は、ポインタの表示位置がターゲットの枠内か否かを判定し、ターゲットの枠内でないならば(ステップb21:No)、ステップb17に戻る。
ポインタがターゲットの枠内に移動した場合には(ステップb23:Yes)、現フレーム画像を撮影直前フレーム画像とし、画像データをフレームメモリ14に記憶する(ステップb23)。続いて、撮影開始指示部271が撮影処理の開始を指示するが、このとき、撮影時間計測部273が撮影時間の計測を開始する(ステップb25)。そして、撮影開始指示部271の指示によって撮影処理が開始され、このときの撮影範囲の静止画像を部分画像として撮影する(ステップb27)。撮影処理を終えると、撮影時間計測部273は、撮影時間の計測を終了する(ステップb29)。
続いてコントローラ27は、所定枚数の撮影を終了したか否かを判定する。例えば、3枚の部分画像を撮影してパノラマ画像を生成する場合であれば、3枚の部分画像を撮影したか否かを判定する。部分画像の枚数は固定でもよいし、ユーザが適宜設定できるように構成してもよい。所定枚数の撮影が終了していない場合には(ステップb31:No)、動き検出部15が撮影前後動き検出処理を行い、撮影時画像移動量を算出する(ステップb33)。続いてコントローラ27が、表示制御部として、撮影前後動き検出処理で算出された撮影時画像移動量をもとにポインタの初期表示位置を設定し、ポインタとターゲットとをライブビュー画像上に表示する制御を行う(ステップb35)。このとき、ポインタとターゲットとの位置関係をパノラマ撮影方向に従って決定する。その後、ステップb17に戻る。
そして、所定枚数の撮影を行った場合には(ステップb31:Yes)、画像処理部16が、撮影した所定枚数の部分画像をパノラマ撮影方向に従って繋ぎ合わせて合成し、パノラマ画像を生成する(ステップb39)。そして、コントローラ27が、生成したパノラマ画像を表示部22に表示する制御を行い(ステップb41)、処理を終了する。また、このとき、生成したパノラマ画像を記録媒体19に記録する。
次に、ステップb11の撮影方向判定処理、ステップb17の動き検出処理およびステップb33の撮影前後動き検出処理について説明する。
図13は、撮影方向判定処理の詳細な処理手順を示すフローチャートである。この撮影方向判定処理では、図12のステップb9で算出された積算移動量の水平成分の絶対値を予め設定される所定の方向閾値と比較することによって、カメラ本体2のパンニング操作を検出する。そして、積算移動量(水平成分)の絶対値が方向閾値以下の場合には(ステップc1:No)、コントローラ27は、撮影方向未確定とする(ステップc3)。そして、図12のステップb11にリターンする。一方、積算移動量(水平成分)の絶対値が方向閾値より大きい場合には(ステップc1:Yes)、コントローラ27は、この積算移動量(水平成分)が0より大きければ(ステップc5:Yes)、パノラマ撮影方向を「右」として確定する(ステップc7)。そして、図12のステップb11にリターンする。また、コントローラ27は、積算移動量(水平成分)が0未満の場合には(ステップc5:No)、パノラマ撮影方向を「左」として確定する(ステップc9)。そして、図12のステップb11にリターンする。
図14は、動き検出処理の詳細な処理手順を示すフローチャートである。この動き検出処理では、動き検出部15は、現フレーム画像と直前フレーム画像との間(直前フレーム間)で動き検出を行い(ステップd1)、直前フレーム間検出結果を動き検出部15のRAMに一時的に記憶する(ステップd3)。続いて、信頼性評価部155が、直前フレーム間検出結果の信頼性の評価を行う(ステップd5)。ここでの評価の結果、信頼性評価部155が直前フレーム間検出結果を信頼性ありと判定した場合には(ステップd7:Yes)、続いて画像移動量算出部157が、ライブビュー時画像移動量の前回値と今回の直前フレーム間検出結果との合計値をライブビュー時画像移動量として算出する(ステップd9)。そして、図12のステップb17にリターンする。
ここで、信頼性評価部155が行う信頼性の評価について説明する。信頼性評価部155は、直前フレーム間検出結果および撮影前後検出結果をもとに評価パラメータの値を算出し、信頼性の有無を判定する。例えば、複数配置された代表点に対するマッチング失敗数が多い場合や、得られた動きベクトルの方向に統一性が無い場合は、検出結果の信頼性が低いと考えられる。そこで、代表点数に対するマッチング成功数を第1の評価パラメータとして算出する。また、マッチングが成功している動きベクトルをその方向毎にグループ分けして要素数の最大値を選出し、マッチング成功数に対する要素数の最大値を第2の評価パラメータとして算出する。そして、信頼性評価部155は、得られた評価パラメータが予め設定される所定の閾値を超えているか否かによって、各検出結果の信頼性の有無を判定する。
一方、ステップd5での評価の結果、信頼性評価部155が直前フレーム間検出結果を信頼性なしと判定した場合には(ステップd7:No)、画像移動量算出部157は、直前フレーム間動き量推定処理を行って、現フレーム画像と直前フレーム画像との間の動き量を推定する(ステップd11)。例えば、直近の所定数フレーム分の直前フレーム間検出結果を動き検出部15のRAMに保持しておくようにする。そして、この所定数の直前フレーム間検出結果をもとに、例えばこれらの平均値を求める等し、現フレーム画像と直前フレーム画像との間の推定動き量とする。そして、画像移動量算出部157は、ライブビュー時画像移動量の前回値と推定動き量との合計値をライブビュー時画像移動量として算出する(ステップd13)。そして、図12のステップb17にリターンする。
図15は、撮影前後動き検出処理の詳細な処理手順を示すフローチャートである。撮影前後動き検出処理の開始に先立ち、この撮影前後動き検出処理中に用いる繰り返し数i,jを“0”に初期化する。そして、図15に示すように、撮影前後動き検出処理では先ず、動き検出部15の縮小率設定部151が、図12のステップb25,b29で撮影時間計測部273によって計測された撮影時間に応じて縮小率を設定する(ステップe1)。例えば、等倍時の縮小率を1とし、撮影時間が長い程縮小処理後の画像サイズが小さくなるように1以下の値を設定する。続いて縮小処理部153が、ステップe1で設定された縮小率で縮小処理を行い、撮影直前フレーム画像および撮影直後フレーム画像を小さくリサイズする(ステップe2)。
続いて、動き検出部15が、縮小処理後の撮影直前フレーム画像中にステップe1で設定された縮小率に応じた位置および数の代表点を設定し(ステップe3)、代表点と対応する縮小処理後の撮影直後フレーム画像中の探索範囲を対象に撮影前後の動き検出を行う(ステップe5)。そして、信頼性評価部155が撮影前後検出結果の信頼性の評価を行う(ステップe6)。ここでの評価の結果、信頼性評価部155が撮影前後検出結果を信頼性ありと判定した場合には(ステップe7:Yes)、撮影前後検出結果をもとに撮影時画像移動量を算出し、動き検出部15のRAMに更新記憶する(ステップe9)。そして、動き検出部15は、縮小処理時の縮小率を判定し、縮小率が1未満でなければ(ステップe11:No)、図12のステップb33にリターンする。
一方、縮小率が1未満の場合には(ステップe11:Yes)、繰り返し数iをインクリメントする(ステップe13)。インクリメント後の繰り返し数iが閾値Vsiより大きければ(ステップe15:Yes)、図12のステップb33にリターンする。そして、繰り返し数iが予め設定される所定の閾値Vsi以下の場合には(ステップe15:No)、縮小率の前回値を基準とし、繰り返し数iのインクリメントの都度縮小処理後の画像サイズが段階的に大きくなるように縮小率を1以下の範囲で再設定し、縮小処理を行って撮影直前フレーム画像および撮影直後フレーム画像を前回よりも大きくリサイズする(ステップe17)。続いて、動き検出部15が、ステップe17で再設定した縮小率に従って、縮小処理後の撮影直前フレーム画像中に代表点を設定し(ステップe19)、代表点と対応する縮小処理後の撮影直後フレーム画像中の探索範囲を対象に撮影前後の動き検出を行う(ステップe21)。そして、信頼性評価部155が、撮影前後検出結果の信頼性の評価を行う(ステップe23)。ここでの評価の結果、信頼性評価部155が撮影前後検出結果を信頼性ありと判定した場合には(ステップe25:Yes)、撮影前後検出結果をもとに撮影時画像移動量を算出し、動き検出部15のRAMに更新記憶する(ステップe27)。そして、ステップe11に戻る。一方、ステップe23での評価の結果、信頼性なしと判定された場合には(ステップe25:No)、図12のステップb33にリターンし、撮影時画像移動量を、現時点で動き検出部15のRAMに記憶されている前回値として確定する。縮小率の値を下げれば、画像サイズに対する探索範囲のサイズが大きくなるので、動き検出の成功確率が向上する。しかしながら一方で、分解能が低下し、動きベクトルの検出精度が低下するという問題があるが、このようにしてステップe13〜ステップe27の処理を繰り返すことによって、縮小率を大きくし過ぎてしまった場合であっても、撮影前後検出結果に信頼性が得られ、且つ動きベクトルの検出精度の低下を最小限に抑えた適切な縮小率を探して撮影前後の動き検出を行うことができるので、動き検出の成功確率の向上と、動きベクトルの検出精度の低下とのバランスを図ることができる。
また、ステップe6での評価の結果、撮影前後検出結果に信頼性がないと判定した場合には(ステップe7:No)、繰り返し数jをインクリメントする(ステップe33)。インクリメント後の繰り返し数jが閾値Vsjより大きければ(ステップe35:Yes)、ステップe49に移行する。そして、繰り返し数jが予め設定される所定の閾値Vsj以下の場合には(ステップe35:No)、縮小率の前回値を基準とし、繰り返し数jのインクリメントの都度縮小処理後の画像サイズが段階的に小さくなるように縮小率を予め設定される最小縮小率以上であって1以下の範囲で再設定し、縮小処理を行って撮影直前フレーム画像および撮影直後フレーム画像を前回よりも小さくリサイズする(ステップe37)。続いて、動き検出部15が、ステップe37で再設定した縮小率に従って、縮小処理後の撮影直前フレーム画像中に代表点を設定し(ステップe39)、代表点と対応する縮小処理後の撮影直後フレーム画像中の探索範囲を対象に撮影前後の動き検出を行う(ステップe41)。そして、信頼性評価部155が、撮影前後検出結果の信頼性の評価を行う(ステップe43)。ここでの評価の結果、信頼性評価部155が撮影前後検出結果を信頼性ありと判定した場合には(ステップe45:Yes)、撮影前後検出結果をもとに撮影時画像移動量を算出し、動き検出部15のRAMに更新記憶する(ステップe47)。その後、図12のステップb33にリターンする。一方、ステップe43での評価の結果、信頼性なしと判定された場合には(ステップe45:No)、ステップe33に戻る。このようにしてステップe33〜ステップe47の処理を繰り返すことで、縮小率の値を段階的に上げていくことができるので、設定した縮小率が低すぎた場合であっても、撮影前後検出結果に信頼性が得られ、且つ動きベクトルの検出精度の低下を最小限に抑えた適切な縮小率を探して撮影前後の動き検出を行うことができ、動き検出の成功確率の向上と、動きベクトルの検出精度の低下とのバランスを図ることができる。
ステップe33〜ステップe47の処理を繰り返し行っても撮影前後検出結果に信頼性が得られない場合には、画像移動量算出部157が、撮影前後動き量推定処理を行って、撮影直前フレーム画像と撮影直後フレーム画像との間の動き量を推定する(ステップe49)。例えば、撮影処理前の所定数フレーム分の直前フレーム間検出結果を動き検出部15のRAMに保持しておくようにする。そして、例えばこの所定数の直前フレーム間検出結果から、撮影時間に従って撮影前後の推定動き量を算出する。なお、撮影処理の後に行った所定数フレーム分の直前フレーム間検出結果から、撮影前後の推定動き量を算出することとしてもよいし、撮影処理の前に検出した直前フレーム間検出結果と撮影処理の後に検出した直前フレーム間検出結果の双方を用いて撮影前後の推定動き量を算出することとしてもよい。そして、画像移動量算出部157は、算出した推定動き量を撮影時画像移動量とし、動き検出部15のRAMに更新記憶する(ステップe51)。その後、図12のステップb33にリターンする。
以上説明したように、本実施の形態によれば、ライブビュー時では、ライブビュー画像間の動きを検出することによってライブビュー時画像移動量を算出することができる。また、撮影処理の開始直前のライブビュー画像および終了直後のライブビュー画像を撮影時間に応じた縮小率で縮小処理し、この縮小処理後の各画像間の動きを検出することによって、撮影時画像移動量を算出することができる。これによれば、ライブビュー画像の表示が一旦停止されてブラックアウトが生じる撮影処理中にカメラ本体2が動かされた場合であっても、撮影時画像移動量を適切に算出することができ、画像移動量を精度良く算出することができるという効果を奏する。したがって、撮影画像間の繋ぎ目を正しく検出することができ、部分画像を合成して違和感のない自然なパノラマ画像を生成することができる。
以上、本発明の好適な実施の形態について説明したが、本発明は、上記したものに限定されず、発明の趣旨を逸脱しない範囲で適宜変更が可能である。
例えば、上記した実施の形態では、撮影時間に応じた縮小率で撮影直前フレーム画像および撮影直後フレーム画像を縮小処理し、縮小処理後の各画像間の動きを検出することによって撮影時画像移動量を算出する場合について説明したが、これに限定されるものではない。図16は、本変形例における動き検出部15aの機能構成を示す模式図であり、図17は、本変形例における撮影前後動き検出処理の詳細な処理手順を示すフローチャートである。なお、以下の説明において、上記した実施の形態と同様の構成については、同一の符号を付する。
図16に示す動き検出部15aは、コントローラ27の撮影時間計測部273によって計測された撮影時間に応じて探索範囲のサイズを設定する探索範囲設定部154と、直前フレーム間検出結果および撮影前後検出結果の信頼性を評価する信頼性評価部155と、直前フレーム間検出結果をもとにライブビュー時画像移動量を算出するとともに、撮影前後検出結果をもとに撮影時画像移動量を算出する画像移動量算出部157とを含む。
そして、本変形例の撮影前後動き検出処理では、図17に示すように、先ず探索範囲設定部154が、撮影時間計測部273によって計測された撮影時間に応じて探索範囲のサイズを設定する(ステップf1)。例えば、撮影時間が長い程探索範囲のサイズが大きくなるように、所定の最大サイズを上限として設定する。続いて、動き検出部15aが、撮影直前フレーム画像中に代表点を設定する(ステップf3)。そして、対応する直後フレーム画像中の探索範囲をステップf1で設定されたサイズとし、各代表点に対応する撮影直後フレーム画像中の探索範囲を対象に撮影前後の動き検出を行う(ステップf5)。続いて信頼性評価部155が、撮影前後検出結果の信頼性の評価を行う(ステップf7)。ここでの評価の結果、信頼性評価部155が撮影前後検出結果を信頼性ありと判定した場合には(ステップf9:Yes)、撮影前後検出結果をもとに撮影時画像移動量を算出し、動き検出部15aのRAMに更新記憶する(ステップf11)。
また、ステップf7での評価の結果、撮影前後検出結果に信頼性がないと判定した場合には(ステップf9:No)、現在の探索範囲のサイズを判定する。最大サイズでなければ(ステップf13:No)、探索範囲設定部154が、前回値よりも大きくなるように最大サイズを上限として探索範囲のサイズを再設定し(ステップf15)、ステップf3に戻る。一方、最大サイズの場合には(ステップf13:Yes)、画像移動量算出部157が撮影前後動き量推定処理を行って、撮影直前フレーム画像と撮影直後フレーム画像との間の動き量を推定する(ステップf17)。そして、画像移動量算出部157は、算出した推定動き量を撮影時画像移動量とし、動き検出部15aのRAMに更新記憶する(ステップf19)。
本変形例によれば、撮影時間に応じてパタンマッチングの際の探索範囲のサイズを設定し、撮影前後の動き検出を行うことができる。これによれば、動きベクトルの検出精度を低下させることなく、動き検出の成功確率を向上させることができる。撮影時間が短い場合には、探索範囲のサイズを小さくするので、処理効率の低下を抑制できる。
また、上記した実施の形態では、撮影前後検出結果に信頼性があると判定された場合に、縮小処理後のサイズが段階的に大きくなるように縮小率を再設定し、撮影前後の動きを繰り返し検出することによって動きベクトルの検出精度の低下を最小限に抑えた適切な縮小率を探すこととしたが、これに限定されるものではない。図18−1および図18−2は、本変形例における縮小率の設定方法を説明する図である。例えば、図18−1に示すように、探索範囲Esの中央寄りの位置で動きベクトルPc11が検出された場合には、縮小率の値を上げて再度撮影前後の動きを検出する。一方、図18−2に示すように、探索範囲Esの端部寄りで動きベクトルPc13が検出された場合には、縮小率の値を上げると探索範囲Es内に動きベクトルが収まらなくなることが予想されるので、縮小率の値を上げて再度撮影前後の動きを検出する処理を行わない。具体的には、動き検出部15は、実行判定部として、前回撮影前後の動き検出を行った際に探索した探索範囲中の動きベクトルの位置をもとに、縮小率を再設定して撮影前後の動き検出を再度行うか否かを判定する。このとき、全ての探索範囲についてその動きベクトルの位置の判定を行い、縮小率を再設定して撮影前後の動き検出を再度行うか否かを判定することとしてもよいし、探索範囲を1つ選択してその探索範囲について動きベクトルの位置の判定を行うことにより、縮小率を再設定して撮影前後の動き検出を再度行うか否かを判定することとしてもよい。
また、上記した実施の形態では、撮影時間に応じて縮小率を設定する場合について説明したが、撮影処理の開始前に検出された直前フレーム間検出結果から撮影前後の移動量を推定し、推定結果に応じて縮小率を設定することとしてもよい。
また、上記した実施の形態では、パンニング操作をしながら撮影を行う2枚目以降の部分画像の撮影処理の後、撮影前後の動き検出を行うこととしたが、1枚目の撮影処理の後においても、2枚目以降の撮影処理の後と同様にして撮影前後の動き検出を行うようにしても構わない。
また、上記した実施の形態では、「右」または「左」のいずれかをパノラマ撮影方向とする場合について説明したが、左右以外の方向をパノラマ撮影方向とすることもできる。例えば、「上」または「下」をパノラマ撮影方向としたパノラマ撮影を行う場合には、図15に示した撮影方向判定処理において、積算移動量の垂直成分の絶対値を予め設定される所定の方向閾値と比較するように構成し、積算移動量の垂直成分の正負を判定して正の値であれば「上」、負の値であれば「下」としてパノラマ撮影方向を確定する。