画像処理方法、画像処理装置およびプログラム
【課題】従来の方法では、光線追跡を行うため非常に重い処理となり、また、形状の推定を誤った場合、画質が劣化する要因となっていた。
【解決手段】複数の視点から撮像することにより得られた複数視点画像データを用いて合成画像データを生成する画像処理装置であって、被写体までの距離を示す距離情報に基づいて、前記複数視点画像データに対してフィルタ処理を行うフィルタ処理手段と、前記フィルタ処理がなされた複数視点画像データを合成して、合成画像データを生成する生成手段とを備えることを特徴とする。
【解決手段】複数の視点から撮像することにより得られた複数視点画像データを用いて合成画像データを生成する画像処理装置であって、被写体までの距離を示す距離情報に基づいて、前記複数視点画像データに対してフィルタ処理を行うフィルタ処理手段と、前記フィルタ処理がなされた複数視点画像データを合成して、合成画像データを生成する生成手段とを備えることを特徴とする。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、多視点の画像データを用いた画像の合成処理に関する。
【背景技術】
【0002】
これまで、カメラのピント調整を誤って撮像した場合は、ピント調整をやり直して再撮像する必要があった。また、奥行きの異なる複数の被写体に対してそれぞれにピントが合った画像を得たい場合には、被写体毎にピントを合わせた撮像を複数回行う必要があった。
【0003】
近年、光学系に新たな光学素子を追加することで多視点からの画像を取得し、後で画像処理によってピント位置を調節すること(リフォーカス)が可能なライトフィールドフォトグラフィという技術が発展している。
【0004】
この技術を用いれば、撮像後にピント調整を行えるため、撮像時のピント調整の失敗を画像処理で補うことができるという利点がある。さらに、画像処理方法を変えることで画像中の任意の被写体にピントを合わせた複数の画像を一枚の撮像画像から得る事ができ、撮像回数を減らす事ができるという利点もある。
【0005】
ライトフィールドフォトグラフィでは、多視点の画像データから、空間中の複数の位置について、それぞれの位置を通過する光線の方向と強度(ライトフィールド、以下、「LF」という。)を計算する。そして、得られたLFの情報を用いて、仮想の光学系を通過して仮想のセンサに結像した場合の画像を計算する。このような仮想の光学系やセンサを適宜設定する事で、リフォーカスも可能となる。LFに関する数学的性質や数学的基礎などはR.NGらによって議論されている(非特許文献1)。以降では多視点の画像データから仮想のセンサが得る画像データを計算する処理を合成処理と呼ぶ。
【0006】
LFを取得するための撮像技術としてはメインレンズの後ろにマイクロレンズアレイを置いたPlenoptic カメラや、小型のカメラを並べたカメラアレイが知られている。いずれの手法においても取得したLFから、仮想センサ上の画像データを撮像後に合成することができる。このとき合成するLFの範囲を変えることで被写界深度も撮像後に調節することが可能となる。
【0007】
LFから仮想的センサ上の画像を合成する方法として、取得した複数枚の画像データを仮想的なセンサ上に射影変換し加算して平均化する方法が知られている(特許文献1)。 しかし、特許文献1の手法ではピントから外れた被写体のボケにアーティファクトが発生し、ボケが滑らかでなくなると言う問題点がある。それを解決するための方法として、多視点の画像データから被写体の形状を推定し、その情報を元にレンズを通した光線追跡を行って画像を生成することで、滑らかなボケを再現する方法が知られている(特許文献2)。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】国際公開第2008/050904号パンフレット
【特許文献2】特開2009−211254号公報
【非特許文献】
【0009】
【非特許文献1】R.NG, M.Levoy, M.Bredif, G.Duval, M. Horowitz, P.Hanrahan,”Light Field Photography with a Hand-held Plenoptic Camera”(Stanford Tech ReportCTSR 2005-02, 2005)
【発明の概要】
【発明が解決しようとする課題】
【0010】
しかしながら、特許文献2の方法では光線追跡を行うため非常に重い処理となる。また形状の推定を誤った場合、画質が劣化する要因となる。
【課題を解決するための手段】
【0011】
本発明に係る画像処理装置は、複数の視点から撮像することにより得られた複数視点画像データを用いて合成画像データを生成する画像処理装置であって、被写体までの距離を示す距離情報に基づいて、前記複数視点画像データに対してフィルタ処理を行うフィルタ処理手段と、前記フィルタ処理がなされた複数視点画像データを合成して、合成画像データを生成する生成手段とを備えることを特徴とする。
【発明の効果】
【0012】
本発明によれば、LFから仮想センサ上の画像を合成する処理において、演算量が少なく形状推定ミスに対してロバストな処理で、ピント位置以外の被写体のボケを滑らかにすることができる。
【図面の簡単な説明】
【0013】
【図1】実施例1に係る撮像装置の主要な構成要素を示す図である。
【図2】高画質化処理部の内部構成の一例を示す図である。
【図3】カメラアレイの一部を構成する小型カメラで、それぞれ異なる距離にある被写体を撮像する様子を示す図である。
【図4】小型カメラで取得した画像の一例を示す図である。
【図5】画像合成部によって合成された画像の概念図である。
【図6】高画質化処理部における処理の流れを示すフローチャートである。
【図7】距離マップを説明するための概念図である。
【図8】カメラアレイを正面から見た図である。
【図9】フィルタ作用部の内部構成を示すブロック図である。
【図10】(a)はフィルタ径算出の原理を説明するための図その1であり、(b)はフィルタ径算出の原理を説明するための図その2である。
【図11】フィルタ作用部における処理の流れを示すフローチャートである。
【図12】(a)は、従来技術を適用した場合の写真であり、(b)は実施例1に係る本画像処理を施した場合の写真である。
【図13】Plenoptic カメラの場合の原理説明図である。
【図14】被写体決定部において被写体を決定する際に用いられるユーザインタフェース画面の一例を示す図である。
【図15】実施例3に係る撮像装置の主要な構成要素を示す図である。
【図16】画像処理部の内部構成の一例を示す図である。
【図17】画像処理部における処理の流れを示すフローチャートである。
【図18】フィルタ作用部の内部構成を示すブロック図である。
【図19】フィルタをずらして作用させる場合の概念図である。
【図20】フィルタ作用部における処理の流れを示すフローチャートである。
【図21】実施例3に係る本画像処理を施した場合の写真である。
【図22】画像全体をシフトする様子を示す図である。
【図23】距離の定義を示す図である。
【発明を実施するための形態】
【0014】
[実施例1]
図1は、本実施例に係る撮像装置の主要な構成要素を示す図である。
【0015】
撮像部101は、ズームレンズ、フォーカスレンズ、ぶれ補正レンズ、絞り、シャッター、光学ローパスフィルタ、IRカットフィルタ、カラーフィルタ、及び、CMOSやCCDなどの撮像素子などから構成され、被写体の光量を検知する。なお、本実施例では、撮像部101として、異なる視点からの複数の画像を複数の小型カメラを用いて同時に撮像可能なカメラアレイであることを前提としている。
【0016】
A/D変換部102は、被写体の光量をデジタル値に変換する。
【0017】
被写体決定部103は、ユーザからの指示に基づいてピントを合わせる被写体を決定する。
【0018】
高画質化処理部104は、決定された被写体の情報と、A/D変換部102及び撮像部101から入力される情報を元に、画像データの合成処理等を行い、生成された合成画像データを表示部105に出力する。なお、高画質化処理部104は、独立した画像処理装置として構成してもよい。
【0019】
表示部105は、合成画像データを表示する。
【0020】
なお、図1には図示しないが、撮像装置には、上記各部を統括的に制御するCPU、CPUで実行される制御プラグラム等を格納するROM、CPUのワークエリア等として機能するRAMが備わっている。さらに、CPUからの指示に基づき撮像系の制御を行う撮像系制御部や、ユーザが各種の指示を与えるための入力部(ユーザインタフェース)も撮像装置は備えている。
【0021】
次に、高画質化処理部104の詳細について説明する。
【0022】
図2は、高画質化処理部104の内部構成の一例を示す図である。
【0023】
高画質化処理部104は、画像バッファ201、距離情報取得部202、仮想センサ位置算出部203、フィルタ作用部204、ボケ画像バッファ205及び画像合成部206で構成される。以下、各部について説明する。
【0024】
画像バッファ201は、A/D変換部102から受け取った、視差がついた複数枚の画像のデータ(以下、「複数視点画像データ」と呼ぶ。)を一時的に格納する。
【0025】
距離情報取得部202は、A/D変換部102から受け取った複数視点の画像データを用いて、各被写体までの距離を取得する。距離の取得は、各被写体の画像間のオプティカルフローを算出するものであってもよいし、測距センサにより各被写体までの距離を測定するものであってもよい。なお、本実施例においてこの被写体までの距離は、画素単位で表すものとしているが、例えば複数の画素からなるブロック単位など所定の領域ごとに表すものであってもよい。
【0026】
仮想センサ位置算出部203は、被写体決定部103で決定された被写体が結像する位置を算出する。算出された仮想センサの位置情報(仮想センサ位置情報)は、フィルタ作用部204及び画像合成部206に送られる。
【0027】
フィルタ作用部(フィルタ処理部)204は、フィルタ処理を行う。具体的には、仮想センサの位置、被写体までの距離、撮像部101の特性値(パラメータ)を元にフィルタの係数を算出し、各視点における画像データに対しフィルタを作用させる。撮像部101の特性を表すパラメータは、カメラパラメータ入力端子(不図示)を通して入力され、フィルタを作用させた画像(ボケ画像)のデータは、ボケ画像バッファ205に送られる。フィルタ作用部204については改めて詳細に説明することとする。
【0028】
ボケ画像バッファ205は、フィルタ作用部204から受け取ったボケ画像データを一時的に格納する。
【0029】
画像合成部(生成部)206は、フィルタ作用部204がフィルタを作用させたボケ画像データ群にそれぞれ重みづけして、仮想センサ位置に応じて各ボケ画像データを位置合わせし、加算して、合成画像データを生成する。生成された合成画像データは、合成画像データ出力端子(不図示)を介して表示部105に出力される。
【0030】
(画像合成部)
まず、画像合成部206について、詳しく説明する。
【0031】
図3は、カメラアレイの一部を構成する小型カメラ301〜303で、それぞれ異なる距離にある被写体307〜309を撮像する様子を示す図である。304〜306はそれぞれ仮想センサの位置を示している。図4は、小型カメラ301で取得した画像(400)を示している。図示していないが、小型カメラ302、303で取得する画像は、各被写体307〜309の距離に応じた視差分だけ被写体がずれた画像になる。
【0032】
画像合成部206は、小型カメラ301〜303で取得した3枚の画像のそれぞれにある重みをかけ、仮想センサ位置に応じた位置合わせを行って、画像を加算する。
【0033】
図5は、画像合成部206によって合成された画像の概念図である。501はピント位置を304にしたときの合成後の画像である。501では被写体307にピントが合っており、被写体308、309にはボケが発生している。また、被写体308と被写体309とでは、被写体309の方がよりボケている。
【0034】
そして、502はピント位置を305にしたときの合成後の画像であり、503はピント位置を306にしたときの合成後の画像である。502は被写体308にピントが合っており、503は被写体309にピントが合っている。このようにピント位置を動かすことで、好きな被写体にピントを合わせた画像を得ることができる。
【0035】
しかし、このままではアーティファクトが発生するので(詳しくはフィルタ径算出部402の説明を参照)、本実施例では、小型カメラ301〜303で撮像した画像にフィルタ作用部204でフィルタを作用させてピント位置からの距離に応じたボケが与えられる。
【0036】
続いて、高画質化処理部104における処理の流れについて説明する。
【0037】
図6は、高画質化処理部104における処理の流れを示すフローチャートである。
【0038】
ステップ601において、高画質化処理部104は、複数視点の画像データを、画像データ入力端子(不図示)を通してA/D変換部102から受け取る。受け取った複数視点の画像データは、画像バッファ201及び距離情報取得部202に送られる。
【0039】
ステップ602において、高画質化処理部104の距離情報取得部202は、受け取った複数視点画像データを用いて、各視点から見たときの被写体までの距離を算出等し、距離マップを生成する。ここで、距離の定義を図23に示す。2301は小型カメラ301から被写体308までの距離を表している。本実施例における距離とは、2301で示すように、小型カメラから光軸と平行な方向に測った被写体までの長さのことである。但し、距離の定義はこれに限らず、2302に示すように小型カメラ301から被写体308までの直線距離を用いてもよい。また、距離マップとは、ある視点から見た画像において、画素値の代わりに画素に対応する被写体までの距離値を格納したデータである。図7は、距離マップを説明するための概念図である。図7において、701〜703は、小型カメラ301〜303で撮像した時のそれぞれの距離マップを画像として表したものである。生成される距離マップには実際の距離値が格納されているが、そのことが直感的に理解できるよう距離値を[0,255]に正規化して画像として表している。被写体307は白、被写体308はグレー、被写体309は黒で表現されているが、これは、被写体307が遠く(奥)に存在し、被写体309が近く(手前)に存在することを表している。すなわち、画素値が小さくなるほど(つまり、暗くなるほど)被写体が手前にあることを表している。なお、この距離マップの例では、被写体307より奥の被写体(背景)の距離値が全て被写体307の距離に丸められているので、被写体307と背景とは共に白で表現されている。
【0040】
図6のフローチャートの説明に戻る。
【0041】
ステップ603において、被写体決定部103は、ピントを合わせる被写体を決定する。被写体決定部103は、ユーザの指定に基づいて或いは公知の顔認識技術等を用いた所定の自動処理によって、ピントを合わせる被写体を決定する。図14は、被写体決定部103において被写体を決定する際に用いられるユーザインタフェース画面の一例を示している。図14において、1400はユーザがピント位置調整を行う場合に最初に表示される画面である。この画面1400には、ピントを合わせる被写体をユーザが任意に指定したい時に選ぶManualボタン1401及びピントを合わせる被写体の決定を自動で行わせる時に選ぶAutoボタン1402が存在している。この状態でユーザがManualボタン1401を押下すると画面1410に切り替わり、Autoボタン1402を押下すると画面1420に切り替わる。画面1410において、ユーザが、ピントを合わせたい被写体にカーソル1411を合わせてクリックすると、ピントを合わせる被写体が決定される。一方、Autoボタン1402を押下した場合に表示される画面1420には、自動でピントを合わせる処理の進行状況が表示されるプログレスバー1421が表示される。なお、ユーザのニーズを反映させた自動ピント合わせであれば、自動処理の内容はどのような方法でもよい。また、画面1410及び画面1420では、いずれかの小型カメラで取得された代表的な画像を1枚表示してもよいし、ある適当な仮想センサ位置で適当な重みをつけて合成した画像を表示するようにしても良い。
【0042】
ステップ603で決定されたピントを合わせる被写体の情報(ピント位置情報)は、ピント位置入力端子(不図示)を介して仮想センサ位置算出部203に送られる。
【0043】
図6のフローチャートの説明に戻る。
【0044】
ステップ604において、仮想センサ位置算出部203は、受け取ったピント位置情報を元に、決定された被写体が結像する位置を算出する。
【0045】
ステップ605において、フィルタ作用部204は、カメラアレイを構成する小型カメラで撮像された各画像に対しフィルタを作用させる。
【0046】
ここで、撮像部101のカメラアレイについて説明する。図8は、撮像部101のカメラアレイを正面から見た図である。801はカメラアレイを構成する個々の小型カメラを示しており、802は小型カメラ801が並んでいる平面を示している。各小型カメラ801には、左上から右下に向かって、(-M,-M),(-M+1,-M),・・・(M-1,M),(M,M)のように番号が付されている。ここでは、縦・横同数の計 (2M+1)2台の小型カメラ801がある例を示しているが、縦・横任意の台数を並べて構わない。フィルタ作用部204は、まず、着目する小型カメラの番号mをm=(-M,-M)に設定し、設定されたm番目の小型カメラから見た被写体までの距離、仮想センサ位置、撮像部101の特性を示すパラメータを元にフィルタ係数を算出する。そして、設定されたm番目の小型カメラで撮像された画像にフィルタを作用させてボケ画像のデータを生成する。生成されたボケ画像のデータはボケ画像バッファ205に格納される。このような一連の処理をm=(M,M)に達するまで繰り返す。なお、フィルタ作用部204の処理については別フローチャートを用いて詳しく説明する。
【0047】
ステップ606において、画像合成部206は、各視点のボケ画像データに重みを乗算して加算し、合成画像データを生成する。
【0048】
ステップ607において、画像合成部206は、生成した合成画像データを、合成画像データ出力端子(不図示)を介して表示部105に出力して、本処理を終了する。
【0049】
このように本実施例では、被写体のピント位置からの距離及び小型カメラの間隔に応じて各視点画像にボケを与え、得られたボケ画像に重みづけし加算して合成画像データが得られる。
【0050】
なお、本実施例では、画像合成部206で画像データを合成する前に、各小型カメラで取得した複数視点の画像データにフィルタを作用させたが、処理の順番を逆にしても良い。即ち、撮像部によって撮像された複数視点画像データを用いて合成画像を生成する画像処理装置であって、前記複数視点画像データの各画像における、ピントを合わせる被写体を決定する被写体決定手段と、決定された前記被写体が結像する仮想センサの位置を算出する仮想センサ位置算出手段と、決定された前記被写体までの距離情報を算出する距離情報取得手段と、前記各画像を合成する画像合成手段と、前記仮想センサ位置算出手段で算出された前記仮想センサ位置、前記距離情報取得手段で算出された前記距離情報および前記撮像部の特性値に基づいて、前記画像合成手段で合成された前記各画像にフィルタを作用させるフィルタ作用手段と、を備えるように構成してもよい。このような構成であれば、まず画像合成部206で画像データを合成し、生成された合成画像データに対して、当該合成画像データが示す画像の合焦する位置(ピント面)からの距離に応じてフィルタを作用させることになる。そして、この場合は合成画像データと同じ視点から見た距離マップを1枚だけ用いればよいことになる。
【0051】
また、本実施例では、複数視点の画像データを、カメラアレイを採用した撮像部を有する撮像装置で撮像することで一度に得ている。しかし、例えば、1回の撮像で1枚の画像を撮像する一眼方式の撮像部を有する撮像装置1台のみを用い、視点をずらして複数回撮像することで、複数視点の画像データを得るようにしても良い。その場合は各撮像時刻における当該撮像装置に番号を振ることで、カメラアレイを採用した撮像部を有する撮像装置で撮像した場合と同様に扱うことができる。
【0052】
(フィルタ作用部204における処理)
次に、フィルタ作用部204における処理として、ガウス分布型のローパスフィルタを用いた例について詳しく説明する。このローパスフィルタは、ピントがあっている領域以外の領域に対して、ピントがあっている領域よりもより低周波の領域にパワーを集中させるようなフィルタである。なお、ガウス分布型のローパスフィルタは一例であり、例えば、重み係数がすべて等しい移動平均フィルタなど、画像にボケを与えられるフィルタであれば適用可能であることはいうまでもない。
【0053】
図9は、フィルタ作用部204の内部構成を示すブロック図である。
【0054】
画像バッファ901は、高画質化処理部104内の画像バッファ201から受け取った画像データを一時的に格納する。
【0055】
フィルタ径算出部902は、距離マップと仮想センサ位置情報を用いて、着目画素のフィルタのタップ(セル)の数と、その周辺画素におけるフィルタのタップの数をそれぞれ算出する。図10の(a)及び(b)は、フィルタ径算出の原理を説明するための図である。まず、図10の(a)は、前述の図8の平面802に垂直で、かつ小型カメラ801の光軸中心を通る平面で切断した断面図である。1001は被写体を表し、1003は小型カメラ801のレンズを表している。1002はレンズ1003の光軸中心と被写体1001とを結ぶ光線である。1004は小型カメラ801の撮像素子を表している。1005は仮想センサ(ある位置に撮像素子があった場合にどのような画像が得られるかを撮像後に計算で導出するために仮想的に設置する平面)を示している。1006は光線1002と仮想センサ1005との交点である。仮想センサ1005上でピントが合う被写体の場合は、被写体1001が仮想センサ1005上に存在し、交点1006と被写体1001は一致することになる。ここで、
・ 撮像素子1004とレンズ1003の距離をσreal、仮想センサ1005とレンズ1003の距離をσvirtual、被写体1001とレンズ1003の距離をσobjとする。(小型カメラ801が各々ズーム機能を備えている場合はσrealは可変パラメータとなる。)
・ m番目の小型カメラ801のレンズ1003の光軸中心の座標を(um, 0)、撮像素子1004の座標を(xm, σreal)とする。
・ 被写体1001の座標を(X', -σobj)、交点1006の座標を(X, -σvirtual)とし、この場合のσvirtual は正の値を取るものとする。
・ m番目の小型カメラ801下の撮像素子1004の座標(xm, σreal)が取得する光の強度をL(um ,xm)とする。(引数はumとxmを結ぶ光線であることを意味している。) ・ um、xm、X、X'は、それぞれ平面802上の2次元ベクトルを表すものとする。
図10の(b)において、被写体1001が点光源であると仮定し、それを仮想センサ面1005上に投影すると、1007〜1009に示されるように仮想センサ面1005上に点が離れて分布する。1007、1008、1009はそれぞれ点光源1001が仮想センサ面上1005に投影された点像である。Dは、隣り合う小型カメラの間隔である。このとき各点像1007〜1009の間隔ΔDは、相似の関係から以下の式で表される。
【0056】
【数1】
【0057】
そして、点像1007〜1009の間隔は、撮像素子1004上ではσreal/σvirtual倍に縮小されるので、撮像素子1004上での点像1007〜1009の間隔ΔD'は、以下の式で表される。
【0058】
【数2】
【0059】
ここで、α≡σreal/σvirtual、αobj≡σreal/σobjとした。このように点像が分離して仮想センサ上に投影されることが、ボケにアーティファクトが生じる原因である。
【0060】
このアーティファクトを抑制するために、仮想センサ上の画像にフィルタをかけてボケを与える。そのことで、点光源の仮想センサ上でのボケを滑らかにする。本実施例におけるフィルタ径算出部902は、A、εを適当な定数として、以下の場合分けを行ってフィルタのタップ数σを算出する。
1) | α-αobj(x,y)|D<εの場合
σ(x,y)=0に設定
2)ε≦| α-αobj(x,y)|Dの場合
σ(x,y)=A| α-αobj(x,y)|Dに設定
1)はピント位置近傍にある被写体に対してはフィルタを作用させないことを意味しており、2)はピント位置から外れている被写体にフィルタを作用させることを意味している。
【0061】
ただし、ピント面の被写体が十分解像し、ピント位置以外の被写体のボケが滑らかになるのであれば、フィルタのタップ数の決め方は1)〜2)の場合に限られない。
【0062】
以上のようにして、フィルタ径算出部902は、被写体までの距離、仮想センサの位置、小型カメラの間隔の値を参照し、フィルタのタップ数を算出する。なお、1台のカメラで複数回撮像する場合のDは、各時刻におけるカメラ間の距離となる。
【0063】
作用判定部903は、着目画素と周辺画素の距離の大小関係を比較し、周辺画素値に係数をかけて着目画素値に加算するか否かを決定する。作用判定部903における判定処理の詳細については後述する。
【0064】
係数算出部904は、周辺画素が着目画素に及ぼす影響を表す係数を算出する。
【0065】
演算部905は、周辺画素の画素値に係数算出部904で算出された係数を乗算して、画像バッファ901から読み出したボケ画像の着目画素値に加算する。
【0066】
図11は、フィルタ作用部204における処理の流れを示すフローチャートである。
【0067】
ステップ1101において、フィルタ作用部204は、まず、カメラアレイを構成する複数の小型カメラのうち着目する小型カメラの番号mを、m=(-M,-M)に設定する。
【0068】
ステップ1102において、フィルタ作用部204は、着目する小型カメラmの画像データを、画像データ入力端子(不図示)を通して受け取る。受け取った画像データは、画像バッファ901に格納される。
【0069】
ステップ1103において、フィルタ作用部204は、着目画素の画素位置(x,y)を初期値に設定し、画像バッファ901に格納されているボケ画像Iblurの画素値を全ての画素について0に設定する。この場合において、着目画素の画素位置の初期値は、画像の一番左上に位置する画素とし、画素位置は左上から右下に向かって順次更新していくものとする。
【0070】
ステップ1104において、フィルタ作用部204は、周辺画素の画素位置(x',y') を初期値に設定し、係数和sumを0に設定する。
【0071】
ステップ1105において、フィルタ径算出部902は、着目画素及び周辺画素のフィルタ径、すなわち、着目画素のフィルタのタップ数σ(x,y)と、周辺画素のフィルタのタップ数σ(x',y')を算出する。
【0072】
ステップ1106において、作用判定部903は、フィルタを作用させる対象画素であるかどうかを判定する。すなわち、本ステップにおいて、着目画素が、被写体決定部103で決定された被写体であってピントがあっている被写体を構成する画素であるかどうかが特定される。具体的には、着目画素に像を結ぶ被写体の奥行きをd(x,y)、周辺画素に像を結ぶ被写体の奥行きをd(x',y')とし、以下の式(3)及び式(4)を用いて判定する。ここで、式(3)は着目画素のオクルージョンの有無を判定するための条件式であり、式(4)は前ボケを奇麗に生成するための条件式である。
【0073】
【数3】
【0074】
【数4】
【0075】
式(3)及び式(4)のいずれかを満たす場合(対象画素である場合)はステップ1107に進む。一方、いずれの式も満たさない場合(対象画素ではない場合)はステップ1110に進む。なお、上記式(3)及び式(4)はあくまで一例であり、オクルージョンの影響を考慮して最終的なボケを滑らかにすることができればどのような条件式を用いても構わない。
【0076】
ステップ1107において、係数算出部904は、周辺画素のタップ数σ(x',y')から係数cを算出する。ここで、係数cはガウシアンであるとし、以下の式を用いて算出するものとする。
【0077】
【数5】
【0078】
なお、ボケを滑らかにするような係数であればよいので、ガウシアンには限られない。
【0079】
ステップ1108において、演算部905は、着目画素のIblurと係数和sumを更新する。具体的には、それぞれ以下の式を用いて更新がなされる。
【0080】
【数6】
【0081】
【数7】
【0082】
ステップ1109において、フィルタ作用部204は、着目画素の周辺画素(2S+1)×(2S+1)が全て処理されたかどうかを判定する。ここで作用させるフィルタサイズの最大値を(2S+1)×(2S+1)とする。着目画素の周辺の画素(2S+1)×(2S+1)が全て処理されている場合はステップ1111に進む。一方、全て処理されていない場合はステップ1110に進む。
【0083】
ステップ1110において、フィルタ作用部204は、周辺画素の画素位置(x',y')を更新して、ステップ1105に戻る。周辺画素の画素位置(x',y')は、(x-S,y-S), (x-S+1,y-S),・・・(x+S,y-S),(x-S,y-S+1),・・・(x+S,y+S)の順に更新される。つまり、着目画素位置(x',y')を中心として、(2S+1)×(2S+1)のサイズの正方形を左上から右下に向かって更新される。但し、周辺画素の画素位置が画像をはみ出すときは画像内にクリッピングされる。フィルタサイズの最大値は予め決めておいても良いし、ピントから一番離れている被写体のフィルタのタップ数を元に決めてもよい。
【0084】
ステップ1111において、演算部905は、I(x,y)をsumで徐算する。除算された結果のI(x,y)は画像バッファ901に格納される。
【0085】
ステップ1112において、フィルタ作用部204は、着目画素の画素位置(x,y)が、全ての画素を網羅したかどうかを判定する。網羅している場合は、ステップ1113に進む。一方、網羅していない場合は、ステップ1114に進む。
【0086】
ステップ1113において、フィルタ作用部204は、ボケ画像データをボケ画像バッファ205に渡す。すなわち、すべての画素についてステップ1103〜ステップ1110の処理を終えたI(x,y)からなるボケ画像データがボケ画像バッファ205に送られ、ボケ画像バッファ205に格納される。
【0087】
ステップ1114において、フィルタ作用部204は、注目画素の画素位置(x,y)を更新し、ステップ1104に戻る。
【0088】
ステップ1115において、m=(M,M)であるかどうかを判定する。m=(M,M)に達している場合は本処理を終える。一方、m=(M,M)に達していない場合はステップ1116に進む。
【0089】
ステップ1116において、フィルタ作用部204は、mを更新し、ステップ1102に戻り、m=(M,M)となるまで、ステップ1102〜1114の処理を繰り返す。
【0090】
以上がフィルタ作用部204における処理である。
【0091】
図12の(a)及び(b)は、本実施例に係る画像処理を施した場合の効果を説明するための図(写真)である。図12の(a)は、従来技術(重みをすべて均等にして各視点の画像を加算)の場合、図12の(b)は本発明を適用した場合をそれぞれ示している。(a)と(b)共に、アルファベットの書かれた背景の前に市松模様の正方形が置かれて、正方形の手前でピントが合っている状態であるが、本発明を適用した(b)の方が、ボケ部分が滑らかで高画質になっている。
【0092】
以上のとおり、本実施例の場合、被写体のピント面からの距離に応じてタップ長の異なるフィルタを画像に作用させ、それらフィルタの作用した画像をピント位置に応じて位置合わせして加算する。このことにより特許文献2に比べて少ない演算量で滑らかなボケを再現することができ、形状の推定ミスに対してロバストな処理を実現できる。
【0093】
[実施例2]
実施例1では、多眼方式の撮像部101として複数の小型カメラを用いたカメラアレイを採用した態様について説明した。しかし、本発明における撮像部101の構成としてはカメラアレイに限定されるものではない。例えば、メインレンズの後ろにマイクロレンズアレイを置いたPlenoptic カメラを採用することも可能である。そこで、実施例2として、Plenoptic カメラを撮像部101に採用した場合について説明する。なお、実施例1と共通する部分については説明を省略し、差異点を中心に説明することとする。
【0094】
図13は、実施例1における図10の(a)に相当するPlenoptic カメラの場合の原理説明図である。図13において、1300は被写体、1302は被写体から出た光線、1301はメインレンズ、1303はマイクロレンズアレイを構成するマイクロレンズ、1304は撮像素子、1305は仮想センサである。Dは、隣り合うマイクロレンズ1303の間隔である。そして、1306はメインレンズ1301によって曲げられた光線1302の中で、マイクロレンズ1303の光軸中心を通る光線を表す。光線1306が結像する点が1308であり、1307は仮想センサ1305と光線1306との交点である。この場合において、結像点1308の座標を(X', σobj)、点1307の座標を(X, σvirtual)とし、σvirtual、σobjは正の値を取るものとする。
【0095】
撮像部101としてPlenoptic カメラを採用した場合においても、高画質化処理部104の構成やその処理内容は実施例1と異なるところはないのでその説明は省略する。但し、本実施例に係るフィルタ径算出部902における処理においては、当然のことながら上記図13で示したσvirtual及びσobjを用いて、フィルタのタップ数が算出される。
【0096】
なお、撮像部101の構成として、実施例1に係るカメラアレイや実施例2のPlenoptic カメラ以外の態様でLFを取得するような撮像部を採用した場合においても、同様の方法で高画質化することが可能である。
【0097】
[実施例3]
実施例1、2では撮像後にピント位置の調整(リフォーカス)を行う際にボケを滑らかにする方法について説明した。次に、ボケを滑らかにしつつ、撮像後にピント位置だけでなく被写界深度も調節する態様について実施例3として説明する。
【0098】
図15は、本実施例に係る撮像装置の主要な構成要素を示すである。実施例1に係る図1と共通する部分については説明を省略し、差異点のみ説明することとする。
【0099】
被写界深度決定部1501は、ユーザからの指示に基づいて所定の被写界深度(F値)を決定する。ユーザは、不図示の操作部(ユーザインタフェース)を介して、例えば特定の数値を直接入力したり、或いはスライドバーを用いる等により、所望のF値を指定する。
【0100】
画像処理部1502は、A/D変換部102、撮像部101、被写体決定部103、被写界深度決定部1501から入力される情報を元に、合成画像データを表示部105に出力する。なお、画像処理部1502は、独立した画像処理装置として構成してもよい。
【0101】
図16は、画像処理部1502の内部構成の一例を示す図である。ここでは、図2との差異のみ説明する。
【0102】
ピント位置合わせ部1601は、仮想センサ位置算出部203からの仮想センサ位置情報を用いて、ピント位置の被写体が各視点の画像内で同じ位置にくるように、画像全体をそれぞれシフトさせる。
【0103】
フィルタ作用部204は、仮想センサの位置、被写体までの距離、撮像部101の特性値(パラメータ)、指定された被写界深度(F値)を元にフィルタの係数を算出する。そして、各視点画像にフィルタを作用させ、フィルタを作用させた画像をボケ画像バッファ205に格納する。
【0104】
画像合成部206は、フィルタを作用させた画像群に、それぞれ重みづけして加算して合成画像データを生成する。生成された合成画像データは、合成画像データ出力端子(不図示)を介して表示部に105に出力される。
【0105】
続いて、画像処理部1502における処理の流れについて説明する。
【0106】
図17は、画像処理部1502における処理の流れを示すフローチャートである。なお、実施例1の図6のフローチャートと共通する部分については詳しい説明を省略し、ここでは差異点を中心に説明することとする。
【0107】
入力された多視点画像データから距離マップを生成し、ピントを合わせたい被写体を決定して、当該被写体が結像する位置を算出すると(ステップ601〜ステップ604)、ステップ1701に進む。
【0108】
ステップ1701において、ピント位置合わせ部1605は、着目する小型カメラの番号mをm=(-M,-M)に設定し、画像全体をシフトする。図22は、画像全体をシフトする様子を示す図である。ここではピントを合わせる被写体が308であるとする。図22において、2201は(0,0)番目の小型カメラで撮影した画像であり、2202はm番目の小型カメラで撮影した画像である。画像2201と2202とでは、ピント位置にある被写体308において2203で示す分だけ視差があることが分かる。画像2204は、視差量2203に等しい量のベクトル2205の分だけ画像2202全体をシフトした状態を示している。ここでは横方向にシフトさせる場合について説明したが、m番目の小型カメラが(0,0)番目の小型カメラに対して斜めや縦方向にある場合は、その方向に画像をシフトさせればよい。このような一連の処理をm=(M,M)に達するまで繰り返す。
【0109】
ステップ1702において、フィルタ作用部1607は、着目する小型カメラの番号mをm=(-M,-M)に設定し、該小型カメラから見た被写体までの距離、仮想センサ位置、撮像部101の特性値、被写界深度(F値)を元にフィルタ係数を算出する。そして、設定されたm番目の小型カメラで撮像された画像にフィルタを作用させてボケ画像のデータを生成する。生成されたボケ画像のデータはボケ画像バッファ205に格納される。このような一連の処理をm=(M,M)に達するまで繰り返す。
【0110】
そして、画像合成部206で各視点のボケ画像データに重みづけして加算し、合成画像データが生成され、生成された合成画像データは合成画像データ出力端子(不図示)を介して表示部105に出力される(ステップ606、ステップ607)。
【0111】
このように本実施例では、所望の被写界深度、被写体のピント位置からの距離及び撮像部101の特性値に応じて各視点画像にボケを与え、得られたボケ画像に重みづけし加算して合成画像データを得る。
【0112】
なお、本実施例では、多視点の画像データを、カメラアレイを用いた多眼方式の撮像部を有する撮像装置で撮像することで一度に得ている。しかし、実施例1で説明したように、一眼方式の撮像部を有する撮像装置1台のみを用い、視点をずらして複数回撮像することで、多視点の画像データを得るようにしても良い。また、実施例2で説明したようにPlenopticカメラを用いて画像データを取得しても良い。
【0113】
(フィルタ作用部204における処理)
次に、本実施例に係るフィルタ作用部204における処理を詳しく説明する。
【0114】
図18は、本実施例に係るフィルタ作用部204の内部構成を示すブロック図である。ここでは、実施例1に係るフィルタ作用部204の内部構成を説明した図9との差異のみ説明することとする。
【0115】
(フィルタ径算出部902について)
本実施例に係るフィルタ径算出部902は、出力したい被写界深度(F値)、距離マップ、仮想センサ位置情報を用いて、着目画素のフィルタのタップ(セル)の数と、その周辺画素におけるフィルタのタップの数をそれぞれ算出する。実施例1で説明したように、Dを小型カメラの間隔とすると、撮像素子1004上での点像1007〜1009の間隔ΔD'(図10参照。)は、式(2)で表される。
【0116】
【数8】
【0117】
合成画像のボケの大きさは小型カメラの間隔Dに比例するので、被写界深度を調節することは仮想的にDを調節することとみなすことができる。ここで、被写界深度はフルサイズセンサ(36mmx24mm)に換算した場合の値であるとする。出力画像のフルサイズ換算の焦点距離をfとすると、単純に合成した場合の出力画像の被写界深度(F値)は、式(8)で表すことができる。
【0118】
【数9】
【0119】
ここでMは、カメラアレイの1辺に存する小型カメラの台数が2M+1とした場合の数値である。例えば、カメラアレイの一辺が3台の小型カメラで構成される場合には、Mの値は1である。
【0120】
よって、出力したい被写界深度(F値)をFoutとすると、対応する仮想的な小型カメラの間隔Dvirtualは以下の式(9)のようになる。
【0121】
【数10】
【0122】
そして、この場合の撮像素子上での点像の間隔ΔDvirtual’は式(9)より、式(10)のようになる。
【0123】
【数11】
【0124】
本実施例におけるフィルタ径算出部902は、A、εを適当な定数として、以下の場合分けを行ってフィルタのタップ数σを算出する。場合分けの仕方は実施例1の場合と同様、以下のとおりである。
1) | α-αobj(x,y)|Dvirtual<εの場合
σ(x,y)=0に設定
2)ε≦| α-αobj(x,y)|Dvritualの場合
σ(x,y)= A| α-αobj(x,y)| Dvritualに設定
1)はピント位置近傍にある被写体に対してはフィルタを作用させないことを意味しており、2)はピント位置から外れている被写体にフィルタを作用させることを意味している。
【0125】
ただし、ピント面の被写体が十分解像し、ピント以外の被写体のボケが滑らかになるのであれば、フィルタのタップ数の決め方は1)、2)の場合に限られない。
【0126】
以上のようにして、本実施例に係るフィルタ径算出部902は、出力したい被写界深度、被写体までの距離、仮想センサの位置を参照し、フィルタのタップ数を算出する。
【0127】
(ずれ算出部1801について)
ずれ算出部1801は、フィルタの中心をずらして作用させる場合のずれ量を計算する。ピント位置合わせ部1601が位置合わせした状態では、ピント位置以外の被写体は各画像間で以下の式(11)で表される間隔ΔD’の視差がついている。
【0128】
【数12】
【0129】
ここで、指定された被写界深度(F値)でFoutを出力するためには、ピント位置以外の被写体の各画像間の視差を式(12)のように変更する必要がある。
【0130】
【数13】
【0131】
カメラアレイの全小型カメラで撮像された個々の画像をすべて合成する場合のF値であるFcamは、式(13)で表すことができる。
【0132】
【数14】
【0133】
したがって、(m,m')番目の撮像部の場合、フィルタの中心を式(14)で表される量だけずらして画像に作用させる。
【0134】
【数15】
【0135】
ここで、Δrealは画素ピッチであり、式変形に式(2)、式(12)、式(8)、式(13)を用いた。フィルタをずらして作用させることは、被写体を式(14)の量だけずらしてボケを与えることに相当し、各画像間の被写体の視差をΔDvirtual’にすることができる。このことで、出力画像のF値をFoutになるように調節する。
【0136】
このようにして、ずれ算出部1801では、式(14)の値が算出される。
【0137】
図19は、フィルタの中心をずらして作用させる様子を説明する図である。図19の(a)は、ずれがない場合のフィルタである。図19の(b)は、図19の(a)で示すフィルタの中心を(1,1)画素ずらしたフィルタである。太字で記載されたセル((a)では0.06、(b)では0.048)が、着目画素の位置である。図19の(b)のようにフィルタをずらして作用させることで、この場合は(1,1)画素だけ被写体の像をずらすことができる。
【0138】
以上をまとめると、本実施例では、フィルタの中心をずらして作用させることにより、
画像上の被写体の像の位置をずらし、視差量を調節する。そのことで、図10において、小型カメラの間隔を仮想的にDからDvirtualに変更した効果を得る。また、フィルタ径もDvirtualの間隔に応じたフィルタ径にすることで、小型カメラの間隔がDvirtualの場合のボケを再現することが可能になる。
【0139】
図20は、本実施例に係るフィルタ作用部204における処理の流れを示すフローチャートである。ここでは、実施例1に係るフィルタ作用部204における処理の流れを説明した図9のフローチャートとの差異のみ説明することとする。
【0140】
ステップ2001において、フィルタ径算出部902は、着目画素及び周辺画素のフィルタ径、すなわち、着目画素のフィルタのタップ数σ(x,y)と、周辺画素のフィルタのタップ数σ(x',y')を算出する。
【0141】
続くステップ2002において、ずれ算出部1801は、式(14)に基づいて周辺画素におけるフィルタのずれ量(m,m')×δ(x',y')を算出する。
【0142】
ステップ2003において、係数算出部904は、周辺画素のタップ数σ(x',y')、フィルタのずれ量(m,m')×δ(x',y')から係数cを算出する。ここでは、係数cはガウシアンであるとし、以下の式を用いて算出するものとする。
【0143】
【数16】
【0144】
なお、係数cはボケを滑らかにするような係数であればよいので、ガウシアンには限らない。
【0145】
図21の(a)及び(b)は、本実施例に係る画像処理を施した場合の効果を説明するための図(写真)である。図12と同じシーンを撮像したもので、市松模様の正方形にピントが合っている。図21の(a)と(b)は共に画像取得後に被写界深度を調節した一例で、(a)は被写界深度が浅く、(b)は被写界深度が深いことが分かる。被写界深度の調節は、撮像部が並んでいる範囲を入射瞳とみなした場合のF値であるFcamまでの任意のF値に調節することが可能である。
【0146】
以上のとおり、本実施例の場合、出力したい被写界深度に応じてフィルタ径を調節し、フィルタをずらして作用させることで、ボケを滑らかにしつつ撮像後の連続的な被写界深度調節が可能になる。
【0147】
(その他の実施形態)
また、本発明の目的は、以下の処理を実行することによっても達成される。即ち、上述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)が記憶媒体に格納されたプログラムコードを読み出す処理である。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施の形態の機能を実現することになり、そのプログラムコード及び該プログラムコードを記憶した記憶媒体は本発明を構成することになる。
【技術分野】
【0001】
本発明は、多視点の画像データを用いた画像の合成処理に関する。
【背景技術】
【0002】
これまで、カメラのピント調整を誤って撮像した場合は、ピント調整をやり直して再撮像する必要があった。また、奥行きの異なる複数の被写体に対してそれぞれにピントが合った画像を得たい場合には、被写体毎にピントを合わせた撮像を複数回行う必要があった。
【0003】
近年、光学系に新たな光学素子を追加することで多視点からの画像を取得し、後で画像処理によってピント位置を調節すること(リフォーカス)が可能なライトフィールドフォトグラフィという技術が発展している。
【0004】
この技術を用いれば、撮像後にピント調整を行えるため、撮像時のピント調整の失敗を画像処理で補うことができるという利点がある。さらに、画像処理方法を変えることで画像中の任意の被写体にピントを合わせた複数の画像を一枚の撮像画像から得る事ができ、撮像回数を減らす事ができるという利点もある。
【0005】
ライトフィールドフォトグラフィでは、多視点の画像データから、空間中の複数の位置について、それぞれの位置を通過する光線の方向と強度(ライトフィールド、以下、「LF」という。)を計算する。そして、得られたLFの情報を用いて、仮想の光学系を通過して仮想のセンサに結像した場合の画像を計算する。このような仮想の光学系やセンサを適宜設定する事で、リフォーカスも可能となる。LFに関する数学的性質や数学的基礎などはR.NGらによって議論されている(非特許文献1)。以降では多視点の画像データから仮想のセンサが得る画像データを計算する処理を合成処理と呼ぶ。
【0006】
LFを取得するための撮像技術としてはメインレンズの後ろにマイクロレンズアレイを置いたPlenoptic カメラや、小型のカメラを並べたカメラアレイが知られている。いずれの手法においても取得したLFから、仮想センサ上の画像データを撮像後に合成することができる。このとき合成するLFの範囲を変えることで被写界深度も撮像後に調節することが可能となる。
【0007】
LFから仮想的センサ上の画像を合成する方法として、取得した複数枚の画像データを仮想的なセンサ上に射影変換し加算して平均化する方法が知られている(特許文献1)。 しかし、特許文献1の手法ではピントから外れた被写体のボケにアーティファクトが発生し、ボケが滑らかでなくなると言う問題点がある。それを解決するための方法として、多視点の画像データから被写体の形状を推定し、その情報を元にレンズを通した光線追跡を行って画像を生成することで、滑らかなボケを再現する方法が知られている(特許文献2)。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】国際公開第2008/050904号パンフレット
【特許文献2】特開2009−211254号公報
【非特許文献】
【0009】
【非特許文献1】R.NG, M.Levoy, M.Bredif, G.Duval, M. Horowitz, P.Hanrahan,”Light Field Photography with a Hand-held Plenoptic Camera”(Stanford Tech ReportCTSR 2005-02, 2005)
【発明の概要】
【発明が解決しようとする課題】
【0010】
しかしながら、特許文献2の方法では光線追跡を行うため非常に重い処理となる。また形状の推定を誤った場合、画質が劣化する要因となる。
【課題を解決するための手段】
【0011】
本発明に係る画像処理装置は、複数の視点から撮像することにより得られた複数視点画像データを用いて合成画像データを生成する画像処理装置であって、被写体までの距離を示す距離情報に基づいて、前記複数視点画像データに対してフィルタ処理を行うフィルタ処理手段と、前記フィルタ処理がなされた複数視点画像データを合成して、合成画像データを生成する生成手段とを備えることを特徴とする。
【発明の効果】
【0012】
本発明によれば、LFから仮想センサ上の画像を合成する処理において、演算量が少なく形状推定ミスに対してロバストな処理で、ピント位置以外の被写体のボケを滑らかにすることができる。
【図面の簡単な説明】
【0013】
【図1】実施例1に係る撮像装置の主要な構成要素を示す図である。
【図2】高画質化処理部の内部構成の一例を示す図である。
【図3】カメラアレイの一部を構成する小型カメラで、それぞれ異なる距離にある被写体を撮像する様子を示す図である。
【図4】小型カメラで取得した画像の一例を示す図である。
【図5】画像合成部によって合成された画像の概念図である。
【図6】高画質化処理部における処理の流れを示すフローチャートである。
【図7】距離マップを説明するための概念図である。
【図8】カメラアレイを正面から見た図である。
【図9】フィルタ作用部の内部構成を示すブロック図である。
【図10】(a)はフィルタ径算出の原理を説明するための図その1であり、(b)はフィルタ径算出の原理を説明するための図その2である。
【図11】フィルタ作用部における処理の流れを示すフローチャートである。
【図12】(a)は、従来技術を適用した場合の写真であり、(b)は実施例1に係る本画像処理を施した場合の写真である。
【図13】Plenoptic カメラの場合の原理説明図である。
【図14】被写体決定部において被写体を決定する際に用いられるユーザインタフェース画面の一例を示す図である。
【図15】実施例3に係る撮像装置の主要な構成要素を示す図である。
【図16】画像処理部の内部構成の一例を示す図である。
【図17】画像処理部における処理の流れを示すフローチャートである。
【図18】フィルタ作用部の内部構成を示すブロック図である。
【図19】フィルタをずらして作用させる場合の概念図である。
【図20】フィルタ作用部における処理の流れを示すフローチャートである。
【図21】実施例3に係る本画像処理を施した場合の写真である。
【図22】画像全体をシフトする様子を示す図である。
【図23】距離の定義を示す図である。
【発明を実施するための形態】
【0014】
[実施例1]
図1は、本実施例に係る撮像装置の主要な構成要素を示す図である。
【0015】
撮像部101は、ズームレンズ、フォーカスレンズ、ぶれ補正レンズ、絞り、シャッター、光学ローパスフィルタ、IRカットフィルタ、カラーフィルタ、及び、CMOSやCCDなどの撮像素子などから構成され、被写体の光量を検知する。なお、本実施例では、撮像部101として、異なる視点からの複数の画像を複数の小型カメラを用いて同時に撮像可能なカメラアレイであることを前提としている。
【0016】
A/D変換部102は、被写体の光量をデジタル値に変換する。
【0017】
被写体決定部103は、ユーザからの指示に基づいてピントを合わせる被写体を決定する。
【0018】
高画質化処理部104は、決定された被写体の情報と、A/D変換部102及び撮像部101から入力される情報を元に、画像データの合成処理等を行い、生成された合成画像データを表示部105に出力する。なお、高画質化処理部104は、独立した画像処理装置として構成してもよい。
【0019】
表示部105は、合成画像データを表示する。
【0020】
なお、図1には図示しないが、撮像装置には、上記各部を統括的に制御するCPU、CPUで実行される制御プラグラム等を格納するROM、CPUのワークエリア等として機能するRAMが備わっている。さらに、CPUからの指示に基づき撮像系の制御を行う撮像系制御部や、ユーザが各種の指示を与えるための入力部(ユーザインタフェース)も撮像装置は備えている。
【0021】
次に、高画質化処理部104の詳細について説明する。
【0022】
図2は、高画質化処理部104の内部構成の一例を示す図である。
【0023】
高画質化処理部104は、画像バッファ201、距離情報取得部202、仮想センサ位置算出部203、フィルタ作用部204、ボケ画像バッファ205及び画像合成部206で構成される。以下、各部について説明する。
【0024】
画像バッファ201は、A/D変換部102から受け取った、視差がついた複数枚の画像のデータ(以下、「複数視点画像データ」と呼ぶ。)を一時的に格納する。
【0025】
距離情報取得部202は、A/D変換部102から受け取った複数視点の画像データを用いて、各被写体までの距離を取得する。距離の取得は、各被写体の画像間のオプティカルフローを算出するものであってもよいし、測距センサにより各被写体までの距離を測定するものであってもよい。なお、本実施例においてこの被写体までの距離は、画素単位で表すものとしているが、例えば複数の画素からなるブロック単位など所定の領域ごとに表すものであってもよい。
【0026】
仮想センサ位置算出部203は、被写体決定部103で決定された被写体が結像する位置を算出する。算出された仮想センサの位置情報(仮想センサ位置情報)は、フィルタ作用部204及び画像合成部206に送られる。
【0027】
フィルタ作用部(フィルタ処理部)204は、フィルタ処理を行う。具体的には、仮想センサの位置、被写体までの距離、撮像部101の特性値(パラメータ)を元にフィルタの係数を算出し、各視点における画像データに対しフィルタを作用させる。撮像部101の特性を表すパラメータは、カメラパラメータ入力端子(不図示)を通して入力され、フィルタを作用させた画像(ボケ画像)のデータは、ボケ画像バッファ205に送られる。フィルタ作用部204については改めて詳細に説明することとする。
【0028】
ボケ画像バッファ205は、フィルタ作用部204から受け取ったボケ画像データを一時的に格納する。
【0029】
画像合成部(生成部)206は、フィルタ作用部204がフィルタを作用させたボケ画像データ群にそれぞれ重みづけして、仮想センサ位置に応じて各ボケ画像データを位置合わせし、加算して、合成画像データを生成する。生成された合成画像データは、合成画像データ出力端子(不図示)を介して表示部105に出力される。
【0030】
(画像合成部)
まず、画像合成部206について、詳しく説明する。
【0031】
図3は、カメラアレイの一部を構成する小型カメラ301〜303で、それぞれ異なる距離にある被写体307〜309を撮像する様子を示す図である。304〜306はそれぞれ仮想センサの位置を示している。図4は、小型カメラ301で取得した画像(400)を示している。図示していないが、小型カメラ302、303で取得する画像は、各被写体307〜309の距離に応じた視差分だけ被写体がずれた画像になる。
【0032】
画像合成部206は、小型カメラ301〜303で取得した3枚の画像のそれぞれにある重みをかけ、仮想センサ位置に応じた位置合わせを行って、画像を加算する。
【0033】
図5は、画像合成部206によって合成された画像の概念図である。501はピント位置を304にしたときの合成後の画像である。501では被写体307にピントが合っており、被写体308、309にはボケが発生している。また、被写体308と被写体309とでは、被写体309の方がよりボケている。
【0034】
そして、502はピント位置を305にしたときの合成後の画像であり、503はピント位置を306にしたときの合成後の画像である。502は被写体308にピントが合っており、503は被写体309にピントが合っている。このようにピント位置を動かすことで、好きな被写体にピントを合わせた画像を得ることができる。
【0035】
しかし、このままではアーティファクトが発生するので(詳しくはフィルタ径算出部402の説明を参照)、本実施例では、小型カメラ301〜303で撮像した画像にフィルタ作用部204でフィルタを作用させてピント位置からの距離に応じたボケが与えられる。
【0036】
続いて、高画質化処理部104における処理の流れについて説明する。
【0037】
図6は、高画質化処理部104における処理の流れを示すフローチャートである。
【0038】
ステップ601において、高画質化処理部104は、複数視点の画像データを、画像データ入力端子(不図示)を通してA/D変換部102から受け取る。受け取った複数視点の画像データは、画像バッファ201及び距離情報取得部202に送られる。
【0039】
ステップ602において、高画質化処理部104の距離情報取得部202は、受け取った複数視点画像データを用いて、各視点から見たときの被写体までの距離を算出等し、距離マップを生成する。ここで、距離の定義を図23に示す。2301は小型カメラ301から被写体308までの距離を表している。本実施例における距離とは、2301で示すように、小型カメラから光軸と平行な方向に測った被写体までの長さのことである。但し、距離の定義はこれに限らず、2302に示すように小型カメラ301から被写体308までの直線距離を用いてもよい。また、距離マップとは、ある視点から見た画像において、画素値の代わりに画素に対応する被写体までの距離値を格納したデータである。図7は、距離マップを説明するための概念図である。図7において、701〜703は、小型カメラ301〜303で撮像した時のそれぞれの距離マップを画像として表したものである。生成される距離マップには実際の距離値が格納されているが、そのことが直感的に理解できるよう距離値を[0,255]に正規化して画像として表している。被写体307は白、被写体308はグレー、被写体309は黒で表現されているが、これは、被写体307が遠く(奥)に存在し、被写体309が近く(手前)に存在することを表している。すなわち、画素値が小さくなるほど(つまり、暗くなるほど)被写体が手前にあることを表している。なお、この距離マップの例では、被写体307より奥の被写体(背景)の距離値が全て被写体307の距離に丸められているので、被写体307と背景とは共に白で表現されている。
【0040】
図6のフローチャートの説明に戻る。
【0041】
ステップ603において、被写体決定部103は、ピントを合わせる被写体を決定する。被写体決定部103は、ユーザの指定に基づいて或いは公知の顔認識技術等を用いた所定の自動処理によって、ピントを合わせる被写体を決定する。図14は、被写体決定部103において被写体を決定する際に用いられるユーザインタフェース画面の一例を示している。図14において、1400はユーザがピント位置調整を行う場合に最初に表示される画面である。この画面1400には、ピントを合わせる被写体をユーザが任意に指定したい時に選ぶManualボタン1401及びピントを合わせる被写体の決定を自動で行わせる時に選ぶAutoボタン1402が存在している。この状態でユーザがManualボタン1401を押下すると画面1410に切り替わり、Autoボタン1402を押下すると画面1420に切り替わる。画面1410において、ユーザが、ピントを合わせたい被写体にカーソル1411を合わせてクリックすると、ピントを合わせる被写体が決定される。一方、Autoボタン1402を押下した場合に表示される画面1420には、自動でピントを合わせる処理の進行状況が表示されるプログレスバー1421が表示される。なお、ユーザのニーズを反映させた自動ピント合わせであれば、自動処理の内容はどのような方法でもよい。また、画面1410及び画面1420では、いずれかの小型カメラで取得された代表的な画像を1枚表示してもよいし、ある適当な仮想センサ位置で適当な重みをつけて合成した画像を表示するようにしても良い。
【0042】
ステップ603で決定されたピントを合わせる被写体の情報(ピント位置情報)は、ピント位置入力端子(不図示)を介して仮想センサ位置算出部203に送られる。
【0043】
図6のフローチャートの説明に戻る。
【0044】
ステップ604において、仮想センサ位置算出部203は、受け取ったピント位置情報を元に、決定された被写体が結像する位置を算出する。
【0045】
ステップ605において、フィルタ作用部204は、カメラアレイを構成する小型カメラで撮像された各画像に対しフィルタを作用させる。
【0046】
ここで、撮像部101のカメラアレイについて説明する。図8は、撮像部101のカメラアレイを正面から見た図である。801はカメラアレイを構成する個々の小型カメラを示しており、802は小型カメラ801が並んでいる平面を示している。各小型カメラ801には、左上から右下に向かって、(-M,-M),(-M+1,-M),・・・(M-1,M),(M,M)のように番号が付されている。ここでは、縦・横同数の計 (2M+1)2台の小型カメラ801がある例を示しているが、縦・横任意の台数を並べて構わない。フィルタ作用部204は、まず、着目する小型カメラの番号mをm=(-M,-M)に設定し、設定されたm番目の小型カメラから見た被写体までの距離、仮想センサ位置、撮像部101の特性を示すパラメータを元にフィルタ係数を算出する。そして、設定されたm番目の小型カメラで撮像された画像にフィルタを作用させてボケ画像のデータを生成する。生成されたボケ画像のデータはボケ画像バッファ205に格納される。このような一連の処理をm=(M,M)に達するまで繰り返す。なお、フィルタ作用部204の処理については別フローチャートを用いて詳しく説明する。
【0047】
ステップ606において、画像合成部206は、各視点のボケ画像データに重みを乗算して加算し、合成画像データを生成する。
【0048】
ステップ607において、画像合成部206は、生成した合成画像データを、合成画像データ出力端子(不図示)を介して表示部105に出力して、本処理を終了する。
【0049】
このように本実施例では、被写体のピント位置からの距離及び小型カメラの間隔に応じて各視点画像にボケを与え、得られたボケ画像に重みづけし加算して合成画像データが得られる。
【0050】
なお、本実施例では、画像合成部206で画像データを合成する前に、各小型カメラで取得した複数視点の画像データにフィルタを作用させたが、処理の順番を逆にしても良い。即ち、撮像部によって撮像された複数視点画像データを用いて合成画像を生成する画像処理装置であって、前記複数視点画像データの各画像における、ピントを合わせる被写体を決定する被写体決定手段と、決定された前記被写体が結像する仮想センサの位置を算出する仮想センサ位置算出手段と、決定された前記被写体までの距離情報を算出する距離情報取得手段と、前記各画像を合成する画像合成手段と、前記仮想センサ位置算出手段で算出された前記仮想センサ位置、前記距離情報取得手段で算出された前記距離情報および前記撮像部の特性値に基づいて、前記画像合成手段で合成された前記各画像にフィルタを作用させるフィルタ作用手段と、を備えるように構成してもよい。このような構成であれば、まず画像合成部206で画像データを合成し、生成された合成画像データに対して、当該合成画像データが示す画像の合焦する位置(ピント面)からの距離に応じてフィルタを作用させることになる。そして、この場合は合成画像データと同じ視点から見た距離マップを1枚だけ用いればよいことになる。
【0051】
また、本実施例では、複数視点の画像データを、カメラアレイを採用した撮像部を有する撮像装置で撮像することで一度に得ている。しかし、例えば、1回の撮像で1枚の画像を撮像する一眼方式の撮像部を有する撮像装置1台のみを用い、視点をずらして複数回撮像することで、複数視点の画像データを得るようにしても良い。その場合は各撮像時刻における当該撮像装置に番号を振ることで、カメラアレイを採用した撮像部を有する撮像装置で撮像した場合と同様に扱うことができる。
【0052】
(フィルタ作用部204における処理)
次に、フィルタ作用部204における処理として、ガウス分布型のローパスフィルタを用いた例について詳しく説明する。このローパスフィルタは、ピントがあっている領域以外の領域に対して、ピントがあっている領域よりもより低周波の領域にパワーを集中させるようなフィルタである。なお、ガウス分布型のローパスフィルタは一例であり、例えば、重み係数がすべて等しい移動平均フィルタなど、画像にボケを与えられるフィルタであれば適用可能であることはいうまでもない。
【0053】
図9は、フィルタ作用部204の内部構成を示すブロック図である。
【0054】
画像バッファ901は、高画質化処理部104内の画像バッファ201から受け取った画像データを一時的に格納する。
【0055】
フィルタ径算出部902は、距離マップと仮想センサ位置情報を用いて、着目画素のフィルタのタップ(セル)の数と、その周辺画素におけるフィルタのタップの数をそれぞれ算出する。図10の(a)及び(b)は、フィルタ径算出の原理を説明するための図である。まず、図10の(a)は、前述の図8の平面802に垂直で、かつ小型カメラ801の光軸中心を通る平面で切断した断面図である。1001は被写体を表し、1003は小型カメラ801のレンズを表している。1002はレンズ1003の光軸中心と被写体1001とを結ぶ光線である。1004は小型カメラ801の撮像素子を表している。1005は仮想センサ(ある位置に撮像素子があった場合にどのような画像が得られるかを撮像後に計算で導出するために仮想的に設置する平面)を示している。1006は光線1002と仮想センサ1005との交点である。仮想センサ1005上でピントが合う被写体の場合は、被写体1001が仮想センサ1005上に存在し、交点1006と被写体1001は一致することになる。ここで、
・ 撮像素子1004とレンズ1003の距離をσreal、仮想センサ1005とレンズ1003の距離をσvirtual、被写体1001とレンズ1003の距離をσobjとする。(小型カメラ801が各々ズーム機能を備えている場合はσrealは可変パラメータとなる。)
・ m番目の小型カメラ801のレンズ1003の光軸中心の座標を(um, 0)、撮像素子1004の座標を(xm, σreal)とする。
・ 被写体1001の座標を(X', -σobj)、交点1006の座標を(X, -σvirtual)とし、この場合のσvirtual は正の値を取るものとする。
・ m番目の小型カメラ801下の撮像素子1004の座標(xm, σreal)が取得する光の強度をL(um ,xm)とする。(引数はumとxmを結ぶ光線であることを意味している。) ・ um、xm、X、X'は、それぞれ平面802上の2次元ベクトルを表すものとする。
図10の(b)において、被写体1001が点光源であると仮定し、それを仮想センサ面1005上に投影すると、1007〜1009に示されるように仮想センサ面1005上に点が離れて分布する。1007、1008、1009はそれぞれ点光源1001が仮想センサ面上1005に投影された点像である。Dは、隣り合う小型カメラの間隔である。このとき各点像1007〜1009の間隔ΔDは、相似の関係から以下の式で表される。
【0056】
【数1】
【0057】
そして、点像1007〜1009の間隔は、撮像素子1004上ではσreal/σvirtual倍に縮小されるので、撮像素子1004上での点像1007〜1009の間隔ΔD'は、以下の式で表される。
【0058】
【数2】
【0059】
ここで、α≡σreal/σvirtual、αobj≡σreal/σobjとした。このように点像が分離して仮想センサ上に投影されることが、ボケにアーティファクトが生じる原因である。
【0060】
このアーティファクトを抑制するために、仮想センサ上の画像にフィルタをかけてボケを与える。そのことで、点光源の仮想センサ上でのボケを滑らかにする。本実施例におけるフィルタ径算出部902は、A、εを適当な定数として、以下の場合分けを行ってフィルタのタップ数σを算出する。
1) | α-αobj(x,y)|D<εの場合
σ(x,y)=0に設定
2)ε≦| α-αobj(x,y)|Dの場合
σ(x,y)=A| α-αobj(x,y)|Dに設定
1)はピント位置近傍にある被写体に対してはフィルタを作用させないことを意味しており、2)はピント位置から外れている被写体にフィルタを作用させることを意味している。
【0061】
ただし、ピント面の被写体が十分解像し、ピント位置以外の被写体のボケが滑らかになるのであれば、フィルタのタップ数の決め方は1)〜2)の場合に限られない。
【0062】
以上のようにして、フィルタ径算出部902は、被写体までの距離、仮想センサの位置、小型カメラの間隔の値を参照し、フィルタのタップ数を算出する。なお、1台のカメラで複数回撮像する場合のDは、各時刻におけるカメラ間の距離となる。
【0063】
作用判定部903は、着目画素と周辺画素の距離の大小関係を比較し、周辺画素値に係数をかけて着目画素値に加算するか否かを決定する。作用判定部903における判定処理の詳細については後述する。
【0064】
係数算出部904は、周辺画素が着目画素に及ぼす影響を表す係数を算出する。
【0065】
演算部905は、周辺画素の画素値に係数算出部904で算出された係数を乗算して、画像バッファ901から読み出したボケ画像の着目画素値に加算する。
【0066】
図11は、フィルタ作用部204における処理の流れを示すフローチャートである。
【0067】
ステップ1101において、フィルタ作用部204は、まず、カメラアレイを構成する複数の小型カメラのうち着目する小型カメラの番号mを、m=(-M,-M)に設定する。
【0068】
ステップ1102において、フィルタ作用部204は、着目する小型カメラmの画像データを、画像データ入力端子(不図示)を通して受け取る。受け取った画像データは、画像バッファ901に格納される。
【0069】
ステップ1103において、フィルタ作用部204は、着目画素の画素位置(x,y)を初期値に設定し、画像バッファ901に格納されているボケ画像Iblurの画素値を全ての画素について0に設定する。この場合において、着目画素の画素位置の初期値は、画像の一番左上に位置する画素とし、画素位置は左上から右下に向かって順次更新していくものとする。
【0070】
ステップ1104において、フィルタ作用部204は、周辺画素の画素位置(x',y') を初期値に設定し、係数和sumを0に設定する。
【0071】
ステップ1105において、フィルタ径算出部902は、着目画素及び周辺画素のフィルタ径、すなわち、着目画素のフィルタのタップ数σ(x,y)と、周辺画素のフィルタのタップ数σ(x',y')を算出する。
【0072】
ステップ1106において、作用判定部903は、フィルタを作用させる対象画素であるかどうかを判定する。すなわち、本ステップにおいて、着目画素が、被写体決定部103で決定された被写体であってピントがあっている被写体を構成する画素であるかどうかが特定される。具体的には、着目画素に像を結ぶ被写体の奥行きをd(x,y)、周辺画素に像を結ぶ被写体の奥行きをd(x',y')とし、以下の式(3)及び式(4)を用いて判定する。ここで、式(3)は着目画素のオクルージョンの有無を判定するための条件式であり、式(4)は前ボケを奇麗に生成するための条件式である。
【0073】
【数3】
【0074】
【数4】
【0075】
式(3)及び式(4)のいずれかを満たす場合(対象画素である場合)はステップ1107に進む。一方、いずれの式も満たさない場合(対象画素ではない場合)はステップ1110に進む。なお、上記式(3)及び式(4)はあくまで一例であり、オクルージョンの影響を考慮して最終的なボケを滑らかにすることができればどのような条件式を用いても構わない。
【0076】
ステップ1107において、係数算出部904は、周辺画素のタップ数σ(x',y')から係数cを算出する。ここで、係数cはガウシアンであるとし、以下の式を用いて算出するものとする。
【0077】
【数5】
【0078】
なお、ボケを滑らかにするような係数であればよいので、ガウシアンには限られない。
【0079】
ステップ1108において、演算部905は、着目画素のIblurと係数和sumを更新する。具体的には、それぞれ以下の式を用いて更新がなされる。
【0080】
【数6】
【0081】
【数7】
【0082】
ステップ1109において、フィルタ作用部204は、着目画素の周辺画素(2S+1)×(2S+1)が全て処理されたかどうかを判定する。ここで作用させるフィルタサイズの最大値を(2S+1)×(2S+1)とする。着目画素の周辺の画素(2S+1)×(2S+1)が全て処理されている場合はステップ1111に進む。一方、全て処理されていない場合はステップ1110に進む。
【0083】
ステップ1110において、フィルタ作用部204は、周辺画素の画素位置(x',y')を更新して、ステップ1105に戻る。周辺画素の画素位置(x',y')は、(x-S,y-S), (x-S+1,y-S),・・・(x+S,y-S),(x-S,y-S+1),・・・(x+S,y+S)の順に更新される。つまり、着目画素位置(x',y')を中心として、(2S+1)×(2S+1)のサイズの正方形を左上から右下に向かって更新される。但し、周辺画素の画素位置が画像をはみ出すときは画像内にクリッピングされる。フィルタサイズの最大値は予め決めておいても良いし、ピントから一番離れている被写体のフィルタのタップ数を元に決めてもよい。
【0084】
ステップ1111において、演算部905は、I(x,y)をsumで徐算する。除算された結果のI(x,y)は画像バッファ901に格納される。
【0085】
ステップ1112において、フィルタ作用部204は、着目画素の画素位置(x,y)が、全ての画素を網羅したかどうかを判定する。網羅している場合は、ステップ1113に進む。一方、網羅していない場合は、ステップ1114に進む。
【0086】
ステップ1113において、フィルタ作用部204は、ボケ画像データをボケ画像バッファ205に渡す。すなわち、すべての画素についてステップ1103〜ステップ1110の処理を終えたI(x,y)からなるボケ画像データがボケ画像バッファ205に送られ、ボケ画像バッファ205に格納される。
【0087】
ステップ1114において、フィルタ作用部204は、注目画素の画素位置(x,y)を更新し、ステップ1104に戻る。
【0088】
ステップ1115において、m=(M,M)であるかどうかを判定する。m=(M,M)に達している場合は本処理を終える。一方、m=(M,M)に達していない場合はステップ1116に進む。
【0089】
ステップ1116において、フィルタ作用部204は、mを更新し、ステップ1102に戻り、m=(M,M)となるまで、ステップ1102〜1114の処理を繰り返す。
【0090】
以上がフィルタ作用部204における処理である。
【0091】
図12の(a)及び(b)は、本実施例に係る画像処理を施した場合の効果を説明するための図(写真)である。図12の(a)は、従来技術(重みをすべて均等にして各視点の画像を加算)の場合、図12の(b)は本発明を適用した場合をそれぞれ示している。(a)と(b)共に、アルファベットの書かれた背景の前に市松模様の正方形が置かれて、正方形の手前でピントが合っている状態であるが、本発明を適用した(b)の方が、ボケ部分が滑らかで高画質になっている。
【0092】
以上のとおり、本実施例の場合、被写体のピント面からの距離に応じてタップ長の異なるフィルタを画像に作用させ、それらフィルタの作用した画像をピント位置に応じて位置合わせして加算する。このことにより特許文献2に比べて少ない演算量で滑らかなボケを再現することができ、形状の推定ミスに対してロバストな処理を実現できる。
【0093】
[実施例2]
実施例1では、多眼方式の撮像部101として複数の小型カメラを用いたカメラアレイを採用した態様について説明した。しかし、本発明における撮像部101の構成としてはカメラアレイに限定されるものではない。例えば、メインレンズの後ろにマイクロレンズアレイを置いたPlenoptic カメラを採用することも可能である。そこで、実施例2として、Plenoptic カメラを撮像部101に採用した場合について説明する。なお、実施例1と共通する部分については説明を省略し、差異点を中心に説明することとする。
【0094】
図13は、実施例1における図10の(a)に相当するPlenoptic カメラの場合の原理説明図である。図13において、1300は被写体、1302は被写体から出た光線、1301はメインレンズ、1303はマイクロレンズアレイを構成するマイクロレンズ、1304は撮像素子、1305は仮想センサである。Dは、隣り合うマイクロレンズ1303の間隔である。そして、1306はメインレンズ1301によって曲げられた光線1302の中で、マイクロレンズ1303の光軸中心を通る光線を表す。光線1306が結像する点が1308であり、1307は仮想センサ1305と光線1306との交点である。この場合において、結像点1308の座標を(X', σobj)、点1307の座標を(X, σvirtual)とし、σvirtual、σobjは正の値を取るものとする。
【0095】
撮像部101としてPlenoptic カメラを採用した場合においても、高画質化処理部104の構成やその処理内容は実施例1と異なるところはないのでその説明は省略する。但し、本実施例に係るフィルタ径算出部902における処理においては、当然のことながら上記図13で示したσvirtual及びσobjを用いて、フィルタのタップ数が算出される。
【0096】
なお、撮像部101の構成として、実施例1に係るカメラアレイや実施例2のPlenoptic カメラ以外の態様でLFを取得するような撮像部を採用した場合においても、同様の方法で高画質化することが可能である。
【0097】
[実施例3]
実施例1、2では撮像後にピント位置の調整(リフォーカス)を行う際にボケを滑らかにする方法について説明した。次に、ボケを滑らかにしつつ、撮像後にピント位置だけでなく被写界深度も調節する態様について実施例3として説明する。
【0098】
図15は、本実施例に係る撮像装置の主要な構成要素を示すである。実施例1に係る図1と共通する部分については説明を省略し、差異点のみ説明することとする。
【0099】
被写界深度決定部1501は、ユーザからの指示に基づいて所定の被写界深度(F値)を決定する。ユーザは、不図示の操作部(ユーザインタフェース)を介して、例えば特定の数値を直接入力したり、或いはスライドバーを用いる等により、所望のF値を指定する。
【0100】
画像処理部1502は、A/D変換部102、撮像部101、被写体決定部103、被写界深度決定部1501から入力される情報を元に、合成画像データを表示部105に出力する。なお、画像処理部1502は、独立した画像処理装置として構成してもよい。
【0101】
図16は、画像処理部1502の内部構成の一例を示す図である。ここでは、図2との差異のみ説明する。
【0102】
ピント位置合わせ部1601は、仮想センサ位置算出部203からの仮想センサ位置情報を用いて、ピント位置の被写体が各視点の画像内で同じ位置にくるように、画像全体をそれぞれシフトさせる。
【0103】
フィルタ作用部204は、仮想センサの位置、被写体までの距離、撮像部101の特性値(パラメータ)、指定された被写界深度(F値)を元にフィルタの係数を算出する。そして、各視点画像にフィルタを作用させ、フィルタを作用させた画像をボケ画像バッファ205に格納する。
【0104】
画像合成部206は、フィルタを作用させた画像群に、それぞれ重みづけして加算して合成画像データを生成する。生成された合成画像データは、合成画像データ出力端子(不図示)を介して表示部に105に出力される。
【0105】
続いて、画像処理部1502における処理の流れについて説明する。
【0106】
図17は、画像処理部1502における処理の流れを示すフローチャートである。なお、実施例1の図6のフローチャートと共通する部分については詳しい説明を省略し、ここでは差異点を中心に説明することとする。
【0107】
入力された多視点画像データから距離マップを生成し、ピントを合わせたい被写体を決定して、当該被写体が結像する位置を算出すると(ステップ601〜ステップ604)、ステップ1701に進む。
【0108】
ステップ1701において、ピント位置合わせ部1605は、着目する小型カメラの番号mをm=(-M,-M)に設定し、画像全体をシフトする。図22は、画像全体をシフトする様子を示す図である。ここではピントを合わせる被写体が308であるとする。図22において、2201は(0,0)番目の小型カメラで撮影した画像であり、2202はm番目の小型カメラで撮影した画像である。画像2201と2202とでは、ピント位置にある被写体308において2203で示す分だけ視差があることが分かる。画像2204は、視差量2203に等しい量のベクトル2205の分だけ画像2202全体をシフトした状態を示している。ここでは横方向にシフトさせる場合について説明したが、m番目の小型カメラが(0,0)番目の小型カメラに対して斜めや縦方向にある場合は、その方向に画像をシフトさせればよい。このような一連の処理をm=(M,M)に達するまで繰り返す。
【0109】
ステップ1702において、フィルタ作用部1607は、着目する小型カメラの番号mをm=(-M,-M)に設定し、該小型カメラから見た被写体までの距離、仮想センサ位置、撮像部101の特性値、被写界深度(F値)を元にフィルタ係数を算出する。そして、設定されたm番目の小型カメラで撮像された画像にフィルタを作用させてボケ画像のデータを生成する。生成されたボケ画像のデータはボケ画像バッファ205に格納される。このような一連の処理をm=(M,M)に達するまで繰り返す。
【0110】
そして、画像合成部206で各視点のボケ画像データに重みづけして加算し、合成画像データが生成され、生成された合成画像データは合成画像データ出力端子(不図示)を介して表示部105に出力される(ステップ606、ステップ607)。
【0111】
このように本実施例では、所望の被写界深度、被写体のピント位置からの距離及び撮像部101の特性値に応じて各視点画像にボケを与え、得られたボケ画像に重みづけし加算して合成画像データを得る。
【0112】
なお、本実施例では、多視点の画像データを、カメラアレイを用いた多眼方式の撮像部を有する撮像装置で撮像することで一度に得ている。しかし、実施例1で説明したように、一眼方式の撮像部を有する撮像装置1台のみを用い、視点をずらして複数回撮像することで、多視点の画像データを得るようにしても良い。また、実施例2で説明したようにPlenopticカメラを用いて画像データを取得しても良い。
【0113】
(フィルタ作用部204における処理)
次に、本実施例に係るフィルタ作用部204における処理を詳しく説明する。
【0114】
図18は、本実施例に係るフィルタ作用部204の内部構成を示すブロック図である。ここでは、実施例1に係るフィルタ作用部204の内部構成を説明した図9との差異のみ説明することとする。
【0115】
(フィルタ径算出部902について)
本実施例に係るフィルタ径算出部902は、出力したい被写界深度(F値)、距離マップ、仮想センサ位置情報を用いて、着目画素のフィルタのタップ(セル)の数と、その周辺画素におけるフィルタのタップの数をそれぞれ算出する。実施例1で説明したように、Dを小型カメラの間隔とすると、撮像素子1004上での点像1007〜1009の間隔ΔD'(図10参照。)は、式(2)で表される。
【0116】
【数8】
【0117】
合成画像のボケの大きさは小型カメラの間隔Dに比例するので、被写界深度を調節することは仮想的にDを調節することとみなすことができる。ここで、被写界深度はフルサイズセンサ(36mmx24mm)に換算した場合の値であるとする。出力画像のフルサイズ換算の焦点距離をfとすると、単純に合成した場合の出力画像の被写界深度(F値)は、式(8)で表すことができる。
【0118】
【数9】
【0119】
ここでMは、カメラアレイの1辺に存する小型カメラの台数が2M+1とした場合の数値である。例えば、カメラアレイの一辺が3台の小型カメラで構成される場合には、Mの値は1である。
【0120】
よって、出力したい被写界深度(F値)をFoutとすると、対応する仮想的な小型カメラの間隔Dvirtualは以下の式(9)のようになる。
【0121】
【数10】
【0122】
そして、この場合の撮像素子上での点像の間隔ΔDvirtual’は式(9)より、式(10)のようになる。
【0123】
【数11】
【0124】
本実施例におけるフィルタ径算出部902は、A、εを適当な定数として、以下の場合分けを行ってフィルタのタップ数σを算出する。場合分けの仕方は実施例1の場合と同様、以下のとおりである。
1) | α-αobj(x,y)|Dvirtual<εの場合
σ(x,y)=0に設定
2)ε≦| α-αobj(x,y)|Dvritualの場合
σ(x,y)= A| α-αobj(x,y)| Dvritualに設定
1)はピント位置近傍にある被写体に対してはフィルタを作用させないことを意味しており、2)はピント位置から外れている被写体にフィルタを作用させることを意味している。
【0125】
ただし、ピント面の被写体が十分解像し、ピント以外の被写体のボケが滑らかになるのであれば、フィルタのタップ数の決め方は1)、2)の場合に限られない。
【0126】
以上のようにして、本実施例に係るフィルタ径算出部902は、出力したい被写界深度、被写体までの距離、仮想センサの位置を参照し、フィルタのタップ数を算出する。
【0127】
(ずれ算出部1801について)
ずれ算出部1801は、フィルタの中心をずらして作用させる場合のずれ量を計算する。ピント位置合わせ部1601が位置合わせした状態では、ピント位置以外の被写体は各画像間で以下の式(11)で表される間隔ΔD’の視差がついている。
【0128】
【数12】
【0129】
ここで、指定された被写界深度(F値)でFoutを出力するためには、ピント位置以外の被写体の各画像間の視差を式(12)のように変更する必要がある。
【0130】
【数13】
【0131】
カメラアレイの全小型カメラで撮像された個々の画像をすべて合成する場合のF値であるFcamは、式(13)で表すことができる。
【0132】
【数14】
【0133】
したがって、(m,m')番目の撮像部の場合、フィルタの中心を式(14)で表される量だけずらして画像に作用させる。
【0134】
【数15】
【0135】
ここで、Δrealは画素ピッチであり、式変形に式(2)、式(12)、式(8)、式(13)を用いた。フィルタをずらして作用させることは、被写体を式(14)の量だけずらしてボケを与えることに相当し、各画像間の被写体の視差をΔDvirtual’にすることができる。このことで、出力画像のF値をFoutになるように調節する。
【0136】
このようにして、ずれ算出部1801では、式(14)の値が算出される。
【0137】
図19は、フィルタの中心をずらして作用させる様子を説明する図である。図19の(a)は、ずれがない場合のフィルタである。図19の(b)は、図19の(a)で示すフィルタの中心を(1,1)画素ずらしたフィルタである。太字で記載されたセル((a)では0.06、(b)では0.048)が、着目画素の位置である。図19の(b)のようにフィルタをずらして作用させることで、この場合は(1,1)画素だけ被写体の像をずらすことができる。
【0138】
以上をまとめると、本実施例では、フィルタの中心をずらして作用させることにより、
画像上の被写体の像の位置をずらし、視差量を調節する。そのことで、図10において、小型カメラの間隔を仮想的にDからDvirtualに変更した効果を得る。また、フィルタ径もDvirtualの間隔に応じたフィルタ径にすることで、小型カメラの間隔がDvirtualの場合のボケを再現することが可能になる。
【0139】
図20は、本実施例に係るフィルタ作用部204における処理の流れを示すフローチャートである。ここでは、実施例1に係るフィルタ作用部204における処理の流れを説明した図9のフローチャートとの差異のみ説明することとする。
【0140】
ステップ2001において、フィルタ径算出部902は、着目画素及び周辺画素のフィルタ径、すなわち、着目画素のフィルタのタップ数σ(x,y)と、周辺画素のフィルタのタップ数σ(x',y')を算出する。
【0141】
続くステップ2002において、ずれ算出部1801は、式(14)に基づいて周辺画素におけるフィルタのずれ量(m,m')×δ(x',y')を算出する。
【0142】
ステップ2003において、係数算出部904は、周辺画素のタップ数σ(x',y')、フィルタのずれ量(m,m')×δ(x',y')から係数cを算出する。ここでは、係数cはガウシアンであるとし、以下の式を用いて算出するものとする。
【0143】
【数16】
【0144】
なお、係数cはボケを滑らかにするような係数であればよいので、ガウシアンには限らない。
【0145】
図21の(a)及び(b)は、本実施例に係る画像処理を施した場合の効果を説明するための図(写真)である。図12と同じシーンを撮像したもので、市松模様の正方形にピントが合っている。図21の(a)と(b)は共に画像取得後に被写界深度を調節した一例で、(a)は被写界深度が浅く、(b)は被写界深度が深いことが分かる。被写界深度の調節は、撮像部が並んでいる範囲を入射瞳とみなした場合のF値であるFcamまでの任意のF値に調節することが可能である。
【0146】
以上のとおり、本実施例の場合、出力したい被写界深度に応じてフィルタ径を調節し、フィルタをずらして作用させることで、ボケを滑らかにしつつ撮像後の連続的な被写界深度調節が可能になる。
【0147】
(その他の実施形態)
また、本発明の目的は、以下の処理を実行することによっても達成される。即ち、上述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)が記憶媒体に格納されたプログラムコードを読み出す処理である。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施の形態の機能を実現することになり、そのプログラムコード及び該プログラムコードを記憶した記憶媒体は本発明を構成することになる。
【特許請求の範囲】
【請求項1】
複数の視点から撮像することにより得られた複数視点画像データを用いて合成画像データを生成する画像処理装置であって、
被写体までの距離を示す距離情報に基づいて、前記複数視点画像データに対してフィルタ処理を行うフィルタ処理手段と、
前記フィルタ処理がなされた複数視点画像データを合成して、合成画像データを生成する生成手段と
を備えることを特徴とする画像処理装置。
【請求項2】
前記距離情報は、領域ごとの被写体までの距離を有し、
前記フィルタ処理手段は、前記領域ごとの被写体までの距離を示す距離情報に基づいて、前記複数視点画像データに対してフィルタ処理を行う
ことを特徴とする請求項1に記載の画像処理装置。
【請求項3】
前記領域は画素であることを特徴とする請求項2に記載の画像処理装置。
【請求項4】
前記フィルタ処理手段は、被写体までの距離を示す距離情報と前記合成画像データが示す画像における合焦する位置までの距離とに基づいて、前記複数視点画像データに対してフィルタ処理を行うことを特徴とする請求項1に記載の画像処理装置。
【請求項5】
前記フィルタ処理手段は、前記複数視点の間隔の情報、及び前記被写体までの距離を示す距離情報とに基づいて、前記複数視点画像データに対してフィルタ処理を行うことを特徴とする請求項1に記載の画像処理装置。
【請求項6】
前記被写体までの距離を示す距離情報を取得する距離情報取得手段をさらに備えることを特徴とする請求項1に記載の画像処理装置。
【請求項7】
前記距離情報取得手段は、前記複数視点画像データが示す画像の間のオプティカルフローを算出することにより、前記被写体までの距離を示す距離情報を取得することを特徴とする請求項6に記載の画像処理装置。
【請求項8】
前記距離情報取得手段は、測距センサを用いて、前記被写体までの距離を示す距離情報を取得することを特徴とする請求項6に記載の画像処理装置。
【請求項9】
前記フィルタは、ローパスフィルタであることを特徴とする請求項1に記載の画像処理装置。
【請求項10】
前記複数の視点から撮像された画像内のピントがあっている領域を特定する特定手段をさらに備え、
前記フィルタ処理手段は、前記ピントがあっている領域以外の領域に対して、前記ピントがあっている領域よりもより低周波の領域にパワーを集中させるようなローパスフィルタを作用させる
ことを特徴とする請求項9に記載の画像処理装置。
【請求項11】
複数の視点から撮像することにより得られた複数視点画像データを用いて合成画像データを生成する画像処理装置であって、
被写体までの距離を示す距離情報に基づいて、前記合成画像データが示す画像内のピントがあった領域以外の領域に対応する前記複数視点画像データの領域の各画素に対してローパスフィルタを用いたフィルタ処理を行うフィルタ処理手段と、
前記フィルタ処理がなされた複数視点画像データを合成して、合成画像データを生成する生成手段と
を備えることを特徴とする画像処理装置。
【請求項12】
複数の視点から撮像することにより得られた複数視点画像データを用いて合成画像データを生成する画像処理方法であって、
被写体までの距離を示す距離情報に基づいて、前記複数視点画像データに対してフィルタ処理を行うフィルタ処理ステップと、
前記フィルタ処理がなされた複数視点画像データを合成して、合成画像データを生成する生成ステップと
を含むことを特徴とする画像処理方法。
【請求項13】
複数の視点から撮像することにより得られた複数視点画像データを用いて合成画像データを生成する画像処理方法であって、
被写体までの距離を示す距離情報に基づいて、前記合成画像データが示す画像内のピントがあった領域以外の領域に対応する前記複数視点画像データの領域の各画素に対してローパスフィルタを用いたフィルタ処理を行うフィルタ処理ステップと、
前記フィルタ処理がなされた複数視点画像データを合成して、合成画像データを生成する生成ステップと
を含むことを特徴とする画像処理方法。
【請求項14】
コンピュータを請求項1乃至11のいずれかに記載されている画像処理装置として機能させるためのプログラム。
【請求項1】
複数の視点から撮像することにより得られた複数視点画像データを用いて合成画像データを生成する画像処理装置であって、
被写体までの距離を示す距離情報に基づいて、前記複数視点画像データに対してフィルタ処理を行うフィルタ処理手段と、
前記フィルタ処理がなされた複数視点画像データを合成して、合成画像データを生成する生成手段と
を備えることを特徴とする画像処理装置。
【請求項2】
前記距離情報は、領域ごとの被写体までの距離を有し、
前記フィルタ処理手段は、前記領域ごとの被写体までの距離を示す距離情報に基づいて、前記複数視点画像データに対してフィルタ処理を行う
ことを特徴とする請求項1に記載の画像処理装置。
【請求項3】
前記領域は画素であることを特徴とする請求項2に記載の画像処理装置。
【請求項4】
前記フィルタ処理手段は、被写体までの距離を示す距離情報と前記合成画像データが示す画像における合焦する位置までの距離とに基づいて、前記複数視点画像データに対してフィルタ処理を行うことを特徴とする請求項1に記載の画像処理装置。
【請求項5】
前記フィルタ処理手段は、前記複数視点の間隔の情報、及び前記被写体までの距離を示す距離情報とに基づいて、前記複数視点画像データに対してフィルタ処理を行うことを特徴とする請求項1に記載の画像処理装置。
【請求項6】
前記被写体までの距離を示す距離情報を取得する距離情報取得手段をさらに備えることを特徴とする請求項1に記載の画像処理装置。
【請求項7】
前記距離情報取得手段は、前記複数視点画像データが示す画像の間のオプティカルフローを算出することにより、前記被写体までの距離を示す距離情報を取得することを特徴とする請求項6に記載の画像処理装置。
【請求項8】
前記距離情報取得手段は、測距センサを用いて、前記被写体までの距離を示す距離情報を取得することを特徴とする請求項6に記載の画像処理装置。
【請求項9】
前記フィルタは、ローパスフィルタであることを特徴とする請求項1に記載の画像処理装置。
【請求項10】
前記複数の視点から撮像された画像内のピントがあっている領域を特定する特定手段をさらに備え、
前記フィルタ処理手段は、前記ピントがあっている領域以外の領域に対して、前記ピントがあっている領域よりもより低周波の領域にパワーを集中させるようなローパスフィルタを作用させる
ことを特徴とする請求項9に記載の画像処理装置。
【請求項11】
複数の視点から撮像することにより得られた複数視点画像データを用いて合成画像データを生成する画像処理装置であって、
被写体までの距離を示す距離情報に基づいて、前記合成画像データが示す画像内のピントがあった領域以外の領域に対応する前記複数視点画像データの領域の各画素に対してローパスフィルタを用いたフィルタ処理を行うフィルタ処理手段と、
前記フィルタ処理がなされた複数視点画像データを合成して、合成画像データを生成する生成手段と
を備えることを特徴とする画像処理装置。
【請求項12】
複数の視点から撮像することにより得られた複数視点画像データを用いて合成画像データを生成する画像処理方法であって、
被写体までの距離を示す距離情報に基づいて、前記複数視点画像データに対してフィルタ処理を行うフィルタ処理ステップと、
前記フィルタ処理がなされた複数視点画像データを合成して、合成画像データを生成する生成ステップと
を含むことを特徴とする画像処理方法。
【請求項13】
複数の視点から撮像することにより得られた複数視点画像データを用いて合成画像データを生成する画像処理方法であって、
被写体までの距離を示す距離情報に基づいて、前記合成画像データが示す画像内のピントがあった領域以外の領域に対応する前記複数視点画像データの領域の各画素に対してローパスフィルタを用いたフィルタ処理を行うフィルタ処理ステップと、
前記フィルタ処理がなされた複数視点画像データを合成して、合成画像データを生成する生成ステップと
を含むことを特徴とする画像処理方法。
【請求項14】
コンピュータを請求項1乃至11のいずれかに記載されている画像処理装置として機能させるためのプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図22】
【図23】
【図12】
【図21】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図22】
【図23】
【図12】
【図21】
【公開番号】特開2013−65280(P2013−65280A)
【公開日】平成25年4月11日(2013.4.11)
【国際特許分類】
【出願番号】特願2012−138922(P2012−138922)
【出願日】平成24年6月20日(2012.6.20)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
【公開日】平成25年4月11日(2013.4.11)
【国際特許分類】
【出願日】平成24年6月20日(2012.6.20)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
[ Back to top ]