以下、添付図面に従って本発明に係る実施の形態を詳細に説明する。
[第1の実施形態]
本実施形態における符号化方法は、HDR画像データに対してトーンマッピングというダイナミックレンジを圧縮する処理を行い、8ビットの低ダイナミックレンジのLDR画像データを生成し、JPEG符号化をする。そして、LDR画像データをHDR画像データに戻す上で必要となるHDR差分データを生成した後、HDR差分データを符号化する。最終的に出力する符号化データ(HDR画像符号化データ)は、LDR画像のJPEGデータとHDR差分データの符号化データ(HDR差分符号化データ)となる。HDR差分データの生成・符号化の方法はいくつかあるが、本実施形態においては、HDR差分データの生成・符号化方式として以下の方式について説明する。HDR画像データと、HDR画像データをトーンマッピングして生成したLDR画像データの輝度成分比(Yレシオ)を取る。Yレシオを使って、LDR画像データをHDRのレンジに戻して、オリジナルのHDR画像データとの色差成分の差分を生成する。そして、Yレシオと色差成分を8ビット化してJPEG符号化する方法である。以上の方法で生成・符号化されたHDR画像符号化データについて、本実施形態では、元の画像よりも低解像度でディスプレイ表示する場合において、HDR差分データを復号すべきか、復号する必要がないかの判断の方法を示す。
本実施形態に係る復号装置の説明の前に、本実施形態においてHDR画像の符号化について説明しておく。ここでは、符号化対象のHDR画像データは、RGBカラーデータとし、各コンポーネント(色)は16ビットの実数値として説明する。但し、RGB以外のコンポーネントの構成(例えばグレー)でも構わず、色空間の種類、コンポーネントの個数は問わない。また、1成分のビット数も16ビットに限らず、32ビットなど、16ビットを超えるビット数でもよい。また、実数値だけに限定されず、16ビットの整数値などでもよい。つまり、HDRのコントラスト比を表現できれば、入力画像の形式はどのようなものでもよい。
図12(a)はHDR画像の符号化装置のブロック構成図である。同図において、1201は入力部、1202は装置全体の制御を司るCPU、1203はLDR画像生成部、1204はHDR差分データ符号化部、1205はLDR画像符号化部、1206はバッファA、1207は符号列生成部、208は出力部である。同図(b)、画像符号化装置の処理フローを示したフローチャートである。以下、図12(a),(b)を用いて、本実施形態における符号化装置の処理を説明する。
入力部1201から符号化対象のHDR画像が入力されると(ステップS1301)、入力されたHDR画像はLDR画像生成部1203に供給されるとともに、HDR画像のコピーがバッファA1206へ格納される。LDR画像生成部1203は、HDR画像の入力を受けると、トーンマッピング処理により、LDR(Low Dynamic Range)画像を生成する(ステップS1302)。トーンマッピング処理とは、HDR画像を所定のダイナミックレンジに圧縮する処理のことであり、HDR画像を通常のディスプレイで表示する場合等では不可欠な処理である。トーンマッピングについては、様々な処理が提案されており、人間の視覚特性や表示デバイス特性を考慮した手法が主流となっている。本実施形態においては、トーンマッピングにより8ビットの整数値(0〜255)のLDR画像を生成するものとし、どのような手法を用いてもよい。生成されたLDR画像はLDR画像符号化部1205へ出力され、そのコピーがバッファA1206に格納される。また、LDR画像生成部1203は、LDR画像をHDRレンジの画像に戻すための逆トーンマッピング情報も、バッファA1206へ格納する。この情報は、RGB各色のコンポーネント値0〜255が、HDRレンジではどの値にマッピングされるかを示すものである。LDR画像符号化部1205は、LDR画像をJPEG符号化方式(ISO/IEC10918−1, ITU−T T.81)により圧縮する(ステップS1303)。JPEG符号化方式の圧縮方式については、公知技術であり、説明を割愛する。LDR画像のJPEG圧縮データは、符号列生成部1207へ出力される。
ステップS1303の処理が終了すると、復号時にLDR画像をHDR画像へ戻すために必要となるHDR差分データの符号化を行う(ステップS1304)。この処理はHDR差分データ符号化部1204が、バッファA1206に格納されているHDR画像データ、LDR画像データ、逆トーンマッピング情報に基づき実行する。HDR差分データは、入力のHDR画像と同じ水平、垂直の画素数で、コンポーネント数は3、各コンポーネントは8ビットの整数値(0〜255)を持つ。HDR差分データの具体的な符号化方法は後程説明することとする。符号列生成部1207は、LDR画像のJPEG圧縮データとHDR差分符号化データから、HDR画像の符号列(HDR画像符号化データ)を生成する(ステップS1305)。HDR画像符号化データの生成方法の概略は、LDR画像のJPEG圧縮データのヘッダ内に、通常のJPEGデコーダは読み飛ばす領域を設けて、その中にHDR差分符号化データと付随する情報(付随情報)を挿入する。このような構成にする理由は、従来のJPEGデコーダには、LDR画像の復号表示を可能とさせるためである。
図6(a)は、HDR画像符号化データの全体構成であり、SOIはJPEG圧縮データの先頭を示すマーカーである。ヘッダには、LDR画像の圧縮条件(量子化パラメータ、ハフマン符号化テーブル等)や画像の水平、垂直方向のサイズ、ビット深さなどの情報が格納される。さらに、ヘッダ内の「HDR差分データ符号化情報」の領域に、HDR差分符号化データと付随情報が格納される。圧縮データ列には、LDR画像の圧縮データが格納され、EOIはJPEG圧縮データの後尾であることを示すマーカーである。「HDR差分データ符号化情報」領域には、HDR差分符号化データと付随情報が個別に、APP11マーカーでくくられる領域(APP11のアプリケーションマーカーセグメント)へ格納される。JPEGの規格では、デコーダにとって不要なアプリケーションマーカーセグメントを読み飛ばすことが決められている。アプリケーションマーカーセグメントは、最大長が65535byteとされている。HDR差分符号化データは、この最大長を超える場合もある。そのようなときには、HDR差分符号化データを複数に分割して、それぞれを個別のアプリケーションマーカーセグメントへ格納する。つまり、アプリケーションマーカーセグメントは最低でも2つあり、HDR差分符号化データのサイズに応じて、3つ、4つと増えていく。図6(b)は、アプリケーションマーカーセグメントのシンタックスを示している。同図において、markerにはAPP11を示すマーカーコード0xFFEBを記す。lenにはアプリケーションマーカーセグメントのサイズが記される。CI(Common Identifier)には、固定的に”JP”のコードが記述される。TB(Type of Box)にはアプリケーションマーカーセグメントに格納されている情報の種別、つまり、HDR差分符号化データ/付随情報のいずれかを示すシグナルが格納される。“0”であれば付随情報、“1”であればHDR差分符号化データである。上述の通り、アプリケーションマーカーセグメントのサイズには上限があるので、HDR差分符号化データは複数に分割される可能性がある。このため、復号時には、分割されたデータを正しい順番に並べる必要があり、SN(Sequence Number)には、通し番号が記される。なお、TB=0の場合には、SN=0のみが記される。Payload Data(PD)には、HDR差分符号化データもしくは付随情報のデータ列が記される。付随情報は、HDR差分符号化データにおける輝度,色差に関する、圧縮前の最大値と最小値である。この最大値と最小値については、HDR差分の符号化方法の説明で触れる。なお、全てのAPP11アプリケーションマーカーセグメントは、ヘッダ中に連続して配置されるものとする。
さて、HDR差分符号化データの生成が終了すると、出力部1208から装置外部へ出力される(ステップS1306)。出力先は、ネットワーク、記憶媒体などで良く、その種類は問わない。
続いて、HDR差分データ符号化部1204の処理の説明に移る。図13はHDR差分データ符号化部1204を構成するブロック図である。同図において、1401は輝度成分比算出部、1402は対数変換部、1403はバッファB、1404は最大値/最小値導出部A、1405は整数化部A、1406はバッファD、1407は入力画像除算部である。さらに、1408はLDR相当画像/LDR画像差分算出部、1409は色変換部、1410はノーマライズ部、1411はバッファC、1412は最大値/最小値導出部B、1413は整数化部B、1414はバッファEである。まず、詳細な説明に入る前に、HDR差分データ符号化部1204の処理概要について述べる。処理が開始すると、HDR画像とLDR画像それぞれの輝度成分の比(Yレシオ)、つまりHDR輝度成分値/LDR輝度成分値を、画素毎に求める。そして、その輝度成分比を用いて、HDR画像のRGB各コンポーネントに対して除算を行い、疑似的にLDR相当のダイナミックレンジを持つ画像(以下、LDR相当画像という)を生成する。さらに、LDR画像とLDR相当画像の間で、各画素におけるRGB各コンポーネントの差分を求める。その差分データに対してYCbCr変換を行い、Cb差分、Cr差分を生成する。そして、YレシオとCb差分、Cr差分を、1枚の画像を構成するコンポーネントと見立てて、LDR画像符号化部1205へ出力する。
図14は、図13のHDR差分データ符号化部1204の処理を示すフローチャートである。以下、図13、図14を用いて、HDR差分データ符号化部1204の処理を説明する。処理が開始されると、輝度成分比算出部1401は、バッファA1206からHDR画像とLDR画像を取得する。そして、以下の式に従い、HDR画像の輝度成分Y_hdr、LDR画像の輝度成分Y_ldr、Yレシオ(Ratio)を算出する(ステップS1501)。
Y_hdr=0.299*R_hdr+0.587*G_hdr+0.114*B_hdr
Y_ldr=0.299*R_ldr+0.587*G_ldr+0.114*B_ldr
Ratio=Y_hdr/Y_ldr
算出されたYレシオは、バッファE1414へ出力される。対数変換部1402は、バッファE1414からYレシオを取得し、対数変換(底は2)する(ステップS1502)。Yレシオは、最終的にJPEG符号化されるため、8ビットの整数(0〜255)に表現される必要がある。Yレシオはダイナミックレンジが非常に広いので、対数変換をせずに8ビットの整数化を行うと、小さなYレシオの変化がつぶされてしまい、微妙な輝度変化が失われる。一方で、Yレシオの対数表現に対して8ビットの整数化を行うと、小さな輝度の変化を保てる。そのため、Yレシオを対数変換する。その理由は次のとおりである。対数軸で見たYレシオの変化(Δ)には、0近傍では緩やか、0から離れるに従い大きくなっていく特性がある。また、対数表現にすることでYレシオのダイナミックレンジは小さくなる。すなわち、対数表現を8ビット整数化することで、Δが緩やかに変化しているYレシオ軸上の範囲は、細かくサンプリングされる。結果として、小さな輝度変化を再現できる。一例を挙げる。画像全体で見て、Yレシオが1〜25500であったとした場合、そのまま8ビットの整数化を行ってしまうと、8ビット表現における1の変化は、Yレシオにおける100の変化に相当する。つまり、Yレシオは1, 100, 200, ..., 25500の値を取る。一方で、図7のとおり、Yレシオの対数値は0〜14.63821であり、8ビットの整数値に対応するYレシオの対数値とYレシオは、図7に示したとおりである。同図のとおり、Yレシオを対数で表現することで、8ビット整数値で見て0に近い値では、Yレシオを細かくサンプリングできており、対数変換を導入することで微妙な輝度変化を保てることがわかる。
各画素の対数変換されたYレシオ(LogYレシオ)は、バッファB1403へいったん格納されていく。画像全体のLogYレシオが揃うと、最大値/最小値導出部A1404において、LogYレシオの最大値と最小値(Max_LogYratio, Min_LogYratio)が算出される(ステップS1503)。算出されたMax_LogYratioとMin_LogYratioは、整数化部A1405へ出力される。整数化部A1405は、Max_LogYratioとMin_LogYratioを基に、バッファB1403に格納されているLogYレシオを8ビット化し(ステップS1503)、バッファD1406へ出力する。また、Max_LogYratioとMin_LogYratioは、復号時に8ビット整数を元のレンジの実数表現へ戻す際に使うので、符号列のヘッダに格納する必要がある。そのため、最大値/最小値導出部A1404は、バッファA1206へ、これら2つの値を出力する。
ここまでの処理が終わると、次に、復号側がLDR画像とYレシオからHDR画像を戻すのに必要なデータを生成する。具体的には、LDR画像とYレシオだけでは、輝度成分のみしか元に戻せないので、HDR画像の色差成分を戻すために必要となるデータを算出する。入力画像除算部1407はバッファA1206に格納されているHDR画像に対して、バッファE1414に格納されているYレシオで除算を行い、LDR相当画像を生成する(ステップS1505)。この除算は、入力HDR画像のRGB配列に対して行う。LDR相当画像/LDR画像差分算出部1408は、LDR相当画像とバッファA1206のLDR画像で、各画素のRGB値の差分を求める(ステップS1506)。色変換部1409は、ステップS1506で生成された差分に対して色変換を行い、色差差分を生成する(ステップS1507)。この色変換は以下のとおりである。
Cb_e=−0.1687*R_e − 0.3313*G_e + 0.5*B_e
Cr_e=0.5*R − 0.4187*G_e − 0.0813*B_e
上記式で、R_e,G_e,B_eはステップS1506にて算出された差分である。また、輝度成分のY_eを算出していない。これは、除算で用いたYレシオはRatio=Y_hdr/Y_ldrであり、除算結果のLDR相当画像の輝度成分はY_ldrとなっていて、差分値は0となるからである。数式で証明すると以下のとおりである。
Y_e=0.299*R_e+0.587*G_e+0.114*B_e
=0.299*(R_ldr’−R_ldr)+0.587*(G_ldr’−G_ldr)+0.114*(B_ldr’−B_ldr)
=0.299*R_ldr’+0.587*G_ldr’+0.114*B_ldr’−(0.299*R_ldr+0.587*G_ldr+0.114*B_ldr) =0.299*(R_hdr/Ratio)+0.587*(G_hdr/Ratio)+0.114*(B_hdr/Ratio)
−(0.299*R_ldr+0.587*G_ldr+0.114*B_ldr)
=Y_hdr/Ratio − Y_ldr = 0
ステップS1507の色変換が終了すると、ノーマライズ部1410によりCb_e,Cr_eをY_ldrでノーマライズし(ステップS1508)、バッファC1411へ出力する。
Cb_e = Cb_e / Y_ldr
Cr_e = Cr_e / Y_ldr
最大値/最小値導出部B1412は、バッファC1411に保存されているCb_e,Cr_eそれぞれの最大値(Max_Cb_e,Max_Cr_e)と最小値(Min_Cb_e,Min_Cr_e)を導出する(ステップS509)。算出された最大値,最小値は整数化部B1413へ出力する。整数化部B1413は、Max_Cb_e,Max_Cr_e, Min_Cb_e,Min_Cr_eを基に、バッファC1411に格納されているCb_e,Cr_eを8ビット化し(ステップS1510)、バッファD1406へ出力する。また、Max_Cb_e, Max_Cr_e, Min_Cb_e, Min_Cr_eは、復号時に8ビット整数を元のレンジの実数表現へ戻す際に使うので、符号列のヘッダに格納する必要がある。そのため、最大値/最小値導出部B1412は、バッファA1206へ、これら2つの値を出力する。
バッファD1406にLogYレシオとCb_e,Cr_eそれぞれの8ビット整数データが揃うと、これを1枚の画像(差分画像)と見立てて差分画像符号化を行う。本実施形態では、差分画像符号化はJPEG符号化であり、LDR画像符号化部1205へ出力する。LDR画像符号化部1205が生成したJPEG符号列を、HDR差分符号化データとして、符号列生成部1207へ出力する(ステップS1511)。
以上、実施形態における前提となる画像符号化装置の構成とその処理内容を説明した。続いて、実施形態における画像復号装置の説明を行う。図1は、本実施形態に係る画像復号装置のブロック構成図である。画像復号装置は、入力部101、CPU102、LDR画像復号部203、表示解像度取得部104、HDR差分復号判定部105、バッファ106、HDR差分解析部109、HDR差分復号部107、表示部108を有する。なお、図示において、100は信号線(バス)である。係る構成において、表示解像度に応じてHDR差分符号化データを復号するか否かを切り替える方法について、以下に説明を行う。
本実施形態における復号対象のHDR画像符号化データは、上記方法により符号化されたHDR差分符号化データを保持するHDR画像符号化データとする。ただし、本実施形態において入力の符号化データは、HDR画像を符号化したものであり、LDR画像データとHDR差分符号化データを個別に符号化し、別々に復号可能な形式で保持していればよく、その内容は上記説明の方法に限らない。
図2は、図1の画像復号装置の処理手順を示すフローチャートである。以下、図1、図2を用いて、本実施形態における復号装置の具体的な処理の流れを説明する。
入力部101からHDR画像符号化データが入力されると、そのHDR画像符号化データはバッファ106に一旦格納される(ステップS201)。LDR画像復号部は、バッファ106に格納されているHDR画像符号化データ中のLDR画像符号化データ(実施形態では、JPEG符号化データ)を復号して、LDR画像データを再生する(ステップS202)。復号して生成されたLDR画像データは、信号線100を介し、バッファ106へ格納される。ステップS202と同時に、表示解像度取得部104において、装置外部から入力された画像表示領域のピクセル数(表示解像度)を取得する(ステップS203)。HDR差分復号判定部105において、HDR差分符号化データを復号する必要があるか否かの判定を行う(ステップS204)。ここで「HDR差分を復号する必要のある画像」について、以下に定義する。
HDR差分として保持している情報は、高ダイナミックレンジを利用して、コントラストを再現するための情報である。つまり、LDRは1コンポーネントあたり256階調しか表現できないため、256階調では表現できない範囲のコントラストを表現することが目的である。例えば、写真中の他の領域に比べ非常に明るい部分や非常に暗い部分に対して、HDRであればコントラストが表現可能である。LDR画像では、非常に明るい部分は、白(RGBで255,255,255)で表現するしかなく、白飛びと呼ばれる現象が起こる。また、非常に暗い部分では、黒(RGBで0,0,0)で表現するしかなく、黒潰れと呼ばれる現象が起こる。この、白飛びや黒潰れの箇所について、HDR差分の情報が必要であると言える。以下に、白飛びや黒潰れが存在するか否かの判定方法について説明する。
図3は、HDR差分符号化データ復号判定(ステップS204)の具体的な処理の流れを示すフローチャートである。
LDR画像データ入力(ステップS301)は、バッファ106に格納されている復号済みのLDR画像データを、信号線100を介してHDR差分復号判定部105へ入力する。表示解像度取得部104により取得した表示画像領域のピクセル数が、入力されたLDR画像のピクセル数(画像解像度)よりも少ない場合には、LDR画像を出力解像度に解像度変換する(縮小画像生成)。これは、以下に説明する判定処理の時間を短縮するためであり、必ず解像度変換を行わなければならないというものではない。入力されたLDR画像について輝度成分Y_ldrを式(1)により算出する(ステップS302)。このとき、LDR画像のR,G,B値をR_ldr,G_ldr,B_ldrとする。
Y_ldr=0.299*R_ldr+0.587*G_ldr+0.114*B_ldr・・・(1)
LDR画像の輝度成分Y_ldrを画素毎に算出し、算出した輝度成分Y_ldrの値の出現頻度をカウントし、LDR画像に対するY_ldrのヒストグラムを生成する(ステップS303)。生成したヒストグラムから、極めて白に近い輝度値の出現頻度と極めて黒に近い輝度値の出現頻度を算出することで、白飛びや黒潰れ領域を判定する。たとえば、極めて白に近い輝度値(白を含む)を255〜240とし、極めて黒に近い輝度値(黒を含む)を0〜15(輝度値が15以下)とすると、Y_ldrが0〜15、240〜255の出現頻度の和(Tpix)を算出する(ステップS304)。一般的には、白飛びや黒潰れと言うと、前述したように、階調が表現できる範囲を超えてしまい、255や0の値になっている現象を表す。しかしながら、本実施形態において処理対象とするLDR画像データは、HDR画像データからトーンマッピングを行って生成した画像であり、ある程度明るい個所や暗い箇所の階調を再現している画像であると言える。そのため、本実施形態において白飛び又は黒潰れ領域と呼ぶ領域については、極めて白に近い領域または、極めて黒に近い領域のことを表現するものとする。続いて、画像表示領域のピクセル数Dpixと、出現頻度の和Tpixを比較する(ステップS305)。画像表示領域のピクセル数Dpixに対して、Tpixがある程度多ければ(Yes)、白飛びや黒潰れ領域が画像に対して広範囲に存在すると判断でき、HDR差分を復号する必要がある(ステップS306)といえる。一方、Tpixが画像表示領域のピクセル数に対して少なければ(No)、白飛びや黒潰れ領域がないか、もしくは小さな領域のため、HDR差分は復号する必要がない(ステップS307)と判断できる。本実施形態では、例えば、Tpixが、Dpix×1/2以下(Tpixが全体の50%以下)の場合には、HDR差分符号化データを復号しない。一方、Dpix×1/2よりも、Tpixが大きければHDR差分符号化データを復号し、HDR画像を出力するものとする。具体的には、画像表示領域のピクセル数Dpixが256×256で図4のような頻度分布を持つ画像の場合について、以下に説明する。図4の輝度成分Y_ldr0〜15の出現頻度の和が35,000ピクセル、240〜255の出現頻度の和が5,000ピクセルである。この場合、Tpixは40,000となり、Dpix×1/2=32,768と比較して大きな値となるため、HDR画像を復号する必要があると判定される。
ここで、白飛びや黒潰れ領域として判定するLDR画像の輝度成分の範囲や、画像表示領域のピクセル数に対する比率に関しては、この値に限るものではない。画像表示領域のピクセル数によって、白飛びや黒潰れ領域の表示される面積が変わってくるため、HDR差分を復号するか否かの判定に用いる閾値は画像表示領域のピクセル数に応じて変更すべきである。たとえば、画像表示領域のピクセル数が256×256のときに閾値を画像表示領域のピクセル数の1/2にした場合、画像表示領域のピクセル数が512×512のときには、表示面積としては4倍になるため、閾値を画像表示領域のピクセル数の1/8とする。逆に、画像表示領域のピクセル数が128×128のときには、表示面積としては1/4となるため、閾値を設けず必ずHDR差分は復号する必要がないと判定しても構わない。つまり、画像表示領域のサイズに応じて、HDR差分符号化データの復号する/しないのための閾値を可変にしても構わない。この場合には、例えば、画像表示領域のサイズに従って上記の1/2や1/8などの乗算係数を算出する関数やテーブルを設ければよい。
以上の方法により、HDR差分を復号する必要があると判定された場合(YES)は、HDR差分解析部109により、HDR差分符号化データの解析を行う(ステップS206)。HDR差分符号化データの解析後、HDR画像復号部107により、HDR差分符号化データを復号する(ステップS207)。そして、復号したHDR差分データとすでに復号済みのLDR画像データからHDR画像データを生成し(ステップS208)、表示部108によりHDR画像データを表示する(ステップS209)。一方、HDR差分を復号する必要がないと判定された場合(NO)には、LDR画像復号部103により復号済みのLDR画像データを表示部108により表示する(ステップS210)。
次に、HDR差分解析部109の処理について説明する。HDR差分解析部109は、信号線100を介し、バッファ106に格納されているHDR画像符号化データが入力される。入力されたHDR画像符号化データ中のHDR差分符号化データの解析を行う。具体的には、図6(b)に示したアプリケーションマーカセグメントを解析する。この処理フローは図18に示した通りである。すなわち、ステップS2001で、変数の初期化を行う。具体的には、HDR差分符号化データの分割数を示す変数num_part_codeをゼロにセットする処理である。次に1バイト取得し変数X1へ代入し(ステップ2002)、さらに1バイト取得してX2へ代入する(ステップ2003)。X1,X2は、復号装置内部において定義される変数である。X1とX2を連結して得られるコード(code(X1+X2))が”0xFFEB”であるかを確認する(ステップ2004)。ただし、説明を簡単にするため、マーカコード以外に”0xFFEB”が存在しないものとする。図18のフローでは”0xFFEB”以外のマーカコードの検出について明記していないが、他のマーカコードの検出も行い、検出されたマーカセグメント内の”0xFFEB”はマーカコードとして検出しなければよい。ステップS2004での判定の結果、code(X1+X2)が”0xFFEB”でなければ(No)、処理をステップS2017へ移し、num_part_code>0であるか否かの判定を行う。num_part_code>0でない場合(No)、X1へX2を代入し(ステップS2005)、処理をS2003へ戻す。num_part_code>0である場合(Yes)には、既にAPP11マーカセグメントの解析は終了していると判断できるため、HDR差分解析部109の処理を終える。一方で、code(X1+X2)が”0xFFEB”であれば、lenを取得し(ステップS2006)、CIを取得する(ステップS2007)。取得したCIが“JP”でない場合(ステップS2008でNo)、num_part_code>0が成り立つか判定する(ステップS2017)。num_part_code=0の場合(No)は、ポインタを解析中のアプリケーションマーカーセグメントの最後尾へ移動させ(ステップS2009)、処理をステップS2002へ戻す。既にnum_part_codeがインクリメントされている状態(Yes)であれば、処理を終了する。図6(b)に示しているとおり、marker,len,CIの格納領域サイズはそれぞれ2バイトであるので、最後尾はlen−6バイト先である。一方で、CIが“JP”である場合(ステップS2008でYes)、解析中のアプリケーションマーカーセグメントは、本実施形態で処理すべきもの(APP11JPセグメント)であるとわかる。CIの次にはTBがあるためTBを取得する(ステップS2010)。TB=0である場合(ステップS2011でYes)、PDには付属情報が格納されており、SNを読み飛ばすためにポインタを2バイト移動させ(ステップS2012)、PDを解析する。(ステップS2013)。PDサイズは、解析中のAPP11JPセグメントの先頭からのオフセットとlenから確認できる。符号化方法の説明で示したとおり、PDには輝度,色差に関する、JPEG符号化前の最大値と最小値が格納されている。ステップS2011でTB=1の場合、PDにはHDR差分符号化データが格納されており、SNを取得し(ステップS2014)、PDの先頭位置(ポインタ)を取得する(ステップS2015)。その上で、図5に示したとおり、SNと各PDの先頭ポインタとサイズがセットで記憶される。その後、num_part_codeはインクリメントされ、S2016に処理を進める。S2016では、ポインタを解析中のマーカセグメントの終端に移動し、処理をステップS2002へ戻す。ステップS2002〜ステップS2017の処理を最後のAPP11JPセグメントまで繰り返し行う。ステップS2017においてnum_part_code>0の場合(Yes)には全てのAPP11JPセグメントの解析を終了しているため、HDR差分解析部109の処理を終える。
上記HDR差分符号化データの解析結果は、信号線100を介し、バッファ106へ格納される。続いて、HDR差分復号部107の処理について説明する。
図10はHDR差分復号部107を構成するブロック図である。同図において、1001は入力部、1002はJPEG復号部、1003は色差成分実数化部、1004は逆色変換部、1005はバッファG、1006はLogYレシオ実数化部である。さらに、1007は指数変換部、1008はRGB差分加算部、1009はYレシオ乗算部、1010は出力部、1011は逆ノーマライズ部である。図11は、図10のHDR差分復号部107の処理フローを示したフローチャートである。以下、図10、図11を用いて、HDR差分復号部107の処理を説明する。
まず、バッファ106へ格納されているHDR差分符号化データの解析結果から、HDR差分符号化データの輝度,色差に関する、圧縮前の最大値と最小値を取得する。つまり、Max_Cb_e,Max_Cr_e, Min_Cb_e,Min_Cr_e, Max_LogYratio, Min_LogYratioを取得する。さらに、HDR差分符号化データであるJPEG符号列も取得する(ステップS1101)。取得されたデータは、バッファG1005へ格納される。JPEG復号部1002は、バッファG1005内のHDR差分符号化データを復号し、バッファG1005へ保存する(ステップS1102)。復号データは、LogYレシオとCb_e,Cr_eから構成される画像データである。HDR差分符号化の説明で示したとおり、LogYレシオの指数値(Yレシオ)をLDR画像データに乗算することで、HDR画像データの輝度成分を復元できる。つまり、LogYレシオはLDR画像データから、HDR画像データの輝度成分を戻すために必要な値である。しかし、LDR画像データはそもそも、HDR画像データのトーンマッピング処理で得られた画像であり、YレシオをLDR画像データに乗算しても、色差成分を復元できない。Cb_e,Cr_eは、この乗算で色差成分を復元できるようにするための補正値である。色差成分実数化部1003は、Cb_e,Cr_eの8ビット整数値をMax_Cb_e,Max_Cr_e, Min_Cb_e,Min_Cr_eを用いて、実数化させる(ステップS1103)。具体的には、復号後のCb_e/Cr_eの0〜255の各値を、Min_Cb_e〜Max_Cb_e/ Min_Cr_e〜Max_Cr_eへマッピングさせる処理である。次いで、逆ノーマライズ部1011において、以下の処理を行う(ステップS1104)。
Cb_e = Cb_e * Y_ldr
Cr_e = Cr_e * Y_ldr
ただし、Y_ldrは、バッファG1005に格納してあるLDR画像の輝度成分であり、LDR画像のR,G,B値をR_ldr,G_ldr,B_ldrとしたとき、以下のとおり算出される。
Y_ldr=0.299*R_ldr+0.587*G_ldr+0.114*B_ldr
次に、逆色変換部1004においてCb_e,Cr_eを逆色変換される(ステップS1105)。具体的には、逆色変換により生成されるR,G,B値をR_e,G_e,B_eとしたとき、以下の変換を行う。
R_e = 1.402*Cr
G_e = −0.34414*Cb − 0.71414*Cr
B_e = 1.772*Cb
上記の逆色変換の結果はRGB差分加算部1008に出力される。
RGB差分加算部1008は、R_e,G_e,B_eをLDR画像の各画素のRGB値に加算し(ステップS1106)、Yレシオ乗算部1009へ出力する。続いて、復号処理は、色差成分から輝度成分へ移る。LogYレシオ実数化部1006において、LogYレシオの実数化が行われる(ステップS1107)。この処理は、色差成分実数化部1003と同様な処理であり、Max_LogYratio,Min_LogYratioを用いて、8ビット整数値のLogYレシオを実数へ変換する。得られた実数値は、指数変換部1007において、指数変換(2^LogYレシオ)され(ステップS1108)、Yレシオ乗算部1009へ出力される。Yレシオ乗算部1009は、RGB値を補正したLDR画像データに対してYレシオを乗算して(ステップS1109)、HDR画像データを得る。出力部1010は、前述のとおり復号・構成したHDR画像データを出力する(ステップS1110)。
出力したHDR画像データは、表示部108において、表示デバイスによって表示される。このとき、表示解像度取得部104で取得した出力解像度が、画像データの解像度と異なる場合には、解像度変換を行ったうえで表示される。表示部108の具体的な処理の流れについて図19により以下に説明を行う。同図において、楕円は画像の状態を表し、四角は処理を表すものとする。また、同図の点線内は符号化処理での画像の状態と処理を表すものとする。まず、表示デバイスがLDR(8bit表示)の場合について図19(a),(b)を用いて説明する。HDR画像をLDR表示する場合には、必ずトーンマッピングの処理を行うことになる。本実施形態における、LDR画像を表示する場合の処理を図19(a)に示し、HDR画像を表示する場合の処理を図19(b)に示す。符号化処理時には、HDR画像データが入力され、HDR画像のトーンマッピングTM1が行われる(同図、点線内)。図19(a)の例では、LDR画像を表示するため、符号化時にTM1により生成されたLDR画像データを表示することになる。図19(b)の例では、HDR画像を表示するため、復号して得たLDR画像データとHDR差分データを用いて逆TM1によりHDR画像を得る。再生されたHDR画像に対して、TM2によってLDRのサムネイル画像を生成し、表示する。ここで、トーンマッピングTM2の手法に関しては、出力デバイスに依存した手法を用いるものとする。図19(b)に示すように、HDR画像を再生する場合とは、LDR画像に白飛びや黒潰れ領域のようにHDR差分が必要な領域が存在する場合である。そのため、表示デバイスがLDRであっても、HDR画像を表示デバイスに依存したトーンマッピング処理を行って表示する方が良いと言える。 次に、表示デバイスがHDR(9bit以上)の場合について説明する。本実施形態における、LDR画像を表示する場合は、表示デバイスがLDRの場合と同様の処理であり、図19(a)に示す。HDR画像を表示する場合の処理は図19(c)に示す。図19(a)については先に説明しているため、ここでは図19(c)について説明する。表示デバイスがHDRであり、HDR画像を表示する場合には、復号したHDR画像データを表示する。この場合、HDR(9bit以上)でコントラストを再現できるため、図19(a)のようにLDR画像を縮小したサムネイルを表示するのと比較して、高画質であることは明らかである。
なお、等倍表示やサムネイル表示を行う際に、LDR画像のJPEGファイル中にサムネイルを保持している場合には、まず保持しているサムネイルを表示させておいてもよい。その場合、HDR差分を復号後に、表示しておいたJPEGファイル中のサムネイルと、復号したHDR画像データの置き換えを行えばよい。また、HDR差分を復号すると判定された画像の場合、表示の際、LDR画像を表示するよりも表示に時間がかかる。そのため、まずLDR画像を表示しておき、HDR画像が表示されるまでの間、待機中であることがわかるようなマークを表示中の画像付近に表示しておく。HDR差分が復号され、HDR画像データ生成が完了した時点で、LDR画像をHDR画像に置き換え、待機中のマークも非表示にする。この処理により、表示中の画像がさらに高画質になることが明確になる。
以上、説明したように本実施形態によれば、画像中のHDR差分が必要と判定された領域の比率に応じて、HDR差分データの復号要否を切り替えることが可能である。どの画像に対してもHDR差分を復号する場合には、8bit画像データのJPEG符号化データを2枚分復号するのと同じだけ復号処理時間がかかることになる。本実施形態によれば、LDR画像でコントラストが再現できていない、白飛びや黒潰れ領域が検出された場合にのみHDR差分を復号するため、復号処理時間を短縮することが可能となる。
<変形例の説明>
上記実施形態では図1の構成に基づいて説明したが、上記実施形態と同等の処理をパーソナルコンピュータ(PC)等で実行するコンピュータプログラム(ソフトウェア)でもって実現させても構わない。
図20はソフトウェアで実現する場合の装置(PC等)の基本構成を示す図である。
図中、2201はCPUで、RAM2202やROM2203に記憶されているプログラムやデータを用いて本装置全体の制御を行うと共に、後述する画像符号化処理、復号処理を実行する。2202はRAMで、外部記憶装置2207や記憶媒体ドライブ2208、若しくはI/F2209を介して外部装置からダウンロードされたプログラムやデータを記憶するため、及び、CPU2201が各種の処理を実行する際のワークエリアとして使用される。図1に示されるバッファ106等も、このRAM2202に確保されるものである。2203はROMで、ブートプログラムや本装置の設定プログラムやデータを格納する。2204、2205は夫々キーボード、マウス等のポインティングデバイスで、CPU2201に対して各種の指示を入力することができる。2206は表示装置で、CRTや液晶画面などにより構成されており、画像や文字などの情報を表示することができる。2207は外部記憶装置で、ハードディスクドライブ装置等の大容量情報記憶装置である。ここにOSや後述する画像符号化、復号処理の為のプログラム、符号化対象の画像データ、復号対象画像の符号化データなどが保存されており、CPU2201による制御によって、これらのプログラムやデータはRAM2202上の所定のエリアにロードされる。2208は記憶媒体ドライブで、CD−ROMやDVD−ROMなどの記憶媒体に記録されたプログラムやデータを読み出してRAM2202や外部記憶装置2207に出力するものである。なお、この記憶媒体に画像復号処理の為のプログラム、復号対象の画像の符号化データなどを記録しておいても良い。その場合、記憶媒体ドライブ2208は、CPU2201による制御によって、これらのプログラムやデータをRAM2202上の所定のエリアにロードする。2209はI/Fで、このI/F2209によって外部装置を本装置に接続し、本装置と外部装置との間でデータ通信を可能にするものである。例えは符号化対象の画像データや、復号対象の画像の符号化データなどを本装置のRAM2202や外部記憶装置2207、あるいは記憶媒体ドライブ2208に入力することもできる。2210は上述の各部を繋ぐバスである。
上記構成において、ソフトウェアでもって第1の実施形態と同様の処理を実現する場合、CPUは図1に示した各処理部に相当する機能を、ソフトウェア上の関数、サブルーチン等で実現することになる。各処理部の処理内容については既に説明した図2に示す手順に従えば良い。
[第2の実施形態]
上記第1の実施形態では、表示領域のピクセル数が復号画像データのピクセル数と同じであっても、異なっている場合であっても、HDR差分の復号要否の判定を行う方法について説明を行った。本第2の実施形態では、画像表示領域のピクセル数が復号画像データと同じピクセル数(等倍表示)である場合と、等倍以外(縮小又は拡大表示)の場合でHDR差分の復号要否の判定を行うか否かを切り替える方法について説明する。
たとえば、等倍表示の場合には必ずHDR画像を表示し、縮小画像の場合には、HDR表現が必要な領域の表示面積が狭くなるため、HDR差分の復号要否を判定する。この場合の例について、以下に説明を行う。
本第2の実施形態に係る、HDR差分復号判定部103の処理流れを示すフローチャートを図23に示す。第1の実施形態と同じ処理については同じ番号を付し、詳細な説明は省略する。第1の実施形態と異なる点は、表示解像度の取得(ステップS203)後、復号画像データの解像度と表示解像度の比較を行う(ステップS2501)点である。復号画像データの解像度と比較して、表示解像度の方が低い場合(YES)には、HDR差分符号化データの復号判定(ステップS204)へ処理を移す。つまり、復号した画像データの画素数が、画像表示領域の画素数以下の場合にHDR差分符号化データの復号判定を行う。一方、表示解像度が復号画像データと同じか、もしくは高い場合(NO)には、HDR差分符号化データの解析(ステップS206)へ処理を移し、HDR差分符号化データの復号処理を行う。このように、表示解像度の判定部を設けることで、解像度によって、復号要否の判定を行うか否かを切り替えることが可能となる。
なお、上記フローチャートでは、縮小表示の場合にのみHDR復号要否の判定を行い、それ以外の場合には、必ずHDR差分の復号を行う方法について説明したが、HDR差分の復号を行う基準を変更しても構わない。例えば、HDR符号化データ中のLDR画像データは、符号化の際に、HDR画像からトーンマッピングして生成された画像のため、等倍表示で表示する際には、LDR表示で構わないという考え方もある。そのため、等倍表示の際はHDR差分を復号する必要はなく、どんな画像でもLDR画像を表示するとしてもよい。また、サムネイルなどのかなり縮小倍率の高い場合には、表示サイズが小さいこと、表示にかかる処理時間を短くしたいことから、HDR差分を復号せず、どんな画像でもLDR画像を表示するとしてもよい。この考え方では、等倍や拡大表示の場合には、表示サイズが大きく、表示にかかる時間もある程度かかって良いと考えられるため、HDR差分の復号要否を判定する。他の例として、縮小表示の場合にはLDR画像を表示し、それ以外の場合にはHDR差分データを復号し、HDR画像を表示すると決めてしまってもよい。こうすることで、縮小表示の場合の処理時間が短縮でき、さらに画像データを解析してHDR復号要否を判定する必要がなくなる。このように、復号画像データのピクセル数と、画像表示領域のピクセル数の大小関係によってHDR差分の復号要否を切り替えることで、ユーザにとって適切な画像データ表示をしつつ、復号処理の時間短縮が可能となる。
[第3の実施形態]
第1の実施形態では、白飛びや黒潰れ領域の比率に基づいてHDR差分データを復号するか否かの判定を行った。本第3の実施形態では、白飛びや黒潰れ領域の面積に応じてHDR差分を復号するか否かを判定する方法について説明を行う。
図8は、本実施形態における、HDR差分復号判定部105の具体的な処理の流れについて示したフローチャートである。図3に示した第1の実施形態と同じ処理については、同じ番号を付し、その詳細な説明については省略する。第1の実施形態と異なる点についてのみ、以下に説明を行う。
まず、入力されたLDR画像データの各画素について、輝度成分Y_ldrを算出する。続いて算出したY_ldrが極めて白に近い値(白を含む)であるか、または、極めて黒に近い値(黒を含む)であるかの判定を行う(ステップS802)。本実施形態においても、輝度成分が第1の閾値以上(実施形態では第1の閾値=240)の255〜240の輝度成分値を極めて白い値(極白)とし、輝度成分が第2の閾値以下(第2の閾値=15)の輝度成分0〜15の値を極めて黒い値(極黒)とする。着目画素nの輝度成分が極白または極黒と判定された場合(Yes)には、白飛び黒潰れ領域の画素であることを示すため、Hflag(n)を1とする(ステップS803)。このときnは着目画素の位置を示す。nは画素数のカウンタであり、nの最大値は入力された画像データの「総画素数−1」である。着目画素Xに対するフラグHflag(n)を設定後、着目画素が画像データの最終画素であるか否かの判定を行う(ステップS805)。着目画素が最終画素でなければ(No)、S806にてnを1だけ増加し、処理をS302へ戻し、ステップS802からステップS805の処理を繰り返す。一方、着目画素が最終画素である場合(Yes)には、ステップS807へ処理を移す。ステップS807は、Hflag(n)を参照して、白飛びエリアまたは黒潰れエリアを検出する(ステップS807)。検出の方法は、画像の左上画素からラスタースキャン順に捜査し、注目画素位置の上下左右にHflag=1が存在する場合には、同じエリアHarea(m)として連結する。たとえば、図9(a)に示すようなHflagの分布の場合、画像上部のHflag=1の連続する領域をHarea(0)とする。Harea(0)には、このエリアを構成する画素数72を入力する。また、図9(a)の画像下部のHflag=1の連続する領域はHarea(1)と設定される。この領域を構成する画素数は180なので、Harea(1)=180である。
続いて、検出された各エリアHarea(m)について、入力画像データの画素数Dpixと比較を行う。ステップS808では、Harea(0)から順に比較を行うため、m=0に初期化を行う。ステップS809において、Dpixに対してHarea(m)がある程度の大きさを持つか否かの判定を行う。本実施形態においては、Harea(m)がDpix×1/4よりも大きいか否かの判定を行うものとする。Dpix×1/4とHarea(m)を比較した結果、Harea(m)の方が大きい場合(Yes)には、ステップS307へ処理を移行する。一方、Harea(m)がDpix×1/4以下であると判定された場合(No)には、処理をステップS810へ移行し、着目エリアが最終エリアであるか否がの判定を行う(ステップS810)。最終エリアでない場合(No)は、次のエリアの判定処理に移り(ステップS811)、ステップS809〜ステップS811の処理を繰り返す。着目エリアが最終エリアである場合(Yes)は、処理をステップS309へと移行する。Harea(m)のうち、1つでもDpix×1/4よりも大きいと判定された領域がある場合には、HDR差分を復号する必要があると判定される(ステップS307)。すべてのエリアがDpix×1/4以下であった場合には、処理をステップS309へと移行する。この場合、どのエリアもHDR差分符号化データの復号は必要ないものと判断されている。よって、HDR差分は復号しない(ステップS309)。各エリアの判定処理について、以下に具体的な例を示す。図9(a)の場合、入力画像データの画素数Dpix=36×12=432であり、Dpix×1/4=108となる。Harea(0)=72であり、Dpix×1/4に満たないため、次のエリアの判定処理へ移行する。次に、Harea(1)に注目すると、Harea(1)=180であり、Dpix×1/4<Harea(1)が成立する。そのため、この画像についてはHDR差分符号化データを復号する必要があると判定される。また、図9(b)について同じ判定を行った場合、Dpix×1/4=108であり、画像データ内のすべてのエリアHarea(0)〜(12)のうち、108を超えるエリアは存在しない。そのため、この画像については、HDR差分符号化データを復号する必要はないと判断される。
以上の処理によれば、入力画像中に存在する白飛び領域や黒潰れ領域がある程度の大きさを持った領域でなければ、HDR差分符号化データは復号されない。これにより、入力解像度よりも出力解像度が小さい場合に、高コントラストが必要な場合にのみHDR差分を復号することが可能となり、復号時間の短縮を実現できる。
[第4の実施形態]
上記、第1、第3の実施形態においては、HDR画像符号化データは、1つのLDR画像符号化データと1つのHDR差分符号化データによって構成されている場合の例について説明を行った。この場合、画像の一部が白飛び又は黒潰れ領域である場合でも、HDR差分の復号要否を画像全面について判定することしかできなかった。本第4の実施形態においては、HDR差分符号化データが適当なサイズのブロック単位に部分的に復号可能な形式である場合に、画像の一部分に対してHDR差分符号化データの復号要否を切り替える方法について説明を行う。
本実施形態におけるHDR差分符号化データは、HDR差分データをJPEG符号化する際に、リスタートインターバルを有効にして符号化するものとする。ある一定間隔でMCU(Minimum Coded Unit)の間にリスタートマーカを挿入し、リスタートマーカの間のMCU(インターバル)を独立して符号化する処理である。具体的には、リスタートインターバルを無効として符号化する場合、MCU単位に符号化を行うものの、DC成分については、直前のMCUのDC係数を予測値として、符号化対象のDCとの差分を符号化する。そのため、直前のMCUが復号されなければ、次のMCUが正しく復号できない。そのため、部分的に復号することは不可能である。リスタートインターバルが有効の場合には、各インターバルの最初(リスタートマーカ直後のMCU)に、DC係数の予測値を初期化するため、インターバルの単位で独立に復号することが可能となる。
図6(c)に、リスタートインターバルが有効な場合のJPEG符号化データの構造を示す。リスタートインターバルが有効な場合には、ヘッダ中にリスタートインターバル定義セグメントである、DRIセグメントが存在する。DRIセグメントには、リスタートマーカを挿入する間隔としてMCUの数が格納される。この値が0の場合は、DRIが存在しても、リスタートマーカは挿入されない。画像符号化データ中には、インターバル毎にリスタートマーカが挿入される。リスタートマーカはRST0〜RST7の8種類存在し、RST0→RST1→RST2・・・と順番に挿入される。RST7の次にはRST0に戻り、これを最後まで繰り返す。
HDR差分符号化データ中のJPEG符号化データが、上記の構成で生成されたデータであれば、HDR差分符号化データを部分的に復号可能となる。
図15は、本第3の実施形態における、HDR差分復号判定部105の具体的な処理の流れについて示したフローチャートである。図8に示した第2の実施形態と同じ処理については、同じ番号を付し、その詳細な説明については省略する。第2の実施形態と異なる点についてのみ以下に説明を行う。
ステップS807にて検出された白飛び又は黒潰れエリアHarea(m)と表示解像度のピクセル数Dpixとの比較結果を示すフラグAflagを、0で初期化する(ステップS1701)。続いて、ステップS809において、着目エリアHarea(m)の復号要否の判定を行う。着目エリアHarea(m)がDpix×1/4よりも大きい場合(Yes)、Aflagを1に更新し(ステップS1702)、Harea(m)を包含するようなMCUの指定を行う(ステップS1704)。一方、Harea(m)がDpix×1/4以下の場合(No)には、Aflagの更新は行わない(ステップS1703)。本実施形態においては、部分的に復号できるため、全てのHareaに対してステップS809の判定を行うものとする。全エリアに対して判定が終了した段階で、Aflag=1であるか否かの判定(ステップS1705)を行う。判定の結果、Aflag=1の場合(Yes)は、HDR差分を復号するため、HDR差分の復号対象となるMCUの位置情報を出力する(ステップS1706)。Aflag=0の場合(No)は、全エリアがHDR差分を復号する必要のないエリアであると判定されたこととなり、処理を終了する。
図16(a)乃至(c)に、HDR差分を復号する必要のあるエリアが検出された画像データの例を示す。各図内の通し番号がふってある矩形ブロックはMCUを示す。また、同図の太枠で囲まれた斜線のエリア1800がHDR差分の復号が必要なエリアを示す。図16(a)は、リスタートインターバルが2でHDR差分のJPEG符号化が行われたHDR差分符号化データが入力であった場合の例を示す。同図において、エリア1800を包含し、独立して復号可能なMCUは太枠1801の範囲内のMCUである。そのため、太枠内のMCU(指定されたMCU)が復号可能なような情報を出力する。出力する情報は、復号対象となる各インターバルの先頭ポインタを出力するなど、指定されたMCUが特定できるような情報であればよい。また、図18(a)と同じエリア1800がHDR差分復号対象として検出された場合でも、リスタートインターバルが4と設定されている場合には、図18(b)で示す太枠で囲まれたエリア1802の中のMCUについて、HDR差分の復号を行うことになる。例えば、図18(b)のエリア1802を復号する場合には、画像の先頭のMCU(図中のMCU0)から、48番目に位置するMCU(図中のMCU47)までをHDR差分復号対象MCUとなる。そのため、出力する情報としては、復号対象エリアが矩形であることと、復号開始位置となるMCUの番号「0」と復号する最終位置となるMCUの番号「47」を出力すればよい。また、図18(c)に示すように、復号する必要のあるエリアが複数検出された場合で、復号対象のMCUが重複するような例について説明する。図18(c)は、リスタートインターバルが4に設定されており、復号する必要のあるエリアとして、1800と1803の2つが検出されている。この場合、復号対象となるMCUは太枠1802内のMCUと、点線1804内のMCUである。このとき、MCU20〜23、28〜31、36〜39、44〜47は重複している。図15のフローチャートの処理中、ステップS1701では、各エリアに対して処理を行っている。そのため、指定MCUとしては重複しているMCUについても指定を行うが、ステップS1703において、指定されたMCUの中で重複するものがあれば、2回目以降に指定されたMCUについては出力しないこととする。こうすることで、HDR差分の復号処理を同じMCUに対して行われることはない。
HDR差分復号判定部105により、HDR差分を復号する必要のあるエリアが1つでも存在すると判定された場合には、HDR画像復号部107により、HDR差分の復号処理を行う。図17は、本実施形態におけるHDR画像復号部107の処理の流れを示すフローチャートである。まず、復号対象として指定されたMCUを取得する(ステップS1901)。続いて、取得したMCUのHDR差分符号化データを復号する(ステップS1902)。このとき、HDR差分のJPEG符号化データの復号処理についても、符号化と同様に、リスタートマーカ直後のMCUではDC係数の予測値を初期化し、復号を行う。
入力された全MCUに対してHDR差分符号化データの復号処理を終えると、HDR画像の生成の処理に移る(ステップS1903)。HDR画像の生成は、第1の実施形態と同様の方法で行えばよい。ただし、本実施形態においては、HDR差分データが画像に対して部分的にしか存在しないことになる。そのため、HDR画像データの生成方法については注意が必要となる。たとえば、LDR画像データについてもHDR差分符号化データと同様に、リスタートインターバルを有効にして符号化してある場合について説明する。この場合、HDR差分のインターバルと1対1で対応していれば、対応しているLDR画像データとHDR差分からHDR画像の生成を行い、LDR画像の領域とHDR画像の領域が混在する画像を生成する。LDR画像が1枚の画像データとして存在する場合には、HDR差分を復号していない領域については、HDR差分が0の領域であるというデータを付加して、画像1枚分のHDR差分データを生成し、それを用いてHDR画像データを生成すればよい。生成したHDR画像データを出力し(ステップS1904)、HDR画像復号部107の処理を終了する。
以上の方法によれば、HDR差分符号化データの部分復号が可能なため、HDR差分が部分的にしか必要でない画像に対して、復号の処理時間を短縮することができる。
[第5の実施形態]
第1乃至第4の実施形態において、白飛びや黒潰れ領域に基づいてHDR差分の復号要否の判定を行った。本第5の実施形態では、白飛びや黒潰れ領域ではなく、LDR縮小画像の疑似輪郭の発生状況に基づいてHDR差分の復号要否を判定する方法について説明する。本実施形態におけるHDR差分復号判定部105の処理の流れを図21に示す。図3と同じ処理については同じ番号を付し、本実施形態においては詳細な説明は省略する。以下、図3と異なる処理について説明を行う。
まず、復号したLDR画像を入力し(ステップS301)、輝度成分値Y_ldrを算出する(ステップS302)。輝度成分Y_ldrから、LDR画像中の輝度値の変化量の大きな箇所を検出する(ステップS2301)。検出の方法はどんな方法を用いてもよいが、例えば、着目画素の輝度値と、その隣接する8近傍画素の輝度値の差分値(輝度差)をそれぞれ求める。求めた画素間の差分値のうち、一番大きな差分値を閾値と比較して、閾値よりも大きな値の場合には、着目画素位置における輝度変化量が大きいと判定する。着目画素位置において輝度値の変化量が大きいと判定された場合には、その位置が特定できるような情報を保持しておくものとする。簡単には、変化が大きいと判定された画素位置では“1”、それ以外では“0”の値を持つ2値画像を生成することである。入力のLDR画像全面について、輝度変化検出の処理を終了すると、処理をステップS2302へ移行する。ステップS2302では、LDR画像を出力解像度に縮小する。このとき、処理を簡易にするために、一定間隔で画素を間引く(サブサンプリングする)ことで、縮小画像生成を行うものとする。続いて生成した縮小LDR画像について、ステップS2301と同様の方法で輝度値の変化量の大きな箇所を検出する(ステップS2303)。縮小LDR画像中の輝度変化の検出結果と、元の解像度のLDR画像の輝度変化の検出結果を比較することで、縮小画像に疑似輪郭が発生しているか否かを判定する(ステップS2304)。具体的には、元の解像度で輝度変化が大きいと検出されなかった領域であって、縮小画像において輝度変化が大きいと検出された箇所について、疑似輪郭が発生していると判断する。疑似輪郭が発生していると判断された場合(Yes)には、サムネイル画像の画質向上のため、HDR差分を復号する必要があるとして決定する(ステップS306)。一方、疑似輪郭が発生していないと判断された場合(No)には、HDR差分を復号する必要はないとして決定する(ステップS307)。なお、ここでは疑似輪郭の有無で判定したが、疑似輪郭が発生すると判定された画素数の全画素数に対する割合が、予め設定された閾値を上回ったときHDR差分を復号するとしてもよい。
図22(a)、(b)に具体的な例を示す。同図は山並に太陽が沈む風景画像と捉えていただきたい。図22(a)に示す画像を入力とした場合に、輝度変化の大きい箇所を検出する。その結果、画像中央の白いエリアの境界と、画像の下半分の黒い領域の境界が輝度変化の大きな箇所として検出される。図22(a)を縮小した画像を図22(b)に示す。図22(b)について輝度変化の大きい箇所を検出した場合には、図22(a)の画像で検出された箇所の他に、境界線2401、2402、2403が検出される。この場合、図22(a)に示した縮小前の画像では検出されず、図22(b)に示した縮小画像で検出される輝度変化の大きな箇所が存在するため、疑似輪郭が発生していると判断される。そのため、図22(a)はHDR差分符号化データを復号する必要がある画像であるとして決定する。
LDR画像データを縮小することで、疑似輪郭が発生するような画像の場合にも、HDR差分を復号することで、より滑らかな階調表現が可能となるため、疑似輪郭の発生が抑制できる。
[その他の実施形態]
第1の実施形態において、1つのHDR差分の符号化方法を示したが、これに限られることはない。例えば、HDR差分データ符号化時に、LDR画像のJPEGデータをローカルデコードし、逆トーンマップ処理を行い、HDR画像データを復号する。その上で、HDR画像データのオリジナルと復号結果の差分を取り、差分データ(単純差分データ)を符号化する方法を用いても構わない。
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。