以下、添付図面を参照して本発明の実施形態について説明する。なお、各図において同一又は相当部分には同一の符号を付し、重複する説明を省略する。
(第1実施形態)
本実施形態に係る画像処理装置は、露出条件の異なる複数の画像を合成して一つの合成画像を生成する装置である。この画像処理装置は、例えば、異なる露出条件で順次撮像された複数の画像を合成して、映像信号のダイナミックレンジを見かけ上拡大させるHDR合成を行う場合に採用される。本実施形態に係る画像処理装置は、例えば、携帯電話、デジタルカメラ、PDA(Personal Digital Assistant)等、リソースに制限のあるモバイル端末に好適に搭載されるものであるが、これらに限られるものではなく、例えば通常のコンピュータシステムに搭載されてもよい。なお、以下では、説明理解の容易性を考慮し、本発明に係る画像処理装置の一例として、カメラ機能を備えた携帯端末に搭載される画像処理装置を説明する。
図1は、本実施形態に係る画像処理装置1を備える携帯端末2の機能ブロック図である。図1に示す携帯端末2は、例えばユーザにより携帯される移動端末であり、図2に示すハードウェア構成を有する。図2は、携帯端末2のハードウェア構成図である。図2に示すように、携帯端末2は、物理的には、CPU(Central Processing Unit)100、ROM(Read Only Memory)101及びRAM(Random Access Memory)102等の主記憶装置、カメラ又はキーボード等の入力デバイス103、ディスプレイ等の出力デバイス104、ハードディスク等の補助記憶装置105などを含む通常のコンピュータシステムとして構成される。後述する携帯端末2及び画像処理装置1の各機能は、CPU100、ROM101、RAM102等のハードウェア上に所定のコンピュータソフトウェアを読み込ませることにより、CPU100の制御の元で入力デバイス103及び出力デバイス104を動作させるとともに、主記憶装置や補助記憶装置105におけるデータの読み出し及び書き込みを行うことで実現される。なお、上記の説明は携帯端末2のハードウェア構成として説明したが、画像処理装置1がCPU100、ROM101及びRAM102等の主記憶装置、入力デバイス103、出力デバイス104、補助記憶装置105などを含む通常のコンピュータシステムとして構成されてもよい。また、携帯端末2は、通信モジュール等を備えてもよい。
図1に示すように、携帯端末2は、カメラ20、画像処理装置1及び表示部21を備えている。カメラ20は、画像を撮像する機能を有している。カメラ20として、例えばCMOSの画素センサ等が用いられる。カメラ20は、例えばユーザ操作等により指定されたタイミングから所定の間隔で繰り返し撮像する連続撮像機能を有している。すなわち、カメラ20は、一枚の静止画像だけでなく複数毎の静止画像(連続するフレーム画像)を取得する機能を有している。さらに、カメラ20は、連続する各フレーム画像の露出条件を変更して撮像する機能を有している。すなわち、カメラ20によって連続撮像された各画像は、それぞれ露出条件の異なる画像となる。カメラ20は、例えば撮像されたフレーム画像を撮像の度に画像処理装置1へ出力する機能を有している。
画像処理装置1は、画像入力部10、前処理部11、動き補正部15及び合成部16を備えている。
画像入力部10は、カメラ20により撮像されたフレーム画像を入力する機能を有している。画像入力部10は、例えばカメラ20により撮像されたフレーム画像を撮像の度に入力する機能を有している。また、画像入力部10は、入力フレーム画像を、携帯端末2に備わる記憶装置に保存する機能を有している。
前処理部11は、HDR合成前の前処理を行う。前処理部11は、動き情報取得部12、尤度算出部13及び露出推定部14を備えている。
動き情報取得部12は、画像間の画素の動き情報を取得する機能を有している。例えば、入力フレーム画像を第1画像及び第2画像とすると、第1画像及び第2画像間の画素の動き情報を取得する。動き情報としては、例えば動きベクトルが用いられる。また、動き情報取得部12は、3以上の入力画像が画像入力部10により入力された場合には、入力画像を露出順にソートし、露出条件の近い入力画像間で動き情報を取得してもよい。露出条件の近い画像同士を比較して動きを検出することにより、画像間の露出の差によって動きの検出精度が低下することを回避することができる。そして、動き情報取得部12は、複数の入力画像の中から、動き情報を合わせる基準画像を選択してもよい。基準画像としては、例えば複数の入力画像の中で最も有効画素が多い画像を採用する。ここで、有効画素とは、黒つぶれ又は白飛びしていない画素である。黒つぶれ又は白飛びは、輝度値を基準として判定される。また、動き情報取得部12は、2つの入力画像を用いて動き情報を取得する場合には、2つの入力画像のうち露出の高い入力画像から特徴点を抽出し、それに対する対応点を露出の低い画像から求めてもよい。このように動作することで、露出の低い画像においては特徴点として抽出された点が露出の高い画像においては白飛びしていることにより、動き情報が取得できないことを回避することができる。なお、ジャイロセンサ等から動き情報を取得してもよい。動き情報取得部12は、動き情報を尤度算出部13へ出力する機能を有している。
尤度算出部13は、各画素における被写体の動きの尤度(動被写体尤度)を算出する機能を有している。動被写体尤度が大きいほど、被写体に動きがある可能性が高く、合成画像がぶれる領域となる可能性が高いことを意味する。尤度算出部13は、動き情報を用いて入力画像間の画面の動きを補正する。その後、尤度算出部13は、2つの入力画像において対応する画素の画素値を正規化する。例えば、尤度算出部13は、近傍画素の画素値に基づいてLocal Ternary Patterns(LTP)を求める。画素値としては、RGB3色が用いられ、近傍画素としては24近傍が用いられる。そして、尤度算出部13は、正規化された画像間の差分を用いて動被写体尤度を算出する。例えば、正規化された画素値の差分、すなわち注目画素のLTPにおける符号の不一致割合を、注目画素の動被写体尤度として算出する。
また、尤度算出部13は、2つの入力画像を多重解像度化して動被写体尤度を算出してもよい。例えば、尤度算出部13は、各入力画像(第1画像及び第2画像)の解像度をそれぞれ段階的に変更することで、解像度の異なる複数の画像(第1処理画像及び第2処理画像)を作成する。そして、尤度算出部13は、同一の解像度において、第1処理画像及び第2処理画像の差分画像を作成する。この差分画像とは、第1処理画像と第2処理画像との差分であり、具体的には画素値の差分である。そして、尤度算出部13は、解像度ごとに得られた差分画像を重み付けすることによって各画素の動被写体尤度を算出する。重み(信頼度)としては、各画素のLTPにおける符号の不一致割合が用いられる。例えば、LTPにおいて、有意に差があるペアの数が用いられる。また、重みは、第1処理画像又は第2処理画像の画像サイズ又は解像度によってさらに重み付けされてもよい。すなわち、画像サイズが大きいほど又は解像度が大きいほど、重みを大きくしてもよい。尤度算出部13は、各画素の動被写体尤度を露出推定部14へ出力する機能を有している。
露出推定部14は、入力画像間の露出条件を合わせる露出変換関数を推定する機能を有している。露出変換関数とは、各入力画像の露出を基準画像相当に露出変換するための関数である。例えば、露出変換関数は、異なる露出条件で撮影された同一シーンの画像について、対応する画素(位置)における画素値の関係を示す関数を意味するものである。露出変換関数を用いることにより、一方の画素値を引数とすれば、対応する画素における他方の画素値を算出することができる。露出推定部14は、3以上の入力画像が入力された場合には、露出条件の近い入力画像間で露出条件をあわせてもよい。露出条件の近い画像同士を比較して露出を合わせることにより、画像間の露出の差によって推定の精度が低下することを回避することができる。
露出推定部14は、例えば、動き情報を用いて入力画面間の動きを補正する。そして、動き補正後の2つの入力画像において、同一の箇所から輝度値を組としてサンプリングし、その関係をプロットする。入力画像の座標としては例えばHalton数列が用いられる。なお、露出推定部14は、所定の値以上の輝度値や所定の値以下の輝度値をサンプリング点として採用しなくてもよい。例えば、10〜245の範囲に含まれる輝度値をサンプリング点として採用する。露出推定部14は、例えば、プロットの結果をフィッティングすることにより、露出変換関数を推定する。例えば、第1画像のサンプリング点iにおける元の輝度値をKi、露出変換関数をf(Ki)、第2画像のサンプリング点iにおける元の輝度値をUiとした場合、以下の誤差関数eを用いて、Gauss−Newton法によりフィッティングしてもよい。
なお、露出推定部14は、各画素の動被写体尤度に基づいて、露出変換関数を導出するためのサンプリングを行う。露出推定部14は、例えば、各画素の動被写体尤度に基づいてサンプリング点を選択する。例えば、露出推定部14は、段階的に閾値を設けて、動被写体尤度の小さい画素から輝度値をサンプリングする。また、露出推定部14は、動被写体尤度に基づいて、サンプリング点に重みを付けてもよい。例えば、以下の誤差関数eを最小化させてフィッティングしてもよい。
式2において、wiは重みである。ここで、動被写体尤度が高い画素ほど、重みwiを小さく設定する。このように、露出推定部14が各画素の動被写体尤度に基づいて露出変換関数を算出することで、信頼度の低いサンプリング点のデータほど露出変換関数の導出に影響を与えないようにすることができる。なお、露出変換関数は、変換後の入力画像が表現可能な範囲に収まるように変更されてもよい。
動き補正部15は、動き情報を用いて入力画面間の動きを補正する機能を有している。合成部16は、合成マスクを用いて入力画像同士あるいは、既に合成された画像と入力画像とを合成する。合成マスクは、画像同士を合成(αブレンド)する際の合成比(重み)を画像化したものである。合成部16は、3以上の入力画像がある場合には、まず合成マスクに従って2つの入力画像を合成し、合成画像と残りの入力画像との合成マスクを生成して合成を行う。合成部16は、輝度ベースマスク及び被写体ぶれマスクを結合して合成マスクを生成する。輝度ベースマスクは、画像同士を合成する際の重みを輝度値に基づいて決定することで、白飛びや黒つぶれの領域を合成に用いることを回避するためのマスクである。被写体ぶれマスクは、被写体が移動する画像を合成した際に、被写体が2重3重に重なって表示される現象(ゴースト現象)を回避するためのマスクである。
合成部16は、入力画像の元の輝度値に基づいて重みを算出し、輝度ベースマスクを生成する。重みは、例えば以下の算出式で求める。
上記算出式により、重みが適切に決定されるとともに、輝度的な不連続性が軽減される。なお、空間的な不連続性を軽減するために、合成マスクに対してぼかし処理を施してもよい。
合成部16は、入力画像間の差分に基づいて重みを算出し、被写体ぶれマスクを生成する。合成部16は、入力画像間の画素値の差分から、動被写体尤度を算出する。入力画像間の画素値の差分及び動被写体尤度については、上述した尤度算出部13と同様に動作することで得ることができる。そして、尤度算出部13は、動被写体尤度が所定の閾値以下となる画素が隣接する被写体ぶれ領域を検出し、各被写体ぶれ領域に対して識別ラベルを付与し、被写体ぶれ領域ごとに被写体ぶれマスクを生成する。なお、所定の閾値は、要求仕様に応じて適宜変更可能である。閾値を大きく設定すると、連続領域を抽出しやすくすることができる。被写体ぶれ領域ごとにマスクを生成することにより、被写体ぶれ領域ごとに白飛び領域あるいは黒つぶれ領域を回避するように情報量の多い画像から画素を選択することができる。すなわち、この被写体ぶれマスクとしては、合成する画像同士のうち強制的に輝度値の低い画素値を選択させるlo_mask(第1マスク)、又は、合成する画像同士のうち強制的に輝度値の高い画素値を選択させるhi_mask(第2マスク)が存在する。合成部16は、基本的には、情報量の多い高露出の画像から画素値を選択させる第2マスクを生成する。しかしながら、合成部16は、高露出の画像において被写体ぶれ領域が白飛び領域に影響される場合には、第1マスクを生成する。具体的には、以下の何れかの条件を満たす場合には第1マスクを生成する。第1の条件としては、合成する2つの画像のうち、高露出の画像の白飛びの面積が低露出の画像の黒つぶれ領域の面積よりも大きい場合である。第2の条件としては、合成する2つの画像のうち高露出の画像において、被写体ぶれ領域内の白飛び領域の面積が10%以上の場合である。なお、合成する2つの画像のうち高露出の画像において、被写体ぶれ領域と隣接する領域が白飛び領域である場合を条件としてもよい。
合成部16は、輝度ベースマスク及び被写体ぶれマスクを結合させて合成マスクを生成する。例えば、合成部16は、輝度ベースマスクに対して、第1マスクを反転させたマスクを乗算する。また、合成部16は、輝度ベースマスクに対して、第2マスクを加算する。合成部16は、全ての入力画像を合成し、最終的な合成画像を表示部21へ出力する。表示部21は、合成画像を表示する。表示部21として例えばディスプレイ装置が用いられる。
次に、画像処理装置1の動作を説明する。図3は、HDR合成の前処理を説明するフローチャートである。図3に示す制御処理は、例えばユーザによってHDR合成モードが選択され、カメラ20が複数の画像を連続撮像した場合に開始する。
まず、画像入力部10が画像フレームを入力する(S10)。以下では、説明理解の容易性を考慮して、5つの入力画像I0〜I4を入力したものとして説明する。S10の処理が終了すると、露出順ソート処理へ移行する(S12)。
S12の処理では、動き情報取得部12が入力画像I0〜I4を露出順にソートする。動き情報取得部12は、例えば輝度値の平均値を用いてソートする。ここでは、入力画像I0〜I4の数字が小さくなるほど輝度値が小さいものとする。この場合、入力画像I0〜I4は、数字の順にソートされる。S12の処理が終了すると、動き情報取得処理へ移行する(S14)。
S14の処理では、動き情報取得部12が、入力画像I0〜I4のそれぞれの画像間の動き情報を取得する。図4は、動き情報の取得処理を説明する概要図である。図4に示すように、入力画像I0〜I4が左から右に向けて順に平均輝度値が大きくなるように並べられているとする。まず、動き情報取得部12は、入力画像I0〜I4の中から基準画像を設定する。ここでは、入力画像I2を基準画像とする。次に、露出条件の近い入力画像同士の動き情報を取得する(例えば、入力画像I0と入力画像I1、入力画像I1と入力画像I2等)。動き情報取得部12は、2つの入力画像のうち、露出の高い入力画像で特徴点を抽出して、抽出された特徴点に対する対応点を露出の低い入力画像から抽出する。この動き情報によって、露出条件の近い入力画像同士を同一次元の座標に変換する変換行列を求めることができる。なお、図4では、露出条件の近い入力画像同士のうち、露出の低い画像を露出の高い画像へあわせるための変換行列m10,m21,m32,m43を示している。次に、変換行列m10,m21,m32,m43を用いて、基準画像I2以外の他の入力画像I0,I1,I3,I4の座標を基準画像I2相当の座標へ変形させる変換行列を算出する。図4に示すように、入力画像I0を基準画像I2へ変換させる変換行列は、m10*m21である。入力画像I1を基準画像I2へ変換させる変換行列は、m10である。入力画像I3を基準画像I2へ変換させる変換行列は、(m32)−1である。入力画像I4を基準画像I2へ変換させる変換行列は、(m32*m43)−1である。以下では変換後の入力画像をI0’〜I4’として説明する。S14の処理が終了すると、動被写体尤度算出処理へ移行する(S16)。
S16の処理では、尤度算出部13が、入力画像I0’〜I4’のそれぞれの画像間の動被写体尤度を算出する。図5は、入力画像I0’と入力画像I1’との画像間における動被写体尤度を算出する例である。なお、図5では、画素値としてR値を用いる場合を示している。図5に示すように、尤度算出部13は、入力画像I0’の注目画素(R値=42)の8近傍の画素値(R値)を取得する。そして、注目画素の画素値と8近傍の画素値を用いて正規化する。例えば、LTPを用いる。注目画素の画素値と8近傍の画素値との差が±5の範囲であれば0、+5より大きい場合には1、−5より小さい場合には−1とする。尤度算出部13は、入力画像I1’についても、同様に正規化する。図中では、入力画像I0’の注目画素に対応する入力画像I1’の画素において正規化している。次に、正規化された画素の画素値を比較すると、差分が生じていることがわかる。差分の大きさ(符号の不一致度合い)に応じて当該画素の色を黒から白へ変化させた画像として表したものが差分画像Xである。この差分画像は、各画素の動被写体尤度が画像化されたものである。なお、8近傍に限定されることはなく、24近傍であってもよい。また、R値のみに限られずG値及びB値についても同様に処理してもよい。
差分画像Xの領域C1に示す平滑領域の動被写体尤度の精度を向上させるために、尤度算出部13は、多重解像度を用いて動被写体尤度を求めてもよい。図6は、多重解像度を用いて動被写体尤度を求める一例である。まず、尤度算出部13は、入力画像I0’と入力画像I1’との解像度を段階的に変更させた複数の画像を生成する。そして、同一の解像度同士で差分画像を生成する。この差分画像は、単純に画素値を差し引いたものである。図6では、入力画像I0’と入力画像I1’とを6段階に多重化した場合を示している。それぞれの差分画像がX1〜X6であり、数字が大きくなるほど低い解像度の差分画像となる。また、解像度が低いほど画像サイズが小さくなる。この差分画像を信頼度で重み付けして最終的な差分画像を算出する。信頼度は、例えば、上述したLTPの差分において有意な差のあるペアの数に画像サイズ(又は解像度)を乗算したものを用いる。例えば、図5に示すLTPの場合には有意な差のあるペアの数は1となる。このように、画素ごとにペアの数と画像サイズとを掛けあわせて、差分画像X1〜X6に対応する重み画像(重みを画像化したもの)を算出する。そして、差分画像X1〜X6と重み画像とを用いて最終的な差分画像を算出する。尤度算出部13は、上述した手法と同様の手法で、入力画像I1’〜I4’までの差分画像を算出する。S16の処理が終了すると、露出変換関数推定処理へ移行する(S18)。
S18の処理では、露出推定部14が露出変換関数を推定する。露出推定部14は、変換前の輝度値をx、変換後の輝度値をyとすると露出変換関数を以下の数式で表すことができる。
ここで、(a,b)は露出変換パラメータである。露出変換パラメータ(a,b)を導出することで露出変換関数を求めることができる。以下では、動き補正後の入力画像I0’と入力画像I1’との露出変換関数を求める場合を説明する。露出推定部14は、入力画像の点(x,y)において、露出の低い入力画像I0’の輝度値と露出の低い入力画像I1’の輝度値の組みをいくつかサンプリングして、その関係をプロットする。ここで、S16の処理で取得した差分画像に基づいて、サンプリングする点を選択する。例えば、動被写体尤度の高い領域からはサンプリングしないように設定する。すなわち動被写体尤度の低いものからサンプリングするように設定する。そして、例えば動被写体尤度が高いほど低い重みを割り当てて、式2を用いて露出変換関数を推定する。これにより、例えば図7に示すようなフィッティングが行われる。尤度算出部13は、上述した手法と同様の手法で、入力画像I1’〜I4’間の露出変換関数を推定する。なお、輝度値が0に近いデータ又は255に近いデータを除いてもよい。
図8は、上記の露出変換関数の推定処理を説明する概要図である。なお、図8では、露出条件の近い入力画像同士のうち、露出の低い画像を露出の高い画像へあわせるための露出変換パラメータ(a10,b10)、(a21,b21)、(a32,b32)、(a43,b43)を示している。最終的な合成画像が表現可能な範囲に収まるように、最も露出の低い入力画像I0’の露出変換パラメータ(A0,B0)のA0を1.0に設定することで、変換結果が1.0を超えないようにしてもよい。ここでは、入力画像I0’の露出変換後の画像を、入力画像I0’’として表示している。また、最も露出の低い入力画像I0’に対する基準画像I2’の露出変換パラメータを(A2,B2)とすると、A0を1.0に設定すると同時にB2を1.0とすることで、ゲインが1/A2のときに色味が入力画像と等しくなるように設定してもよい。尤度算出部13は、上述した処理をRGBチャネルごとに別々に行う。S18の処理が終了すると図3に示す前処理を終了する。
以上で図3に示す制御処理を終了する。図3に示す制御処理を実行することで、露出変換関数を推定する前に、被写体ぶれを検出することで、被写体ぶれ領域からサンプリングすることを回避したり、被写体ぶれ領域からサンプリングされたデータの影響を重み付けにより小さくすることができる。このため、露出変換関数を精度良く推定することができる。また、従来のHDR技術であれば、被写体ぶれの補正は、露出合わせが行われていないと正確に行うことができず、また逆に露出合わせは被写体ぶれの修正が行われていないと正確にできない。しかし、露出変換関数を推定する前に簡易的に被写体ぶれ(被写体の動き)を検出することで、上記デットロック関係を解消することができる。
次に、画像処理装置1の合成動作を説明する。図9は、HDR合成を説明するフローチャートである。図9に示す制御処理は例えば図3に示す制御処理が終了すると開始する。
図9に示すように、動き補正部15が実際に動きを補正する(S20)。この処理では、図3のS14の処理と同様に、動き補正部15が、変換行列を用いて、露出変換後の入力画像I0’’〜I4’’の動きを補正する。なお、要求される精度に応じてサブピクセル補間アルゴリズム等を用いることができるようにしてもよい。S20の処理が終了すると、輝度ベースマスク生成処理及び被写体ぶれ領域抽出処理へ移行する(S22及びS24)。
S22の処理では、合成部16が輝度ベースマスクを生成する。図10は、合成処理の流れを説明する概要図である。図10に示すように、露出の低い入力画像I0’’から順に、入力画像I1’’〜I4’’を置き換えていくことで合成する。すなわち、最初は、入力画像I0’’に対して入力画像I1’’をどの程度合成させるかを定める輝度ベースマスクを生成する。この輝度ベースマスクは、入力画像I1’’の元の輝度値から重みを算出する。例えば、白飛び領域の付近の重みを0とする。このように重みを設定して、露出の低い画像へ露出の高い画像を重ねるように合成させることで、対象のピクセルに対して情報量の多い入力画像を必ず選択させることができる。図11の(A)は、入力輝度に対するピクセル値の関係を示すグラフである。図11の(A)に示すように、関数f0〜f3は、輝度値に基づいてどちらの画像の画素値を採用するかを示すグラフである。関数f0〜f3は、数字が大きくなるほど露出が大きい画像に適用されるものである。例えば、最も露出の低い入力画像I0’’が入力されると、関数f0が適用されて全ての画素値が採用される。次に、入力画像I1’’が入力されると、関数f0と関数f1とが適用される。このため、S0〜S5の輝度値の範囲では、入力画像I1’’が採用され、S6以上の輝度値の範囲では、入力画像I0’’が採用される。S5〜S6の輝度値の範囲は、(B)に示す重みでブレンドされた合成値で採用される。なお、便宜上γ補正は省略している。次に入力画像I2’’が入力されると、関数f0〜f2が適用される。このため、S0〜S3の輝度値の範囲では、入力画像I2’’が採用され、S4〜S5の輝度値の範囲では、入力画像I1’’が採用され、S6以上の輝度値の範囲では、入力画像I0’’が採用される。S3〜S4及びS5〜S6の輝度値の範囲は、(B)に示す重みでブレンドされた合成値で採用される。次に入力画像I3’’が入力されると、関数f0〜f3が適用される。このため、S0〜S1の輝度値の範囲では、入力画像I3’’が採用され、S2〜S3の輝度値の範囲では、入力画像I2’’が採用され、S4〜S5の輝度値の範囲では、入力画像I1’’が採用され、S6以上の輝度値の範囲では、入力画像I0’’が採用される。S1〜S2、S3〜S4及びS5〜S6の輝度値の範囲は、(B)に示す重みでブレンドされた合成値で採用される。このように、露出の高い画像が優先的に採用される。また、白とび領域部分については露出の低い画像が採用されるとともに、境界部分を滑らかにブレンドする。上記図11の(A)に示すグラフを画像化した輝度ベースマスクの一例を図12に示す。図12の(A)は入力画像を示し、(B)は当該入力画像の輝度ベースマスクである。図12の(B)では、100%入力画像の画素値を利用する場合には白とし、100%入力画像の画素値を利用しない場合には黒として表現している。S22の処理が終了すると、合成マスク生成処理へ移行する(S32)。
一方、S24の処理では、合成部16が被写体ぶれ領域を抽出する。例えば、合成部16が、図3のS16の処理と同様に差分画像を算出し、動被写体尤度が所定値以上の領域を被写体ぶれ領域として抽出する。図13の(A)は、被写体ぶれ領域を含む差分画像の一例である。S24の処理が終了すると、ラベリング処理へ移行する(S26)。
S26の処理では、合成部16が被写体ぶれ領域をラベリングする。合成部16は、連続する被写体ぶれ領域に対して一つのラベルRnを設定する。図13の(B)は、連続領域をラベリングした例である。S26の処理が終了すると、各領域の基準画像の選択処理へ移行する(S28)。
S28の処理では、合成部16が被写体ぶれ領域ごとに基準画像を設定する。合成部16は、基準画像として基本的に高露出の画像を優先させる。例えば、入力画像I0’’と入力画像I1’’とを合成する場合には、基準画像として入力画像I1’’が選択される。ただし、入力画像I1’’において被写体ぶれ領域が白飛び領域に影響される場合には、基準画像として入力画像I0’’が選択される。S28の処理が終了すると、被写体ぶれマスク生成処理へ移行する(S30)。
S30の処理では、合成部16が被写体ぶれ領域ごとに被写体ぶれマスクを生成する。合成部16は、基準画像として高露出の画像を優先させる場合には第2マスクを生成する。一方、基準画像として低露出の画像を優先させる場合には第1マスクを生成する。図14は、S24〜S30の一連の処理を説明する概要図である。図14に示すように、入力画像I0’’と入力画像I1’’とを合成する際に、差分画像Xを求め、差分画像の領域ごとに、第1マスク(lo_mask)又は第2マスク(hi_mask)が生成される。すなわち、被写体が動く領域については、被写体ぶれマスクを用いることで一枚の画像のみから画素値を入力させることで、上述したゴースト現象を回避することができる。S30の処理が終了すると、合成マスク生成処理へ移行する(S32)。
S32の処理では、合成部16が輝度ベースマスク及び被写体ぶれマスクに基づいて合成マスクを生成する。図15は、合成マスクの生成処理を説明する概要図である。図15に示すように、lo_maskを反転させた画像を輝度ベースマスクに乗算する。また、hi_maskを輝度ベースマスクに加算する。このように結合させることで、合成マスクが生成される。S32の処理が終了すると、合成処理へ移行する(S34)。
S34の処理では、合成部16がS32の処理で作成された合成マスクに従って合成処理を行う。なお、合成済み画像の輝度値P0と露出変換関数を適用させた入力画像の輝度値P1を重みaで合成する場合、合成後の輝度値P2は以下の数式で求めることができる。
このとき、露出の最も低い画像については全領域をそのまま合成する。S34の処理が終了すると、入力画像確認処理へ移行する(S36)。
S36の処理では、合成部16が全ての入力画像を合成したか否かを判定する。全ての入力画像を合成していない場合には、S22及びS24の処理へ移行する。そして、例えば、図10に示すように、入力画像I0’’と入力画像I1’’との合成画像O0と、新たな入力画像I0’’との合成処理が行われる。一方、全ての入力画像を合成した場合には、図9に示す制御処理を終了する。
図9に示す制御処理を実行することで、被写体ぶれの補正されたHDR合成画像が生成される。
次に、携帯端末(コンピュータ)2を上記画像処理装置1として機能させるための画像処理プログラムを説明する。
画像処理プログラムは、メインモジュール、入力モジュール及び演算処理モジュールを備えている。メインモジュールは、画像処理を統括的に制御する部分である。入力モジュールは、入力画像を取得するように携帯端末2を動作させる。演算処理モジュールは、動き情報取得モジュール、尤度算出モジュール、露出推定モジュール、動き補正モジュール及び合成モジュールを備えている。メインモジュール、入力モジュール及び演算処理モジュールを実行させることにより実現される機能は、上述した画像処理装置1の画像入力部10、動き情報取得部12、尤度算出部13、露出推定部14、動き補正部15及び合成部16の機能とそれぞれ同様である。
画像処理プログラムは、例えば、ROM等の記録媒体または半導体メモリによって提供される。また、画像処理プログラムは、データ信号としてネットワークを介して提供されてもよい。
以上、本実施形態に係る画像処理装置1、画像処理方法及び画像処理プログラムによれば、第1画像と第2画像との露出を合わせる前に、第1画像と第2画像との差分に基づいて各画素における被写体の動きの尤度を算出する。そして、被写体の動きの尤度に基づいて第1画像と第2画像との露出条件を合わせる露出変換関数を推定する。このように、露出を合わせる際に被写体の動きの尤度が考慮されるため、例えば被写体の動きで色が変化している可能性がある領域を除いて露出を合わせることができる。よって、適切な合成画像を生成することが可能となる。さらに、被写体ぶれマスクを用いて被写体ぶれ(ゴースト的な表示)の発生を回避し、クリアな画像とすることができる。
(第2実施形態)
第2実施形態に係る画像処理装置は、第1実施形態に係る画像処理装置とほぼ同様に構成されており、HDR合成後の後処理に関する処理部等を備える点が相違する。以下では第1実施形態との相違点を中心に説明し、重複する説明については省略する。
図16は、第2実施形態に係る画像処理装置1を備える携帯端末2の機能ブロック図である。図16に示す携帯端末2は、第1実施形態と同様に、図2に示すハードウェア構成を有する。図16に示すように、画像処理装置1は、第1実施形態に係る画像処理装置1と比べて、領域データ生成部50、記録部51、データ取得部52及び後処理部(画像処理部)53を備える点が相違する。
領域データ生成部50は、動被写体尤度に基づいて領域データを生成する機能を有している。領域データ生成部50は、例えば、尤度算出部13によって算出された動被写体尤度を入力し、領域データを生成する。あるいは、領域データ生成部50は、合成部16から動被写体領域に関する情報又は被写体ぶれマスクを入力して、領域データを生成してもよい。ここで、領域データとは、合成画像において動被写体が存在する動被写体領域(対象領域)を特定する情報である。例えば、領域データは、動被写体が存在する画素の座標については「1」それ以外の座標については「0」と符号化したデータ又は該データを画像化したものが用いられる。なお、後処理の処理内容によっては、領域データは動被写体領域の位置座標を特定できれば足りるため、おおよその範囲が分かる情報であってもよい。このため、領域データは、必ずしも合成画像と同一のサイズ(画素規模)である必要はなく、種々の方法で圧縮してもよい。例えば、画像化した場合には解像度を下げて1/4又は1/16程度に縮小してもよい。同様に、例えば、領域データは、動被写体領域の中心の座標(x,y)及び半径rであってもよい。すなわち、領域データは、合成画像において動被写体が存在する動被写体領域そのものである必要はなく、動被写体領域を含んでいればよい。例えば、領域データが、動被写体領域に基づいて生成された領域であってもよい。すなわち、領域データが、動被写体領域を含むような四角形、円形、又はこれらの集合で示す1又は複数の領域であってもよい。この場合、領域データには、動被写体でない領域も含むことになるが、動被写体領域を効率良く特定することができる。
領域データ生成部50は、生成した領域データを合成画像と関連付けして記録部51に保存する。記録部51は、記録媒体である。
領域データ生成部50は、領域データに元画素情報を関連付けして記録してもよい。元画素情報とは、動被写体領域を作成するために用いた画素に関する情報である。例えば、単に「合成する画像同士のうち強制的に輝度値の低い画素値を選択させて合成された」という情報でもよい。上記元画素情報は、例えば、合成部16で作成したlo_maskを用いることにより取得することができる。あるいは、単に「合成する画像同士のうち強制的に輝度値の高い画素値を選択させて合成された」という情報でもよい。上記元画素情報は、例えば、合成部16で作成したhi_maskを用いることにより取得することができる。また、より詳細な情報として、黒つぶれ又は白とびとなっている画素を用いて動被写体領域が合成されたものであるのか否かを識別可能な情報であってもよい。元画素情報として、例えば、動被写体領域の画素位置に応じて黒つぶれ画素を用いた場合には「0」、白とび画素を用いた場合には「255」、それ以外には「124」と符号化したデータが用いられる。あるいは、元画像情報として、上記情報を算出するために必要な情報を取得してもよい。例えば、元画像情報として、動被写体領域を生成するために用いた露出変換パラメータ(a,b)を採用してもよい。露出変換パラメータ(a,b)を用いることで、合成画像の動被写体領域の画素値から変換前の画素値を推定できるため、黒つぶれ又は白とびとなっている画素を用いて動被写体領域が合成されたものであるのか否かを事後的に識別することができる。3枚以上の画像を合成した場合には、上述した露出変換パラメータ(a,b)及び合成時の重みaを、元画素情報としてもよい。露出変換パラメータ(a,b)が入力画像と関連付けされている場合には、入力画像を識別する番号を、元画素情報としてもよい。上記元画素情報は、例えば、合成部16の算出結果から取得することができる。また、合成画像の作成時に動被写体領域に対して元画像からどの程度輝度値を増加させたかの割合(合成画像の輝度値/元画像の輝度値)を画素値ごと又は動被写体領域ごとに算出したものを、元画素情報としてもよい。
データ取得部52は、記録部51を参照可能に構成されている。データ取得部52は、記録部51を参照し、合成画像と、該合成画像に関連付けされた領域データを取得する機能を有している。データ取得部52は、さらに該領域データに関連づけされた元画素情報を取得してもよい。
後処理部53は、合成画像に対して後処理を行う機能を有している。後処理部53は、領域データを用いて、合成画像に対し、動被写体領域と動被写体領域以外の領域とで異なる画像処理を行う機能を有している。画像処理は、トーンマッピング処理、ノイズ除去処理(ノイズリダクション処理)、物体識別処理又はその他画素値加工処理が含まれる。例えば、後処理部53は、動被写体領域に第1の処理を行い、動被写体領域以外の領域に第1の処理とは異なる第2の処理を行う。第1の処理又は第2の処理には、「処理をしないこと」も含まれる。例えば、動被写体領域にフィルタ処理を行わず、動被写体領域以外の領域にフィルタ処理を行うことも、上述した「異なる処理」に含まれる。後処理部53が、動被写体領域を考慮して後処理を行うことで、画素値を変換・合成した合成処理が後処理の結果に与える影響を低減させることができる。
後処理部53は、さらに、元画素情報を参照してどのような画像処理を行うのかを判定してもよい。例えば、後処理部53は、合成する画像同士のうち強制的に輝度値の低い画素値を選択させるlo_maskを用いて動被写体領域が生成された場合と、合成する画像同士のうち強制的に輝度値の高い画素値を選択させるhi_maskを用いて動被写体領域が生成された場合とで、処理を変更してもよい。例えば、動被写体領域が輝度値の低い画素値を用いて生成された場合には、合成処理のために強制的に輝度値を大きくした領域となっている可能性があり、画素情報が基本的に不足している領域となっている場合がある。また、例えば、動被写体領域がhi_maskによって生成され、さらに、白飛びの画素を含んで生成された場合には、該白飛び領域については、合成処理のために強制的に所定の輝度値を設定した領域となっている可能性があり、画素情報が基本的に欠落している領域(画素情報が不明な領域)である。このように、元の入力画像に応じて、画素情報が不足しているのか、そもそも画素情報が不明であるのかが異なるため、上記差異を考慮して後処理を行うことで適切な結果を得ることができる。
次に、本実施形態に係る画像処理装置1の領域データ動作について説明する。図17は、画像処理装置の領域データ動作を示すフローチャートである。図17に示す制御処理は、図3又は図9に示す制御処理が終了した後に実行される。
まず、領域データ生成部50が、データ入力処理を行う(S50)。S50の処理では、領域データ生成部50が、例えば、尤度算出部13又は合成部16から画素位置ごとの動被写体尤度を取得する。なお、領域データ生成部50が、合成部16から被写体ぶれマスクに関する情報を取得してもよい。S50の処理が終了すると、領域データ生成処理へ移行する(S52)。
S52の処理では、領域データ生成部50が、S52で取得した動被写体尤度に基づいて、領域データを生成する。例えば、領域データ生成部50は、動被写体尤度が所定値以上である画素位置には「1」それ以外の座標については「0」と符号化することにより、領域データを生成する。符号化したデータを画像化したものを図18の(A)に示す。図18の(A)は、合成画像Qの座標系において、動被写体尤度が所定値以上であった動被写体領域MB1,MW1,MW2を示している。動被写体領域MB1,MW1,MW2以外の領域Tは、動作のない被写体が描画された領域となる。あるいは、領域データ生成部50は、被写体ぶれマスクを入力してそのまま領域データとしてもよい。そして、領域データ生成部50は、領域データの解像度を下げてデータ量を圧縮する。又は、図18の(B)に示すように、領域データ生成部50は、動被写体領域MB1に対応した中心座標C1及び半径r1を領域データとして生成してもよい。同様に、領域データ生成部50は、動被写体領域MW1に対応した中心座標C2及び半径r2を領域データとして生成してもよい。なお、動被写体領域を複数の円で表現してもよい。例えば、領域データ生成部50は、動被写体領域MW2に対応した中心座標C3及び半径r3、及び、中心座標C4及び半径r4を領域データとして生成してもよい。S52の処理が終了すると、元画素値情報入力処理へ移行する(S54)。
S54の処理では、領域データ生成部50が、S52の処理で得られた動被写体領域ごとに、元画素値情報を入力する。領域データ生成部50は、例えば合成部16から被写体ぶれマスクを取得して、それぞれの動被写体領域がlo_maskを用いて作成されたか否かの情報を元画素値情報として取得する。領域データ生成部50は、例えば合成部16から被写体ぶれマスクを取得して、それぞれの動被写体領域がlo_mask、又は、hi_maskを用いて作成されたか否かの情報を元画素値情報として取得する。これにより、動被写体領域を2種類に分類することができる。この場合、動被写体領域を識別するためにラベリングしておく。これにより、例えば、図18の(A)に示すlo_maskを用いて生成された動被写体領域MB1と、hi_maskを用いて生成された動被写体領域MW1,MW2に分類することができる。なお、更なる情報を元画素値情報として取得してもよい。例えば、領域データ生成部50は、動被写体領域を生成するために用いた露出変換パラメータ(a,b)や合成時の重みaを、元画素値情報として合成部16から取得してもよい。S54の処理が終了すると、記録処理へ移行する(S56)。
S56の処理では、領域データ生成部50が、合成画像及びS52の処理で生成された領域データを関連付けして記録する。また、S56の処理では、さらに領域データと、S52の処理で作成された元画素値情報とを関連付けして記録してもよい。S56の処理が終了すると、図17に示す制御処理を終了する。
次に、本実施形態に係る画像処理装置1の後処理動作について説明する。なお、以下では説明理解の容易性を考慮して、合成画像に対してトーンマッピング処理を行う例を説明する。図19は、画像処理装置のトーンマッピング処理動作を示すフローチャートである。図19に示す制御処理は、図17に示す制御処理が終了した後に実行される。
図19に示すように、最初に、データ取得部52がデータ入力処理を行う(S60)。S60の処理では、データ取得部52が、記録部51を参照し、合成画像、領域データ及び元画素値情報を入力する。S60の処理が終了すると、動被写体領域判定処理へ移行する(S62)。
S62の処理では、後処理部53が、S60の処理で取得した領域データ及び元画素値情報を用いて、領域データで示された動被写体領域が、合成する画像同士のうち強制的に輝度値の低い画素値を選択させるlo_maskを用いて合成されたものであるか否かを判定する。S62の処理で、後処理部53が、動被写体領域がlo_maskを用いて合成されたものであると判定した場合には、該領域のトーンマッピング処理へ移行する(S64)。
S64の処理では、後処理部53が、動被写体領域に対してトーンマッピング処理を行う。該動被写体領域については、合成する画像同士のうち強制的に輝度値の低い画素値が選択されているため、合成時において輝度値を大きく増大させている可能性がある。すなわち、既に画素情報が不足している領域を無理に増大させた領域の可能性がある。このため、トーンマッピング処理で、さらに輝度値を増大させると、ノイズが発生するおそれがある。よって、該動被写体領域に対しては、上限値として第1の閾値を設定し、第1の閾値以上の輝度値とならないようにトーマッピング処理を行う。第1の閾値は、例えば元画像の画素値のn倍が設定される。また、撮像センサのノイズ量に応じてnの値を調整してもよい。例えば、撮像センサのノイズ量が大きい場合にはnの値を小さくしてもよい。S64の処理が終了すると、ノイズ除去フィルタ適用処理へ移行する(S66)。
S66の処理では、S64でトーマッピング処理した動被写体領域に対して、ノイズ除去フィルタを適用する処理である。ノイズ除去フィルタとしては、例えば平滑化処理等を行うフィルタが採用される。なお、S66の処理は、合成処理時の輝度値変換率n1と、S64でのトーマッピング処理時の輝度値変換率n2とに基づいて、ノイズ除去フィルタを適用するか否かを判定してもよい。例えば、n1・n2が所定値以上であればノイズ除去フィルタを適用してもよい。このとき、n1・n2が大きくなるほどノイズ除去フィルタの強さを大きく設定してもよい。S66の処理が終了すると、動被写体領域判定処理へ移行する(S68)。
S68の処理では、後処理部53が、S60の処理で取得した領域データ及び元画素値情報を用いて、以下の内容を判定する。後処理部53は、領域データで示された動被写体領域が、合成する画像同士のうち強制的に輝度値の高い画素値を選択させるhi_maskを用いて合成され、かつ、白とび領域を含むか否かを判定する。S68の処理で、後処理部53が、動被写体領域がlo_maskを用いて合成されたものであると判定した場合には、該領域のトーンマッピング処理へ移行する(S70)。
S70の処理では、後処理部53が、動被写体領域に対してトーンマッピング処理を行う。白飛び領域については、合成処理のために強制的に所定の輝度値を設定した領域となっている可能性があり、画素情報が基本的に欠落している領域(画素情報が不明な領域)である。すなわち、合成処理のために便宜的に設定した画素値に基づいて、トーンマッピング処理を行うことになるため、適切な結果とならない場合がある。よって、白飛び領域については、求めるトーンマッピング処理の結果に応じて所定の処理を施す必要がある。例えば、トーンマッピング処理によって自然な画像を得たいという要求がある場合には、後処理部53は、白飛び領域の画素値として、元画像の画素値に近づけるようにトーンマッピング処理を行う。又は、後処理部53は、白飛び領域については何もしない(白飛び状態を維持させる)としてもよい。S70の処理が終了すると、他の領域のトーンマッピング処理へ移行する(S72)。
S72の処理では、動被写体領域以外の領域にトーンマッピング処理を行う。この処理は所望の要求に応じて行う通常のトーンマッピング処理である。S72の処理が終了すると、図19に示す制御処理を終了する。
一方、S62の処理で、後処理部53が、動被写体領域がlo_maskを用いて合成されたものでないと判定した場合には、動被写体領域判定処理へ移行する(S68)。また、S68の処理で、後処理部53が、動被写体領域がlo_maskを用いて合成されたものでないと判定した場合には、他の領域のトーンマッピング処理へ移行する(S72)。
図19に示す制御処理を実行することで、動被写体領域と動被写体領域以外の領域とで、異なる後処理を行うことができるため、ノイズの発生等、合成画像処理が後工程に影響を与えることを回避することができる。なお、S60の処理がデータ取得ステップであり、S64,S66,S70及びS72が画像処理ステップである。
次に、携帯端末(コンピュータ)2を上記画像処理装置1として機能させるための画像処理プログラムを説明する。
画像処理プログラムは、メインモジュール、入力モジュール及び演算処理モジュールを備えている。メインモジュールは、画像処理を統括的に制御する部分である。入力モジュールは、入力画像を取得するように携帯端末2を動作させる。演算処理モジュールは、例えば、動き情報取得モジュール、尤度算出モジュール、露出推定モジュール、動き補正モジュール、合成モジュール、領域データ生成モジュール、データ取得モジュール及び後処理モジュールを備えている。メインモジュール、入力モジュール及び演算処理モジュールを実行させることにより実現される機能は、上述した画像処理装置1の画像入力部10、動き情報取得部12、尤度算出部13、露出推定部14、動き補正部15、合成部16、領域データ生成部50、データ取得部52及び後処理部53の機能とそれぞれ同様である。
画像処理プログラムは、例えば、ROM等の記録媒体または半導体メモリによって提供される。また、画像処理プログラムは、データ信号としてネットワークを介して提供されてもよい。
以上、第2実施形態に係る画像処理装置1、画像処理方法及び画像処理プログラムによれば、後処理部53によって合成画像に対して画像処理を行う際に、領域データを用いて、動被写体が描画された領域とそれ以外の領域とで異なる処理を行うことができる。動被写体が撮像された領域は、合成処理時に種々の画像処理が施されている。このため、画像全体に対して同一の画像処理を施すのではなく、動被写体が撮像された領域を他の領域を区別して画像処理を施すことにより、後工程時において合成時の処理の影響が顕著となることを回避することができる。入力画像(元画像)の画像情報のみを用いて被写体ぶれを抑えたHDR合成を行った場合であっても、後工程を適切に行うことが可能となる。また、合成画像と領域データとを記録部51に記録することで、撮像時や合成時だけでなく、合成後の所望のタイミングで後工程を適切に行うことができる。さらに、トーンマッピング処理を領域ごとに異なる処理とすることで、対象領域にノイズが多く発生したり、対象領域の色が不自然となることを回避することができる。
なお、上述した実施形態は本発明に係る画像処理装置の一例を示すものである。本発明に係る画像処理装置は、実施形態に係る画像処理装置1に限られるものではなく、各請求項に記載した要旨を変更しない範囲で、実施形態に係る画像処理装置を変形し、又は他のものに適用したものであってもよい。
例えば、上述した各実施形態では、カメラ20がフレーム画像を取得する例を説明したが、別の機器からネットワークを介して送信された画像であってもよい。また、合成画像を表示せずに記録のみする場合には、表示部21を備えなくてもよい。
また、上述した各実施形態に係る画像処理装置1を、手ぶれ補正装置とともに動作させてもよい。
また、図19に示す制御処理については、処理順を変更してもよい。例えば、S72の処理をS60の処理の直後に行ってもよい。S68〜S70の処理を実行後にS62〜S66の処理を実行してもよい。さらに、S68の処理において、hi_maskを用いて合成された動被写体領域だけでなく、lo_maskを用いて合成された動被写体領域に対して白飛び領域を含むか否かを判定し、S70に記載の処理を実行してもよい。
(実施例)
以下、上記効果を説明すべく本発明者が実施した実施例及び比較例について述べる。
(動被写体領域に黒つぶれ領域を有する入力画像)
HDR合成するための入力画像として、動被写体が撮像された第1画像及び第2画像を用意した(図20の(A),(B))。図20の(A)は、輝度値の低い入力画像であり、図20の(B)が輝度値の高い入力画像である。ここでは人が左から右へ移動している。また、人の洋服部分が黒くつぶれている。
(比較例1)
図20に示す2つの入力画像から生成されたHDR画像全体に対してトーンマッピング処理をした。結果を図21,図22に示す。図21の(A)は、トーンマッピング処理後の画像であり、図21の(B)は、(A)における動被写体領域Z1を説明する画像である。図22は、図21の(B)に示す比較例1の動被写体領域Z1の一部拡大図である。
(実施例1)
図20に示す2つの入力画像から生成されたHDR画像に対して、トーンマッピング処理をするとともに、動被写体領域に対してノイズ除去フィルタを適用した。結果を図23,図24に示す。図23の(A)は、ノイズ除去フィルタを適用した画像であり、図23の(B)は、(A)における動被写体領域Z1を説明する画像である。図24は、図23の(B)に示す実施例1の動被写体領域Z1の一部拡大図である。
比較例1の結果である図22と、実施例1の結果である図24とを比較すると、実施例1は、比較例1と比べてノイズが低減され、画質の良い画像となっていることが確認された。
(動被写体領域に白飛び領域を有する入力画像)
HDR合成するための入力画像として、動被写体が撮像された第1画像及び第2画像を用意した(図25の(A),(B))。図25の(A)は、輝度値の低い入力画像であり、図25の(B)が輝度値の高い入力画像である。ここでは左手を振る静止した人物が撮像されている。(B)では空(そら)の部分が白飛びしている。
(比較例2)
図25に示す2つの入力画像から生成されたHDR画像全体に対してトーンマッピング処理をした。結果を図26に示す。
(実施例2)
図25に示す2つの入力画像から生成されたHDR画像に対して、白飛び領域のままとしたトーンマッピング処理をした。結果を図27に示す。
比較例2の結果である図26と、実施例2の結果である図27とを比較すると、実施例2は、比較例2と比べて動被写体領域Z2が目立たなくなっており、画質の良い画像となっていることが確認された。