以下、添付の図面を参照しながら、発明の実施形態について詳細に説明する。
[実施形態1]
(画像処理装置の説明)
以下、発明の実施形態に対応する画像処理装置を説明する。図1(a)は発明の実施形態における画像処理装置の構成の一例を示す図である。画像処理装置100は、例えば取得部10、画像符号化部20、バッファ30、出力部40を有する。図1の画像処理装置100において、各ブロックは、撮像素子や表示素子のような物理的デバイスを除き専用のデバイス、ロジック回路やメモリを用いてハードウェア的に構成されてもよい。或いは、メモリに記憶されている処理プログラムをCPU等のコンピュータが実行することにより、ソフトウェア的に構成されてもよい。画像処理装置100は例えばデジタルカメラとして実施することができるが、それ以外にも、例えばパーソナルコンピュータ、携帯電話、スマートフォン、PDA、タブレット端末、デジタルビデオカメラなどの任意の情報処理端末或いは撮像装置とすることができる。
図1(a)において、取得部10は画像データを入力する機能を有する。取得部10は、例えば、撮像センサを備える撮像部や、外部から伝送路を介して画像データを入力する構成を含む。或いは、取得部10は、記録媒体などから画像データを読み出す構成を含む。また、取得される画像データは、静止画データであってもよく、動画データであってもよい。取得部10が取得する画像データが動画データの場合、複数のフレームの動画データが連続的に取得されてもよい。
取得部10は、取得した画像データを画像符号化部20に供給する。画像符号化部20は、取得部10から供給される画像データをパルス符号変調(PCM)または差分パルス符号変調(DPCM)のいずれかの符号化方式に従って符号化し、情報量が圧縮された符号化データを出力する。出力された符号化データは、出力部40による出力タイミングを調整するためにバッファ30に一時的に保持される。バッファ30は、画像符号化部20から出力された符号化データ及びダミーデータ(スタッフィングデータ)を記憶するために必要な記憶容量を有する。出力部40は、バッファ30に保持された符号化データを後段の処理部に出力し、当該処理部で現像処理や更なる圧縮処理が実施される。
本実施形態では、画像符号化部20から出力される符号化データの符号量(ブロック符号長)が目標符号量よりも少ない場合、出力部40からの送信タイミングを合わせるためにバッファ30において符号化データにダミーデータを挿入(スタッフィング処理)して、出力する符号化データの符号量を目標符号量に一致させるようにしている。例えば、変化の少ない平坦画像の場合、PCM符号化方式よりもDPCM符号化方式の方が圧縮効率が高いため、DPCM符号化方式が採用され、仮に量子化ステップを最小としても符号化データの符号量が目標符号量よりも小さくなりえる。この時、目標符号量に満たない分はスタッフィング処理によりダミーデータが挿入される。ダミーデータの挿入は瞬間的な符号化データの発生とみなされる。そこで、ダミーデータの変動を吸収するようにバッファ容量を決定する必要があり、必要とされるバッファ容量は1シンボルに発生する符号化データサイズと、挿入されるダミーデータの最大データサイズとに応じた値となる。
その一方で、例えば図1(a)の構成を1チップ内に実装することを想定した場合、バッファ30のサイズはできるだけ小さい方が望ましい。よって、使用する可能性のあるダミーデータの量をできるだけ少なくしてバッファサイズを最小化することが望ましい。以下に説明する本実施形態では、効率的な符号化により画素間での差分が大きい部分での画質劣化を低減しつつ、必要とされるバッファサイズをできるだけ縮小するための技術を提供する。
なお、図1(a)では、取得部10、画像符号化部20、バッファ30及び出力部40を独立した構成として示しているが、画像処理装置100に実装するに当り、これらを一体に例えば1チップに統合してもよいし、あるいは別体として独立に構成しても良い。
(画像符号化部の説明)
以下、図1(b)を参照して、発明の実施形態に対応する画像符号化部20の構成を説明する。図1(b)は、発明の実施形態に係る画像符号化部20の構成例を示すブロック図である。以下、本実施形態の画像符号化部20の各ブロックの動作について説明する。
図1(a)に示した画像符号化部20は、仮符号化系110と本符号化系120の2つの大ブロックより構成される。さらに仮符号化系110は符号化部111A〜111D、QP決定部115から構成され、本符号化系120で本符号化を行う際に使用する量子化パラメータのセットを決定するように動作する。本符号化系120は遅延部121、符号化部111E、多重化部123で構成され、仮符号化系110で決定された量子化パラメータのセットを用いた量子化処理を含む本符号化を実行するように動作する。画像符号化部20は、画像符号化装置として専用のデバイス、ロジック回路やメモリを用いてハードウェア的に一体的に構成されても良いし、或いは、複数のデバイス等で分散して構成されてもよい。或いは、メモリに記憶されている処理プログラムをCPU等のコンピュータが実行することにより、ソフトウェア的に構成されてもよい。
画像符号化部20には、外部から符号化対象となる画像データが入力端子101を介して入力される。本実施形態では画像データの形式として、図4(a)に示すRGB画像データを例として説明するが、他のデータ形式であっても良い。他のデータ形式の詳細は本実施形態の最後に図4(b)及び(c)を参照して説明する。また、画像データはラスタースキャン順に入力され、各カラー要素であるR(赤)、G(緑)、B(青)の各画素データは時分割に多重されており順次入力されるものとする。また各画素のビット深度は一例として10ビットとする。
(符号ブロックと画素グループの説明)
本実施形態において画像符号化部20が実行する画像符号化処理では、入力画像データを所定サイズ(画素数)を有するブロック(以下、「符号化ブロック」という)に分割し、符号化ブロック単位に符号化を行うものとする。また、符号化ブロックは1つ以上の所定数の画素からなる「画素グループ」にさらに分割される。画素グループは後述する符号化方式(PCM/DPCM)の切り替えや、量子化パラメータ(以下、「QP」という)の切り替えを行う単位となる。画素グループは同一座標の画素や隣接画素など相関性の高い画素で構成されることが望ましく、単一のカラー要素のみで構成してもよいし、複数のカラー要素で構成してもよい。
本実施形態では、RGB画像データの各カラー要素それぞれ水平16画素×垂直1画素×3色=48画素を符号化ブロックとする。また、各カラー要素の1画素ずつの計3画素を画素グループとする。
図4(a)は本実施形態における符号化ブロックを構成する画素データと、画素グループとの関係を説明するための図である。図4(a)に示すように、符号化ブロックは、R、G、Bの各カラー要素について16画素ずつから構成され、画素位置に応じてR、G、Bからなるカラー要素の組のそれぞれにグループ番号が割り当てられ、各画素には画素番号0から47までのいずれかがそれぞれ割り当てられている。例えば、各カラー要素の1画素目のデータであるR0、G0、B0はグループ番号が「0」の画素グループを構成し、2画素目のデータであるR1、G1、B1はグループ番号が「1」の画素グループを構成している。本実施形態では、各画素のデータのことを「画像データ」と呼ぶことにする。
(符号化部111の説明)
次に、仮符号化系110、本符号化系120で共通に使用される符号化部111の構成及び動作について、図3を参照して説明する。図3は符号化部111の構成例を示すブロック図である。図3に示すように、符号化部111は、例えば量子化部301、予測部302、減算器303、可変長符号化部304、PCM符号長算出部305、符号長比較部306、セレクタ307、308を含んで構成される。
符号化部111には、画像データ、QP及び強制PCMフラグが入力される。仮符号化系110の場合、QPは符号化部111Aから111Dのそれぞれに対して固定値として予め割り当てられていてもよい。図1(b)では一例として、符号化部111Aから111Dまで順にQPとして0、1、2、3がそれぞれ割り当てられている場合を示している。仮符号化系110の場合、各符号化部が予めQPの値を保持していても良い。本符号化系120には、仮符号化系110で決定されたQPと強制PCMフラグとがQP決定部115から入力される。
強制PCMフラグは、後述するPCM/DPCM選択時において、符号長比較部306に強制的にPCM方式を選択させるかどうかを制御するためのフラグ信号である。本実施形態において、強制PCMフラグの値が「1」の場合に強制PCMが有効となり、「0」の場合に強制PCMは無効となる。仮符号化系110の場合、符号化部111Aから111Dでは強制PCMを行わないため、各符号長比較部306に入力される強制PCMフラグの値は「0」となる。本符号化系120の場合、仮符号化系110で決定された強制PCMフラグがQP決定部115から符号長比較部306に入力される。以下、符号化部111の具体的構成及びその動作について詳述する。
まず、符号化部111に入力された画像データは量子化部301に入力される。量子化部301は与えられたQPにより入力画像データを量子化し、量子化されたデータを予測部302、減算器303、セレクタ307にそれぞれ出力する。本発明では量子化部301で量子化された量子化データをPCMデータと呼ぶ。本実施形態では、QPの値を0を最小値とする整数値とし、0から3までの範囲で変更できるものとして説明するが、より大きなQPの値を設定して更に大きな量子化ステップを使用しても良い。
本実施形態において量子化部301は、QPが小さいほど量子化ステップを小さく(細かく)し、QPが大きいほど量子化ステップを大きく(粗く)する。そして、QPが1増えるとPCMデータの有意ビットが1ビット減少するように量子化を行う。例えば、式1で表される量子化を行う。
Quant = Data / (1 << QP) ・・・式1
(Quant:量子化データ、Data:入力画像データ、QP:量子化パラメータである。)
また、1<<QPとは、入力された画像データが、QPで示されるビット数だけ、ビットシフトすることを示す。
式1のように量子化することよってQPに対する出力値、有意ビットは以下のようになる。
QP=0:量子化ステップ=1、入力データは量子化されずそのまま出力。有意ビット不変。
QP=1:量子化ステップ=2、入力データは1/2に量子化。有意ビットは1ビット減少。
QP=2:量子化ステップ=4、入力データは1/4に量子化。有意ビットは2ビット減少。
QP=n:量子化ステップ=(1<<n)、入力データは1/(1<<n)に量子化。有意ビットはnビット減少。
上記式1は本実施形態における量子化処理の一例を示すものであって、これに限定されるものではない。QPが1変化するたびに符号長が1ビット減少するような量子化であればよい。例えば非線形量子化を行ってもよい。本実施形態において、QP=0からQP=nまでQPの値を1ずつ増加させることを量子化ステップを1段上げる、1段大きくする、1段粗くする等といい、逆にQP=nからQP=0までQPの値を1ずつ減少させることを量子化ステップを1段下げる、1段小さくする、1段細かくする等というものとする。
PCM符号長算出部305は、量子化部301から出力されたPCMデータの符号長を、画像データのビット数(本実施形態では10ビット)とQPとから、下記の式2を用いて決定する。
PCM符号長 = 画像データビット数 − QP ・・・式2
本実施形態では、QPの値が1増える毎に、PCMデータの符号長が1ビットずつ減少する。よって、QP=0を初期値として、QPが1増える毎に、PCMデータの符号長は10ビットから1ビットずつ短くなる。ここで、仮符号化系110では、QPの値は符号化部111Aから111Dのそれぞれについて固定的に割り当てられているのでPCM符号長も固定値となる。よって、PCM符号長算出部305は式2の演算によりPCM符号長を算出するのではなく、割り当てられたQPの値に基づくPCM符号長の固定値を保持し、出力する構成であってもよい。PCM符号長算出部305は、決定したPCM符号長を符号長比較部306とセレクタ308とにそれぞれ出力する。
次に、予測部302の動作を説明する。予測部302は図3に示すように逆量子化部310、画素遅延部311、量子化部312を含むように構成される。予測部302に入力されたPCMデータは逆量子化部310にて一旦逆量子化された後、画素遅延部311に入力される。逆量子化部310での逆量子化処理では、量子化部301が画像データの量子化に使用したQPがそのまま用いられる。画素遅延部311は、同じカラー要素の前値が予測データとなるようカラー要素分遅延する。
例えば、本実施形態では図4(a)に示すようにRGBの各カラー要素の画像データが順に入力され、画像データG0の符号化後、次にG1を符号化するまでにB0、R1の画像データを先に符号化する。よって、画素遅延部311は3画素分遅延させて、G1を符号化するタイミングで量子化部312に対して保持していた逆量子化された画像データを出力する。量子化部312は、画素遅延部311から入力された画像データを量子化する。このとき量子化部312には、量子化部301が画像データG1を量子化する際に用いるQPが入力されるので、量子化部301と量子化部312との間で量子化ステップが一致する。予測部302で逆量子化を行った後で再度量子化する構成は、QPの値が画素間で異なる場合に量子化ステップを一致させるために必要な構成であって、本符号化系120では必須である。一方、仮符号化系110ではQPは固定のため逆量子化部310、量子化部312を省略して、画素遅延部311だけでもよい。量子化部312での量子化結果は予測データとして減算器303に出力される。なお、各カラー要素の符号化ブロックの最初の画素(R0、G0、B0)は前画素が存在しないため、予測データとしては0の値を出力する。
減算器303は、量子化部301からのPCMデータと、予測部302からの予測データとの差分を予測差分データとして、可変長符号化部304へ出力する。予測差分データは正負の値を持つデータであり、画像データの変動の小さい平坦な部分では0付近の値となり、変動の大きいエッジ部分などでは大きな値になる。予測差分データは一般に0を中心としたラプラス分布の特性を持つ。
可変長符号化部304は、入力された予測差分データに対して所定の可変長符号化方式による符号化を行って、1画素毎に符号データと符号長とを出力する。符号データはセレクタ307へ出力され、符号長は符号長比較部306及びセレクタ308にそれぞれ出力される。所定の可変長符号化方式には、例えばハフマン符号、ゴロム符号などが含まれる。可変長符号化部304が実行する可変長符号化方式では、入力値が0の場合に最も短い符号長の符号データが割り当てられており、入力値の絶対値が大きくなるほど、符号データの符号長は長くなる。なお、本実施形態において、可変長符号化部304から出力される符号データをDPCMデータと呼び、同符号長をDPCM符号長と呼ぶ。
符号長比較部306は、PCM符号長とDPCM符号長とを前述の画素グループ単位で比較し、符号長がより小さくなる符号データを選択するためのPCM/DPCM選択フラグを生成する。なお、入力された強制PCMフラグの値が「1」の場合はPCM符号長とDPCM符号長との比較結果によらず、PCMを選択するフラグが生成される。符号長比較部306は、画素グループを構成するR、G、Bの各色のPCM符号長とDPCM符号長とを保持するように構成される。PCM/DPCM選択フラグは、セレクタ307、セレクタ308に出力され、各セレクタでの出力データの切替えに用いられる。また、符号化部111の外部にも出力される。
符号長の比較は前述した画素グループ単位で行われる。画素グループ単位での符号長の比較は具体的には以下のように算出する。ここでは、図4(a)のRGBコンポネント形式のデータ入力について、グループ番号1の画素を対象に実行した例を示している。
S_PCM_R1:R1のPCM符号長
S_PCM_G1:G1のPCM符号長
S_PCM_B1:B1のPCM符号長
S_DPCM_R1:R1のDPCM符号長
S_DPCM_G1:G1のDPCM符号長
S_DPCM_B1:B1のDPCM符号長
PCM_DPCM_SEL_FLAG:PCM/DPCM選択フラグ
FORCE_PCM[1]:画素グループ1の強制PCMフラグ
S_PCM =S_PCM_R1 +S_PCM_G1 +S_PCM_B1
S_DPCM=S_DPCM_R1+S_DPCM_G1+S_DPCM_B1
if(FORCE_PCM[1] == 1)
PCM_DPCM_SEL_FLAG = 0
else{
if(S_PCM > S_DPCM)
PCM_DPCM_SEL_FLAG = 1
else
PCM_DPCM_SEL_FLAG = 0
}
符号長比較部306は、PCM強制フラグの値を判定し、PCM強制フラグの値が「1」の場合にはPCM/DPCM選択フラグの値を0とする。一方、PCM強制フラグの値が「0」の場合は、画素グループごとにPCM符号長またはDPCM符号長を合計してグループの符号長の合計(S_PCM、S_DPCM)を算出する。次に、これを比較して、DPCM符号長の合計の方が小さい場合にPCM/DPCM選択フラグの値を1とし、PCM符号長の合計の方が小さい場合にPCM/DPCM選択フラグの値を0とする。
セレクタ307にはPCMデータとDPCMデータが入力されており、PCM/DPCM選択フラグに従って符号データが選択されて、符号化部111の外部へと出力される。ここでは、PCM強制フラグの値が「0」である場合、PCMデータとDPCMデータのうち、符号長の小さい方の符号データが選択される。具体的に、PCM/DPCM選択フラグの値が1の場合はDPCMデータが選択され、フラグ値が0の場合はPCMデータが選択される。セレクタ308にはPCM符号長とDPCM符号長が入力されており、PCM/DPCM選択フラグに従った符号長が選択されて、符号化部111の外部へと出力される。このとき、PCM/DPCM選択フラグのフラグ値が1の場合はDPCM符号長が選択され、フラグ値が0の場合はPCM符号長が選択される。
(仮符号化系の説明)
ここで図1の画像符号化部20の説明に戻り、仮符号化系110における仮符号化処理について説明する。図1の仮符号化系110に入力された画像データは複数の符号化部111A〜111Dによって、QPが0〜3でそれぞれ仮符号化が行われ符号長がQP決定部115に出力される。この符号長は、各QPに対応する量子化ステップで量子化処理を行った量子化結果をPCMまたはDPCMで符号化した符号データの符号長を表す。符号化部111A〜111Dは図3に示した構成を有し、入力信号として強制PCMフラグが存在するが、この仮符号化系110では強制PCMフラグは0に固定して強制PCMを無効とする。また、出力信号として、符号データ、符号長、PCM/DPCM選択フラグが存在するが、この仮符号化系110では符号長のみを使用し、符号データ、PCM/DPCM選択フラグは使用しなくてもよい。
なお、本実施形態では符号化に用いるQPの範囲として0〜3としたため、仮符号化系110は符号化部111を4つ備えているが、発明の実施形態は当該構成に限定されるものではなく、符号化に用いるQPの範囲に応じて、符号化部111の数を変更することができる。
QP決定部115は前段の符号化部111A〜111Dから入力されたQP毎の複数の符号長の情報に基づき、画素グループ単位に適用するQP(適用QP)を決定する。以下、QP決定部115における適用QPの決定方法の詳細を説明する。
本施形態における、QP決定部115が実行する処理手順の概要を、図5を用いて説明する。図5において、符号化ブロック毎に本処理が開始されると、S501にてQP決定部115は符号化部111A〜111Dから、各符号化部に割り当てられたQP毎に算出された符号長の情報を画素グループ単位に取得する。以下、取得される符号データの符号長を、QPの値:qp、画素グループ番号:pgを要素とする、pg_size[qp][pg]と表す。qpは0から3までの値をとり、pgは0から15までの値をとる。
次に、S502においてQP決定部115は、QP毎に符号化ブロック全体の符号長を算出する。符号化ブロック全体の符号長の算出に際しては符号化データに多重するヘッダ情報の符号長を加味する必要がある。ヘッダ情報とは復号時に必要な画素グループ毎のQPやPCM/DPCM選択フラグの情報であり、ヘッダ情報の符号長は、本実施形態ではQP(0〜3)の表現のための2ビット×16画素グループ=32ビットと、PCM/DPCM選択フラグの1ビット×16画素グループ=16ビットの合計48ビットとなる。このとき、ヘッダ情報の符号長はQPや画像データの値に依らず固定値として予め予測可能であるので、ヘッダ情報の符号長を除外して符号化ブロックの符号長を算出してもよい。
ヘッダ情報の符号長hd_size(=48ビット)と、全画素グループの符号長との合計を加算したブロック符号長bl_size[qp]の算出が行われる。図9(a)は、pg_size[qp][pg]とbl_size[qp]の値の具体的な例を示す。図9(a)において、例えば参照番号901が示す値(30)はpg_size[0][0]であり、符号化ブロックにおける先頭の画素グループをQP=0で符号化した場合の符号長を示す。同様に、参照番号902が示す値(18)はpg_size[0][15]であり、符号化ブロックにおける最後の画素グループをQP=0で符号化した場合の符号長を示す。また、参照番号903が示す値(382)はbl_size[0]であり、QP=0で符号化した場合のブロック符号長を示し、参照番号904が示す値(293)はbl_size[3]であり、QP=3で符号化した場合のブロック符号長を示す。それぞれの値はビット単位で表されている。同図の値は以降の説明でも、具体的な値の例として用いて説明する。また、図9(d)は、pg_size[qp][pg]とbl_size[qp]の値について、図9(a)とは異なる具体例を示す。図9(d)は符号化対象の画像データが比較的変化の少ない平坦画像の場合の符号化結果に対応している。図9(d)の例は図9(a)の例と比べて、画素データの変動が少ないため、各画素グループとも少ない符号長となっている。
次に、S503においてQP決定部115は、bl_size[qp]の中から所定の目標符号量target_size以下で、かつ最大の値を有するブロック符号長をsel_sizeに選定し、この時のqpをsel_qpに選定する。S503における具体的な処理は、図6のフローチャートに示すとおりである。
まずS601にて、QP決定部115はQPの値:qpを0に初期化する。次にS602にてQP決定部115は、現在選択されているQPにおける符号化ブロックの符号長:bl_size[qp]と目標符号量:target_sizeとを比較する。比較の結果、bl_size[qp]がtarget_size以下である場合(S602で「YES」)にはS603に移行し、bl_size[qp]がtarget_sizeより大きい場合(S602で「NO」)にはS605に移行する。
S603では、S602において判定対象となったbl_size[qp]を選択すべきブロック符号長sel_sizeに決定する。次いでS604では、bl_size[qp]のQPの値を符号化ブロックの暫定的なQPを表すsel_qpに決定し、処理を終了する。
S605では、現在選択されているQPの値が最大値(MAX_QP)よりも小さいかどうかを判定し、最大値より小さい場合(S605で「YES」)はS606においてQPの値を1つ更新し、S602に戻って処理を継続する。現在のQPの値が最大値以上の場合(S605で「NO」)は処理を終了する。本実施形態におけるMAX_QPの値は3となる。なお、S605でNOと判定された場合、目標符号量より小さいブロック符号長が存在せず、QPを選択できないこととなる。しかし、実際には、画像データのビット数に基づき、QPの設定範囲及び目標符号量の値を予め調整することにより、QPの最小値から最大値の間で目標符号量を下回るブロック符号長が得られるように設計することができる。
このようにQP=0の初期値から1ずつ更新して、量子化ステップを1から2へ、2から4へと1段ずつ上げながら符号化ブロックの符号長を順に目標符号量と比較していく。そして、最初に目標符号量以下となった符号長に対応するQPの値を暫定的なQP値とすることができる。目標符号量target_sizeの具体的値については、本実施形態では例示的に360ビットとして説明する。この値は、符号化前の画像データの情報量が10ビット×3×16=480ビットであるので、その3/4に相当する。目標符号量の大きさは期待する圧縮率に応じて任意に設定することができる。図9(a)に示す例では、QP:2のブロック符号長bl_size[2]である326(ビット)が目標符号量360ビットよりも小さく、sel_sizeとして選定される。またこのときのQPの値2がsel_qpに決定される。ここで、符号化ブロックの符号長にヘッダ情報の符号長を含めていない場合、目標符号量の値は360ビットからヘッダ情報の符号長を差し引いた値となる。上述の例ではヘッダの符号長は48ビットであったので、この場合の目標符号量は312ビットとなる。また、図9(d)に示す例では、QP:0のブロック符号長bl_size[0]である252(ビット)でも目標符号量360ビットよりも小さくなるので、252がsel_sizeとして選定され、sel_qpは0に決定される。ここで設定されたブロック符号長のパラメータsel_sizeは、後述のS505における強制PCMフラグの生成処理において、ブロック符号長pre_sizeとして用いられる。
図5の説明に戻り、S504ではQP決定部115がS503で決定した符号化ブロックの暫定的なQPの値sel_qpに対し画素グループ単位の調整を行う。これにより、画素グループ単位の適用QP:pg_qp[pg]を決定することができる。S504におけるpg_qp[pg]を決定するための処理は、例えば、図7Aまたは図7Bのフローチャートの処理に従って実行することができる。S504において、図7Aまたは図7Bのいずれかの処理を行うことができる。
図7AはS504の処理の一例を示している。図7Aにおいて、まずS700では、QP決定部115は、S503で決定されたQP:sel_qpが0でないかを判定する。QPが0の場合、本処理によりQPを変更することはできないので処理を終了し、S505に移行する。例えば、図9(d)の例では、QP=0が選択されているのでS505に移行する。一方、図9(a)の例のようにQPが0で無い場合は、S711以降の処理を行う。
続くS701では、QP決定部115は画素グループ単位の適用QPであるpg_qp[pg]を、S503で決定された暫定的なQPの値sel_qpで初期化する。このとき、pg_qp[0]〜pg_qp[15]までの全てがsel_qpの値に初期化される。図9(a)の例では、QP=2が選択されたのでpg_qp[0]〜pg_qp[15]は全て2に初期化される。次にS702において、QP決定部115は処理対象の画素グループの番号を示すパラメータpgを初期化する。画素グループは0から15までの16グループがあるので、pg=0に初期化される。
続くS703では、QP決定部115は現在選択されているQPを示すパラメータqpの値をsel_qpの値で初期化し、S704に移行する。S704では、QP決定部115はpg_size[qp][pg]とpg_size[sel_qp][pg]とを比較し、両者が一致するか否かを判定する。ここで、pg_size[qp][pg]は、S702、S703で設定された画素グループの番号pgとqpとの値における符号長を表す。またpg_size[sel_qp][pg]は、画素グループの番号pgとsel_qpに一致するqpとの値における符号長を表す。
S704にて両者が一致すると判定された場合(S704で「YES」)、S705に移行して、QP決定部115はその時点でのqpの値を、画素グループ単位の適用QP:pg_qp[pg]の値とする。その後、S706に移行する。また、S704にて両者が一致しない判定された場合(S704で「NO」)、S708に移行する。S706では、QP決定部115はqpの値が最小値である0より大きいか否かを判定する。S706にて、qpの値が0であれば(S706で「NO」)S708に移行する。一方、0より大きい値と判定されれば(S706で「YES」)、S707に移行してqpの値を1だけ減じてS704に戻って処理を継続する。例えばqpがsel_qp=2に設定されていた場合は、新たに1に設定されS704に戻って符号長が一致するかどうかが判定されることになる。
ここで、S704からS707の処理の具体例を、図9(a)を参照して説明する。図9(a)の例では、sel_qp=2とする。まず、初期化により画素グループ番号pg=0についてqp=sel_qp=2が選択された場合、S704ではpg_size[sel_qp=2][0]=pg_size[qp=2][0]=24となる。よって、S704ではYES判定となりS705にて、適用QP:pg_qp[0]の値にqp=sel_qp=2が設定される。次いでS706ではqp>0であるのでqpが1減じられqp=1となって、S704に戻る。S704での2回目の判定において、比較対象となる符号長pg_size[qp][pg]は、pg_size[1][0]=27となる。もう一方の符号長pg_size[sel_qp][pg]は、pg_size[2][0]=24である。両者を比較するとpg_size[1][0]>pg_size[2][0]となり、S704ではNO判定となる。従って、処理対象の画素グループの適用QP:pg_qp[0]はqp=sel_qp=2のまま変更されず、画素グループ番号:pg=0における適用QPは2となり、そのときの符号長は24である(図9(b)を参照のこと)。
次に、図9(a)の画素グループの番号pg=8のケースに着目すると、QPが2から0間における各符号長は、pg_size[2][8]=pg_size[1][8]=pg_size[0][8]=pg_size[sel_qp2][8]=16である。この場合S704では常にYES判定となり、S705において適用QP:pg_qp[8]の値は2、1、0の順で更新される。さらに、図9(a)の画素グループの番号pg=10のケースのように、QPの値が2と1では符号長が17で不変であるが、QPが0になると符号長が長くなってしまう場合、適用QP:pg_qp[10]の値の更新は1止まりとなる。
このようにしてQP決定部115はS704からS707の処理を繰り返すことにより、画素グループ単位に符号長が変化しない範囲で、適用QP:pg_qp[pg]の値をより小さな値に決定することができる。その後のS708、S709の処理では処理対象となる画素グループを更新していく。具体的にS708では、QP決定部115は現在の処理対象の画素グループの番号pgが画素グループの番号の最大値(MAX_PG)より小さいか否かを判定する。MAX_PGの値は、本実施形態の場合、15となる。ここで、pgが最大値より小さい場合(S708で「YES」)、S709に移行してQP決定部115はpgを1だけ更新して、S704に戻って新たな画素グループについて画素グループ単位の適用QP:pg_qp[pg]を決定する処理を行う。一方、pgが最大値に一致する場合(S708で「NO」)、本処理を終了する。このようにして決定された適用QPの値はQP決定部115から本符号化系120へ出力される。また、本処理で用いたブロック符号長のパラメータsel_sizeは後述のS505における強制PCM信号の生成処理において、ブロック符号長pre_sizeとして用いられる。
以上の処理により決定された適用QPの具体的な値を図9(b)に示す。図9(b)では、太線で囲った符号長に対応するQPが、画素グループ毎に決定された適用QPを表している。画素グループ単位の適用QPの値は、pg_qp[0〜7、9、11、13、15]は2、pg_qp[8,12,14]は0、pg_qp[10]は1となる。符号長が同一であってもQPが小さいほど量子化ステップが小さく画質が良いので、ブロック全体の符号長を増加させることなく画素グループ単位で品質をできる限り向上させることができる。
図7BはS504の処理の他の例を示している。次に図7Bにおいて、まずS710では、QP決定部115は、S503で決定されたQP:sel_qpが0でないかを判定する。QPが0の場合、本処理によりQPを変更することはできないので処理を終了し、S505に移行する。例えば、図9(d)の例では、QP=0が選択されているのでS505に移行する。一方、図9(a)の例のようにQPが0で無い場合は、S711以降の処理を行う。
続くS711では、QP決定部115は画素グループ単位の適用QPであるpg_qp[pg]を、S503で決定されたQP:sel_qpで初期化する。このとき、pg_qp[0]〜pg_qp[15]までの全てがsel_qpの値に初期化される。図9(a)の例では、QP=2が選択されたのでpg_qp[0]〜pg_qp[15]は全て2に初期化される。次にS712では、QP決定部115は現時点の符号化ブロックの符号長を表すパラメータnew_sizeを、S603で決定されたsel_sizeの値に初期化する。例えば図9(a)の例では、sel_sizeはQPが2のときのブロック符号長326に決定されたので、S712ではnew_sizeの値は326に初期化される。ヘッダ符号長を考慮していない場合は、ブロック符号長は278となる。次にS713では、QP決定部115は現在選択されているQPを示すパラメータqpの値をS604で決定されたsel_qpの値で初期化する。例えば図9(a)の例では、sel_qpは2に決定されたので、S713ではqpの値は2に初期化される。
次にS714では、QP決定部115は新たなQPを示すパラメータnew_qpの値を、qpより1を減じた値で初期化する。new_qpは、現在選択されているqpの値を1つ繰り下げた値を示す。さらにS715では、QP決定部115は処理対象の画素グループの番号を示すパラメータpgを初期化する。画素グループは0から15までの16グループがあるので、pg=0に初期化される。さらにS716、S717ではQP決定部115はminus_sizeをpg_size[qp][pg]に設定し、plus_sizeをpg_size[new_qp][pg]に設定する。ここで、minus_sizeとは、現在のqpの値に基づく選択画素グループの符号長を示し、plus_sizeは現在のqpから1減じたnew_qpの値に基づく選択画素グループの符号長を示す。例えば、pg=0でqp=2の場合を考えると、図9(a)に示す例では、minus_sizeは24となり、plus_sizeは27となる。このminus_sizeと、plus_sizeとは、画素グループ単位にqpを1だけ変更した場合に想定される符号化ブロックのブロック符号長の変化量を計算するために用いられる。
S718では、QP決定部115は画素グループ単位にqpを1だけ変更した場合のブロック符号長を示すパラメータtmp_sizeを、上記のnew_size、minus_size、plus_sizeから式3により求める。
tmp_size=new_size−minus_size+plus_size・・・式3
例えば、pg=0でqp=2の場合を考えると、図9(a)の例ではnew_size=326、minus_size=24、plus_size=27であるから、tmp_size=329となる。
次にS719にてQP決定部115は、S718で求めたqp変更後の符号長tmp_sizeが、目標符号量(target_size)以下かどうかを判定する。tmp_sizeの値が目標符号量を上回る場合(S719で「NO」)、S724に移行する。一方、tmp_sizeの値が目標符号量以下の場合(S719で「YES」)、S720に移行する。S720では、QP決定部115はnew_sizeの値をtmp_sizeの値で更新する。次いでS721においてQP決定部115は処理対象の画素グループの適用QP:pg_qp[pg]をnew_qpの値で更新する。その後のS722、S723の処理では処理対象となる画素グループを更新していく。具体的にS722では、QP決定部115は現在の処理対象の画素グループの番号pgが画素グループの番号の最大値(MAX_PG)より小さいか否かを判定する。MAX_PGの値は、本実施形態の場合15となる。ここで、pgが最大値より小さい場合(S722で「YES」)、S723に移行してQP決定部115はpgを1だけ更新して、S716に戻って新たな画素グループについて画素グループ単位の適用QP:pg_qp[pg]を決定する処理を行う。一方、pgが最大値に一致する場合(S723で「NO」)、S724に移行する。
次にS724では、QP決定部115は現在のqpの値が0より大きいか否かを判定すると共に、sel_qpから現在のqpを引いた値がMAX_DIFFより小さいか否かを判定する。MAX_DIFFは、sel_qpからqpを下げることが可能な回数を規定している。MAX_DIFFはQPが取り得る範囲に応じて任意に決定でき、例えば2とすることができ、その場合にはsel_qpの値から2回まではqpの値を下げることができる。上記の例ではsel_qp=2であるから、qp=0となるまで処理を行うことができる。仮にsel_qp=3であった場合にはqp=1までは下げられるが、qp=0には下げられない。またMAX_DIFFを1または3としてもよい。このように回数を制限するのは、再帰的処理の実行時間を制限するためである。MAX_DIFFを設定することによりsel_qpに追加して適用QPに含めることが可能なQPの種類数を規定することができる。
S724では、QP決定部115はqpが0であった場合、または、qpを下げた回数がMAX_DIFFに一致する場合(S724で「NO」)は本処理を終了する。qpが0より大きく、かつ、qpを下げた回数がMAX_DIFFに満たない場合(S724で「YES」)は、S725に移行する。S725ではQP決定部115はqpの値を1だけ減じて、S714に戻って処理を繰り返す。このようにして決定された適用QPはQP決定部115から本符号化系120へ出力される。また、本処理で用いたブロック符号長のパラメータnew_sizeは後述のS505における強制PCMフラグの生成処理おいて、ブロック符号長pre_sizeとして用いられる。
ここで、図7Bにおける処理の具体例を、図9(a)を参照して説明する。選定されたsel_size(図9(a)の例では326)を基にして、まず、画素グループ番号0の画素グループのQPの値を1だけ小さくした場合のブロック符号長(326−24−27=329)を算出し、目標符号量(360)と比較する。算出したブロック符号長が目標符号量以下であった場合、次の画素グループ番号1のQPを1だけ小さくした場合のブロック符号長を算出して、同じように目標符号量と比較する。このとき算出される画素グループ番号1のブロック符号長は(329−24+27=332)であり、目標符号量よりも小さい。同様にして、画素グループを順に選択してブロック符号長を算出していく。このようにして算出されたブロック符号長において、画素グループ番号13のブロック符号長は目標符号量を超えてしまう。よって、これ以降は再び画素グループ番号0に戻ってQPの値を更に1だけ減少させて、同じようにブロック符号長を算出していく。但し、MAX_DIFF=1であった場合にはこの時点で処理を終了する。図9(a)の例では画素グループ番号1において目標符号量を超えてしまう。この時点でqpの値は0となっているので処理を終了する。
以上により決定された適用QPの具体的な値を図9(c)に示す。図9(c)では、太線で囲った符号長に対応するQPが、画素グループ毎に決定された適用QPを表している。画素グループ単位の適用QPの各値は、pg_qp[0]は0、pg_qp[1〜12]は1、pg_qp[13〜15]は2となる。このように、本実施形態では、先頭の画素グループから順により小さいQPが割り当てられる。図9(c)では先頭の画素グループのみにQP=0が割り当てられたが、他の条件では先頭の画素グループを含む連続する複数の画素グループに対して最小のQPを割り当てることも可能である。以上の例では、ヘッダ情報の符号長を考慮した場合について説明したが、ヘッダ情報の符号長を考慮しない場合には上述の数値からヘッダ情報の符号長48ビットを適宜差し引くだけでよい。
図7Bのフローチャートに対応する処理によれば、QP決定部115におけるS504の画素グループ単位の適用QPの決定方法において、ブロックの総符号量が目標符号量を超えない範囲で、先頭の画素グループから順にQPを小さい値に変更することができる。特に、ブロック符号量が所定値を超えない範囲でQPを高画質となる方向に調整して未使用のビットを可能な限り削減しつつ、符号化結果の品質を向上させることができる。図7Aの方法と比較すると、図7Aの方法では画像データに対して割り当てられたビット数は278ビットであったのに対し、図7Bの方法では画像データに対して312ビットを割り当てることができる。また、図7Aの方法ではQP=1、0が使用されている割合は4/16であるのに対し、図7Bの方法では13/16となっている。これにより、量子化ステップが小さいQPの使用割合が増え、未使用のビット数を削減できるため、符号化による画質劣化をさらに低減できる。
図5の説明に戻り、S505ではQP決定部115は、S503またはS504で決定した適用QPで符号化した場合のブロック符号長pre_sizeに応じて、強制PCMフラグFORCE_PCM[pg]を生成する。強制PCMフラグは、ブロック符号長が目標符号量を所定量を超えて下回る場合に、グループ単位で符号化方式をPCMに切り替えて符号長を増加させて、目標符号量に近づけるように作用する。S505におけるFORCE_PCM[pg]を決定するための処理の詳細を、図8のフローチャートを参照して詳述する。
本処理は図9(a)及び図9(d)に示す符号長の例に基づいて説明する。図9(a)の例では、S504において決定された適用QPは図9(b)または(c)に示すパターンとなっている。また図9(d)の例では、適用QPは全画素グループとも0となり、ブロック符号長は252ビットとなっている。
図8において、S801では、QP決定部115はS504で決定された適用QPに基づくブロック符号長と目標符号量とを比較し、ブロック符号長が目標符号量よりも小さいか否かを判定する。ブロック符号長が目標符号量と一致する場合には本処理を終了する。一方、ブロック符号長が目標符号量より小さい場合、S802に移行して処理を継続する。このとき、ブロック符号長と目標符号量との差分が所定の閾値を超えるか否かを判定してもよい。もし、差分が閾値を超えない場合には本処理を終了する。一方、差分が閾値を超えた場合、S802に移行して処理を継続する。
このとき所定の閾値は、符号化データをバッファ30に格納する際に使用されるダミーデータのサイズに基づいて決定することができる。ダミーデータの最大量を例えば10ビットとした場合、上記閾値は10ビットであり、差分が10ビットより大きい場合には以下の処理を実行する。図9(b)の例では、ブロック符号長は326で、目標符号量360より小さい。また、差分は360−326=34で、10ビットより大きいのでS802以降の処理を実行する。図9(c)の例ではブロック符号長は360で目標符号量と一致するので、これ以降の処理は行わずに終了する。なお、図7Bのフローチャートに従った処理において必ずブロック符号長が360になるわけではなく、差分が発生する場合も当然に想定され、そのような場合には、当該差分の大きさに基づきS802以降の処理を実行できる。図9(d)の例では、ブロック符号長は252で、目標符号量360より小さい。また、差分は10ビットより明らかに大きいのでS802以降の処理を実行する。
S802では、QP決定部115はFORCE_PCM[pg]を0で初期化する。これにより、FORCE_PCM[0]〜FORCE_PCM[15]はデフォルト値として0に初期化される。以降、画素グループごとに処理を行うが、途中で処理が終了した場合の処理が施されない画素グループの強制PCMフラグはこのデフォルト値0が適用されることになる。
次にS803では、QP決定部115は現時点の符号化ブロックの符号長を表すパラメータnew_sizeを、S503またはS504で決定した画素グループの適用QPに基づくブロック符号長の値pre_sizeに初期化する。例えば、図9(b)の例では、ブロック符号長pre_sizeは326であるので、new_sizeの値は326となる。また、図9(d)の例では、ブロック符号長pre_sizeは252であるので、new_sizeの値は252となる。
次にS804では、QP決定部115は処理対象の画素グループの番号を示すパラメータpgを初期化する。画素グループは0から15までの16グループがあるので、pg=0に初期化される。次にS805ではQP決定部115はminus_sizeをpg_size[pg_qp[pg]][pg]に設定する。ここで、minus_sizeとは、S503またはS504で決定されたQPに基づく選択画素グループの符号長を示す。例えば、pg=1の場合を考えると、図9(d)に示す例では、minus_sizeは12となる。さらにS805ではQP決定部115はplus_sizeをpcm_sizeに設定する。plus_sizeはPCM符号化方式での画素グループの符号長であり、QP=0では入力画像データのビット深度×グループの画素数から定まる値と一致する。
ここで、QPの値が1増える毎に、グループの画素数に乗ずる値が入力画像データのビット深度よりも1ビットずつ下がっていく。例えば、QP=1では、(入力画像データのビット深度−1)×グループの画素数となり、QP=2では、(入力画像データのビット深度−2)×グループの画素数となる。本実施形態では画像データのビット数は10ビット、グループの画素数は3であるので、QP=0では30、QP=1では27、QP=2では24等となる。このminus_sizeと、plus_sizeとは、画素グループ単位に符号化方式をPCMに変更した場合に想定される符号化ブロックのブロック符号長の変化量を計算するために用いられる。
S807では、QP決定部115は画素グループ単位に符号化方式をPCMに変更した場合のブロック符号長を示すパラメータtmp_sizeを、上記のnew_size、minus_size、plus_sizeから式4により求める。
tmp_size=new_size−minus_size+plus_size・・・式4
例えば、図9(b)の例では、pg=3において、new_size=326、minus_size=18、plus_size=24であるから、tmp_size=332となる。また、図9(d)の例では、pg=1においてnew_size=252、minus_size=12、plus_size=30であるから、tmp_size=270となる。
次にS808にてQP決定部115は、S807で求めた符号化方式変更後の符号長tmp_sizeが、目標符号量(target_size)以下かどうかを判定する。tmp_sizeの値が目標符号量を上回る場合(S808で「NO」)、本処理を終了する。一方、tmp_sizeの値が目標符号量以下の場合(S808で「YES」)、S809に移行する。S809では、QP決定部115はnew_sizeの値をtmp_sizeの値で更新する。次いでS810においてQP決定部115は処理対象の画素グループのFORCE_PCM[pg]に値1で更新する。 その後のS811、S812の処理では処理対象となる画素グループを更新していく。具体的にS811では、QP決定部115は現在の処理対象の画素グループの番号pgが画素グループの番号の最大値(MAX_PG)より小さいか否かを判定する。MAX_PGの値は、本実施形態の場合15となる。ここで、pgが最大値より小さい場合(S811で「YES」)、S812に移行してQP決定部115はpgを1だけ更新して、S805に戻って新たな画素グループについて強制PCMフラグFORCE_PCM[pg]を決定する処理を行う。一方、pgが最大値に一致する場合(S811で「NO」)、本処理を終了する。このようにして生成された強制PCMフラグはQP決定部115から本符号化系120へ出力される。
ここで、図8における処理の具体例を、図9(b)及び(d)を参照して説明する。図9(b)の例につき、決定されたpre_size(326)を基にして、まず画素グループ番号0の画素グループの符号化方式をPCMに変更した場合のブロック符号長(326−24+24=326)を算出し、目標符号量(360)と比較する。算出したブロック符号長が目標符号量以下であった場合、次の画素グループ番号1の符号化方式をPCMに変更した場合のブロック符号長を算出して、同じように目標符号量と比較する。このとき算出される画素グループ番号1のブロック符号長は(326−24+24=326)であり、やはり目標符号量よりも小さい。このようにして画素グループを順に選択してブロック符号長を算出していくと以下のようになる。
画素グループ番号2:326−24+24=326
画素グループ番号3:326−18+24=332
画素グループ番号4:332−19+24=337
画素グループ番号5:337−15+24=346
画素グループ番号6:346−13+24=357
画素グループ番号7:357−13+24=368
上記算出されたブロック符号長において、画素グループ番号7のブロック符号長は目標符号量(360)を超えてしまう。よって、この時点で処理を終了する。このようにして決定された強制PCMフラグはFORCE_PCM[0〜6]が1、FORCE_PCM[7〜15]が0となる。
次に、図9(d)の例につき、決定されたpre_size(252)を基にして、まず、画素グループ番号0の画素グループの符号化方式をPCMに変更した場合のブロック符号長(252−30+30=252)を算出し、目標符号量(360)と比較する。算出したブロック符号長が目標符号量以下であった場合、次の画素グループ番号1の符号化方式をPCMに変更した場合のブロック符号長を算出して、同じように目標符号量と比較する。このとき算出される画素グループ番号1のブロック符号長は(252−12+30=270)であり、目標符号量よりも小さい。このようにして画素グループを順に選択してブロック符号長を算出していくと以下のようになる。
画素グループ番号2:270−9+30=291
画素グループ番号3:291−12+30=309
画素グループ番号4:309−12+30=327
画素グループ番号5:327−12+30=345
画素グループ番号6:345−12+30=363
上記算出されたブロック符号長において、画素グループ番号6のブロック符号長は目標符号量を超えてしまう。よって、この時点で処理を終了する。このようにして決定された強制PCMフラグはFORCE_PCM[0〜5]が1、FORCE_PCM[6〜15]が0となる。
このようにして決定された強制PCMフラグの具体的な値を図9(e)及び(f)に示す。図9(e)に示すように、図9(b)の例について、画素グループ単位の強制PCMフラグ905の各値は、FORCE_PCM[0〜6]が1、FORCE_PCM[7〜15]が0となる。また、太線で囲った符号長は本処理によって更新された値となっている。また、図9(f)に示すように、図9(d)の例について画素グループ単位の強制PCMフラグ906の各値は、FORCE_PCM[0〜5]が1、FORCE_PCM[6〜15]が0となる。また、太線で囲った符号長は本処理によって更新された値となっている。
このようにブロック符号長が目標符号量未満であった場合にブロック符号長が目標符号量を超えない範囲で、先頭の画素グループから順に符号化方式をPCMに変更することによって、未使用のビットを可能な限り削減することができる。よって、スタッフィングデータの挿入による無駄な処理サイクルをできるだけ削減するとともに、必要なバッファサイズを小さくすることができる。
(本符号化系の説明)
次に、図1の本符号化系120の動作について説明する。本符号化系120にも仮符号化系110に入力された画像データと同一の画像データが入力されるが、仮符号化系110のQP決定部115が適用QPを決定し出力するまで待機する必要がある。そこで、入力画像データは遅延部121に入力され、仮符号化系110が適用QPを決定するために必要な所定の処理サイクル分だけ遅延される。遅延後の画像データは遅延部121から符号化部111Eへ出力される。これにより符号化部111Eは、仮符号化系110が適用QPを決定した符号化ブロックを、当該決定された適用QPを用いて符号化することができる。
符号化部111Eは、図3に示した符号化部111と同一の構成を有し、適用QPおよび、強制PCMフラグを用いて、遅延された画像データを本符号化する。これによりQP決定部115が決定したブロック符号長と同じ符号長の符号データが生成され、PCM/DPCM選択フラグ、符号長と共に多重化部123に出力される。多重化部123には符号化部111Eからの符号データ、符号長、PCM/DPCM選択フラグと、QP決定部115からのQPが入力されており、符号ブロック毎に所定のフォーマットで多重化が行われる。
以下、発明の実施形態に対応するフォーマットの一例について図10(a)及び図10(b)を用いて説明する。図10(a)及び(b)は符号化フォーマットのデータ構造を表す図であり、括弧で示す数値は各領域に格納されるデータのビット数を表している。
まず、図10(a)において、ブロックの全体の符号化データ1001(360ビット)は、ヘッダ部1002(48ビット)と、画素データ部1003(312ビット)から構成される。ヘッダ部1002はQPの値を格納するQP値部1004(32ビット)とPCM/DPCM選択フラグを格納するフラグ部1005(16ビット)とで構成される。QP値部1004には画素グループ毎に2ビットのQP(1004_0〜1004_fまで)が16個分格納される。フラグ部1005には画素グループ毎に1ビットのPCM/DPCM選択フラグのフラグ値(1005_0〜1505_fまで)が16個分格納される。画素データ部1003には符号データが画素数分(3×16=48画素分)格納される。多重化された符号化データ1001はストリームデータとして出力端子102に出力され、非図示の画像メモリ、バスインターフェースに出力される。
図10(a)では、QPを格納する領域1004を32ビット分用意した。これに対し図10(b)では、先頭(画素グループ番号:0)のQPと、QPが切り替る位置を示す画素グループ番号の情報を格納するようにした。図10(b)では、先頭のQPをqp0、QPが1番目に変化する画素グループ番号をqp_pos1、QPが2番目に変化する画素グループ番号をqp_pos2としてヘッダに格納する。このようなフォーマットによりヘッダ部の符号長を削減し、符号化データに含める画素データのサイズを増加させることができる。この結果、量子化ステップの小さいQPの使用割合が増えるため、符号化による画質劣化をさらに低減できる。
具体的に、図10(b)においてブロックの全体の符号化データ1011(360ビット)は、ヘッダ部1012(26ビット)と、画素データ部1013(334ビット)から構成される。ヘッダ部1012はQPを格納するQP値部1014(10ビット)とPCM/DPCM選択フラグを格納するフラグ部1015(16ビット)とで構成される。QP値部1014にはqp0の2ビット(1016)、qp_pos1の4ビット(1017)、qp_pos2の4ビット(1018)が格納される。
図9(c)の例では、(0、1、13)の値が格納される。フラグ部1015には画素グループ毎に1ビットのPCM/DPCM選択フラグのフラグ値(1015_0〜1015_f)が16個分格納される。画素データ部1013には可変長符号である符号データが画素数分(3×16=48画素分)格納される。多重化された符号化データ1011はストリームデータとして出力端子102に出力され、非図示の画像メモリ、バスインターフェースに出力される。
図10(b)に示すヘッダフォーマットでは、ヘッダ符号長が26ビットで画像データ部の符号長が334ビットとなるため、上述の実施形態におけるブロック符号長の算出方法及び目標符号量の値が異なる。具体的に図5のS502におけるブロック符号長bl_size[qp]の算出においては、ヘッダ符号長を考慮する場合には、その大きさを26ビットとする。ブロック符号長の算出にヘッダ符号長を考慮しない場合、S503の目標符号量を334ビットとする。
図10(b)では、ヘッダ部にQPの切り替わり位置の情報を2つ持たせる場合を説明したが、ヘッダ部に含めるべき切り替わり位置の情報の数は、図7BのS724における判定で使用したMAX_DIFFの値に依存する。図10(b)はMAX_DIFF=2の場合を示したが、MAX_DIFF=1の場合は切り替わりの位置の情報としてqp_pos1の4ビットだけあれば足りるので、ヘッダ部1012のサイズを更に4ビット削減し、画素データ部1013のサイズを更に4ビット増加することができる。
(画像復号化部の説明)
次に、画像符号化部20で生成された符号化データを復号する、発明の実施形態に対応する画像復号化部の構成例及び動作について説明する。図2は、発明の実施形態に対応する画像復号化部50の構成例を示すブロック図である。画像処理装置100は画像復号化部50を有し、バッファ30を介して出力部40から出力された符号化データを復号することができる。以下、本実施形態の画像復号化部の構成例において各ブロックの動作について説明する。
図2に示す画像復号化部50は、分離部203、可変長復号化部204、加算器205、セレクタ206、逆量子化部207、予測部208で構成されている。画像復号化部50は、専用のデバイス、ロジック回路やメモリを用いてハードウェア的に一体的に構成されても良いし、或いは、複数のデバイス等で分散して構成されてもよい。或いは、メモリに記憶されている処理プログラムをCPU等のコンピュータが実行することにより、ソフトウェア的に構成されてもよい。
画像復号化部50には、非図示の画像メモリ、バスインターフェースなどを介して、画像符号化部20で生成され、バッファ30を介して出力部40が出力したストリームデータが入力端子201を介して分離部203に入力される。分離部203は入力されたストリームデータを所定のフォーマットに従ってデコードして、QP、PCM/DPCM選択フラグ、符号データの情報を分離し、処理サイクル毎に順次出力する。QPは逆量子化部207と量子化部210に出力し、PCM/DPCM選択フラグはセレクタ206に出力する。符号データのうち、PCMデータはセレクタ206に出力し、DPCMデータは可変長復号化部204に出力する。可変長復号化部204は入力されたDPCMデータの可変長復号化を行い、復号化されたDPCMデータを加算器205に出力する。加算器205は、後述の予測部208からの予測値と復号されたDPCMデータを加算して復号値を得て、セレクタ206に出力する。
セレクタ206は分離部203からのPCMデータと、加算器205からの復号値を、PCM/DPCM選択フラグに応じて切り替えて量子化データとして出力し、逆量子化部207へ出力する。逆量子化部207はQP値を用いて、セレクタ206からの量子化データを逆量子化して、復号画像データを生成し、予測部208と出力端子202に出力する。予測部208は画素遅延部209、量子化部210から構成される。逆量子化部207から入力された復号画像データは、画素遅延部209にて同じカラー要素の前値が予測値となるようカラー要素分遅延され、量子化部210にて量子化されて予測値として出力される。なお、各カラー要素の符号化ブロックの最初の画素は前画素が存在しないため、予測値としては0の値を出力する。逆量子化部207から出力された復号画像データは出力端子202を介し、外部へと出力される。
以上説明したように、本実施形態では、複数の画素グループからなる符号化対象の符号化ブロック毎の固定長の符号化を行うため、まず、仮符号化系にて複数のQPで仮符号化して符号量を求め、それらの符号量から画素グループ単位に適用するQPの値を決定する。次いで本符号化系にて、決定された適用QPを用いて本符号化を行う構成とした。このとき、符号化ブロックのブロック符号長が所定値を超えない範囲で最大の値となるような最小のQPの値を決定することができるので、画素グループ単位に画質を向上させることができる。
また、符号化の際に用いるQPおよびPCM/DPCM選択フラグは画素グループ単位で選択(切替)が可能な構成とした。PCM/DPCM選択は、隣接画素差分に応じて、差分が大きい場合はPCMとし、差分が小さい場合はDPCMにするのではなく、各画素グループでPCM、DPCMの両方の符号長を算出しておき、符号長がより小さくなる符号化方式を選択するようにした。これにより、ブロック単位での効率的な符号化が可能となる。
さらに、ブロック符号長が目標符号量未満であった場合にブロック符号長が目標符号量を超えない範囲で、先頭の画素グループから順に符号化方式をPCMに変更することで、未使用のビットを可能な限り削減することができる。これにより、符号データ出力時におけるスタッフィングデータの挿入による無駄な処理サイクルを可能な限り削減することができる。また、バッファ30に確保すべきスタッフィングデータを保持するため領域を可能な限り縮小することができる。
さらに本実施形態では、隣接画素間の差分が大きくなる場合であっても特許文献1のようにPCM符号化の場合に符号長を10ビットから5ビットに強制的に半分にはしない。その代わり、量子化ステップ1を含む段階的に設定された複数の量子化ステップを用いて、PCM及びDPCMの各符号化結果において符号長の短いものを画素グループ毎に選択しておく。また、グループ単位の符号長だけでなく、符号化ブロックのブロック符号長を考慮して量子化ステップを選択するため、一部の画素グループにおいて符号長が大きくなったとしても、他の画素グループの符号長が小さければそこで相殺される。よって、符号化ブロック内に急峻なエッジが含まれ、当該エッジ成分で大きな符号長が費やされたとしても、エッジの前後が平坦であれば当該エッジの符号長の分はそこで吸収されるので、エッジ成分を符号化する際に特許文献1のように不必要にビットを削減する必要がなくなる。
上述の発明の実施形態において、画像データのビット数は、10ビットに限定されるものではなく、8ビット、12ビットなど異なるビット数であってもよい。また、ブロックサイズは水平16画素×垂直1画に限定されるものではなく、任意のサイズでよい。例えば水平4画素×垂直4画素のように2次元構造としてもよい。
さらに、符号化対象の画像データの形式はRGB画像データに限定されるものではなく、グレースケール画像、カラー画像のうちYCbCr、ベイヤー配列データなどの画像データ形式であってもよい。図4(b)は画像データ形式が輝度信号(Y)と、二つの色差信号(Cr,b)であり、YCbCr4:2:2の場合の符号化ブロックを構成する画素データと、画素グループとの関係について示す。図4(b)では、Yを2画素、Cb、Crを1画素ずつの計4画素を単位画素グループとし、符号化ブロックを4×8=32画素から構成する例を示している。ここで、符号化ブロックに含める画素グループの数はより8グループよりも多くても良い。図4(c)は、画像データ形式がベイヤー配列の場合の符号化ブロックを構成する画素データと、画素グループとの関係について示す。図4(c)では、Gを2画素、R、Bを1画素ずつの計4画素を単位画素グループとし、符号化ブロックを4×8=32画素から構成する例を示している。ここで、符号化ブロックに含める画素グループの数はより8グループよりも多くても良い。グレースケール画像については不図示であるが、グレースケール画像を構成する画素のうち隣接画素の組から画素グループを構成することができる。その際、単位画素グループには例えば3画素または4画素の隣接画素を含めることができる。
(その他の実施例)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。