本発明の実施形態の説明に先立って実施形態の前提となる符号化装置100の構成および符号化装置100が実行する処理について説明する。以下の説明において、符号化装置100は、水平方向および垂直方向におけるサブバンド係数の特徴を考慮して生成した量子化パラメータに基づいて符号化を実行する。
図1は、符号化装置100の構成を示すブロック図である。符号化装置100は、撮像部101、プレーン変換部102、ウェーブレット変換部103、特徴情報生成部104、量子化制御部105、量子化部106、エントロピー符号化部107、および記録媒体108を含む。
撮像部101は、光学レンズ、絞り、フォーカス制御部、およびレンズ駆動部を含み光学ズーム可能なレンズ光学系と、レンズ光学系を介して入射した光情報を電気信号に変換する撮像素子とを含む。したがって、本例の符号化装置100は、撮像装置として機能する。撮像素子は、例えば、CCDイメージセンサーまたはCMOSセンサーであって、水平方向2画素×垂直方向2画素の4画素を繰り返し単位とするベイヤー配列のカラーフィルタを有する。撮像素子は、電気信号(アナログ信号)をディジタル信号に変換したRAWデータを、プレーン変換部102に出力する。本明細書における非限定的な例示として、RAWデータは、図2に示すベイヤー配列のR(赤)、G1(緑)、G2(緑)、B(青)の4つの色要素で構成される。
プレーン変換部102は、撮像部101から入力されるRAWデータを読み出して、4つの独立したプレーンデータに変換する。以上のように変換して取得された4つのプレーンデータは、プレーン変換部102からウェーブレット変換部103に出力される。4つの色要素(R、G1、G2、B)で構成されるRAWデータからプレーンデータへの変換は、以下の4つの式を含む式(1)に従って実行される。式(1)によって、RAWデータが、輝度プレーン(Y)とその他のプレーン(C0、C1、C2)に近似的に変換される。
Y =(R+G1+G2+B)/4
C0=R-B
C1=(G1+G2)/2-(R+B)/2
C2=G1-G2 ……式(1)
なお、RAWデータとプレーンデータとの変換式は、以上の式(1)に限定されず、例えば、RAWデータをR、G1、G2、Bに分離してプレーンデータとしてもよい。
ウェーブレット変換部103は、プレーン変換部102から入力されるプレーンデータを読み出して、ウェーブレット変換を施して変換係数(サブバンド係数)を取得する。変換係数は、対象データ(すなわち、プレーンデータ)とウェーブレットとの相関を示す値である。取得された変換係数は、特徴情報生成部104および量子化部106に出力される。
図3を参照して、上記のウェーブレット変換によるサブバンド分割を例示的に説明する。図3は、プレーンデータに対して垂直方向の1回のウェーブレット変換および水平方向の1回のウェーブレット変換を施して取得された、分解レベル1に相当するサブバンドを示している。図3において、サブバンドLLは低周波成分を示し、他のサブバンドLH、HL、HHは高周波成分を示す。
特徴情報生成部104は、ウェーブレット変換部103から入力されるYプレーンのサブバンド係数を用いて、明度、複雑度、およびエッジ有無を含む3つの特徴情報を生成する。生成された特徴情報の各々は、特徴情報生成部104から量子化制御部105に出力される。特徴情報の生成手法については後述される。
量子化制御部105は、特徴情報生成部104から入力される特徴情報に対応する量子化パラメータを生成して量子化部106に出力する。特徴情報と量子化パラメータとの関係性については後述される。
量子化部106は、ウェーブレット変換部103から入力されるサブバンドデータに対して、量子化制御部105から入力される量子化パラメータを用いて変換係数(サブバンド係数)の量子化を実行する。量子化された変換係数は、量子化部106からエントロピー符号化部107に出力される。
エントロピー符号化部107は、量子化部106において量子化された変換係数(サブバンド係数)を符号化して符号化データを取得する。以上の圧縮符号化は、例えば、ゴロム符号化等のエントロピー符号化である。符号化データは、エントロピー符号化部107から記録媒体108に出力される。
記録媒体108は、例えば、不揮発性メモリによって構成される記録メディアであって、エントロピー符号化部107から入力される符号化データを格納する。
プレーン変換部102からエントロピー符号化部107までの機能ブロックは、符号化装置100が有する1つ以上のCPU等のプロセッサが、不揮発性メモリに格納されたプログラムを揮発性メモリに展開して実行することによって実現される。
次いで、特徴情報と量子化パラメータとの関係性について、以下に説明する。前述したように、特徴情報として、明度を示す特徴情報、複雑度を示す特徴情報、およびエッジ有無を示す特徴情報が例示される。
明度は、RAWデータの輝度レベルを示す。量子化処理においては、輝度レベルが低い領域(暗部領域)に対して粗い量子化(量子化ビット数の小さい量子化)を施すと、量子化後の係数が0になりやすい。すなわち、暗部領域に対して粗い量子化を施すと微細な情報が失われやすい。また、RAWデータに対して、データ記録後の処理(ポスト処理)においてガンマ補正やトーンカーブ補正のような輝度レベル調整が実行される。以上の輝度レベル調整においては、一般的に、暗部領域の輝度レベルが増大されると共に明部領域の輝度レベルが低減される。そのため、同一の量子化パラメータを用いて暗部領域と明部領域との双方の量子化を行うと、輝度レベルが大きく増大される暗部領域では、量子化歪みの増幅度も大きいので画質劣化が目立ちやすい。一方で、輝度レベルが低減される明部領域では、量子化歪みの増幅度が小さいので画質劣化が目立ちにくい。以上の傾向に基づき、画質劣化が目立ちやすい暗部領域では量子化歪みが小さくなるように細かく量子化し、画質劣化が目立ちにくい明部領域では符号量が増大しないように粗く量子化すると好適である。
複雑度は、RAWデータの空間周波数の高さを示す。エッジ有無は、輝度レベルが急激に変化する部分であるエッジの存在を示す。RAWデータにおいて、空間周波数が低いほど平坦な領域であり、空間周波数が高いほど複雑な領域である。一般的に、画像圧縮においては、平坦領域の情報を削減すると視覚的な劣化が目立ちやすい一方、複雑領域の情報を削減しても視覚的な劣化は目立ちにくい。ただし、複雑領域(空間周波数が高い領域)であっても、輝度レベルが急激に変化する部分であるエッジを含む領域は、情報を削減すると視覚的な劣化が目立ちやすい。以上の傾向に基づき、視覚的な劣化が目立ちやすい平坦領域や含エッジ領域では細かく量子化し、視覚的な劣化が目立ちにくい複雑領域では粗く量子化すると好適である。
次いで、各々の特徴情報の生成手法について、図4から図6を参照して以下に説明する。特徴情報生成部104は、Yプレーンのサブバンド係数を特徴量として、明度、複雑度、およびエッジ有無をそれぞれ示す特徴情報を所定のブロック単位で生成する。
図4を参照して、水平方向に亘る特徴情報の生成について説明する。本例では、分解レベル1のサブバンドにおいて水平方向に連続する4つの変換係数(水平4係数)を用いて、特徴情報の生成単位であるブロック401~404ごとに特徴情報を生成する。分解レベル1のサブバンド形成図400において、ブロック401~404はそれぞれ同一の空間座標を指している。
前述のように、明度の特徴情報は、RAWデータの輝度レベルを示す。したがって、明度P1は、画像のDC成分である1LLサブバンド係数のブロック401を用いて生成することができる。明度P1は、ブロック401内の係数A0、A1、A2、A3を用いて、以下の式(2)によって表される。
P1=(A0+A1+A2+A3+2)>>2 ……式(2)
また、複雑度の特徴情報(複雑度P2)は、画像のAC成分である1HLサブバンド係数のブロック402、1LHサブバンド係数のブロック403、および1HHサブバンド係数のブロック404に基づいて生成することができる。複雑度P2は、ブロック402について生成される中間評価値PHL、ブロック403について生成される中間評価値PLH、およびブロック404について生成される中間評価値PHHのうちの最大値であって、以下の式(3)によって表される。
P2=MAX(PHL,PLH,PHH) ……式(3)
式(3)における中間評価値PHLは、ブロック402内の係数B0、B1、B2、B3を用いて以下の式(4)によって表される。同様に、中間評価値PLHは、ブロック403内の係数C0、C1、C2、C3を用いて以下の式(5)によって表され、中間評価値PHHは、ブロック404内の係数D0、D1、D2、D3を用いて以下の式(6)によって表される。式(4)~式(6)において、ABSは絶対値変換処理を示している。
PHL={ABS(B0)+ABS(B1)+ABS(B2)+ABS(B3)+2}>>2 ……式(4)
PLH={ABS(C0)+ABS(C1)+ABS(C2)+ABS(C3)+2}>>2 ……式(5)
PHH={ABS(D0)+ABS(D1)+ABS(D2)+ABS(D3)+2}>>2 ……式(6)
図5を参照して、上記した水平4係数に垂直方向のエッジ(垂直エッジ)が含まれるか否かを検出する処理について説明する。図5(a)は、本例における垂直エッジの検出に用いられる周波数成分(水平4係数(n~n+3))を例示している。水平方向に対する周波数成分に関するHLサブバンドの係数を用いて検出処理を実行することで、水平方向に対する高周波成分である垂直エッジを検出することができる。本例の検出処理においては、各係数が、所定の閾値を上回る場合に「振幅値大」と判定される一方、所定の閾値以下である場合に「振幅値小」と判定される。そして、以上の判定値(「振幅値大」または「振幅値小」)の配列に従って、垂直エッジが水平4係数に含まれるか否か判定される。
図5(b)は、垂直エッジが含まれると判定される水平4係数の配列を例示している。図5(b)における水平軸上の水平座標位置(n~n+3)は、図5(a)の水平4係数(n~n+3)に対応している。図5(b)における垂直軸は、各水平座標位置における係数値に相当する。図示の通り、水平座標位置における判定値は、それぞれ、n=振幅値小、n+1=振幅値小、n+2=振幅値大、n+3=振幅値小であって、水平座標位置がnからn+3に変化する際に閾値を跨ぐ振幅値(係数値)の変化が生じている。以上のように閾値を跨ぐ振幅値の変化が生じていることは、水平4係数に相当する箇所において画像の水平方向の連続性が破れていることを示すので、垂直エッジが存在すると判定される。
図6を参照して、垂直方向に連続する3つの変換係数(垂直3係数)に水平方向のエッジ(水平エッジ)が含まれるか否かを検出する処理について説明する。図6(a)は、本例における水平エッジの検出に用いられる周波数成分(垂直3係数(m-1~m+1))を例示している。垂直方向に対する周波数成分に関するLHサブバンドの係数を用いて検出処理を実行することで、垂直方向に対する高周波成分である水平エッジを検出することができる。本例の検出処理においては、各係数が、所定の閾値を上回る場合に「振幅値大」と判定される一方、所定の閾値以下である場合に「振幅値小」と判定される。そして、以上の判定値(同前)の配列に従って、水平エッジが垂直3係数に含まれるか否か判定される。
図6(b)は、水平エッジが含まれると判定される垂直3係数の配列を例示している。図6(b)における水平軸上の垂直座標位置(m-1~m+1)は、図6(a)の垂直3係数(m-1~m+1)に対応している。図6(b)における垂直軸は、各垂直座標位置における係数値に相当する。図示の通り、垂直座標位置における判定値は、それぞれ、m-1=振幅値小、m=振幅値大、m+1=振幅値小であって、垂直座標位置がm-1からm+1に変化する際に閾値を跨ぐ振幅値(係数値)の変化が生じている。以上のように閾値を跨ぐ振幅値の変化が生じていることは、垂直3係数に相当する箇所において画像の垂直方向の連続性が破れていることを示すので、水平エッジが存在すると判定される。
図7を参照して、量子化制御部105が実行する特徴分類の基本概念について説明する。図7に示される特徴分類表において、閾値TH0は、輝度P1を低輝度と中輝度とのいずれかに分類する閾値であり、閾値TH1は、輝度P1を中輝度と高輝度とのいずれかに分類する閾値である。また、閾値TH2は、空間周波数を示す複雑度P2を低周波と中周波とのいずれかに分類する閾値であり、閾値TH3は、複雑度Pを中周波と高周波とのいずれかに分類する閾値である。以上の4つの閾値TH0~TH3は、それぞれ、画像のビット深度等の条件に応じて任意に設定可能なパラメータである。以上の4つの閾値TH0~TH3と輝度P1、複雑度P2との大小関係に応じて各ブロックの特徴が分類される。
補正量Q0~Q8は、閾値TH0~TH3に基づいて分類された特徴情報(輝度P1、複雑度P2)に適用すべき量子化パラメータの補正量である。なお、補正量Q0~Q8を適用すべき領域を、それぞれ、同じ符号を用いて領域Q0~Q8と称することがある。補正量Q0~Q8の大小関係を以下の式(7)に例示する。
Q0<Q1≦Q3≦Q2≦Q4≦Q6<Q5≦Q7<Q8 ……式(7)
量子化パラメータは、視覚特性を考慮して、輝度が低く平坦な領域Q0において最も小さくなり、輝度が高く複雑な領域Q8において最も大きくなるように重み付けされると好適である。式(7)における補正量の大小関係は、領域Q0から他の各領域Q1~Q7までの距離に基づいて設定されている。
図8を参照して、エッジの存在を考慮した特徴分類について説明する。前述した垂直エッジおよび水平エッジの判定においてエッジが存在すると判定された場合、図7に示される特徴分類表が図8に示すように変更される。例えば、量子化制御部105は、領域Q3、Q6(領域801)に分類される要素を、領域Q0(領域802)に分類されるように変更する。同様に、量子化制御部105は、領域Q4、Q7(領域803)に分類される要素を領域Q1(領域804)に、領域Q5、Q8(領域805)に分類される要素を領域Q2(領域806)に分類されるように変更する。以上の構成によれば、視覚的な劣化が目立ちやすいエッジ領域の量子化パラメータを低く維持することができる。
次いで、ウェーブレット変換のタイミングとラインバッファについて、図9から図11を参照して以下に説明する。以下の例においては、ウェーブレット変換部103において、可逆5-3タップフィルタを用いたウェーブレット変換(以下、DWT変換と称する)が実行される。
図9を参照して、ウェーブレット係数(以下、DWT係数と称する)が出力されるタイミングを説明する。本例のDWT係数(サブバンド係数)は、リフティング構造を用いたDWT変換によって取得される。図9(a)の状態が図9(b)の状態および図9(c)の状態に遷移するに従って、画素データが逐次に追加されている。
図9(a)において、入力される画素データa~eは、水平方向に連続的に配置された画素に対応している。DWT係数bHは、画素データa、b、cを用いて以下の式(8-1)に従って生成された分解レベル1の高周波成分の係数である。DWT係数dHは、画素データc、d、eを用いて以下の式(8-2)に従って生成された分解レベル1の高周波成分の係数である。DWT係数cLはDWT係数bH、DWT係数dH、および画素データcを用いて以下の式(8-3)に従って生成された分解レベル1の低周波成分の係数である。
bH=b-(a+c)/2 ……式(8-1)
dH=d-(c+e)/2 ……式(8-2)
cL=c+(bH+dH+2)/4 ……式(8-3)
図9(b)は、図9(a)の状態に対して、水平方向に画素データfが新たに入力された状態を示す。図9(b)から理解されるように、1つの画素データfが追加されても新たなDWT変換を実行するには画素データ数が不足しているので、新たなDWT係数は出力されない。
図9(c)は、図9(b)の状態に対して、水平方向に画素データgが新たに入力された状態を示す。図9(c)から理解されるように、図9(a)と比較して2つの画素データf、gが追加されているので、新たなDWT変換を実行することができる。結果として、高周波成分のDWT係数fHおよび低周波成分のDWT係数eLが出力される。
以上のように、水平方向に2画素分の画素データが入力されるごとに1回の水平方向におけるDWT変換(以下、水平DWT変換と称する)が実行される。以上の関係性は垂直方向においても同様であって、垂直方向に2画素分の画素データが入力されるごとに1回の垂直方向におけるDWT変換(以下、垂直DWT変換と称する)が実行される。
画素データの数に関して、図3に示すように、分解レベル1の各サブバンドのサイズは水平方向および垂直方向の各々において入力画素データの半分である。したがって、各サブバンド係数の数は、オリジナル画像の画素数の1/4である。
図10を参照して、画面の端部(左端)におけるDWT変換の実行手法について説明する。図10において、入力される3つの画素データa、b、cは、画面左端から水平方向に連続的に配置された画素に対応している。図10に示すように、画面の左端で水平DWT変換を実行する場合、左端に最も近い画素データaを基準に左右対称となるように画素データb、cをコピーすることによって、不足する画素データ(左端よりも左に位置すべき画素データ)を拡張する。以上のデータ拡張によって、左端においても水平DWT変換を実行することができる。なお、右端においても同様に水平DWT変換を実行することができる。さらに、上端および下端においても同様に垂直DWT変換を実行することができる。
図11Aから図11Gを参照して、リフティング構造を用いた垂直DWT変換について説明する。本例のDWT変換においては、1ライン分の画素データが順次に入力される。図11Aから図11Gにおける画素データa~gは、1ライン分の入力画素データを示す。図11Aから図11Gまでの時系列において、画素データa~gが入力されるのに伴って、画素ラインバッファおよび垂直DWTラインバッファに格納されるデータが変化していく。画素ラインバッファは、低周波成分のDWT係数および高周波成分のDWT係数を算出するために1ライン分の画素データをバッファリングする。垂直DWTラインバッファは、低周波成分のDWT係数を算出するために1ライン分の高周波成分のDWT係数をバッファリングする。
図11Aに示すように、ウェーブレット変換部103は、1ライン分の画素データaが入力されると、画素ラインバッファLine_Buffer0に画素データaを格納する。
図11Bに示すように、ウェーブレット変換部103は、次の1ライン分の画素データbが入力されると、画素ラインバッファLine_Buffer1に画素データbを格納する。
図11Cに示すように、ウェーブレット変換部103は、次の1ライン分の画素データcが入力されると、画素データcと画素ラインバッファLine_Buffer0、1の画素データa、bとを用いて分解レベル1の高周波成分のDWT係数bHを算出する。さらに、ウェーブレット変換部103は、算出されたDWT係数bHと画素ラインバッファLine_Buffer0に格納されている画素データaとを用いて分解レベル1の低周波成分のDWT係数aLを算出する。ウェーブレット変換部103は、DWT係数aLを算出した後、画素ラインバッファLine_Buffer0の画像データaを画像データcで上書きする。ウェーブレット変換部103は、算出したDWT係数aLを、水平方向のDWT変換を実行する水平DWT変換部へ出力する。ウェーブレット変換部103は、算出したDWT係数bHを、水平DWT変換部に出力すると共に、垂直DWTラインバッファLine_Buffer2に格納する。
図11Dに示すように、ウェーブレット変換部103は、次の1ライン分の画素データdが入力されると、画素ラインバッファLine_Buffer1の画像データbを画像データdで上書きする。
図11Eに示すように、ウェーブレット変換部103は、次の1ライン分の画素データeが入力されると、画素データeと画素ラインバッファLine_Buffer0、1の画素データc、dとを用いて分解レベル1の高周波成分のDWT係数dHを算出する。さらに、ウェーブレット変換部103は、算出されたDWT係数dHと画素ラインバッファLine_Buffer0の画素データcと垂直DWTラインバッファLine_Buffer2のDWT係数bHとを用いて分解レベル1の低周波成分のDWT係数cLを算出する。ウェーブレット変換部103は、DWT係数cLを算出した後、画素ラインバッファLine_Buffer0の画像データcを画像データeで上書きする。ウェーブレット変換部103は、算出したDWT係数cLを水平DWT変換部へ出力する。ウェーブレット変換部103は、算出したDWT係数dHを、水平DWT変換部に出力すると共に、垂直DWTラインバッファLine_Buffer3に格納する。
図11Fに示すように、ウェーブレット変換部103は、次の1ライン分の画素データfが入力されると、画素ラインバッファLine_Buffer1の画像データdを画像データfで上書きする。
図11Gに示すように、ウェーブレット変換部103は、次の1ライン分の画素データgが入力されると、画素データgと画素ラインバッファLine_Buffer0、1の画素データe、fとを用いて分解レベル1の高周波成分のDWT係数fHを算出する。さらに、ウェーブレット変換部103は、算出されたDWT係数fHと画素ラインバッファLine_Buffer0の画素データeと垂直DWTラインバッファLine_Buffer2のDWT係数dHとを用いて分解レベル1の低周波成分のDWT係数eLを算出する。ウェーブレット変換部103は、DWT係数eLを算出した後、画素ラインバッファLine_Buffer0の画像データeを画像データgで上書きする。ウェーブレット変換部103は、算出したDWT係数eLを水平DWT変換部へ出力する。ウェーブレット変換部103は、算出したDWT係数fHを、水平DWT変換部に出力すると共に、垂直DWTラインバッファLine_Buffer2に格納されているDWT係数bHに上書きする。
以降、ウェーブレット変換部103は、同様の処理を、最終ラインの画素データに至るまで繰り返して実行する。以上から理解されるように、本例の垂直DWT変換を実行するには、少なくとも、2ラインの画素ラインバッファLine_Buffer0、1と2ラインの垂直DWTラインバッファLine_Buffer2、3とが必要である。
図12は、プレーン変換後の上記した処理を実行可能な符号化装置100の詳細構成を例示するブロック図である。符号化装置100は、ウェーブレット変換部1200、特徴情報生成部1201、量子化制御部1202、量子化部1203、およびエントロピー符号化部1204を有する。以上の要素は、それぞれ、図1のウェーブレット変換部103、特徴情報生成部104、量子化制御部105、量子化部106、およびエントロピー符号化部107に対応している。図12において不図示の要素は、図1と同様に構成されると好適である。
ウェーブレット変換部1200は、分解レベル1のDWT変換に用いられる画素ラインバッファ1205、垂直DWT変換部1206、垂直DWTラインバッファ1207、水平DWT変換部1208、および水平DWTラインバッファ1209を有する。特徴情報生成部1201は、水平エッジの判定に用いられる水平エッジ判定ラインバッファ1210を有する。
図13は、図12に示す符号化装置100において実行されるDWT変換、特徴情報生成、並びに量子化およびエントロピー符号化の時系列を示すタイミングチャートである。本例では、符号化装置100が、ラスタ順に入力されたプレーン変換後の画素データに対して分解レベル1まで垂直DWT変換および水平DWT変換を実行する。
図13の横軸は時間の推移を示している。期間t0~t10において、それぞれ、1ライン分の画素データa~kが入力される。画像データの入力は期間t0から開始する。以下、各行に示される矩形バー(以下、単に「バー」と称する)について説明する。
「画素データ」行に示されるバーa~kは、対応期間において画素ラインバッファ1205に入力される1ライン分の画素データa~kを示す。図示の通り、全期間に亘って「画素データ」行にバーが示されているので、全期間に亘って1ライン分の画素データが画素ラインバッファ1205に入力される。例えば、期間t0において、1ライン分の画素データaが画素ラインバッファ1205に入力される。また、期間t1において、1ライン分の画素データbが画素ラインバッファ1205に入力される。
「画素ラインバッファ」行に示されるバーa~jは、入力された1ライン分の画素データが、対応期間において画素ラインバッファ1205に一時的に保持されていることを示す。例えば、期間t1において、画素データaが画素ラインバッファLine_Buffer0に保持されている。また、期間t2において、画素データa、bが、それぞれ画素ラインバッファLine_Buffer0、1に保持されている。
「垂直DWT変換」行(「Lev1-L」行および「Lev1-H」行)に示されるバーaL~iL、bH~jHは、対応期間において垂直DWT変換部1206が分解レベル1の垂直DWT変換を実行することを示す。以上の垂直DWT変換後のDWT係数データは、垂直DWTラインバッファ1207または水平DWT変換部1208に出力される。例えば、期間t1において、垂直DWT変換は実行されない。また、期間t2において、分解レベル1の垂直DWT変換が実行され、DWT係数aL、bHが出力される。
「垂直DWTラインバッファ」行に示されるバーbH、dH、fH、hHは、垂直DWT変換部1206からのDWT係数が、対応期間において垂直DWTラインバッファ1207に一時的に保持されていることを示す。例えば、期間t3において、1ライン分のDWT係数bHが垂直DWTラインバッファLine_Buffer2に保持される。また、期間t5において、1ライン分のDWT係数bHが垂直DWTラインバッファLine_Buffer2に保持され、1ライン分のDWT係数dHが垂直DWTラインバッファLine_Buffer3に保持される。
「水平DWT変換」行(「Lev1-LL」行、「Lev1-HL」行、「Lev1-LH」行、「Lev1-HH」行)に示されるバーaXX~jXX(Xは、LまたはH)は、対応期間において分解レベル1の水平DWT変換が実行されることを示す。以上の水平DWT変換は、水平DWT変換部1208によって実行される。水平DWT変換後のDWT係数データは、水平DWTラインバッファ1209に出力される。例えば、期間t0、t1において、水平DWT変換は実行されない。また、期間t2において、分解レベル1の水平DWT変換が実行され、DWT係数aLL、aHL、bLH、bHHが水平DWTラインバッファ1209に出力される。
「水平DWTラインバッファ」行に示されるバーaXX~hXXは、水平DWT変換部1208からのDWT係数が、対応期間において水平DWTラインバッファ1209に一時的に保持されていることを示す。例えば、期間t3~t4において、0.5ライン分のDWT係数aLL、aHL、bLH、bHHが水平DWTラインバッファ1209に保持される。また、期間t5~t6において、0.5ライン分のDWT係数cLL、cHL、dLH、dHHが水平DWTラインバッファ1209に保持される。
「水平エッジ判定ラインバッファ」行に示されるバーbLH、dLH、fLHは、水平DWTラインバッファ1209からのDWT係数のLH成分が、対応期間において水平エッジ判定ラインバッファ1210に一時的に保持されていることを示す。例えば、期間t5~t6において、0.5ライン分のDWT係数bLHが水平エッジ判定ラインバッファ1210に保持される。また、期間t7~t8において、0.5ライン分のDWT係数dLHが水平エッジ判定ラインバッファ1210に保持される。
「量子化・エントロピー符号化」行に示されるバーaXX~hXXは、水平DWT変換後のDWT係数データを、対応期間において量子化部1203およびエントロピー符号化部1204が量子化および符号化することを示す。例えば、期間t4において、水平DWT変換後のDWT係数aLL、aHL、bLH、bHHが量子化およびエントロピー符号化される。また、期間t6において、水平DWT変換後のDWT係数データcLL、cHL、dLH、dHHが量子化およびエントロピー符号化される。
図12に示す符号化装置100が図13に示す期間において実行する符号化処理を以下に時系列的に説明する。
期間t0において、1ライン分の画素データaが、ウェーブレット変換部1200の画素ラインバッファ1205に入力される。期間t1において、1ライン分の画素データbが画素ラインバッファ1205に入力される。以上の期間t0、t1では、垂直DWT変換を実行するのに必要なライン数の画素データがウェーブレット変換部1200に入力されていない。したがって、入力された画素データa、bは画素ラインバッファLine_Buffer0、1に保持されるが、垂直DWT変換は実行されない。
期間t2において、垂直DWT変換部1206は、画素ラインバッファ1205内の画素データa、bおよび入力された画素データcを用いてDWT係数bHを算出する。算出されたDWT係数bHは、垂直DWTラインバッファ1207(Line_Buffer2)と水平DWT変換部1208とに出力される。また、垂直DWT変換部1206は、画素ラインバッファ1205内の画素データaと算出されたDWT係数bHとを用いてDWT係数aLを算出し、水平DWT変換部1208に出力する。水平DWT変換部1208は、入力されるDWT係数aL、bHに水平DWT変換を実行して、DWT係数aLL、aHL、bLH、bHHを算出し水平DWTラインバッファ1209へ出力する。なお、画素ラインバッファLine_Buffer0の画像データaは、DWT係数aLの算出後に画素データcで上書きされる。
期間t3において、1ライン分の画素データdが、画素データbを保持している画素ラインバッファ1205(Line_Buffer1)に上書きされる。期間t0~t1と同様、垂直DWT変換を実行するのに必要なライン数の画素データがウェーブレット変換部1200に入力されていないので、垂直DWT変換は実行されない。
期間t4において、垂直DWT変換部1206は、画素ラインバッファ1205内の画素データc、dおよび入力された画素データeを用いてDWT係数dHを算出する。算出されたDWT係数dHは、垂直DWTラインバッファ1207(Line_Buffer3)と水平DWT変換部1208とに出力される。また、垂直DWT変換部1206は、画素ラインバッファ1205内の画素データcと算出されたDWT係数dHとを用いてDWT係数cLを算出し、水平DWT変換部1208に出力する。水平DWT変換部1208は、入力されるDWT係数cL、dHに水平DWT変換を実行して、DWT係数cLL、cHL、dLH、dHHを算出する。同時に、水平DWTラインバッファ1209は、保持しているDWT係数aLL、aHL、bLH、bHHを特徴情報生成部1201に出力する。特徴情報生成部1201は、DWT係数aLLを用いて明度を生成し、DWT係数aHL、bLH、bHHを用いて複雑度を生成し、DWT係数aHLを用いて垂直エッジ情報を生成し、量子化制御部1202に出力する。量子化制御部1202は、特徴情報生成部1201からの特徴情報(明度、複雑度、エッジ情報)に対応する量子化パラメータを生成して量子化部1203に出力する。量子化部1203は、量子化制御部1202から入力された量子化パラメータを用いて、水平DWTラインバッファ1209に保持されているDWT係数aLL、aHL、bLH、bHHを量子化する。量子化されたDWT係数aLL、aHL、bLH、bHHは、量子化部1203からエントロピー符号化部1204に出力される。
なお、画像の上端部分を処理する際には、上端より上側に位置するラインのDWT係数が存在しないので、図6を参照して説明した水平エッジの判定は実行されずに量子化パラメータが生成される。画像の下端部分を処理する際も、下端より下側に位置するラインのDWT係数が存在しないので、同様に水平エッジの判定は実行されない。
上述のように、水平DWT変換部1208は、DWT係数cLL、cHL、dLH、dHHを出力し、水平DWTラインバッファ1209に格納する。下ラインに対応するDWT係数fLHが未算出であるので、DWT係数cLL、cHL、dLH、dHHを用いた水平エッジ判定はまだ実行できない。量子化およびエントロピー符号化に用いられ不要となったDWT係数aLL、aHL、bLH、bHHは、水平DWT変換部1208が出力するDWT係数cLL、cHL、dLH、dHHによって上書きされる。DWT係数bLHは、以上の上書き前に水平エッジ判定ラインバッファ1210に格納される。画素ラインバッファLine_Buffer0の画像データcは、DWT係数cLの算出後に画素データeで上書きされる。
期間t5において、1ライン分の画素データfが、画素データdを保持している画素ラインバッファ1205(Line_Buffer1)に上書きされる。期間t0~t1、t3と同様、垂直DWT変換を実行するのに必要なライン数の画素データがウェーブレット変換部1200に入力されていないので、垂直DWT変換は実行されない。
期間t6において、垂直DWT変換部1206は、画素ラインバッファ1205内の画素データe、fおよび入力された画素データgを用いてDWT係数fHを算出する。算出されたDWT係数fHは、垂直DWTラインバッファ1207(Line_Buffer2)と水平DWT変換部1208とに出力される。また、垂直DWT変換部1206は、画素ラインバッファ1205内の画素データeと算出されたDWT係数fHとを用いてDWT係数eLを算出し、水平DWT変換部1208に出力する。水平DWT変換部1208は、入力されるDWT係数eL、fHに水平DWT変換を実行して、DWT係数eLL、eHL、fLH、fHHを算出する。DWT係数fLHは特徴情報生成部1201に出力される。同時に、水平DWTラインバッファ1209は、保持しているDWT係数cLL、cHL、dLH、dHHを特徴情報生成部1201に出力する。加えて、水平エッジ判定ラインバッファ1210は、保持しているDWT係数bLHを特徴情報生成部1201に出力する。特徴情報生成部1201は、DWT係数cLLを用いて明度を生成し、DWT係数cHL、dLH、dHHを用いて複雑度を生成し、DWT係数cHLを用いて垂直エッジ情報を生成し、量子化制御部1202に出力する。加えて、特徴情報生成部1201は、DWT係数bLH、dLH、fLHを用いて水平エッジ情報を生成し、量子化制御部1202に出力する。量子化制御部1202は、特徴情報生成部1201からの特徴情報(明度、複雑度、エッジ情報)に対応する量子化パラメータを生成して量子化部1203に出力する。量子化部1203は、量子化制御部1202から入力された量子化パラメータを用いて、水平DWTラインバッファ1209に保持されているDWT係数cLL、cHL、dLH、dHHを量子化する。量子化されたDWT係数cLL、cHL、dLH、dHHは、量子化部1203からエントロピー符号化部1204に出力される。
上述のように、水平DWT変換部1208は、DWT係数eLL、eHL、fLH、fHHを出力し、水平DWTラインバッファ1209に格納する。下ラインに対応するDWT係数hLHが未算出であるので、DWT係数eLL、eHL、fLH、fHHを用いた水平エッジ判定はまだ実行できない。量子化およびエントロピー符号化に用いられ不要となったDWT係数cLL、cHL、dLH、dHHは、水平DWT変換部1208が出力するDWT係数eLL、eHL、fLH、fHHによって上書きされる。DWT係数dLHは、以上の上書き前に水平エッジ判定ラインバッファ1210(DWT係数bLHが格納されている箇所)に上書きされ格納される。画素ラインバッファLine_Buffer0の画像データeは、DWT係数eLの算出後に画素データgで上書きされる。
以降、同様にして最終ラインの画像データまで処理が繰り返し実行される。
以上の構成、特に、図12および図13の構成から理解されるように、下ラインに対応するDWT係数(例えば、hLH)が算出されるまでは量子化パラメータを決定することができない。したがって、下ラインに対応するDWT係数が算出されるまでは、水平DWTラインバッファ1209にDWT係数(例えば、eLL、eHL、fLH、fHH)を保持しておく必要がある。つまり、サブバンドごとに合計2ライン分のラインバッファが必要であるから、以上のような構成では、符号化装置100の回路規模が肥大化してしまう。以上の課題を解決可能な本発明の実施形態を、以下に説明する。
以下に説明される各実施形態は、本発明を実現可能な構成の一例に過ぎない。以下の各実施形態は、本発明が適用される装置の構成や各種の条件に応じて適宜に修正または変更することが可能である。したがって、本発明の範囲は、以下の各実施形態に記載される構成によって限定されるものではない。例えば、相互に矛盾のない限りにおいて実施形態内に記載された複数の構成を組み合わせた構成も採用可能である。
<第1実施形態>
上記した例では、LHサブバンド係数に基づいて水平エッジの判定が実行される。本発明の第1実施形態では、画素値(画素平均値)に基づいて水平エッジの判定が実行される。詳細は以下の通りである。
図3等を参照して上記したように、分解レベル1の各サブバンドのサイズは水平方向および垂直方向の各々において入力画素データの半分である。各サブバンド係数の数はオリジナル画像の画素数の1/4である。すなわち、1つのサブバンド係数は、水平方向2画素×垂直方向2画素に対応する。そこで、本発明の第1実施形態においては、1つのサブバンド係数に対応する2×2画素(水平方向2画素×垂直方向2画素)に基づいて水平エッジの判定を実行する。
図14を参照して、本発明の第1実施形態の水平エッジの検出手法について説明する。図14(a)は、サブバンド係数を用いた上記例(左側)による検出手法と、2×2画素値を用いた本実施形態の検出手法(右側)とを対比している。2×2画素を含む画素群1404は、座標m-1のサブバンド係数1401に対応する。同様に、画素群1405は座標mのサブバンド係数1402に対応し、画素群1406は座標m+1のサブバンド係数1403に対応する。
本実施形態では、上記例におけるサブバンド係数に代えて、2×2画素の画素平均値を用いて水平エッジを判定する。本実施形態の検出処理においては、各画素平均値が、所定の閾値を上回る場合に「振幅値大」と判定される一方、所定の閾値以下である場合に「振幅値小」と判定される。そして、以上の判定値(「振幅値大」または「振幅値小」)の配列に従って、水平エッジが垂直3係数に含まれるか否か判定される。
図14(b)は、水平エッジが含まれると判定される判定値の配列を例示している。図14(b)における水平軸上の垂直座標位置(m-1~m+1)は、図14(a)の3つの画素群(m-1~m+1)に対応している。図14(b)における垂直軸は、各垂直座標位置における画素平均値に相当する。図示の通り、垂直座標位置における判定値は、それぞれ、m-1=振幅値小、m=振幅値大、m+1=振幅値小であって、垂直座標位置がm-1からm+1に変化する際に閾値を跨ぐ振幅値(画素平均値)の変化が生じている。以上のように閾値を跨ぐ振幅値の変化が生じていることは、3つの画素群に相当する箇所において画像の垂直方向の連続性が破れていることを示すので、水平エッジが存在すると判定される。
図15は、上記した判定処理を実行可能な本実施形態に係る符号化装置150の構成を例示するブロック図である。符号化装置150は、ウェーブレット変換部1500、特徴情報生成部1501、量子化制御部1502、量子化部1503、およびエントロピー符号化部1504を有する。以上の要素は、それぞれ、図12のウェーブレット変換部1200、特徴情報生成部1201、量子化制御部1202、量子化部1203、およびエントロピー符号化部1204に対応している。図15において不図示の要素、特にプレーン変換部以前の要素は、図1および図12と同様に構成されると好適である。したがって、本実施形態の符号化装置150は、撮像部を有する撮像装置として機能する。
ウェーブレット変換部1500は、分解レベル1のDWT変換に用いられる画素ラインバッファ1505、垂直DWT変換部1506、垂直DWTラインバッファ1507、および水平DWT変換部1508を有する。なお、上記例と異なり、ウェーブレット変換部1500は水平DWTラインバッファを有さない。特徴情報生成部1501は、水平エッジの判定に用いられる水平エッジ判定ラインバッファ1509を有する。
上記例と同様、符号化装置150が有する機能ブロックは、符号化装置150が有する1つ以上のCPU等のプロセッサが、不揮発性メモリに格納されたプログラムを揮発性メモリに展開して実行することによって実現される。
図16は、図15に示す符号化装置150において実行されるDWT変換、特徴情報生成、並びに量子化およびエントロピー符号化の時系列を示すタイミングチャートである。本実施形態では、符号化装置150が、ラスタ順に入力されたプレーン変換後の画素データに対して分解レベル1まで垂直DWT変換および水平DWT変換を実行する。
図16は、上記例の図13に対応しているが、少なくとも以下の点において相違する。図16の「水平エッジ判定ラインバッファ」行に示されるバーは、画素ラインバッファ1505から出力される2×2画素ごとの画素平均値Mが、対応期間において水平エッジ判定ラインバッファ1509に一時的に保持されていることを示す。例えば、期間t4~t5において、画素データa、bに基づいた0.5ライン分の2×2画素ごとの画素平均値M(a+b)が水平エッジ判定ラインバッファ1509に保持される。また、期間t6~t7において、画素データc、dに基づいた0.5ライン分の2×2画素ごとの画素平均値M(c+d)が水平エッジ判定ラインバッファ1509に保持される。なお、各図においては、上線(オーバーライン)を用いて画素平均値Mが表される。
図15に示す符号化装置150が図16に示す期間において実行する符号化処理を以下に時系列的に説明する。
期間t0、t1、t2において、それぞれ、画素データa、b、cが画素ラインバッファ1505に入力される。入力された画素データa、b、cは、それぞれ、画素ラインバッファLine_Buffer0、1、2に保持されるが、垂直DWT変換は実行されない。
期間t3において、垂直DWT変換部1506は、画素ラインバッファ1505内の画素データa、b、cを用いてDWT係数bHを算出する。算出されたDWT係数bHは、垂直DWTラインバッファ1507(Line_Buffer3)と水平DWT変換部1508とに出力される。また、垂直DWT変換部1506は、画素ラインバッファ1505内の画素データaと算出されたDWT係数bHとを用いてDWT係数aLを算出し、水平DWT変換部1508に出力する。水平DWT変換部1508は、入力されるDWT係数aL、bHに水平DWT変換を実行して、DWT係数aLL、aHL、bLH、bHHを算出し、特徴情報生成部1501および量子化部1503に出力する。
特徴情報生成部1501は、DWT係数aLLを用いて明度を生成し、DWT係数aHL、bLH、bHHを用いて複雑度を生成し、DWT係数aHLを用いて垂直エッジ情報(第1特徴情報)を生成し、量子化制御部1502に出力する。量子化制御部1502は、特徴情報生成部1501からの特徴情報(明度、複雑度、エッジ情報)に対応する量子化パラメータを生成して量子化部1503に出力する。量子化部1503は、量子化制御部1502から入力された量子化パラメータを用いて、水平DWT変換部1508から入力されたDWT係数aLL、aHL、bLH、bHHを量子化し、エントロピー符号化部1504に出力する。図6の例と同様、図14の構成においても、画像の上端部分または下端部分を処理する際には水平エッジの判定が実行されない。
水平エッジ判定ラインバッファ1509は、画素ラインバッファ1505に格納されている画素データa、bに基づいた画素平均値M(a+b)を格納する。なお、2×2画素ごとに算出された画素平均値に対する閾値判定(図14)によって取得された判定結果を1ビットのフラグ情報として保持することで、ラインバッファへの複数ビットの格納を回避してもよい。画素ラインバッファLine_Buffer0の画像データaは画素データdで上書きされる。
期間t4において、画素データeが、画素データbを保持している画素ラインバッファ1505(Line_Buffer1)に上書きされる。垂直DWT変換は実行されない。
期間t5において、垂直DWT変換部1506は、画素ラインバッファ1505内の画素データc、d、eを用いてDWT係数dHを算出する。算出されたDWT係数dHは、垂直DWTラインバッファ1507(Line_Buffer4)と水平DWT変換部1508とに出力される。また、垂直DWT変換部1506は、算出されたDWT係数dHと画素ラインバッファ1505内の画素データcと垂直DWTラインバッファ1507内のDWT係数bHとを用いてDWT係数cLを算出し、水平DWT変換部1508に出力する。水平DWT変換部1508は、入力されるDWT係数cL、dHに水平DWT変換を実行して、DWT係数cLL、cHL、dLH、dHHを算出し、特徴情報生成部1501および量子化部1503に出力する。
同時に、画素データa、bの2×2画素ごとの画素平均値M(a+b)、画素データc、dの2×2画素ごとの画素平均値M(c+d)、および画素データe、fの2×2画素ごとの画素平均値M(e+f)が特徴情報生成部1501に出力される。画素平均値M(a+b)は水平エッジ判定ラインバッファ1509に保持されている。画素データc、dは画素ラインバッファ1505(Line_Buffer2、0)に保持されている。画素データeは、画素ラインバッファ1505(Line_Buffer1)に保持され、画素データfは期間t5で入力されたものである。
特徴情報生成部1501は、期間t3と同様に、DWT係数cLL、cHL、dLH、dHHを用いて明度、複雑度、およびエッジ情報を生成して量子化制御部1502に出力する。本実施形態において、水平エッジ情報(第2特徴情報)は、図17の右側に示すように、領域1704の画素平均値M(a+b)、領域1705の画素平均値M(c+d)、および領域1706の画素平均値M(e+f)を用いて生成される。なお、図17の左側は、前述例(図12、図13等)における1LHのサブバンド係数1701~1703を用いた水平エッジ情報の生成を対比的に示している。量子化制御部1502は、期間t3と同様に量子化パラメータを生成して量子化部1503に出力する。量子化部1503は、量子化制御部1502から入力された量子化パラメータを用いて、水平DWT変換部1508から入力されたDWT係数cLL、cHL、dLH、dHHを量子化し、エントロピー符号化部1504に出力する。
水平エッジ判定ラインバッファ1509は、画素ラインバッファ1505に格納されている画素データc、dに基づいた画素平均値M(c+d)を、画素平均値M(a+b)に上書きして格納する。画素ラインバッファLine_Buffer2の画像データcは画素データfで上書きされる。
期間t6において、画素データgが、画素データdを保持している画素ラインバッファ1505(Line_Buffer0)に上書きされる。垂直DWT変換は実行されない。
期間t7において、垂直DWT変換部1506は、画素ラインバッファ1505内の画素データe、f、gを用いてDWT係数fHを算出する。算出されたDWT係数fHは、垂直DWTラインバッファ1507(Line_Buffer3)と水平DWT変換部1508とに出力される。また、垂直DWT変換部1506は、算出されたDWT係数fHと画素ラインバッファ1505内の画素データeと垂直DWTラインバッファ1507内のDWT係数dHとを用いてDWT係数eLを算出し、水平DWT変換部1508に出力する。水平DWT変換部1508は、入力されるDWT係数eL、fHに水平DWT変換を実行して、DWT係数eLL、eHL、fLH、fHHを算出し、特徴情報生成部1501および量子化部1503に出力する。
同時に、画素データc、dの2×2画素ごとの画素平均値M(c+d)、画素データe、fの2×2画素ごとの画素平均値M(e+f)、および画素データg、hの2×2画素ごとの画素平均値M(g+h)が特徴情報生成部1501に出力される。画素平均値M(c+d)は水平エッジ判定ラインバッファ1509に保持されている。画素データe、fは画素ラインバッファ1505(Line_Buffer1、2)に保持されている。画素データgは、画素ラインバッファ1505(Line_Buffer0)に保持され、画素データhは期間t7で入力されたものである。
特徴情報生成部1501は、期間t3、t5と同様に、DWT係数eLL、eHL、fLH、fHHを用いて明度、複雑度、およびエッジ情報を生成して量子化制御部1502に出力する。本実施形態において、水平エッジ情報は、図18の右側に示すように、領域1804の画素平均値M(c+d)、領域1805の画素平均値M(e+f)、および領域1806の画素平均値M(g+h)を用いて生成される。なお、図18の左側は、前述例(図12、図13等)における1LHのサブバンド係数1801~1803を用いた水平エッジ情報の生成を対比的に示している。量子化制御部1502は、期間t3、t5と同様に量子化パラメータを生成して量子化部1503に出力する。なお、量子化制御部1502は、水平エッジまたは垂直エッジが存在すると判定された場合、図8を参照して前述したように特徴分類を変更する。量子化部1503は、量子化制御部1502から入力された量子化パラメータを用いて、水平DWT変換部1508から入力されたDWT係数eLL、eHL、fLH、fHHを量子化し、エントロピー符号化部1504に出力する。
水平エッジ判定ラインバッファ1509は、画素ラインバッファ1505に格納されている画素データe、fに基づいた画素平均値M(e+f)を、画素平均値M(c+d)に上書きして格納する。画素ラインバッファLine_Buffer1の画像データeは画素データhで上書きされる。
以降、同様にして最終ラインの画像データまで処理が繰り返し実行される。
上記した本実施形態の構成によれば、図12および図13等を参照して前述した構成と比較して、垂直方向に亘る画像の特徴を考慮した効率のよい符号化と回路規模の抑制とを両立できる。より具体的には、本実施形態の構成では、前述した構成と比較して、1ライン分の画素ラインバッファLine_Buffer2を追加的に要するものの、2ライン分の水平DWTラインバッファ1209を削減できる。すなわち、本実施形態の構成の合計ラインバッファ数は、前述した構成の合計ラインバッファ数よりも1ライン少ない。したがって、本実施形態の構成では、前述した構成と同様に垂直方向に亘る画像の特徴を考慮した量子化パラメータの生成が可能である上に、前述した構成と比較してラインバッファ数を削減することができる。
なお、上記した本実施形態の構成では、垂直方向に亘る画素値を用いたエッジ判定が実行されているが、垂直方向に亘る画像の特徴の考慮は以上に限定されない。例えば、垂直方向に亘る画素値を用いて暗部検出が実行されてもよい。
以下、さらに、本実施形態の構成における暗部検出(暗部情報の生成)について説明する。まず、図19を参照して、垂直方向に連続する3つの変換係数(垂直3係数)に暗部が含まれるか否かを検出する処理について説明する。図19(a)は、本例における暗部検出に用いられる低周波成分を示す。輝度レベルを示す低周波成分のLLサブバンドの係数を用いて検出処理を実行することで、暗部を検出することができる。本例の検出処理においては、各係数が、所定の閾値を上回る場合に「明部」と判定される一方、所定の閾値以下である場合に「暗部」と判定される。
図19(b)は、暗部であると判定される例を示している。図19(b)における水平軸上の垂直座標位置(m-1~m+1)は、図19(a)の垂直3係数(m-1~m+1)に対応している。図19(b)における垂直軸は、各垂直座標位置における係数値に相当する。図示の通り、垂直座標位置における判定値は、それぞれ、m-1=暗部、m=明部、m+1=明部である。以上のように、所定の閾値に基づいて各係数が明部であるか暗部であるかを判定できる。
しかしながら、前述したように、垂直方向のサブバンド係数に基づいて量子化パラメータを決定する構成では回路規模が肥大化してしまう。そこで、本実施形態では、サブバンド係数に代えて画素値を用いて暗部判定を実行する。
図20を参照して、本発明の第1実施形態の暗部の検出手法について説明する。図20(a)は、サブバンド係数を用いた上記例(左側)による検出手法と、2×2画素値を用いた本実施形態の検出手法(右側)とを対比している。2×2画素を含む画素群2004は、座標m-1のサブバンド係数2001に対応する。同様に、画素群2005は座標mのサブバンド係数2002に対応し、画素群2006は座標m+1のサブバンド係数2003に対応する。
本実施形態では、上記例におけるサブバンド係数に代えて、2×2画素の画素平均値を用いて暗部を判定する。本実施形態の検出処理においては、各画素平均値が、所定の閾値を上回る場合に「明部」と判定される一方、所定の閾値以下である場合に「暗部」と判定される。
図20(b)は、暗部であると判定される本実施形態の例を示している。図20(b)における水平軸上の垂直座標位置(m-1~m+1)は、図20(a)の3つの画素群(m-1~m+1)に対応している。図20(b)における垂直軸は、各垂直座標位置における画素平均値に相当する。図示の通り、垂直座標位置における判定値は、それぞれ、m-1=暗部、m=明部、m+1=明部である。以上のように、所定の閾値に基づいて各画素平均値が明部であるか暗部であるかを判定できる。
図21を参照して、暗部の存在を考慮した特徴分類について説明する。前述した暗部検出において暗部が存在すると判定された場合、図7に示される特徴分類表が図21に示すように変更される。例えば、量子化制御部1502は、領域Q1、Q2(領域2101)に分類される要素を、領域Q0(領域2102)に分類されるように変更する。同様に、量子化制御部1502は、領域Q4、Q5(領域2103)に分類される要素を領域Q3(領域2004)に、領域Q7、Q8(領域2105)に分類される要素を領域Q6(領域2106)に分類されるように変更する。以上の構成によれば、視覚的な劣化が目立ちやすい暗部領域の量子化パラメータを低く維持することができる。
<第2実施形態>
以下、本発明の第2実施形態について説明する。なお、以下に例示する各実施形態において、作用、機能が前提例または第1実施形態と同等である要素については、以上の説明で参照した符号を流用して各々の説明を適宜に省略する。
第1実施形態では、1つのサブバンド係数に対応する2×2画素の画素平均値を用いて水平エッジ判定が実行される。第2実施形態では、水平2画素×垂直1画素(以下、2×1画素と称する場合がある)の画素平均値を併用して水平エッジ判定が実行される。
図22を参照して、本発明の第2実施形態の水平エッジの検出手法について説明する。図22(a)は、サブバンド係数を用いた上記例(左側)による検出手法と、2×1画素値および2×2画素値を用いた本実施形態の検出手法(右側)とを対比している。2×1画素を含む画素群2204は、座標m-1のサブバンド係数2201に対応する。同様に、2×2画素を含む画素群2205は座標mのサブバンド係数2202に対応し、2×1画素を含む画素群2206は座標m+1のサブバンド係数2203に対応する。
本実施形態では、2×1画素値の画素平均値および2×2画素の画素平均値を用いて水平エッジを判定する。本実施形態の検出処理においては、各画素平均値が、所定の閾値を上回る場合に「振幅値大」と判定される一方、所定の閾値以下である場合に「振幅値小」と判定される。そして、以上の判定値(「振幅値大」または「振幅値小」)の配列に従って、水平エッジが存在するか否かが判定される。
図22(b)は、水平エッジが含まれると判定される判定値の配列を例示している。図22(b)における水平軸上の垂直座標位置(m-1~m+1)は、図22(a)の3つの画素群(m-1~m+1)に対応している。図22(b)における垂直軸は、各垂直座標位置における2×1画素または2×2画素の画素平均値に相当する。図示の通り、垂直座標位置における判定値は、それぞれ、m-1=振幅値小、m=振幅値大、m+1=振幅値小であって、垂直座標位置がm-1からm+1に変化する際に閾値を跨ぐ振幅値(画素平均値)の変化が生じている。以上のように閾値を跨ぐ振幅値の変化が生じていることは、3つの画素群に相当する箇所において画像の垂直方向の連続性が破れていることを示すので、水平エッジが存在すると判定される。
図23は、上記した判定処理を実行可能な本実施形態に係る符号化装置230の構成を例示するブロック図である。符号化装置230は、ウェーブレット変換部2300、特徴情報生成部2301、量子化制御部2302、量子化部2303、およびエントロピー符号化部2304を有する。以上の要素は、それぞれ、図15のウェーブレット変換部1500、特徴情報生成部1501、量子化制御部1502、量子化部1503、およびエントロピー符号化部1504に対応している。図23において不図示の要素、特にプレーン変換部以前の要素は、第1実施形態と同様に構成されると好適である。したがって、本実施形態の符号化装置230は、撮像部を有する撮像装置として機能する。
ウェーブレット変換部2300は、分解レベル1のDWT変換に用いられる画素ラインバッファ2305、垂直DWT変換部2306、垂直DWTラインバッファ2307、および水平DWT変換部2308を有する。第1実施形態と同様に、ウェーブレット変換部2300は水平DWTラインバッファを有さない。第2実施形態の画素ラインバッファ2305(2ライン)は、第1実施形態の画素ラインバッファ1505(3ライン)よりも1ライン少ない。特徴情報生成部2301は、水平エッジの判定に用いられる水平エッジ判定ラインバッファ2309を有する。
第1実施形態と同様、符号化装置230が有する機能ブロックは、符号化装置230が有する1つ以上のCPU等のプロセッサが、不揮発性メモリに格納されたプログラムを揮発性メモリに展開して実行することによって実現される。
図24は、図23に示す符号化装置230において実行されるDWT変換、特徴情報生成、並びに量子化およびエントロピー符号化の時系列を示すタイミングチャートである。本実施形態では、符号化装置230が、第1実施形態と同様に垂直DWT変換および水平DWT変換を実行する。
図24は、第1実施形態の図16に対応しているが、少なくとも以下の点において相違する。図24の「水平エッジ判定ラインバッファ」行に示されるバーは、画素ラインバッファ2305から出力される2×1画素ごとの画素平均値が、対応期間において水平エッジ判定ラインバッファ2309に一時的に保持されていることを示す。例えば、期間t3~t4において、画素データbに基づいた0.5ライン分の2×1画素ごとの画素平均値M(b)が水平エッジ判定ラインバッファ2309に保持される。また、期間t5~t6において、画素データdに基づいた0.5ライン分の2×1画素ごとの画素平均値M(d)が水平エッジ判定ラインバッファ2309に保持される。
図23に示す符号化装置230が図24に示す期間において実行する符号化処理を以下に時系列的に説明する。
期間t0、t1において、それぞれ、画素データa、bが画素ラインバッファ2305に入力される。以上の期間t0、t1では、垂直DWT変換を実行するのに必要なライン数の画素データがウェーブレット変換部2300に入力されていない。したがって、入力された画素データa、bは、それぞれ、画素ラインバッファLine_Buffer0、1に保持されるが、垂直DWT変換は実行されない。
期間t2において、垂直DWT変換部2306は、画素ラインバッファ2305内の画素データa、bおよび入力された画素データcを用いてDWT係数bHを算出する。算出されたDWT係数bHは、垂直DWTラインバッファ2307(Line_Buffer2)と水平DWT変換部2308とに出力される。また、垂直DWT変換部2306は、画素ラインバッファ2305内の画素データaと算出されたDWT係数bHとを用いてDWT係数aLを算出し、水平DWT変換部2308に出力する。水平DWT変換部2308は、入力されるDWT係数aL、bHに水平DWT変換を実行して、DWT係数aLL、aHL、bLH、bHHを算出し、特徴情報生成部2301および量子化部2303に出力する。
特徴情報生成部2301は、DWT係数aLLを用いて明度を生成し、DWT係数aHL、bLH、bHHを用いて複雑度を生成し、DWT係数aHLを用いて垂直エッジ情報(第1特徴情報)を生成し、量子化制御部2302に出力する。量子化制御部2302は、特徴情報生成部2301からの特徴情報に対応する量子化パラメータを生成して量子化部2303に出力する。量子化部2303は、量子化制御部2302から入力された量子化パラメータを用いて、水平DWT変換部2308から入力されたDWT係数aLL、aHL、bLH、bHHを量子化し、エントロピー符号化部2304に出力する。
画素ラインバッファ2305(Line_Buffer1)から画素データbに基づく2×1画素ごとの画素平均値M(b)が水平エッジ判定ラインバッファ2309に出力され格納される。なお、画素ラインバッファLine_Buffer0の画像データaは、DWT係数aLの算出後に画素データcで上書きされる。
期間t3において、画素データdが、画素データbを保持している画素ラインバッファ2305(Line_Buffer1)に上書きされる。期間t0~t1と同様、垂直DWT変換を実行するのに必要なライン数の画素データがウェーブレット変換部2300に入力されていないので、垂直DWT変換は実行されない。
期間t4において、垂直DWT変換部2306は、画素ラインバッファ2305内の画素データc、dおよび入力された画素データeを用いてDWT係数dHを算出する。算出されたDWT係数dHは、垂直DWTラインバッファ2307(Line_Buffer3)と水平DWT変換部2308とに出力される。また、垂直DWT変換部2306は、算出されたDWT係数dHと画素ラインバッファ2305内の画素データcと垂直DWTラインバッファ2307内のDWT係数bHとを用いてDWT係数cLを算出し、水平DWT変換部2308に出力する。水平DWT変換部2308は、入力されるDWT係数cL、dHに水平DWT変換を実行して、DWT係数cLL、cHL、dLH、dHHを算出し、特徴情報生成部2301および量子化部2303に出力する。
同時に、画素データbの2×1画素ごとの画素平均値M(b)、画素データc、dの2×2画素ごとの画素平均値M(c+d)、および画素データeの2×1画素ごとの画素平均値M(e)が特徴情報生成部2301に出力される。画素平均値M(b)は水平エッジ判定ラインバッファ2309に保持されている。画素データc、dは画素ラインバッファ2305(Line_Buffer0、1)に保持されている。画素データeは期間t4で入力されたものである。
特徴情報生成部2301は、期間t2と同様に、DWT係数cLL、cHL、dLH、dHHを用いて明度、複雑度、およびエッジ情報を生成して量子化制御部2302に出力する。本実施形態において、水平エッジ情報(第2特徴情報)は、図25の右側に示すように、領域2504の画素平均値M(b)、領域2505の画素平均値M(c+d)、および領域2506の画素平均値M(e)を用いて生成される。なお、図25の左側は、前述例(図12、図13等)における1LHのサブバンド係数2501~2503を用いた水平エッジ情報の生成を対比的に示している。量子化制御部2302は、期間t2と同様に量子化パラメータを生成して量子化部2303に出力する。量子化部2303は、量子化制御部2302から入力された量子化パラメータを用いて、水平DWT変換部2308から入力されたDWT係数cLL、cHL、dLH、dHHを量子化し、エントロピー符号化部2304に出力する。
水平エッジ判定ラインバッファ2309は、画素ラインバッファ2305に格納されている画素データdに基づいた画素平均値M(d)を、画素平均値M(b)に上書きして格納する。画素ラインバッファLine_Buffer0の画像データcは、DWT係数cLの算出後に画素データeで上書きされる。
期間t5において、画素データfが、画素データdを保持している画素ラインバッファ2305(Line_Buffer1)に上書きされる。期間t5では、期間t0、t1、t3と同様、垂直DWT変換を実行するのに必要なライン数の画素データがウェーブレット変換部2300に入力されていないので、垂直DWT変換は実行されない。
期間t6において、垂直DWT変換部2306は、画素ラインバッファ2305内の画素データe、fおよび入力された画素データgを用いてDWT係数fHを算出する。算出されたDWT係数fHは、垂直DWTラインバッファ2307(Line_Buffer2)と水平DWT変換部2308とに出力される。また、垂直DWT変換部2306は、算出されたDWT係数fHと画素ラインバッファ2305内の画素データeと垂直DWTラインバッファ2307内のDWT係数dHとを用いてDWT係数eLを算出し、水平DWT変換部2308に出力する。水平DWT変換部2308は、入力されるDWT係数eL、fHに水平DWT変換を実行して、DWT係数eLL、eHL、fLH、fHHを算出し、特徴情報生成部2301および量子化部2303に出力する。
同時に、画素データdの2×1画素ごとの画素平均値M(d)、画素データe、fの2×2画素ごとの画素平均値M(e+f)、および画素データgの2×1画素ごとの画素平均値M(g)が特徴情報生成部2301に出力される。画素平均値M(d)は水平エッジ判定ラインバッファ2309に保持されている。画素データe、fは画素ラインバッファ2305(Line_Buffer0、1)に保持されている。画素データgは期間t6で入力されたものである。
特徴情報生成部2301は、期間t2、t4と同様に、DWT係数eLL、eHL、fLH、fHHを用いて明度、複雑度、およびエッジ情報を生成して量子化制御部2302に出力する。本実施形態において、水平エッジ情報は、図26の右側に示すように、領域2604の画素平均値M(d)、領域2605の画素平均値M(e+f)、および領域2606の画素平均値M(g)を用いて生成される。なお、図26の左側は、前述例(図12、図13等)における1LHのサブバンド係数2601~2603を用いた水平エッジ情報の生成を対比的に示している。量子化制御部2302は、期間t2、t4と同様に量子化パラメータを生成して量子化部2303に出力する。量子化部2303は、量子化制御部2302から入力された量子化パラメータを用いて、水平DWT変換部2308から入力されたDWT係数eLL、eHL、fLH、fHHを量子化し、エントロピー符号化部2304に出力する。
水平エッジ判定ラインバッファ2309は、画素ラインバッファ2305に格納されている画素データfに基づいた画素平均値M(f)を、画素平均値M(d)に上書きして格納する。画素ラインバッファLine_Buffer0の画像データeは、DWT係数eLの算出後に画素データgで上書きされる。
以降、同様にして最終ラインの画像データまで処理が繰り返し実行される。
上記した本実施形態の構成によれば、第1実施形態と同様の技術的効果が奏される。加えて、第1実施形態と比較して、1ライン分の画素ラインバッファをさらに削減することができる。
<その他の実施形態>
以上、本発明の好ましい実施の形態について説明したが、本発明は上述した実施の形態に限定されず、その要旨の範囲内で種々の変形及び変更が可能である。
以上の実施形態においては、符号化装置100、150、230が撮像部101を有する撮像装置として構成されているが、以上のような撮像部を有さず、外部からRAWデータが供給されるPC等の情報処理装置が本発明に係る符号化装置として機能してよい。すなわち、以上の実施形態における撮像部101および記録媒体108は、本発明に係る符号化装置に必須の構成要素ではない。
また、例えば、本発明は、上述の実施形態の1以上の機能を実現するプログラムをネットワークや記憶媒体を介してシステムや装置に供給し、そのシステム又は装置のコンピュータの1つ以上のプロセッサがプログラムを読み出して実行する処理でも実現できる。また、本発明は、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。