(第1の実施形態)
図1は、本発明の第1の実施形態に係わる撮像装置としてのレンズ交換式一眼レフデジタルカメラの回路構成を示すブロック図である。図1において、マイクロコンピュータ402は、撮像素子(本実施形態ではCMOSセンサ)418が出力する画像データの処理や、LCDモニタ装置417の表示制御を初め、カメラ全体の動作を制御する。スイッチSW1(405)は、レリーズボタン114(図2参照)の半押し状態でオンになり、スイッチSW1(405)がオンすると本実施形態のデジタルカメラは撮影準備状態になる。スイッチSW2(406)は、レリーズボタン114が最後まで押された状態(全押し状態)でオンし、スイッチSW2(406)がオンすると撮影動作を開始する。レンズ制御回路407は、撮影レンズ200(図3参照)との通信およびAF(オートフォーカス)時の撮影レンズ200の駆動制御や絞り羽根の駆動制御を行なう。
また、図1において、外部表示制御回路408は、外部表示装置(OLC)409や、ファインダ内の表示装置(不図示)の制御を行なう。スイッチセンス回路410は、カメラに設けられた電子ダイヤル411を含む多数のスイッチ類の信号をマイクロコンピュータ402に伝える。防振機能ON/OFFスイッチ125もここに接続される。ストロボ発光調光制御回路412は、X接点412aに接続されており、外部ストロボの制御を行う。測距回路413は、AFのための被写体に対するデフォーカス量を検出する。測光回路414は、被写体の輝度を測定する。シャッター制御回路415はシャッターの制御を行い、撮像素子に対して適正な露光を行う。LCDモニタ装置417とバックライト照明装置416は、画像表示装置を構成している。記録装置419は例えばカメラ本体に着脱可能なハードディスクドライブや半導体メモリカード等である。
また、マイクロコンピュータ402には、A/Dコンバータ423、画像バッファメモリ424、DSPなどからなる画像処理回路425、撮像素子内の所定画素そのものに欠陥があることを記憶している画素欠陥位置メモリ426が接続されている。また、ゴミ等の異物による画像不良を起こしている撮像素子内の画素位置を記憶しているゴミ位置メモリ427、複数画像間の動きベクトルを検知する動きベクトル検知回路428も接続されている。なお、画素欠陥位置メモリ426およびゴミ位置メモリ427は不揮発性メモリを用いることが好ましい。画素欠陥位置メモリ426とゴミ位置メモリ427は、同一メモリ空間の異なるアドレスを用いて記憶しても良い。また、429は、本実施形態ではマイクロコンピュータ402が実行するプログラム等を記憶するメモリである。
また、動きベクトル検知回路428は、まず、複数画像間のデータに対して、画像を小ブロックに分割して二次元相関を演算し、小ブロック間の動きベクトルを求める。次に、そのようにして求めた画面全体の小ブロックの動きベクトルの最頻値をその画像の動きベクトルとするような手法により、画像間の動きベクトルを検出する。ここで、動きベクトルを求める手段としては、公知の他の手法を用いる構成としても良い。
図2は、本実施形態に係わるデジタルカメラの外観を示す斜視図、図3は図2の垂直断面図である。図2において、カメラ本体100の上部には、ファインダ観察用の接眼窓111、AE(自動露出)ロックボタン112、AFの測距点選択ボタン113、撮影操作をするためのレリーズボタン114が設けられている。また、電子ダイヤル411、撮影モード選択ダイヤル117、および外部表示装置409も設けられている。電子ダイヤル411は、他の操作ボタンと併用してカメラに数値を入力したり、撮影モードを切り換えたりするための多機能信号入力装置である。また、外部表示装置409は、液晶表示装置から構成され、シャッタースピード、絞り、撮影モードなどの撮影条件や、他の情報を表示する。
また、カメラ本体100の背面には、撮影された画像や各種設定画面などを表示するLCDモニタ装置417、LCDモニタ装置417をオン/オフするためのモニタスイッチ121、十字配置スイッチ116、およびメニューボタン124、防振機能ON/OFFスイッチ125が設けられている。十字配置スイッチ116は、上下左右に配された4つのボタンと、中央に配されたSETボタンを有し、ユーザーがLCDモニタ装置417に表示されるメニュー項目などの選択や実行をカメラに指示するために用いられる。メニューボタン124は、LCDモニタ装置417にカメラの各種設定を行うためのメニュー画面を表示させるためのボタンである。例えば、撮影モードを選択、設定する時は、このメニューボタン124を押した後、十字配置スイッチ116の上下左右のボタンを操作して希望のモードを選択し、希望のモードが選択された状態でSETボタンを押すことにより設定が完了する。
本実施形態のLCDモニタ装置417は透過型であるため、LCDモニタ装置の駆動だけでは画像を視認することはできず、必ずその裏面には図3に示すようにバックライト照明装置416が必要である。このようにLCDモニタ装置417とバックライト照明装置416は画像表示装置を構成している。防振機能ON/OFFスイッチ125は、防振機能ON/OFFスイッチがONされると、通常撮影時の露出に対して、シャッタースピードを速くして、所定枚数の連写撮影が行なわれるモードとなる。また、撮影後、撮影した複数毎の画像を合成して手振れを補正した画像を作成する処理が行なわれる。この処理については後述する。
図3に示すように、撮像光学系である撮影レンズ200はカメラ本体100に対してレンズマウント202を介して着脱可能である。図3において201は撮影光軸、203はクイックリターンミラーである。クイックリターンミラー203は撮影光路中に配置され、撮影レンズ200からの被写体をファインダ光学系に導く位置(図3に示す位置、斜接位置と呼ぶ)と撮影光路外に退避する位置(退避位置と呼ぶ)との間で移動可能である。図3において、ピント板204上にはクイックリターンミラー203からファインダ光学系に導かれる被写体光が結象される。205はファインダの視認性を向上させるためのコンデンサレンズ、206はペンタゴナルダハプリズムであり、ピント板204およびコンデンサレンズ205を通った被写体光をファインダ観察用の接眼レンズ208および測光センサ207に導く。
209、210はそれぞれシャッターを構成する後幕と先幕で、これら後幕209、先幕210の開放によって後方に配置されている固体撮像素子である撮像素子418が必要時間だけ露光される。撮像素子418の前方には光学ローパスフィルタ等の光学素子418aが配置されており、この光学素子41にゴミ等の異物が付着すると、その影が撮像画面内に写り込んで、画像信号の品質を劣化させる。撮像素子によって画素毎の電気信号に変換された撮影画像は、A/Dコンバータ423や画像処理回路425などによって処理され、画像データとして記録装置419に記録される。撮像素子418はプリント基板211に保持されている。このプリント基板211の後方には、もう一枚のプリント基板である表示基板215が配置されている。この表示基板215の反対側の面にLCDモニタ装置417およびバックライト照明装置416が配置されている。419は画像データを記録する記録装置、217は電池(携帯用電源)である。この記録装置419および電池217は、カメラ本体に対して着脱可能である。
(ゴミ検出処理)
図4は、デジタルカメラにおけるゴミ検出処理(ゴミによって画像不良が生じている画素位置の検出処理)を説明するフローチャートである。本処理は、マイクロコンピュータ402がメモリ429に記憶されたゴミ検出処理プログラムを実行することにより実施される。
ゴミ検出処理は、ゴミ検出用画像を撮像することにより行われる。ゴミ検出処理を行う場合、面光源装置の出射面や白い壁などの均一な色を持つ面に撮影レンズ200の撮影光軸201を向けてカメラを設置し、ゴミ検出の準備を行なう。または、レンズマウント202にゴミ検出用のライトユニット(レンズの代わりに装着する小型の点光源装置)を装着し、ゴミ検出の準備を行なう。ライトユニットの光源は例えば白色LEDが考えられ、発光面のサイズを予め定めた絞り値相当になるように調整する。準備が終了した後、例えば十字配置スイッチ116からゴミ検出処理の開始が指示されると、マイクロコンピュータ402は、まず絞りの設定を行う。撮像素子近傍のゴミはレンズの絞り値によって結像状態が変わり、レンズの瞳位置によって位置が変化する。したがって、ゴミ補正データにはゴミの位置や大きさに加え、検出時の絞り値とレンズの瞳位置情報が保持される。
ただし、ゴミ補正データを作成する段階で、異なるレンズを用いたとしても常に同じ絞り値を使うことを予め決めておけば、必ずしもゴミ補正データ内に絞り値を保持する必要は無い。また、瞳位置に関してもライトユニットを用いたり、特定のレンズのみ使用を許可することで、同様に必ずしもゴミ補正データ内に瞳位置情報を保持する必要はない。なお、ここで瞳位置とは、射出瞳の撮像面(焦点面)からの距離を言う。
ここでは、ステップS21にて例えばF16が指定される。次にステップS22にてマイクロコンピュータ402はレンズ制御回路407に対し、撮影レンズ200の絞り羽根制御を行わせ、ステップS21で指定された絞り値に絞りを設定する。さらに、ステップS23にてフォーカス位置を無限遠に設定する。次にステップS24にて撮影レンズの絞り値とフォーカス位置が設定されると、ゴミ検出モードでの撮影を実行する。ステップS24で行う撮像処理ルーチンの詳細に関しては図9を用いて後に説明する。撮影された画像データは、画像バッファメモリ424に格納される。
撮影が終了すると、ステップS25にて撮影時の絞り値とレンズ瞳位置を取得する。次にステップS26にて画像処理回路425に画像バッファメモリ424に記憶されている撮影画像の各画素に対応するデータを呼び出す。ステップS27にて画像処理回路425は、図6に示すゴミ領域取得処理を行い、ゴミが存在する画素の位置と大きさを取得する。次にステップS28にてステップS27で取得したゴミが存在する画素の位置と大きさ、およびステップS25で取得した絞り値とレンズ瞳位置情報を、ゴミ位置メモリ427に登録する。ここで、前述したライトユニットを用いた場合には、レンズ情報を取得できない。そこで、レンズ情報が取得できない場合は、ライトユニットを使ったと判断し、予め定められたレンズ瞳位置情報と、ライトユニットの光源径から算出される換算絞り値を登録する。
ここで、ステップS28において、予め画素欠陥位置メモリに記録されている製造時からの不良画像(画素欠陥)の位置と、読み出した画像データの位置を比べて画素欠陥であるかどうかを確認する。そして、画素欠陥によるものではないと判断された領域のみ、ゴミ位置メモリ427に位置を登録しても良い。
ゴミ位置メモリ427に格納されるゴミ補正データのデータ形式例を図5に示す。図5に示した通り、ゴミ補正データには、検出用画像撮影時の、レンズ情報とゴミの位置、大きさの情報が格納される。このゴミ補正データは、通常撮影時に画像データの撮影情報と共に画像に付加し、後に説明するゴミ除去処理で利用する。また、防振機能ON時の手振れ補正をした合成画像撮影時には、合成用のゴミ補正データ生成のために利用する。
ゴミ補正データは、具体的には、検出用画像撮影時のレンズ情報として、検出用画像撮影時における実際の絞り値(F値)と、そのときのレンズ瞳位置を格納する。続いて記憶領域に検出したゴミ領域の数(整数値)を格納し、これに続き、個々の具体的なゴミ領域のパラメータを、ゴミ領域の数だけ繰り返して格納する。ゴミ領域のパラメータは、ゴミの半径(例えば2バイト)、有効画素領域における中心のx座標(例えば2バイト)、同じく中心のy座標(例えば2バイト)である。ゴミ位置メモリ427の大きさ等によりゴミ補正データサイズに制限がある場合、ステップS27で得たゴミ領域の先頭から優先してデータを格納する。
(ゴミ領域取得ルーチン)
次に、図6から図8を用いて、ステップS27で行うゴミ領域取得ルーチンについて説明する。図7に示すように、呼び出した画像データをメモリ上に展開し、予め定められたブロック単位で処理を行う。これは、レンズやセンサ特性に起因する周辺減光に対応するためである。周辺減光とは、レンズの中央部に比べ周辺部の輝度が落ちてしまう現象であり、レンズの絞りを小さくすることである程度軽減されることが知られている。しかし、絞りを絞った状態でも、撮影画像に対して予め定められたしきい値でゴミ位置の判定を行うと、レンズによっては周辺部のゴミが正確に検出できなくなるという問題がある。そこで、画像をブロック分割して周辺減光の影響を軽減する。単純にブロック分割すると、ブロックとブロックの間でスレッショルド値が異なる場合、ブロック間をまたぐゴミの検出がずれてしまうという問題がある。そこで、ブロック間をオーバーラップさせ、オーバーラップ領域を構成するブロックのいずれかでゴミと判定された画素をゴミ領域として扱う。
ブロック内のゴミ領域判定は、図6に示す処理の流れで行う。まず、ブロック内の最大輝度Lmax、平均輝度Laveを算出し、次式を用いてブロック内のスレッショルド値T1を算出する。
T1=(Lave×0.6)+(Lmax×0.4)
次に、ステップS61にてしきい値T1を超えない画素をゴミ画素とし、ステップS62にてゴミ画素によって構成される孤立領域を各々一つのゴミ領域di(i=0,1,…,n)とする。図8に示すように、ゴミ領域毎に、ゴミ領域を構成する画素の水平方向の座標の最大値Xmaxおよび最小値Xmin、垂直方向の座標の最大値Ymaxおよび最小値Yminを求め、ゴミ領域diのサイズを表す半径riを次式によって算出する(ステップS63)。
ri=√[{(Xmax−Xmin)/2}2+{(Ymax−Ymin)/2}2]
Xmax、Xmin、Ymax、Yminとriの関係を、図8に示す。その後ステップS64で、ゴミ領域毎の平均輝度値を算出する。
ゴミ位置メモリ(427)のサイズによる制限などにより、ゴミ補正データのデータサイズが制限されている場合がある。このような場合に対応するために、ステップS65にてゴミ位置情報を大きさやゴミ領域の平均輝度値によってソートする。例えば、riの大きい順にソートする。riが等しい場合、平均輝度値の低い順にソートする。このようにすることで、目立つゴミを優先してゴミ補正データに登録することが出来る。なお、ソート済みのゴミ領域の中心座標をDi(x,y)、ゴミ領域Di(x,y)の半径をRiとする。
(撮像処理ルーチン)
次に、図9に示すフローチャートを用いて、図4のステップS24で行われる撮像処理ルーチンの詳細について説明する。本処理はマイクロコンピュータ402がメモリ429に記憶された撮像処理プログラムを実行することにより実施される。
この撮像処理ルーチンが実行されると、ステップS201でマイクロコンピュータ402は、図3に示すクイックリターンミラー203を作動させ、いわゆるミラーアップを行い、撮影光路外にクイックリターンミラー203を退避させる。次に、ステップS202で撮像素子での電荷蓄積を開始し、次のステップS203では図3に示したシャッターの先幕210、後幕209をそれぞれ走行させて露光を行う。そして、ステップS204で撮像素子の電荷蓄積を終了し、次のステップS205で撮像素子から画像信号を読み出してA/Dコンバータ423および画像処理回路425で処理した画像データを画像バッファメモリ424に一次記憶する。
次のステップS206で撮像素子から全ての画像信号の読み出しが終了すると、ステップS207でクイックリターンミラー203をミラーダウンし、クイックリターンミラーを斜設位置に戻して一連の撮像動作を終了する。ステップS208にて、通常撮影かゴミ検出用画像撮影かを判断し、通常撮影時にはステップS209へ進んで撮影時のカメラ設定値等と共に図5に示したゴミ補正データを画像に関連付けて記憶装置419に記録する。具体的には、撮影時のカメラ設定値等が記録される画像ファイルのヘッダ領域であるExif領域にゴミ補正データを追記することで、関連付けを実現することが出来る。
次に、本発明の主要部分である、防振機能ON時の異物情報処理の詳細に関して説明する。
(手振れ補正動作)
図10に示すフローチャートを用いて、防振機能ON時の撮影動作の詳細について説明する。本処理はマイクロコンピュータ402がメモリ429に記憶された防振機能動作プログラムを実行することにより実施される。防振機能ON/OFFスイッチ125がONに設定されている状態で、ステップS301にてスイッチSW1(405)が押されると、防振撮影動作を開始する。次に、ステップS302にて防振撮影用の測光が行なわれる。防振撮影時は、連続して複数枚の露出不足の画像の撮影が行なわれ、後述するように、画像処理装置にて像の位置ズレを補正しながら加算合成を行って目標とする露出の画像を得る。このときのシャッター速度は手振れが発生しにくい速度にする必要がある。このようなシャッター速度は次のようにして求めることができる。
従来より、35mmフィルムを使用するカメラでは撮影レンズの焦点距離をfmmとすると、1/f(sec)のシャッター速度であれば手振れが画像の劣化に影響しにくいと言われている。撮像素子418が35mmフィルムに対して小さい場合は、35mmフィルム換算の焦点距離f’を求め、この逆数(1/f’(sec))をシャッター速度とすれば手振れしにくいシャッター速度とすることができる。
次のステップで、ステップS302にて求めた測光値および、前述のシャッター速度(1/f’)から加算合成後に適正露出とするための撮影枚数Nを決定する。例えば、1枚あたりの露光量が適正露光量の1/2であれば、撮影枚数は2枚として2枚の画像を加算することで適正光量となる画像が求められる。次にステップS304にて測距動作が行なわれる。次に、ステップS305にてSW1(405)がONされている場合は、ステップS306に進む。ステップS305にてSW1(405)がOFFしている場合はステップS301に戻る。
ステップ306にてSW2(406)がONされているか否かの判定が行なわれる。SW2(406)がOFFしているときは、ステップS305に戻る。SW2(406)がONしている場合は、ステップS307に進み、露光動作に移行する。ステップS308にて、撮影枚数カウンタのカウント値nを0にセットする。次に、撮影枚数カウンタのカウント値nを1加算し、ステップS309に進む。ステップS309でマイクロコンピュータ402は、図3に示すクイックリターンミラー203を作動させ、いわゆるミラーアップを行い、撮影光路外にクイックリターンミラー203を退避させる。次に、ステップS310で撮像素子での電荷蓄積を開始し、次のステップS311では図3に示したシャッターの先幕210、後幕209をそれぞれ走行させて露光を行う。そして、ステップS312で撮像素子の電荷蓄積を終了し、次のステップS313で撮像素子から画像信号を読み出してA/Dコンバータ423および画像処理回路425で処理した画像データを画像バッファメモリ424に一次記憶する。
次のステップS314で撮像素子から全ての画像信号の読み出しが終了すると、ステップS315でクイックリターンミラー203をミラーダウンし、クイックリターンミラーを斜設位置に戻す。次のステップS316で、防振用撮影枚数N枚の撮影が終了したかの判定が行なわれる。N枚の撮影が終了した場合は、ステップS317に進み、防振画像の合成、ゴミ補正データの再生成が行なわれる。防振用撮影枚数N枚の撮影が終了していない場合はステップS308に戻り、撮影枚数カウントを1加算し、露光動作を繰り返す。
次に、ステップS317で実施される防振画像合成・ゴミ補正データの再生成について図11のフローチャート及び図12を用いて説明する。防振画像合成・ゴミ補正データ再生成の動作がスタートするとステップS401にて、加算合成する画像の異物情報を情報抽出して、加算合成画像用のゴミ補正データD’’の初期データが生成される。具体的には、防振用画像の最初のコマに対するゴミ補正データの生成が行なわれる。すなわち、図12の(a)に示す通り、防振画像合成時は、通常撮影時に使用される画像領域P×Qに対して小さいH×Vの領域を手振れ量分位置合わせして切り出しが行なわれる。したがって、通常撮影時用のゴミ補正データの中心座標(x,y)から防振画像の切り出しデータ用の座標変換を実施し、ゴミ補正データを生成する必要がある。ここで、防振用画像の最初のコマの切り出しの始点座標を(S,T)とすると、防振用画像のゴミ補正データの中心座標は(x−S,y−T)に変換される。この変換式を用いて、通常撮影用のゴミ補正データDiの中心座標(xi,yi)が変換され、防振画像用の初期ゴミ補正データD’’iの中心座標(xi−S,yi−T)が生成される。また、ゴミの半径情報に関しては、通常撮影用と、防振画像用と同一であるのでゴミ補正データD’’iの半径はriのままである。
次にステップS402に進み、カウンタのカウント値nを1にセットする。次に、スッテプS403にてカウンタのカウント値を1増加し、ステップS404に進む。ステップS404では、動きベクトル検知回路428により防振用画像の1コマ目とn+1コマ目の画像間の動きベクトルを演算する。動きベクトルの検知方法としては様々な手法が公知であり、そのうちどのような手法を用いることも可能である。一例としては、画像を小ブロックに分割し、各小ブロックごとに、動きベクトルを求めるためのもう1枚の画像との二次元相関値を求める。相関値としては、小ブロックを画素単位でずらしながら、対応する各画素間の差の絶対値の和を次々に求めていき、その和が最小となるずらし量をその小ブロックの動きベクトルとする。すべての小ブロックにおいて、動きベクトルを求め、最も頻度が多い動きベクトルを、この画像間の動きベクトルとして選択する。
次に、ステップS405に進み、ステップS404にて求められた動きベクトルをもとに、画像の位置合わせのための座標変換を行なう。すなわち、動きベクトル量が(h_n,v_n)とすると、通常撮影時の画像の座標に対して、(S+h_n,T+v_n)を始点としてH×Vの画像の切り出しが行なわれる。次に、ステップS406にてn+1コマ目の画像のゴミ補正データドレスの変換が行なわれる。ここで、n+1コマ目の画像と1コマ目の画像の動きベクトルが(h_n,v_n)とすると、n+1コマ目の画像において、通常撮影用におけるゴミ補正データDiの中心座標(xi,yi)は、図12(b)に示すように、n+1コマ目のゴミ補正データD’i_nとして、中心座標(xi−S−h_n,yi−T−v_n)として生成される。また、ゴミの半径情報に関しては、通常撮影用と、防振画像用と同一であるのでゴミ補正データD’i_nの半径はriのままである。
次に、ステップS407にて、加算合成した画像に対するゴミ補正データの更新が行なわれる。すなわち、ステップS406でアドレス変換されたn+1コマ目用のゴミ補正データD’_nと、加算合成用画像のゴミ補正データD’’の比較が行なわれ、D’’が更新される。具体的には、ゴミ補正データD’_nのi番目のゴミ補正データとゴミ補正データD’’のすべてのゴミ補正データに対して重なりが無いか否かの判定を行なう。すなわち、中心間の距離がゴミの半径の和以上であるか否かの判定を行なう。中心間の距離がゴミの半径の和以上である場合は、図12(c)に示す通り、D’’に含まれるゴミに対して、D’i_nのゴミは重なりがないと言うことなので、ゴミ補正データD’’に対して、D’i_nのゴミのアドレス情報と、半径情報を追加する。また、D’i_nのゴミと、D’’のk番目のゴミの中心間の距離がゴミの半径の和以下である判定された場合は図12(d)に示す通りゴミが重なっているので、ゴミD’i_n(x’i,y’i)の中心と、D’’のk番目のゴミのD’’k(x’’k,y’’k)の中心を結んだ中間位置((x’i+x’’k)÷2,(y’i+y’’k)÷2)を新たな中心座標とする。ここで、((x’i+x’’k)÷2,(y’i+y’’k)÷2)が整数とならない場合は、最も近い整数を中心座標に設定する。また、追加される新たなゴミの半径r’’は、次式で求められる。
r’’=(√[{x’i−x’’k}2+{y’i−y’’k}2]+r’i+r’’k)÷2
このように、加算合成した画像に対するゴミ補正データD’’とn+1コマ目のゴミ補正データD’_nの比較が行なわれ、D’’が更新される。
次にステップS408にてステップS405にて座標変換された画像の加算が行なわれ、画像バッファメモリ424上に格納される。次にステップS409に進み、カウンタnの値が、防振用画像の合成枚数Nに達したか否かの判定が行なわれ、nに達している場合は、図10のステップS318進む。nに達していない場合は、ステップS403に戻り、カウンタnの値を1加算して、カウンタ値がNに達するまでステップS403〜S409を繰り返す。
図10のステップS318に進み、加算合成した画像をファイルに出力する。この際、画像ファイルのヘッダ領域であるExif領域に図11のステップS407で生成したゴミ補正データD’’を合わせて記録する。
以上により、防振モード撮影時の画像データに関して、ゴミ補正データを通常撮影時のデータと同様に単一のデータとして関連付けることが可能となる。これにより、次に説明するゴミ除去処理において、通常撮影画像であるのか、防振モード撮影時の画像データであるのかを区別することなく同様の処理にてゴミ除去処理を行なうことが可能となる。
(ゴミ除去処理)
次に、ゴミ除去処理(異物除去処理)の流れについて説明する。ゴミ除去処理は、デジタルカメラ本体ではなく、別途用意した画像処理装置上で行う。図13は、画像処理装置のシステム構成の概略を示した図である。CPU1001は、システム全体の動作をコントロールし、一次記憶部1002に格納されたプログラムの実行などを行う。一次記憶部1002は、主にメモリであり、二次記憶部1003に記憶されたプログラムなどを読み込んで格納する。二次記憶部1003は、例えばハードディスクなどがこれに該当する。一般に一次記憶部の容量は二次記憶部の容量より小さく、一次記憶部に格納しきれないプログラムやデータなどは二次記憶部に格納される。
入力デバイス1004とは例えば、システムのコントロールに用いるマウスやキーボードの他、画像データの入力に必要なカードリーダー、スキャナ、フィルムスキャナなどがこれに該当する。出力デバイス1005とは例えば、モニタやプリンタなどが考えられる。画像処理装置には、複数のプログラムを並列実行可能なオペレーティングシステムが搭載され、操作者はGUI(Graphical User Interface)を使ってこの装置上で動作するプログラムの操作が可能である。
図14は、画像処理装置における画像編集プログラムのGUIを示す図である。ウィンドウにはクローズボタン1100とタイトルバー1101が備えられ、クローズボタンを押すことでプログラムを終了する。ファイルを画像表示領域1102にドラッグアンドドロップすることで補正対象画像を指定し、補正対象画像が決定された場合、タイトルバー1101にファイル名を表示した後、画像表示領域1102に対象画像をFit表示する。実行ボタン1103を押すと、後述するゴミ除去処理を実行し、処理後の画像を画像表示領域1102に表示する。ステップ実行ボタン1104を押すと後述するゴミ除去処理のステップ実行を行い、全てのゴミ領域に対して処理が終了した時点で処理後の画像を画像表示領域1102に表示する。保存ボタン1105を押すと、処理後の画像を保存する。
画像処理装置におけるゴミ処理除去の流れを、図15に示す。まず、デジタルカメラ内又はデジタルカメラから取り外された記録装置419からゴミ補正データが添付された画像データを画像処理装置に取り込んで、一次記憶部1002又は二次記憶部1003に記憶する(ステップS90)。次に、画像データ(ゴミ除去処理を行う対象となる画像)から、ステップS208で撮影画像に付与されたゴミ補正データを抽出する(ステップS91)。次に、ステップS91で抽出したゴミ補正データから座標列Di(i=1,2,…n)、半径列Ri(i=1,2,…,n)、絞り値f1とレンズ瞳位置L1を得る(ステップS92)。ステップS93で、画像の撮影時の絞り値f2とレンズ瞳位置L2を取得し、ステップS94でDiを次式で変換する。
Dmi(x,y)=(L2×(L1−H)×d/((L2−H)×L1))×Di(x,y)
Rmi=(Ri×f1/f2)
ここでの単位はピクセルである。
ステップS95で座標Dmi、半径Rmiで示される領域内のゴミを検出し、補間処理を適用する。ゴミ領域補間処理は、公知の欠損領域補間法で行う。公知の欠損領域補間法には例えば、特開2001−223894号公報に開示されているパターン置換がある。特開2001−223894号公報では赤外光を用いて欠損領域を特定しているが、本実施形態ではゴミ領域を欠損領域として扱い、パターン置換によりゴミ領域を周囲の正常画素で補間する。パターン置換で埋められない画素については、パターン補間後の画像データに対し、補間対象画素に最も近い順に正常画素をp個選択し、その平均色を用いて補間する。ステップS96で全ての座標についてゴミ除去処理を適用したかどうかを判定し、全ての座標について処理が終わっていれば処理を終了し、そうでなければステップS95に戻る。
このように画像に添付されているゴミ補正データによりゴミ除去が可能である。ここで、本実施形態で示したゴミ補正データの合成処理により防振撮影モード撮影時に得られた画像データにおいても、通常撮影時の画像データと同様の形式でゴミ補正データが添付されているので、防振撮影モード撮影画像に対しても前述のゴミ除去方法によりゴミ除去が可能となる。
なお、第1の実施形態では、デジタルカメラ本体にて画像合成及び、異物情報合成処理を実行したが、デジタルカメラでは、防振合成用の画像撮影のみを実施し、防振用の画像の合成及び、ゴミ補正データの合成は別途用意された画像処理装置を用いて実行する構成としても良い。
(第2の実施形態)
第1の実施形態においては、各コマの位置合わせ情報に応じて各コマのゴミ補正データを再生成し、ゴミ補正データを合成することで防振用合成画像のゴミ補正データの生成を行なった。これに対し、第2の実施形態では、ゴミ補正データの合成時にゴミ補正データの重なりの有無を判定し、その判定結果により重なりが無い箇所については、別のコマの画像データによりゴミ領域のデータを置き換えて、加算合成を行なう。これにより、ゴミ除去処理による補正痕を減らすことが可能となる。第2の実施形態に係る撮像装置としてのレンズ交換式一眼レフデジタルカメラの回路構成は図1で説明した第1の実施形態の構成と同様であるので説明を省略する。第1の実施形態と、第2の実施形態の違いは、防振画像合成・ゴミ補正データの再生成のフローのみである。
図16のフローおよび、図17を用いて第2の実施形態における防振画像合成・ゴミ補正データの再生成について説明する。防振画像合成・ゴミ補正データ再生成の動作がスタートするとステップS501にて、加算合成画像用のゴミ補正データD’’の初期データが生成される。具体的には、防振用画像の最初のコマに対するゴミ補正データの生成が行なわれる。すなわち、図12に示したように、防振画像合成時は、通常撮影時に使用される画像領域P×Qに対して小さいH×Vの領域を手振れ量分位置合わせして切り出しが行なわれる。したがって、通常撮影時用のゴミ補正データの中心座標(x,y)から防振画像の切り出しデータ用の座標変換を実施し、ゴミ補正データを生成する必要がある。ここで、防振画像の最初のコマの切り出しの始点座標を(S,T)とすると、防振用画像のゴミ補正データの中心座標は(x−S,y−T)に変換される。この変換式を用いて、通常撮影用のゴミ補正データDiの中心座標(xi,yi)が変換され、防振画像用の初期ゴミ補正データD’i_1の中心座標(xi−S,yi−T)が生成される。また、ゴミの半径情報に関しては、通常撮影用と、防振画像用と同一であるのでゴミ補正データD’i_1の半径はriのままである。
次にステップS502に進み、カウンタのカウント値nを1にセットする。次に、スッテプS503にてカウンタのカウント値を1増加し、ステップS504に進む。ステップS504では、動きベクトル検知回路428により防振用画像の1コマ目とn+1コマ目の画像間の動きベクトルを演算する。動きベクトルの検知方法としては様々な手法が公知であり、そのうちどのような手法を用いることも可能である。一例としては、画像を小ブロックに分割し、各小ブロックごとに、動きベクトルを求めるためのもう1枚の画像との二次元相関値を求める。相関値としては、小ブロックを画素単位でずらしながら、対応する各画素間の差の絶対値の和を次々に求めていき、その和が最小となるずらし量をその小ブロックの動きベクトルとする。すべての小ブロックにおいて、動きベクトルを求め、最も頻度が多い動きベクトルを、この画像間の動きベクトルとして選択する。
次に、ステップS505に進み、ステップS504にて求められた動きベクトルをもとに、画像の位置合わせのための座標変換を行なう。すなわち、動きベクトル量が(h_n,v_n)とすると、通常撮影時の画像の座標に対して、(S+h_n,T+v_n)を始点としてH×Vの画像の切り出しが行なわれる。次に、ステップS506にてn+1コマ目の画像のゴミ補正データアドレス変換が行なわれる。ここで、n+1コマ目の画像と1コマ目の画像の動きベクトルが(h_n,v_n)とすると、n+1コマ目の画像において、通常撮影用におけるゴミ補正データDiの中心座標(xi,yi)は、図12(b)に示すように、n+1コマ目のゴミ補正データD’i_nとして、中心座標(xi−S−h_n,yi−T−v_n)として生成される。また、ゴミの半径情報に関しては、通常撮影用と、防振画像用と同一であるのでゴミ補正データD’i_nの半径はriのままである。
次に、ステップS507にて、ステップS506でアドレス変換されたn+1コマ目用のゴミ補正データD’_nと、加算合成画像のゴミ補正データD’’の比較が行なわれ、D’_nとD’’で重なりが無いゴミ補正データの箇所に関しては、ゴミが無い方の画像データでゴミ領域のデータを置き換える。すなわち、図17(a)で示すように、加算合成用の画像のゴミD’’kとn+1コマ目のゴミD’i_nの重なりが無い場合は、加算合成用のゴミD’’kの領域のデータをn+1コマ目のデータで置き換える。また、n+1コマ目のゴミD’i_nの領域のデータを加算合成画像のデータで置き換える。この際、画像データを置き換えた加算合成用の画像のゴミD’’kとn+1コマ目のゴミ補正データD’i_nはゴミ領域ではなくなるので、ゴミ補正データから削除する。
次に、図17(b)で示すように、D’i_nのゴミとD’’のk番目のゴミの中心間の距離がゴミの半径の和以下である場合、すなわち、ゴミが重なっていると判定された場合の処理について説明する。
ゴミが重なっていると判定された場合、図17(b)の黒塗りで示した領域、すなわち、重なっている部分を含む円の中心座標(x’’,y’’)、半径r’’を求め、新たなゴミ補正データとして設定し、D’’を更新する。ゴミD’i_n(x’i,y’i)の中心座標(x’i,y’i)、半径r’iと、D’’のk番目のゴミのD’’k(x’’k,y’’k)の中心座標(x’’k,y’’k)、半径r’’kを用いると中心座標(x’’,y’’)、半径r’’は次式により求まる。
(x’’,y’’)=([{x’’k−x’i}×d1÷d+x’i], [{y’’k−y’i}×d1÷d+y’i])
r’’=√[r’ ’k2−d12]
ここで、d1,dは次式で示される。
d=√[{x’i−x’’k}2 +{y’i−y’’k}2]
d1=[d2+r’i2−r’ ’k2]÷(2d)
また、n+1フレーム目の画像のゴミD’i_n(x’i,y’i)領域の内、新たに設定したゴミD’’に含まれない領域は、加算画像ではゴミ領域ではないので、加算画像のデータにより補間をする。また、加算画像のD’’k(x’’k,y’’k)の領域の内、新たに設定したゴミD’’に含まれない領域はn+1フレーム目の画像ではゴミ領域ではないので、n+1コマ目のデータにより補間をする。
次にステップS508にて、ステップS505にて座標変換され、且つ、ステップS507にてゴミ補正データが重複しない領域箇所はフレーム間で補間が実行された画像の加算が行なわれ、新たな加算画像が画像バッファメモリ424上に格納される。
次にステップS509に進み、カウンタnの値が防振用画像の合成枚数Nに達したか否かの判定が行なわれ、nに達していない場合は、ステップS503に進みカウンタnの値を1加算して、カウンタ値がNに達するまでステップS503〜S509を繰り返す。nに達している場合は、加算合成した画像をファイルに出力する。この際、画像ファイルのヘッダ領域であるExif領域に図16のステップS507で生成したゴミ補正データD’’を合わせて記録する。
以上により、防振モード撮影時の画像データに関して、ゴミ補正データを通常撮影時のデータと同様に単一のデータとして関連付けることが可能となる。また、ゴミ補正データの重複していない箇所はフレーム間補間によりゴミ補正データを削除することが可能となる。
これにより、ゴミ除去処理において、通常撮影画像であるのか、防振モード撮影時の画像データであるのかを区別することなく同様の処理にてゴミ除去処理を行なうことが可能となり、補正対象箇所も減少させることが可能となる。