(57)【特許請求の範囲】
【請求項１】
画像を取得する画像取得手段と、
前記画像の各画素について少なくとも１つずつ設定された、該画素に対して適用する為の原フィルタであって、前記画像中の少なくとも２つの画素の間で異なる原フィルタを示す情報を、前記画像の各画素について取得する情報取得手段と、
前記情報取得手段によって取得された情報が示す複数の原フィルタから、該複数の原フィルタの合計数よりも数が少ない、複数の代表フィルタを決定するフィルタ決定手段と、
前記画像の各画素について、該画素に対応する原フィルタを近似するための前記複数の代表フィルタの線型結合における、前記複数の代表フィルタそれぞれの重み値を示す重みベクトルを、該画素に対応する原フィルタと前記複数の代表フィルタとに基づいて決定する重み決定手段と、
前記画像に対して前記複数の代表フィルタそれぞれの畳み込み演算を行う第一の処理と、前記画像の各画素の画素値に該画素に対応する重みベクトルが示す重み値を乗算する第二の処理と、前記画像に前記第一の処理と前記第二の処理とを行うことによって得られた、それぞれが前記複数の代表フィルタのうちの一つに対応する複数の画像を合成する処理と、を行うことによって、前記画像に対するフィルタ処理を実行する実行手段と
を備えることを特徴とする画像処理装置。
【請求項２】
前記実行手段は、前記画像の各画素の画素値に該画素に対応する重みベクトルが示す第一の重み成分を乗算して得られる処理済み画像に対して、前記第一の重み成分に対応する第一の代表フィルタを畳み込み演算した結果と、前記画像の各画素の画素値に該画素に対応する重みベクトルが示す第二の重み成分を乗算して得られる処理済み画像に対して、前記第二の重み成分に対応する第二の代表フィルタを畳み込み演算した結果と、を合成することで、前記フィルタ処理を実行することを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記フィルタ決定手段は、前記情報取得手段が取得した情報が示す複数の原フィルタから重要度が大きい順に規定個数の原フィルタを前記複数の代表フィルタとして選択する
ことを特徴とする請求項１に記載の画像処理装置。
【請求項４】
前記フィルタ決定手段は、それぞれの前記原フィルタに対して、より大きい係数値から成る原フィルタにはより大きい重要度を割り当てることを特徴とする請求項３に記載の画像処理装置。
【請求項５】
前記フィルタ決定手段は、それぞれの前記原フィルタに対して、より大きいサイズの原フィルタにはより大きい重要度を割り当てることを特徴とする請求項３に記載の画像処理装置。
【請求項６】
更に、
前記画像を構成するそれぞれの画素について、該画素に対応する原フィルタと前記複数の代表フィルタとの間の相関を第１の相関として取得する手段と、
前記複数の代表フィルタ同士の相関を第２の相関として取得する手段と
を備え、
前記重み決定手段は、前記第１の相関と前記第２の相関とに基づいて前記重みベクトルを決定する
ことを特徴とする請求項１乃至５の何れか１項に記載の画像処理装置。
【請求項７】
前記重み決定手段は、
前記画像を構成するそれぞれの画素について、前記複数の代表フィルタ同士の相関を示す相関行列を乗じることで前記第１の相関を示す相関ベクトルとなるようなベクトルであって、前記複数の代表フィルタに対する重み値を成分とする該ベクトル、を重みベクトルとして決定することを特徴とする請求項６に記載の画像処理装置。
【請求項８】
着目画素に対して適用する為の原フィルタは、該着目画素と該着目画素の周辺画素から成る画素群に対して乗じる係数から成るフィルタであることを特徴とする請求項１乃至７の何れか１項に記載の画像処理装置。
【請求項９】
着目画素に対して適用する為の原フィルタは、該着目画素の画素値に対応するフィルタであることを特徴とする請求項１乃至７の何れか１項に記載の画像処理装置。
【請求項１０】
前記畳み込み演算は、高速フーリエ変換を用いた演算であることを特徴とする請求項１乃至９の何れか１項に記載の画像処理装置。
【請求項１１】
画像処理装置が行う画像処理方法であって、
前記画像処理装置の画像取得手段が、画像を取得する画像取得工程と、
前記画像処理装置の情報取得手段が、前記画像の各画素について少なくとも１つずつ設定された、該画素に対して適用する為の原フィルタであって、前記画像中の少なくとも２つの画素の間で異なる原フィルタを示す情報を、前記画像の各画素について取得する情報取得工程と、
前記画像処理装置のフィルタ決定手段が、前記情報取得工程で取得された情報が示す複数の原フィルタから、該複数の原フィルタの合計数よりも数が少ない、複数の代表フィルタを決定するフィルタ決定工程と、
前記画像処理装置の重み決定手段が、前記画像の各画素について、該画素に対応する原フィルタを近似するための前記複数の代表フィルタの線型結合における、前記複数の代表フィルタそれぞれの重み値を示す重みベクトルを、該画素に対応する原フィルタと前記複数の代表フィルタとに基づいて決定する重み決定工程と、
前記画像処理装置の実行手段が、前記画像に対して前記複数の代表フィルタそれぞれの畳み込み演算を行う第一の処理と、前記画像の各画素の画素値に該画素に対応する重みベクトルが示す重み値を乗算する第二の処理と、前記画像に前記第一の処理と前記第二の処理とを行うことによって得られた、それぞれが前記複数の代表フィルタのうちの一つに対応する複数の画像を合成する処理と、を行うことによって、前記画像に対するフィルタ処理を実行する実行工程と
を備えることを特徴とする画像処理方法。
【請求項１２】
コンピュータを、請求項１乃至１０の何れか１項に記載の画像処理装置の各手段として機能させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フィルタ処理技術に関するものである。
【背景技術】
【０００２】
近年、デジタルカメラは2000万画素を超える高画質化が進み、それにより解像度の高い高品位な画像を撮影できるようになった。その一方で、シャッターを押している間にカメラがブレたり、光学系やピントのズレによるボケが発生する場合がある。このような場合には画質が悪化し、高画質化のメリットを生かすことができない。
【０００３】
そのような画質劣化を改善するために、手ブレに対するブレフィルタやレンズの像高に応じた光学フィルタ、被写体距離に応じたボケフィルタなど、画素(領域)ごとに異なるフィルタを画像に作用させて画像を回復させる手法が提案されている(特許文献１)。
【０００４】
また、画素ごとに異なるフィルタを全て保持するのではなく、代表的なフィルタだけを保持しておき、残りのフィルタは線形補間で生成するという手法が提案されている(特許文献２)。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開2005-63323号公報
【特許文献２】特開2005-31759号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１の手法では、画素ごとに異なるフィルタを全て保持する必要があるため、多くのメモリ容量が要求されることになる。また、特許文献２の手法では、代表フィルタの中間にあるフィルタを単純に線形補間によって生成しているが、線形補間はフィルタ間の距離によって重みを決定するため、フィルタの特性が距離に応じて変化しない場合は中間のフィルタを精度良く生成できない。また、特許文献２の手法では、保持すべきフィルタのデータ量を削減することはできるが、画像にフィルタを演算させる場合の演算量を減らすことはできない。
【０００７】
本発明は以上の問題に鑑みてなされたものであり、保持すべきフィルタのデータ量を削減し、画像にフィルタを作用させる際の演算量を削減する為の技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の目的を達成するために、例えば、本発明の画像処理装置は以下の構成を備える。即ち、画像を取得する画像取得手段と、
前記画像の各画素について少なくとも１つずつ設定された、該画素に対して適用する為の原フィルタであって、前記画像中の少なくとも２つの画素の間で異なる原フィルタを示す情報を、前記画像の各画素について取得する情報取得手段と、
前記情報取得手段によって取得された情報が示す複数の原フィルタから、該複数の原フィルタの合計数よりも数が少ない、複数の代表フィルタを決定するフィルタ決定手段と、
前記画像の各画素について、該画素に対応する原フィルタを近似するための前記複数の代表フィルタの線型結合における、前記複数の代表フィルタそれぞれの重み値を示す重みベクトルを、該画素に対応する原フィルタと前記複数の代表フィルタとに基づいて決定する重み決定手段と、
前記画像に対して前記複数の代表フィルタそれぞれの畳み込み演算を行う第一の処理と、前記画像の各画素の画素値に該画素に対応する重みベクトルが示す重み値を乗算する第二の処理と、前記画像に前記第一の処理と前記第二の処理とを行うことによって得られた、それぞれが前記複数の代表フィルタのうちの一つに対応する複数の画像を合成する処理と、を行うことによって、前記画像に対するフィルタ処理を実行する実行手段と
を備えることを特徴とする。
【発明の効果】
【０００９】
本発明の構成によれば、保持すべきフィルタのデータ量を削減し、画像にフィルタを作用させる際の演算量を削減することができる。
【図面の簡単な説明】
【００１０】
【図１】画像処理装置の機能構成例を示すブロック図。
【図２】画像処理装置の機能構成例を示すブロック図。
【図３】画像処理装置の機能構成例を示すブロック図。
【図４】代表フィルタ取得部１００が行う処理のフローチャート。
【図５】画像処理装置の機能構成例を示すブロック図。
【図６】重み係数算出部２００が行う処理のフローチャート。
【図７】フィルタ演算部３００が行う処理のフローチャート。
【図８】画像の分割例と代表フィルタの設定例を示す図。
【図９】代表フィルタｆｉに対応する重み値の画素ごとの分布の例を示す図。
【図１０】画像の左上を中心とした回転手ブレによる場所ごとのブレのフィルタを示す図。
【図１１】第１の実施形態の効果を説明する図。
【図１２】画像処理装置の機能構成例を示すブロック図。
【図１３】代表フィルタ取得部１２００が行う処理のフローチャート。
【図１４】フィルタを説明する図。
【図１５】フィルタの一例を示す図。
【発明を実施するための形態】
【００１１】
以下、添付図面を参照し、本発明の好適な実施形態について説明する。なお、以下説明する実施形態は、本発明を具体的に実施した場合の一例を示すもので、特許請求の範囲に記載の構成の具体的な実施例の１つである。
【００１２】
［第１の実施形態］
＜画像処理装置の機能構成例について＞
先ず、本実施形態に係る画像処理装置の機能構成例について、図５のブロック図を用いて説明する。画像処理装置５００は、端子５０１を介して後述する代表フィルタ数Ｎを取得すると共に、端子５０２を介して入力画像を取得する。そして端子５０３を介してフィルタ処理済み画像を出力する。画像処理装置５００内の各部については図１〜３に分けて説明する。
【００１３】
しかし、本実施形態は、図１〜３に示したそれぞれの構成を１つの装置に組み込むことに限定するものではなく、それぞれの構成を適当な数の装置に分けて組み込むようにしても良い。その場合、それぞれの装置が協調動作を行うことで、以下に説明する各処理が実現されることになる。
【００１４】
先ず、図１に示す構成について説明する。図１に示す構成は、画像を構成するそれぞれの画素に対して予め設定されたフィルタのうち、これらのフィルタを近似する主要なフィルタを、代表フィルタとして選択する為の構成に係るものである。
【００１５】
フィルタデータベース１１０には、画素に対して適用する為のフィルタが、画像を構成するそれぞれの画素について登録されている（フィルタ保持）。このフィルタデータベース１１０は、画像処理装置が有するようにしても良いし、外部装置が有するようにしても良い。代表フィルタ取得部１００は、重要度算出部１０３、取得部１０４、端子１０１，１０２，１０５、を有する。
【００１６】
重要度算出部１０３は、このフィルタデータベース１１０に登録されている画素毎のフィルタを、端子１０１を介して読み出す。そして重要度算出部１０３は、読み出したそれぞれのフィルタに対して重要度を求める。重要度を求める処理については後述する。
【００１７】
取得部１０４は、端子１０２を介して代表フィルタ数Ｎを取得する。この代表フィルタ数Ｎは画像処理装置内に予め保持しておいても良いし、ユーザによって入力しても良いし、外部装置から取得しても良い。そして取得部１０４は、重要度算出部１０３がフィルタデータベース１１０から読み出したフィルタ群のうち、重要度が大きいものからＮ個を代表フィルタとして選択する。このとき、代表フィルタとして選択したそれぞれのフィルタのサイズが全て同じでない場合は、例えば、全ての代表フィルタのサイズを、最も高い重要度が高い代表フィルタのサイズにリサイズする。そして取得部１０４は、選択したそれぞれの代表フィルタを、端子１０５を介して代表フィルタデータベース１２０に登録する。
【００１８】
次に、図２に示す構成について説明する。図２に示す構成は、画像を構成するそれぞれの画素について、それぞれの代表フィルタに対する重み値を成分とする重みベクトル、を求めるための構成に係るものである。重み係数算出部２００は、相関ベクトル算出部２０３、相関行列算出部２０４、方程式解導出部２０５、端子２０１，２０２，２０６、を有する。
【００１９】
相関ベクトル算出部２０３は、フィルタデータベース１１０に登録されている画素毎のフィルタを、端子２０１を介して読み出すと共に、代表フィルタデータベース１２０に登録されているそれぞれの代表フィルタを、端子２０２を介して読み出す。そして相関ベクトル算出部２０３は、画像を構成するそれぞれの画素について、画素に対するフィルタと、それぞれの代表フィルタと、の相関を示す相関ベクトルｂを求める。
【００２０】
相関行列算出部２０４は、代表フィルタデータベース１２０に登録されているそれぞれの代表フィルタを、端子２０２を介して読み出す。そして相関行列算出部２０４は、代表フィルタ同士の相関を示す相関行列Ａを求める。
【００２１】
方程式解導出部２０５は、画像を構成するそれぞれの画素について連立方程式Ａｗ＝ｂを解くことで、画像を構成するそれぞれの画素について重みベクトルｗを求める。例えば着目画素に対して生成した重みベクトルｗとは、相関行列Ａに対して乗じることで着目画素に対して求めた相関ベクトルｂとなるようなベクトルであって、それぞれの代表フィルタに対する重み値を成分とするベクトル、である。そして方程式解導出部２０５は、画素毎に求めた重みベクトルｗを、重みデータとして端子２０６を介して重み係数データベース２１０に登録する。相関ベクトルｂ、相関行列Ａ、重みベクトルｗ、のそれぞれの求め方、及びそれぞれに関する詳細な説明については後述する。
【００２２】
次に、図３に示す構成について説明する。図３に示す構成は、入力画像に対してフィルタ処理を施す為の構成に係るものである。フィルタ演算部３００は、重み係数乗算部３０４、畳み込み演算部３０５、合成部３０６、終了判定部３０７、端子３０１，３０２，３０３，３０８を有する。
【００２３】
重み係数乗算部３０４は、画像データを入力画像として端子３０１を介して取得する。そして重み係数乗算部３０４は、この取得した入力画像に対して、重み係数データベース２１０に登録されている代表フィルタ毎の重み値を乗じることで、代表フィルタ毎に重み係数乗算済み画像を生成する。
【００２４】
畳み込み演算部３０５は、代表フィルタデータベース１２０に登録されている代表フィルタと、この代表フィルタについて重み係数乗算部３０４が生成した重み係数乗算済み画像と、の畳み込み演算を行うことで、代表フィルタ毎に畳み込み済み画像を生成する。
【００２５】
合成部３０６は、畳み込み演算部３０５により畳み込み済み画像が生成されるたびに、この生成された畳み込み済み画像を、それまでに生成された畳み込み済み画像に合成する。これにより、現時点までに生成された全ての畳み込み済み画像を合成した合成画像を生成する。もちろん、合成のタイミングはこれに限るものではなく、代表フィルタ毎の畳み込み済み画像が生成された後で、それぞれの畳み込み済み画像を一度に合成しても良い。
【００２６】
終了判定部３０７は畳み込み演算部３０５及び合成部３０６による「畳み込み済み画像を生成し、それまでに生成した畳み込み済み画像と合成する」という一連の動作を代表フィルタ数Ｎだけ繰り返すように、畳み込み演算部３０５及び合成部３０６を制御する。そして終了判定部３０７は、この一連の動作を代表フィルタ数Ｎだけの回数繰り返すことで生成された合成画像を、端子３０８を介して画像データとして出力する。合成画像の出力先については特に限定するものではなく、合成画像はメモリに格納しても良いし、外部装置に対して出力しても良いし、表示装置上に表示しても良い。
【００２７】
＜画像処理装置が行う処理について＞
次に、代表フィルタ取得部１００が行う処理について、同処理のフローチャートを示す図４を用いて、より詳細に説明する。ステップＳ４０１では重要度算出部１０３は、ｘ方向にＸ画素、ｙ方向にＹ画素、のサイズを有する画像における着目画素の座標位置として用いる変数ｘ、ｙをそれぞれ０に初期化する。なお、座標位置（ｘ、ｙ）＝（０、０）は、この画像の左上隅の座標位置を示しているものとする。
【００２８】
次にステップＳ４０２では重要度算出部１０３は、座標位置（ｘ、ｙ）に対応するフィルタを、端子１０１を介して、フィルタデータベース１１０から読み出す。このフィルタは、例えば図１５に示す如く、３×３のサイズを有するフィルタであり、着目画素に対して適用する為のフィルタは、着目画素と着目画素の周辺画素とから成る画素群に対して乗じる係数から成るフィルタである。そしてステップＳ４０３では重要度算出部１０３は、この読み出したフィルタの重要度を求める。重要度の求め方については後述する。
【００２９】
ステップＳ４０４では重要度算出部１０３は、全ての座標位置（全ての画素）についてステップＳ４０２及びＳ４０３の処理を行ったか否かを判断する。この判断は、ｘ＝Ｘ−１且つｙ＝Ｙ−１であるか否かを判断することで行うことができる。この判断の結果、全ての座標位置についてステップＳ４０２及びＳ４０３の処理を行ったと判断した場合、処理はステップＳ４０６に進む。一方、未だステップＳ４０２及びＳ４０３の処理を行っていない座標位置があると判断した場合、処理はステップＳ４０５に進む。
【００３０】
ステップＳ４０５では重要度算出部１０３は変数ｘ又はｙの値を１つインクリメントして更新し、未処理の座標位置を着目画素の座標位置とする。ここで、座標位置の更新は、画像の左上から右下に向かって行うものとする。そしてこの更新した座標位置についてステップＳ４０２以降の処理を行う。
【００３１】
ステップＳ４０６では取得部１０４は、端子１０２を介して代表フィルタ数Ｎを取得し、画素毎のフィルタのうち、重要度が大きいものから順にＮ個のフィルタを、代表フィルタとして選択する。そしてステップＳ４０７では取得部１０４は、選択したＮ個のフィルタを、端子１０５を介して代表フィルタデータベース１２０に登録する。
【００３２】
次に、重み係数算出部２００が行う処理について、同処理のフローチャートを示す図６を用いて、より詳細に説明する。
【００３３】
ステップＳ６０１では重み係数算出部２００は、ｘ方向にＸ画素、ｙ方向にＹ画素、のサイズを有する画像における着目画素の座標位置として用いる変数ｘ、ｙをそれぞれ０に初期化する。なお、座標位置（ｘ、ｙ）＝（０、０）は、この画像の左上隅の座標位置を示しているものとする。
【００３４】
次にステップＳ６０２では相関ベクトル算出部２０３は、座標位置（ｘ、ｙ）に対応するフィルタを、端子２０１を介して、フィルタデータベース１１０から読み出す。
【００３５】
ステップＳ６０３では相関ベクトル算出部２０３は先ず、代表フィルタデータベース１２０に登録されているそれぞれの代表フィルタを、端子２０２を介して読み出す。そして相関ベクトル算出部２０３は、ステップＳ６０２で読み出したフィルタと、本ステップで読み出したそれぞれの代表フィルタと、の相関を示す相関ベクトルｂを求める。相関ベクトルｂを求めるための方法については後述する。
【００３６】
ステップＳ６０４では相関行列算出部２０４は先ず、代表フィルタデータベース１２０に登録されているそれぞれの代表フィルタを、端子２０２を介して読み出す。そして相関行列算出部２０４は、代表フィルタ同士の相関を示す相関行列Ａを求める。相関行列Ａを求めるための方法については後述する。ステップＳ６０５では方程式解導出部２０５は、以下の式（１）を解くことで、重みベクトルｗを求める。
【００３７】
【数１】
0005761988.tif 000002
【００３８】
ここで求めた重みベクトルｗは、ステップＳ６０４で求めた相関行列Ａに対して乗じることでステップＳ６０３で求めた相関ベクトルｂとなるようなベクトルであって、それぞれの代表フィルタに対する重み値を成分とするベクトル、である。然るに、本実施形態の場合、重みベクトルｗは、Ｎ個の重み値を要素として有するベクトルであって、ｉ（１≦ｉ≦Ｎ）番目の重み値は、ｉ番目の代表フィルタ（代表フィルタｆｉ）に対する重み値である。このように、重みベクトルｗは座標位置毎に求まるものであるため、ｗ＝ｗ（ｘ、ｙ）（０≦ｘ≦Ｘ−１，０≦ｙ≦Ｙ−１）と表記することができる。
【００３９】
ステップＳ６０６では方程式解導出部２０５は、ステップＳ６０５で求めた重みベクトルｗを、端子２０６を介して重み係数データベース２１０に登録する。ステップＳ６０７では重み係数算出部２００は、全ての座標位置（全ての画素）についてステップＳ６０２〜Ｓ６０６の処理を行ったか否かを判断する。この判断は、ｘ＝Ｘ−１且つｙ＝Ｙ−１であるか否かを判断することで行うことができる。この判断の結果、全ての座標位置についてステップＳ６０２〜Ｓ６０６の処理を行ったと判断した場合、本処理を終了する。一方、未だステップＳ６０２〜Ｓ６０６の処理を行っていない座標位置があると判断した場合、処理はステップＳ６０８に進む。
【００４０】
ステップＳ６０８では重み係数算出部２００は変数ｘ又はｙの値を１つインクリメントして更新し、未処理の座標位置を着目画素の座標位置とする。ここで、座標位置の更新は、画像の左上から右下に向かって行うものとする。そしてこの更新した座標位置についてステップＳ６０２以降の処理を行う。
【００４１】
次に、フィルタ演算部３００が行う処理について、同処理のフローチャートを示す図７を用いて説明する。ステップＳ７０１においてフィルタ演算部３００は、それぞれの代表フィルタに対するインデックスとして用いる変数ｉの値を１に初期化する。更にフィルタ演算部３００は、フィルタ処理済み画像を格納する配列Ｋ＝Ｋ（ｘ、ｙ）の値を、０≦ｘ≦Ｘ−１，０≦ｙ≦Ｙ−１を満たす全てのｘ、ｙについて０に初期化する。
【００４２】
ステップＳ７０２では重み係数乗算部３０４は先ず、ｘ方向にＸ画素、ｙ方向にＹ画素、のサイズを有する入力画像を、端子３０１を介して取得する。更に重み係数乗算部３０４は、重み係数データベース２１０から、それぞれの画素位置について求めた重みベクトルｗから、ｉ番目の要素（重み値）を取得する。例えば、画素位置（ｘ、ｙ）における重みベクトルｗ（ｘ、ｙ）＝｛ｗ１（ｘ、ｙ）、…、ｗｉ（ｘ、ｙ）、…、ｗＮ（ｘ、ｙ）｝からはｗｉ（ｘ、ｙ）を取得する。
【００４３】
そして重み係数乗算部３０４は、入力画像中の画素位置（ｘ’、ｙ’）における画素値Ｉ（ｘ’、ｙ’）と、重み値ｗｉ（ｘ’、ｙ’）と、を用いて、Ｊｉ（ｘ’、ｙ’）＝Ｉ（ｘ’、ｙ’）×ｗｉ（ｘ’、ｙ’）を計算する。この計算を、０≦ｘ’≦Ｘ−１，０≦ｙ’≦Ｙ−１を満たす全てのｘ’、ｙ’について行うことで、それぞれの重みベクトルのうちｉ番目の要素である重み値を、入力画像に対して乗じることで生成される重み係数乗算済み画像Ｊｉを生成することができる。なお、Ｊｉ（ｘ’、ｙ’）は、重み係数乗算済み画像Ｊｉ中の画素位置（ｘ’、ｙ’）における画素値を表す。
【００４４】
ステップＳ７０３では畳み込み演算部３０５は先ず、代表フィルタデータベース１２０から代表フィルタｆｉを読み出す。そして畳み込み演算部３０５は、Ji(x’,y’)とfi(x-x’,y-y’)との畳み込み演算（Ji(x,y)*fi(x,y)の計算：＊は畳み込み演算を表す演算子）を行う。
【００４５】
このとき、代表フィルタfi(x-x’,y-y’)は相対距離のみに依存するので、通常のフィルタの畳み込みと同様にして計算することができる。畳み込みの計算は実空間で行っても良いし、以下の式を用いて周波数空間で計算しても良い。
【００４６】
【数２】
0005761988.tif 000003
【００４７】
式(2)において、F[]はフーリエ変換を、F-1[]はフーリエ逆変換を表す。
【００４８】
ステップＳ７０４では合成部３０６は、Ｋ（ｘ’、ｙ’）＝Ｋ（ｘ’、ｙ’）＋｛Ji(x’,y’)とfi(x-x’,y-y’)との畳み込み演算の結果｝を、０≦ｘ’≦Ｘ−１，０≦ｙ’≦Ｙ−１を満たす全てのｘ’、ｙ’について行う。
【００４９】
ステップＳ７０５では終了判定部３０７は、変数ｉの値がＮ以上となったか否かを判断する。この判断の結果、変数ｉの値≧Ｎの場合には処理はステップＳ７０７に進み、変数ｉの値＜Ｎの場合には処理はステップＳ７０６に進む。
【００５０】
ステップＳ７０６では終了判定部３０７は変数ｉの値を１つインクリメントし、重み係数乗算部３０４、畳み込み演算部３０５、合成部３０６、を動作させる。然るに処理はステップＳ７０２に戻る。
【００５１】
ステップＳ７０７では終了判定部３０７は、配列Ｋをフィルタ処理済み画像として、端子３０８を介して出力する。
【００５２】
＜重要度算出部１０３が行う処理について＞
次に、重要度算出部１０３によって重要度を求めるための方法について説明する。重要度算出部１０３は、それぞれのフィルタに対して、フィルタ内の係数値がより大きいほどより大きい重要度をこのフィルタに対して与える。例えば、フィルタ内の各係数の値の自乗和が大きいほどより大きい重要度をこのフィルタに対して与える。もちろん、重要度の大小を左右する要素はこれに限るものではなく、その他にも考え得る。例えば、フィルタのサイズがより大きいほどより大きい重要度をこのフィルタに対して与えても良い。このように、重要度の大小を左右する要素には様々なものが考えられ、１つのみを用いても良いし、複数個を用いても良い。
【００５３】
また、代表フィルタについては、上記のように、画素毎のフィルタのうち、重要度が大きい順に規定個数のフィルタを代表フィルタとして選択しても良いが、他の方法でも選択可能である。例えば、先ず、画像をＮ個の領域（領域のサイズ、形状は特に限定するものではない）に分割する。そして、ｊ番目（１≦ｊ≦Ｎ）の領域内のそれぞれの画素に対応するフィルタのうち最も重要度の大きいフィルタを、ｊ番目の領域に対する代表フィルタとする。これを１≦ｊ≦Ｎを満たす全てのｊについて行うことで、各領域に対する代表フィルタを決定することができ、結果としてＮ個の代表フィルタを決定することができる。
【００５４】
図８では、画像を縦に３分割、横に３分割することでこの画像を９個の領域に分割しており、領域８０２については、この領域８０２内のそれぞれの画素に対応するフィルタのうち最も重要度の大きいフィルタが、代表フィルタ８０１として選択されている。
【００５５】
このようにすることで、代表フィルタとして選ばれるフィルタの画素位置は領域内で適度に散らばり、また係数の絶対値が大きく、サイズも大きいフィルタを抽出することができる。なお、画素ごとに異なるフィルタ群を、複数の代表フィルタの線形和で良好に近似できるように代表フィルタを選ぶ方法があれば上記の方法に限らない。
【００５６】
以上が重要度算出部１０３の詳細な説明である。
【００５７】
＜重み係数算出部２００が行う処理について＞
次に、重み係数算出部２００が重みベクトルｗを求める為に行う処理について、より詳細に説明する。座標位置（ｘ’、ｙ’）に対応するフィルタはF(x-x’,y-y’,x’,y’)と表すことができ、代表フィルタｆｉはfi(x-x’,y-y’)と表すことができる。
【００５８】
本実施形態では、以下の評価値Ｖを最小化するように重み値を決定する。
【００５９】
【数３】
0005761988.tif 000004
【００６０】
フィルタF(x-x’,y-y’,x’,y’)との差分自乗和を最小化することで、フィルタF(x-x’,y-y’,x’,y’)の特性を反映して重み値を決定することができる。Vを最小化するようにwi(x’,y’)を決める為には、以下のようにVをwi(x’,y’)で偏微分して0と置けば良い。
【００６１】
【数４】
0005761988.tif 000005
【００６２】
この式を変形すると以下のようになる。
【００６３】
【数５】
0005761988.tif 000006
【００６４】
この式において以下の式（６）のように変数変換を行うと、式（５）は式（１）と同様、Ａｗ＝ｂと表現することができる。
【００６５】
【数６】
0005761988.tif 000007
【００６６】
この式を解くことで、重みベクトルｗを求めることができる。なお、Aの逆行列が存在しない場合は、Aの擬似逆行列を作用させる。なお、相関ベクトル算出部２０３は、式（６）の相関ベクトルｂを求め、相関行列算出部２０４は、式（６）の相関行列Ａを求めることになる。
【００６７】
代表フィルタｆｉに対応する重み値の画素ごとの分布の例を図９に示す。図９(a)には１番目の代表フィルタ９０１に対応する重み値の集合を示しており、図９(b)には２番目の代表フィルタ９０２に対応する重み値の集合を示している。本実施形態では、同じ代表フィルタに対する重み値の数は画素数と等しいため、画像によって重み値の数が変化する。図９では図示の都合上、重み値の集合の一部を切り出して、50x50=2500画素数分のみ表示している。図９において、白色は重み値が大きいことを表している。図９において、重み値は正の値のみであるが、一般的には負の値も取りうる。
【００６８】
また、上記の説明では、説明を簡単にするために、評価値Ｖを式（３）に示す如く構成したが、さらに一般的に、画素位置ごとに重み付けした以下の式（７）に示す如く構成しても良い。
【００６９】
【数７】
0005761988.tif 000008
【００７０】
a(x’,y’)は適当な重み係数である。例えば画像の周波数の高い領域ほどフィルタを正確に再現する必要があると考えられるので、周波数の高い画像領域では重み係数a(x’,y’)の値を大きくすることが考えられる。そのほか、フィルタF(x-x’,y-y’,x’,y’)を代表フィルタと重み係数の線形和で良好に近似する方法があれば上記の方法に限らない。
【００７１】
＜フィルタ演算部３００が行う処理について＞
次に、フィルタ演算部３００が行うフィルタ処理について、より詳細に説明する。配列Ｋは以下の式を満たす。
【００７２】
【数８】
0005761988.tif 000009
【００７３】
本実施形態では、フィルタF(x-x’,y-y’,x’,y’)を以下の式で近似している。
【００７４】
【数９】
0005761988.tif 000010
【００７５】
然るに、上記の式から、入力画像に対するフィルタF(x-x’,y-y’,x’,y’)の作用は以下の式で近似して表現することができる。
【００７６】
【数１０】
0005761988.tif 000011
【００７７】
合成部３０６は、以下の式（１１）を計算することで、上記の式（１０）の計算を実現する。
【００７８】
【数１１】
0005761988.tif 000012
【００７９】
以上の説明は、画素毎に設定されているフィルタを用いた処理であるが、画像領域毎に設定されているフィルタを用いた処理の場合は次のようになる。先ず、画像がＲ個の画像領域に分割され、且つ同じ領域内ではフィルタは同じであるとする。このとき、ｒ番目の領域に対するフィルタはF(x-x’,y-y’,ｒ)と書くことができる（１≦ｒ≦Ｒ）。
【００８０】
そして、上記の説明において、ｗｉ（ｘ、ｙ）をｗｉ（ｒ）に置き換えるだけで、上記の処理と同様の処理を行えばよい。このとき、和を取るインデックスが(x’,y’)からkに変わることに注意する。
【００８１】
画像の左上を中心とした回転手ブレによる場所ごとのブレのフィルタを図１０に示す。本来は各画素において異なるブレフィルタを持つが、図１０では代表する９点のブレフィルタ１００２〜１０１０のみ表示している。図１０に示したブレフィルタ１００２〜１０１０を代表フィルタとする。このとき、点１００１におけるフィルタを近似することを考える。
【００８２】
本実施形態による効果について、図１１を用いて説明する。点１００１におけるフィルタを図１１（ａ）に示す。ブレフィルタ１００６、１００７、１００９、１０１０から、線形補間によって生成した中間フィルタを図１１（ｂ）に示す。ブレフィルタ１００２〜１０１０から、本実施形態による処理によって生成された中間フィルタを図１１（ｃ）に示す。１１０１〜１１０３はそれぞれ、図１１(a)〜(c)のフィルタの一部を取り出して数値表示したものである。１１０１〜１１０３は図１１(a)〜(c)のフィルタにおいて、同じ部分を取り出している。図１１より、線形補間による中間フィルタの生成より、本実施形態に係る生成方法の方が、点１００１におけるフィルタに近いフィルタを生成可能であることが分かる。
【００８３】
次に、本実施形態で要するメモリ量と、画素ごとに異なるフィルタを画像に作用させる場合の計算量について考える。ここでは最大のフィルタサイズをS2 (pixel)、画像の画素数をM2(pixel)とする。
【００８４】
画素ごとに異なるフィルタを全て保持すると必要なメモリはO((MS)2)となる。Oはオーダを表す。一方で本実施形態では、代表フィルタの保持に必要なメモリはO(NS2)であり、重み値の保持に必要なメモリはO(NM2)となるので、合計でO(N(M2+S2))のメモリが必要になる。
【００８５】
通常、フィルタサイズに比べて画像サイズは大きいので、S2＜M2であり、必要なメモリ量はO(NM2)となる。よって代表フィルタ数Nがフィルタの要素数S2に比べて小さいほど、本実施形態においてメモリ削減の効果が現れることになる。例えば図１０の例でN=9、S=21とすればメモリ量はほぼ９／２１２〜１／５０に削減される。
【００８６】
次に、フィルタを画像に作用させる場合の演算量について考察する。従来の手法では画素ごとにフィルタを作用させるため、計算量はO((MS)2)となる。本実施形態によれば、代表フィルタの数をNとすると、式(11)において、Ji(x’,y’)の計算にO(N M2)必要となる。また、本実施形態ではフィルタの画像への演算を畳み込みに書き直すことができるので、FFTを用いると式(11)の計算にO(NMlogM)の計算量が必要となる。画像が十分大きければO(NM2)＞＞O(NMlogM)なので、本実施形態ではフィルタを画像に作用させるために、O(NM2)の計算量が必要となる。よって、代表フィルタ数Nがフィルタの要素数S2に比べて小さいほど、本実施形態において計算量削減の効果が現れることになる。例えば図１０の例でN=9、S=21とすれば計算量はほぼ９／２１２〜１／５０に削減される。
【００８７】
以上の説明により、本実施形態によれば、画素(領域)ごとに異なるフィルタ群を代表的なフィルタと重み係数の線形結合で近似することでフィルタを格納するメモリを削減し、画像への演算量を削減することが可能になる。
【００８８】
なお、本実施形態ではフィルタの例として、ブレのフィルタを挙げて説明したが、例えば光学ボケや被写体距離に応じたピントボケなど、如何なる目的のためのフィルタであっても、本実施形態に適用することができる。
【００８９】
［第２の実施形態］
第１の実施形態では、代表フィルタを取得する際にフィルタ群に重要度を割り当て、重要度の高いフィルタを代表フィルタとして取得した。本実施形態では、主成分分析を用いて、代表フィルタをフィルタ群の線形結合で構成する場合について説明する。
【００９０】
本実施形態に係る画像処理装置は、図１に示した構成の代わりに、図１２に示した構成を有する点のみが第１の実施形態と異なる。然るに以下では図１２に示した構成について説明する。もちろん、本実施形態においても、図１２に示した構成は別個の装置に組み込んでも良い。
【００９１】
図１２に示す構成は、画像を構成するそれぞれの画素に対して予め設定されたフィルタから、これらのフィルタを近似する主要なフィルタを、代表フィルタとして生成する為の構成に係るものである。
【００９２】
代表フィルタ取得部１２００は、相関行列算出部１２０１、対角化処理部１２０２、生成部１２０３、端子１０１，１０２，１０５、を有する。
【００９３】
相関行列算出部１２０１は、フィルタデータベース１１０に格納されている画素毎のフィルタを読み出し、フィルタ間の相関行列を求める。対角化処理部１２０２は、相関行列算出部１２０１が求めた相関行列の固有ベクトルと固有値とを求める。なお、固有ベクトルは、互いに直交するように取る（相関行列は対称行列なので、直交するように固有ベクトルを取ることが可能である）。生成部１２０３は先ず、端子１０２を介して代表フィルタ数Ｎを取得する。そして生成部１２０３は、固有値の大きい順に固有ベクトルとフィルタとの線形結合をつくり、代表フィルタを生成する。
【００９４】
次に、代表フィルタ取得部１２００が行う処理について、同処理のフローチャートを示す図１３を用いて説明する。
【００９５】
ステップＳ１３０１では相関行列算出部１２０１は、フィルタデータベース１１０に格納されている画素毎のフィルタを、端子１０１を介して読み出す。そして相関行列算出部１２０１は、読み出したフィルタ間の相関行列を求める。相関行列は異なるフィルタ同士の相関行列であっても良いし、同じフィルタ同士の相関行列であっても良い。
【００９６】
ステップＳ１３０２では対角化処理部１２０２は、ステップＳ１３０１で求めたそれぞれの相関行列について、相関行列を対角化して固有値と固有ベクトルと、を求める。そして対角化処理部１２０２は、値の大きい固有値から順に、１，２，３，…というようにインデックスを割り当てる。
【００９７】
ステップＳ１３０３では生成部１２０３は、以下で用いる変数ｉを１に初期化する。そしてステップＳ１３０４では生成部１２０３は、変数ｉの値のインデックスが割り当てられている固有値に対応する固有ベクトルと、フィルタと、の線形結合を計算し、線形結合結果をｉ番目の代表フィルタとして求める。本ステップにおける処理の詳細については後述する。
【００９８】
ステップＳ１３０５では生成部１２０３は、求めたｉ番目の代表フィルタを、端子１０５を介して代表フィルタデータベース１２０に登録する。ステップＳ１３０７では生成部１２０３は、変数ｉの値が代表フィルタ数Ｎ以上であるか否かを判断する。この判断の結果、変数ｉの値≧Ｎの場合には本処理を終了し、変数ｉの値＜Ｎの場合には処理はステップＳ１３０６に進む。ステップＳ１３０６では生成部１２０３は、変数ｉの値を１つインクリメントし、ステップＳ１３０４以降の処理を行う。
【００９９】
次に、ステップＳ１３０４における処理の詳細について説明する。代表フィルタ取得部１２００は、主成分分析を用いて代表フィルタを生成している。代表フィルタは各フィルタの線形結合として生成される。ｉ番目の代表フィルタｆｉ（ｘ、ｙ）は以下の式に従って生成するものとする。
【０１００】
【数１２】
0005761988.tif 000013
【０１０１】
ここで、viはｉ番目の代表フィルタｆｉに対する重みである。viは2次元配列であるが、vi(x’,y’)を左上から右下に向かって1列に並び替えることにより、ベクトルとして扱うことができる。
【０１０２】
相関行列算出部１２０１は、以下の式を計算することで、相関行列を求める。
【０１０３】
【数１３】
0005761988.tif 000014
【０１０４】
CFも4つの添え字を持っているが、viと同様の並び替えを行うことにより行列として扱うことができる。
【０１０５】
対角化処理部１２０２は、相関行列CFを対角化し、重みviを固有ベクトルとして求める。生成部１２０３は、固有値の大きい固有ベクトルから順に取り出し、式(12)にしたがって代表フィルタを生成する。
【０１０６】
第１の実施形態ではフィルタの中から重要度の高いフィルタをそのまま代表フィルタとして取得した。それに対し、第２の実施形態では、主成分分析を用いることで、寄与率の高い代表フィルタを、フィルタ群の線形結合を作ることで構成する。このことにより、第１の実施形態に比べ、少ない代表フィルタ数でより正確にフィルタを近似することが可能になる。
【０１０７】
［第３の実施形態］
第１の実施形態では、画素位置(領域)によって異なるフィルタを代表フィルタと重み係数に分解近似する方法について説明した。本実施形態では、画素位置(領域)と画素値に応じてフィルタが異なる場合のフィルタの分解について説明する。以下では、第１の実施形態との差異のみについて説明する。
【０１０８】
本実施形態では、フィルタデータベース１１０には、それぞれの画素位置について、Ｑ個のフィルタを登録しておく。例えば、図１４に示す如く、画素値が取りうる範囲（図１４では０〜２５５）を５（＝Ｑ）分割し、それぞれの分割領域にα=1,2,3,4,5というようにインデックスを割り当てるとする。この場合、フィルタデータベース１１０には、それぞれの画素位置について、α＝１〜５のそれぞれに対応するフィルタが登録されていることになる。そして、例えば、入力画像中の着目座標位置における画素値が図１４に矢印で示されている位置における値である場合、この着目座標位置に対応する５個のフィルタのうちα＝２に対応するフィルタが、この座標位置に対するフィルタとして選択されることになる。
【０１０９】
第１，２の実施形態と基本的な考え方は同じであり、フィルタを代表フィルタと重み係数の線形結合で近似する。つまりF(x-x’,y-y’,x’,y’,α)を以下の式（１４）に従って近似する。
【０１１０】
【数１４】
0005761988.tif 000015
【０１１１】
第１，２の実施形態と異なるのは、重みベクトルｗがαに依存していることである。あとの動作は第１の実施形態と同様である。重み係数算出部２００内の相関ベクトル算出部２０３は、以下の式（１５）を計算することで、相関ベクトルを求める。
【０１１２】
【数１５】
0005761988.tif 000016
【０１１３】
あとの動作は第１の実施形態と同様である。
【０１１４】
また、フィルタ演算部３００内の重み係数乗算部３０４は、Ji(x’,y’)=wi(x’,y’,α)×I(x’,y’)を計算する。このとき、αは画素値I(x’,y’)から決まる。あとの動作は第１の実施形態と同様である。
【０１１５】
代表フィルタ取得部１２００は、以下の式（１６）により代表フィルタを生成する。
【０１１６】
【数１６】
0005761988.tif 000017
【０１１７】
ここで、viは3次元配列であるが、αを固定してvi(x’,y’,α)を左上から右下に向かって1列に並び替えることで、vi(X,α)のように2次元配列になる。次に、vi(X,α)を左上から右下に向かって一列に並び替えることで、ベクトルとして扱うことができる。
【０１１８】
相関行列算出部１２０１は以下の式（１７）により相関行列を算出する。
【０１１９】
【数１７】
0005761988.tif 000018
【０１２０】
CFは6つの添え字を持っているが、viと同様の並び替えを行うことにより行列として扱うことができる。あとの動作は第２の実施形態と同様である。
【０１２１】
以上の説明により、本実施形態によれば、画素位置(領域)及び画素値ごとに異なるフィルタ群を代表的なフィルタと重み係数の線形結合で近似することで、フィルタを格納するメモリを削減し、画像への演算量を削減することが可能になる。
【０１２２】
［第４の実施形態］
図１，２，３，１２に示した各部は何れもハードウェアとして実装しても良いが、一部若しくは全部をソフトウェア（コンピュータプログラム）として実装しても良い。例えば、フィルタデータベース１１０、代表フィルタデータベース１２０、重み係数データベース２１０、のそれぞれは、ハードディスクドライブ装置に代表される大容量情報記憶装置内に登録しておく。そして、それ以外の各部をコンピュータプログラムとしてコンピュータにインストールしておくと共に、上記の処理で既知の情報としたものや、処理対象となる画像のデータなどもこのコンピュータに格納させておく。また、このコンピュータにはこの大容量情報記憶装置を接続する。
【０１２３】
これにより、このコンピュータが有するＣＰＵがこのインストールされたコンピュータプログラムやデータ、大容量情報記憶装置内に登録された各種のデータベース、を用いて処理を実行することで、上記の実施形態で説明した各処理が実現される。
【０１２４】
なお、上記の各実施形態は適宜組み合わせても良いし、適宜切り替えて使用するようにしても良い。また、上記の各実施形態の構成は、目的を達成することができるのであれば、どのような変更を加えても良く、上記で示した構成は一例に過ぎない。
【０１２５】
（その他の実施例）
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
0005761988.tif 000019
【図２】
0005761988.tif 000020
【図３】
0005761988.tif 000021
【図４】
0005761988.tif 000022
【図５】
0005761988.tif 000023
【図６】
0005761988.tif 000024
【図７】
0005761988.tif 000025
【図８】
0005761988.tif 000026
【図１０】
0005761988.tif 000027
【図１１】
0005761988.tif 000028
【図１２】
0005761988.tif 000029
【図１３】
0005761988.tif 000030
【図１４】
0005761988.tif 000031
【図１５】
0005761988.tif 000032
【図９】
0005761988.tif 000033