画像処理装置および画像処理方法、プログラム
【課題】 複数の視点から被写体を撮像して得られた複数の撮像画像データから、出力画像を示す出力画像データを生成する際に、画質を保ちつつ、計算コストを低減させることを目的とする。
【解決手段】 複数の撮像画像データを入力し、出力画像のピント距離を示すピントパラメータを入力し、被写体までの距離の情報を示す距離情報とピントパラメータとに基づいて、ピント距離よりも手前に被写体が存在する前ぼけ領域と、前記ピント距離よりも奥に被写体が存在する後ぼけ領域とを特定し、前ぼけ領域と前記後ぼけ領域とで異なる数の撮像画像データを用いて、出力画像データを生成する。
【解決手段】 複数の撮像画像データを入力し、出力画像のピント距離を示すピントパラメータを入力し、被写体までの距離の情報を示す距離情報とピントパラメータとに基づいて、ピント距離よりも手前に被写体が存在する前ぼけ領域と、前記ピント距離よりも奥に被写体が存在する後ぼけ領域とを特定し、前ぼけ領域と前記後ぼけ領域とで異なる数の撮像画像データを用いて、出力画像データを生成する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数の視点から撮像された撮像画像データから、被写界深度の浅い画像データを生成する技術に関する。
【背景技術】
【0002】
従来、撮像画像データに対して画像処理を施すことにより被写界深度の浅い画像データを生成する方法が提案されている。特許文献1では、一枚の画像データに対して距離に応じて異なるぼけを付与するフィルタ処理を施すことにより、被写界深度の浅い画像データを生成している。特許文献2では、視点の異なる複数枚の画像データから生成した被写体の3次元モデルに対してレンダリング処理を施すことにより、被写界深度の浅い画像データを生成している。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2011―10194号
【特許文献2】特願2009−211254号
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、特許文献1では手前側をぼかした場合に、被写体の境界が不自然にぼけるなどの画質的な課題がある。特許文献2では手前側も自然にぼかせるものの、計算コストが大きいという課題がある。
そこで、本発明は、複数の視点から被写体を撮像して得られた複数の撮像画像データから、出力画像を示す出力画像データを生成する際に、画質を保ちつつ、計算コストを低減させることを目的とする。
【課題を解決するための手段】
【0005】
上記の目的を達成するために本発明の画像処理装置は、複数の視点から被写体を撮像して得られた複数の撮像画像データから、出力画像を示す出力画像データを生成する画像処理装置であって、前記複数の撮像画像データを入力する撮像画像データ入力手段と、前記出力画像のピント距離を示すピントパラメータを入力するパラメータ入力手段と、前記被写体までの距離の情報を示す距離情報と前記ピントパラメータとに基づいて、前記ピント距離よりも手前に被写体が存在する前ぼけ領域と、前記ピント距離よりも奥に被写体が存在する後ぼけ領域とを特定する領域特定手段と、前記前ぼけ領域と前記後ぼけ領域とで異なる数の撮像画像データを用いて、前記出力画像データを生成する画像生成手段と、を有することを特徴とする。
【発明の効果】
【0006】
本発明によれば、複数の視点から被写体を撮像して得られた複数の撮像画像データから、出力画像を示す出力画像データを生成する際に、画質を保ちつつ、計算コストを低減させることが可能となる。
【図面の簡単な説明】
【0007】
【図1】本実施形態における画像処理装置のシステム構成を示すブロック図。
【図2】本実施形態における撮像装置を表す図。
【図3】本実施形態における概要機能構成を表す図。
【図4】本実施形態における処理の流れを示すフローチャート。
【図5】本実施形態における奥行き推定処理の流れを示すフローチャート。
【図6】本実施形態における視点位置の間隔と被写体までの距離との関係を示す図。
【図7】本実施形態における領域分割処理の流れを示すフローチャート。
【図8】本実施形態における領域分割画像の例を示す図。
【図9】本実施形態における深度変更処理の流れを示すフローチャート。
【図10】本実施形態における基準画像とデプス画像を用いた深度変更処理の流れを示すフローチャート。
【図11】本実施形態におけるデプス値とフィルタ径の関係を示す図。
【図12】本実施形態における多視点画像を用いた深度変更処理の流れを示すフローチャート。
【図13】本実施形態における仮想絞りパラメータに含まれる重み係数の例を示す図。
【図14】実施例2における深度変更処理の流れを示すフローチャート。
【図15】本実施形態におけるブロック分割の例。
【発明を実施するための形態】
【0008】
[実施例1]
本実施例では、図2に示すような複数のカメラユニット201〜209をからなる撮像装置107で撮像した複数の画像データ(撮像画像データ)を基に被写界深度の浅い画像を生成する。この際、ピントを合わせたい距離(仮想ピント距離)よりも手前側の領域では複数の画像データを、奥側の領域では一枚の画像データをそれぞれ使用し被写界深度の浅い画像データ(合成画像データ)を生成する。なお、本実施例においてカメラユニット201〜209は格子状に等間隔になるよう配置されており、各カメラユニットの上下軸、左右軸、光軸は全て同じ方向であるとする。そして、撮像画像データは、パンフォーカスで撮像された画像データであることが望ましい。また、本実施例で生成する合成画像データは、カメラユニット205で撮像された画像データの被写界深度を浅くしたものである。
【0009】
まず、本実施例における画像処理装置のシステム構成例について、図1を用いて説明する。同図において、CPU101は、RAM102をワークメモリとしてROM103及びハードディスクドライブ(HDD)105に格納されたプログラムを実行し、システムバス112を介して後述する各構成を制御する。これにより、後述する様々な処理が実行される。HDDインタフェイス(I/F)104は、HDD105や光ディスクドライブなどの二次記憶装置を接続する、例えばシリアルATA(SATA)等のインタフェイスである。CPU101は、HDDI/F104を介して、HDD105からのデータ読み出し、およびHDD105へのデータ書き込みが可能である。さらにCPU101は、HDD105に格納されたデータをRAM102に展開し、同様に、RAM102に展開されたデータをHDD105に保存することが可能である。そしてCPU101は、RAM102に展開したデータをプログラムとみなし、実行することができる。撮像インタフェイス(I/F)106は、図2に示すような複数のカメラユニット201〜209からなる撮像装置107などを接続する、例えばUSBやIEEE1394などのシリアルバスインタフェイスである。CPU101は、撮像I/F106を介して撮像装置107を制御し、撮像を行うことが可能である。さらに、CPU101は、撮像I/Fを介して撮像装置107から撮像したデータを読み込むことが可能である。入力インタフェイス(I/F)108は、キーボードやマウスなどの入力デバイス109を接続する、例えばUSBやIEEE1394等のシリアルバスインタフェイスである。CPU101は、入力I/F108を介して入力デバイス109からデータを読み込むことが可能である。出力インタフェイス(I/F)110は、画像表示装置等の出力デバイス111を接続する、例えばDVIやHDMI等の映像出力インタフェイスである。CPU101は、出力I/F110を介して出力デバイス111にデータを送り、表示を実行させることができる。
【0010】
次に、本実施例に係る一連の処理を行う際の概要機能構成について、図3を用いて説明する。CPU101の機能部としての撮像画像データ入力部301は、撮像画像データ307および撮像装置情報308を撮像装置107あるいはROM103、HDD105等の記憶装置から取得する。なお、撮像画像データ307は撮像装置107によって異なる視点位置(撮像位置)から被写体を撮像して得られる複数の画像を示すデータである。また、撮像装置情報308は、撮像装置107の撮影時の画角や視点位置を含む情報である。
【0011】
また、CPU101の機能部としてのパラメータ入力部302は、仮想ピントパラメータ309および仮想絞りパラメータ310を、入力デバイス109あるいはROM103、HDD105等の記憶装置から取得する。仮想ピントパラメータ309は仮想的なピント面までの距離を含む情報である。即ち、仮想ピントパラメータ309は、一連の処理による出力画像のピント距離の情報を含む。また、仮想絞りパラメータ310は奥行きに応じて画像をぼかす際に使用するフィルタ径及び重み係数に関する情報を含む。CPU101の機能部としての距離推定処理部303は、撮像画像データ307および撮像装置情報308に基づき、ステレオマッチング法により撮像シーンのデプス値を推定し、デプス画像データ311を生成する。デプス画像データ311は、撮像装置107から被写体までの画素ごとの距離に係る情報を有する。デプス画像データ311の距離情報は、領域ごと(例:矩形ブロックごと)に設定されていても良い。CPU101の機能部としての領域分割処理部304は、仮想ピントパラメータ309及びデプス画像データ311に基づき、撮像シーンを仮想的なピント面よりも手前の領域(前ぼけ領域)と奥の領域(後ぼけ領域)に分割し、領域分割画像データ312を生成する。即ち、前ぼけ領域は、仮想的なピント面よりも手前に被写体が存在する領域を、後ぼけ領域は、仮想的ピント面よりも奥に被写体が存在する領域を示している。CPU101の機能部としての深度変更処理部305は、撮像装置情報308、仮想ピントパラメータ309、仮想絞りパラメータ310、領域分割画像データ312に基づいて、撮像画像データ307を用いて、深度変更画像データ313を生成する。最後に、CPU101の機能部としての画像出力部306は、深度変更画像データ313(出力画像データ313)を出力デバイス111へ出力したり、HDD105へ保存したりする。
【0012】
図4は、本実施例の画像処理装置における一連の処理の動作手順を示すフローチャートである。詳細には、図4のフローチャートに示す手順を記述したコンピュータ実行可能なプログラムをROM103あるいはHDD105からRAM102上に読み込んだ後に、CPU101によって該プログラムを実行することによって当該処理が実行される。以下、図4に示す各処理について説明する。
【0013】
まずステップS401において、撮像画像データ入力部301は、撮像装置107を用いて撮像画像データ307を撮像し、撮像画像データ307およびカメラユニット201〜209の画角や視点位置を含む撮像装置情報308を取得する。あるいは、予めROM103やHDD105などの記録装置に撮像画像データ307および撮像装置情報308を保持しておき、これを撮像画像データ入力部301が取得するようにしてもよい。
【0014】
次にステップS402において、パラメータ入力部302は入力デバイス109から仮想ピント距離を含む仮想ピントパラメータ309および画像合成時に使用する各画像データの重み係数を含む仮想絞りパラメータ310を取得する。あるいは、予めROM103やHDD105などの記録装置に仮想ピントパラメータ309および仮想絞りパラメータ310を保持しておき、これをパラメータ入力部302が取得するようにしてもよい。
【0015】
次にステップS403において、距離推定処理部303はS401で取得した撮像画像データ307および撮像装置情報308を用いて距離推定処理を行い、撮像したシーンの奥行きを推定しシーンのデプス画像データ311を生成する。S403で行う距離推定処理については後に詳述する。
【0016】
次にステップS404において、S402で取得した仮想ピントパラメータ309およびS403で取得したデプス画像データ311を基に、シーンを2領域に分割した領域分割画像データ312を生成する。ここで、2領域とはピントを合わせたい距離よりも被写体が手前側に存在する領域(前ぼけ領域)と、ピントを合わせたい距離よりも被写体が奥側に存在する領域(後ぼけ領域)である。S404で行う領域分割処理については後に詳述する。
【0017】
次にステップS405において、撮像装置情報308、仮想絞りパラメータ310、領域分割画像データ312を基に、撮像画像データ307から撮像画像データ307よりも被写界深度の浅い深度変更画像データ313(出力画像データ313)を生成する。S405で行う画像合成処理については後に詳述する。
【0018】
次にステップS406において、画像出力部306は深度変更画像データ313を出力デバイス111に表示したり、HDD105などの記録装置に記録したりする。
【0019】
<距離推定処理>
ここでは、ステップS403で行う距離推定処理について説明する。距離推定処理では、視点位置の異なる複数の撮像画像データ307を基に、撮像したシーンの距離を推定することでデプス画像データ311を生成する。距離推定方法としては既存の方法を利用する。例えば、ステレオ法、マルチベースラインステレオ法などが利用可能である。本実施例では、ステレオ法によって距離推定を行う。以下、図5に示すフローチャートを用い、距離推定処理の詳細を説明する。
【0020】
まずステップS501において、撮像画像データ307から処理に使用する2画像を選択する。本実施例では撮像装置107の中央のカメラユニット205で撮像された画像データと、カメラユニット205と横方向に隣接するカメラユニット206で撮像された画像データを選択するものとする。以下、前者を基準画像を示す基準画像データ、後者を対象画像を示す対象画像データと呼ぶ。
【0021】
次にステップS502において、最初の画素を注目画素として初期化する。
【0022】
次にステップS503において、全画素で距離値が求められているかを判定する。全画素で距離値が求められている場合はステップS507へ進み、距離値の求められていない画素がある場合はステップS504へ進む。
【0023】
次にステップS504では、まず基準画像の注目画素とその周囲の画素からなる領域を選択する。そして選択した領域を用いて対象画像とパターンマッチングを行い、対象画像中から注目画素に対応する画素(対応画素)を求める。
【0024】
次にステップS505において、撮像装置情報308と注目画素とS504で求めた対応画素を基に注目画素に対応する距離値pを求める。距離値pは、図6に示すα、β、sを基に以下の式で表される。
【0025】
【数1】
【0026】
ここで、αはカメラユニット205の水平画角、基準画像データの視点位置、注目画素の座標から算出される角度である。βはカメラユニット206の水平画角、対象画像データの視点位置、対応画素の座標から算出される。sはカメラユニット間の距離であり、基準画像データおよび対象画像データの視点位置より算出される。
【0027】
次にステップS506において、注目画素を次の画素へ更新しS503へ戻る。
【0028】
最後にステップS507において、デプス画像データ311を出力する。
【0029】
なお、本実施例ではステップS501において、カメラユニット205、206で撮像した画像データを選択し距離推定を行ったが、距離推定可能なカメラの組み合わせはこれに限るものではない。例えば、対象画像データとして他のカメラユニットで撮像した画像データを選択しても構わない。また、本実施例では画素ごとに距離情報を取得するとしたが、矩形ブロック等の領域ごとに距離情報を取得しても良い。
【0030】
<領域分割処理>
ここでは、ステップS404で行う領域分割処理について説明する。領域分割処理では、仮想ピントパラメータ309及びデプス画像データ311を基に、ピントを合わせたい距離よりも被写体が手前側に存在する領域(前ぼけ領域)と、奥側に存在する領域(後ぼけ領域)にシーンを分割し、領域分割画像データ312を生成する。以下、図7に示すフローチャートを用い、領域分割処理の詳細を説明する。
【0031】
まずステップS701において、前ぼけ領域の領域特定を行う。仮想ピントパラメータ309より得られる仮想ピント距離をdp、デプス画像データ311の画素値をD(i,j)とする。このとき、D(i,j)≦dpとなる画素(i,j)と、の周囲r1画素以内に含まれる画素の集合を前ぼけ領域とする。ここで、r1はあらかじめ定めたぼけの最大半径とする。
【0032】
次にステップS702において、後ぼけ領域の領域特定を行う。デプス画像データ311において前ぼけ領域以外の画素の集合を後ぼけ領域とする。
【0033】
最後にステップS703において、前ぼけ領域、後ぼけ領域にそれぞれ異なるラベル値を割り当てた画像データを領域分割画像データ312として出力する。
【0034】
以上の処理によって得られる領域分割画像データ312の例を図8に示す。デプス画像データ311を距離値d0、d1、d2からなる画像データとし、仮想ピントパラメータ309から得られる仮想ピント距離dpの値がd2であるとする。この場合、デプス画像データ311において距離値がd2となる画素とその周囲r画素以内に含まれる画素の集合が前ぼけ領域、それ以外の画素の集合が後ぼけ領域となる。
【0035】
なお、本実施例ではステップS701において、前ぼけ領域を決める際の距離rはあらかじめ定めた値としたが、距離値rの設定方法はこれに限るものではない。例えば、仮想ピントパラメータより、ぼけの最大半径を計算しこの値を距離rとしてしてもよい。こうすることで、仮想ピントパラメータに応じて最適な前ぼけ領域を設定可能である。
【0036】
<深度変更処理>
ここでは、ステップS405で行う深度変更処理について説明する。深度変更処理では、領域分割画像データ312を参照しながら、前ぼけ領域と後ぼけ領域とでそれぞれ異なる処理を適用し深度の浅い深度変更画像データ313(出力画像データ313)を生成する。その際、前ぼけ領域では撮像画像データ307の中から視点位置の異なる複数の画像データを合成することにより、深度変更画像データ313の画素値を算出する。また、後ぼけ領域ではカメラユニット205で撮像した基準画像データとデプス画像データ311とを用いることにより深度変更画像データ313の画素値を算出する。以下、図9に示すフローチャートを用い、深度変更処理の詳細を説明する。
【0037】
まずステップS901において、領域分割画像データ312を複数のブロックに分割する。後述するステップS905及びステップS906処理はここで定めたブロック毎に行う。ブロックの分割例を図15(a)に示す。
【0038】
次にステップS902において、注目ブロックを最初のブロックに初期化する。
【0039】
次にS903において、全ブロックに対して後述するステップS905あるいはステップS906の処理が行われたか否かを判定する。全ブロックで処理が行われている場合はステップS908へ進み、そうでない場合はS904へ進む。
【0040】
次にステップS904において、注目ブロック内に前ぼけ領域が含まれているかを判定する。含まれていない場合はステップS905へ進み、含まれている場合はステップS906へ進む。
【0041】
ステップS905では、一つの基準画像データとデプス画像データ311とを用いて深度を浅くする処理を行い、深度変更画像データ313の注目ブロックに対応する領域の画素値を算出する。詳細は後述する。
【0042】
ステップS906では、複数の撮像画像データ307を用いて深度を浅くする処理を行い、深度変更画像データ313の注目ブロックに対応する領域の画素値を算出する。詳細は後述する。
【0043】
ステップS907では、注目ブロックを次の未処理ブロックへ更新し、ステップS903へ戻る。
【0044】
最後にステップS908において、深度変更画像データ313を出力する。
【0045】
以上説明した処理を行うことで、複数の画像データからより被写界深度の浅い画像データを生成する際に、ぼけの画質を保ちつつ計算コストを低減させる効果を奏する。
【0046】
<<基準画像データとデプス画像データを用いた深度変更処理>>
ステップS905で行う前ボケ領域を含まないブロックに対して行う深度変更処理について説明する。ここでは、デプス画像データ311を参照することで被写体の前後関係を考慮しつつ基準画像データを平滑化することにより、深度変更画像データ313の注目ブロックに対応する画素値を算出する。以降、深度変更画像データ313の画素(i,j)に対応する画素値をH(i,j)と表す。以下、図10に示すフローチャートを用い、処理の詳細を説明する。
【0047】
まずステップS1001において、注目画素(i,j)を最初の画素に初期化する。
【0048】
次にステップS1002において、注目ブロック内の全画素について処理を行ったか否かを判定する。全画素が処理済みである場合はステップS905を終了し、そうでない場合はステップS1003へ進む。
【0049】
次にステップS1003において、以降の処理で使用する変数val,sumをそれぞれ0に初期化する。ここで、valは出力画素値を計算するための変数、sumは以降で述べる係数の和を計算するための変数である。
【0050】
次にステップS1004において、近傍画素(i’,j’)を初期化する。近傍画素(i’,j’)は、注目画素(i,j)からr2画素以内の領域(以降近傍領域と呼ぶ)に含まれる画素である。ここでr2はあらかじめ定めた定数とする。
【0051】
次にステップS1005において、近傍領域内の全画素を近傍画素として参照したかを判定する。未参照の画素がある場合はステップS1006へ進み、全画素を参照している場合はステップS1011へ進む。
【0052】
次にステップS1006において、注目画素(i,j)と近傍画素(i’,j’)のフィルタ径を算出する。フィルタ径は、仮想絞りパラメータに含まれる値であり、デプス値に応じて異なる値を持つ。デプス値とフィルタ径の関係を図11に示す。フィルタ径Rfは、仮想ピントパラメータ309に含まれる仮想ピント距離dpと、デプス画像データ311から得られる各画素のデプス値が等しい場合に0となり、デプス値が仮想ピント距離から前後に離れるにつれ大きな値となる。画素(x、y)に対応するデプス値をD(x,y)とすると、注目画素のフィルタ径Rf1、近傍画素のフィルタ径Rf2は以下の式により求められる。
【0053】
【数2】
【0054】
次にステップS1007において、近傍画素(i’,j’)が処理対象画素か否かの判定を行う。処理対象画素の場合はステップS1008へ進み、処理対象画素でない場合はステップS1010へ進む。判定には、注目画素及び近傍画素のデプス値、注目画素のフィルタ径rfを用いた以下に示す2つの判定式を用いる。
【0055】
【数3】
【0056】
ここで、式(4)は近傍画素が注目画素より手前側か奥側かを判定している。近傍画素が注目画素よりも手前側の場合は「真」、奥側の場合は「偽」となる。式(5)は注目画素と近傍画素の間の距離が注目画素のフィルタ径よりも大きいか否かを判定している。注目画素と近傍画素の間の距離が注目画素のフィルタ径よりも小さければ「真」、大きければ「偽」となる。これらの式により、オクルージョンの有無を判定している。式(4)または式(5)が真の場合は、近傍画素(i’,j’)を処理対象画素とみなしステップS1008へ進む。式(4)式(5)がともに偽の場合は、近傍画素(i’,j’)を処理対象画素から除外しステップS1010へ進む。なお、対象画素の選択方法はこれに限るものではない。例えば、式(4)のみを判定式に用いてもよいし、オクルージョンの有無を判定する他の判定式を用いるなどしても構わない。
【0057】
次にステップS1008において、処理対象画素となる近傍画素の重み係数cを算出する。ここでは、注目画素から近傍画素までの距離を用いて下記の式に従い係数cを算出する。
【0058】
【数4】
【0059】
なお、上式ではぼけを滑らかにするためにガウシアンを使用しているが、係数の決め方はこれに限るものではない。例えば、フィルタ係数を多項式関数に基づいて決定するなどしてもよい。
【0060】
次にステップS1009において、変数val,sumの値をそれぞれ下記のように更新する。
【0061】
【数5】
【0062】
ここでI(x’,y’)は近傍画素の画素値である。
【0063】
次にステップS1010において、近傍画素(i’,j’)を更新しステップS1005へ戻る。
【0064】
ステップS1011では、深度変更画像データ313における注目画素(i,j)の画素値H(i,j)を次式に従い算出する。
【0065】
【数6】
【0066】
ここでは、近傍画素の重み付け和を係数の合計値で正規化することにより、処理対象画素の有無による画素値のばらつきを補正している。
次にステップS1012において、近傍画素(i,j)を更新しステップS1012へ戻る。
【0067】
以上の処理により、深度変更画像データ313の注目ブロックに対応する領域を生成する。
【0068】
なお、本実施例ではステップS1004において、近傍領域を決める際の距離値Rの値はあらかじめ定めた値としたが、距離値Rの設定方法はこれに限るものではない。例えば、フィルタ径の最大値をRにしてもよい。こうすることで、仮想ピントパラメータに応じて最適な大きさの近傍領域を設定可能である。
【0069】
<<多視点画像データを用いた深度変更処理>>
ステップS906で行う前ボケ領域を含むブロックに対して行う深度変更処理について説明する。ここでは、合成開口法を用いて複数の撮像画像データ307からより深度の浅い画像データを生成する例を述べる。本処理によって、深度変更画像データ313の注目ブロックに対応する領域を生成する。以下、図12に示すフローチャートを用い、処理の詳細を説明する。
【0070】
まずステップS1201において、ステップS402で取得した仮想絞りパラメータ310に含まれる重み係数を用いて、画像データを合成する際に用いる重み係数wを設定する。仮想絞りパラメータ310に含まれる重み係数は複数の撮像画像データ307に対する係数のセットである。図13に示すように、撮像画像データ307の視点位置をそれぞれPmと表し、Pmに対応する撮像画像データ307を画像データImとする。このとき、Imに対応する重み係数の値をW(m)とする。ここでW(m)はP4を中心としたガウス関数に従い、総和が1になるよう正規化された値を設定している。W(m)をガウス関数に従うように設定することにより、合成時に画像データを滑らかにぼかすことができる。
【0071】
次にステップS1202において、撮像装置情報308を基に各画像データのシフト量を算出する。ピント距離をdとした際の画像データImの水平方向のシフト量△i(m、d)および垂直方向のシフト量△j(m、d)は以下の式で表される。
【0072】
【数7】
【0073】
ここで、W、Hはそれぞれ画像データの水平方向、垂直方向の画像サイズ、θwはカメラユニットの水平視野角、θhはカメラユニットの垂直視野角である。また、(sm,tm)はxy平面上におけるPmの座標、(s‘,t’)はカメラユニット205の視点位置P4の座標である。
【0074】
次にステップS1103において、ステップS1102で求めたシフト量、ステップS1101で求めた重み係数を用いて、撮像画像データ307に対して重み付け加算処理を行い、注目ブロック内の深度変更画像データ313の画素値H(i,j)を算出する。画素値H(i,j)は以下の式で算出する。
【0075】
【数8】
【0076】
以上の処理により、深度変更画像データ313の注目ブロックに対応する領域を生成する。
【0077】
なお、ここでは撮像画像データを合成開口撮像法を用いて合成する方法について述べたが、他の方法用いても構わない。例えば、撮像画像データから視点位置を内装するように補間画像データを生成し、合成開口撮像法によって撮像画像データと補間画像データとを合成することにより深度変更画像データを生成しても構わない。あるいは、撮像画像データからシーンの3次元的なモデルを生成し、それを用いてレンダリングを行うことで深度変更画像データを生成しても構わない。これらの方法を用いた場合には、よりぼけの画質が良好な深度変更画像データを得ることができる。
【0078】
<<深度変更処理の比較>>
一般的に、前ぼけ領域に対する深度変更処理は複数の撮像画像データに基づく処理であるため、計算コストは高い。仮に、前ぼけ領域に対する深度変更処理を基準画像データとデプス画像データとに基づいて行ったとすると、ぼけ領域の画質は著しく悪いものとなる。これは前ボケになる手前の被写体に、後ろの被写体の一部が隠れているためである。前ボケにより本来後ろの被写体の隠れていた部分が見えてくるはずだが、その情報がないため画質が著しく低下してしまう。複数の撮像画像データを用いることで、隠れた部分の情報を基準画像データ以外の撮像画像データから得ることができる。これにより前述した前ボケ領域の画質の低下を防ぐことができる。
【0079】
一方で、後ぼけ領域に対する深度変更処理は基準画像データとデプス画像データとに基づく処理であるため、計算コストは低い。仮に、後ぼけ領域に対する深度変更処理を複数の撮像画像データに基づいて行ったとしても、ぼけ領域の画質の向上は高くない。これは、手前の被写体に後ろの被写体の一部が隠れてしまうが、この隠れた部分は後ろの被写体をぼかす際に画質にほとんど影響しないためである。
【0080】
本実施例は、前ぼけ領域に対して複数の撮像画像データに基づいて深度変更処理を行う一方で、後ぼけ領域に対して基準画像データとデプス画像データとに基づいて深度変更処理を行う。これにより、ぼけ領域の画質を維持しながら、深度変更処理に要する計算コストを低減させることができる。
【0081】
<変形例>
・本実施例では、後ぼけ領域に対して基準画像データとデプス画像データとに基づいて深度変更処理を行うこととした。しかしながら、後ぼけ領域に対する深度変更処理はこれに限らず、前ぼけ領域に対する深度変更処理に要する計算コストよりも低い計算コストで実現される深度変更処理であれば、何であっても構わない。例えば、後ぼけ領域に対する深度変更処理をN枚の撮像画像データに基づく処理とし、前ぼけ領域に対する深度変更処理をM枚(M>N)の撮像画像データに基づく処理としても良い。
【0082】
[実施例2]
実施例1ではシーンを前ぼけ領域と後ぼけ領域の2領域に分割した。実施例2では、これらの境界に中間領域を設定することで、前ぼけ領域と後ぼけ領域の境界を滑らかに接続する。
【0083】
実施例2では実施例1と比較し、ステップS405で行う深度変更処理が異なる。以下、深度変更処理の詳細を説明する。
【0084】
実施例1ではブロック毎に異なる処理を適用して深度を浅くしていたが、実施例2ではブロックの境界部分において処理結果をブレンドすることでブロックの境界を滑らかに接続する。以下、図14に示すフローチャートを用い詳細を説明する。
【0085】
まずステップS1401において、領域分割画像データ312を基に画像データを複数の領域に分割する。まずは、ステップS902と同様に複数のブロックに分割した後、前ぼけ領域を含むブロックと前ぼけ領域を含まない領域とに分類し、その境界領域を中間領域とする。分割結果の例を図15(b)に示す。ここでは、前ぼけ領域を含むブロックと、前ぼけ領域を含まないブロックの境界から距離r内に含まれる画素の集合を中間領域としている。
【0086】
次にステップS1402において、以降の処理を行う注目領域を初期化する。
【0087】
次にステップS1403において、全領域で処理が行われたかを判定する。全領域で処理が行われている場合はステップS1409へ進み、未処理の領域がある場合はステップS1404に進む。
【0088】
次にステップS1404において、領域の判定を行う。注目領域が前ぼけ領域を含まない場合はステップS1405へ進み、前ぼけ領域を含む場合はステップS1406へ進み、中間領域の場合はステップS1407へ進む。
【0089】
ステップS1405では、実施例1のステップS905と同様に基準画像データとデプス画像データとを用いて深度変更処理を行う。
【0090】
ステップS1406では、実施例1のステップS906と同様に複数の撮像画像データ307を用いて深度変更処理を行う。
【0091】
ステップS1407では、実施例1のステップS905の方法と実施例1のステップS906の方法とで2種類の深度変更処理を行い、その結果をブレンドする。ステップS905の方法で得られた画像データH1、ステップS906の方法で得られた画像データH2とすると、深度変更画像データHは下記の式に基づいて算出する。
【0092】
【数9】
【0093】
ここで、αは中間領域の範囲を決める距離rと、前ぼけ領域を含まない領域から画素(i,j)までの距離によって定まる0以上1以下の係数である。αの値は画素(i,j)が前ぼけ領域を含まない領域に近いほど1に近づき、前ぼけ領域を含む領域に近づくほど0に近い値となる。
【0094】
次にステップS1408では、注目領域を更新しステップS1403へ戻る。
【0095】
最後にステップS1309において、深度変更画像データ313を出力する。
【0096】
以上説明した処理を行うことで、複数の画像からより被写界深度の浅い画像を生成する際に、前ぼけ領域と後ぼけ領域との境界を滑らかに接続しながら、ぼけの画質を保ちつつ計算コストを低減させる効果を奏する。
【0097】
<その他の変形例>
実施例1及び実施例2ではステップS403の距離推定処理によりデプス画像データ311を生成していたが、デプス画像データ311の生成方法はこれに限るものではない。例えば、シーンの奥行きを外部のセンサを利用して測定し、それを基にデプス画像データを生成してもかまわない。あるいは、新たに撮像装置107に測距センサを設け、それを基にデプス画像データを生成してもかまわない。
【0098】
(その他の実施例)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施例の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
【技術分野】
【0001】
本発明は、複数の視点から撮像された撮像画像データから、被写界深度の浅い画像データを生成する技術に関する。
【背景技術】
【0002】
従来、撮像画像データに対して画像処理を施すことにより被写界深度の浅い画像データを生成する方法が提案されている。特許文献1では、一枚の画像データに対して距離に応じて異なるぼけを付与するフィルタ処理を施すことにより、被写界深度の浅い画像データを生成している。特許文献2では、視点の異なる複数枚の画像データから生成した被写体の3次元モデルに対してレンダリング処理を施すことにより、被写界深度の浅い画像データを生成している。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2011―10194号
【特許文献2】特願2009−211254号
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、特許文献1では手前側をぼかした場合に、被写体の境界が不自然にぼけるなどの画質的な課題がある。特許文献2では手前側も自然にぼかせるものの、計算コストが大きいという課題がある。
そこで、本発明は、複数の視点から被写体を撮像して得られた複数の撮像画像データから、出力画像を示す出力画像データを生成する際に、画質を保ちつつ、計算コストを低減させることを目的とする。
【課題を解決するための手段】
【0005】
上記の目的を達成するために本発明の画像処理装置は、複数の視点から被写体を撮像して得られた複数の撮像画像データから、出力画像を示す出力画像データを生成する画像処理装置であって、前記複数の撮像画像データを入力する撮像画像データ入力手段と、前記出力画像のピント距離を示すピントパラメータを入力するパラメータ入力手段と、前記被写体までの距離の情報を示す距離情報と前記ピントパラメータとに基づいて、前記ピント距離よりも手前に被写体が存在する前ぼけ領域と、前記ピント距離よりも奥に被写体が存在する後ぼけ領域とを特定する領域特定手段と、前記前ぼけ領域と前記後ぼけ領域とで異なる数の撮像画像データを用いて、前記出力画像データを生成する画像生成手段と、を有することを特徴とする。
【発明の効果】
【0006】
本発明によれば、複数の視点から被写体を撮像して得られた複数の撮像画像データから、出力画像を示す出力画像データを生成する際に、画質を保ちつつ、計算コストを低減させることが可能となる。
【図面の簡単な説明】
【0007】
【図1】本実施形態における画像処理装置のシステム構成を示すブロック図。
【図2】本実施形態における撮像装置を表す図。
【図3】本実施形態における概要機能構成を表す図。
【図4】本実施形態における処理の流れを示すフローチャート。
【図5】本実施形態における奥行き推定処理の流れを示すフローチャート。
【図6】本実施形態における視点位置の間隔と被写体までの距離との関係を示す図。
【図7】本実施形態における領域分割処理の流れを示すフローチャート。
【図8】本実施形態における領域分割画像の例を示す図。
【図9】本実施形態における深度変更処理の流れを示すフローチャート。
【図10】本実施形態における基準画像とデプス画像を用いた深度変更処理の流れを示すフローチャート。
【図11】本実施形態におけるデプス値とフィルタ径の関係を示す図。
【図12】本実施形態における多視点画像を用いた深度変更処理の流れを示すフローチャート。
【図13】本実施形態における仮想絞りパラメータに含まれる重み係数の例を示す図。
【図14】実施例2における深度変更処理の流れを示すフローチャート。
【図15】本実施形態におけるブロック分割の例。
【発明を実施するための形態】
【0008】
[実施例1]
本実施例では、図2に示すような複数のカメラユニット201〜209をからなる撮像装置107で撮像した複数の画像データ(撮像画像データ)を基に被写界深度の浅い画像を生成する。この際、ピントを合わせたい距離(仮想ピント距離)よりも手前側の領域では複数の画像データを、奥側の領域では一枚の画像データをそれぞれ使用し被写界深度の浅い画像データ(合成画像データ)を生成する。なお、本実施例においてカメラユニット201〜209は格子状に等間隔になるよう配置されており、各カメラユニットの上下軸、左右軸、光軸は全て同じ方向であるとする。そして、撮像画像データは、パンフォーカスで撮像された画像データであることが望ましい。また、本実施例で生成する合成画像データは、カメラユニット205で撮像された画像データの被写界深度を浅くしたものである。
【0009】
まず、本実施例における画像処理装置のシステム構成例について、図1を用いて説明する。同図において、CPU101は、RAM102をワークメモリとしてROM103及びハードディスクドライブ(HDD)105に格納されたプログラムを実行し、システムバス112を介して後述する各構成を制御する。これにより、後述する様々な処理が実行される。HDDインタフェイス(I/F)104は、HDD105や光ディスクドライブなどの二次記憶装置を接続する、例えばシリアルATA(SATA)等のインタフェイスである。CPU101は、HDDI/F104を介して、HDD105からのデータ読み出し、およびHDD105へのデータ書き込みが可能である。さらにCPU101は、HDD105に格納されたデータをRAM102に展開し、同様に、RAM102に展開されたデータをHDD105に保存することが可能である。そしてCPU101は、RAM102に展開したデータをプログラムとみなし、実行することができる。撮像インタフェイス(I/F)106は、図2に示すような複数のカメラユニット201〜209からなる撮像装置107などを接続する、例えばUSBやIEEE1394などのシリアルバスインタフェイスである。CPU101は、撮像I/F106を介して撮像装置107を制御し、撮像を行うことが可能である。さらに、CPU101は、撮像I/Fを介して撮像装置107から撮像したデータを読み込むことが可能である。入力インタフェイス(I/F)108は、キーボードやマウスなどの入力デバイス109を接続する、例えばUSBやIEEE1394等のシリアルバスインタフェイスである。CPU101は、入力I/F108を介して入力デバイス109からデータを読み込むことが可能である。出力インタフェイス(I/F)110は、画像表示装置等の出力デバイス111を接続する、例えばDVIやHDMI等の映像出力インタフェイスである。CPU101は、出力I/F110を介して出力デバイス111にデータを送り、表示を実行させることができる。
【0010】
次に、本実施例に係る一連の処理を行う際の概要機能構成について、図3を用いて説明する。CPU101の機能部としての撮像画像データ入力部301は、撮像画像データ307および撮像装置情報308を撮像装置107あるいはROM103、HDD105等の記憶装置から取得する。なお、撮像画像データ307は撮像装置107によって異なる視点位置(撮像位置)から被写体を撮像して得られる複数の画像を示すデータである。また、撮像装置情報308は、撮像装置107の撮影時の画角や視点位置を含む情報である。
【0011】
また、CPU101の機能部としてのパラメータ入力部302は、仮想ピントパラメータ309および仮想絞りパラメータ310を、入力デバイス109あるいはROM103、HDD105等の記憶装置から取得する。仮想ピントパラメータ309は仮想的なピント面までの距離を含む情報である。即ち、仮想ピントパラメータ309は、一連の処理による出力画像のピント距離の情報を含む。また、仮想絞りパラメータ310は奥行きに応じて画像をぼかす際に使用するフィルタ径及び重み係数に関する情報を含む。CPU101の機能部としての距離推定処理部303は、撮像画像データ307および撮像装置情報308に基づき、ステレオマッチング法により撮像シーンのデプス値を推定し、デプス画像データ311を生成する。デプス画像データ311は、撮像装置107から被写体までの画素ごとの距離に係る情報を有する。デプス画像データ311の距離情報は、領域ごと(例:矩形ブロックごと)に設定されていても良い。CPU101の機能部としての領域分割処理部304は、仮想ピントパラメータ309及びデプス画像データ311に基づき、撮像シーンを仮想的なピント面よりも手前の領域(前ぼけ領域)と奥の領域(後ぼけ領域)に分割し、領域分割画像データ312を生成する。即ち、前ぼけ領域は、仮想的なピント面よりも手前に被写体が存在する領域を、後ぼけ領域は、仮想的ピント面よりも奥に被写体が存在する領域を示している。CPU101の機能部としての深度変更処理部305は、撮像装置情報308、仮想ピントパラメータ309、仮想絞りパラメータ310、領域分割画像データ312に基づいて、撮像画像データ307を用いて、深度変更画像データ313を生成する。最後に、CPU101の機能部としての画像出力部306は、深度変更画像データ313(出力画像データ313)を出力デバイス111へ出力したり、HDD105へ保存したりする。
【0012】
図4は、本実施例の画像処理装置における一連の処理の動作手順を示すフローチャートである。詳細には、図4のフローチャートに示す手順を記述したコンピュータ実行可能なプログラムをROM103あるいはHDD105からRAM102上に読み込んだ後に、CPU101によって該プログラムを実行することによって当該処理が実行される。以下、図4に示す各処理について説明する。
【0013】
まずステップS401において、撮像画像データ入力部301は、撮像装置107を用いて撮像画像データ307を撮像し、撮像画像データ307およびカメラユニット201〜209の画角や視点位置を含む撮像装置情報308を取得する。あるいは、予めROM103やHDD105などの記録装置に撮像画像データ307および撮像装置情報308を保持しておき、これを撮像画像データ入力部301が取得するようにしてもよい。
【0014】
次にステップS402において、パラメータ入力部302は入力デバイス109から仮想ピント距離を含む仮想ピントパラメータ309および画像合成時に使用する各画像データの重み係数を含む仮想絞りパラメータ310を取得する。あるいは、予めROM103やHDD105などの記録装置に仮想ピントパラメータ309および仮想絞りパラメータ310を保持しておき、これをパラメータ入力部302が取得するようにしてもよい。
【0015】
次にステップS403において、距離推定処理部303はS401で取得した撮像画像データ307および撮像装置情報308を用いて距離推定処理を行い、撮像したシーンの奥行きを推定しシーンのデプス画像データ311を生成する。S403で行う距離推定処理については後に詳述する。
【0016】
次にステップS404において、S402で取得した仮想ピントパラメータ309およびS403で取得したデプス画像データ311を基に、シーンを2領域に分割した領域分割画像データ312を生成する。ここで、2領域とはピントを合わせたい距離よりも被写体が手前側に存在する領域(前ぼけ領域)と、ピントを合わせたい距離よりも被写体が奥側に存在する領域(後ぼけ領域)である。S404で行う領域分割処理については後に詳述する。
【0017】
次にステップS405において、撮像装置情報308、仮想絞りパラメータ310、領域分割画像データ312を基に、撮像画像データ307から撮像画像データ307よりも被写界深度の浅い深度変更画像データ313(出力画像データ313)を生成する。S405で行う画像合成処理については後に詳述する。
【0018】
次にステップS406において、画像出力部306は深度変更画像データ313を出力デバイス111に表示したり、HDD105などの記録装置に記録したりする。
【0019】
<距離推定処理>
ここでは、ステップS403で行う距離推定処理について説明する。距離推定処理では、視点位置の異なる複数の撮像画像データ307を基に、撮像したシーンの距離を推定することでデプス画像データ311を生成する。距離推定方法としては既存の方法を利用する。例えば、ステレオ法、マルチベースラインステレオ法などが利用可能である。本実施例では、ステレオ法によって距離推定を行う。以下、図5に示すフローチャートを用い、距離推定処理の詳細を説明する。
【0020】
まずステップS501において、撮像画像データ307から処理に使用する2画像を選択する。本実施例では撮像装置107の中央のカメラユニット205で撮像された画像データと、カメラユニット205と横方向に隣接するカメラユニット206で撮像された画像データを選択するものとする。以下、前者を基準画像を示す基準画像データ、後者を対象画像を示す対象画像データと呼ぶ。
【0021】
次にステップS502において、最初の画素を注目画素として初期化する。
【0022】
次にステップS503において、全画素で距離値が求められているかを判定する。全画素で距離値が求められている場合はステップS507へ進み、距離値の求められていない画素がある場合はステップS504へ進む。
【0023】
次にステップS504では、まず基準画像の注目画素とその周囲の画素からなる領域を選択する。そして選択した領域を用いて対象画像とパターンマッチングを行い、対象画像中から注目画素に対応する画素(対応画素)を求める。
【0024】
次にステップS505において、撮像装置情報308と注目画素とS504で求めた対応画素を基に注目画素に対応する距離値pを求める。距離値pは、図6に示すα、β、sを基に以下の式で表される。
【0025】
【数1】
【0026】
ここで、αはカメラユニット205の水平画角、基準画像データの視点位置、注目画素の座標から算出される角度である。βはカメラユニット206の水平画角、対象画像データの視点位置、対応画素の座標から算出される。sはカメラユニット間の距離であり、基準画像データおよび対象画像データの視点位置より算出される。
【0027】
次にステップS506において、注目画素を次の画素へ更新しS503へ戻る。
【0028】
最後にステップS507において、デプス画像データ311を出力する。
【0029】
なお、本実施例ではステップS501において、カメラユニット205、206で撮像した画像データを選択し距離推定を行ったが、距離推定可能なカメラの組み合わせはこれに限るものではない。例えば、対象画像データとして他のカメラユニットで撮像した画像データを選択しても構わない。また、本実施例では画素ごとに距離情報を取得するとしたが、矩形ブロック等の領域ごとに距離情報を取得しても良い。
【0030】
<領域分割処理>
ここでは、ステップS404で行う領域分割処理について説明する。領域分割処理では、仮想ピントパラメータ309及びデプス画像データ311を基に、ピントを合わせたい距離よりも被写体が手前側に存在する領域(前ぼけ領域)と、奥側に存在する領域(後ぼけ領域)にシーンを分割し、領域分割画像データ312を生成する。以下、図7に示すフローチャートを用い、領域分割処理の詳細を説明する。
【0031】
まずステップS701において、前ぼけ領域の領域特定を行う。仮想ピントパラメータ309より得られる仮想ピント距離をdp、デプス画像データ311の画素値をD(i,j)とする。このとき、D(i,j)≦dpとなる画素(i,j)と、の周囲r1画素以内に含まれる画素の集合を前ぼけ領域とする。ここで、r1はあらかじめ定めたぼけの最大半径とする。
【0032】
次にステップS702において、後ぼけ領域の領域特定を行う。デプス画像データ311において前ぼけ領域以外の画素の集合を後ぼけ領域とする。
【0033】
最後にステップS703において、前ぼけ領域、後ぼけ領域にそれぞれ異なるラベル値を割り当てた画像データを領域分割画像データ312として出力する。
【0034】
以上の処理によって得られる領域分割画像データ312の例を図8に示す。デプス画像データ311を距離値d0、d1、d2からなる画像データとし、仮想ピントパラメータ309から得られる仮想ピント距離dpの値がd2であるとする。この場合、デプス画像データ311において距離値がd2となる画素とその周囲r画素以内に含まれる画素の集合が前ぼけ領域、それ以外の画素の集合が後ぼけ領域となる。
【0035】
なお、本実施例ではステップS701において、前ぼけ領域を決める際の距離rはあらかじめ定めた値としたが、距離値rの設定方法はこれに限るものではない。例えば、仮想ピントパラメータより、ぼけの最大半径を計算しこの値を距離rとしてしてもよい。こうすることで、仮想ピントパラメータに応じて最適な前ぼけ領域を設定可能である。
【0036】
<深度変更処理>
ここでは、ステップS405で行う深度変更処理について説明する。深度変更処理では、領域分割画像データ312を参照しながら、前ぼけ領域と後ぼけ領域とでそれぞれ異なる処理を適用し深度の浅い深度変更画像データ313(出力画像データ313)を生成する。その際、前ぼけ領域では撮像画像データ307の中から視点位置の異なる複数の画像データを合成することにより、深度変更画像データ313の画素値を算出する。また、後ぼけ領域ではカメラユニット205で撮像した基準画像データとデプス画像データ311とを用いることにより深度変更画像データ313の画素値を算出する。以下、図9に示すフローチャートを用い、深度変更処理の詳細を説明する。
【0037】
まずステップS901において、領域分割画像データ312を複数のブロックに分割する。後述するステップS905及びステップS906処理はここで定めたブロック毎に行う。ブロックの分割例を図15(a)に示す。
【0038】
次にステップS902において、注目ブロックを最初のブロックに初期化する。
【0039】
次にS903において、全ブロックに対して後述するステップS905あるいはステップS906の処理が行われたか否かを判定する。全ブロックで処理が行われている場合はステップS908へ進み、そうでない場合はS904へ進む。
【0040】
次にステップS904において、注目ブロック内に前ぼけ領域が含まれているかを判定する。含まれていない場合はステップS905へ進み、含まれている場合はステップS906へ進む。
【0041】
ステップS905では、一つの基準画像データとデプス画像データ311とを用いて深度を浅くする処理を行い、深度変更画像データ313の注目ブロックに対応する領域の画素値を算出する。詳細は後述する。
【0042】
ステップS906では、複数の撮像画像データ307を用いて深度を浅くする処理を行い、深度変更画像データ313の注目ブロックに対応する領域の画素値を算出する。詳細は後述する。
【0043】
ステップS907では、注目ブロックを次の未処理ブロックへ更新し、ステップS903へ戻る。
【0044】
最後にステップS908において、深度変更画像データ313を出力する。
【0045】
以上説明した処理を行うことで、複数の画像データからより被写界深度の浅い画像データを生成する際に、ぼけの画質を保ちつつ計算コストを低減させる効果を奏する。
【0046】
<<基準画像データとデプス画像データを用いた深度変更処理>>
ステップS905で行う前ボケ領域を含まないブロックに対して行う深度変更処理について説明する。ここでは、デプス画像データ311を参照することで被写体の前後関係を考慮しつつ基準画像データを平滑化することにより、深度変更画像データ313の注目ブロックに対応する画素値を算出する。以降、深度変更画像データ313の画素(i,j)に対応する画素値をH(i,j)と表す。以下、図10に示すフローチャートを用い、処理の詳細を説明する。
【0047】
まずステップS1001において、注目画素(i,j)を最初の画素に初期化する。
【0048】
次にステップS1002において、注目ブロック内の全画素について処理を行ったか否かを判定する。全画素が処理済みである場合はステップS905を終了し、そうでない場合はステップS1003へ進む。
【0049】
次にステップS1003において、以降の処理で使用する変数val,sumをそれぞれ0に初期化する。ここで、valは出力画素値を計算するための変数、sumは以降で述べる係数の和を計算するための変数である。
【0050】
次にステップS1004において、近傍画素(i’,j’)を初期化する。近傍画素(i’,j’)は、注目画素(i,j)からr2画素以内の領域(以降近傍領域と呼ぶ)に含まれる画素である。ここでr2はあらかじめ定めた定数とする。
【0051】
次にステップS1005において、近傍領域内の全画素を近傍画素として参照したかを判定する。未参照の画素がある場合はステップS1006へ進み、全画素を参照している場合はステップS1011へ進む。
【0052】
次にステップS1006において、注目画素(i,j)と近傍画素(i’,j’)のフィルタ径を算出する。フィルタ径は、仮想絞りパラメータに含まれる値であり、デプス値に応じて異なる値を持つ。デプス値とフィルタ径の関係を図11に示す。フィルタ径Rfは、仮想ピントパラメータ309に含まれる仮想ピント距離dpと、デプス画像データ311から得られる各画素のデプス値が等しい場合に0となり、デプス値が仮想ピント距離から前後に離れるにつれ大きな値となる。画素(x、y)に対応するデプス値をD(x,y)とすると、注目画素のフィルタ径Rf1、近傍画素のフィルタ径Rf2は以下の式により求められる。
【0053】
【数2】
【0054】
次にステップS1007において、近傍画素(i’,j’)が処理対象画素か否かの判定を行う。処理対象画素の場合はステップS1008へ進み、処理対象画素でない場合はステップS1010へ進む。判定には、注目画素及び近傍画素のデプス値、注目画素のフィルタ径rfを用いた以下に示す2つの判定式を用いる。
【0055】
【数3】
【0056】
ここで、式(4)は近傍画素が注目画素より手前側か奥側かを判定している。近傍画素が注目画素よりも手前側の場合は「真」、奥側の場合は「偽」となる。式(5)は注目画素と近傍画素の間の距離が注目画素のフィルタ径よりも大きいか否かを判定している。注目画素と近傍画素の間の距離が注目画素のフィルタ径よりも小さければ「真」、大きければ「偽」となる。これらの式により、オクルージョンの有無を判定している。式(4)または式(5)が真の場合は、近傍画素(i’,j’)を処理対象画素とみなしステップS1008へ進む。式(4)式(5)がともに偽の場合は、近傍画素(i’,j’)を処理対象画素から除外しステップS1010へ進む。なお、対象画素の選択方法はこれに限るものではない。例えば、式(4)のみを判定式に用いてもよいし、オクルージョンの有無を判定する他の判定式を用いるなどしても構わない。
【0057】
次にステップS1008において、処理対象画素となる近傍画素の重み係数cを算出する。ここでは、注目画素から近傍画素までの距離を用いて下記の式に従い係数cを算出する。
【0058】
【数4】
【0059】
なお、上式ではぼけを滑らかにするためにガウシアンを使用しているが、係数の決め方はこれに限るものではない。例えば、フィルタ係数を多項式関数に基づいて決定するなどしてもよい。
【0060】
次にステップS1009において、変数val,sumの値をそれぞれ下記のように更新する。
【0061】
【数5】
【0062】
ここでI(x’,y’)は近傍画素の画素値である。
【0063】
次にステップS1010において、近傍画素(i’,j’)を更新しステップS1005へ戻る。
【0064】
ステップS1011では、深度変更画像データ313における注目画素(i,j)の画素値H(i,j)を次式に従い算出する。
【0065】
【数6】
【0066】
ここでは、近傍画素の重み付け和を係数の合計値で正規化することにより、処理対象画素の有無による画素値のばらつきを補正している。
次にステップS1012において、近傍画素(i,j)を更新しステップS1012へ戻る。
【0067】
以上の処理により、深度変更画像データ313の注目ブロックに対応する領域を生成する。
【0068】
なお、本実施例ではステップS1004において、近傍領域を決める際の距離値Rの値はあらかじめ定めた値としたが、距離値Rの設定方法はこれに限るものではない。例えば、フィルタ径の最大値をRにしてもよい。こうすることで、仮想ピントパラメータに応じて最適な大きさの近傍領域を設定可能である。
【0069】
<<多視点画像データを用いた深度変更処理>>
ステップS906で行う前ボケ領域を含むブロックに対して行う深度変更処理について説明する。ここでは、合成開口法を用いて複数の撮像画像データ307からより深度の浅い画像データを生成する例を述べる。本処理によって、深度変更画像データ313の注目ブロックに対応する領域を生成する。以下、図12に示すフローチャートを用い、処理の詳細を説明する。
【0070】
まずステップS1201において、ステップS402で取得した仮想絞りパラメータ310に含まれる重み係数を用いて、画像データを合成する際に用いる重み係数wを設定する。仮想絞りパラメータ310に含まれる重み係数は複数の撮像画像データ307に対する係数のセットである。図13に示すように、撮像画像データ307の視点位置をそれぞれPmと表し、Pmに対応する撮像画像データ307を画像データImとする。このとき、Imに対応する重み係数の値をW(m)とする。ここでW(m)はP4を中心としたガウス関数に従い、総和が1になるよう正規化された値を設定している。W(m)をガウス関数に従うように設定することにより、合成時に画像データを滑らかにぼかすことができる。
【0071】
次にステップS1202において、撮像装置情報308を基に各画像データのシフト量を算出する。ピント距離をdとした際の画像データImの水平方向のシフト量△i(m、d)および垂直方向のシフト量△j(m、d)は以下の式で表される。
【0072】
【数7】
【0073】
ここで、W、Hはそれぞれ画像データの水平方向、垂直方向の画像サイズ、θwはカメラユニットの水平視野角、θhはカメラユニットの垂直視野角である。また、(sm,tm)はxy平面上におけるPmの座標、(s‘,t’)はカメラユニット205の視点位置P4の座標である。
【0074】
次にステップS1103において、ステップS1102で求めたシフト量、ステップS1101で求めた重み係数を用いて、撮像画像データ307に対して重み付け加算処理を行い、注目ブロック内の深度変更画像データ313の画素値H(i,j)を算出する。画素値H(i,j)は以下の式で算出する。
【0075】
【数8】
【0076】
以上の処理により、深度変更画像データ313の注目ブロックに対応する領域を生成する。
【0077】
なお、ここでは撮像画像データを合成開口撮像法を用いて合成する方法について述べたが、他の方法用いても構わない。例えば、撮像画像データから視点位置を内装するように補間画像データを生成し、合成開口撮像法によって撮像画像データと補間画像データとを合成することにより深度変更画像データを生成しても構わない。あるいは、撮像画像データからシーンの3次元的なモデルを生成し、それを用いてレンダリングを行うことで深度変更画像データを生成しても構わない。これらの方法を用いた場合には、よりぼけの画質が良好な深度変更画像データを得ることができる。
【0078】
<<深度変更処理の比較>>
一般的に、前ぼけ領域に対する深度変更処理は複数の撮像画像データに基づく処理であるため、計算コストは高い。仮に、前ぼけ領域に対する深度変更処理を基準画像データとデプス画像データとに基づいて行ったとすると、ぼけ領域の画質は著しく悪いものとなる。これは前ボケになる手前の被写体に、後ろの被写体の一部が隠れているためである。前ボケにより本来後ろの被写体の隠れていた部分が見えてくるはずだが、その情報がないため画質が著しく低下してしまう。複数の撮像画像データを用いることで、隠れた部分の情報を基準画像データ以外の撮像画像データから得ることができる。これにより前述した前ボケ領域の画質の低下を防ぐことができる。
【0079】
一方で、後ぼけ領域に対する深度変更処理は基準画像データとデプス画像データとに基づく処理であるため、計算コストは低い。仮に、後ぼけ領域に対する深度変更処理を複数の撮像画像データに基づいて行ったとしても、ぼけ領域の画質の向上は高くない。これは、手前の被写体に後ろの被写体の一部が隠れてしまうが、この隠れた部分は後ろの被写体をぼかす際に画質にほとんど影響しないためである。
【0080】
本実施例は、前ぼけ領域に対して複数の撮像画像データに基づいて深度変更処理を行う一方で、後ぼけ領域に対して基準画像データとデプス画像データとに基づいて深度変更処理を行う。これにより、ぼけ領域の画質を維持しながら、深度変更処理に要する計算コストを低減させることができる。
【0081】
<変形例>
・本実施例では、後ぼけ領域に対して基準画像データとデプス画像データとに基づいて深度変更処理を行うこととした。しかしながら、後ぼけ領域に対する深度変更処理はこれに限らず、前ぼけ領域に対する深度変更処理に要する計算コストよりも低い計算コストで実現される深度変更処理であれば、何であっても構わない。例えば、後ぼけ領域に対する深度変更処理をN枚の撮像画像データに基づく処理とし、前ぼけ領域に対する深度変更処理をM枚(M>N)の撮像画像データに基づく処理としても良い。
【0082】
[実施例2]
実施例1ではシーンを前ぼけ領域と後ぼけ領域の2領域に分割した。実施例2では、これらの境界に中間領域を設定することで、前ぼけ領域と後ぼけ領域の境界を滑らかに接続する。
【0083】
実施例2では実施例1と比較し、ステップS405で行う深度変更処理が異なる。以下、深度変更処理の詳細を説明する。
【0084】
実施例1ではブロック毎に異なる処理を適用して深度を浅くしていたが、実施例2ではブロックの境界部分において処理結果をブレンドすることでブロックの境界を滑らかに接続する。以下、図14に示すフローチャートを用い詳細を説明する。
【0085】
まずステップS1401において、領域分割画像データ312を基に画像データを複数の領域に分割する。まずは、ステップS902と同様に複数のブロックに分割した後、前ぼけ領域を含むブロックと前ぼけ領域を含まない領域とに分類し、その境界領域を中間領域とする。分割結果の例を図15(b)に示す。ここでは、前ぼけ領域を含むブロックと、前ぼけ領域を含まないブロックの境界から距離r内に含まれる画素の集合を中間領域としている。
【0086】
次にステップS1402において、以降の処理を行う注目領域を初期化する。
【0087】
次にステップS1403において、全領域で処理が行われたかを判定する。全領域で処理が行われている場合はステップS1409へ進み、未処理の領域がある場合はステップS1404に進む。
【0088】
次にステップS1404において、領域の判定を行う。注目領域が前ぼけ領域を含まない場合はステップS1405へ進み、前ぼけ領域を含む場合はステップS1406へ進み、中間領域の場合はステップS1407へ進む。
【0089】
ステップS1405では、実施例1のステップS905と同様に基準画像データとデプス画像データとを用いて深度変更処理を行う。
【0090】
ステップS1406では、実施例1のステップS906と同様に複数の撮像画像データ307を用いて深度変更処理を行う。
【0091】
ステップS1407では、実施例1のステップS905の方法と実施例1のステップS906の方法とで2種類の深度変更処理を行い、その結果をブレンドする。ステップS905の方法で得られた画像データH1、ステップS906の方法で得られた画像データH2とすると、深度変更画像データHは下記の式に基づいて算出する。
【0092】
【数9】
【0093】
ここで、αは中間領域の範囲を決める距離rと、前ぼけ領域を含まない領域から画素(i,j)までの距離によって定まる0以上1以下の係数である。αの値は画素(i,j)が前ぼけ領域を含まない領域に近いほど1に近づき、前ぼけ領域を含む領域に近づくほど0に近い値となる。
【0094】
次にステップS1408では、注目領域を更新しステップS1403へ戻る。
【0095】
最後にステップS1309において、深度変更画像データ313を出力する。
【0096】
以上説明した処理を行うことで、複数の画像からより被写界深度の浅い画像を生成する際に、前ぼけ領域と後ぼけ領域との境界を滑らかに接続しながら、ぼけの画質を保ちつつ計算コストを低減させる効果を奏する。
【0097】
<その他の変形例>
実施例1及び実施例2ではステップS403の距離推定処理によりデプス画像データ311を生成していたが、デプス画像データ311の生成方法はこれに限るものではない。例えば、シーンの奥行きを外部のセンサを利用して測定し、それを基にデプス画像データを生成してもかまわない。あるいは、新たに撮像装置107に測距センサを設け、それを基にデプス画像データを生成してもかまわない。
【0098】
(その他の実施例)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施例の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
【特許請求の範囲】
【請求項1】
複数の視点から被写体を撮像して得られた複数の撮像画像データから、出力画像を示す出力画像データを生成する画像処理装置であって、
前記複数の撮像画像データを入力する撮像画像データ入力手段と、
前記出力画像のピント距離を示すピントパラメータを入力するパラメータ入力手段と、
前記被写体までの距離の情報を示す距離情報と前記ピントパラメータとに基づいて、前記ピント距離よりも手前に被写体が存在する前ぼけ領域と、前記ピント距離よりも奥に被写体が存在する後ぼけ領域とを特定する領域特定手段と、
前記前ぼけ領域と前記後ぼけ領域とで異なる数の撮像画像データを用いて、前記出力画像データを生成する生成手段と、
を有することを特徴とする画像処理装置。
【請求項2】
前記生成手段は、前記前ぼけ領域において少なくとも2つの撮像画像データを用いて、更に、前記後ぼけ領域において1つの撮像画像データを用いることを特徴とする請求項1に記載の画像処理装置
【請求項3】
前記生成手段は、前記前ぼけ領域において用いる撮像画像データの数が前記後ぼけ領域において用いる撮像画像データの数よりも多いことを特徴とする請求項1に記載の画像処理装置。
【請求項4】
前記距離情報は前記撮像画像データから取得することを特徴とする請求項1乃至3の何れか1項に記載の画像処理装置。
【請求項5】
前記生成手段は、前ぼけ領域において、フィルタ処理を行うことにより前記出力画像データを生成することを特徴とする請求項1乃至4のいずれか1項に記載の画像処理装置。
【請求項6】
前記生成手段は、後ぼけ領域において、複数の撮像画像データをシフトさせ、重み付き加算することにより、前記出力画像データを生成することを特徴とする請求項1乃至5のいずれか1項に記載の画像処理装置。
【請求項7】
前記パラメータ入力手段は、前記出力画像のぼけ量にかかる絞りパラメータを更に入力し、
前記生成手段は、前記絞りパラメータに基づいて前記出力画像データを生成することを特徴とする請求項1乃至6のいずれか1項に記載の画像処理装置。
【請求項8】
複数の視点から被写体を撮像して得られた複数の撮像画像データから、出力画像を示す出力画像データを生成する画像処理方法であって、
前記複数の撮像画像データを入力する撮像画像データ入力工程と、
前記出力画像のピント距離を示すピントパラメータを入力するパラメータ入力工程と、
前記被写体までの距離の情報を示す距離情報と前記ピントパラメータとに基づいて、前記ピント距離よりも手前に被写体が存在する前ぼけ領域と、前記ピント距離よりも奥に被写体が存在する後ぼけ領域とを特定する領域特定工程と、
前記前ぼけ領域と前記後ぼけ領域とで異なる数の撮像画像データを用いて、前記出力画像データを生成する生成工程と、
を有することを特徴とする画像処理方法。
【請求項9】
コンピュータを請求項1乃至7のいずれか1項に記載の画像処理装置として機能させるためのプログラム。
【請求項1】
複数の視点から被写体を撮像して得られた複数の撮像画像データから、出力画像を示す出力画像データを生成する画像処理装置であって、
前記複数の撮像画像データを入力する撮像画像データ入力手段と、
前記出力画像のピント距離を示すピントパラメータを入力するパラメータ入力手段と、
前記被写体までの距離の情報を示す距離情報と前記ピントパラメータとに基づいて、前記ピント距離よりも手前に被写体が存在する前ぼけ領域と、前記ピント距離よりも奥に被写体が存在する後ぼけ領域とを特定する領域特定手段と、
前記前ぼけ領域と前記後ぼけ領域とで異なる数の撮像画像データを用いて、前記出力画像データを生成する生成手段と、
を有することを特徴とする画像処理装置。
【請求項2】
前記生成手段は、前記前ぼけ領域において少なくとも2つの撮像画像データを用いて、更に、前記後ぼけ領域において1つの撮像画像データを用いることを特徴とする請求項1に記載の画像処理装置
【請求項3】
前記生成手段は、前記前ぼけ領域において用いる撮像画像データの数が前記後ぼけ領域において用いる撮像画像データの数よりも多いことを特徴とする請求項1に記載の画像処理装置。
【請求項4】
前記距離情報は前記撮像画像データから取得することを特徴とする請求項1乃至3の何れか1項に記載の画像処理装置。
【請求項5】
前記生成手段は、前ぼけ領域において、フィルタ処理を行うことにより前記出力画像データを生成することを特徴とする請求項1乃至4のいずれか1項に記載の画像処理装置。
【請求項6】
前記生成手段は、後ぼけ領域において、複数の撮像画像データをシフトさせ、重み付き加算することにより、前記出力画像データを生成することを特徴とする請求項1乃至5のいずれか1項に記載の画像処理装置。
【請求項7】
前記パラメータ入力手段は、前記出力画像のぼけ量にかかる絞りパラメータを更に入力し、
前記生成手段は、前記絞りパラメータに基づいて前記出力画像データを生成することを特徴とする請求項1乃至6のいずれか1項に記載の画像処理装置。
【請求項8】
複数の視点から被写体を撮像して得られた複数の撮像画像データから、出力画像を示す出力画像データを生成する画像処理方法であって、
前記複数の撮像画像データを入力する撮像画像データ入力工程と、
前記出力画像のピント距離を示すピントパラメータを入力するパラメータ入力工程と、
前記被写体までの距離の情報を示す距離情報と前記ピントパラメータとに基づいて、前記ピント距離よりも手前に被写体が存在する前ぼけ領域と、前記ピント距離よりも奥に被写体が存在する後ぼけ領域とを特定する領域特定工程と、
前記前ぼけ領域と前記後ぼけ領域とで異なる数の撮像画像データを用いて、前記出力画像データを生成する生成工程と、
を有することを特徴とする画像処理方法。
【請求項9】
コンピュータを請求項1乃至7のいずれか1項に記載の画像処理装置として機能させるためのプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【公開番号】特開2013−27023(P2013−27023A)
【公開日】平成25年2月4日(2013.2.4)
【国際特許分類】
【出願番号】特願2011−163235(P2011−163235)
【出願日】平成23年7月26日(2011.7.26)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
【公開日】平成25年2月4日(2013.2.4)
【国際特許分類】
【出願日】平成23年7月26日(2011.7.26)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
[ Back to top ]