−第1の実施形態−
図1は、第1の実施形態における撮像装置であるデジタルスチルカメラの構成を示すブロック図である。図1に示すデジタルスチルカメラは、カメラ本体1と交換式レンズ2から構成される。
交換式レンズ2は、レンズ1010と、Flashメモリ1011と、マイクロコンピュータ1012と、ドライバ1013と、絞り1014と、を有している。交換式レンズ2は、I/F999を介して、カメラ本体1と通信可能に接続されている。
カメラ本体1は、メカシャッター101と、撮像素子102と、アナログ処理部103と、アナログ/デジタル変換部104(以下、A/D変換部104)と、バス105と、SDRAM106と、画像処理部107と、AE処理部108と、AF処理部109と、画像圧縮伸長部110と、メモリインターフェース111(以下、メモリI/F111)と、記録媒体112と、LCDドライバ113と、LCD114と、マイクロコンピュータ115と、操作部116と、Flashメモリ117と、振動センサ118と、動きベクトル算出部119と、合成処理部120と、動体追尾部121とを有している。
レンズ1010は、被写体の光学像を撮像素子102に集光させる。レンズ1010は、単焦点レンズであってもよいし、ズームレンズであってもよい。
マイクロコンピュータ1012は、I/F999、Flashメモリ1011、および、ドライバ1013と接続されていて、Flashメモリ1011に記憶されている情報の読み込み・書き込みを行うとともに、ドライバ1013を制御する。マイクロコンピュータ1012は、さらに、I/F999を介して、マイクロコンピュータ115と通信することができ、レンズの焦点距離情報などをマイクロコンピュータ115へ送信し、また、マイクロコンピュータ115から絞り値等の情報を受信する。
ドライバ1013は、マイクロコンピュータ1012の指示を受けて、レンズ1010を駆動させて、焦点距離やフォーカス位置の変更を行うとともに、絞り1014を駆動する。絞り1014は、レンズ1010の近傍に設けられ、被写体の光量を調節する。
メカシャッター101は、マイクロコンピュータ115の指示を受けて駆動し、撮像素子102に被写体を露光する時間を制御する。
撮像素子102は、各画素を構成するフォトダイオードの前面に、ベイヤー配列のカラーフィルタが配置された撮像素子である。ベイヤー配列は、水平方向にR画素とG(Gr)画素が交互に配置されたラインと、G(Gb)画素とB画素が交互に配置されたラインとを有し、さらにその2つのラインを垂直方向にも交互に配置することで構成されている。この撮像素子102は、レンズ1010により集光された光を、画素を構成するフォトダイオードで受光して光電変換することで、光の量を電荷量としてアナログ処理部103へ出力する。なお、撮像素子102は、CMOS方式のものでもCCD方式のものでも良い。
アナログ処理部103は、撮像素子102から読み出された電気信号(アナログ画像信号)に対し、リセットノイズ等を低減した上で波形整形を行い、さらに目的の明るさとなるように、ゲインアップを行う。A/D変換部104は、アナログ処理部103から出力されたアナログ画像信号をデジタル画像信号(以後、画像データという)に変換する。
バス105は、デジタルカメラ内部で発生した各種データをデジタルカメラ内の各部に転送するための転送路である。バス105は、A/D変換部104と、SDRAM106と、画像処理部107と、AE処理部108と、AF処理部109と、画像圧縮伸長部110と、メモリI/F111と、LCDドライバ113と、マイクロコンピュータ115と、振動センサ118と、動きベクトル算出部119と、合成処理部120と、動体追尾部121に接続されている。
A/D変換部104から出力される画像データは、バス105を介して一旦SDRAM106に記憶される。SDRAM106は、A/D変換部104において得られた画像データや、画像処理部107、画像圧縮伸長部110、合成処理部120、動体追尾部121において処理された画像データ等の各種データが一時的に記憶される記憶部である。
画像処理部107は、ホワイトバランス補正部1071(以下、WB補正部1071)、同時化処理部1072、色再現処理部1073、および、ノイズ低減処理部1074(以下、NR処理部1074)を含み、SDRAM106から読み出した画像データに対して様々な画像処理を施す。WB補正部1071は、画像データのホワイトバランスを補正する処理を行う。同時化処理部1072は、ベイヤー配列による画像データから、1画素あたりR、G、Bの情報からなる画像データへ同時化する処理を行う。色再現処理部1073は、画像の色味を変化させる色再現処理を行い、NR処理部1074は、ノイズを低減する処理を行う。ノイズ低減処理後の画像データは、SDRAM106に記憶される。
振動センサ118は、いわゆる手ブレを含むカメラ本体1の動きを検出する。動きベクトル算出部119は、連続的な撮影により得られた複数の画像間の動きベクトルを算出する。動きベクトル算出部119の詳細な構成については、図2を用いて後述する。
合成処理部120は、連続的に撮影された複数の画像を合成する。特に、合成処理部120は、被写体輝度に応じた標準露光時間よりも短い露光時間で撮影された画像データと、標準露光時間よりも長い露光時間で撮影された画像データとを合成することによって、ダイナミックレンジの広い合成画像を生成する。
動体追尾部121は、動体である注目被写体を既知の方法により追尾する。追尾対象である注目被写体の決定方法については後述する。
AE処理部108は、画像データから被写体輝度を算出する。被写体輝度を算出するためのデータは、専用の測光センサの出力であってもよい。AF処理部109は、画像データから高周波成分の信号を取り出し、AF(Auto Focus)積算処理により、合焦評価値を取得する。
画像圧縮伸長部110は、静止画像データの記録時には、SDRAM106から画像データを読み出し、読み出した画像データをJPEG圧縮方式に従って圧縮して、圧縮したJPEG画像データを、SDRAM106に一旦記憶する。マイクロコンピュータ115は、SDRAM106に記憶されたJPEG画像データに対して、JPEGファイルを構成するために必要なJPEGヘッダを付加してJPEGファイルを作成し、作成したJPEGファイルを、メモリI/F111を介して記録媒体112に記録する。
画像圧縮伸長部110は、また、動画データの記録時には、SDRAM106から動画データを読み出し、読み出した動画データを、例えば、H.264方式に従って圧縮して、圧縮した動画データをSDRAM106に一旦記憶する。画像圧縮伸長部110は、さらに、マイクロコンピュータ115からの指令に基づいて、圧縮データを展開(伸長)する処理を行う。
記録媒体112は、例えばカメラ本体1に着脱可能なメモリカードからなる記録媒体であるが、これに限定されるものではない。
LCDドライバ113は、LCD114に画像を表示させる。画像の表示には、撮影直後の画像データを短時間だけ表示するレックビュー表示、記録媒体112に記録されたJPEGファイルの再生表示、および、ライブビュー表示等の動画の表示が含まれる。記録媒体112に記録された圧縮データを再生する場合、画像圧縮伸長部110は、記録媒体112に記録されている圧縮データを読み出して展開(伸長)処理を施した上で、展開したデータを一旦SDRAM106に記憶させる。LCDドライバ113は、伸張されたデータをSDRAM106から読み出し、読み出したデータを映像信号へ変換した後でLCD114へ出力して表示を行う。
後述するように、本実施形態では、画像中に追尾対象の被写体が存在する場合、画像をLCD114に表示する際に、追尾対象の被写体を拡大して重畳表示する。
制御部としての機能を有するマイクロコンピュータ115は、デジタルカメラ本体1の各種シーケンスを統括的に制御する。マイクロコンピュータ115には、操作部116およびFlashメモリ117が接続されている。
操作部116は、電源ボタン、レリーズボタン、各種入力キー等の操作部材である。ユーザによって、操作部116の何れかの操作部材が操作されることにより、マイクロコンピュータ115は、ユーザの操作に応じた各種シーケンスを実行する。電源ボタンは、当該デジタルカメラの電源のオン/オフ指示を行うための操作部材である。電源ボタンが押されると、当該デジタルカメラの電源がオンとなる。再度、電源ボタンが押されると、当該デジタルカメラの電源はオフとなる。レリーズボタンは、ファーストレリーズスイッチとセカンドレリーズスイッチの2段スイッチを有して構成されている。レリーズボタンが半押しされて、ファーストレリーズスイッチがオンされた場合に、マイクロコンピュータ115は、AE処理やAF処理等の撮影準備シーケンスを行う。また、レリーズボタンが全押しされて、セカンドレリーズスイッチがオンされた場合に、マイクロコンピュータ115は、撮影シーケンスを実行して撮影を行う。
Flashメモリ117は、ホワイトバランス補正値やローパスフィルタ係数、デジタルカメラの動作に必要な各種パラメータや、デジタルスチルカメラを特定するための製造番号などを記憶している。また、Flashメモリ117は、マイクロコンピュータ115にて実行する各種プログラムも記憶している。マイクロコンピュータ115は、Flashメモリ117に記憶されているプログラムに従い、またFlashメモリ117から各種シーケンスに必要なパラメータを読み込み、各処理を実行する。
図2は、動きベクトル算出部119の詳細な構成を示すブロック図である。動きベクトル算出部119は、評価フレーム取得部20と、輝度信号抽出部21と、評価フレーム領域設定部22と、比較フレーム取得部23と、輝度信号抽出部24と、比較フレーム領域設定部25と、フレーム間相関処理部26と、信頼度判定部27と、領域別動きベクトル算出部28と、フレーム全体動きベクトル算出部29と、局所動きベクトル算出部30とを備える。
SDRAM106には、連続的に撮影された少なくとも2つの画像データが格納されている。この画像データは、例えば、被写体輝度に応じた標準露光時間よりも短い露光時間で撮影された画像データと、標準露光時間よりも長い露光時間で撮影された画像データである。評価フレーム取得部20は、SDRAM106に格納されている2つの画像データから、動きベクトルを算出する際に基準とする画像データを読み出す。基準とする画像データは、2つの画像データのうち、いずれの画像データでもよい。ここでは、基準とする画像データを評価フレームと呼ぶ。
輝度信号抽出部21は、評価フレーム取得部20で取得された評価フレームの輝度信号を抽出する。
評価フレーム領域設定部22は、評価フレーム取得部20で取得された評価フレームを所定の大きさのブロックに分割し、分割した複数のブロック内において、所定の大きさの領域を、動きベクトル算出領域に設定する。
図3(a)は、評価フレーム領域設定部22によって複数のブロック32に分割された評価フレーム31の一例を示す図である。また、図3(c)は、評価フレーム領域設定部22によって、1つのブロック32内に設定された動きベクトル算出領域35の一例を示す図である。動きベクトル算出領域35は、評価フレーム内の全てのブロック32に対して設定する。
比較フレーム取得部23は、SDRAM106に格納されている複数の画像データから、評価フレームと比較する画像データを読み出す。この画像データは、評価フレームと合成するための画像データである。ここでは、評価フレームと比較する画像データを比較フレームと呼ぶ。
輝度信号抽出部24は、比較フレーム取得部23で取得された比較フレームの輝度信号を抽出する。
比較フレーム領域設定部25は、比較フレーム取得部23で取得された比較フレームを所定の大きさのブロックに分割するとともに、分割したブロックそのものを、動きベクトル算出領域と比較する比較領域に設定する。比較フレームを分割するブロックの大きさは、評価フレームを分割するブロックの大きさと同じとする。
図3(b)は、比較フレーム領域設定部25によって複数のブロック34に分割された比較フレーム33の一例を示す図であり、図3(d)は、比較領域34を示す図である。
フレーム間相関処理部26は、評価フレーム31の各ブロック32ごとに、比較フレーム33との間の相関を求める。ここでは、評価フレーム31のブロック32内に設定した動きベクトル算出領域35を、そのブロック32と対応する位置に存在する、比較フレーム33の比較領域34内で走査しながら相関係数値を演算する。図3(e)は、動きベクトル算出領域35を、比較フレーム33の比較領域34内で走査する様子を示す図である。相関係数値として、例えば、動きベクトル算出領域35内における各画素の画素値と、比較領域34内で動きベクトル算出領域35と比較する領域の各画素の画素値との差分の絶対値和である誤差絶対値和SAD(Sum of Absolute intensity Difference)を求める。SADが小さいほど、相関関係が高く、SADが大きいほど、相関関係が低い。
領域別動きベクトル算出部28は、フレーム間相関処理部26で演算された相関係数値のうち、最も値が小さい領域を、動きベクトル算出領域35の移動先の領域と判断して、その移動量を、動きベクトル算出領域35が含まれるブロック32の動きベクトルとする。図3(f)は、比較領域34内において、動きベクトル算出領域35に対応する領域36から、相関係数値が最も小さい領域37に向かう動きベクトル38の一例を示す図である。
上述した動きベクトルの算出は、評価フレーム領域設定部22で分割した全てのブロックに対して行う。図3(g)は、全てのブロックに対して算出された動きベクトルの一例を示す図である。
信頼度判定部27は、領域別動きベクトル算出部28で算出された各ブロックの動きベクトルの信頼度を判定する。例えば、動きベクトルを求める際に算出した相関係数値が所定のしきい値以上の場合には、その動きベクトルの信頼度は低いと判定し、相関係数値が所定のしきい値未満の場合には、その動きベクトルの信頼度は高いと判定する。なお、信頼度の判定方法は、上述した方法に限定されることはなく、また、信頼度を2段階ではなく、3段階以上で判定してもよい。
フレーム全体動きベクトル算出部29は、領域別動きベクトル算出部28で算出された各ブロックの動きベクトルと、信頼度判定部27で判定された信頼度に基づいて、フレーム全体の動きベクトルを算出する。ここでは、全てのブロック32の動きベクトルのうち、信頼度が低いと判定された動きベクトルを除外した他の動きベクトルの平均ベクトルを、フレーム全体の動きベクトルとする。図3(h)は、フレーム全体の動きベクトル38の一例を示す図である。
なお、信頼度が低いと判定された動きベクトルの重みを低く、信頼度が高いと判定された動きベクトルの重みを高くして、全ての動きベクトルの重み付き加算平均演算を行い、演算によって得られた動きベクトルを、フレーム全体の動きベクトルとしてもよい。
また、全てのブロック32の動きベクトルのうち、信頼度が低いと判定された動きベクトルを除外した他の動きベクトルを用いてヒストグラムを作成し、最も頻度の高い動きベクトルをフレーム全体の動きベクトルとしても構わない。
局所動きベクトル算出部30は、領域別動きベクトル算出部28で算出された各ブロックの動きベクトルに基づいて、例えば、Cubic補間などの方法を用いて、各画素の動きベクトルを算出する。同様に、各画素の相関係数Kについても動きベクトル同様に算出する。本実施形態におけるCubic補間では、処理対象である注目画素の近傍に位置する16個の動きベクトルを用いて、注目画素の動きベクトルを算出する。
図4は、注目画素40の近傍に位置する16個の動きベクトルB0〜B15の一例を示す図である。注目画素40の動きベクトルBoutは、次式(1)の補間演算によって求められる。ただし、式(1)において、Kx0、Kx1、Kx2、Kx3、Ky0、Ky1、Ky2、Ky3は、注目画素40の位置座標に応じて定まる補間係数である。
Bout=Kx0(Ky0×B0+Ky1×B4+Ky2×B8+Ky3×B12)+Kx1(Ky0×B1+Ky1×B5+Ky2×B9+Ky3×B13)+Kx2(Ky0×B2+Ky1×B6+Ky2×B10+Ky3×B14)+Kx3(Ky0×B3+Ky1×B7+Ky2×B11+Ky3×B15) (1)
局所動きベクトル算出部30は、評価フレーム31の全ての画素について、上述した方法により、動きベクトルと相関係数値Kを算出する。ここでは、各画素の動きベクトルを総称して、局所動きベクトルと呼ぶ。局所動きベクトルの算出では、評価フレーム31の全ての画素に対して動きベクトルを算出する必要があるため、フレーム全体の動きベクトルを算出する場合に比べて、処理時間が長くなる。ただし、局所動きベクトルの算出精度は、フレーム全体の動きベクトルの算出精度よりも高い。
図5は、合成処理部120によって、被写体輝度に応じた標準露光時間よりも短い露光時間(以下、短露光時間)で撮影された画像データと、標準露光時間よりも長い露光時間(以下、長露光時間)で撮影された画像データとを合成して、ダイナミックレンジの広い合成画像を生成する処理の流れを示す図である。本実施の形態における撮像装置は、ダイナミックレンジの広い合成画像を生成する処理モードが設定されている状態での動画撮影時や、ライブビュー表示時に、短露光時間での撮影と、長露光時間での撮影とを交互に繰り返し行う。
合成処理部120は、長露光時間で撮影された画像データ51と、画像データ51の次に得られる画像データであって、短露光時間で撮影された画像データ52とを合成することによって、合成画像57を生成する。また、画像データ52の次に得られる画像データであって、長露光時間で撮影された画像データ53と、画像データ53の次に得られる画像データであって、短露光時間で撮影された画像データ54とを合成することによって、合成画像58を生成する。同様に、画像データ54の次に得られる画像データであって、長露光時間で撮影された画像データ55と、画像データ55の次に得られる画像データであって、短露光時間で撮影された画像データ56とを合成することによって、合成画像59を生成する。
動体追尾部121が追尾処理を行う注目被写体の決定方法について説明する。図6は、追尾対象の注目被写体の決定方法を説明するための図である。ここでは、追尾対象の注目被写体を決定する方法を2通り説明する。
図6(a)は、デジタルスチルカメラのLCD114に表示されている画像の中から、ユーザがペン61を用いて注目被写体62をタッチすることによって、追尾対象の注目被写体を決定する方法を説明するための図である。すなわち、LCD114はタッチパネルとなっており、ユーザは、追尾対象の注目被写体をタッチすることによって、追尾対象の注目被写体を決定する。
図6(b)は、追尾対象の注目被写体64がLCD114の中心にくるように画角を調整した後、所定の操作ボタン65を操作することによって、追尾対象の注目被写体を決定する方法を説明するための図である。すなわち、所定の操作ボタン65が操作されたときに、LCD114の中心に位置している被写体が追尾対象の注目被写体となる。
図7は、第1の実施形態における撮像装置によって行われる合成画像生成処理の手順を示すフローチャートである。第1の実施形態における撮像装置は、短露光時間で撮影された画像データと、長露光時間で撮影された画像データとを合成することによって、ダイナミックレンジの広い合成画像を生成する処理を行う。また、動体追尾部121で追尾する注目被写体が存在する場合には、異なる露光時間で撮影された複数の画像データのうち、追尾領域の画像データを合成し、合成により得られた追尾領域の画像データを拡大して、画像領域全体の合成画像データに重畳させて表示する処理を行う。以下では、追尾対象の注目被写体が存在するものとして説明する。
ステップS10では、AF処理およびAE処理を行う。具体的には、まず、AF処理部109において、合焦評価値を算出する。マイクロコンピュータ115は、合焦評価値に基づいて、レンズ1010を駆動させる指令をドライバ1013に出す。ドライバ1013は、この指令に基づいて、レンズ1010を駆動させて、焦点距離やフォーカス位置の変更を行う。AE処理では、AE処理部108において、被写体輝度を算出し、算出した被写体輝度に基づいて、Flashメモリ117に記憶されている露出条件決定テーブルを参照することにより、撮影時のISO感度、絞り、および露光時間を決定する。ただし、ステップS10の処理で用いる露出条件決定テーブルでは、被写体輝度に応じた標準の露光時間よりも短い露光時間が定められている。
ステップS20では、撮影を行う。撮影(動画撮影)に関しては、従来から用いられている手法と同様である。ドライバ1013は、マイクロコンピュータ1012の指示に基づいて、設定された絞り値になるように絞り1014を駆動させる。そして、決定した露光時間に基づいて撮影を行い、決定したISO感度に応じた画像データを得る。ここでは、この画像データを第1の画像データと呼ぶ。
ステップS30では、合成処理部120において、ステップS20の撮影により得られた第1の画像データ(RAWデータ)をSDRAM106から読み込む。
ステップS40では、露光条件を変えて撮影を行うために、AF処理およびAE処理を再び行う。AF処理は、ステップS10の処理と同じであるが、AE処理では、被写体輝度に応じた標準の露光時間よりも長い露光時間が定められた露出条件決定テーブルを用いる。
ステップS50では、撮影(動画撮影)を行う。この撮影により得られた画像データを、第2の画像データと呼ぶ。
ステップS60では、合成処理部120において、ステップS50の撮影により得られた第2の画像データ(RAWデータ)をSDRAM106から読み込む。
ステップS70からステップS90までの処理は、画像領域全体を対象とする処理である。一方、ステップS100からステップS140までの処理は、追尾対象の注目被写体を含む追尾領域を対象とする処理である。ステップS70からステップS90までの処理と、ステップS100からステップS140までの処理は、並列に同時に行ってもよいし、どちらかの処理を優先して行ってもよい。
ステップS70では、動きベクトル算出部119のフレーム全体動きベクトル算出部29において、ステップS30で読み込んだ第1の画像データと、ステップS60で読み込んだ第2の画像データとの間のフレーム全体の動きベクトルを算出する。
ステップS80では、合成処理部120において、第1の画像データと第2の画像データとを合成する。ここでは、ステップS70で算出したフレーム全体動きベクトルに基づいて、第1の画像データと第2の画像データとの間の位置ずれを補正した後、位置ずれ補正後の第1の画像データおよび第2の画像データを、同一の合成比(合成比α=0.5)で合成する単純合成処理を行う。フレーム全体の動きベクトルに基づいて位置ずれを補正してから、画像データを合成する処理の詳細については、図11に示すフローチャートを用いて後述する。
ステップS90では、画像処理部107において、ステップS80で生成された合成画像データに対して、ホワイトバランス補正処理、同時化処理、色再現処理、ノイズ低減処理などの様々な画像処理を施す。
一方、ステップS100では、動体追尾部121において、ステップS30で読み込んだ第1の画像データから、追尾領域の画像データを取得する。ここでは、第1の画像データから取得する追尾領域の画像データを、第1の追尾領域データと呼ぶ。画像データから、追尾領域データを取得する処理の詳細を図8に示すフローチャートを用いて説明する。
図6を用いて説明したように、撮影者は、LCD114に表示される画像上において、追尾処理を希望する被写体を指定することができる。ステップS810では、撮影者によって指定された注目被写体の情報を取得する。ここでは、画像上で撮影者によって指定された位置の画素情報を取得する。
ステップS820では、追尾領域の設定情報を読み込む。撮影者は、画像上の注目被写体を指定した後、追尾領域の大きさを決定することができる。具体的には、画像上の注目被写体の大きさを考慮して、予め用意されている複数の大きさの追尾領域枠の中から、適切な大きさの追尾領域枠を選択する。選択する追尾領域枠は、追尾対象である注目被写体を含む大きさであることが好ましい。ステップS820では、撮影者によって選択された追尾領域枠の設定情報を読み込む。
ステップS830では、撮影者によって指定された注目被写体を中心として、撮影者によって選択された追尾領域枠を設定し、設定した追尾領域内の画像情報を取得する。図9は、撮影者によって指定された注目被写体90を含む追尾領域91を示す図である。この場合、追尾領域91内の画像情報が取得される。
図7に示すフローチャートに戻って説明を続ける。ステップS110では、動体追尾部121において、ステップS60で読み込んだ第2の画像データから、追尾領域の画像データを取得する。ここでは、この画像データを第2の追尾領域データと呼ぶ。画像データから追尾領域データを取得する処理については、図8に示すフローチャートと同様な方法で取得する。
なお、第2の画像データから追尾領域データを取得する際、第1の追尾領域を図3における動きベクトル算出領域35とし、第1の追尾領域を元に所定のサイズ(例えば、±100ピクセル)で設定した領域を図3における比較領域34と考えることで、それらの動きベクトルから第2の追尾領域を割り出し、第2の追尾領域データを取得してもよい。
ステップS120では、動きベクトル算出部119の局所動きベクトル算出部30において、ステップS100で取得した第1の追尾領域データと、ステップS110で取得した第2の追尾領域データとの間の局所動きベクトルを算出する。
ステップS130では、合成処理部120において、第1の追尾領域データと第2の追尾領域データとを合成する。ここでは、ステップS120で算出した局所動きベクトルに基づいて、第1の追尾領域データと第2の追尾領域データとの間の位置ずれを補正した後、位置ずれ補正後の第1の追尾領域データおよび第2の追尾領域データを、それぞれの重みに応じた合成比率で合成する重み付き合成を行う。局所動きベクトルに基づいて位置ずれを補正してから、画像データを合成する処理の詳細については、図12に示すフローチャートを用いて後述する。
ステップS140では、画像処理部107において、ステップS130で生成した合成画像データに対して、ホワイトバランス補正処理、同時化処理、色再現処理、ノイズ低減処理などの様々な画像処理を施す。
ステップS150では、合成処理部120において、ステップS90で画像処理が施された領域全体の合成画像と、ステップS140で画像処理が施された追尾領域の合成画像とを合成する。ここでは、ステップS140で画像処理が施された追尾領域の合成画像が所定の大きさとなるように拡大した後、ステップS90で求めた合成画像の所定の位置で合成する。
図10は、ステップS90で画像処理が施された領域全体の合成画像と、ステップS140で画像処理が施された追尾領域の合成画像とを合成することによって得られた画像100の一例を示す図である。図10では、追尾対象が車101であり、車を含む領域102が追尾領域に設定されている。追尾領域102の画像は、所定の大きさとなるように拡大され、拡大後の画像103が画像100の右下の位置で合成されている。合成位置における拡大画像103の合成比は1とする。
ステップS160では、合成画像データが動画データであるか、または、ライブビュー画像データであるかを判定する。ここで、動画データとは、記録媒体112に記録するための動画データである。動画データであると判定すると、ステップS170に進む。
ステップS170では、画像圧縮伸長部110において、合成画像データを所定の動画圧縮形式に従って圧縮する。ステップS180では、圧縮されたデータに対して、動画ファイルを構成するために必要なヘッダを付加した後、メモリI/F111を介して記録媒体112に記録する。
なお、ステップS160で合成画像データが動画データであると判定した後に、合成画像データに対して、表示用の画像処理を施してからLCD114に表示するようにしてもよい。
ステップS160において、合成画像データがライブビュー画像データであると判定すると、ステップS190に進む。ステップS190では、合成画像データに対して、ライブビュー表示用の画像サイズに変更する処理など、ライブビュー表示用の画像処理を施す。ステップS200では、ライブビュー表示用の画像処理が施された画像データを、LCD114に表示させる。
図11は、図7に示すフローチャートのステップS80の処理、すなわち、フレーム全体の動きベクトルに基づいて位置ずれを補正してから、画像データを合成する処理の詳細を示すフローチャートである。
ステップS1100では、フレーム全体の動きベクトル(x、y)を取得する。例えば、動きベクトル算出部119のフレーム全体動きベクトル算出部29によって算出されたフレーム全体の動きベクトルをSDRAM106に記憶させておき、SDRAM106から、フレーム全体の動きベクトル(x,y)を読み込む。
ステップS1110では、処理対象画素の位置座標を示すパラメータi,jをそれぞれ0に初期化する。パラメータiは、画像データのx軸方向の位置座標を表し、パラメータjは、y軸方向の位置座標を表す。
ステップS1120では、第1の画像データから、画素(i,j)の画素値を読み込む。
ステップS1130では、第2の画像データにおいて、画素(i,j)を動きベクトル(x、y)だけずらした画素(i+x,j+y)が第2の画像データ上に存在するか否かを判定する。画素(i+x,j+y)が第2の画像データ上に存在すると判定すると、ステップS1140に進み、存在しないと判定すると、ステップS1150に進む。
ステップS1140では、第2の画像データから、画素(i+x,j+y)の画素値を読み込む。
一方、ステップS1150では、第2の画像データの画素(i+x,j+y)の画素値を(0,0)に設定する。
ステップS1160では、第2の画像データの画素値が(0,0)の場合には、合成比αを1.0とし、それ以外は合成比αを0.5とした上で、第1の画像データの画素(i,j)と、第2の画像データの画素(i+x,j+y)とを、その合成比αで合成する単純合成処理を行う。
ステップS1170では、パラメータiに1を加算する。
ステップS1180では、パラメータiが第1の画像データのx軸方向の画素数M以上であるか否かを判定する。パラメータiがM未満であると判定するとステップS1120に戻り、M以上であると判定すると、ステップS1190に進む。
ステップS1190では、パラメータiを0に設定するとともに、パラメータjに1を加算する。
ステップS1200では、パラメータjが第1の画像データのy軸方向の画素数N以上であるか否かを判定する。パラメータjがN未満であると判定するとステップS1120に戻り、N以上であると判定すると、フローチャートの処理を終了する。
図12は、図7に示すフローチャートのステップS130の処理、すなわち、局所動きベクトルに基づいて位置ずれを補正してから、画像データを合成する処理の詳細を示すフローチャートである。図11に示すフローチャートの処理と同一の処理を行うステップについては、同一の符号を付して詳しい説明は省略する。
ステップS1110において、処理対象画素の位置座標を示すパラメータi,jをそれぞれ0に初期化すると、ステップS1210に進む。ステップS1210では、画素(i,j)の動きベクトル(x,y)を取得する。ただし、画素(i,j)は、追尾領域データ内の画素である。例えば、動きベクトル算出部119の局所動きベクトル算出部30によって算出された各画素の動きベクトルをSDRAM106に記憶させておき、SDRAM106から、画素(i,j)の動きベクトル(x,y)を読み込む。
ステップS1210に続くステップS1120Aでは、第1の追尾領域データから、画素(i,j)の画素値を読み込む。
ステップS1130Aでは、第2の追尾領域データにおいて、画素(i,j)を動きベクトル(x、y)だけずらした画素(i+x,j+y)が第2の追尾領域データ上に存在するか否かを判定する。画素(i+x,j+y)が第2の追尾領域データ上に存在すると判定すると、ステップS1140Aに進み、存在しないと判定すると、ステップS1150Aに進む。
ステップS1140Aでは、第2の追尾領域データから、画素(i+x,j+y)の画素値を読み込む。
ステップS1150Aでは、第2の追尾領域データの画素(i+x,j+y)の画素値を(0,0)に設定する。
ステップS1160Aでは、第1の追尾領域データの画素(i,j)と、第2の追尾領域データの画素(i+x,j+y)とを合成する。上述したように、図7に示すフローチャートのステップS130では、重み付き合成を行う。重み付き合成の詳細な処理については、図13に示すフローチャートを用いて後述する。
ステップS1170以後の処理は、図11に示すフローチャートの処理と同じである。
重み付き合成の詳細な処理について、図13に示すフローチャートを用いて説明する。図13に示すフローチャートのステップS1310では、処理対象画素(i,j)の相関係数値Kを取得する。
ステップS1320では、ステップS1310で取得した相関係数値Kに基づいて、合成比αを算出する。
図14は、相関係数値Kと合成比αとの関係を示す図である。図14において、THは所定のしきい値であり、K_maxは相関係数値Kとして取り得る最大値である。図14に示すように、相関係数値Kが所定のしきい値TH以下の場合には、合成比αは0.5であり、相関係数値Kが所定のしきい値THよりも大きくなると、合成比αも0.5より大きくなる。ただし、第2の画像データの画素値が(0,0)の場合には、相関係数値Kによらず合成比αを1.0とする。
Flashメモリ117には、相関係数値Kと合成比αとの関係を定めたテーブルが格納されており、このテーブルを参照することによって、合成比αを算出する。
ステップS1330では、次式(2)によって、第1の追尾領域データの画素(i,j)と、第2の追尾領域データの画素(i+x,j+y)とを合成する。ただし、Aは、第1の追尾領域データの画素(i,j)の画素値、Bは第2の追尾領域データの画素(i+x,j+y)の画素値、Cは、合成後の画素の画素値である。
C=α×A+(1−α)×B (2)
図14および式(2)から分かるように、第1の追尾領域データの画素(i,j)と、第2の追尾領域データの画素(i+x,j+y)との間の相関が高く、相関係数値Kが所定のしきい値TH以下の場合には、同一の合成比(合成比α=0.5)で合成する単純合成処理が行われる。一方、相関係数値Kが所定のしきい値THより大きくなると、第1の画像データの画素(i,j)を合成する比重を大きくして、第2の追尾領域データの画素(i+x,j+y)の影響を小さくする。
図15は、二つの画像データの間の位置ずれを補正した後でも、自動車の像の位置ずれが残っている状態で、合成処理を行った場合の合成画像の例を示す図である。図15(a)は、合成比α=0.5で単純合成を行った場合の結果、図15(b)は、0.5より大きい合成比αで重み付き合成を行った場合の結果、図15(c)は、合成比α=1で合成した場合の結果である。図15(a)と図15(b)とを比較して分かるように、0.5より大きい合成比αで重み付き合成を行った場合には、単純合成を行った場合に比べて、像ブレが軽減される。また、合成比αを1にした場合には、合成比αを1とした画像データだけが用いられることになり、像ブレは無くなる。
以上、第1の実施形態における撮像装置によれば、画像データの画像領域全体を対象として、複数の画像間の位置ずれを検出し、検出した位置ずれに基づいて、画像領域全体を対象として複数の画像間の位置ずれを補正して、第1の合成画像を生成する。また、一部の画像領域を対象として、画像領域全体を対象とする位置ずれ検出方法とは異なる位置ずれ検出方法にて、複数の画像間の位置ずれを検出し、検出した位置ずれに基づいて、一部の画像領域を対象として複数の画像間の位置ずれを補正して、第2の合成画像を生成する。そして、第1の合成画像と第2の合成画像とを同一の画面上に表示する。これにより、注目被写体が含まれる一部の画像領域に対する位置ずれ検出を、画像領域全体に対する位置ずれ検出とは異なる方法を用いて行うことができるので、被写体が含まれる領域に適した位置ずれ検出を行うことができる。
特に、第1の実施形態における撮像装置によれば、一部の画像領域を対象とする位置ずれ検出の精度は、画像領域全体を対象とする位置ずれ検出の精度よりも高いので、注目被写体が含まれる一部の画像領域の位置ずれを精度良く行うことができる。また、画像領域全体の位置ずれは、一部の画像領域の位置ずれ検出よりも精度の低い方法を用いて行うので、位置ずれ検出の演算量を減らして、画像表示に要する時間を短縮することができる。
−第2の実施形態−
第1の実施形態における撮像装置において、フレーム全体動きベクトル算出部29は、評価フレームの複数のブロックごとに算出された動きベクトルのうち、信頼度が低いと判定された動きベクトルを除外した他の動きベクトルの平均ベクトルを、フレーム全体の動きベクトルとした。第2の実施形態における撮像装置では、信頼度が低いと判定された動きベクトルを除外した他の動きベクトルのうち、追尾領域を含むブロックの動きベクトルの重みを高くして、フレーム全体の動きベクトルを算出する。ここでは、第2の実施形態におけるフレーム全体動きベクトル算出部の符号を29Aとする。
図16(a)は、評価フレーム中の追尾領域を示す図であり、図16(b)は、追尾領域を含むブロックの動きベクトルの一例を示す図である。ただし、図16(a)、(b)では、画像を複数のブロックに分割した状態を示している。
図16(a)では、動体追尾部121による追尾対象が移動している車であり、車を含む領域130、131が追尾領域となる。なお、図16(a)では、説明のため、第1の時刻における車を含む追尾領域130とともに、第1の時刻より後の時刻における車を含む追尾領域131も1つの画像上に示している。
フレーム全体動きベクトル算出部29Aは、第1の実施形態におけるフレーム全体動きベクトル算出部29と同様に、評価フレームの複数のブロックごとに算出された動きベクトルのうち、信頼度が低いと判定された動きベクトルを除外した他の動きベクトルを用いて、フレーム全体の動きベクトルを算出する。ただし、フレーム全体動きベクトル算出部29Aは、追尾領域を含むブロックの動きベクトルの重みを高くして、信頼度が低いと判定された動きベクトルを除外した他の全ての動きベクトルの重み付き加算平均演算を行い、演算によって得られた動きベクトルを、フレーム全体の動きベクトルとする。
なお、ヒストグラムを用いてベクトルを算出する場合には、追尾領域を含むブロックの動きベクトルにおける頻度を水増ししてカウントすることで、追尾領域の比重を高めたフレーム全体の動きベクトルを算出することができる。図16に示す例では、追尾領域130、131を含む6つのブロック132〜137(図16(b)参照)の動きベクトルの重みが高くなる。
以上、第2の実施形態における撮像装置によれば、画像領域全体を対象とする位置ずれを検出する際に、画像上の複数の位置に応じた複数の位置ずれを検出し、検出した複数の位置ずれのうち、一部の画像領域における位置ずれの比重を、一部の画像領域以外の領域における位置ずれの比重よりも高くして、代表となる1つの位置ずれを検出する。これにより、画像領域全体の位置ずれ補正を行う場合でも、注目被写体を重視した位置ずれ補正を行うことができので、合成画像において、注目被写体の像ブレを低減することができる。
−第3の実施形態−
第1の実施形態における撮像装置では、画像領域全体を対象として、複数の画像間の位置ずれを検出する場合、フレーム全体動きベクトル算出部29によって、フレーム全体の動きベクトルを算出した。第3の実施形態における撮像装置では、画像領域全体を対象として、複数の画像間の位置ずれを検出する場合でも、動体追尾部121の追尾対象である被写体の移動量が所定量Lthより大きい場合には、高精度な位置合わせを行うために、局所動きベクトル算出部30によって、局所動きベクトルを算出する。
図17は、第3の実施形態における撮像装置によって行われる合成画像生成処理の手順を示すフローチャートである。図7に示すフローチャートの処理と同一の処理を行うステップについては、同一の符号を付して詳しい説明は省略する。
ステップS1700からステップS90までの処理は、画像領域全体を対象とする処理である。ステップS1700では、マイクロコンピュータ115において、追尾対象である被写体の移動量を算出する。動体追尾部121は、動体追尾処理を行うため、追尾対象である被写体の動きベクトルを算出する。従って、ステップS1700では、動体追尾部121で算出された動きベクトルに基づいて、被写体の移動量を算出する。
ステップS1710では、マイクロコンピュータ115において、ステップS1700で算出した被写体の移動量が所定量Lthより大きいか否かを判定する。被写体の移動量が所定量Lth以下であると判定すると、ステップS70に進み、フレーム全体動きベクトル算出部29によって、ステップS30で読み込んだ第1の画像データと、ステップS60で読み込んだ第2の画像データとの間のフレーム全体の動きベクトルを算出する。一方、被写体の移動量が所定量Lthより大きいと判定するとステップS1720に進む。
ステップS1720では、動きベクトル算出部119の局所動きベクトル算出部30において、ステップS30で読み込んだ第1の画像データと、ステップS60で読み込んだ第2の画像データとの間の局所動きベクトルを算出する。局所動きベクトルの算出方法は説明済みのため、ここでは詳しい説明を省略する。
ステップS1730では、ステップS1720で算出した局所動きベクトルに基づいて、第1の画像データと第2の画像データとの間の位置ずれを補正した後、位置ずれ補正後の第1の画像データおよび第2の画像データを、それぞれの重みに応じた合成比率で合成する重み付き合成を行う。局所動きベクトルに基づいて位置ずれを補正してから、画像データを合成する処理の詳細については、図12に示すフローチャートを用いて説明済みのため、ここでは詳しい説明を省略する。
以上、第3の実施形態における撮像装置によれば、一部の画像領域内の被写体の移動量が所定量Lthよりも大きい場合に、移動量が所定量Lth以下の場合よりも位置ずれ検出精度の高い方法にて、複数の画像間の位置ずれを検出する。これにより、注目被写体の移動量が大きくて、合成画像上の像ブレが目立ちやすい状況下でも、複数の画像間の位置ずれを精度良く求めて、合成画像上の被写体の像ブレを低減することができる。
−第4の実施形態−
第1の実施形態における撮像装置では、画像領域全体を対象として、複数の画像間の位置ずれを検出する場合、フレーム全体動きベクトル算出部29によって、フレーム全体の動きベクトルを算出した。第4の実施形態における撮像装置では、画像領域全体を対象として、複数の画像間の位置ずれを検出する場合でも、追尾領域の大きさSが所定の大きさSthより大きい場合には、高精度な位置合わせを行うために、局所動きベクトル算出部30によって、局所動きベクトルを算出する。
図18は、第4の実施形態における撮像装置によって行われる合成画像生成処理の手順を示すフローチャートである。図7および図17に示すフローチャートの処理と同一の処理を行うステップについては、同一の符号を付して詳しい説明は省略する。
ステップS1800からステップS90までの処理は、画像領域全体を対象とする処理である。ステップS1800では、マイクロコンピュータ115において、動体追尾部121によって設定される追尾領域の大きさSを取得する。上述したように、撮影者は、画像上で追尾対象である注目被写体を指定するとともに、予め用意されている複数の大きさの追尾領域枠の中から、適切な大きさの追尾領域枠を選択する。ここでは、撮影者によって選択された追尾領域枠の大きさSの情報を取得する。
ステップS1810では、マイクロコンピュータ115において、ステップS1800で算出した追尾領域の大きさSが所定の大きさSthより大きいか否かを判定する。追尾領域の大きさSが所定の大きさSth以下であると判定するとステップS70に進み、フレーム全体動きベクトル算出部29によって、ステップS30で読み込んだ第1の画像データと、ステップS60で読み込んだ第2の画像データとの間のフレーム全体の動きベクトルを算出する。一方、追尾領域の大きさSが所定の大きさSthより大きいと判定すると、ステップS1720に進む。ステップS1720およびステップS1730の処理は、図17に示すフローチャートのステップS1720およびステップS1730の処理と同じである。
以上、第4の実施形態における撮像装置によれば、一部の画像領域の大きさが所定の大きさSthよりも大きい場合に、一部の画像領域の大きさが所定の大きさSth以下の場合よりも位置ずれ検出精度の高い方法にて、複数の画像間の位置ずれを検出する。これにより、注目被写体が大きくて、合成画像上の像ブレが目立ちやすい状況下でも、複数の画像間の位置ずれを精度良く求めて、合成画像上の被写体の像ブレを低減することができる。
なお、上述した第1〜第4の実施形態の説明では、撮像装置が行う処理としてハードウェアによる処理を前提としていたが、このような構成に限定される必要はない。例えば、別途ソフトウェアにて処理する構成も可能である。この場合、撮像装置は、CPU、RAM等の主記憶装置、上記処理の全て或いは一部を実現させるためのプログラムが記憶されたコンピュータ読み取り可能な記憶媒体を備えている。ここでは、このプログラムを撮像プログラムと呼ぶ。そして、CPUが上記記憶媒体に記憶されている撮像プログラムを読み出して、情報の加工・演算処理を実行することにより、上述の撮像装置と同様の処理を実現させる。
ここで、コンピュータ読み取り可能な記録媒体とは、磁気ディスク、光磁気ディスク、CD−ROM、DVD−ROM、半導体メモリ等をいう。また、この撮像プログラムを通信回線によってコンピュータに配信し、この配信を受けたコンピュータが当該撮像プログラムを実行するようにしても良い。
本発明は、上述した第1〜第4の実施形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内で様々な変形や応用が可能である。例えば、第2の実施形態で説明したフレーム全体動きベクトルの算出方法を、第3および第4の実施形態における撮像装置に適用することもできる。
また、第3の実施形態における特徴と、第4の実施形態における特徴とを組み合わせてもよい。すなわち、被写体の移動量が所定量Lthより大きいか、または、追尾領域の大きさSが所定の大きさSthより大きい場合に、画像データ間の動きベクトルとして、局所動きベクトルを求めるようにしてもよい。
また、第3の実施形態における撮像装置では、追尾対象である被写体の移動量が所定量Lthより大きい場合に、画像データ間の動きベクトルとして、局所動きベクトルを求めたが、局所動きベクトルに限定されることはない。すなわち、追尾対象である被写体の移動量が所定量Lth以下の場合よりも精度の高い方法で、動きベクトルを求めることができればよい。
同様に、第4の実施形態における撮像装置でも、追尾領域の大きさが所定の大きさSthより大きい場合に、画像データ間の動きベクトルとして、局所動きベクトルを求めたが、追尾領域の大きさが所定の大きさSth以下の場合よりも精度の高い方法で動きベクトルを求めるのであれば、局所動きベクトルに限定されることはない。
上述した各実施形態では、追尾領域の合成画像データを拡大して、画像領域全体の合成画像データに重畳させて表示する処理を行った(図10参照)。しかし、追尾領域の合成画像データを拡大せずに、画像領域全体の合成画像データと合成するようにしてもよい。合成位置は、追尾領域の位置とし、合成位置における追尾領域画像データの合成比は1とする。また、追尾領域の合成画像データは、例えば、矩形の枠で表示する。図19は、追尾領域の合成画像を拡大せずに、領域全体の合成画像上に重畳させて表示する方法の一例を示す図である。領域全体の合成画像190に対して、追尾対象である車191を含む追尾領域の合成画像192が合成されており、合成画像192は、矩形の枠193で囲まれて表示されている。