(57)【特許請求の範囲】
【請求項１】
処理ユニットにより実行される自動ホワイトバランス補償方法であって、
フレーム０を取得する工程と、
前記フレーム０を複数のブロックに分割する工程と、
前記フレーム０の各ブロックのブロック統計情報を得る工程と、
前記フレーム０の各ブロックをそのブロック統計情報に基づいて複数のタイプのうちの１つとしてラベリングする工程と、
第１のタイプとしてラベリングされたブロックである前記フレーム０の第１のタイプのブロックを入力として前記フレーム０に第１のＡＷＢ補償を施す工程と、
第２のタイプとしてラベリングされたブロックである前記フレーム０の第２のタイプのブロックの位置と同じ位置におけるフレーム１のブロックを入力として前記フレーム１に第２のＡＷＢ補償を施す工程と、
前記補償されたフレーム０を前記補償されたフレーム１と合成する工程と、を含み、
前記第１のタイプは、
１）前記各ブロックの輝度ヒストグラムの暗領域の画素数、及び、前記各ブロックの前記輝度ヒストグラムの飽和領域の画素数と、
２）前記各ブロックの輝度平均値と、
３）前記各ブロックの前記輝度ヒストグラムの前記暗領域の画素数、前記各ブロックの前記輝度ヒストグラムの前記飽和領域の画素数、及び、前記各ブロックの前記輝度平均値との、１）〜３）のうちのいずれか１つに基づいて、ラベリングされる、自動ホワイトバランス補償方法。
【請求項２】
前記第１のタイプのブロックを入力として前記フレーム０に第１のＡＷＢ補償を施す工程が、
前記フレーム０の前記第１のタイプのブロックの画素を入力と見なして、統計計算に採用する工程と、
計算結果に基づいて前記フレーム０のＲチャネルおよびＢチャネル画素のゲインを調整する工程と、
をさらに含む請求項１に記載の自動ホワイトバランス補償方法。
【請求項３】
ブロックは、該ブロックの前記輝度ヒストグラムの前記暗領域の前記画素数がブロック輝度しきい値より大きくなく、かつ該ブロックの前記輝度ヒストグラムの前記飽和領域の前記画素数が前記ブロック輝度しきい値より大きくない場合に、前記第１のタイプとしてラベリングされる請求項１または２に記載の自動ホワイトバランス補償方法。
【請求項４】
前記ブロックの前記輝度ヒストグラムが複数のビンに分割され、前記ブロックの各画素がその輝度値に基づいて１つのビンに分配され、かつ前記暗領域が、最初のビンから低ビンしきい値を有する１つのビンまでのビンを含み、前記飽和領域が、高ビンしきい値を有する１つのビンから最後のビンまでのビンを含む請求項３に記載の自動ホワイトバランス補償方法。
【請求項５】
ブロックは、該ブロックの輝度ヒストグラムの暗領域の画素数がブロック輝度しきい値よりも大きい場合に、第２のタイプとしてラベリングされる請求項１から４のいずれか１項に記載の自動ホワイトバランス補償方法。
【請求項６】
ブロックは、該ブロックの輝度平均値が低輝度平均しきい値から高輝度平均しきい値までの間にある場合に、前記第１のタイプとしてラベリングされる請求項１から５のいずれか１項に記載の自動ホワイトバランス補償方法。
【請求項７】
フレーム２を取得する工程と、
第３のタイプとしてラベリングされたブロックである前記フレーム０の第３のタイプのブロックの位置と同じ位置における前記フレーム２のブロックを入力として、前記フレーム２に第３のＡＷＢ補償を施す工程と、
前記補償されたフレーム２を、前記補償されたフレーム０と前記補償されたフレーム１との合成結果と合成する工程と、
をさらに含む請求項１から６のいずれか１項に記載の自動ホワイトバランス補償方法。
【請求項８】
前記フレーム２は高露光フレームであり、ブロックは、該ブロックの前記輝度ヒストグラムの前記飽和領域の前記画素数がブロック輝度しきい値よりも大きいときに、前記第３のタイプとしてラベリングされる請求項７に記載の自動ホワイトバランス補償方法。
【請求項９】
前記フレーム０はノーマル露光フレームであり、前記フレーム１は低露光フレームである請求項１から８のいずれか１項に記載の自動ホワイトバランス補償方法。
【請求項１０】
前記各ブロックの前記タイプに基づいてブロックの重みを設定する工程と、
前記ブロックの重みに基づいて前記フレーム０の複数の画素の重みを計算する工程と、
前記画素の重みに基づいて、前記補償されたフレーム０を前記補償されたフレーム１と合成する工程と、
をさらに含む請求項１から９のいずれか１項に記載の自動ホワイトバランス補償方法。
【請求項１１】
前記画素の重みが次の式により計算される請求項１０に記載の自動ホワイトバランス補償方法。
［数１］
Ｗｐ＝Ｄ１×Ｄ２×ＷＵＬ＋Ｄ１×Ｄ４×ＷＵＲ＋Ｄ３×Ｄ２×ＷＬＬ＋Ｄ３×Ｄ４×ＷＬＲ
（式中、Ｗｐはフレーム０の１つの画素の画素の重みを表し、ＷＵＬは上左側のブロックのブロックの重みを表し、ＷＵＲは上右側のブロックのブロックの重みを表し、ＷＬＬは下左側のブロックのブロックの重みを表し、ＷＬＲは下右側のブロックのブロックの重みを表し、Ｄ１は前記画素から下縁辺までの距離を表し、Ｄ２は前記画素から右縁辺までの距離を表し、Ｄ３は前記画素から上縁辺までの距離を表し、Ｄ４は前記画素から左縁辺までの距離を表す。）
【請求項１２】
自動ホワイトバランス補償を行う自動ホワイトバランス補償装置であって、
カメラモジュールに接続されたカメラモジュールコントローラと、
前記カメラモジュールコントローラを介してフレーム０を取得し、前記フレーム０を複数のブロックに分割し、前記フレーム０の各ブロックのブロック統計情報を得、前記フレーム０の各ブロックをそのブロック統計情報に基づいて複数のタイプのうちの１つとしてラベリングし、第１のタイプとしてラベリングされたブロックである前記フレーム０の第１のタイプのブロックを入力として前記フレーム０に第１のＡＷＢ補償を施し、第２のタイプとしてラベリングされたブロックである前記フレーム０の第２のタイプのブロックの位置と同じ位置におけるフレーム１のブロックを入力として前記フレーム１に第２のＡＷＢ補償を施し、かつ前記補償されたフレーム０を前記補償されたフレーム１と合成する処理ユニットと、を含み、
前記第１のタイプは、
１）前記各ブロックの輝度ヒストグラムの暗領域の画素数、及び、前記各ブロックの前記輝度ヒストグラムの飽和領域の画素数と、
２）前記各ブロックの輝度平均値と、
３）前記各ブロックの前記輝度ヒストグラムの前記暗領域の画素数、前記各ブロックの前記輝度ヒストグラムの前記飽和領域の画素数、及び、前記各ブロックの前記輝度平均値との、１）〜３）のうちのいずれか１つに基づいて、ラベリングされる、自動ホワイトバランス補償装置。
【請求項１３】
前記処理ユニットが、前記フレーム０の前記第１のタイプのブロックの画素を入力と見なして統計計算に採用し、計算結果に基づいて前記フレーム０のＲチャネルおよびＢチャネル画素のゲインを調整する請求項１２に記載の自動ホワイトバランス補償装置。
【請求項１４】
ブロックは、該ブロックの前記輝度ヒストグラムの前記暗領域の前記画素数がブロック輝度しきい値より大きくなく、かつ該ブロックの前記輝度ヒストグラムの前記飽和領域の前記画素数が前記ブロック輝度しきい値より大きくない場合に、前記第１のタイプとしてラベリングされる請求項１２または１３に記載の自動ホワイトバランス補償装置。
【請求項１５】
前記ブロックの前記輝度ヒストグラムが複数のビンに分割され、前記ブロックの各画素がその輝度値に基づいて１つのビンに分配され、かつ前記暗領域が最初のビンから低ビンしきい値を有する１つのビンまでのビンを含み、前記飽和領域が、高ビンしきい値を有する１つのビンから最後のビンまでのビンを含む請求項１４に記載の自動ホワイトバランス補償装置。
【請求項１６】
ブロックは、該ブロックの輝度ヒストグラムの暗領域の画素数がブロック輝度しきい値よりも大きい場合に、第２のタイプとしてラベリングされる請求項１２から１５のいずれか１項に記載の自動ホワイトバランス補償装置。
【請求項１７】
ブロックは、該ブロックの輝度平均値が低輝度平均しきい値から高輝度平均しきい値までの間にある場合に、前記第１のタイプとしてラベリングされる請求項１２から１６のいずれか１項に記載の自動ホワイトバランス補償装置。
【請求項１８】
前記処理ユニットが、フレーム２を取得し、第３のタイプとしてラベリングされたブロックである前記フレーム０の第３のタイプのブロックの位置と同じ位置における前記フレーム２のブロックを入力として前記フレーム２に第３のＡＷＢ補償を施し、前記補償されたフレーム２を前記補償されたフレーム０と前記補償されたフレーム１との合成結果と合成する請求項１２から１７のいずれか１項に記載の自動ホワイトバランス補償装置。
【請求項１９】
前記フレーム２は高露光フレームであり、ブロックは、該ブロックの前記輝度ヒストグラムの前記飽和領域の前記画素数がブロック輝度しきい値よりも大きい場合に、前記第３のタイプとしてラベリングされる請求項１８に記載の自動ホワイトバランス補償装置。
【請求項２０】
前記フレーム０はノーマル露光フレームであり、前記フレーム１は低露光フレームである請求項１２から１９のいずれか１項に記載の自動ホワイトバランス補償装置。
【請求項２１】
前記処理ユニットが、前記各ブロックの前記タイプに基づいてブロックの重みを設定し、前記ブロックの重みに基づいて前記フレーム０の複数の画素の重みを計算し、前記画素の重みに基づいて前記補償されたフレーム０を前記補償されたフレーム１と合成する請求項１２から２０のいずれか１項に記載の自動ホワイトバランス補償装置。
【請求項２２】
前記画素の重みが次の式により計算される請求項２１に記載の自動ホワイトバランス補償装置。
［数２］
Ｗｐ＝Ｄ１×Ｄ２×ＷＵＬ＋Ｄ１×Ｄ４×ＷＵＲ＋Ｄ３×Ｄ２×ＷＬＬ＋Ｄ３×Ｄ４×ＷＬＲ
（式中、Ｗｐはフレーム０の１つの画素の画素の重みを表し、ＷＵＬは上左側のブロックのブロックの重みを表し、ＷＵＲは上右側のブロックのブロックの重みを表し、ＷＬＬは下左側のブロックのブロックの重みを表し、ＷＬＲは下右側のブロックのブロックの重みを表し、Ｄ１は前記画素から下縁辺までの距離を表し、Ｄ２は前記画素から右縁辺までの距離を表し、Ｄ３は前記画素から上縁辺までの距離を表し、Ｄ４は前記画素から左縁辺までの距離を表す。）
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理に関し、より詳細には、自動ホワイトバランス補償方法および自動ホワイトバランス補償装置に関する。
【背景技術】
【０００２】
ＨＤＲ（ハイダイナミックレンジ）画像は、直射日光から仄かな星雲まで、実世界のシーンにおいてキャプチャした広いレンジの輝度レベルを表示することができる。ＨＤＲ画像は通常、同一の対象物に対し露光の異なる画像をキャプチャすると共にそれらを組み合わせることによって得られる。非ＨＤＲカメラでは、限られた露光レンジで写真を撮るため、飽和領域または暗領域において細部が失われてしまう。ＨＤＲＭ（ハイダイナミックレンジマージング）は、異なる露光レベルで複数の写真を撮影しそれらを合成することにより、この細部の損失を補償して、より広い階調範囲の写真表現を作り出す。ＬＤＲ（ローダイナミックレンジ）画像はそれぞれが異なる色温度を有する部分を含んでおり、ＬＤＲイメージを直接的に合成すると、色の偏った（ｃｏｌｏｒ−ｂｉａｓｅｄ）ＨＤＲ画像ができてしまう。ＡＷＢ（自動ホワイトバランス（Ａｕｔｏｍａｔｉｃ  Ｗｈｉｔｅ  Ｂａｌａｎｃｅ））は、カラーチャネルのゲインを調整し、周辺照明の状態の違いから生じる色の偏り（ｃｏｌｏｒ  ｂｉａｓ）を補正することによって、得られる画像を実際により近い色が反映されたものとすることができる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
従来は、全ての画像フレームに統一されたＡＷＢが適用されていたが、画像フレームは通常、色温度のそれぞれ異なる複数の部分を含むため、色温度の異なる複数の部分に統一されたＡＷＢを適用していては、色の偏りを補償することができず、実際により近い色を再現することができない。本発明は、生成されたＨＤＲ画像のＡＷＢ精度を改善することが可能な自動ホワイトバランス補償方法および自動ホワイトバランス補償装置を提供することを目的とする。
【課題を解決するための手段】
【０００４】
本発明に係る自動ホワイトバランス補償方法は、処理ユニットにより実行される自動ホワイトバランス補償方法であって、フレーム０を取得する工程と、フレーム０を複数のブロックに分割する工程と、フレーム０の各ブロックのブロック統計情報を得る工程と、フレーム０の各ブロックをそのブロック統計情報に基づいて複数のタイプのうちの１つとしてラベリングする工程と、第１のタイプとしてラベリングされたブロックであるフレーム０の第１のタイプのブロックを入力としてフレーム０に第１のＡＷＢ補償を施す工程と、第２のタイプとしてラベリングされたブロックであるフレーム０の第２のタイプのブロックの位置と同じ位置におけるフレーム１のブロックを入力としてフレーム１に第２のＡＷＢ補償を施す工程と、補償されたフレーム０を補償されたフレーム１と合成する工程と、を含み、前記第１のタイプは、１）前記各ブロックの輝度ヒストグラムの暗領域の画素数、及び、前記各ブロックの前記輝度ヒストグラムの飽和領域の画素数と、２）前記各ブロックの輝度平均値と、３）前記各ブロックの前記輝度ヒストグラムの前記暗領域の画素数、前記各ブロックの前記輝度ヒストグラムの前記飽和領域の画素数、及び、前記各ブロックの前記輝度平均値との、１）〜３）のうちのいずれか１つに基づいて、ラベリングされる。
【０００５】
本発明に係る自動ホワイトバランス補償装置は、自動ホワイトバランス補償を行う自動ホワイトバランス補償装置であって、カメラモジュールに接続されたカメラモジュールコントローラと、処理ユニットとを含む。該処理ユニットは、カメラモジュールコントローラを介してフレーム０を取得し、フレーム０を複数のブロックに分割し、フレーム０の各ブロックのブロック統計情報を取得し、フレーム０の各ブロックをそのブロック統計情報に基づいて複数のタイプのうちの１つとしてラベリングし、第１のタイプとしてラベリングされたブロックであるフレーム０の第１のタイプのブロックを入力としてフレーム０に第１のＡＷＢ補償を施し、第２のタイプとしてラベリングされたブロックであるフレーム０の第２のタイプのブロックの位置と同じ位置におけるフレーム１のブロックを入力としてフレーム１に第２のＡＷＢ補償を施し、補償されたフレーム０を補償されたフレーム１と合成する。前記第１のタイプは、１）前記各ブロックの輝度ヒストグラムの暗領域の画素数、及び、前記各ブロックの前記輝度ヒストグラムの飽和領域の画素数と、２）前記各ブロックの輝度平均値と、３）前記各ブロックの前記輝度ヒストグラムの前記暗領域の画素数、前記各ブロックの前記輝度ヒストグラムの前記飽和領域の画素数、及び、前記各ブロックの前記輝度平均値との、１）〜３）のうちのいずれか１つに基づいて、ラベリングされる。
【発明の効果】
【０００６】
本発明が提供するＡＷＢ補償をＨＤＲ画像生成に適用すると、合成されたＨＤＲフレームの異なる部分にそれぞれ異なるＡＷＢ補償が行われる。つまり、各部分が、その輝度値に基づいて、特定の程度のＡＷＢにより補償することができる。これによって、色の偏りがより適切に補償され、実際により近い色を再現することが可能になる。
【図面の簡単な説明】
【０００７】
【図１】本発明の一実施形態に係るコンピュータ装置の構成を示す概略図である。
【図２】本発明の一実施形態に係る、処理ユニットによって実行されるＡＷＢ補償の方法を説明するフローチャートである。
【図３】本発明の一実施形態に係る、処理ユニットによって実行されるＨＤＲ画像の合成におけるＡＷＢ補償の方法を説明するフローチャートである。
【図４】本発明の一実施形態に係るベイヤーパターンの概略図である。
【図５】本発明の一実施形態に係るブロックの輝度ヒストグラムの概略図である。
【図６】本発明の一実施形態に係るフレーム０の輝度ヒストグラムの概略図である。
【図７】本発明の一実施形態に係る４個の隣接するブロックを示す概略図である。
【発明を実施するための形態】
【０００８】
以下の記載は、本発明を実施するのに最良であると考えられる形態である。この記載は本発明の基本的な原理を説明する目的でなされたものであって、限定の意味で解されてはならない。本発明の範囲は、添付の特許請求の範囲を参照することにより決定されるべきである。
【０００９】
本発明の実施形態について、図面を参照しつつ説明するが、本発明は、以下の実施形態に限定されるものではなく、その範囲は、特許請求の範囲の記載に基づいて定められる。さらに、“含む（ｃｏｍｐｒｉｓｅｓ）”、“含んでいる（ｃｏｍｐｒｉｓｉｎｇ）”、“含む（ｉｎｃｌｕｄｅｓ）”および／または“含んでいる（ｉｎｃｌｕｄｉｎｇ）”といった用語は、本明細書で用いられるときに、記述した特徴（ｆｅａｔｕｒｅｓ）、整数、工程、動作、要素、および／またはコンポーネントの存在を明示するが、１つまたはそれ以上のその他の特徴、整数、工程、動作、要素、コンポーネント、および／またはこれらの群の存在または追加を排除するものではないということが理解されるであろう。
【００１０】
図１は、本発明の一実施形態に係るコンピュータ装置の構成を示す概略図である。本実施形態に係るコンピュータ装置は、デスクトップ型コンピュータ、ノートブック型コンピュータ、タブレットＰＣ（パーソナルコンピュータ）、携帯電話、デジタルカメラ、デジタルレコーダー、またはその他のデバイスによって実現可能であり、これらは少なくとも処理ユニット１１０を含む。処理ユニット１１０は、多種の方式、例えばマイクロコードまたはソフトウェア命令によりプログラムされて本明細書に記載の機能を実行する専用ハードウェアまたは汎用ハードウェア（例えば単一の処理機、並列計算が可能な複数の処理機もしくはグラフィック処理ユニット、またはその他）として実現され得る。処理ユニット１１０は、カメラモジュールコントローラ１７０を介し、カメラモジュール１９０を制御して複数のＬＤＲ（ローダイナミックレンジ）フレームをキャプチャし、フレームバッファー１３０にＬＤＲフレームを保存することができる。カメラモジュール１９０は、赤、緑および青色の形式で画像を検出するためのイメージセンサ、例えばＣＭＯＳ（相補型金属酸化物半導体）またはＣＣＤ（電荷結合素子）センサと、イメージセンサから感知データ（ｓｅｎｓｅｄ  ｄａｔａ）を収集する読み出し電子回路と、を含み得る。処理ユニット１１０は、フレームバッファー１３０から少なくとも３つのＬＤＲフレームを得ることができる。本実施形態において、３つのＬＤＲフレームは１２ビットのフレームである。１つのＬＤＲフレームは、最適化された露光設定の下でＡＥ（自動露光）アルゴリズムによりキャプチャされたもので、以下これをフレーム０と称する。フレーム０をキャプチャするための露光設定には、シャッタースピード、アナログゲインおよびデジタルゲインが含まれ、これらはフレームバッファー１３０または揮発性メモリ１４０に保存されるという点に留意すべきである。揮発性メモリ１４０、例えばＤＲＡＭ（ダイナミックランダムアクセスメモリ）は、ランタイム変数、データテーブルなどのような、実行において必要なデータを保存するために用いられる。別のＬＤＲフレームは低露光フレームであり、以下これをフレーム１と称する。また別のＬＤＲフレームは高露光フレームであり、以下これをフレーム２と称する。処理ユニット１１０は、ＨＤＲＭ（ハイダイナミックレンジマージング）アルゴリズムを用いてＨＤＲ（ハイダイナミックレンジ）フレームを生成することによりフレーム０から２を合成すると共に、生成されたＨＤＲフレームをフレームバッファー１５０に保存する。本実施形態では、出力ＨＤＲフレームは１８ビットのフレームである。
【００１１】
図２は、本発明の一実施形態に係る、処理ユニットによって実行されるＡＷＢ（自動ホワイトバランス）補償方法を説明するフローチャートである。プロセスはフレーム０の取得から始まる（ステップＳ２１０）。その後、フレーム０が複数のブロックに分割され（ステップＳ２２０）、フレーム０の各ブロックのブロック統計情報が得られ（ステップＳ２３０）、フレーム０の各ブロックがそのブロック統計情報に基づいて１のタイプとしてラベリングされる（ステップＳ２４０）。処理ユニット１１０は、第１のタイプとしてラベリングされたブロックであるフレーム０の第１のタイプのブロックを入力としてフレーム０に第１のＡＷＢ補償を施す（ステップＳ２５０）。本実施形態において、ブロックのタイプには、ノーマル露光、ノーマル露光よりも露光量が小さい低露光、および、ノーマル露光よりも露光量が大きい高露光が含まれる。フレーム０はＬＤＲのノーマル露光フレームのであるため、ノーマル露光タイプとしてラベリングされたブロックを入力として、フレーム０に第１のＡＷＢ補償が施される。ＡＷＢ補償は通常Ｇチャネルを維持し、計算結果に応じてＲチャネルおよびＢチャネルの画素のゲインを調整する。本実施形態において、処理ユニット１１０は、第１のタイプ（例えばノーマル露光）としてラベリングされたフレーム０の全てのブロックの統計を計算し、かつ計算結果に基づいてフレーム０の全ての画素のＲチャネルおよびＢチャネルのゲインを調整する。ＡＷＢ補償の詳細な計算は、どのアルゴリズムが用いられるかによって決まる。よく用いられるＡＷＢアルゴリズムとしては、灰色仮説（ｇｒａｙ  ｗｏｒｌｄ  ａｓｓｕｍｐｔｉｏｎ）、完全反射仮説（ｐｅｒｆｅｃｔ  ｒｅｆｌｅｃｔｏｒ  ａｓｓｕｍｐｔｉｏｎ）、色温度推定（ｃｏｌｏｒ  ｔｅｍｐｅｒａｔｕｒｅ  ｅｓｔｉｍａｔｉｏｎ）などがある。灰色仮説を例にとると、処理ユニット１１０は、第１のタイプ（例えばノーマル露光）としてラベリングされたブロックのＲ、Ｇ、およびＢチャネルの画素値を累積して、フレーム０のＲおよびＢチャネルを調整するためのゲインを得る。これにより、調整後にＲ、ＢおよびＧチャネルの画素値の累積が等しくなるようになる。
【００１２】
さらに、フレーム１が取得される（ステップＳ２６０）。本実施形態において、フレーム１はＬＤＲ低露光フレームである。第２のタイプとしてラベリングされたブロックであるフレーム０の第２のタイプのブロックの位置と同じ位置におけるフレーム１のブロックを入力として、フレーム１に第２のＡＷＢ補償が施される（ステップＳ２７０）。本実施形態において、ブロックは、例えば低露光タイプとしてラベリングされる。補償されたフレーム０が補償されたフレーム１と合成される（ステップＳ２８０）。本発明が提供するＡＷＢ補償をＨＤＲ画像生成に適用することにより、合成されたＨＤＲフレームの異なる部分にそれぞれ異なるＡＷＢ補償、例えば前述した第１および第２のＡＷＢ補償が行われる。つまり、各部分が、その輝度値に基づいて特定の程度のＡＷＢにより補償される。輝度値のそれぞれ異なる複数の部分は通常それぞれ異なる色温度を有するため、異なる色温度の部分にそれぞれ異なるＡＷＢ補償を適用することによって、色の偏りがより正確に補償され、実際により近い色が再現され得るようになる。
【００１３】
図３は、本発明の一実施形態に係る、処理ユニット１１０によって実行されるＨＤＲ画像の合成におけるＡＷＢ補償の方法を説明するフローチャートである。プロセスはフレームバッファー１３０からフレーム０を取得することから始まる（ステップＳ３１１）。次に、処理ユニット１１０がフレーム０の各ブロックの統計情報を得る（ステップＳ３１３）。詳細には、フレーム０がｍ×ｎのブロックに分割され得る。各ブロックは例えば３２×３２画素を含む。そして各画素の輝度値が計算される。各画素の輝度値は次の式（１）を用いて計算することができる。
【００１４】
［数１］
Ｖ＝０．３×Ｒ＋０．６×Ｇ＋０．１×Ｂ          （１）
式（１）では、Ｒは赤色値を表し、Ｇは緑色値を表し、Ｂは青色値を表し、Ｖは輝度値を表す。処理ユニット１１０は各ブロックの平均輝度ＡｖｅＬｕｍおよび輝度ヒストグラムを計算する。図５は、本発明の一実施形態に係るブロックの輝度ヒストグラムの概略図である。本実施形態では、例として０から４０９５までの範囲の１２ビットの輝度値を挙げているが、本発明はこれに限定されることはない。ヒストグラムは、例えば１６個のビンに分割され、ビン８の最小輝度値Ｖ８は２０４７．５（＝４０９５／２）に設定される。ビン７の最小輝度値Ｖ７およびビン９のＶ９は次の式（２）および（３）を用いて計算することができる。
【００１５】
［数２］
Ｖ７＝４０９５×ｒ      （２）
［数３］
Ｖ９＝４０９５×（１−ｒ）      （３）
式（２）および（３）において、ｒは０から０．５の間の任意の値であり得る。ｒが０．２５に設定されていると仮定すると、Ｖ７は１０２３．７５、Ｖ９は３０７１．２５である。０からＶ７までの輝度値は、７個のビン（Ｂｉｎ０〜Ｂｉｎ６）に均等に分割され、Ｖ９から４０９５までの輝度値は７個のビン（Ｂｉｎ９〜Ｂｉｎ１５）に均等に分割される。８個目のビン（Ｂｉｎ７）の輝度値はＶ７からＶ８までであり、９個目のビン（Ｂｉｎ８）の輝度値はＶ８からＶ９までである。各ブロックについて、処理ユニット１１０は、その輝度値に基づいて各画素を対応するビンに分配すると共に、各ビンに画素がいくつ存在するかをカウントする。ヒストグラムを生成するための例示的な疑似コードは次の通りである。
【００１６】
LowThr = 4096 >> 2; // LowThr = maximum_12bits * 0.25
HighThr = 4096 - LowThr;
valuePerBin = (LowThr / (blockBinNum/ 2 - 1)); // blockBinNum = 16
//for each block
for(byIdx = 0; byIdx < block_cnt_y; byIdx ++) {
for(bxIdx = 0; bxIdx < block_cnt_x; bxIdx ++) {
lum = image->y[pxlIdx];
sum += lum;
if (lum < LowThr) { // (Bin 0~6)
bin = ((unsigned short)(lum * (((blockBinNum >> 1) - 1) << 2)) >> 12); }
else if (lum < (maximum_12bits + 1) / 2) { // (Bin 7)
Bin = ( blockEntryNum / 2 - 1); }
else if (lum < HighThr) { // (Bin 8)
Bin = ( blockEntryNum / 2); }
else { // (Bin 9~15)
tmpLum = lum - HighThr;
tmpBin = ((unsigned short)(tmpLum * (((blockBinNum >> 1) - 1) << 2)) >> 12);
if (tmpBin >= ((blockBinNum >> 1) -1)){
bin = blockBinNum - 1;}
else   {
bin = (blockBinNum >> 1) + 1 + tmpBin;} }
bestExpBlockInfor[curLumSumIdx].block_hist[Bin]++; }
bestExpBlockInfor[curLumSumIdx].block_averVal = sum / block_size; }
ここで、ｂｅｓｔＥｘｐＢｌｏｃｋＩｎｆｏｒは構造体アレイであり、各構造体は、輝度平均値ｂｌｏｃｋ＿ａｖｅｒＶａｌと、Ｂｉｎ０からＢｉｎ１５の画素数ｂｌｏｃｋ＿ｈｉｓｔ［Ｂｉｎ］とを含む１つのブロックの統計情報を保存する。
【００１７】
続いて、処理ユニット１１０は、ブロックの輝度平均値およびヒストグラムを分析することにより得られた統計情報に基づいて、各ブロックが低露光タイプ、ノーマル露光タイプ、または高露光タイプであると識別する（ステップＳ３１５）。詳細には、１つのブロックのヒストグラム内の低ビンしきい値および高ビンしきい値が計算される。低ビンしきい値および高ビンしきい値は次の式（４）および（５）を用いて計算することができる。
【００１８】
［数４］
ｔｈｒｅＢｉｎＬｏｗ≒（ＢｉｎＮｕｍ／２−１）／ｒ×０．１８  （４）
［数５］
ｔｈｒｅＢｉｎＨｉｇｈ≒ＢｉｎＮｕｍ−（ＢｉｎＮｕｍ／２−１）／ｒ×０．１８  （５）
式（４）および（５）において、ｔｈｒｅＢｉｎＬｏｗは低ビンしきい値を表し、ｔｈｒｅＢｉｎＨｉｇｈは高ビンしきい値を表し、ＢｉｎＮｕｍはブロックのヒストグラム内のビンの総数を表し、例えばＢｉｎＮｕｍ＝１６であり、かつｒは０から５までの任意の値であり得る。ｒが０．２５に設定されていると仮定すると、低ビンしきい値は５であり、高ビンしきい値は１１である。各ブロックについて、Ｂｉｎ０からＢｉｎ５までにある画素は暗領域に属し、一方、Ｂｉｎ１１からＢｉｎ１５までにある画素は飽和領域に属する。各ブロックについて、暗領域の画素数を表すｐｉｘＮｕｍＬｏｗはＢｉｎ０からＢｉｎ５まで累積され、飽和領域の画素数を表すｐｉｘＮｕｍＬｏｗはＢｉｎ１１からＢｉｎ１５まで累積される。処理ユニット１１０は、下記の判断によって、ブロックのタイプが低露光、ノーマル露光、または高露光のいずれであるかを識別する。ブロックは、暗領域の画素数ｐｉｘＮｕｍＬｏｗがブロック輝度しきい値ｂｌｏｃｋｌｕｍｔｈｒｅｓよりも大きくなく、かつ飽和領域の画素数ｐｉｘＮｕｍＨｉｇｈがブロック輝度しきい値ｂｌｏｃｋｌｕｍｔｈｒｅｓよりも大きくない場合に、第１のタイプ（ノーマル露光）としてラベリングされる。ブロックは、暗領域の画素数ｐｉｘＮｕｍＬｏｗがブロック輝度しきい値ｂｌｏｃｋｌｕｍｔｈｒｅｓよりも大きい場合、第２のタイプ（低露光）としてラベリングされる。ブロックは、飽和領域の画素数ｐｉｘＮｕｍＨｉｇｈがブロック輝度しきい値ｂｌｏｃｋｌｕｍｔｈｒｅｓよりも大きい場合に、第３のタイプ（高露光）としてラベリングされる。本実施形態において、ブロック輝度しきい値はブロック内の画素の総数に関連し、例えばｂｌｏｃｋｌｕｍｔｈｒｅｓ＝ｂｌｏｃｋｓｉｚｅ＊ｒａｔｉｏである。別の実施形態では、処理ユニット１１０は、低輝度平均しきい値ＡｖｅＬｕｍＬｏｗ（例えば２５６）および高輝度平均しきい値（例えば３８４０）をさらに提供する。ブロックは、そのブロックの輝度平均値ＡｖｅＬｕｍが低輝度平均しきい値ＡｖｅＬｕｍＬｏｗ以下である場合に、第２のタイプ（低露光）としてラベリングされる。ブロックは、そのブロックの輝度平均値ＡｖｅＬｕｍが高輝度平均しきい値ＡｖｅＬｕｍＨｉｇｈ以上である場合に、第３のタイプ（高露光）としてラベリングされる。ブロックは、第２のタイプまたは第３のタイプとしてラベリングされなかった場合に、第１のタイプ（ノーマル露光）としてラベリングされる。各ブロックのタイプを識別するための例示的な疑似コードは次のとおりである。
【００１９】
ThrgridL = 5; // lowlight bin threshold, thrBlockBinL = ((binNum >> 1) - 1) * 0.18 / ratio;
for (x = 0; x < block _cnt_x; x++) {
for (y = 0; y < block_cnt_y; y++) {
curblockIdx = y * block _cnt_x + x;//block index
while (i <= ThrblockL) {
j = binNum - i;
blockcntltmp += bestExpBlockInfor[curgIdx]. block_hist[i] ; // accumulate from low to high
blockcnthtmp += bestExpBlockInfor[curgIdx].block_hist[j];// accumulate from high to low
i++;    }
curBlockAve = m_pBestExpBlockInfor[curgIdx].block_averVal;
b_AveLumMin = (maximum_12bits + 1) >> 4; //average low threshold
b_AveLumMax = (maximum_12bits + 1) - g_KAveLumMin; //average high threshold
ThrblockCnt = blockSize * 0.18;//histogram threshold
//block label is defined by average and histogram of the block
isUnder = ((Gridcntltmp > thrBlockCnt) && (g_KAveLumMin >= curBlockAve));
isOver = ((Gridcnthtmp > thrBlockCnt) && (g_KAveLumMax <= curBlockAve));
if (isUnder && isOver) { // is over and is under
blockLabel[curblockIdx] = NORMAL; }// NORMAL = 1 
else if (isUnder) { // is under
blockLabel[curblockIdx] = LOW; } // LOW = 0
else if (isOver) { //is over
blockLabel[curblockIdx] = HIGH; } // HIGH = 2
else { // is not over and not under
blockLabel[curblockIdx] = NORMAL;}}}
ここで、ｂｌｏｃｋＬａｂｅｌはアレイであり、このアレイにおいて、各セルは例えば低露光“ＬＯＷ”、ノーマル露光“ＮＯＲＭＡＬ”および高露光“ＨＩＧＨ”のようなブロックの１のタイプを保存している。なお、暗領域または飽和領域の画素数およびブロックの輝度平均値ＡｖｅＬｕｍの両方を考慮に入れるような設計にすることもできる。例えば、ブロックは、暗領域の画素数ｐｉｘＮｕｍＬｏｗがブロック輝度しきい値ｂｌｏｃｋｌｕｍｔｈｒｅｓよりも大きく、かつ輝度平均値ＡｖｅＬｕｍが低輝度平均しきい値ＡｖｅＬｕｍＬｏｗ以下である場合に、第２のタイプ（低露光）としてラベリングされる。ブロックは、飽和領域の画素数ｐｉｘＮｕｍＨｉｇｈがブロック輝度しきい値ｂｌｏｃｋｌｕｍｔｈｒｅｓよりも大きく、かつ輝度平均値ＡｖｅＬｕｍが高輝度平均しきい値ＡｖｅＬｕｍＨｉｇｈ以上である場合に、第３のタイプ（高露光）としてラベリングされる。ブロックは、低露光タイプまたは高露光タイプとしてラベリングされなかった場合、第１のタイプ（ノーマル露光）としてラベリングされる。
【００２０】
続いて、処理ユニット１１０は、そのブロックのタイプに基づいて、各ブロックの重み（ブロックの重みともいう）を設定し（ステップＳ３１７）、フレーム０の各画素の重み（画素の重みともいう）を計算する（ステップＳ３１９）。ステップＳ３１７において、詳細には、ブロックが低露光タイプとしてラベリングされている場合、ブロックの重みは０に設定され、ブロックがノーマル露光タイプとしてラベリングされている場合、ブロックの重みは１に設定され、ブロックが高露光タイプとしてラベリングされている場合、ブロックの重みは２に設定される。ステップＳ３１９において、詳細には、ブロックの境界およびコーナー部分に位置する画素を除き、処理ユニット１１０は、４個の隣接するブロックの重みおよび画素から４個の隣接するブロックの中心までの距離に基づいて、フレーム０の各画素の重みを計算する。図７は、本発明の一実施形態に係る４個の隣接するブロックを示す概略図である。隣接するブロックＷＵＬ、ＷＵＲ、ＷＬＬおよびＷＬＲの４個の中心点により矩形が形成され、この矩形は４個の縁辺Ｅ１からＥ４を含む。各画素の重みＷｐは次の式（６）を用いて計算することができる。
【００２１】
［数６］
Ｗｐ＝Ｄ１×Ｄ２×ＷＵＬ＋Ｄ１×Ｄ４×ＷＵＲ＋Ｄ３×Ｄ２×ＷＬＬ＋Ｄ３×Ｄ４×ＷＬＲ  （６）
ここで、ＷＵＬは上左側のブロックに関するブロックの重みを表し、ＷＵＲは上右側のブロックに関するブロックの重みを表し、ＷＬＬは下左側のブロックに関するブロックの重みを表し、ＷＬＲは下右側のブロックに関するブロックの重みを表し、Ｄ１は画素ｐから下縁辺Ｅ１までの距離を表し、Ｄ２は画素ｐから右縁辺Ｅ２までの距離を表し、Ｄ３は画素ｐから上縁辺Ｅ３までの距離を表し、Ｄ４は画素ｐから左縁辺Ｅ４までの距離を表す。ステップＳ３１９で計算されたフレーム０の各画素の重みは、フレーム０とフレーム１との合成プロセスにおいて用いられることとなる。詳細は後述する。
【００２２】
再度図３を参照する。フレーム０の各ブロックのタイプがラベリングされた（ステップＳ３１５）後、第１のＡＷＢ補償がフレーム０の各ブロックに施される（ステップＳ３３１）。図４は、本発明の一実施形態に係るベイヤーパターン（Ｂａｙｅｒ  ｐａｔｔｅｒｎ）の概略図である。奇数行に交互に配されたＲ（赤色）およびＧｒ（緑色）画素と、偶数行に交互に配されたＧｂ（緑色）およびＢ（青色）画素とを有するベイヤーパターン４１０が形成される。各ブロックのＲ画素をまとめてＲチャネルと称し、各ブロックのＧｒ画素およびＧｂ画素をまとめてＧチャネルと称し、各ブロックのＢ画素をまとめてＢチャネルと称する。ステップＳ３３１において、詳細に述べると、第１のＡＷＢ補償では、第１のタイプ（例えばノーマル露光）としてラベリングされたフレーム０のブロックが入力として見なされ、フレーム０の全てのブロックが調整される。第１のＡＷＢ補償ではＧチャネルは維持され、計算結果に基づいてフレーム０のＲチャネルおよびＢチャネルの画素のゲインが調整される。本実施形態において、処理ユニット１１０は、第１のタイプ（例えばノーマル露光）としてラベリングされたフレーム０のすべてブロックの画素を計算し、計算結果に基づいてフレーム０のすべての画素のＲチャネルおよびＢチャネルのゲインを調整する。
【００２３】
フレーム０に対するＡＷＢ補償が完了したら、処理ユニット１１０はフレーム０の統計情報を得る（ステップＳ３５１およびＳ３３３）。本実施形態において、ステップＳ３１１で処理ユニット１１０はＲＧＢの色空間をＨＳＶ（Ｈｕｅ，Ｓａｔｕｒａｔｉｏｎ，Ｖａｌｕｅ）のそれに変換し得る。詳細には、ステップＳ３５１およびＳ３３３において、処理ユニット１１０はフレーム０の輝度ヒストグラムを計算する。図６は、本発明の一実施形態に係るフレーム０の輝度ヒストグラムの概略図である。暗領域の輝度値（Ｂｉｎ０）は０からＣ１までであり、一方、飽和領域の輝度値（Ｂｉｎ３）はＣ３からＣ４である。本実施形態では、０から４０９５までの１２ビットの輝度値を例とし、Ｃ１＝５１１、Ｃ３＝３５８３およびＣ４＝４０９５としているが、本発明はこれに限定されることはない。フレーム０全体について、処理ユニット１１０は、各領域にいくつの画素が存在するかをカウントし、かつ暗領域に含まれる第１の画素数（暗画素数とも称する）の、飽和領域に含まれる第２の画素数（飽和画素数とも称する）に対する、ｓｈｉｆｔＲａｔｉｏと示される比値を計算する。この比値は次の式（７）を用いて計算することができる。
【００２４】
［数７］
ｓｈｉｆｔＲａｔｉｏ＝ｐｉｘｅｌＮｕｍＢｉｎ０／ｐｉｘｅｌＮｕｍＢｉｎ３  
（７）
式（７）において、ｐｉｘｅｌＮｕｍＢｉｎ０は暗領域の第１の画素数を表し、ｐｉｘｅｌＮｕｍＢｉｎ３は飽和領域の第２の画素数を表す。次に、処理ユニット１１０は、第１の画素数の第２の画素数に対する比値に基づいて、拡張倍数（ｅｘｐａｎｓｉｏｎ  ｍｕｌｔｉｐｌｉｅｒ）ｅｘｐ＿ｔｉｍｅｓを計算する。暗画素数の飽和画素数に対する比値が８未満である場合、拡張倍数ｅｘｐ＿ｔｉｍｅｓを計算するのに式（８）を用いることができる。暗画素数の飽和画素数に対する比値が８以上である場合、拡張倍数ｅｘｐ＿ｔｉｍｅｓを計算するのに式（９）を用いることができる。
【００２５】
［数８］
ｅｘｐ＿ｔｉｍｅｓ＝ａ×ｓｈｉｆｔＲａｔｉｏ×ｓｈｉｆｔＲａｔｉｏ＋ｂ×
ｓｈｉｆｔＲａｔｉｏ＋ｃ                              （８）
［数９］
ｅｘｐ＿ｔｉｍｅｓ＝ｄ×ｓｈｉｆｔＲａｔｉｏ×ｓｈｉｆｔＲａｔｉｏ＋ｅ×
ｓｈｉｆｔＲａｔｉｏ＋ｆ                              （９）
式（８）および（９）において、ａ、ｂ、ｃ、ｄ、ｅおよびｆは浮動小数点数である。続いて、処理ユニット１１０は、フレーム０の統計情報から導き出された比値ｓｈｉｆｔＲａｔｉｏおよびフレーム０の露光設定に基づいて、フレーム１を処理するのに必要な第１の露光パラメータを計算し（ステップＳ３５３）、かつフレーム２を処理するのに必要な第２の露光パラメータを計算する（ステップＳ３３５）。露光設定には、シャッタースピード（ｓｈｔと示される）、アナログゲイン（ａｇと示される）およびデジタルゲイン（ｄｇと示される）が含まれる。露光設定は、例えば、ｓｈｔ、ａｇおよびｄｇの乗積である。第１の露光パラメータＰａｒａ１および第２の露光パラメータＰａｒａ２は次の式（１０）および（１１）を用いて計算することができる。
【００２６】
［数１０］
Ｐａｒａ１＝ｓｈｔ×ａｇ×ｄｇ×ｅｘｐ＿ｔｉｍｅｓ／ｅｘｐＶａｌｕｅ  （１０）
［数１１］
Ｐａｒａ２＝ｓｈｔ×ａｇ×ｄｇ×ｅｘｐ＿ｔｉｍｅｓ  （１１）
式（１０）および（１１）において、ｅｘｐＶａｌｕｅは、第２の露光パラメータの第１の露光パラメータに対する比値である固定拡張値（ｆｉｘｅｄ  ｅｘｐａｎｓｉｏｎ  ｖａｌｕｅ）を表す。１２ビットのＬＤＲフレームを拡張および合成して１８ビットのＨＤＲフレームを生成する本実施形態において、ｅｘｐＶａｌｕｅは、６４である。
【００２７】
第２の露光パラメータＰａｒａ２を計算した（ステップＳ３３５）後、処理ユニット１１０はフレーム０をＨＤＲ空間に拡張する（ステップＳ３３７）。ステップＳ３３７において、フレーム０の第１の拡張因子を計算するのに用いられる例示的な疑似コードは次のとおりである。
【００２８】
curveMapValNormal = curveTable_AVR[0] x sht x ag x dg + curveTable_AVR[1];
curveMapValHigh = curveTable_AVR[0] x Para2 + curveTable_AVR[1];
slope_Normal = curveMapValHigh / curveMapValNormal;
ここで、ｓｌｏｐｅ＿Ｎｏｒｍａｌは、フレーム０の第１の拡張因子を表す。ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［０］は、カメラモジュール１９０のイメージセンサに関連する校正された傾き（ｃａｌｉｂｒａｔｅｄ  ｓｌｏｐｅ）である。ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［１］は、カメラモジュール１９０のイメージセンサに関連する校正されたｙ切片である。ｓｈｔ×ａｇ×ｄｇは、フレーム０の露光設定を表す（ただし、ｓｈｔはフレーム０のシャッタースピードを表し、ａｇはフレーム０のアナログゲインを表し、ｄｇはフレーム０のデジタルゲインを表す）。Ｐａｒａ２は、式（１１）を用いて算出された第２の露光パラメータを表す。処理ユニット１１０は、フレーム０における各画素のＨＳＶ値に第１の拡張因子ｓｌｏｐｅ＿Ｎｏｒｍａｌを乗じて、フレーム０をＨＤＲ空間に拡張する。
【００２９】
第１の露光パラメータＰａｒａ１を計算した（ステップＳ３５３）後、処理ユニット１１０は、算出された第１の露光パラメータＰａｒａ１によって表される露光設定に基づき、低露光フレーム（フレーム１と称する）を撮影して、それをフレームバッファー１３０に保存するようカメラモジュールコントローラ１７０に指示し、かつ第２のＡＷＢ補償を用い、フレーム０の第２のタイプのブロックの位置と同じ位置におけるフレーム１のブロックを入力と見なし、フレーム１の各ブロックを調整する（ステップＳ３５６）。ここで、フレーム０の第２のタイプのブロックは第２のタイプ（例えば低露光）としてラベリングされたブロックである。本実施形態において、フレーム０の第２のタイプ（例えば低露光）のブロックの位置と同じ位置におけるフレーム１のブロックの画素は、統計計算の入力として見なされ、計算結果に基づいて、フレーム１の全ての画素のＲチャネルおよびＢチャネルゲインが調整される。第２のＡＷＢ補償の詳細な計算は、どのアルゴリズムが用いられるかによって決まる。さらに、第２の露光パラメータＰａｒａ２を計算した（ステップＳ３３５）後、処理ユニット１１０は、算出された第２の露光パラメータＰａｒａ２により表される露光設定に基づき高露光フレーム（フレーム２と称する）を撮影して、それをフレームバッファー１３０に保存するようカメラモジュールコントローラ１７０に指示し、かつ第３のＡＷＢ補償を用い、フレーム０の第３のタイプのブロックの位置と同じ位置におけるフレーム２のブロックを入力とみなし、フレーム２の各ブロックを調整する（ステップＳ３３６）。ここで、フレーム０の第３のタイプのブロックは、第３のタイプ（例えば高露光）としてラベリングされたブロックである。本実施形態では、フレーム０の第３のタイプのブロックの位置と同じ位置におけるフレーム２のブロックの画素は統計計算の入力と見なされ、かつ計算結果に基づいて、フレーム２の全ての画素のＲチャネルおよびＢチャネルゲインが調整される。第３のＡＷＢ補償の詳細な計算は、どのアルゴリズムが用いられるかによって決まる。本実施形態において、第１、第２および第３のＡＷＤ補償は、それぞれフレーム０、１および２の全てのブロックに適用されるという点に留意されたい。なお、ＡＷＢの統計計算に採用されるブロック（つまり、第１、第２および第３のタイプとしてラベリングされたブロック）のみが、フレーム４を出力するための次の合成に採用される場合、ＡＷＢ補償は、これらのブロックだけに適用されてもよい。対応するＡＷＢ補償が全てのブロックに施されるので、境界を滑らかにすることができる。
【００３０】
本実施形態では、第１の露光パラメータＰａｒａ１の計算（ステップＳ３５３）および第２の露光パラメータＰａｒａ２の計算（ステップＳ３３５）の後、処理ユニット１１０はフレーム１をＨＤＲ空間に拡張する（ステップＳ３５７）。ステップＳ３５７において、フレーム１の第２の拡張因子を計算するのに用いられる例示的な疑似コードは次のとおりである。
【００３１】
curveMapValLow = curveTable_AVR[0] x Para1 + curveTable_AVR[1];
curveMapValHigh = curveTable_AVR[0] x Para2 + curveTable_AVR[1];
slope_Low = curveMapValHigh / curveMapValLow;
ここで、ｓｌｏｐｅ＿Ｌｏｗはフレーム１の第２の拡張因子を表し、ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［０］はカメラモジュール１９０のイメージセンサに関連する校正された傾きであり、ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［１］はカメラモジュール１９０のイメージセンサに関連する校正されたｙ切片であり、Ｐａｒａ１は式（１０）によりステップＳ３５３で算出された第１の露光パラメータを表し、Ｐａｒａ２は式（１１）によりステップＳ３３５で算出された第２の露光パラメータを表す。処理ユニット１１０は、フレーム１における各画素のＨＳＶ値に第２の拡張因子ｓｌｏｐｅ＿Ｌｏｗを乗じて、フレーム１をＨＤＲ空間に拡張する。
【００３２】
ステップＳ３５９において、拡張されたフレーム０、拡張されたフレーム１およびステップＳ３１１で得られたフレーム２が補償される。詳細には、処理ユニット１１０は、第１の露光補償法を用いて、拡張されたフレーム０の飽和画素および暗画素を補償する。詳細には、第1の露光補償法は、拡張されたフレーム０の暗画素（例えば輝度値が０から１２８ ｘ ｓｌｏｐｅ＿Ｎｏｒｍａｌのもの）を検出し、拡張されたフレーム０の検出された暗画素の輝度値を、同じ位置におけるフレーム２の輝度画素値に置き換える。第１の露光補償法はさらに、拡張されたフレーム０の飽和画素（例えば輝度値が３９６７ ｘ ｓｌｏｐｅ＿Ｎｏｒｍａｌから４０９５までのもの）を検出し、拡張されたフレーム０の検出された飽和画素の輝度値を、同じ位置におけるフレーム１の輝度画素値に置き換える。さらに、処理ユニット１１０は、第２の露光補償法を用い、拡張されたフレーム１の暗画素を補償する。詳細には、第２の露光補償法は、拡張されたフレーム１の暗画素（例えば輝度値が０から１２８ ｘ ｓｌｏｐｅ＿Ｌｏｗのもの）を検出し、拡張されたフレーム１の検出された暗画素の輝度値を、同じ位置におけるフレーム０の輝度画素値に置き換える。さらに、処理ユニット１１０は、第３の露光補償法を用い、フレーム２の飽和画素を補償する。詳細には、第３の露光補償法は、フレーム２の飽和画素（例えば輝度値が３９６７から４０９５までのもの）を検出し、フレーム２の検出された飽和画素の輝度値を、同じ位置におけるフレーム０の輝度画素値に置き換える。
【００３３】
フレーム０および１をＨＤＲ空間に拡張するための上記ステップＳ３３７およびＳ３５７、ならびにフレーム０、１および２の画素を補償するためのステップＳ３５９は、ＡＷＢ補償に必ずしも必要ではないという点に留意されたい。処理ユニット１１０は、ステップＳ３１９で計算されたフレーム０に含まれる各画素に対応する画素の重みに基づいて、補償されたフレーム０を補償されたフレーム１と合成させることによってフレーム３を生成し、フレームバッファー１５０にフレーム３を保存する（ステップＳ３７１）。詳細には、ステップＳ３７１において、フレーム０に含まれる画素に対応する画素の重みがしきい値（例えば６４）以下である場合、処理ユニット１１０は、フレーム０のこの画素のＨＳＶ値を、同じ位置における補償されたフレーム１のＨＳＶ値と合成させて、同じ位置におけるフレーム３のＨＳＶ値を生成する。フレーム０に含まれる画素に対応する画素の重みがしきい値よりも大きい場合、処理ユニット１１０は直接、フレーム０のこの画素のＨＳＶ値を、同じ位置におけるフレーム３のＨＳＶ値と見なす。補償されたフレーム０と補償されたフレーム１との画像合成のための例示的な疑似コードは次のとおりである。
【００３４】
if ((1 == frameNum) && (pixelweight[index1] <= 64)) { // when input frame is frame 1, reference frame is frame 0
weightRef = pixelweight[index1];
weightIn = 1.0 - weightRef;
outPixH = inputImg->HDRdata[index + 0] * weightIn + refImg->HDRdata[index + 0] * weightRef; // H channel fusion
dst->HDRdata[index] = outPixH;
outPixS = inputImg->HDRdata[index + 1] * weightIn + refImg->HDRdata[index + 1] * weightRef; // S channel fusion
dst ->HDRdata[index + 1] = outPixS;
outPixV = inputImg->HDRdata[index + 2] * weightIn + refImg->HDRdata[index + 2] * weightRef; // V channel fusion
dst ->HDRdata[index + 2] = outPixV; }
else if ((1 == frameNum) && (pixelweight[index1] > 64)) {
outPixH = refImg->HDRdata[index + 0]; // H channel from reference frame(frame 0)
dst ->HDRdata[index] = outPixH;
outPixS = refImg->HDRdata[index + 1]; // S channel from reference frame(frame 0)
dst ->HDRdata[index + 1] = outPixS;
outPixV = refImg->HDRdata[index + 2]; // V channel from reference frame(frame 0)
dst ->HDRdata[index + 2] = outPixV; }
ここで、ｐｉｘｅｌｗｅｉｇｈｔ［ｉｎｄｅｘ１］は（ｉｎｄｅｘ１）個目の画素の重みを表し、ｉｎｐｕｔＩｍｇは補償されたフレーム１を表し、ｒｅｆＩｍｇは補償されたフレーム０を表し、ｄｓｔはフレーム３を表す。
【００３５】
処理ユニット１１０は、ステップＳ３１９で算出されたフレーム０に含まれる各画素に対応する画素の重みに基づいて、フレーム３を補償されたフレーム２と合成させることによりフレーム４を生成し、フレームバッファー１５０にフレーム４を保存する（ステップＳ３７３）。フレーム４は最終的なＨＤＲフレームである。ステップＳ３７３において、詳細には、フレーム０に含まれる画素に対応する画素の重みがしきい値よりも大きい場合、処理ユニット１１０は、フレーム３のこの画素のＨＳＶ値を、同じ位置における補償されたフレーム２のＨＳＶ値と合成して、同じ位置におけるフレーム４のＨＳＶ値を生成する。フレーム０に含まれる画素に対応する画素の重みがしきい値よりも大きくない場合、処理ユニット１１０は直接、フレーム３のこの画素のＨＳＶ値を、同じ位置におけるフレーム４のＨＳＶ値と見なす。フレーム３と補償されたフレーム２との画像合成のための例示的な疑似コードは次の通りである。
【００３６】
if ((2 == frameNum) && (pixelweight[index1] > 1.0)) { //input frame is frame 2,ref frame is fusion result of frame 0, 1
weightIn = pixelweight[index1] - 1;
weightRef = 1.0 - weightIn;
outPixH = inputImg->HDRdata[index + 0] * weightIn + refImg->HDRdata[index + 0] * weightRef;
dst ->HDRdata[index] = outPixH;
outPixS = inputImg->HDRdata[index + 1] * weightIn + refImg->HDRdata[index + 1] * weightRef;
dst ->HDRdata[index + 1] = outPixS;
outPixV = inputImg->HDRdata[index + 2] * weightIn + refImg->HDRdata[index + 2] * weightRef;
dst ->HDRdata[index + 2] = outPixV; }
else {
outPixH = refImg->HDRdata[index + 0];
dst ->HDRdata[index] = outPixH;
outPixS = refImg->HDRdata[index + 1];
dst ->HDRdata[index + 1] = outPixS;
outPixV = refImg->HDRdata[index + 2];
dst ->HDRdata[index + 2] = outPixV; }
ここで、ｐｉｘｅｌｗｅｉｇｈｔ［ｉｎｄｅｘ１］は、（ｉｎｄｅｘ１）個目の画素の重みを表す。ｉｎｐｕｔＩｍｇは、補償されたフレーム２を表す。ｒｅｆＩｍｇは、フレーム３を表す。ｄｓｔは、フレーム４を表す。
【００３７】
図１には特定の構成要素を備えるように実施形態が示されているが、本発明の精神を逸脱することなく、より優れたパフォーマンスを達成するために追加の構成要素が含まれていてもよいという点に留意すべきである。また、図２および図３に示された処理の流れでは、特定の順序で実行されると理解される複数の工程を含んでいるが、これらのプロセスは、対応する各図に示す工程よりも多いまたは少ない工程を含んでいてもよく、それらは連続的に（ｓｅｒｉａｌｌｙ）、または例えば並列プロセッサまたはマルチスレッディング環境を利用し並行して（ｉｎ  ｐａｒａｌｌｅｌ）、実行可能なものである。
【００３８】
本発明を例により、好ましい実施形態の観点から説明したが、本発明はこれら開示された実施形態に限定されることはないと理解されるべきである。むしろ、当業者がなし得る種々の変更および類似の構成を含む。従って、添付の特許請求の範囲に記載の発明の範囲は、そのような全ての変更や類似の構成を包含するように最も広義に解釈されるべきである。
【００３９】
関連出願の相互参照
本出願は、２０１５年３月１７日に出願された中華人民共和国特許出願第２０１５１０１１７４５５．６号の利益を主張し、その全体が本明細書において援用される。
【符号の説明】
【００４０】
１１０…処理ユニット
１３０、１５０…フレームバッファー
１４０…揮発性メモリ
１７０…カメラモジュールコントローラ
１９０…カメラモジュール         
４１０…ベイヤーパターン
ビン０〜ビン１５…ビン
Ｖ７〜Ｖ９、Ｃ１〜Ｃ４…輝度値
Ｗｐ…画素の重み
ＷＵＬ…上左側のブロックの重み
ＷＵＲ…上右側のブロックの重み
ＷＬＬ…下左側のブロックの重み
ＷＬＲ…下左側のブロックの重み
Ｅ１、Ｅ２、Ｅ３、Ｅ４…縁辺
Ｄ１…画素Ｗｐから下縁辺までの距離
Ｄ２…画素Ｗｐから右縁辺までの距離
Ｄ３…画素Ｗｐから上縁辺までの距離
Ｄ４…画素Ｗｐから左縁辺までの距離
【図１】
0006352236.tif 000002
【図２】
0006352236.tif 000003
【図３】
0006352236.tif 000004
【図４】
0006352236.tif 000005
【図５】
0006352236.tif 000006
【図６】
0006352236.tif 000007
【図７】
0006352236.tif 000008