(57)【要約】【課題】画質の低下を抑制しながら、画像のボケを補正する。【解決手段】H_init生成部２１は、入力画像に生じているボケの程度を表す点広がり関数H0を生成する。U_init生成部３４は、オリジナル画像を分割した複数のオリジナルブロックの周囲をそれぞれ拡張した拡張ブロック内の画像のストラクチャ成分のボケを点広がり関数H0に基づいてそれぞれ補正した複数のストラクチャU0を生成する。conv部２７乃至corr部３１、U生成部３５、及びトータルバリエーションフィルタ３７等は、点広がり関数Hkを用いて、残差Ekが小さくなるように、ストラクチャUkを更新し、更新したストラクチャUkのストラクチャ成分を新たなストラクチャUk+1とする更新処理を１回以上実行する。本発明は、例えば、記録再生装置等に適用できる。【選択図】図１
2011128978.tif 000002
【特許請求の範囲】
【請求項１】
入力画像に生じているボケの程度を表す点広がり関数を生成する第１の生成手段と、
前記入力画像を分割した複数の第１のブロックの周囲をそれぞれ拡張した複数の第２のブロック内の画像である複数の入力ブロック画像のストラクチャ成分のボケを前記点広がり関数に基づいてそれぞれ補正した複数の補正ブロック画像を生成する第２の生成手段と、
前記点広がり関数を用いて前記補正ブロック画像にボケを生じさせたボケ再現ブロック画像と対応する前記入力ブロック画像との間の残差が小さくなるように前記補正ブロック画像を更新し、更新した前記補正ブロック画像のストラクチャ成分を新たな前記補正ブロック画像とする更新処理を１回以上実行する更新手段と
を含む情報処理装置。
【請求項２】
前記第２の生成手段は、前記点広がり関数を生成する際に用いる高速フーリエ変換のタップ数に基づいて、前記第２のブロックのサイズを設定する
請求項１に記載の情報処理装置。
【請求項３】
前記第２の生成手段は、前記補正ブロック画像のストラクチャ成分とテクスチャ成分を分離する分離フィルタの反復演算回数に基づいて、前記第２のブロックのサイズを設定する
請求項１に記載の情報処理装置。
【請求項４】
前記第２の生成手段は、各前記第２のブロックの所定の辺の所定の方向の座標が所定の整数の倍数になるように、前記第２のブロックのサイズおよび位置を設定する
請求項１に記載の情報処理装置。
【請求項５】
前記更新手段は、前記ボケ再現ブロック画像と対応する前記入力ブロック画像との間の残差が小さくなるように、さらに前記点広がり関数を更新する
請求項１に記載の情報処理装置。
【請求項６】
前記更新処理が終了した後の前記補正ブロック画像をつなぎ合わせることにより前記入力画像のボケを補正した補正画像を生成する第３の生成手段を
さらに含む請求項１に記載の情報処理装置。
【請求項７】
画像に生じているボケを補正する情報処理装置が、
入力画像に生じているボケの程度を表す点広がり関数を生成し、
前記入力画像を分割した複数の第１のブロックの周囲をそれぞれ拡張した複数の第２のブロック内の画像である複数の入力ブロック画像のストラクチャ成分のボケを前記点広がり関数に基づいてそれぞれ補正した複数の補正ブロック画像を生成し、
前記点広がり関数を用いて前記補正ブロック画像にボケを生じさせたボケ再現ブロック画像と対応する前記入力ブロック画像との間の残差が小さくなるように前記補正ブロック画像を更新し、更新した前記補正ブロック画像のストラクチャ成分を新たな前記補正ブロック画像とする更新処理を１回以上実行する
ステップを含む情報処理方法。
【請求項８】
入力画像に生じているボケの程度を表す点広がり関数を生成し、
前記入力画像を分割した複数の第１のブロックの周囲をそれぞれ拡張した複数の第２のブロック内の画像である複数の入力ブロック画像のストラクチャ成分のボケを前記点広がり関数に基づいてそれぞれ補正した複数の補正ブロック画像を生成し、
前記点広がり関数を用いて前記補正ブロック画像にボケを生じさせたボケ再現ブロック画像と対応する前記入力ブロック画像との間の残差が小さくなるように前記補正ブロック画像を更新し、更新した前記補正ブロック画像のストラクチャ成分を新たな前記補正ブロック画像とする更新処理を１回以上実行する
ステップを含む処理をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法、及びプログラムに関し、特に、撮像時の手振れによるボケや、合焦距離のズレによる、いわゆるピンボケ等を補正できるようにした情報処理装置、情報処理方法、及びプログラムに関する。
【背景技術】
【０００２】
従来、撮像した画像に生じた手振れボケやピンボケ（以下、単にボケともいう）を補正する補正技術が存在する。
【０００３】
例えば、L.B.LucyとWilliam Hardley Richardsonにより提唱されたRichardson-Lucy法がある。しかし、Richardson-Lucy法では、点広がり関数（PSF（Point Spread Function)）の周波数軸上で零点に落ち込むスペクトラムを用いて逆問題を解く際に、零点において、ノイズの増幅やリンギングの発生等が見られる。また、点広がり関数が正確に求まらなかった場合には、零点において、ノイズの増幅やリンギングの発生等が、より大きくなってしまう。
【０００４】
そこで、ゲインマップの導入により、点広がり関数が正確にわかる場合に、リンギングを抑制することが可能なresidual deconvolution技術が存在する（例えば、非特許文献１を参照）。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Lu Yuan, Jian Sun, Long Quan, Heung-Yeung Shum, Image deblurring with blurred/noisy image pairs, ACM Transactions on Graphics (TOG), v.26 n.3, July 2007
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来のresidual deconvolution技術では、点広がり関数に誤差が存在する場合には、画像のストラクチャ成分(structure)と残差(residual部分)の復元がうまくいかず、リンギングがより多く発生してしまう。
【０００７】
本発明は、このような状況に鑑みてなされたものであり、リンギング等を抑制し、手振れや合焦距離のズレによるボケを補正できるようにするものである。
【課題を解決するための手段】
【０００８】
本発明の一側面の情報処理装置は、入力画像に生じているボケの程度を表す点広がり関数を生成する第１の生成手段と、前記入力画像を分割した複数の第１のブロックの周囲をそれぞれ拡張した複数の第２のブロック内の画像である複数の入力ブロック画像のストラクチャ成分のボケを前記点広がり関数に基づいてそれぞれ補正した複数の補正ブロック画像を生成する第２の生成手段と、前記点広がり関数を用いて前記補正ブロック画像にボケを生じさせたボケ再現ブロック画像と対応する前記入力ブロック画像との間の残差が小さくなるように前記補正ブロック画像を更新し、更新した前記補正ブロック画像のストラクチャ成分を新たな前記補正ブロック画像とする更新処理を１回以上実行する更新手段とを含む。
【０００９】
前記第２の生成手段には、前記点広がり関数を生成する際に用いる高速フーリエ変換のタップ数に基づいて、前記第２のブロックのサイズを設定させることができる。
【００１０】
前記第２の生成手段には、前記補正ブロック画像のストラクチャ成分とテクスチャ成分を分離する分離フィルタの反復演算回数に基づいて、前記第２のブロックのサイズを設定させることができる。
【００１１】
前記第２の生成手段には、各前記第２のブロックの所定の辺の所定の方向の座標が所定の整数の倍数になるように、前記第２のブロックのサイズおよび位置を設定させることができる。
【００１２】
前記更新手段には、前記ボケ再現ブロック画像と対応する前記入力ブロック画像との間の残差が小さくなるように、さらに前記点広がり関数を更新させることができる。
【００１３】
前記更新処理が終了した後の前記補正ブロック画像をつなぎ合わせることにより前記入力画像のボケを補正した補正画像を生成する第３の生成手段をさらに設けることができる。
【００１４】
本発明の一側面の情報処理方法、または、本発明の一側面のプログラムを実行するコンピュータによる処理は、入力画像に生じているボケの程度を表す点広がり関数を生成し、前記入力画像を分割した複数の第１のブロックの周囲をそれぞれ拡張した複数の第２のブロック内の画像である複数の入力ブロック画像のストラクチャ成分のボケを前記点広がり関数に基づいてそれぞれ補正した複数の補正ブロック画像を生成し、前記点広がり関数を用いて前記補正ブロック画像にボケを生じさせたボケ再現ブロック画像と対応する前記入力ブロック画像との間の残差が小さくなるように前記補正ブロック画像を更新し、更新した前記補正ブロック画像のストラクチャ成分を新たな前記補正ブロック画像とする更新処理を１回以上実行するステップを含む。
【００１５】
本発明の一側面によれば、入力画像に生じているボケの程度を表す点広がり関数が生成され、前記入力画像を分割した複数の第１のブロックの周囲をそれぞれ拡張した複数の第２のブロック内の画像である複数の入力ブロック画像のストラクチャ成分のボケを前記点広がり関数に基づいてそれぞれ補正した複数の補正ブロック画像が生成され、前記点広がり関数を用いて前記補正ブロック画像にボケを生じさせたボケ再現ブロック画像と対応する前記入力ブロック画像との間の残差が小さくなるように前記補正ブロック画像が更新され、更新した前記補正ブロック画像のストラクチャ成分を新たな前記補正ブロック画像とする更新処理が１回以上実行される。
【発明の効果】
【００１６】
本発明の一側面によれば、手振れや合焦距離のズレによる画像のボケを補正することができる。特に、本発明の一側面によれば、画質の低下を抑制しながら、画像のボケを補正することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明を適用した情報処理装置の第１の構成例を示すブロック図である。
【図２】初期推定PSFの推定方法の概要を説明する図である。
【図３】ブレ画像についてケプストラムを生成する生成方法を説明する図である。
【図４】ケプストラムに対して、輝点の最大値を算出する算出方法を説明する図である。
【図５】初期推定PSFの推定が成功したか否かを判定する判定方法を説明する図である。
【図６】初期推定PSFを生成する生成方法を説明する図である。
【図７】ストラクチャUの初期値U_initの生成方法を説明する図である。
【図８】バイリニア補間による補間方法を示す図である。
【図９】サポート制限部が行うサポート制限処理を説明する図である。
【図１０】反復更新処理を説明するフローチャートである。
【図１１】本発明を適用した情報処理装置の第２の構成例を示すブロック図である。
【図１２】YUV空間について反復更新処理を行うことを説明する図である。
【図１３】本発明を適用した情報処理装置の第３の構成例を示すブロック図である。
【図１４】糊代処理を説明する第１の図である。
【図１５】糊代処理を説明する第２の図である。
【図１６】オリジナル画像と拡張画像の各サイズの定義を説明する図である。
【図１７】拡張ブロックの幅の設定方法を説明する図である。
【図１８】拡張ブロックの高さの設定方法を説明する図である。
【図１９】拡張ブロックの位置の設定方法を説明する図である。
【図２０】拡張ストラクチャをつなぎ合わせて復元画像を生成する処理を説明する第１の図である。
【図２１】拡張ストラクチャをつなぎ合わせて復元画像を生成する処理を説明する第２の図である。
【図２２】拡張ストラクチャをつなぎ合わせて復元画像を生成する処理を説明する第３の図である。
【図２３】拡張ストラクチャをつなぎ合わせて復元画像を生成する処理を説明する第４の図である。
【図２４】拡張ストラクチャをつなぎ合わせて復元画像を生成する処理を説明する第５の図である。
【図２５】糊代処理の効果について説明する第１の図である。
【図２６】糊代処理の効果について説明する第２の図である。
【図２７】コンピュータの構成例を示すブロック図である。
【発明を実施するための形態】
【００１８】
以下、本発明を実施するための形態（以下、実施の形態という）について説明する。なお、説明は以下の順序で行う。
１．第1の実施の形態
２．変形例１
３．第２の実施の形態
４．変形例２
【００１９】
＜１．第１の実施の形態＞
［情報処理装置の構成］
図１は、本発明の第１の実施の形態である情報処理装置１の構成例を示している。
【００２０】
この情報処理装置１には、JPEG（Joint Photographic Experts Group）圧縮により圧縮された画像であって、撮像時の手振れによりブレが生じているブレ画像が入力される。
【００２１】
情報処理装置１は、入力されるブレ画像を、複数のブロックgに分割し、各ブロック毎に、ブロックgに生じているブレ（の方向や長さ）を表す点広がり関数h、及びブロックgの平坦部とエッジ等の大振幅の成分を表すストラクチャfを初期推定する。
【００２２】
そして、情報処理装置１は、各ブロック毎に初期推定した点広がり関数h及びストラクチャfを、それぞれ、真の点広がり関数、及び真のストラクチャに近づくように、反復して更新する。
【００２３】
なお、以下において、k回だけ更新したときの点広がり関数hを、点広がり関数hkというとともに、k回だけ更新したときのストラクチャfを、ストラクチャfkという。
【００２４】
また、各ブロック毎の点広がり関数hkを区別する必要がない場合、単に、点広がり関数Hkという。また、各ブロック毎のストラクチャfkを区別する必要がない場合、単に、ストラクチャUkという。さらに、各ブロックgを区別する必要がない場合、単に、ブレ画像Gという。
【００２５】
情報処理装置１は、H_init生成部２１、サポート制限部２２、乗算部２３、加算部２４、重心補正（Center of gravity revision）部２５、H生成部２６、conv部２７、処理部２８、残差生成部２９、corr部３０、corr部３１、平均化(average)部３２、減算部３３、U_init生成部３４、U生成部３５、乗算部３６、及びトータルバリエーション(Total Variation)フィルタ３７により構成される。
【００２６】
H_init生成部２１には、ブレ画像Gが入力される。H_init生成部２１は、入力されたブレ画像Gを構成する画素の輝度値(Y成分)から、ケプストラム上で特徴点を検出し、PSFの直線推定を行い、その直線推定により得られた初期推定PSFを、点広がり関数Hの初期値H_init(=H0)として、サポート制限部２２、及びH生成部２６に供給する。
【００２７】
なお、H_init生成部２１は、入力されたブレ画像Gを構成する画素のY成分の他、R成分、G成分、B成分、並びに、R成分、G成分及びB成分それぞれを加算して得られるR+G+B成分から、ケプストラム上で特徴点を検出し、PSFの直線推定を行うようにすることが可能である。
【００２８】
サポート制限部２２は、H_init生成部２１からの初期値H_init(=初期推定PSF)の近傍のみを更新対象領域として更新させるためのサポート制限情報を生成し、乗算部２３に供給する。
【００２９】
ここで、サポート制限情報とは、初期推定PSFの近傍のみを更新対象領域とし、更新対象領域以外の領域ではゼロ固定とするマスク情報をいう。
【００３０】
乗算部２３は、サポート制限部２２からのサポート制限情報に基づいて、減算部３３からの減算結果Uko(G-Hk○Uk)-mean(Hk)のうち、初期推定PSFの周辺に存在する減算結果に対応するもののみを抽出し、加算部２４に供給する。
【００３１】
すなわち、例えば、乗算部２３は、サポート制限部２２からのサポート制限情報と、対応する、減算部３３からの減算結果Uko(G-Hk○Uk)-mean(Hk)どうしを乗算して、PSFの周辺に存在する減算結果に対応するもののみを抽出し、加算部２４に供給する。
【００３２】
なお、oは相関演算を表し、○は畳込み演算を表している。また、mean(Hk)は、点広がり関数Hkの平均値を表している。
【００３３】
加算部２４は、乗算部２３からの値Uko(G-Hk○Uk)-mean(Hk)のうち、値Uko(G-Hk○Uk)に、未定乗数λを乗算する。そして、加算部２４は、その結果得られる値λUko(G-Hk○Uk)-mean(Hk)に、H生成部２６からの点広がり関数Hkを加算し、その結果得られる値Hk+λUko(G-Hk○Uk)-mean(Hk)に対して、Lagrangeの未定乗数法を適用し、未定乗数λの解として値aを算出する。
【００３４】
加算部２４は、Lagrangeの未定乗数法により算出された値aを、値Hk+λUko(G-Hk○Uk)-mean(Hk)に代入し、その結果得られる値Hk+aUko(G-Hk○Uk)-mean(Hk)を、重心補正部２５に供給する。
【００３５】
これにより、重心補正部２５には、ブレ画像を構成する複数のブロック毎に得られたHk+aUko(G-Hk○Uk)-mean(Hk)=Hk+ΔHkが供給される。
【００３６】
重心補正部２５は、点広がり関数Hk+△Hk（但し、△Hkは更新分）の重心を、バイリニア補間により、画面の中心（点広がり関数の初期値H_initの重心）に移動させ、重心を移動させた点広がり関数Hk+△Hkを、H生成部２６に供給する。なお、詳細は、図８を参照して後述する。
【００３７】
H生成部２６は、H_init生成部２１からの初期値H_initを、点広がり関数H0として、加算部２４、conv部２７、及びcorr部３０に供給する。
【００３８】
また、H生成部２６は、重心補正部２５からの点広がり関数Hk+△Hkを、更新後の点広がり関数Hk+1として、加算部２４、conv部２７、及びcorr部３０に供給する。
【００３９】
なお、H生成部２６は、重心補正部２５から、点広がり関数Hk-1を更新して得られる点広がり関数Hk-1+△Hk-1が供給された場合、同様にして、重心補正部２５からの点広がり関数Hk-1+△Hk-1を、更新後の点広がり関数Hkとして、加算部２４、conv部２７、及びcorr部３０に供給する。
【００４０】
conv部２７は、H生成部２６からの点広がり関数Hkと、U生成部３５からのストラクチャUkとの畳み込み演算を行い、その演算結果Hk○Ukを、処理部２８に供給する。なお、演算結果Hk○Ukは、点広がり関数Hkを用いてストラクチャUkにブレを生じさせた画像となる。
【００４１】
処理部２８は、入力されるブレ画像Gから、conv部２７からの演算結果Hk○Ukを減算し、その減算結果G-Hk○Ukを、残差生成部２９に供給する。
【００４２】
残差生成部２９は、処理部２８からの減算結果G-Hk○Ukを、残差Ekとして、corr部３０及びcorr部３１に供給する。
【００４３】
corr部３０は、残差生成部２９からの残差Ekと、H生成部２６からの点広がり関数Hkの相関演算を行い、その演算結果Hko(G-Hk○Uk)を、乗算部３６に供給する。
【００４４】
corr部３１は、残差生成部２９からの残差Ekと、U生成部３５からのストラクチャUkの相関演算を行い、その演算結果Uko(G-Hk○Uk)を、減算部３３に供給する。
【００４５】
平均化部３２には、H生成部２６から、conv部２７、処理部２８、残差生成部２９、及びcorr部３１を介して、点広がり関数Hkが供給される。
【００４６】
平均化部３２は、corr部３１からの点広がり関数Hkの平均値mean(Hk)を算出し、減算部３３に供給する。
【００４７】
減算部３３は、corr部３１から供給される演算結果Uko(G-Hk○Uk)から、平均化部３２からのmean(Hk)を減算し、その結果得られる減算結果Uko(G-Hk○Uk)-mean(Hk)を、乗算部２３に供給する。
【００４８】
U_init生成部３４は、H_init生成部２１により生成された初期値H_init(=初期推定PSF)を用いて、入力されるブレ画像G（ブロックg）を、初期推定PSFサイズで縮小し、畳み込んだPSFを１点に戻すことにより、ブレ画像Gのブレが除去（低減）された画像であって、縮小された画像を生成する。
【００４９】
また、U_init生成部３４は、縮小された画像を、初期推定PSFサイズで拡大することにより、拡大によりボケた画像であって、ブレが除去された画像を生成し、ストラクチャUの初期値U_initに設定して、U生成部３５に供給する。
【００５０】
なお、後述する図７を参照して、U_init生成部３４が、初期値U_initを設定する方法の詳細を説明する。
【００５１】
U生成部３５は、トータルバリエーションフィルタ３７からのストラクチャUk+1を、conv部２７、corr部３１及び乗算部３６に供給する。
【００５２】
また、U生成部３５には、トータルバリエーションフィルタ３７からストラクチャUkが供給される。U生成部３５は、トータルバリエーションフィルタ３７からのストラクチャUkを、conv部２７、corr部３１及び乗算部３６に供給する。
【００５３】
乗算部３６は、corr部３０からの演算結果Hk○(G-Hk○Uk)に、U生成部３５からのストラクチャUkを乗算し、その乗算結果Uk{Hk○(G-Hk○Uk)}を、更新後のストラクチャとして、トータルバリエーションフィルタ３７に供給する。
【００５４】
トータルバリエーションフィルタ３７は、乗算部３６からの乗算結果Uk{Hk○(G-Hk○Uk)}を、ストラクチャ成分とテクスチャ成分に分離し、分離により得られるストラクチャ成分を、次の更新対象であるストラクチャUk+1として、U生成部３５に供給する。
【００５５】
上述したように、conv部２７乃至corr部３１、U生成部３５、及びトータルバリエーションフィルタ３７等は、H_init生成部２１により生成された点広がり関数Hの初期値H_init(=H0)を用いて、Richardson-Lucy法によるストラクチャU0の更新を行う。
【００５６】
また、conv部２７乃至corr部３１、U生成部３５、及びトータルバリエーションフィルタ３７等は、点広がり関数Hk-1が更新された場合、更新により得られた最新の点広がり関数Hkを用いて、Richardson-Lucy法によるストラクチャUkの更新を行う。
【００５７】
Richardson-Lucy法では、ストラクチャUkの更新により得られたストラクチャUk+1について、増幅されたノイズや発生したリンギングを、トータルバリエーションフィルタ３７による、ストラクチャ成分（structure）とテクスチャ成分(texture)との分離により落とすので、ノイズとリンギングを大幅に抑制することができる。
【００５８】
ここで、ストラクチャ成分とは、画像がほとんど変化しない平坦部、画像が緩やかに変化する傾斜部、被写体の輪郭、エッジなど、画像の骨格を構成する成分を表す。また、被写体の細かな模様など画像のディテイル（detail）を構成する部分を表す。従って、ストラクチャ成分のほとんどが空間周波数の低い低周波成分に含まれ、テクスチャ成分のほとんどが空間周波数の高い高周波成分に含まれる。
【００５９】
さらに、トータルバリエーションフィルタ３７については、「Structure-Texture Image Decomposition Modeling,Algorithms, and Parameter Selection(Jean-Fran_cois Aujol)」に詳細に記載されている。
【００６０】
なお、トータルバリエーションフィルタ３７には、ストラクチャ成分とテクスチャ成分との境界を示すフィルタ閾値がパラメータのひとつとして設定され、そのパラメータを調整することにより、出力されるストラクチャ成分(structure)に、より多くのディテイル（detail）を含ませることが可能である。
【００６１】
しかし、ストラクチャUkと、後述する点広がり関数Hkとを、交互に反復的に更新する反復更新処理（図１０において後述）の初期段階では、点広がり関数Hkが充分に更新されていないため、点広がり関数Hkには多くの誤差を含むことがある。
【００６２】
したがって、誤差を多く含む点広がり関数Hkを用いてストラクチャUkの更新を行うと、更新により得られるストラクチャUk+1には、点広がり関数Hkに含まれる誤差に応じたリンギング等が発生してしまう。
【００６３】
同様に、ストラクチャUkについても、点広がり関数Hk-1に含まれる誤差に応じたリンギング等が発生している。
【００６４】
そして、リンギング等が発生したストラクチャUkを用いて更新される点広がり関数Hkについても同様に、悪影響を及ぼしてしまう。
【００６５】
そこで、点広がり関数Hkが充分に更新されていない間は、トータルバリエーションフィルタ３７に設定されるフィルタ閾値を高く設定しておき、より強力に、リンギングとノイズを落とし、更新されるストラクチャUが、リンギング等の発生により劣化しないようにすることが可能である。
【００６６】
そして、ある程度、点広がり関数Hkが更新されて、より真の点広がり関数に近づくと、トータルバリエーションフィルタ３７に設定されるフィルタ閾値を低く設定して、ディテイルの復元をより真の点広がり関数Hkで行うようにする。
【００６７】
すなわち、点広がり関数Hkが充分に更新されていない間は、トータルバリエーションフィルタ３７から出力されるストラクチャUkを構成する画素のうち、隣接する画素どうしの輝度の差分絶対値和を表すトータルバリエーション（total variation）が小さくなるようにフィルタ閾値を高く設定する。
【００６８】
また、ある程度、点広がり関数Hkが更新されて、より真の点広がり関数に近づくと、トータルバリエーションフィルタ３７から出力されるストラクチャUkのトータルバリエーションがこれ以上小さくならないようにフィルタ閾値を低く設定する。
【００６９】
これにより、トータルバリエーションフィルタ３７では、ストラクチャUkに含まれるエッジを残しつつ、ストラクチャUkを平滑化することにより、ストラクチャUに含まれるリンギングとノイズを落とすことが可能となる。
【００７０】
なお、第１の実施の形態では、点広がり関数Hkの更新の程度に拘わらず、トータルバリエーションフィルタ３７は、フィルタ閾値を充分低くした状態で、ストラクチャUkについて増幅されたノイズや発生したリンギングを、トータルバリエーションフィルタ３７による、ストラクチャ成分とテクスチャ成分との分離により落とすように構成されているものとする。
【００７１】
H生成部２６乃至残差生成部２９、corr部３１、及びU生成部３５等は、ストラクチャUkの初期値U_initを用いて、最急降下法（landweber法）による点広がり関数Hkの更新を行う。
【００７２】
また、H生成部２６乃至残差生成部２９、corr部３１、及びU生成部３５等は、ストラクチャUk-1が更新された場合、更新により得られた最新のストラクチャUkを用いて、最急降下法（landweber法）による点広がり関数Hkの更新を行う。
【００７３】
以下、ストラクチャUkとして、ブレ画像を構成する複数のブロックのうちの所定のブロックgのストラクチャfk（更新により得られた最新のストラクチャ）を用いて、最急降下法による点広がり関数Hkの更新として、所定のブロックgの点広がり関数hkを更新する処理を説明する。
【００７４】
ここで、現時点のストラクチャfkをfとし、現時点の点広がり関数hkをhとすると、コスト関数は、次式（１）により与えられる。
【００７５】
【数１】
2011128978.tif 000003
【００７６】
なお、式（１）において、||・||はノルムを表しており、*は乗算を表している。
【００７７】
現時点のストラクチャfを固定した場合、式（１）のe2を最小にすることを目的として、次式（２）のように、式（１）を変数h(点広がり関数h)により偏微分して、降下方向を求める。
【００７８】
【数２】
2011128978.tif 000004
【００７９】
現時点での点広がり関数hを、式（２）により求めた降下方向に沿って検索していくと、式（２）の最小値が存在する。現在の点広がり関数hに対して、次式（３）のように、式（２）により求めた降下方向に、ステップサイズλだけ進めさせると、更新された点広がり関数hを求めることができる。
【００８０】
【数３】
2011128978.tif 000005
【００８１】
なお、式（２）及び式（３）において、白丸（。）は相関演算子を表しており、バツ印（×）を白丸（○）で囲んだ記号は、畳み込み演算を表している。
【００８２】
また、式（３）において、点広がり関数hk+1は、更新後の点広がり関数を表しており、点広がり関数hkは、現時点での点広がり関数h（更新前の点広がり関数）を表している。さらに、ストラクチャfkは、現時点でのストラクチャfを表している。
【００８３】
しかし、点広がり関数hk+1は、ブレ画像を構成する複数のブロックそれぞれの点広がり関数hk+1(i)において、Σii=1h(i)=1となるように強制されるため、H生成部２６乃至残差生成部２９、corr部３１、及びU生成部３５等により形成されるループで正規化される。したがって、点広がり関数hkの更新分△hkが、点広がり関数hkと同じ符号になったとき、正規化の結果、点広がり関数hk+1は更新前の値hkに戻ってしまう。
【００８４】
式（３）に、
【数４】
2011128978.tif 000006
の拘束を加えて、Lagrange(ラグランジュ)の未定乗数法を適用すると、次式（４）が導出される。
【００８５】
【数５】
2011128978.tif 000007
【００８６】
なお、式（４）において、mean(h)とは、hkの平均値を示している。mean(h)は、減算部３３により減算される。
【００８７】
また、丸め誤差により、点広がり関数hkを更新しているうちに、重心が画面中心から外れてしまうことがあるため、不正確な残差eが得られてしまい、ストラクチャfkの更新（復元)に悪影響を及ぼしてしまう。したがって、重心補正部２５は、１画素（pix）以下のバイリニア補間で、更新後の点広がり関数hk+△hk（=hk+1）の重心が画面中心にくるように、平行移動を行っている。
【００８８】
情報処理装置１は、上述したように、ブレ画像を構成するブロックから、ブレを除去したブロックを表すものとして、更新後のストラクチャUkを算出する。そして、情報処理装置１は、算出したストラクチャUkそれぞれを、１枚の画像となるように構成することにより、ブレが除去された原画像を取得する。
【００８９】
［初期推定PSFの推定方法］
次に、図２を参照して、H_init生成部２１が行う初期推定PSFの推定方法の概要を説明する。
【００９０】
ブレ画像は、ブレが生じていない原画像（ブレ画像に対応する原画像）とPSFとの畳み込みによりモデル化することができる。
【００９１】
直線PSFのスペクトラムが、ブレの長さを周期的に零点に落ち込む特徴を持ち、原画像とPSFの畳み込みにより、ブレ画像のスペクトルもブレの長さを周期に零点に落ち込む。
【００９２】
その零点に落ち込む間隔と方向を求めることにより、PSFの直線ブレの長さと方向を近似することができる。そこで、ブレ画像をFFT(Fast Fourier Transform、高速フーリエ変換)してブレ画像のスペクトラムを算出し、算出したスペクトラムのLog（自然対数）をとることにより、原画像のスペクトラムと、PSFのスペクトラム（MTF）の和に変換する。
【００９３】
ここで必要な情報はMTFのみなので、ブレ画像のスペクトラムに対して多くのパッチを足し合わせて平均化することにより、原画像のスペクトルの特徴が失われて、MTFの特徴のみを表すことが可能となる。
【００９４】
次に、図３乃至図６を参照して、初期推定PSFの具体的な推定方法を説明する。
【００９５】
図３は、ブレ画像についてケプストラムを生成する生成方法を示している。
【００９６】
H_init生成部２１は、入力されるブレ画像を、複数のブロックに分割し、分割した各ブロック毎に、FFT(Fast Fourier Transform、高速フーリエ変換)を行い、各ブロックそれぞれに対応するスペクトルを算出する。
【００９７】
すなわち、例えば、H_init生成部２１は、ブレ画像を分割して得られるブロックを構成する画素のY成分、R成分、G成分、B成分、及びR+G+B成分のうちのいずれかに、FFTを行い、対応するスペクトルを算出する。
【００９８】
また、H_init生成部２１は、各ブロックそれぞれに対応するスペクトルの２乗和について自然対数をとり、JPEG圧縮時に生じた歪みを除去するJPEG除去フィルタにより、歪みを除去する。これは、JPEG圧縮時に生じた歪みにより、スペクトル精度に影響を及ぼしてしまうことを防止することによる。
【００９９】
さらに、H_init生成部２１は、JPEG除去フィルタによる歪み除去後の、各ブロックgそれぞれに対応するスペクトルgsの２乗和の自然対数logΣ|gs|2に対して、ブレによる周期的な落ち込みを際立たせるために、HPF（high pass filter）によるフィルタリング処理を行い、ブレによるなだらかな変化を低減させる。
【０１００】
H_init生成部２１は、移動平均で差し引いた残差成分、すなわち、HPFによるフィルタリング処理が行われた後の、スペクトルの２乗和の自然対数logΣ|gs|2に対して、IFFT(Inverse Fast Fourier Transform、逆高速フーリエ変換)を行い、一種のケプストラムを生成する。
【０１０１】
より具体的には、H_init生成部２１は、HPFによるフィルタリング処理が行われた後の、スペクトルの２乗和の自然対数logΣ|gs|2において、正負の符号を逆転させる。そして、H_init生成部２１は、正負の符号が逆転されたlogΣ|gs|2のうち、負の符号を有する部分を破棄し、正の符号を有する部分のみに基づいて、一種のケプストラムを生成する。
【０１０２】
そして、H_init生成部２１は、生成したケプストラムに対して、輝点の最大値を算出する。
【０１０３】
すなわち、H_init生成部２１は、生成したケプストラムのうち、最大の値を有するケプストラムを、輝点の最大値として算出する。
【０１０４】
次に、図４は、生成したケプストラムに対して、輝点の最大値を算出する算出方法を示している。
【０１０５】
H_init生成部２１は、図４Aに示すように、周りの画素と比較して、輝度が大きい複数の画素の塊に強く反応するスポットフィルタによるフィルタリング処理を、生成したケプストラムに対して行う。
【０１０６】
また、H_init生成部２１は、図４Bに示すように、図４Aに示したスポットフィルタによるフィルタリング処理後のケプストラムから、最大値を含む一山を、スポットとして取り出す。
【０１０７】
さらに、H_init生成部２１は、図４Cに示すように、スポット位置を決定する。なお、スポット位置とは、最大値を含む一山を構成する複数のケプストラムからなるスポットの重心位置を表す。
【０１０８】
次に、図５は、初期推定PSFの推定が成功したか否かを判定する判定方法を説明する。なお、初期推定PSFの推定方法については、後述する図６を参照して説明する。
【０１０９】
輝点は原点対称なので、原点対称位置にもうひとつの特徴点が存在する。すなわち、特徴点として、原点を対称とする２つのスポットが存在する。
【０１１０】
この２つのスポットに接する最小正方形範囲内で閾値を超えたものが存在する場合、すなわち、最小正方形範囲内で、閾値を超える値を有するケプストラムが存在する場合、H_init生成部２１は、初期推定PSFの初期推定が失敗したと判定する。
【０１１１】
この場合、H_init生成部２１は、初期推定した初期推定PSFを、ブレの分布がガウス分布（正規分布）に従うPSFに近似し、その結果得られるPSFを、初期値H_initに設定する。
【０１１２】
また、２つのスポットに接する最小正方形範囲内で閾値を超えたものが存在しない場合、すなわち、最小正方形範囲内で、閾値を超える値を有するケプストラムが存在しない場合、H_init生成部２１は、初期推定PSFの初期推定が成功したと判定し、初期推定PSFを初期値H_initに設定する。
【０１１３】
次に、図６は、２つのスポットに基づいて、初期推定PSFを推定（生成）する推定方法を示している。
【０１１４】
２つのスポットに接する最小正方形範囲内で閾値を超えたものが存在しない場合、H_init生成部２１は、図６に示すように、スポット位置を原点対称に結ぶ直線を、初期推定PSFとして生成し、初期値H_initに設定する。
【０１１５】
［ストラクチャUkの初期値U_initの生成方法］
次に、図７を参照して、U_init生成部３４が行う、ストラクチャUkの初期値U_initの生成方法を説明する。
【０１１６】
U_init生成部３４は、入力されるブレ画像を、初期推定PSFのサイズで縮小することにより縮小画像を生成し、生成した縮小画像を、初期推定PSFのサイズで拡大することにより拡大画像を生成する。そして、生成した拡大画像を、ストラクチャ成分とテクスチャ成分に分離し、分離により得られたストラクチャ成分を、ストラクチャUの初期値U_initとして、U生成部３５に供給する。
【０１１７】
すなわち、例えば、U_init生成部３４は、入力されるブレ画像を構成するブロックを、H_init生成部２１から供給される、ブロックの初期推定PSFを１点に縮小する縮小サイズと同一の縮小サイズで縮小することにより、ブロックに生じているブレが除去（低減）された縮小ブロックを生成する。
【０１１８】
そして、U_init生成部３４は、生成した縮小ブロックを、１点に縮小された初期推定PSFを、元の初期推定PSFに拡大する拡大サイズと同一の拡大サイズで拡大することにより、拡大によるボケが生じているが、ブレは生じていない拡大ブロックを生成する。
【０１１９】
U_init生成部３４は、生成した拡大ブロックを、初期値U_init（ストラクチャU0）として、U生成部３５に供給する。
【０１２０】
［点広がり関数の重心の補正方法］
次に、図８を参照して、重心補正部２５が行う、重心を補正する補正方法を説明する。
【０１２１】
図８は、バイリニア補間による補間方法を示している。
【０１２２】
上述したように、H生成部２６乃至残差生成部２９、corr部３１、及びU生成部３５等が、点広がり関数Hkを更新しているうちに、丸め誤差により、重心が画面中心から外れてしまうことがあるため、重心補正部２５は、図８に示すように、バイリニア補間により、点広がり関数Hk+△Hkの重心が画面中心にくるように平行移動を行う。
【０１２３】
［サポート制限処理］
次に、図９を参照して、サポート制限部２２が行うサポート制限処理を説明する。
【０１２４】
H生成部２６乃至残差生成部２９、corr部３１、及びU生成部３５等が、点広がり関数Hkを更新するときに、更新分の△Hkの自由度が高く、図９Aに示すように、真のPSF(点広がり関数)から離れた場所に、更新後の点広がり関数Hk+△Hkが表すブレが正確に反映されていない偽画素が現れる。そこで、サポート制限部２２は、図９Bに示すように、初期推定PSFの近傍だけ更新を許可し、初期推定PSFの近傍以外の領域では、更新分△Hkに画素が存在しても、マスクすることで、初期推定PSFの近傍だけを更新させるように、サポート(support)制限を加えることとしている。
【０１２５】
ところで、点広がり関数Hkの更新ループにおいて、ストラクチャUkの更新分△Ukは徐々に小さくなり、ある程度小さくなると、残差Ek=G-Hk*(Uk+△Uk)が飽和してしまい（残差Eが殆ど変化しなくなってしまい）、点広がり関数Hkの更新が停止する。したがって、トータルバリエーションフィルタ３７に設定されたフィルタ閾値を調整することにより、意図的に残差Ekを下げて（小さくして）、それをトリガにして、点広がり関数Hkの更新も再開させる。
【０１２６】
また、トータルバリエーションフィルタ３７において、最終出力がされた場合には、フィルタ閾値を低くする（逓減させる）ことで、ストラクチャ出力によるディテイル不足を克服することが可能となる。
【０１２７】
点広がり関数Hkの更新時に使用するストラクチャUkの情報は、輝度Y（R成分、G成分、及びB成分それぞれに対する重み付けによる乗算で得られる乗算結果の総和を表すY成分）の他に、R/G/B３チャンネルの和（R成分、G成分、及びB成分の総和）を使用することもできる。輝度Yだけで更新するときとの違いは、R/Bチャンネルだけブレが反映されるエッジが存在するようなブレ画像に対しても、Gチャンネルと同様に大きなフィードバックが得られることである。
【０１２８】
また、点広がり関数Hkの更新時に使用するストラクチャUkの情報は、R成分、G成分、及びB成分を使用することができる。
【０１２９】
［反復更新処理］
次に、図１０のフローチャートを参照して、情報処理装置１が行う反復更新処理を説明する。
【０１３０】
なお、反復更新処理においては、点広がり関数HkとストラクチャUkとを別々に更新していくのではなく、点広がり関数Hk及びストラクチャUkを、互いの初期値に基づいて、交互に更新していくアルゴリズムである。
【０１３１】
ステップＳ３１及びステップＳ３２において、初期値H_init，初期値U_initの初期推定、及び、各パラメータ、グローバル変数等の初期化を行う。
【０１３２】
すなわち、例えば、ステップＳ３１において、H_init生成部２１は、入力されたブレ画像Gから、ケプストラム上で特徴点を検出し、PSFの直線推定を行い、その直線推定により得られた初期推定PSFを、点広がり関数Hの初期値H_initに設定して、サポート制限部２２、及びH生成部２６に供給する。
【０１３３】
ステップＳ３２において、U_init生成部３４は、H_init生成部２１により設定された初期値H_init(=初期推定PSF)を用いて、入力されるブレ画像を、初期推定PSFサイズで縮小し、畳み込んだPSFを１点に戻すことにより、ブレ画像のブレが除去された画像であって、縮小された画像を生成する。
【０１３４】
また、U_init生成部３４は、縮小された画像を、初期推定PSFサイズで拡大することにより、補間によりボケた画像であって、ブレが除去された画像を生成し、ストラクチャUkの初期値U_initに設定して、U生成部３５に供給する。
【０１３５】
すなわち、例えば、U_init生成部３４は、入力されるブレ画像を構成するブロックを、H_init生成部２１から供給される、ブロックの初期推定PSFを１点に縮小する縮小サイズと同一の縮小サイズで縮小することにより、ブロックに生じているブレが除去（低減）された縮小ブロックを生成する。
【０１３６】
そして、U_init生成部３４は、生成した縮小ブロックを、１点に縮小された初期推定PSFを、元の初期推定PSFに拡大する拡大サイズと同一の拡大サイズで拡大することにより、拡大によるボケが生じているが、ブレは生じていない拡大ブロックを生成する。
【０１３７】
U_init生成部３４は、生成した拡大ブロックを、初期値U_init（ストラクチャU0）として、U生成部３５に供給する。
【０１３８】
ストラクチャUk及び点広がり関数Hkの両方とも正確にわかっていない状況の中で、ステップＳ３３において、ストラクチャUkは、最新の点広がり関数Hkの情報を用いて更新され、ステップＳ３４において、点広がり関数Hkは、最新のストラクチャUkの情報を用いて更新される。
【０１３９】
この繰り返しにより、ストラクチャUkと点広がり関数Hkとを交互に更新していくと、ストラクチャUkは、より真のストラクチャUへ、点広がり関数Hkは、より真の点広がり関数Hへと収束していく。
【０１４０】
すなわち、ステップＳ３３において、conv部２７乃至corr部３１、U生成部３５、及びトータルバリエーションフィルタ３７等は、点広がり関数Hkの初期値H_init（=初期推定PSF）を用いて、従来のRichardson-Lucy法によるストラクチャU0の更新を行う。
【０１４１】
ステップＳ３３において、conv部２７は、H生成部２６からの点広がり関数Hkの初期値H_initである点広がり関数H0と、U生成部３５からのストラクチャU0との畳み込み演算を行い、その演算結果H0○U0を、処理部２８に供給する。
【０１４２】
処理部２８は、入力されるブレ画像Gから、conv部２７からの演算結果H0○U0を減算し、その減算結果G-H0○U0を、残差生成部２９に供給する。
【０１４３】
残差生成部２９は、処理部２８からの減算結果G-H0○U0を、corr部３０及びcorr部３１に供給する。
【０１４４】
corr部３０は、残差生成部２９からの減算結果G-H0○U0と、H生成部２６からの点広がり関数H0との相関演算を行い、その演算結果H0o(G-H0○U0)を、乗算部３６に供給する。
【０１４５】
乗算部３６は、corr部３０からの演算結果H0o(G-H0○U0)に、U生成部３５からのストラクチャU0を乗算し、その乗算結果U0{H0o(G-H0○U0)}を、更新後のストラクチャとして、トータルバリエーションフィルタ３７に供給する。
【０１４６】
トータルバリエーションフィルタ３７は、乗算部３６からの乗算結果U0{H0o(G-H0○U0)}に対して、増幅されたノイズや発生したリンギングを抑制する処理を行う。
【０１４７】
そして、トータルバリエーションフィルタ３７は、その処理により得られた、乗算結果U0{H0o(G-H0○U0)}のストラクチャ成分及びテクスチャ成分のうち、ストラクチャ成分を、U生成部３５に供給する。
【０１４８】
U生成部３５は、トータルバリエーションフィルタ３７から供給されるストラクチャ成分を、次のストラクチャの更新対象であるストラクチャU1として取得する。
【０１４９】
そして、U生成部３５は、取得したストラクチャU1をさらに更新するために、ストラクチャU1を、conv部２７、corr部３１、及び乗算部３６に供給する。
【０１５０】
ステップＳ３４において、H生成部２６乃至残差生成部２９、corr部３１、及びU生成部３５等は、最急降下法により、ストラクチャUkの初期値U_initを用いて、点広がり関数H0の更新を行う。
【０１５１】
なお、上述したステップＳ３３において、残差生成部２９は、処理部２８からの減算結果G-H0○U0を、corr部３０の他、corr部３１に供給している。
【０１５２】
ステップＳ３４では、corr部３１は、残差生成部２９からの減算結果G-H0○U0と、U生成部３５からのストラクチャU0との相関演算を行い、その演算結果U0o(G-H0○U0)を、減算部３３に供給する。
【０１５３】
また、corr部３１は、H生成部２６から、conv部２７、処理部２８、及び残差生成部２９を介して供給された点広がり関数H0を、平均化部３２に供給する。
【０１５４】
平均化部３２は、corr部３１からの点広がり関数H0の平均値mean(H0)を算出し、減算部３３に供給する。
【０１５５】
減算部３３は、corr部３１から供給される演算結果U0o(G-H0○U0)から、平均化部３２からのmean(H0)を減算し、その結果得られる減算結果U0o(G-H0○U0)-mean(H0)を、乗算部２３に供給する。
【０１５６】
乗算部２３は、サポート制限部２２からのサポート制限情報に基づいて、減算部３３からの減算結果U0o(G-H0○U0)-mean(H0)のうち、初期推定PSFの周辺に存在する減算結果に対応するもののみを抽出し、加算部２４に供給する。
【０１５７】
加算部２４は、乗算部２３からの値Uko(G-Hk○Uk)-mean(Hk)のうち、値Uko(G-Hk○Uk)に、未定乗数λを乗算する。そして、加算部２４は、その結果得られる値λUko(G-Hk○Uk)-mean(Hk)に、H生成部２６からの点広がり関数Hkを加算し、その結果得られる値Hk+λUko(G-Hk○Uk)-mean(Hk)に対して、Lagrangeの未定乗数法を適用し、未定乗数λの解として値aを算出する。
【０１５８】
加算部２４は、Lagrangeの未定乗数法により算出された値aを、値Hk+λUko(G-Hk○Uk)-mean(Hk)に代入し、その結果得られる値Hk+aUko(G-Hk○Uk)-mean(Hk)を、重心補正部２５に供給する。
【０１５９】
これにより、重心補正部２５には、ブレ画像を構成する複数のブロック毎に得られたH0+aU0o(G-H0○U0)-mean(H0)=H0+ΔH0が供給される。
【０１６０】
重心補正部２５は、点広がり関数H0+△H0の重心を、バイリニア補間により、画面の中心（点広がり関数の初期値H_initの重心）に移動させ、重心を移動させた点広がり関数H0+△H0を、H生成部２６に供給する。
【０１６１】
H生成部２６は、重心補正部２５からの点広がり関数H0+△H0を、更新後の点広がり関数H1として取得する。
【０１６２】
そして、H生成部２６は、取得した点広がり関数H1をさらに更新するために、点広がり関数H1を、加算部２４、conv部２７、及びcorr部３０に供給する。
【０１６３】
ステップＳ３５において、反復更新処理は終了するか否かを判定する。すなわち、例えば、更新後のストラクチャUk（又は点広がり関数Hkの少なくとも一方）は収束したか否かを判定する。そして、更新後のストラクチャUkが収束していないと判定された場合、処理はステップＳ３３に戻る。
【０１６４】
なお、更新後のストラクチャUkが収束したか否かは、例えば、残差生成部２９により、ブレ画像を構成する複数のブロックそれぞれに対応する値G-Hk○Uk（=Ek）の２乗和Σ|Ek|2が、所定の値未満であるか否かに基づいて判定される。
【０１６５】
また、トータルバリエーションフィルタ３７が、乗算部３６からのストラクチャUkを構成する画素のうち、隣接画素どうしの輝度の差分絶対値和を表すトータルバリエーションが、増加から減少に転じたか否かに基づいて判定するようにしてもよい。
【０１６６】
ステップＳ３３では、前回のステップＳ３４の処理による更新後の点広がり関数Hk（例えば、H1）を用いて、前回のステップＳ３３の処理による更新後のストラクチャUk（例えば、U1）の更新を、従来のRichardson-Lucy法により行う。
【０１６７】
すなわち、ステップＳ３３では、conv部２７乃至corr部３１、U生成部３５、及びトータルバリエーションフィルタ３７等は、前回のステップＳ３４の処理による更新後の点広がり関数Hk（例えば、H1）を用いて、従来のRichardson-Lucy法によるストラクチャUk（例えば、U1）の更新を行う。
【０１６８】
ステップＳ３３の処理の終了後、ステップＳ３４では、前回のステップＳ３３の処理による更新後のストラクチャUk（例えば、U1）を用いて、前回のステップＳ３４の処理による更新後の点広がり関数Hk（例えば、H1）の更新を、最急降下法により行う。
【０１６９】
すなわち、ステップＳ３４では、H生成部２６乃至残差生成部２９、corr部３１、及びU生成部３５等は、最急降下法により、前回のステップＳ３３の処理による更新後のストラクチャUk（例えば、U1）を用いて、点広がり関数Hk（例えば、H1）の更新を行う。
【０１７０】
処理は、ステップＳ３４からステップＳ３５に進み、以下、同様の処理が繰り返される。
【０１７１】
なお、ステップＳ３５において、更新されたストラクチャUkが収束していると判定された場合、反復更新処理は終了される。
【０１７２】
以上説明したように、反復更新処理では、残差Ekが小さくなるように、ストラクチャUkと点広がり関数Hkの更新を反復して行うことにより、ストラクチャUkを真のストラクチャUに収束させる（及び点広がり関数Hkを真の点広がり関数Hに収束させる）こととしたので、最終的に得られるストラクチャUkに発生するリンギングやノイズを抑制することが可能となる。
【０１７３】
また、初期値H_initとして得られるPSF（=点広がり関数H0）が不正確な状態からでも、正確なPSF、すなわち、真のPSF又は真のPSFに近いPSFを求めることが可能となる。
【０１７４】
さらに、PSFのサポート制限により、初期値H_init(=初期推定PSF)が初期推定の方向に沿って更新されるため、発散することなく、真のPSF又は真のPSFに近いPSFを求めることが可能となる。
【０１７５】
＜２．変形例１＞
［反復更新処理の変形例］
なお、反復更新処理では、例えば、ステップＳ３１において、初期値H_init（=点広がり関数H0）の推定（生成）に成功した場合には、ステップＳ３３において、初期値H_initでストラクチャU0の更新を行い、ステップＳ３１において、初期値H_initの推定に失敗した場合、ステップＳ３３において、PSFをガウシアン（ガウス分布）により近似し、近似したPSFを初期値H_initとして、ストラクチャU0の更新を行うようにすることが可能である。この場合、初期値H_init(=初期推定PSF)のズレによるストラクチャU0の劣化を防止することができる。
【０１７６】
また、ステップＳ３３では、conv部２７乃至corr部３１、U生成部３５、及びトータルバリエーションフィルタ３７等が、従来のRichardson-Lucy法によるストラクチャUkの更新を行うこととしたが、Richardson-Lucy法による処理を高速化した従来のR-L高速アルゴリズムを用いることとすれば、より迅速に、ストラクチャUkを、真のストラクチャに更新することが可能となる。
【０１７７】
さらに、図１０の反復更新処理において、ステップＳ３５では、更新後のストラクチャUkが収束したか否かに応じて、反復更新処理を終了するか否かを判定することとしたが、これに限定されない。
【０１７８】
すなわち、例えば、ステップＳ３５では、ストラクチャUk及び点広がり関数Hkを所定の回数だけ更新したか否かを判定し、所定の回数だけ更新したと判定された場合に、反復更新処理を終了させるようにしてもよい。なお、所定の回数としては、例えば、精度が低いPSFでもリンギングが発生しない程度の回数か、トータルバリエーションフィルタ３７により僅かに発生したリンギングを取り消すことが出来る程度の回数であることが望ましい。
【０１７９】
［residual deconvolutionの適用方法］
ところで、本発明の第１の実施の形態では、トータルバリエーションフィルタ３７のフィルタ閾値を充分低くした状態で得られるストラクチャUkを最終出力としたが、ブレ画像と更新済みのストラクチャUkを用いて、従来のresidual deconvolutionによる方法を行うことも可能である。
【０１８０】
図１１は、ブレ画像と更新済みのストラクチャUkを用いて、従来のresidual deconvolutionによる方法を行う情報処理装置６１の構成例を示している。
【０１８１】
この情報処理装置６１は、conv部９１、減算部９２、加算部９３、R-Ldeconv部９４、減算部９５、加算部９６、オフセット(offset)部９７、及びゲインマップ（Gain Map）９８により構成される。
【０１８２】
conv部９１には、更新済みのHkと更新済みのUkとが供給される。Conv部９１は、更新済みのHkと、更新済みのUkとの畳込み演算を行い、その結果得られる値Hk○Ukを、減算部９２に供給する。
【０１８３】
減算部９２には、ブレ画像Gが供給される。減算部９２は、供給されるブレ画像Gから、conv部９１からの値Hk○Ukを減算し、その減算結果G-Hk○Ukを、残差成分（residual）として、加算部９３に供給する。
【０１８４】
加算部９３は、減算部９２からの残差成分G-Hk○Ukを正の値にするために、残差成分G-Hk○Ukに、オフセット部９７からのオフセット値とを加算し、その加算結果を、R-Ldeconv部９４に供給する。なお、加算部９３において、残差成分G-Hk○Ukにオフセット値を加算して正の値にするのは、R-Ldeconv部９４による処理において、正の値を対象としていることによる。
【０１８５】
R-Ldeconv部９４は、ゲインマップ（Gain Map）部９８に保持されているゲインマップ、及び更新済みのHkに基づいて、加算部９３からの加算結果に対して、非特許文献１に記載されたresidual deconvolutionを行う。これにより、オフセット値が加算された残差成分のリンギングが抑制される。
【０１８６】
減算部９５は、R-Ldeconv部９４からの処理結果から、加算部９３で加算したものと同一のオフセット値を減算し、リンギングが抑制された残差成分、すなわち、ブレ画像のテクスチャを復元した復元結果を取得する。そして、減算部９５は、取得したテクスチャの復元結果を、加算部９６に供給する。
【０１８７】
加算部９６には、更新済みのストラクチャUkが供給される。加算部９６は、減算部９５からの、テクスチャの復元結果と、供給される更新済みのストラクチャUkとを加算し、その結果得られる、ブレ画像からブレを除去した復元画像を出力する。
【０１８８】
すなわち、例えば、加算部９６は、ブレ画像を構成するブロックに対応する、テクスチャの復元結果と更新済みのストラクチャUkとを加算し、その加算結果として、ブレ画像を構成するブロックから、ブレを除去した復元ブロックを取得する。そして、加算部９６は、ブレ画像を構成するブロックそれぞれに対応する復元ブロックを取得し、取得した復元ブロックそれぞれをつなぎ合わせることにより、復元画像を生成して出力する。
【０１８９】
オフセット部９７は、残差成分G-Hk○Ukを正の数にするために加算されるオフセット値を予め保持している。オフセット部９７は、予め保持しているオフセット値を、加算部９３及び減算部９５に供給する。
【０１９０】
ゲインマップ部９８は、残差成分G-Hk○Ukのゲインを調整するために用いられるゲインマップを予め保持している。
【０１９１】
図１１に示すように、更新済みの点広がり関数PSF（点広がり関数Hk）で更新済みのストラクチャUkにブレを生じさせ、ブレ画像Gとの残差成分（residual成分）G-Hk○Ukに対して、deconvolution(R-Ldeconv部９４による処理)を行い、その結果得られるもの（ブレ画像のテクスチャを復元した復元結果）を、更新済みのストラクチャUkに加算することで、残差のディテイル情報が復元されて、きめ細かい復元結果が得られる。
【０１９２】
［RGB空間以外の色空間への適用方法］
なお、本発明の第１の実施の形態では、RGB空間（R成分、G成分、及びB成分により表される画素により構成されるブレ画像）について反復更新処理を行うこととしたが、YUV空間等のほかの色空間について、同様の反復更新処理を行うことが可能である。
【０１９３】
次に、図１２は、YUV空間について反復更新処理を行うことを説明する図である。
【０１９４】
図１２に示すように、YUV空間において、Yだけ反復更新処理（GSDM,Gradual Structure Deconvolution Method）を適用して正確なPSFを算出した後に、算出した正確なPSFを用いたRichardson-Lucy法等による処理を、リンギングが発生しない程度にU/V成分に対して行ったものを、Yに足し合わせるようにしてもよい。
【０１９５】
なお、上述した第１の実施の形態では、最急降下法を用いて、点広がり関数Hkを更新するとともに、Richardson-Lucy法を用いて、ストラクチャUkを更新するようにしたが、その他、例えば、Richardson-Lucy法を用いて、点広がり関数Hkを更新するとともに、最急降下法を用いて、ストラクチャUkを更新するようにしてもよい。
【０１９６】
＜３．第２の実施の形態＞
［情報処理装置の構成］
次に、図１３を参照して、Richardson-Lucy法を用いて、点広がり関数Hkを更新するとともに、最急降下法を用いて、ストラクチャUkを更新する情報処理装置１２１について説明する。
【０１９７】
図１３は、本発明の第２の実施の形態である情報処理装置１２１を示している。
【０１９８】
なお、この情報処理装置１２１において、図１に示された第１の実施の形態である情報処理装置１の構成要素のうち、共通するものについては同一の符号を付しているので、その説明は適宜省略する。
【０１９９】
すなわち、情報処理装置１２１において、加算部２４に代えて乗算部１５１が、乗算部３６に代えて加算部１５２が、乗算部２３、平均化部３２、及び減算部３３に代えて乗算部１５３が、それぞれ設けられている他は、情報処理装置１と同様に構成されている。
【０２００】
乗算部１５１には、乗算部１５３から、初期推定PSFの周辺の領域に対応する演算結果Uko(G-Hk○Uk)が、H生成部２６から、点広がり関数Hkが、それぞれ供給される。
【０２０１】
乗算部１５１は、乗算部１５３からの演算結果Uko(G-Hk○Uk)と、H生成部２６からの点広がり関数Hkとを乗算し、その結果得られる点広がり関数Hk+1=HkUko(G-Hk○Uk)を、重心補正部２５に供給する。
【０２０２】
加算部１５２には、corr部３０から、演算結果Hko(G-Hk○Uk)が、U生成部３５からストラクチャUkが、それぞれ供給される。
【０２０３】
加算部１５２は、corr部３０からの演算結果Hko(G-Hk○Uk)に、未定乗数λを乗算し、その結果得られる値λHko(G-Hk○Uk)に、U生成部３５からのストラクチャUkとを加算する。そして、加算部１５２は、その結果得られる加算結果Uk+λHko(G-Hk○Uk)(=Uk+1)について、Lagrangeの未定乗数法により、未定乗数λを算出する。
【０２０４】
加算部１５２は、未定乗数λの解として算出された定数aを、加算結果Uk+λHko(G-Hk○Uk)に代入し、その結果得られるストラクチャUk+1=Uk+aHko(G-Hk○Uk)を、トータルバリエーションフィルタ３７に供給する。
【０２０５】
乗算部１５３には、corr部３１から、演算結果Uko(G-Hk○Uk)が、サポート制限部２２から、サポート制限情報が、それぞれ供給される。
【０２０６】
乗算部１５３は、サポート制限部２２からのサポート制限情報に基づいて、corr部３１からの演算結果Uko(G-Hk○Uk)のうち、初期推定PSFの周辺の領域に対応する演算結果のみを抽出し、乗算部１５１に供給する。
【０２０７】
この情報処理装置１２１においても、第１の実施の形態である情報処理装置１と同様の作用効果を奏することが可能である。
【０２０８】
＜４．変形例２＞
第２の実施の形態では、Richardson-Lucy法を用いて、点広がり関数Hkを更新するとともに、最急降下法を用いて、ストラクチャUkを更新するようにしたが、Richardson-Lucy法を用いて、点広がり関数Hk及びストラクチャUkを更新するようにしてもよいし、最急降下法を用いて、点広がり関数Hk及びストラクチャUkを更新するようにしてもよい。
【０２０９】
なお、第１及び第２の実施の形態では、ブレ画像を構成する複数のブロックに対して、反復更新処理を行うようにしたが、ブレ画像そのものを１個のブロックとして、反復更新処理を行うことも可能である。
【０２１０】
［糊代処理］
また、第１及び第２の実施の形態では、例えば、図１４及び図１５に示すように、ブレ画像を複数のブロックに分割し、分割したブロックの範囲を拡張した上で、拡張したブロック毎に、第１の実施の形態である情報処理装置１、又は第２の実施の形態である情報処理装置１２１を用いて反復更新処理を行い、反復更新処理後の複数のブロックをつなぎ合わせることにより、１枚の復元画像を生成する糊代処理を行うようにしてもよい。
【０２１１】
次に、図１４を参照して、ブレ画像を構成する複数のブロックそれぞれに対応するストラクチャUkを生成する処理を説明する。
【０２１２】
図１４に示されるように、ブレ画像を構成する複数のブロック（例えば、図１４に示すG）は、それぞれ、隣接するブロックとの連続性を維持するために、隣接するブロックどうしが、一部分だけ重なり合うサイズとなるように、その範囲が拡張される。これにより、拡張ブロック（例えば、図１４に示す、dummyが付加されたG'）が生成される。
【０２１３】
また、ブレ画像を構成する複数のブロックそれぞれに対応するストラクチャU0（例えば、図１４に示すU）についても、同一のサイズに拡張される。これにより、拡張ストラクチャ（例えば、図１４に示す、dummyが付加されたU'）が生成される。
【０２１４】
次に、拡張ブロック、拡張ストラクチャ、及び拡張ブロックに基づいて生成された点広がり関数H0（例えば、図１４に示すPSF）に基づいて、Richardson-Lucy法により、拡張ストラクチャの更新を行う。
【０２１５】
そして、Richardson-Lucy法による拡張ストラクチャの更新により得られた更新後の拡張ストラクチャ（例えば、図１４に示す、dummyが付加されたupdated U）の拡張した範囲を除去し、元のストラクチャU0のサイズに戻す。
【０２１６】
これにより、ブレ画像を構成する複数のブロックそれぞれに対応するストラクチャとして、隣接するブロックとの連続性が維持されたストラクチャ（例えば、図１４に示すupdated U）を取得し、図１５に示されるように、取得したストラクチャを、それぞれつなぎ合わせることにより、ブレが低減（除去）された復元画像を取得することができる。
【０２１７】
ここで、さらに図１６乃至図２４を参照して、糊代処理の処理方法の例について詳しく説明する。
【０２１８】
なお、以下、復元対象となるブレ画像をオリジナル画像とも称する。また、以下、拡張ブロックを生成するために各ブロックに付加される領域をダミー領域と称する。
【０２１９】
また、以下、図１６の白い領域で示されるオリジナル画像の幅をOrgWidthとし、高さをOrgHeightとする。また、以下、図１６のグレーの領域で示されるダミー領域の幅をOffsetXとし、高さをOffsetYとする。なお、ダミー領域の幅OffsetXおよび高さOffsetYの設定方法の例については後述する。
【０２２０】
さらに、以下、オリジナル画像にダミー領域を付加した画像（以下、拡張画像と称する）の幅をFullWidthとし、高さをFullHeightとする。また、以下、拡張画像の縦方向および横方向の分割数をそれぞれ同じDivNumとする。すなわち、縦DivNum×横DivNum個の拡張ブロックに、拡張画像が分割されるものとする。
【０２２１】
また、以下、拡張画像の座標系について、左上隅の画素を原点（0,0）とし、水平方向をｘ軸方向、垂直方向をｙ軸方向とするとともに、右方向をｘ軸の正の方向、下方向をｙ軸の正の方向とする。
【０２２２】
さらに、以下、反復更新処理を行う情報処理装置１または情報処理装置１２１のプロセッサが、SIMD（Single Instruction Multiple Data）の実行が可能で、SIMD実行時に１つの命令で最大１６バイトのデータを１度に処理できるものとする。また、以下、各画像の１画素当たりのデータ量が４バイトであるものとする。
【０２２３】
最初に、図１７を参照して、拡張ブロックの幅ROIWidthの設定方法について説明する。
【０２２４】
まず、次式（５）により、オリジナル画像を分割数DivNumで単純に分割した場合のブロック（以下、オリジナルブロックと称する）の幅DivWidthが求められる。
【０２２５】
DivWidth＝OrgWidth／DivNum  ・・・（５）
【０２２６】
なお、幅DivWidthは小数点以下を切り捨てた値とする。従って、例えば、図１７に示されるように、オリジナル画像を左端から幅DivWtdthで分割していった場合、オリジナル画像の幅OrgWidthが分割数DivNumで割り切れないとき、右端のオリジナルブロックの幅は、他のオリジナルブロックの幅DivWidthより広くなる。このときの右端のオリジナルブロックの幅MaxDivWidthは、次式（６）により求められる。
【０２２７】
MaxDivWidth＝OrgWidth−（DivWidth×（DivNum−１））  ・・・（６）
【０２２８】
そして、拡張ブロックの幅ROIWidthは、この幅MaxDivWidthを用いて、次式（７）により求められる。
【０２２９】
ROIWidth＝MaxDivWidth＋2×OffsetX＋MaxAlign  ・・・（７）
【０２３０】
ここで、MaxAlignとは、拡張画像の各画素のデータをラスタ順にメモリに配置した場合に、情報処理装置１または情報処理装置１２１のプロセッサのデータの処理単位に合わせて、各拡張ブロックの左端（左辺）の画素のデータのメモリアライメントを行うときのアライメント量の最大値を示している。
【０２３１】
例えば、分割数DivNum＝４である場合について考える。
【０２３２】
上述したように、情報処理装置１または情報処理装置１２１のプロセッサは、１６バイト単位でSIMDを実行し、拡張画像の各画素のデータ量は４バイトである。従って、拡張画像の左上隅の画素のデータの格納アドレスが１６の倍数になるようにメモリアライメントされるものとすると、各拡張ブロックの左端の画素のデータのメモリアライメントを行うためには、各拡張ブロックの左端の画素のｘ座標を４の倍数に設定すればよい。
【０２３３】
例えば、左から２番目乃至４番目の拡張ブロックのアライメント量をA2乃至A4とすると、アライメント量A2乃至A4は、次式（８）乃至（１０）により求められる。
【０２３４】
A2＝{(OffsetX＋DivWidth×1)−OffsetX}&0x03  ・・・（８）
A3＝{(OffsetX＋DivWidth×2)−OffsetX}&0x03  ・・・（９）
A4＝{(OffsetX＋DivWidth×3)−OffsetX}&0x03  ・・・（１０）
【０２３５】
そして、MaxAlignは、次式（１１）により求められる。
【０２３６】
MaxAlign＝max（A2,A3,A4）  ・・・（１１）
【０２３７】
次に、図１８を参照して、拡張ブロックの高さROIHeightの設定方法について説明する。
【０２３８】
まず、次式（１２）により、オリジナル画像を分割数DivNumで単純に分割した場合のオリジナルブロックの高さDivHeightが求められる。
【０２３９】
DivHeight＝OrgWidth／DivNum  ・・・（１２）
【０２４０】
なお、高さDivHeightは小数点以下を切り捨てた値とする。従って、例えば、図１８に示されるように、オリジナル画像を上端から高さDivHeightで分割していった場合、オリジナル画像の高さOrgHeightが分割数DivNumで割り切れないとき、下端のオリジナルブロックの高さが、他のオリジナルブロックの高さDivHeightより高くなる。このときの下端のオリジナルブロックの高さMaxDivHeightは、次式（１３）により求められる。
【０２４１】
MaxDivHeight＝OrgHeight−（DivHeight×（DivNum−１））  ・・・（１３）
【０２４２】
拡張ブロックの高さROIHeightは、この高さMaxDivHeightを用いて、次式（１４）により求められる。
【０２４３】
ROIHeight＝MaxDivHeight＋2×OffsetY  ・・・（１４）
【０２４４】
このように、拡張ブロックの幅ROIWidthは、図１７の右端の幅MaxDivWidthの拡張ブロックのアライメント量が最大になった場合の、右端の拡張ブロックの幅と等しくなる。すなわち、各拡張ブロックの幅ROIWidthは、想定される拡張ブロックの幅の最大値に合わせられる。同様に、各拡張ブロックの高さROIHeightは、想定される拡張ブロックの高さの最大値に合わせられる。従って、各拡張ブロックのサイズを統一し、処理の効率化および高速化を実現することが可能になる。
【０２４５】
なお、処理の効率化および高速化を特に考慮する必要がなければ、DivWidthとMaxDivWidthの違い、DivHeightとMaxDivHeightの違い、アライメント量の違いに応じて、拡張ブロック毎に異なるサイズに設定するようにしてもよい。
【０２４６】
次に、図１９を参照して、各拡張ブロックの位置の設定方法について説明する。なお、以下、拡張ブロックのブロック単位の座標を（blkX, blkY）で表し、左上隅の拡張ブロックの座標（blkX, blkY）＝（0,0）とする。
【０２４７】
各拡張ブロックの左上隅の画素の座標（x,y）は、次式（１５）および（１６）により求められる。
【０２４８】
x＝（DivWidth×blkX）&^0x03  ・・・（１５）
y＝DivHeight×blkY  ・・・（１６）
【０２４９】
ここで、^0x03は、２進数で表すと11111100である。従って、各拡張ブロックの左上隅の画素のx座標は、基本的に幅DivWidthの間隔で設定されるが、ｘ座標の値が４の倍数にならない場合には、４の倍数になるようにメモリアライメントが行われる。また、各拡張ブロックの左上隅の画素のy座標は、高さDivHeightの間隔で設定される。
【０２５０】
なお、ここでは、拡張画像の各画素のデータがラスタ順にメモリに配置されることを前提としているため、各拡張ブロックの左辺のｘ軸方向の座標が４の倍数になるようにメモリアライメントを行う例を示した。しかし、拡張画像の各画素のデータがラスタ順以外の順序でメモリに配置される場合、この限りではなく、拡張ブロックの他の辺のｘ軸またはｙ軸方向の座標が４の倍数になるようにメモリアライメントが行われるときもある。また、メモリアライメントを行う際の座標の値は、上述した４の倍数に限定されるものではなく、情報処理装置１または情報処理装置１２１のプロセッサのSIMDの処理単位（バイト）、および、拡張画像の各画素のデータ量（バイト）に応じて変化する。
【０２５１】
以上のようにして、縦ROIHeight×幅ROIWidthの拡張ブロックが、縦DivNum×横DivNum個設定された後、拡張ブロック毎に上述した反復更新処理が行われ、各拡張ブロックに対応するストラクチャUk（すなわち、拡張ストラクチャ）が生成される。そして、生成された拡張ストラクチャがつなぎ合わされて、復元画像が生成される。
【０２５２】
ここで、図２０乃至図２４を参照して、各拡張ストラクチャをつなぎ合わせて復元画像を生成する処理の詳細について説明する。
【０２５３】
図２０に示されるように、拡張ストラクチャは、その位置によりパターン１乃至４に分類される。具体的には、拡張画像の左上隅の拡張ブロックに対応する拡張ストラクチャがパターン１に分類される。また、拡張画像の上端の拡張ブロックのうち左上隅の拡張ブロックを除く拡張ブロックに対応する拡張ストラクチャがパターン２に分類される。さらに、拡張画像の左端の拡張ブロックのうち左上隅の拡張ブロックを除く拡張ブロックに対応する拡張ストラクチャがパターン３に分類される。そして、パターン１乃至３以外の拡張ストラクチャがパターン４に分類される。
【０２５４】
パターン１の拡張ストラクチャについては、図２１に示されるように、右端から幅OffsetXおよび下端から高さOffsetYの黒く塗り潰された領域が除去される。そして、残りの領域が、左上隅の画素の座標（x,y）が拡張画像の座標系において座標（0,0）となるように配置される。
【０２５５】
パターン２の拡張ストラクチャについては、図２２に示されるように、左端から幅OffsetXおよび下端から高さOffsetYの黒く塗り潰された領域が除去される。そして、残りの領域が、左上隅の画素の座標（x,y）が拡張画像の座標系において次式（１７）および（１８）で求められる座標となるように配置される。
【０２５６】
x＝（DivWidth×blkX）&^0x03＋offsetX  ・・・（１７）
y＝0  ・・・（１８）
【０２５７】
パターン３の拡張ストラクチャについては、図２３に示されるように、右端から幅OffsetXおよび上端から高さOffsetYの黒く塗り潰された領域が除去される。そして、残りの領域が、左上隅の画素の座標（x,y）が拡張画像の座標系において次式（１９）および（２０）で求められる座標となるように配置される。
【０２５８】
x＝0  ・・・（１９）
y＝DivHeight×blkY＋offsetY  ・・・（２０）
【０２５９】
パターン４の拡張ストラクチャについては、図２４に示されるように、左端から幅OffsetXおよび上端から高さOffsetYの黒く塗り潰された領域が除去される。そして、残りの領域が、左上隅の画素の座標（x,y）が拡張画像の座標系において次式（２１）および（２２）で求められる座標となるように配置される。
【０２６０】
x＝（DivWidth×blkX）&^0x03＋offsetX  ・・・（２１）
y＝DivHeight×blkY＋offsetY  ・・・（２２）
【０２６１】
このように、拡張ストラクチャをつなぎ合わせるときに、つなぎ合わせる前に除去する領域、および、配置する座標をパターン毎に変更し、同じ大きさのブロック単位で処理を行うことにより、処理の効率化および高速化を実現することができる。
【０２６２】
そして、各拡張ストラクチャを配置することにより生成された画像の周囲の幅offsetXおよび高さoffsetYの領域を除去することにより、復元画像を得ることができる。
【０２６３】
以上のように、糊代処理を実行することにより、ブロック間の連続性を確保することができ、ブロックに分割して処理することによる画質の低下を抑制することができる。
【０２６４】
また、反復更新処理を高速化したり、あるいは、反復更新処理で必要となる中間バッファのサイズを小さくしたりすることができる。
【０２６５】
例えば、図２５に示されるように、スレッド２０３ａ乃至２０３ｄの４つのスレッドにより反復更新処理を並列して実行可能な場合について考える。この場合、例えば、拡張画像２０１を拡張ブロック２０１ａ乃至２０１ｄに４分割し、４組の中間バッファ２０２ａ乃至２０２ｄおよびスレッド２０３ａ乃至２０３ｄを用いて、各拡張ブロックに対して並列に反復更新処理を実行することにより、拡張ストラクチャ２０４ａ乃至２０４ｄを高速に生成することができる。
【０２６６】
また、図２６に示されるように、１つのスレッド２１２のみにより反復更新処理を実行する場合について考える。この場合、例えば、拡張画像２０１を拡張ブロック２０１ａ乃至２０１ｄに４分割し、１組の中間バッファ２１１およびスレッド２１２を用いて、１つずつ拡張ブロックの反復更新処理を実行し、１つずつ拡張ストラクチャ２１３を生成することにより、必要な中間バッファのサイズを小さくすることができる。
【０２６７】
ここで、ダミー領域の幅OffsetXおよび高さOffsetY、並びに、分割数DivNumの設定方法の例について説明する。
【０２６８】
例えば、ダミー領域の幅OffsetXおよび高さOffsetYは、H_init生成部２１がPSFの推定を行い、点広がり関数Hの初期値H_initを生成する際に用いるFFT（高速フーリエ変換）のタップ数Nt、および、トータルバリエーションフィルタ３７がストラクチャ成分とテクスチャ成分を分離するために実行する反復演算回数Nrに基づいて設定される。より具体的には、ダミー領域の幅OffsetXおよび高さOffsetYは、FFTのタップ数Ntとトータルバリエーションフィルタ３７の反復演算回数Nrの合計以上の値に設定される。
【０２６９】
これは、データが存在しない領域や不連続領域に対してFFTを実行すると、信号の不連続性による歪みが生じ、画像処理におけるノイズとなる。そこで、FFTによるノイズの影響が、オリジナルブロック内の画像に及ぶのを防止するために、ダミー領域の幅OffsetXおよび高さOffsetYが、FFTのタップ数Nt以上に設定される。
【０２７０】
また、トータルバリエーションフィルタ３７は、１回演算を繰り返す度に、演算対象とする画像の範囲を１画素ずつ外側に広げていくのを特徴とする。そこで、FFTによるノイズが発生している領域の影響が、トータルバリエーションフィルタ３７の演算により、オリジナルブロック内の画像に及ぶのを防止するために、ダミー領域の幅OffsetXおよび高さOffsetYが、FFTのタップ数Nt＋トータルバリエーションフィルタ３７の反復演算回数Nr以上に設定される。
【０２７１】
このように、ダミー領域の幅OffsetXおよび高さOffsetYを、FFTのタップ数Ntとトータルバリエーションフィルタ３７の反復演算回数Nrの合計以上の値に設定することにより、不連続領域で発生するノイズの影響を抑え、ブロックに分割して処理することによる画質の低下をより確実に抑制することができる。
【０２７２】
また、分割数DivNumは、例えば、拡張ブロックのデータサイズが、使用可能なメモリのサイズを超えないように設定される。この場合、さらに、使用可能なメモリのサイズの増減に合わせて、分割数DivNumを動的に変化させるようにしてもよい。
【０２７３】
また、分割数DivNumは、例えば、CPUなどのプロセッサの数やコア数など、拡張ブロックの反復更新処理を並列して実行できる数に基づいて設定される。この場合、さらに、他の処理によりプロセッサの使用率が変化し、並列処理を実行できる数が増減する場合、それに合わせて、分割数DivNumを動的に変化させるようにしてもよい。
【０２７４】
また、分割数DivNumは、例えば、処理速度が極端に遅くなるのを防止するために、拡張ブロックからオリジナルブロックを引いた枠のサイズが、オリジナルブロックのサイズより大きくならないように設定される。
【０２７５】
なお、以上の説明では、縦方向および横方向の分割数をそれぞれ同じDivNumとする例を示したが、縦方向と横方向とで異なる分割数に設定するようにしてもよい。
【０２７６】
また、１個の拡張ブロックにおいて、点広がり関数Hkの更新を行い、最終的に得られる点広がり関数を、他の拡張ブロックの点広がり関数として用いて、他の拡張ブロックに対応するストラクチャUkを更新するようにしてもよい。
【０２７７】
この場合、他の拡張ブロックでは、点広がり関数Hkの更新を行う必要がなく、ストラクチャUkの更新のみを行えばよいこととなる。
【０２７８】
したがって、拡張ブロック毎に、対応する点広がり関数Hkの更新を行う場合と比較して、拡張ブロックそれぞれの点広がり関数Hを算出するために用いられるメモリ（の記憶容量）を少なくすることができるととも、点広がり関数を更新（算出）するための計算量を少なくすることが可能となる。
【０２７９】
［他の変形例］
また、第１の実施の形態では、ブレ画像を複数のブロックに分割し、ブロック毎に、点広がり関数Hk及びストラクチャUkを反復して更新するようにしたが、ブレ画像を構成する複数のブロックのうちの所定のブロックについてのみ、点広がり関数Hkの更新を行い、最終的に得られる点広がり関数を、他のブロックの点広がり関数として用いるようにしても、ブロックそれぞれの点広がり関数Hkを算出するために用いられるメモリを少なくすることができるととも、点広がり関数を更新するための計算量を少なくすることが可能となる。
【０２８０】
ところで、反復更新処理では、ブレ画像を対象として処理を行うこととしたが、その他、合焦距離のズレによるピンボケ、面内一様のボケ、カメラレンズによる面内不均一な周辺ボケ等が生じたボケ画像に対しても処理を行うことが可能である。
【０２８１】
また、反復更新処理は、予め記録しておいた、ブレが生じた動画像に対して処理を行うこともできるし、動画像を撮像しているときに生じたブレを検出して、リアルタイムに除去するように処理を行うこともできる。
【０２８２】
図１における第１の実施の形態では、ストラクチャ成分とテクスチャ成分とを分離するために、トータルバリエーションフィルタ３７を用いることとしたが、その他、例えばBilateralフィルタ、εフィルタ等を用いるようにしてもよい。
【０２８３】
第１及び第２の実施の形態では、処理部２８が、ブレ画像Gから、conv部２７からの演算結果Hk○Ukを減算し、その減算結果G-Hk○Ukを、残差生成部２９に供給するようにしたが、その他、ブレ画像Gを、conv部２７からの演算結果Hk○Ukで除算し、その除算結果(Hk○Uk)/Gを、残差生成部２９に供給するよう構成しても、同様の結果を得ることができる。
【０２８４】
上述した反復更新処理では、ステップＳ３３において、点広がり関数Hkを用いて、ストラクチャUkの更新を行うと同時に、ステップＳ３４において、ストラクチャUkを用いて、点広がり関数Hkの更新を行うようにしたが、これに限定されない。
【０２８５】
すなわち、例えば、反復更新処理において、ストラクチャの更新、及び点広がり関数の更新を交互に行うようすることが可能である。
【０２８６】
具体的には、例えば、ステップＳ３３において、点広がり関数Hkを用いて、ストラクチャUkの更新を行い、ステップＳ３４において、その更新により得られたストラクチャUk+1を用いて、点広がり関数Hkを更新するようにしてもよい。さらに、次回のステップＳ３３において、更新により得られた点広がり関数Hk+1を用いて、ストラクチャUk+1を更新し、次回のステップＳ３４において、更新により得られたストラクチャUk+2を用いて、点広がり関数Hk+1を更新するというように、ストラクチャと点広がり関数との更新を、交互に行うようにすることが可能である。
【０２８７】
この場合、例えば、ストラクチャUkを用いて、点広がり関数Hkを更新する場合と比較して、より真のストラクチャに近いストラクチャUk+1を用いて、点広がり関数Hkを更新するため、点広がり関数Hkの更新結果として、より真の点広がり関数に近い点広がり関数Hk+1を取得することが可能となる。
【０２８８】
また、第１の実施の形態である情報処理装置１、及び第２の実施の形態である情報処理装置１２１としては、例えば、画像を再生したり録画したりすることが可能な録画再生装置等に適用できる。
【０２８９】
［コンピュータの構成例］
ところで、上述した一連の処理は、専用のハードウエアにより実行させることもできるし、ソフトウエアにより実行させることもできる。一連の処理をソフトウエアにより実行させる場合には、そのソフトウエアを構成するプログラムが、いわゆる組み込み型のコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、プログラム格納媒体からインストールされる。
【０２９０】
図２７は、上述した一連の処理をプログラムにより実行するコンピュータの構成例を示している。
【０２９１】
CPU（Central Processing Unit）３０１は、ROM（Read Only Memory）３０２、または記憶部３０８に記憶されているプログラムに従って各種の処理を実行する。RAM（Random Access Memory）３０３には、CPU３０１が実行するプログラムやデータなどが適宜記憶される。これらのCPU３０１、ROM３０２、及びRAM３０３は、バス３０４により相互に接続されている。
【０２９２】
CPU３０１にはまた、バス３０４を介して入出力インタフェース３０５が接続されている。入出力インタフェース３０５には、キーボード、マウス、マイクロホンなどよりなる入力部３０６、ディスプレイ、スピーカなどよりなる出力部３０７が接続されている。CPU３０１は、入力部３０６から入力される指令に対応して各種の処理を実行する。そして、CPU３０１は、処理の結果を出力部３０７に出力する。
【０２９３】
入出力インタフェース３０５に接続されている記憶部３０８は、例えばハードディスクからなり、CPU３０１が実行するプログラムや各種のデータを記憶する。通信部３０９は、インターネットやローカルエリアネットワークなどのネットワークを介して外部の装置と通信する。
【０２９４】
また、通信部３０９を介してプログラムを取得し、記憶部３０８に記憶してもよい。
【０２９５】
入出力インタフェース３０５に接続されているドライブ３１０は、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどのリムーバブルメディア３１１が装着されたとき、それらを駆動し、そこに記録されているプログラムやデータなどを取得する。取得されたプログラムやデータは、必要に応じて記憶部３０８に転送され、記憶される。
【０２９６】
コンピュータにインストールされ、コンピュータによって実行可能な状態とされるプログラムを格納するプログラム格納媒体は、図２７に示されるように、磁気ディスク（フレキシブルディスクを含む）、光ディスク（CD-ROM(Compact Disc-Read Only Memory),DVD(Digital Versatile Disc)を含む）、光磁気ディスク（ＭＤ（Mini-Disc）を含む）、もしくは半導体メモリなどよりなるパッケージメディアであるリムーバブルメディア３１１、または、プログラムが一時的もしくは永続的に格納されるROM３０２や、記憶部３０８を構成するハードディスクなどにより構成される。プログラム格納媒体へのプログラムの格納は、必要に応じてルータ、モデムなどのインタフェースである通信部３０９を介して、ローカルエリアネットワーク、インターネット、デジタル衛星放送といった、有線または無線の通信媒体を利用して行われる。
【０２９７】
なお、本明細書において、プログラム格納媒体に格納されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【０２９８】
また、本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。
【符号の説明】
【０２９９】
１  情報処理装置，  ２１  H_init生成部，  ２２  サポート制限部，  ２３  乗算部，  ２４  加算部，  ２５  重心補正部，  ２６  H生成部，  ２７  conv部，  ２８  処理部，  ２９  残差生成部，  ３０  corr部，  ３１  corr部，  ３２  平均化部，  ３３  減算部，  ３４  U_init生成部，  ３５  U生成部，  ３６  乗算部，  ３７  トータルバリエーションフィルタ，  ６１  情報処理装置，  ９１  conv部，  ９２  減算部，  ９３  加算部，  ９４  R-Ldeconv部，  ９５  減算部，  ９６  加算部，  ９７  オフセット部，  ９８  ゲインマップ，  １２１  情報処理装置，  １５１  乗算部，  １５２  加算部，  １５３  乗算部
【図１】
2011128978.tif 000008
【図２】
2011128978.tif 000009
【図３】
2011128978.tif 000010
【図４】
2011128978.tif 000011
【図５】
2011128978.tif 000012
【図６】
2011128978.tif 000013
【図７】
2011128978.tif 000014
【図８】
2011128978.tif 000015
【図９】
2011128978.tif 000016
【図１０】
2011128978.tif 000017
【図１１】
2011128978.tif 000018
【図１２】
2011128978.tif 000019
【図１３】
2011128978.tif 000020
【図１４】
2011128978.tif 000021
【図１５】
2011128978.tif 000022
【図１６】
2011128978.tif 000023
【図１７】
2011128978.tif 000024
【図１８】
2011128978.tif 000025
【図１９】
2011128978.tif 000026
【図２０】
2011128978.tif 000027
【図２１】
2011128978.tif 000028
【図２２】
2011128978.tif 000029
【図２３】
2011128978.tif 000030
【図２４】
2011128978.tif 000031
【図２５】
2011128978.tif 000032
【図２６】
2011128978.tif 000033
【図２７】
2011128978.tif 000034