(57)【要約】【課題】マージングにかかる時間を短縮するために、ＨＤＲ（ハイダイナミックレンジ）画像の生成方法およびそれを用いる装置を提供する。【解決手段】処理ユニットにより実行されるＨＤＲ画像生成方法は、フレーム０を取得する工程と、少なくとも暗領域の第１の画素数および飽和領域の第２の画素数を含むフレーム統計情報を得る工程と、第１の画素数および第２の画素数に基づいて比を計算する工程と、比およびフレーム０の露光設定に基づいて第1の拡張因子および第２の拡張因子を計算する工程と、第１の拡張因子を用いてフレーム０をＨＤＲ空間に拡張する工程と、第２の拡張因子を用いてフレーム１をＨＤＲ空間に拡張する工程と、拡張されたフレーム０を拡張されたフレーム１と合成する工程と、を含む。【選択図】  図２
2016174350.tif 000002
【特許請求の範囲】
【請求項１】
処理ユニットにより実行されるハイダイナミックレンジ画像生成方法であって、
フレーム０を取得する工程と、
暗領域の第１の画素数および飽和領域の第２の画素数を含むフレーム統計情報を得る工程と、
前記第１の画素数および前記第２の画素数に基づいて比を計算する工程と、
前記計算された比および前記フレーム０の露光設定に基づいて第1の拡張因子および第２の拡張因子を計算する工程と、
前記第１の拡張因子を用いて前記フレーム０をＨＤＲ空間に拡張する工程と、
前記第２の拡張因子を用いてフレーム１を前記ＨＤＲ空間に拡張する工程と、
前記拡張されたフレーム０を前記拡張されたフレーム１と合成する工程と、
を含むハイダイナミックレンジ画像生成方法。
【請求項２】
前記比が次の式によって計算される請求項１に記載のハイダイナミックレンジ画像生成方法。
［数１］
ｓｈｉｆｔＲａｔｉｏ＝ｐｉｘｅｌＮｕｍＢｉｎ０／ｐｉｘｅｌＮｕｍＢｉｎ３
（式中、ｓｈｉｆｔＲａｔｉｏは前記比を表し、ｐｉｘｅｌＮｕｍＢｉｎ０は前記第１の画素数を表し、ｐｉｘｅｌＮｕｍＢｉｎ３は前記第２の画素数を表す。）
【請求項３】
前記計算された比および前記フレーム０の露光設定に基づいて第1の拡張因子および第２の拡張因子を計算する工程が、
前記計算された比および前記露光設定に基づいて第１の露光パラメータおよび第２の露光パラメータを計算する工程と、
前記第２の露光パラメータおよび前記露光設定を用いて前記第１の拡張因子を計算する工程と、
前記第１の露光パラメータおよび前記第２の露光パラメータを用いて前記第２の拡張因子を計算する工程と、
を含み、
前記第２の露光パラメータの前記第１の露光パラメータに対する前記比が固定拡張値である請求項１または２に記載のハイダイナミックレンジ画像生成方法。
【請求項４】
前記第１の露光パラメータが次の式により計算される請求項３に記載のハイダイナミックレンジ画像生成方法。
［数２］
ｅｘｐ＿ｔｉｍｅｓ＝ａ×ｓｈｉｆｔＲａｔｉｏ×ｓｈｉｆｔＲａｔｉｏ＋ｂ×ｓｈｉｆｔＲａｔｉｏ＋ｃ
［数３］
Ｐａｒａ１＝ｓｈｔ×ａｇ×ｄｇ×ｅｘｐ＿ｔｉｍｅｓ／ｅｘｐＶａｌｕｅ
（式中、Ｐａｒａ１は前記第１の露光パラメータを表し、ｓｈｉｆｔＲａｔｉｏは前記比を表し、ａ、ｂおよびｃは浮動小数点数であり、ｓｈｔ×ａｇ×ｄｇは前記フレーム０の前記露光設定を表し、ｅｘｐＶａｌｕｅは前記固定拡張値を表す。）
【請求項５】
前記第２の露光パラメータが次の式により計算される請求項３または４に記載のハイダイナミックレンジ画像生成方法。
［数４］
ｅｘｐ＿ｔｉｍｅｓ＝ａ×ｓｈｉｆｔＲａｔｉｏ×ｓｈｉｆｔＲａｔｉｏ＋ｂ×ｓｈｉｆｔＲａｔｉｏ＋ｃ
［数５］
Ｐａｒａ２＝ｓｈｔ×ａｇ×ｄｇ×ｅｘｐ＿ｔｉｍｅｓ
（式中、Ｐａｒａ２は前記第２の露光パラメータを表し、ｓｈｉｆｔＲａｔｉｏは前記比を表し、ａ、ｂおよびｃは浮動小数点数であり、ｓｈｔ×ａｇ×ｄｇは前記フレーム０の前記露光設定を表す。）
【請求項６】
前記第１の拡張因子が次の式により計算される請求項３から５のいずれか１項に記載のハイダイナミックレンジ画像生成方法。
［数６］
ｃｕｒｖｅＭａｐＶａｌＮｏｒｍａｌ＝ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［０］×  ｓｈｔ×ａｇ×ｄ＋ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［１］
［数７］
ｃｕｒｖｅＭａｐＶａｌＨｉｇｈ＝ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［０］×Ｐａｒａ２＋ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［１］
［数８］
ｓｌｏｐｅ＿Ｎｏｒｍａｌ＝ｃｕｒｖｅＭａｐＶａｌＨｉｇｈ／ｃｕｒｖｅＭａｐＶａｌＮｏｒｍａｌ
（式中、ｓｌｏｐｅ＿Ｎｏｒｍａｌは前記第１の拡張因子を表し、ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［０］はイメージセンサに関連する校正された傾きであり、ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［１］は前記イメージセンサに関連する校正されたｙ切片であり、ｓｈｔ×ａｇ×ｄｇは前記フレーム０の前記露光設定を表し、Ｐａｒａ２は前記第２の露光パラメータを表す。）
【請求項７】
前記第２の拡張因子が次の式により計算される請求項３から６のいずれか１項に記載のハイダイナミックレンジ画像生成方法。
［数９］
ｃｕｒｖｅＭａｐＶａｌＬｏｗ＝ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［０］×Ｐａｒａ１＋ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［１］
［数１０］
ｃｕｒｖｅＭａｐＶａｌＨｉｇｈ＝ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［０］×Ｐａｒａ２＋ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［１］
［数１１］
ｓｌｏｐｅ＿Ｌｏｗ＝ｃｕｒｖｅＭａｐＶａｌＨｉｇｈ／ｃｕｒｖｅＭａｐＶａｌＬｏｗ
（式中、ｓｌｏｐｅ＿Ｌｏｗは前記第２の拡張因子を表し、ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［０］はイメージセンサに関連する校正された傾き（ｃａｌｉｂｒａｔｅｄ  ｓｌｏｐｅ）であり、ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［１］は前記イメージセンサに関連する校正されたｙ切片であり、Ｐａｒａ１は前記第１の露光パラメータを表し、Ｐａｒａ２は前記第２の露光パラメータを表す。）
【請求項８】
前記第１の拡張因子を用いて前記フレーム０をＨＤＲ空間に拡張する前記工程が、前記フレーム０の各画素値に前記第１の拡張因子を乗じる工程を含み、
前記第２の拡張因子を用いてフレーム１を前記ＨＤＲ空間に拡張する前記工程が、前記フレーム１の各画素値に前記第２の拡張因子を乗じる工程を含む請求項１から７のいずれか１項に記載のハイダイナミックレンジ画像生成方法。
【請求項９】
前記フレーム０露光設定がノーマル露光設定であり、前記フレーム１が低露光フレームである請求項１から８のいずれか１項に記載のハイダイナミックレンジ画像生成方法。
【請求項１０】
高露光フレームであるフレーム２を取得する工程、および
前記フレーム２と前記拡張されたフレーム０および前記拡張されたフレーム１の合成結果とを合成する工程、
をさらに含む請求項１から９のいずれか１項に記載のハイダイナミックレンジ画像生成方法。
【請求項１１】
第１の露光補償法を用いて前記拡張されたフレーム０の飽和画素および暗画素を補償する工程と、
第２の露光補償法を用いて前記拡張されたフレーム１の暗画素を補償する工程と、
第３の露光補償法を用いて前記フレーム２の飽和画素を補償する工程と、
をさらに含む請求項１から１０のいずれか１項に記載のハイダイナミックレンジ画像生成方法。
【請求項１２】
前記第1の露光補償法は、前記拡張されたフレーム０の前記暗画素の輝度値を、同じ位置における前記フレーム２の輝度画素値に置き換え、かつ前記拡張されたフレーム０の前記飽和画素の輝度値を、同じ位置における前記フレーム１の輝度画素値に置き換えるものであり、前記第２の露光補償法は、前記拡張されたフレーム１の前記暗画素の輝度値を、同じ位置における前記拡張されたフレーム０の輝度画素値に置き換えるものであり、前記第３の露光補償法は、前記フレーム２の前記飽和画素の輝度値を、同じ位置における前記拡張されたフレーム０の前記輝度画素値に置き換えるものである請求項１１に記載のハイダイナミックレンジ画像生成方法。
【請求項１３】
前記フレーム０を複数のブロックに分割する工程と、
前記フレーム０の各ブロックのブロック統計情報を得る工程と、
前記ブロック統計情報に基づいて前記フレーム０の各ブロックのタイプを識別する工程と、
各ブロックの前記タイプに基づいてブロックの重みを設定する工程と、
前記ブロックの重みに基づいて前記フレーム０の各画素に対応する画素の重みを計算する工程と、
前記画素の重みに基づいて前記拡張されたフレーム０を前記拡張されたフレーム１と合成する工程と、
をさらに含む請求項１から１２のいずれか１項に記載のハイダイナミックレンジ画像生成方法。
【請求項１４】
前記画素の重みが次の式によって計算される請求項１３に記載のハイダイナミックレンジ画像生成方法。
［数１２］
Ｗｐ＝Ｄ１×Ｄ２×ＷＵＬ＋Ｄ１×Ｄ４×ＷＵＲ＋Ｄ３×Ｄ２×ＷＬＬ＋Ｄ３×Ｄ４×ＷＬＲ
（式中、Ｗｐは前記フレーム０の画素の前記画素の重みを表し、ＷＵＬは上左側のブロックに関するブロックの重みを表し、ＷＵＲは上右側のブロックに関するブロックの重みを表し、ＷＬＬは下左側のブロックに関するブロックの重みを表し、ＷＬＲは下右側のブロックに関するブロックの重みを表し、Ｄ１は前記画素から下縁辺までの距離を表し、Ｄ２は前記画素から右縁辺までの距離を表し、Ｄ３は前記画素から上縁辺までの距離を表し、Ｄ４は前記画素から左縁辺までの距離を表す。）
【請求項１５】
ハイダイナミックレンジ画像を生成するハイダイナミックレンジ画像生成装置であって、
カメラモジュールに接続されたカメラモジュールコントローラと、
前記カメラモジュールコントローラを介してフレーム０を取得し、暗領域の第１の画素数および飽和領域の第２の画素数を含むフレーム統計情報を得、前記第１の画素数および前記第２の画素数に基づいて比を計算し、前記計算された比および前記フレーム０の露光設定に基づいて第1の拡張因子（ｅｘｐａｎｓｉｏｎ ｆａｃｔｏｒ）および第２の拡張因子を計算し、前記第１の拡張因子を用いて前記フレーム０をＨＤＲ空間に拡張し、前記第２の拡張因子を用いてフレーム１を前記ＨＤＲ空間に拡張し、前記拡張されたフレーム０を前記拡張されたフレーム１と合成する処理ユニットと、
を含むハイダイナミックレンジ画像生成装置。
【請求項１６】
前記比が次の式によって計算される請求項１５に記載のハイダイナミックレンジ画像生成装置。
［数１３］
ｓｈｉｆｔＲａｔｉｏ  ｐｉｘｅｌＮｕｍＢｉｎ０／ｐｉｘｅｌＮｕｍＢｉｎ３
（式中、ｓｈｉｆｔＲａｔｉｏは前記比を表し、ｐｉｘｅｌＮｕｍＢｉｎ０は前記第１の画素数を表し、ｐｉｘｅｌＮｕｍＢｉｎ３は前記第２の画素数を表す。）
【請求項１７】
前記処理ユニットがさらに、前記比および前記露光設定に基づいて第１の露光パラメータおよび第２の露光パラメータを計算し、前記第２の露光パラメータおよび前記露光設定を用いて前記第１の拡張因子を計算し、前記第１の露光パラメータおよび前記第２の露光パラメータを用いて前記第２の拡張因子を計算し、このうち前記第２の露光パラメータの前記第１の露光パラメータに対する前記比が固定拡張値である請求項1５または１６に記載のハイダイナミックレンジ画像生成装置。
【請求項１８】
前記第１の露光パラメータが次の式により計算される請求項１７に記載のハイダイナミックレンジ画像生成装置。
［数１４］
ｅｘｐ＿ｔｉｍｅｓ＝ａ×ｓｈｉｆｔＲａｔｉｏ×ｓｈｉｆｔＲａｔｉｏ＋ｂ×ｓｈｉｆｔＲａｔｉｏ＋ｃ
［数１５］
Ｐａｒａ１＝ｓｈｔ×ａｇ×ｄｇ×ｅｘｐ＿ｔｉｍｅｓ／ｅｘｐＶａｌｕｅ
（式中、Ｐａｒａ１は前記第１の露光パラメータを表し、ｓｈｉｆｔＲａｔｉｏは前記比を表し、ａ、ｂおよびｃは浮動小数点数であり、ｓｈｔ×ａｇ×ｄｇは前記フレーム０の前記露光設定を表し、ｅｘｐＶａｌｕｅは前記固定拡張値を表す。）
【請求項１９】
前記第２の露光パラメータが次の式により計算される請求項１７または１８に記載のハイダイナミックレンジ画像生成装置。
［数１６］
ｅｘｐ＿ｔｉｍｅｓ＝ａ×ｓｈｉｆｔＲａｔｉｏ×ｓｈｉｆｔＲａｔｉｏ＋ｂ×ｓｈｉｆｔＲａｔｉｏ＋ｃ
［数１７］
Ｐａｒａ２＝ｓｈｔ×ａｇ×ｄｇ×ｅｘｐ＿ｔｉｍｅｓ
（式中、Ｐａｒａ２は前記第２の露光パラメータを表し、ｓｈｉｆｔＲａｔｉｏは前記比を表し、ａ、ｂおよびｃは浮動小数点数であり、ｓｈｔ×ａｇ×ｄｇは前記フレーム０の前記露光設定を表す。）
【請求項２０】
前記第１の拡張因子が次の式により計算される請求項１７から１９のいずれか１項に記載のハイダイナミックレンジ画像生成装置。
［数１８］
ｃｕｒｖｅＭａｐＶａｌＮｏｒｍａｌ＝ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［０］×ｓｈｔ×ａｇ×ｄｇ＋ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［１］
［数１９］
ｃｕｒｖｅＭａｐＶａｌＨｉｇｈ＝ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［０］×Ｐａｒａ２＋ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［１］
［数２０］
ｓｌｏｐｅ＿Ｎｏｒｍａｌ＝ｃｕｒｖｅＭａｐＶａｌＨｉｇｈ／ｃｕｒｖｅＭａｐＶａｌＮｏｒｍａｌ
（式中、ｓｌｏｐｅ＿Ｎｏｒｍａｌは前記第１の拡張因子を表し、ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［０］はイメージセンサに関連する校正された傾き（ｃａｌｉｂｒａｔｅｄ  ｓｌｏｐｅ）であり、ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［１］は前記イメージセンサに関連する校正されたｙ切片であり、ｓｈｔ×ａｇ×ｄｇは前記フレーム０の前記露光設定を表し、Ｐａｒａ２は前記第２の露光パラメータを表す。）
【請求項２１】
前記第２の拡張因子が次の式により計算される請求項１７から２０のいずれか１項に記載のハイダイナミックレンジ画像生成装置。
［数２１］
ｃｕｒｖｅＭａｐＶａｌＬｏｗ＝ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［０］×Ｐａｒａ１＋ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［１］
［数２２］
ｃｕｒｖｅＭａｐＶａｌＨｉｇｈ＝ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［０］×Ｐａｒａ２＋ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［１］
［数２３］
ｓｌｏｐｅ＿Ｌｏｗ＝ｃｕｒｖｅＭａｐＶａｌＨｉｇｈ／ｃｕｒｖｅＭａｐＶａｌＬｏｗ
（式中、ｓｌｏｐｅ＿Ｌｏｗは前記第２の拡張因子を表し、ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［０］はイメージセンサに関連する校正された傾き（ｃａｌｉｂｒａｔｅｄ  ｓｌｏｐｅ）であり、ｃｕｒｖｅＴａｂｌｅ＿ＡＶＲ［１］は前記イメージセンサに関連する校正されたｙ切片であり、Ｐａｒａ１は前記第１の露光パラメータを表し、Ｐａｒａ２は前記第２の露光パラメータを表す。）
【請求項２２】
前記処理ユニットが、前記フレーム０の各画素値に前記第１の拡張因子を乗じて前記フレーム０を前記ＨＤＲ空間に拡張し、かつ前記フレーム１の各画素値に前記第２の拡張因子を乗じて前記フレーム１を前記ＨＤＲ空間に拡張する請求項１５から２１のいずれか１項に記載のハイダイナミックレンジ画像生成装置。
【請求項２３】
前記フレーム０の前記第１の露光設定がノーマル露光設定であり、前記フレーム１が低露光フレームである請求項１５から２２のいずれか１項に記載のハイダイナミックレンジ画像生成装置。
【請求項２４】
前記処理ユニットがさらに、高露光フレームであるフレーム２を取得し、前記フレーム２と前記拡張されたフレーム０および前記拡張されたフレーム１の合成結果とを合成する請求項２３に記載のハイダイナミックレンジ画像生成装置。
【請求項２５】
前記処理ユニットがさらに、第１の露光補償法を用いて前記拡張されたフレーム０の飽和画素および暗画素を補償し、第２の露光補償法を用いて前記拡張されたフレーム１の暗画素を補償し、第３の露光補償法を用いて前記フレーム２の飽和画素を補償する請求項１５から２４のいずれか１項に記載のハイダイナミックレンジ画像生成装置。
【請求項２６】
前記第1の露光補償法は、前記拡張されたフレーム０の前記暗画素の輝度値を、同じ位置における前記フレーム２の輝度画素値に置き換え、かつ前記拡張されたフレーム０の前記飽和画素の輝度値を、同じ位置における前記フレーム１の輝度画素値に置き換えるものであり、前記第２の露光補償法は、前記拡張されたフレーム１の前記暗画素の輝度値を、同じ位置における前記拡張されたフレーム０の輝度画素値に置き換えるものであり、前記第３の露光補償法は、前記フレーム２の前記飽和画素の輝度値を、同じ位置における前記拡張されたフレーム０の前記輝度画素値に置き換えるものである請求項２５に記載のハイダイナミックレンジ画像生成装置。
【請求項２７】
前記処理ユニットがさらに、前記フレーム０を複数のブロックに分割し、前記フレーム０の各ブロックのブロック統計情報を得、前記ブロック統計情報に基づいて前記フレーム０の各ブロックのタイプを識別し、各ブロックの前記タイプに基づいてブロックの重みを設定し、前記ブロックの重みに基づいて前記フレーム０の各画素に関する画素の重みを計算し、前記画素の重みに基づいて前記拡張されたフレーム０を前記拡張されたフレーム１と合成する請求項１５から２６のいずれか１項に記載のハイダイナミックレンジ画像生成装置。
【請求項２８】
前記画素の重みが次の式によって計算される請求項２７に記載のハイダイナミックレンジ画像生成装置。
［数２４］
Ｗｐ＝Ｄ１×Ｄ２×ＷＵＬ＋Ｄ１×Ｄ４×ＷＵＲ＋Ｄ３×Ｄ２×ＷＬＬ＋Ｄ３×Ｄ４×ＷＬＲ
（式中、Ｗｐは前記フレーム０の画素の前記画素の重みを表し、ＷＵＬは上左側のブロックに関するブロックの重みを表し、ＷＵＲは上右側のブロックに関するブロックの重みを表し、ＷＬＬは下左側のブロックに関するブロックの重みを表し、ＷＬＲは下右側のブロックに関するブロックの重みを表し、Ｄ１は前記画素から下縁辺までの距離を表し、Ｄ２は前記画素から右縁辺までの距離を表し、Ｄ３は前記画素から上縁辺までの距離を表し、Ｄ４は前記画素から左縁辺までの距離を表す。）
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は画像処理に関し、より詳細には、ハイダイナミックレンジ画像生成方法およびハイダイナミックレンジ画像生成装置に関する。
【背景技術】
【０００２】
ＨＤＲ（ハイダイナミックレンジ）画像は、直射日光から仄かな星雲まで、実世界のシーンにおいてキャプチャした広いレンジの輝度レベルを表示することができる。ＨＤＲ画像は通常、同一の対象物に対し露光の異なる画像をキャプチャすると共にそれらを組み合わせることによって得られる。非ＨＤＲカメラでは、限られた露光レンジで写真を撮るため、飽和領域または暗領域において細部が失われてしまう。ＨＤＲＭ（ハイダイナミックレンジマージング）は、異なる露光レベルで複数の写真を撮影しそれらを合成することによりこの細部の損失を補償して、より広い階調範囲の写真表現を作り出す。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
しかしながら、ＨＤＲ画像の生成にはかなりの時間がかかる。本発明は、ＨＤＲ画像の生成にかかる時間を短縮することが可能なハイダイナミックレンジ画像生成方法およびハイダイナミックレンジ画像生成装置を提供する。
【課題を解決するための手段】
【０００４】
本発明に係るハイダイナミックレンジ画像生成方法は、処理ユニットにより実行されるハイダイナミックレンジ画像生成方法であって、フレーム０を取得する工程と、少なくとも暗領域の第１の画素数および飽和領域の第２の画素数を含むフレーム統計情報を得る工程と、第１の画素数および第２の画素数に基づいて比を計算する工程と、当該計算された比およびフレーム０の露光設定に基づいて第1の拡張因子および第２の拡張因子を計算する工程と、第１の拡張因子を用いてフレーム０をＨＤＲ空間に拡張する工程と、第２の拡張因子を用いてフレーム１をＨＤＲ空間に拡張する工程と、拡張されたフレーム０を拡張されたフレーム１と合成する工程と、を含む。
【０００５】
本発明に係るハイダイナミックレンジ画像生成装置は、ハイダイナミックレンジ画像を生成するハイダイナミックレンジ画像生成装置であって、カメラモジュールに接続されたカメラモジュールコントローラと、処理ユニットとを含む、該処理ユニットは、カメラモジュールコントローラを介してフレーム０を取得し、少なくとも暗領域の第１の画素数および飽和領域の第２の画素数を含むフレーム統計情報を得、第１の画素数および前記第２の画素数に基づいて比を計算し、当該計算された比およびフレーム０の露光設定に基づいて第1の拡張因子および第２の拡張因子を計算し、第１の拡張因子を用いてフレーム０をＨＤＲ空間に拡張し、第２の拡張因子を用いてフレーム１をＨＤＲ空間に拡張し、拡張されたフレーム０を拡張されたフレーム１と合成する。
【発明の効果】
【０００６】
本発明に係るハイダイナミックレンジ画像生成方法およびハイダイナミックレンジ画像生成装置は、フレーム０における暗領域および飽和領域の画素数の比と、ノーマル露光フレームの露光設定とを用いて拡張因子を計算してから、算出された拡張因子に基づいて、直接、異なる露光設定の下で撮影されたＬＤＲフレームの画素値をＨＤＲ空間にマッピングすることができる。そのため、多数のＬＣＲフレームを有するカメラレスポンス関数のオンライン計算に多大なハードウェアリソースを費やす必要が無い。よって、ＨＤＲ画像の生成にかかる時間を短縮することが可能になる。
【図面の簡単な説明】
【０００７】
【図１】本発明の一実施形態に係るコンピュータ装置の構成を示す概略図である。
【図２】本発明の一実施形態に係る、処理ユニットによって実行されるＨＤＲ画像生成の方法を説明するフローチャートである。
【図３】本発明の一実施形態に係る、処理ユニットによって実行されるＨＤＲ画像生成の方法を説明するフローチャートである。
【図４】本発明の一実施形態に係るブロックの輝度ヒストグラムの概略図である。
【図５】本発明の一実施形態に係るフレーム０の輝度ヒストグラムの概略図である。
【図６】本発明の一実施形態に係る４個の隣接するブロックを示す概略図である。
【発明を実施するための形態】
【０００８】
以下の記載は、本発明を実施するのに最良であると考えられる形態である。この記載は本発明の基本的な原理を説明する目的でなされたものであって、限定の意味で解されてはならない。本発明の範囲は、添付の特許請求の範囲を参照することにより決定されるべきである。
【０００９】
本発明の実施形態について、図面を参照しつつ説明するが、本発明は、以下の実施形態に限定されるものではなく、その範囲は、特許請求の範囲の記載に基づいて定められる。さらに、“含む（ｃｏｍｐｒｉｓｅｓ）”、“含んでいる（ｃｏｍｐｒｉｓｉｎｇ）”、“含む（ｉｎｃｌｕｄｅｓ）”および／または“含んでいる（ｉｎｃｌｕｄｉｎｇ）”といった用語は、本明細書で用いられるときに、記述した特徴（ｆｅａｔｕｒｅｓ）、整数、工程、動作、要素、および／またはコンポーネントの存在を明示するが、１つまたはそれ以上のその他の特徴、整数、工程、動作、要素、コンポーネント、および／またはこれらの群の存在または追加を排除するものではないということが理解されるであろう。
【００１０】
図１は、本発明の一実施形態に係るコンピュータ装置の構成を示す概略図である。本実施形態に係るコンピュータ装置は、デスクトップ型コンピュータ、ノートブック型コンピュータ、タブレットＰＣ（パーソナルコンピュータ）、携帯電話、デジタルカメラ、デジタルレコーダー、またはその他のデバイスよって実現可能であり、これらは少なくとも処理ユニット１１０を含む。処理ユニット１１０は、多種の方式、例えばマイクロコードまたはソフトウェア命令によりプログラムされて本明細書に記載の機能を実行する専用ハードウェアまたは汎用ハードウェア（例えば単一の処理機、並列計算が可能な複数の処理機もしくはグラフィック処理ユニット、またはその他）として実現され得る。処理ユニット１１０は、カメラモジュールコントローラ１７０を介し、複数のＬＤＲ（ローダイナミックレンジ）フレームをキャプチャすると共にフレームバッファー１３０にＬＤＲフレームを保存するようカメラモジュール１９０を制御することができる。カメラモジュール１９０は、赤、緑および青色の形式で画像を検出するためのイメージセンサ、例えばＣＭＯＳ（相補型金属酸化物半導体）またはＣＣＤ（電荷結合素子）センサと、イメージセンサから感知データ（ｓｅｎｓｅｄ  ｄａｔａ）を収集する読み出し電子回路と、を含み得る。処理ユニット１１０は、フレームバッファー１３０から少なくとも３つのＬＤＲフレームを得ることができる。本実施形態において、３つのＬＤＲフレームは１２ビットのフレームである。１つのＬＤＲフレームは、ノーマル露光でキャプチャされたフレームであって、例えば最適化された露光設定の下でＡＥ（自動露光）アルゴリズムによりキャプチャされたものであり、以下これをフレーム０と称する。フレーム０をキャプチャするのに用いる露光設定には、シャッタースピード、アナログゲインおよびデジタルゲインが含まれ、これらはフレームバッファー１３０または揮発性メモリ１４０に保存されるという点に留意すべきである。揮発性メモリ１４０、例えばＤＲＡＭ（ダイナミックランダムアクセスメモリ）は、ランタイム変数、データテーブルなどのような、実行において必要なデータを保存するために用いられる。別のＬＤＲフレームは、ノーマル露光よりも露光量が小さい低露光フレームであり、以下これをフレーム１と称する。また別のＬＤＲフレームは、ノーマル露光よりも露光量が大きい高露光フレームであり、以下これをフレーム２と称する。処理ユニット１１０は、ＨＤＲＭ（ハイダイナミックレンジマージング）アルゴリズムを用いてＨＤＲ（ハイダイナミックレンジ）フレームを生成することによりフレーム０から２を合成する（ｍｅｒｇｅｓ）と共に、生成されたＨＤＲフレームをフレームバッファー１５０に保存する。本実施形態では、出力ＨＤＲフレームは１８ビットのフレームである。
【００１１】
図２は、本発明の一実施形態に係る、処理ユニットによって実行されるＨＤＲ画像生成の方法を説明するフローチャートである。プロセスはフレーム０の取得から始まる（ステップＳ２００）。次いで、処理ユニット１１０がフレーム０のフレーム統計情報を得る（ステップＳ２０１）。ステップＳ２０１にて得られるフレーム統計情報は、フレーム０の暗領域における第１の画素の総数と、フレーム０の飽和領域における第２の画素の総数とを含む。処理ユニット１１０は、第１の画素の総数および第２の画素の総数に基づいて比を計算する（ステップＳ２０２）。次いで、処理ユニット１１０は、ステップＳ２０２にて計算された比およびフレーム０の露光設定に基づいて第１の拡張因子（ｅｘｐａｎｓｉｏｎ  ｆａｃｔｏｒ）および第２の拡張因子を計算する（ステップＳ２０３）。ステップＳ２０１からＳ２０３の詳細については後述する。処理ユニット１１０は、第１の拡張因子を用いてフレーム０をＨＤＲに拡張する（ステップＳ２０４）。次いで、処理ユニット１１０は、フレームバッファー１３０からフレーム１を取得し（ステップＳ２０５）、第２の拡張因子を用いてフレーム１をＨＤＲに拡張する（ステップＳ２０６）。本実施形態において、拡張ステップは、フレーム０／１の各画素値に、第１の拡張因子／第２の拡張因子を乗じるものである。最後に、処理ユニット１１０は、拡張されたフレーム０を拡張されたフレーム１と合成する（ステップＳ２０７）。本実施形態において、このときまでに、本発明の処理ユニット１１０は、ノーマル露光設定のフレーム０および低露光設定のフレーム１をＨＤＲに拡張し、かつ２つのフレームを合成する。
【００１２】
図３は、本発明の一実施形態に係る、処理ユニットによって実行されるＨＤＲ画像生成方法を説明するフローチャートである。プロセスは、フレームバッファー１３０からフレーム０を取得することから始まる（ステップＳ２１１）。次に、処理ユニット１１０は、フレーム０の各ブロックの統計情報を得る（ステップＳ２１３）。詳細には、フレーム０がｍ×ｎのブロックに分割され得る。各ブロックは、例えば３２×３２画素を含む。そして各画素の輝度値が計算される。各画素の輝度値は次の式（１）を用いて計算することができる。
【００１３】
［数１］
Ｖ＝０．３×Ｒ＋０．６×Ｇ＋０．１×Ｂ          （１）
式（１）において、Ｒは赤色値を表し、Ｇは緑色値を表し、Ｂは青色値を表し、Ｖは輝度値を表す。処理ユニット１１０は、各ブロックの平均輝度ＡｖｅＬｕｍおよび輝度ヒストグラムを計算する。図４は、本発明の一実施形態に係るブロックの輝度ヒストグラムの概略図である。本実施形態では、例として０から４０９５までの範囲の１２ビットの輝度値を挙げているが、本発明はこれに限定されることはない。ヒストグラムは、例えば１６個のビンに分割され、ビン８の最小輝度値Ｖ８は２０４７．５（＝４０９５／２）に設定される。ビン７の最小輝度値Ｖ７およびビン９のＶ９は次の式（２）および（３）を用いて計算することができる。
【００１４】
［数２］
Ｖ７＝４０９５×ｒ    （２）
［数３］
Ｖ９＝４０９５×（１−ｒ）                        （３）
式（２）および（３）において、ｒは０から０．５の間の任意の値であり得る。ｒが０．２５に設定されていると仮定すると、Ｖ７は１０２３．７５、Ｖ９は３０７１．２５である。０からＶ７までの輝度値は、７個のビン（Ｂｉｎ０〜Ｂｉｎ６）に均等に分割され、Ｖ９から４０９５までの輝度値は７個のビン（Ｂｉｎ９〜Ｂｉｎ１５）に分割される。８個目のビン（Ｂｉｎ７）の輝度値はＶ７からＶ８までであり、９個目のビン（Ｂｉｎ８）の輝度値はＶ８からＶ９までである。各ブロックについて、処理ユニット１１０は、その輝度値に基づいて各画素を対応するビンに分配すると共に、各ビンに画素がいくつ存在するかをカウントする。ヒストグラムを生成するための例示的な疑似コードは次の通りである。
【００１５】
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; }
ここで、ｐｉｘｅｌｗｅｉｇｈｔ［ｉｎｄｅｘ１］は、（ｉｎｄｅｘ１）個目の画素の重みを表す。ｉｎｐｕｔＩｍｇは、補償されたフレーム２を表す。ｒｅｆＩｍｇは、フレーム３を表す。ｄｓｔは、フレーム４を表す。
【００３４】
本発明に係るＨＤＲ画像の生成方法およびそれを用いる装置では、ノーマル露光フレーム（例えばフレーム０）における暗領域および飽和領域の画素数の比、ならびにノーマル露光フレームの露光設定を用い、拡張因子を計算してから、算出された拡張因子に基づいて、異なる露光設定の下で撮影されているＬＤＲフレームの画素値を直接、ＨＤＲ空間にマッピングする（ｍａｐ）ことができ、多数のＬＣＲフレームを有するカメラレスポンス関数をリアルタイムで計算するのに多大なハードウェアリソースを費やす必要が無い。よって、ＨＤＲ画像の生成にかかる時間を短縮することが可能になる。また、コストおよび電力消費を低減することが可能になる。
【００３５】
図１には特定の構成要素を備えるように実施形態が示されているが、本発明の精神を逸脱することなく、より優れたパフォーマンスを達成するために追加の構成要素が含まれていてもよいという点に留意すべきである。また、図２および図３に示された処理の流れでは、特定の順序で実行されると理解される複数の工程を含んでいるが、これらのプロセスは、対応する各図に示す工程よりも多いまたは少ない工程を含んでいてもよく、それらは連続的に（ｓｅｒｉａｌｌｙ）、または例えば並列プロセッサもしくはマルチスレッディング環境を利用し並行して（ｉｎ  ｐａｒａｌｌｅｌ）、実行可能なものである。
【００３６】
本発明を例により、好ましい実施形態の観点から説明したが、本発明はこれら開示された実施形態に限定されることはないと理解されるべきである。むしろ、本発明は、当業者がなし得る種々の変更および類似の構成を含む。従って、添付の特許請求の範囲に記載の発明の範囲は、そのような全ての変更や類似の構成を包含するように最も広義に解釈されるべきである。
【００３７】
関連出願の相互参照
本出願は、２０１５年３月１７日に出願された中華人民共和国特許出願第２０１５１０１１６１９０．８号の利益を主張し、その全体が本明細書において援用される。
【符号の説明】
【００３８】
１１０…処理ユニット
１３０、１５０…フレームバッファー
１４０…揮発性メモリ
１７０…カメラモジュールコントローラ
１９０…カメラモジュール         
４１０…ベイヤーパターン
ビン０〜ビン１５…ビン
Ｖ７〜Ｖ９、Ｃ１〜Ｃ４…輝度値
Ｗｐ…画素の重み
ＷＵＬ…上左側のブロックに対応するブロックの重み
ＷＵＲ…上右側のブロックに対応するブロックの重み
ＷＬＬ…下左側のブロックに対応するブロックの重み
ＷＬＲ…下右側のブロックに対応するブロックの重み
Ｅ１、Ｅ２、Ｅ３、Ｅ４…縁辺
Ｄ１…画素Ｗｐから下縁辺までの距離
Ｄ２…画素Ｗｐから右縁辺までの距離
Ｄ３…画素Ｗｐから上縁辺までの距離
Ｄ４…画素Ｗｐから左縁辺までの距離
【図１】
2016174350.tif 000003
【図２】
2016174350.tif 000004
【図３】
2016174350.tif 000005
【図４】
2016174350.tif 000006
【図５】
2016174350.tif 000007
【図６】
2016174350.tif 000008