(57)【特許請求の範囲】
【請求項１】
画像処理装置であって、
撮影画像を撮影するために行ったシャッターの開閉のパターンを規定する露光条件を入力する露光条件入力手段と、
前記撮影画像を撮影する際のぶれ情報を入力するぶれ情報入力手段と、
前記露光条件と、前記ぶれ情報から得られる非整数を含む重み値と、に基づいて、前記撮影画像のぶれを補正するためのフィルタを生成するフィルタ生成手段と
を備えることを特徴とする画像処理装置。
【請求項２】
前記ぶれ情報は、前記撮影画像を撮影する撮像デバイスの画素の単位よりも細かい単位で規定されることを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記フィルタは、ぶれのない画像を前記撮影画像へ劣化させるフィルタであることを特徴とする請求項１又は２に記載の画像処理装置。
【請求項４】
前記フィルタ生成手段は、前記露光条件と、補間カーネルと前記ぶれ情報から得られる非整数を含む重み値とに基づいて、前記撮影画像のぶれを補正するためのフィルタを生成することを特徴とする請求項１乃至３の何れか１項に記載の画像処理装置。
【請求項５】
前記ぶれ情報は、手ぶれのベクトル情報、該手ぶれのベクトル情報を光学防振に基づいて補正したぶれベクトル情報、の何れかであることを特徴とする請求項１乃至４の何れか１項に記載の画像処理装置。
【請求項６】
前記撮影画像は極座標変換が成された画像であり、
前記フィルタと前記撮影画像とのデコンボリューションの処理で得られた画像に対して直交座標変換を行う手段を更に備えることを特徴とする請求項１乃至５の何れか１項に記載の画像処理装置。
【請求項７】
画像処理装置であって、
連続撮影された複数枚の画像を入力する画像入力手段と、
前記複数枚の画像から合成対象として用いる画像群を選択する際の選択パターンを規定する露光条件を入力する露光条件入力手段と、
前記合成対象として用いる画像群を合成した合成画像におけるぶれ情報を入力するぶれ情報入力手段と、
前記露光条件と、前記ぶれ情報から得られる非整数を含む重み値と、に基づいて、前記合成画像のぶれを補正するためのフィルタを生成するフィルタ生成手段と
を備えることを特徴とする画像処理装置。
【請求項８】
画像処理装置が行う画像処理方法であって、
前記画像処理装置の露光条件入力手段が、撮影画像を撮影するために行ったシャッターの開閉のパターンを規定する露光条件を入力する露光条件入力工程と、
前記画像処理装置のぶれ情報入力手段が、前記撮影画像を撮影する際のぶれ情報を入力するぶれ情報入力工程と、
前記画像処理装置のフィルタ生成手段が、前記露光条件と、前記ぶれ情報から得られる非整数を含む重み値と、に基づいて、前記撮影画像のぶれを補正するためのフィルタを生成するフィルタ生成工程と
を備えることを特徴とする画像処理方法。
【請求項９】
画像処理装置が行う画像処理方法であって、
前記画像処理装置の画像入力手段が、連続撮影された複数枚の画像を入力する画像入力工程と、
前記画像処理装置の露光条件入力手段が、前記複数枚の画像から合成対象として用いる画像群を選択する際の選択パターンを規定する露光条件を入力する露光条件入力工程と、
前記画像処理装置のぶれ情報入力手段が、前記合成対象として用いる画像群を合成した合成画像におけるぶれ情報を入力するぶれ情報入力工程と、
前記画像処理装置のフィルタ生成手段が、前記露光条件と、前記ぶれ情報から得られる非整数を含む重み値と、に基づいて、前記合成画像のぶれを補正するためのフィルタを生成するフィルタ生成工程と
を備えることを特徴とする画像処理方法。
【請求項１０】
コンピュータを、請求項１乃至７の何れか１項に記載の画像処理装置の各手段として機能させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、手ぶれ補正技術に関するものである。
【背景技術】
【０００２】
近年の撮像装置の高解像度化、高ズーム化に伴い、撮影時の手ぶれによる撮影画像のぶれが問題となってきており、従来より手ぶれ補正機能付き撮像装置が広く使用されている。このような手ぶれ補正機能付き撮像装置では、手ぶれによるシフトベクトルを検出するセンサと、手ぶれを打ち消すようにレンズと撮像素子との相対的位置を制御する駆動装置とで光学的に手ぶれを補正する光学的手ぶれ補正方式が一般的である。
【０００３】
一方で、画像処理によって手ぶれを補正する方法も検討されている。１枚のぶれた画像について手ぶれを補正する手法としては、手ぶれによる画像の劣化過程をフィルタによる畳み込みと解釈し、手ぶれの速度を元にフィルタを算出し、デコンボリューションによって手ぶれを除去する手法が知られている（特許文献１、２）。
【０００４】
しかし、一般にぶれフィルタの周波数特性はある周波数で０になるという性質がある。このことにより、周波数特性が０になる周波数の情報が失われてしまうという問題が発生する。そこで、１枚の画像の取得時における露光時のシャッターの開閉をランダムに実施し、そのシャッター開閉の情報を用いたデコンボリューション演算によって手ぶれ、或いは被写体ぶれを補正する技術が提案されている（特許文献３）。係る技術はCoded Exposureと呼ばれている。良好なCoded Exposureパターンを用いることで、ぶれフィルタの周波数特性が０になることを回避し、ぶれ補正を実現している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開2006-279807号公報
【特許文献２】特開2004-205799号公報
【特許文献３】特開2008-310797号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１、２に開示されている手法では、次のような課題がある。まず、特許文献１、２の手法では、シャッターの開閉等の露光条件をコントロールしていない為、特定の周波数におけるぶれフィルタの周波数特性が０になってしまい（以下、この現象を０落ちと呼称する）、単純にデコンボリューションを行うことができない。係る問題を回避するため、特許文献１では擬似逆行列を、特許文献２ではWienerフィルタを用いているが、いずれの場合も０落ちが発生した周波数の情報を復元することは不可能である。
【０００７】
一方で、特許文献３の手法では、Coded Exposureを用いることで、特許文献１、２にあったような０落ちの問題は回避できるが、非等速運動の手ぶれに対しては適用することができなかった。
【０００８】
本発明は以上の問題に鑑みてなされたものであり、１枚の画像からであってもぶれ、特には非等速運動の手ぶれ、を補正した精度の良い画像を得る為の技術を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の目的を達成するために、例えば、本発明の画像処理装置は以下の構成を備える。即ち、画像処理装置であって、
撮影画像を撮影するために行ったシャッターの開閉のパターンを規定する露光条件を入力する露光条件入力手段と、
前記撮影画像を撮影する際のぶれ情報を入力するぶれ情報入力手段と、
前記露光条件と、前記ぶれ情報から得られる非整数を含む重み値と、に基づいて、前記撮影画像のぶれを補正するためのフィルタを生成するフィルタ生成手段と
を備えることを特徴とする。
【発明の効果】
【００１０】
本発明の構成によれば、１枚の画像からであってもぶれ、特には非等速運動の手ぶれ、を補正した精度の良い画像を得ることができる。
【図面の簡単な説明】
【００１１】
【図１】補正部１００の機能構成例を示すブロック図。
【図２】補正部１００が行う処理のフローチャート。
【図３】（ａ）は周期的補間Kernelの一例を示す図、（ｂ）はフィルタ計算の概念図。
【図４】フィルタ係数算出部１０５の動作を示すフローチャート。
【図５】（ａ）は通常の露光条件の例を示す図、（ｂ）はフィルタの周波数特性を示す図。
【図６】（ａ）は露光条件コントロール例を示す図、（ｂ）はフィルタ周波数特性を示す図。
【図７】第１の実施形態の効果を示す図。
【図８】第２の実施形態の撮像装置を示すブロック図。
【図９】第３の実施形態の撮像装置を示すブロック図。
【図１０】第４の実施形態の画像処理装置を示すブロック図。
【図１１】第４の実施形態の概念図。
【図１２】第５の実施形態の概念図。
【図１３】第６の実施形態の画像ファイル形式を示す図。
【発明を実施するための形態】
【００１２】
以下、添付図面を参照し、本発明の好適な実施形態について説明する。なお、以下説明する実施形態は、本発明を具体的に実施した場合の一例を示すもので、特許請求の範囲に記載の構成の具体的な実施例の１つである。
【００１３】
［第１の実施形態］
＜本実施形態に係る画像処理装置の構成について＞
本実施形態では、１枚の画像からぶれを補正する画像処理装置について説明する。なお、本実施形態では、手ぶれをシフトぶれの場合に限定して説明する。先ず、本実施形態に係る画像処理装置が有する補正部１００の機能構成例について、図１を用いて説明する。補正部１００は、上述の通り、１枚の画像から、シフトぶれとしての手ぶれを補正する為の処理を行う。
【００１４】
入力端子１０１には、撮像された画像のデータ（撮像データ）が入力され、この画像のデータは後段のデコンボリューション部１０６に入力される。ぶれベクトル記録部１０２には、本実施形態に係る画像処理装置が有する他の構成により測定されたぶれベクトル情報が、入力端子１０７を介して入力されるので、ぶれベクトル記録部１０２は、この入力されたぶれベクトル情報を記録する。
【００１５】
露光条件記録部１０３には、本実施形態に係る画像処理装置が有する他の構成によって取得された「撮影時の露光条件を示す情報（露光条件情報）」が、入力端子１０８を介して入力される。ここで、「露光条件」とは、シャッターを全て開いた時の露光量を１とした場合の各時刻における相対的な露光量のことである。従って、露光条件記録部１０３は、この入力された露光条件情報を記録する。
【００１６】
補間KernelＤＢ（データベース）１０４には、非整数値画素における画素値を算出するために必要な補間Kernel関数の値が格納（保持）されている。フィルタ係数算出部１０５は、ぶれベクトル記録部１０２が記録したぶれベクトル情報と、露光条件記録部１０３が記録した露光条件情報と、補間KernelＤＢ１０４に格納されている値と、を用いて、ぶれのフィルタ係数を算出する。
【００１７】
デコンボリューション部１０６は、入力端子１０１を介して入力された画像のデータに対して、フィルタ係数算出部１０５が算出したフィルタ係数を用いたフィルタによるデコンボリューション処理を行うことで、ぶれを補正した画像のデータを生成する。デコンボリューション部１０６によりぶれが補正された画像のデータは、出力端子１０９を介してぶれ補正データとして、本実施形態に係る画像処理装置が有するメモリや表示装置に対して出力される。
【００１８】
＜補正部１００が行う処理について＞
次に、補正部１００が行う処理について、図２を用いて説明する。先ず、ステップＳ２０１では、デコンボリューション部１０６は、入力端子１０１を介して撮像データを取得する。
【００１９】
次に、ステップＳ２０２では露光条件記録部１０３は、画像を撮影中の各時刻における露光条件を示す露光条件情報を入力端子１０８を介して取得し、取得した露光条件情報を記録する。
【００２０】
次に、ステップＳ２０３ではぶれベクトル記録部１０２は、画像を撮影中の各時刻におけるぶれベクトル情報を入力端子１０７を介して取得し、取得したぶれベクトル情報を記録する。
【００２１】
ステップＳ２０４でフィルタ係数算出部１０５は、ぶれベクトル記録部１０２が記録したぶれベクトル情報と、露光条件記録部１０３が記録した露光条件情報と、補間KernelＤＢ１０４に格納されている値と、を用いてぶれのフィルタ係数を算出する。フィルタ係数算出部１０５の動作についての詳細な説明は後述する。
【００２２】
次に、ステップＳ２０５ではデコンボリューション部１０６は、ステップＳ２０１で取得した撮像データに対して、ステップＳ２０４でフィルタ係数算出部１０５が算出したフィルタ係数を用いたフィルタによるデコンボリューション処理を行う。係る処理により、ぶれを補正した画像のデータを生成する。
【００２３】
そして次に、ステップＳ２０６では、デコンボリューション部１０６は、ぶれが補正された画像のデータを、出力端子１０９を介してぶれ補正データとして、本実施形態に係る画像処理装置が有するメモリや表示装置に対して出力する。
【００２４】
＜フィルタ係数算出部１０５の動作について＞
シフトぶれの運動は、時刻をt、時刻tにおけるカメラのシフトぶれベクトルをs(t)、時刻ｔにおける位置を示す２次元ベクトルをx(t)と置くと、以下の式が成り立つ。
【００２５】
【数１】
0005424835.tif 000002
【００２６】
ここで、撮影開始の時刻ｔを０とした。時刻ｔ＝０におけるぶれのない画像をＩとする。また、画像Ｉ中の座標（座標ベクトル）ｍにおける画素値をＩ（ｍ）とする。ここで、「時刻ｔに画像中の座標ｍに位置する画素」の時刻ｔ＝０における座標ベクトルｍ（０）は、上記式１からすれば、ｍ（０）＝ｍ−ｓ（ｔ）となる。ここで、座標ベクトルｍを構成するｘ成分、ｙ成分は何れも整数値であるとする。即ち、座標ベクトルｍは格子点の座標値を示すベクトルである。ここで、座標ベクトルｍが示す座標位置に寄与する画素値は、画素値Ｉ（ｍ−ｓ（ｔ））を時刻ｔ＝０から露光時間Ｔまで積分したものになるので、シフトぶれを表す式は以下のように書ける。
【００２７】
【数２】
0005424835.tif 000003
【００２８】
ここで、ｈ（ｔ）は露光条件を決める関数であり、Coded Exposureの露光条件を表すものとする。詳細については後述する。Iblurは、シフト運動によりぶれた画像である。シフトぶれが非整数値でも対応できるように、周期的補間Kernelφ(x)を導入し、非整数値画素における画素値を以下のように定義する。
【００２９】
【数３】
0005424835.tif 000004
【００３０】
ここで、Zは整数の集合を現し、Z／NZは[0,1,2,・・・・,N-1]の集合を記号的に表したものである。但し、０とＮを同一視するものとする。式３は「周期的」と言う条件以外は通常の補間の式と同一である。周期的補間Kernelにおける「周期的」とは以下の条件を満たすものとする。
【００３１】
【数４】
0005424835.tif 000005
【００３２】
ここで、M,Nをそれぞれ画像の横、縦のサイズとする。このように、１枚の画像内の各画素位置及び各画素位置間に対応する補間Kernelの値は規定されている。補間Kernelを周期的にした理由については後述する。１次元で線形補間を行う場合の周期的補間Kernelについて図３（ａ）を用いて説明する。図３（ａ）において、横軸は座標、縦軸は補間Kernelの値を表す。補間Kernelを周期的にしたことにより、x=N近傍のグラフはx=0近傍のグラフと一致している。補間Kernelは線形補間に限らず、Bicubicなど任意の補間Kernelを用いて良い。上記式３を式２に代入すると、以下の式５が得られる。
【００３３】
【数５】
0005424835.tif 000006
【００３４】
式５において、フィルタＫを以下の式６に示す如く定義する。
【００３５】
【数６】
0005424835.tif 000007
【００３６】
この場合、式５は以下の式７の形に変形させることができる。
【００３７】
【数７】
0005424835.tif 000008
【００３８】
即ち、巡回畳み込みの形に帰着する。補間Kernelを周期的にしたのは式７において巡回畳み込みの形にするためである。式６によって、ぶれの軌跡s(t)と、露光条件h(t)の情報から、フィルタKを求めることができる。よって、フィルタKによるデコンボリューションを行えば、式７を用いてIblurよりIを求めることができる。以上がフィルタ係数算出部１０５の動作原理である。
【００３９】
＜フィルタ係数算出部１０５が行う処理手順＞
ここでは式６の計算手順を示す。簡単のため１次元の場合を考えることにする。補間Kernelが線形補間の場合に、式６の意味を表した概念図を図３（ｂ）に示す。図３（ｂ）では、説明の都合上、カメラが動く代わりに被写体が動く場合を考えているが、手ぶれの場合も同様に扱うことができる。被写体の運動は0≦t≦2において、s(t)=0.3tであり、2≦t≦4において、s(t)=0.5t-0.4と言う非等速運動をするものとする。h(t)=0はシャッターが閉じている状態、h(t)=1はシャッターが開いている状態を表すものとする。また、I(n)はぶれのない画像を表しており、Iblur(n)は撮影後の取得画像、h(t)は露光条件をあらわしているものとする。図３（ｂ）において、各I(n)の下に書いてある数字は画素位置x=0における画素値I(0)が画素位置x=nにおける画素値Iblur(n)にどれだけ寄与するかを表している。
【００４０】
まず、画素位置x=0におけるI(0)のIblur(0)に対する寄与を考えてみる。t=0では、I(0)とIblur(0)は同じ位置にあるため、図３（ｂ）より１の寄与をする。次にt=1ではI(0)が0.3画素右方向に動くため、寄与は0.7になる。同様にt=2では0.4となり、それ以後は0となる。これに露光条件を加味して式６に従って画素位置x=0におけるフィルタ値を計算すると以下の式の通りになる。
【００４１】
【数８】
0005424835.tif 000009
【００４２】
即ち、式８では、露光時間中のそれぞれの時刻ｔについて、Iblur(0)に対するI(0)の重なりの割合を求め、求めた割合に対してｈ（ｔ）を乗じている。そして露光時間中の各時刻ｔについて求めた乗算結果（割合とｈ（ｔ）の乗算結果）の総和を、Iblur(0)に対するフィルタ内のフィルタ値ＴＫ（０）としている。ここで、φの値は、図３（ａ）に示した周期的補間Kernelを用いて計算した。式８より、フィルタK(0)=1.4／T=1.4／５となる。
【００４３】
次に、I(0)のIblur(1)に対する寄与を考えてみる。I(0)とIblur(1)は全く重なりがないため、図３（ｂ）よりt=0では寄与は0である。次にt=1ではI(0)のうち0.3だけ寄与し、t=2では0.6、t=3では0.9、t=4では0.4の寄与をしている。これに露光条件を加味して式６に従って画素位置x=1におけるフィルタ値を計算すると以下の式の通りになる。
【００４４】
【数９】
0005424835.tif 000010
【００４５】
即ち、式９では、露光時間中のそれぞれの時刻ｔについて、Iblur(１)に対するI(0)の重なりの割合を求め、求めた割合に対してｈ（ｔ）を乗じている。そして露光時間中の各時刻ｔについて求めた乗算結果（割合とｈ（ｔ）の乗算結果）の総和を、Iblur(１)に対するフィルタ内のフィルタ値ＴＫ（１）としている。よって、フィルタK(1)=1.5／T=1.5／５となる。
【００４６】
最後にI(0)のIblur(2)に対する寄与を考えてみる。図３（ｂ）より、t=0では寄与は0である。t=1、2でも同様に0であり、t=3では0.1、t=4では0.6の寄与を与えている。これに露光条件を加味して画素位置x=2におけるフィルタ値を計算すると以下の式の通りになる。
【００４７】
【数１０】
0005424835.tif 000011
【００４８】
即ち、式１０では、露光時間中のそれぞれの時刻ｔについて、Iblur(２)に対するI(0)の重なりの割合を求め、求めた割合に対してｈ（ｔ）を乗じている。そして露光時間中の各時刻ｔについて求めた乗算結果（割合とｈ（ｔ）の乗算結果）の総和を、Iblur(２)に対するフィルタ内のフィルタ値ＴＫ（１）としている。よってフィルタK(2)=0.1／T=0.1／５となる。n≧3に対してはI(0)はIblur(n)に寄与しないので、K(n)=0となる。よってこの場合はフィルタK=[1.4,1.5,0.1]／５となってフィルタKを求めることができる。以上がフィルタKを算出する手順である。
【００４９】
次に、フィルタ係数算出部１０５が行う処理について、図４のフローチャートを用いて説明する。基本的には式６を算出する手順を示したものである。ここでは簡単のため１次元右(正)方向のぶれの例について説明する。然るに、着目画素の座標を表す座標ベクトルｍもまた１次元ベクトルとなるため、この座標ベクトルは実質的にはスカラーとして扱うことができる。また、フィルタ係数算出部１０５は、規定時間間隔Δｔ毎の露光条件情報、ぶれベクトル情報を、それぞれ露光条件記録部１０３、ぶれベクトル記録部１０２から取得する。
【００５０】
先ず、ステップＳ５０１では、着目画素の座標ｍを０、K(m)を０、時刻ｔを０、にそれぞれ初期化する。次に、ステップＳ５０２では、時刻ｔにおけるぶれベクトル情報（ぶれベクトル）s(t)をぶれベクトル記録部１０２から取得する。次に、ステップＳ５０３では、ｍとs(t)との差分値ｘを計算する。次に、ステップＳ５０４では、この差分値ｘ（=m-s(t)）に対応する補間Kernelの値φ(x)を補間KernelＤＢ１０４より読み出す。
【００５１】
補間KernelＤＢ１０４には(x,φ(x))のセットが格納されており、φ(x)は具体的には図３（ａ）に示すような形状をしている。次に、ステップＳ５０５では、露光条件記録部１０３から時刻ｔにおける露光条件情報（露光条件）h(t)を取得する。露光条件h(t)は、例えば[1,0,1,1,0,・・・]のような時刻ｔに対する配列となっている。
【００５２】
次に、ステップＳ５０６では、ステップＳ５０４で取得した補間Kernelの値φ(x)と、ステップＳ５０５で取得した露光条件情報h(t)と、を乗算し、時間の刻み幅ΔtをかけてK(m)に加算する。
【００５３】
次に、ステップＳ５０７では、時刻ｔにΔｔを加算して更新する。次にステップＳ５０８ではｔ＜Ｔであるか否かを判断し、ｔ＜Ｔであれば処理はステップＳ５０２に戻り、ｔ≧Ｔであれば処理はステップＳ５０９に進む。
【００５４】
ステップＳ５０９では、ｍに１を加算して更新し、対応するフィルタ値K(m)を０、時刻ｔを０、に初期化する。次に、ステップＳ５１０では、ｍ＜Ｓであるか否かを判断し、ｍ＜Ｓであれば処理はステップＳ５０２に戻るし、ｍ≧Ｓであれば本処理は終了する。
【００５５】
ここで、フィルタサイズＳは通常ぶれのpixel数と同程度のサイズにすれば通常十分であるが、念のためそれより大きくとっても良い。ここでは右(正)方向のぶれの場合のみ考えたため、ステップＳ５０１において着目画素ｍの値が０から出発したが、一般に左(負)方向にもぶれる場合はｍが負の値から出発することもある。周期的な条件を課しているため、ｍが負の値を取る場合については画像サイズをＭとした時、-1=M-1、-2=M-2・・・と解釈する。
【００５６】
なお、以上の説明では、説明を簡単にするために、着目画素の座標を１次元ベクトルで表した。しかし、着目画素の座標を２次元ベクトルで場合には、図４のフローチャートにおいて、ｍを（ｍ，ｎ）、ｘを（ｘ，ｙ）、ｓ（ｔ）を（ｓ＿ｘ（ｔ）ｓ＿ｙ，（ｔ））のように、上記の説明で登場した１次元ベクトルを２次元ベクトルに置き換えれば良い。またこの場合、補間Kernelφも2次元ベクトル(x,y)の関数となる。例えば１次元の場合にステップＳ５０４でm-s(t)と計算したものは、２次元の場合は(m-s_x(t),n-s_y(t))と置き換える。また、フィルタサイズをS_x×S_yとした場合、ステップＳ５０９における着目画素の更新は、次のようにして行う。即ち、２次元領域において、（ｍ，ｎ），（ｍ＋１，ｎ）…（ｍ＋Ｓｘ，ｎ），（１，ｎ＋１）…のように２次元領域を左から右、上から下にソートするように更新する。
【００５７】
＜露光条件＞
露光条件は関数h(t)によって設定される。この関数を設定するのは、式６によって決定されるフィルタＫが０落ちするのを避けるためである。この現象が発生すると、周波数特性が０になる周波数の情報が失われてしまうという問題が発生する。その一例として、横方向に等速度運動をしている場合を考えてみる。
【００５８】
通常の露光条件を図５（ａ）に示す。これは一定時間シャッターを開き、その後閉じたものである。横軸は時間、縦軸はh(t)の値である。この露光条件でフィルタKを算出し、その周波数特性を求めた例を図５（ｂ）に示す。図５（ｂ）において横軸は周波数、縦軸はフィルタKの離散フーリエ変換の絶対値である。図５（ｂ）を見ると分かるようにフィルタKの周波数特性が0になる周波数が存在し、0落ちが発生していることが分かる。
【００５９】
次に、0落ちを避けるために、Coded Exposureを用いて露光条件h(t)をコントロールした例を図６（ａ）に示す。図の見方は図５（ａ）と同様である。この露光条件で図５（ａ）と同様のシフトぶれに関してフィルタKの周波数特性を求めた例を図６（ｂ）に示す。図の見方は図５（ｂ）と同様である。このように露光条件h(t)をコントロールすることによって、フィルタKの周波数特性の値が0になることを防ぐことができる。
【００６０】
ここではシャッターの開閉状態のみをコントロールしたため、h(t)の値は0か1に限定されているが、別の手段を用いてh(t)の値が[0,1]の中間値を取るよう変化させても良い。
【００６１】
最後に、図７に本実施形態の効果を示す。図７（ａ）には、等加速度運動で横方向にシフトぶれを起こした画像、図７（ｂ）には、本実施形態によってシフトぶれを補正した画像を示している。図７より、非等速運動の場合において手ぶれが良好に補正されていることが分かる。
【００６２】
以上説明したように、本実施形態によれば、１枚の画像のみから補間Kernel、ぶれベクトル及び露光条件を用いてシフトぶれを補正することができる。このことで、非等速運動の場合でも良好にぶれを補正することが可能になる。
【００６３】
第１の実施形態をまとめると、先ず、画像の撮像中に時間幅Δｔ毎に収集された露光条件情報、ぶれベクトル情報を取得する。そして、フィルタにおける着目位置と、時刻Δｔ×ｎ（ｎ＝１，２，…、Ｔ／Δｔ）におけるぶれベクトル情報が示すぶれベクトルと、の差分で決まる位置に対応する補間Kernelの値を取得する。そして、時刻Δｔ×ｎにおける露光条件情報と補間Kernelの値とΔｔとを乗算した結果を、フィルタにおける着目位置の係数に加算する。この「補間Kernelの値を取得する」処理と「乗算結果をフィルタにおける着目位置の係数に加算する」処理とを、ｎ＝１，２，…、Ｔ／Δｔについて行うことで、フィルタにおける着目位置の係数を確定させる（第１の演算）。また、この「補間Kernelの値を取得する」処理と「乗算結果をフィルタにおける着目位置の係数に加算する」処理と第１の演算とを、フィルタにおける全ての位置について行うことで、フィルタにおける全ての係数を確定させる（第２の演算）。そして最後に、画像におけるぶれを補正するために、第２の演算により確定されたフィルタとこの画像とのデコンボリューションを行う。
【００６４】
［第２の実施形態］
本実施形態では、第１の実施形態で説明した画像処理装置を組み込んだ撮像装置について説明する。本実施形態に係る撮像装置が有する撮像部１１００の機能構成例について図８を用いて説明する。
【００６５】
撮影する被写体からの反射光は、入力端子１１０１、レンズ１１０２、シャッター１１０３を介して撮像素子１１０４に入光される。撮像素子１１０４はこの入光された光に応じたアナログ信号を出力し、このアナログ信号はＡ／Ｄ変換器１１０５によってデジタル信号に変換される。このデジタル信号は、出力端子１１０９を介して撮像データとして補正部１００に入力される。
【００６６】
露光条件設定部１１０６は、露光条件を設定する為のもので、設定した露光条件を示す情報は露光条件情報としてシャッター１１０３に入力されると共に、出力端子１１０８を介して補正部１００にも入力される。
【００６７】
姿勢検出部１１０７は、撮像部１１００のぶれを検出するためのもので、検出したぶれの情報は上記ぶれベクトル情報として、出力端子１１１０を介して補正部１００に入力される。
【００６８】
本実施形態では、手ぶれは姿勢検出部１１０７によって検知される。姿勢検出部１１０７は動きを測定する装置でも良いし、複数枚の画像を取得し、取得したそれぞれの画像を用いて動きを推定する装置であっても良い。ぶれベクトル情報、露光条件情報が補正部１００に送られると、補正部１００はこれらの情報を用いて第１の実施形態で説明した処理を実行し、撮像データのぶれを補正する。以上説明したように本実施形態によれば、撮像装置に光学防振の機構を組み込まずに手ぶれを補正することが可能になる。
【００６９】
［第３の実施形態］
第２の実施形態では光学防振は考慮しなかったが、本実施形態では光学防振と組み合わせた場合の撮像装置について説明する。本実施形態に係る撮像装置が有する撮像部１２００の機能構成例について図９を用いて説明する。図９において図８と同じ部分については同じ参照番号を付けており、その説明は省略する。
【００７０】
撮像素子移動検出部１２０１は、撮像素子１１０４の動きを検出し、検出した結果を撮像素子移動情報として出力端子１２０２を介して減算器１２０３に出力する。減算器１２０３は、姿勢検出部１１０７が検出したぶれベクトル情報から、撮像素子移動検出部１２０１が検出した撮像素子移動情報を減算した結果を求める。係る減算の結果は補正部１００に入力される。
【００７１】
本実施形態では、姿勢検出部１１０７により検出されたぶれベクトル情報はシフトぶれ情報として撮像素子１１０４に送られ、撮像素子１１０４はこのシフトぶれ情報に応じて、シフトぶれを軽減する方向に動く。これにより、手ぶれを補正する。そして、撮像素子１１０４の移動ベクトルを撮像素子移動検出部１２０１が検出し、その検出の結果を出力端子１２０２を介して減算器１２０３に送出する。また、姿勢検出部１１０７が検出した撮像装置そのもののぶれベクトル情報が出力端子１１１０を介して減算器１２０３に送出される。減算器１２０３は上記の通り、ぶれベクトル情報と撮像素子移動情報との差分を計算し、これを補正部１００に送出するので、補正部１００は、光学防振では除去しきれなかった手ぶれを補正することになる。
【００７２】
本実施形態では、撮像素子１１０４によって手ぶれを補正する手法を説明したが、レンズ１１０２によって手ぶれを補正する方法もある。この場合は撮像素子移動検出部１２０１の代わりにレンズ移動検出部を設け、このレンズ移動検出部によりレンズの移動量を計測し、撮像素子移動情報の代わりに減算器１２０３に出力する。このように、撮像部によって手ぶれを補正できれば、これらの手法に限らない。
【００７３】
以上説明したように本実施形態によれば、手ぶれの一部は光学防振によって補正し、光学防振では補正しきれなかった手ぶれを補正部１００で補正することができる。このことによって、大きな手ぶれも正確に補正することが可能になる。
【００７４】
［第４の実施形態］
第１の実施形態では、ぶれをシフトぶれに限定したが、本実施形態では回転ぶれを補正する画像処理装置について説明する。本実施形態に係る画像処理装置において、ぶれ補正に係る構成について、図１０を用いて説明する。
【００７５】
入力端子１３０１を介して撮像データが極座標変換部１３０２に入力される。極座標変換部１３０２は、入力端子１３０４を介して入力される回転中心位置を示す回転中心情報を用いて、撮像データを直交座標におけるデータから極座標におけるデータに変換する。然るに補正部１００は、入力端子１３０５を介して入力されるぶれ角度情報、入力端子１３０６を介して入力される露光条件情報、を用いて、この極座標変換部１３０２により変換された撮像データに対して、第１の実施形態と同様のぶれ補正処理を行う。
【００７６】
直交座標変換部１３０３は、補正部１００によりぶれ補正が成された撮像データを極座標におけるデータから直交座標におけるデータに変換する。直交座標変換部１３０３により変換された撮像データは、出力端子１３０７を介してぶれ補正データとして、表示装置やメモリなどに対して出力される。
【００７７】
回転ぶれを補正する処理について、図１１を用いて説明する。図１１において、回転ぶれは極座標変換を行うことにより１次元のシフトぶれに変換することができる。そのシフトぶれを第１の実施形態で説明したぶれ補正処理でもって補正し、極座標から直交座標に変換することで回転ぶれを補正することができる。
【００７８】
以上説明したように、本実施形態によれば、回転ぶれを補正することが可能になる。なお、第３の実施形態と同様に本実施形態を撮像装置と組み合わせることにより、光学防振で手ぶれの一部を除去し、残りの回転ぶれを本実施形態で補正できることは言うまでもない。
【００７９】
［第５の実施形態］
本実施形態では、露光条件h(t)を制御する手法の一例について説明する。然るに本実施形態は、上記第１〜４の実施形態に適用することができる。本実施形態では、シャッターの開閉で露光条件を制御するのではなく、連続撮影して得た画像を選択して加算合成することにより、露光条件を制御する。係る一連の処理について図１２を用いて説明する。図１２（ａ）は時分割露光して連続撮影した画像を表している。図１２（ｂ）、図１２（ｃ）は時分割露光した画像を適宜選択して加算合成する様子を表している。図１２（ｂ）、図１２（ｃ）において、画像の下に記載されている数値が0の時は加算対象から除外し、1の時は加算対象とすることを表している。図１２（ｂ）、（ｃ）から分かるように、時分割画像の選択の仕方によって、様々なCoded Exposureパターンを生成することができる。以上説明したように、本実施形態によれば、連続撮影した画像を選択的に加算合成することにより様々な露光条件で撮影した画像を取得することが可能になる。
【００８０】
［第６の実施形態］
本実施形態では、第１，４の実施形態で説明した処理をソフトウェアでもって実現する場合について説明する。即ち、補正部１００がコンピュータプログラムとしてコンピュータに格納されており、このコンピュータが有するＣＰＵがこのコンピュータプログラムを実行する。
【００８１】
本実施形態の場合、係るソフトウェアを実行する装置には、図１３に例示するような画像ファイル１６００が入力されることになる。この画像ファイル１６００には、ぶれベクトル情報が格納されているタグ１６０１、露光条件情報が格納されているタグ１６０２、そして撮像された画像が格納されているタグ１６０３が含まれている。
【００８２】
然るに、このような画像ファイル１６００が装置に入力されると、補正部１００に対応するコンピュータプログラムは、タグ１６０１，１６０２に格納されている情報を用いて、タグ１６０３に格納されている画像のぶれを補正する処理を実行する。そしてぶれを補正した画像を表示装置やメモリなどに出力する。以上説明したように、本実施形態によれば、ソフトウェア上で上記形式の画像ファイルを読み込み、自動的にぶれを補正することが可能になる。
【００８３】
以上説明した各実施形態をまとめると、Coded Exposureのメリットを生かしつつ一般的な非等速運動の手ぶれにも対応する為に補間Kernelを用意し、手ぶれの軌跡と露光条件を元にフィルタを算出し、フィルタを用いてぶれ補正を行った。露光条件をコントロールすることで、0落ちの問題を回避し、補間Kernelを用いることで、任意の運動の手ぶれに容易に対応することを可能とした。
【００８４】
即ち、任意の運動の手ぶれに対応可能であるということは、露光時間を長くとっても、上記実施形態は保証されることになる。一般に手ぶれの運動は等速ではなく非等速運動である。しかし、短い露光時間内では手ぶれの運動は等速運動と見なせるので、非等速運動の手ぶれに対処していない従来技術は、手ぶれの運動を等速と見なせる程度の短い露光時間には対処できる。しかし、手ぶれの運動を等速と見なせない長い露光時間には対処できない。
【００８５】
係る点、上記実施形態で説明した画像処理装置は非等速運動の手ぶれに対処しているため、露光時間を長くとっても対処できる。即ち、上記実施形態によれば、露光時間を長くしても、手ぶれを補正することができるという効果を奏することができる。
【図１】
0005424835.tif 000012
【図２】
0005424835.tif 000013
【図３】
0005424835.tif 000014
【図４】
0005424835.tif 000015
【図５】
0005424835.tif 000016
【図６】
0005424835.tif 000017
【図８】
0005424835.tif 000018
【図９】
0005424835.tif 000019
【図１０】
0005424835.tif 000020
【図１１】
0005424835.tif 000021
【図１２】
0005424835.tif 000022
【図１３】
0005424835.tif 000023
【図７】
0005424835.tif 000024