以下、発明の実施形態に対応する画像処理装置を説明する。図1(a)は発明の実施形態における画像処理装置の構成の一例を示す図である。画像処理装置100は、例えば取得部10、画像符号化部20、メモリ30を有する。図1の画像処理装置100において、各ブロックは、撮像素子や表示素子のような物理的デバイスを除き専用のデバイス、ロジック回路やメモリを用いてハードウェア的に構成されてもよい。或いは、メモリに記憶されている処理プログラムをCPU等のコンピュータが実行することにより、ソフトウェア的に構成されてもよい。画像処理装置100は例えばデジタルカメラとして実施することができるが、それ以外にも、例えばパーソナルコンピュータ、携帯電話、スマートフォン、PDA、タブレット端末、デジタルビデオカメラなどの任意の情報処理端末或いは撮像装置とすることができる。
図1(a)において、取得部10は画像を入力する機能を有する。取得部10は、例えば、撮像センサを備える撮像部や、外部から伝送路を介して画像を入力する構成を含む。或いは、取得部10は、記録媒体などから画像を読み出す構成を含む。また、取得される画像は、静止画であってもよく、動画データであってもよい。取得部10が取得する画像が動画の場合、複数のフレームからなる動画が連続的に取得されてもよい。
取得部10は、取得した画像を画像符号化部20に供給する。また、画像と共に、画像符号化部20に対して、符号化単位となる所定のブロックの当該画像における位置を示す座標情報を提供することができる。当該座標情報については図13等を参照して後述する。画像符号化部20は、取得部10から供給される画像をパルス符号変調(PCM)または差分パルス符号変調(DPCM)のいずれかの符号化方式に従って符号化し、情報量が圧縮された符号化データを出力する。出力された符号化データは、メモリ30に記憶される。メモリ30は、画像符号化部20から出力された符号化データを記憶するために必要な記憶容量を有する。メモリ30に記憶された符号化データには後段の処理部において現像処理や更なる圧縮処理が実施される。
なお、図1(a)では、取得部、画像符号化部20及びメモリ30を独立した構成として示しているが、画像処理装置100に実装するに当り、これらを一体に例えば1チップに統合してもよいし、あるいは別体として独立に構成しても良い。
<画像符号化部の説明>
以下、図1(b)を参照して、発明の実施形態に対応する画像符号化部20の構成及び動作を説明する。図1(b)は、発明の実施形態に係る画像符号化部20の構成例を示すブロック図である。画像符号化部20は、仮符号化系110と本符号化系120の2つの大ブロックより構成される。さらに仮符号化系110は符号化部111A〜111D、QP決定部115および116、ヘッダ省略判定部117から構成される。
仮符号化系110は、本符号化系120で本符号化を行う際に使用する量子化パラメータのセット及びヘッダ省略モードフラグを決定するように動作する。ヘッダ省略モードフラグは、本符号化系120が実施する符号化処理において、後述するPCM/DPCMが混在し得る第1の符号化モードとPCMに固定される第2の符号化モードとを切替えるために使用される。本符号化系120は、遅延部121、符号化部111E、多重化部123で構成され、仮符号化系110で決定された量子化パラメータのセットを用いた量子化処理を含む本符号化を実行する。また、符号化結果を多重化し、ヘッダ省略モードフラグの値に従って符号化データを生成して外部に出力する。
画像符号化部20は、画像符号化装置として専用のデバイス、ロジック回路やメモリを用いてハードウェア的に一体的に構成されても良いし、或いは、複数のデバイス等で分散して構成されてもよい。或いは、メモリに記憶されている処理プログラムをCPU等のコンピュータが実行することにより、ソフトウェア的に構成されてもよい。
<符号ブロックと画素グループ>
本実施形態では、取得部10から画像符号化部20に対して1フレーム分のフレーム画像が所定サイズ(画素数)を有するブロック(以下、「符号化ブロック」という)に分割されて入力される。そして、画像符号化部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、309を含んで構成される。
符号化部111には、画像データとQPとが入力される。仮符号化系110の場合、QPは符号化部111Aから111Dのそれぞれに対して固定値として予め割り当てられていてもよい。図1(b)では一例として、符号化部111Aから111Dまで順にQPとして0、1、2、3がそれぞれ割り当てられている場合を示している。仮符号化系110の場合、各符号化部が予めQPの値を保持していても良い。本符号化系120には、仮符号化系110で決定されたQPがヘッダ省略判定部117から入力される。以下、符号化部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とにそれぞれ出力すると共に、符号化部111の外部へも出力する。
次に、予測部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及び符号化部111の外部にそれぞれ出力される。所定の可変長符号化方式には、例えばハフマン符号、ゴロム符号などが含まれる。可変長符号化部304が実行する可変長符号化方式では、入力値が0の場合に最も短い符号長の符号データが割り当てられており、入力値の絶対値が大きくなるほど、符号データの符号長は長くなる。なお、本実施形態において、可変長符号化部304から出力される符号データをDPCMデータと呼び、同符号長をDPCM符号長と呼ぶ。
符号長比較部306は、PCM符号長とDPCM符号長とを前述の画素グループ単位で比較し、符号長がより小さくなる符号データを選択するためのPCM/DPCM選択フラグを生成する。符号長比較部306は、画素グループを構成するR、G、Bの各色のPCM符号長とDPCM符号長とを保持するように構成される。PCM/DPCM選択フラグはセレクタ309に出力され、ヘッダ省略モードフラグに応じて各セレクタでの出力データの切替えに用いられる。また、符号化部111の外部にも出力される。
<符号長比較フロー>
ここで、符号長比較部306における符号長の比較の詳細を図7のフローチャートを参照して説明する。符号長の比較は前述した画素グループ単位で行われる。
符号長比較部306は、S701においてPCM符号長算出部305から、以下の色成分毎のPCMを取得し、続くS702において可変長符号化部304から以下の色成分毎のDPCM符号長を取得する。
S_PCM_Rn:RnのPCM符号長
S_PCM_Gn:GnのPCM符号長
S_PCM_Bn:BnのPCM符号長
S_DPCM_Rn:RnのDPCM符号長
S_DPCM_Gn:GnのDPCM符号長
S_DPCM_Bn:BnのDPCM符号長
ここでは、図4(a)のRGBコンポネント形式のデータ入力について、グループ番号nの画素を対象に実行した例を示している。本実施形態では、上述のステップで各符号長を取得しているが、画素グループ内のすべての画素についてDPCMとPCM符号長が取得できていればよく特に順番を限定するものではない。
続いて、符号長比較部306は、ステップS703において、PCM符号長の合計値(S_PCM)を、ステップS701で取得した符号長を加算して取得する。同様に、符号長比較部306は、ステップS704においてDPCM符号長の合計値(S_DPCM)を、ステップS702で取得した符号長を加算して取得する。続くS705において符号長比較部306はS_PCMとS_DPCMとを比較し、大小を判定する。もし、画素グループのDPCMの符号長が小さい場合(S705でYES)は、S706に移行してDPCM符号データを選択するPCM/DPCM選択フラグ情報(PCM_DPCM_SEL_FLAG=1)を出力する。一方、PCMの符号長の方が小さい場合(S705のNO)は、S707に移行してPCM符号データを選択するPCM/DPCM選択フラグ情報(PCM_DPCM_SEL_FLAG=0)を出力する。
図3の説明に戻り、セレクタ309は、符号長比較部306から入力されるPCM/DPCM選択フラグと、予め与えられた固定値とを符号化部111の外部より入力されるヘッダ省略モードフラグに従って切替えてセレクタ307及び308へ出力する。ヘッダ省略モードフラグの値が1の場合、セレクタ309は固定値が選択される。一方、ヘッダ省略モードフラグの値が0の場合、PCM/DPCM選択フラグを選択し、当該フラグ情報がそのままセレクタ307および308へ通知される。本実施形態では固定値は0であり、PCM/DPCM選択フラグの値が0に固定(PCMモード固定(PCM_DPCM_SEL_FLAG=0))されることになる。よって、セレクタ307及び308はPCMデータ及びPCMデータの符号長を選択する。
セレクタ307にはPCMデータとDPCMデータが入力されており、セレクタ309からのPCM/DPCM選択フラグに従って符号データが選択され、符号化部111の外部へと出力される。具体的に、PCM/DPCM選択フラグのフラグ値が1の場合はDPCMデータが選択され、フラグ値が0の場合はPCMデータが選択される。セレクタ308にはPCM符号長とDPCM符号長が入力されており、PCM/DPCM選択フラグに従って符号長が選択されて、符号化部111の外部へと出力される。セレクタ308から出力される符号長を本実施形態では特に「選択符号長」と呼ぶ。具体的に、PCM/DPCM選択フラグのフラグ値が1の場合はDPCM符号長が選択され、フラグ値が0の場合はPCM符号長が選択される。
<仮符号化系の説明>
ここで図1の画像符号化部20の説明に戻り、仮符号化系110における仮符号化処理について説明する。図1の仮符号化系110に入力された画像データは複数の符号化部111Aから111Dによって、QPが0から3でそれぞれ符号化が行われ選択符号長がQP決定部115に、PCM符号長がQP決定部116にそれぞれ出力される。ここで選択符号長は、各符号化部が各QPに対応する量子化ステップで量子化処理を行った量子化結果をPCMまたはDPCMで符号化した符号データの符号長を表し、セレクタ308から出力される。PCM符号長は、各符号化部が各QPに対応する量子化ステップで量子化処理を行った量子化結果の符号長を表し、PCM符号長算出部305から出力される。符号化部111A〜111Dは図3に示した構成を有し、出力信号として、符号データ、選択符号長、PCM符号長、PCM/DPCM選択フラグが存在する。しかし、仮符号化系110では選択符号長及びPCM符号長を使用し、符号データ、PCM/DPCM選択フラグは使用しなくてもよい。
本実施形態では符号化に用いるQPの範囲として0〜3としたため、仮符号化系110は符号化部111を4つ備えている。しかし、発明の実施形態は当該構成に限定されるものではなく、符号化に用いるQPの範囲に応じて、符号化部111の数を変更することができる。また仮符号化系110では、符号化部111Aから111Dへの入力信号であるヘッダ省略モードフラグを0に固定し、常に上述の符号長比較部306の判断結果に基づくPCM/DPCM選択フラグが用いられるものとする。
<QP決定部の動作>
仮符号化系110において、QP決定部115と116とは前段の符号化部111A〜111Dから入力されたQP毎の複数の符号長の情報に基づき、本符号化系120で画素グループ単位に適用する適用QPの候補となるQPalt、QPpcmをそれぞれ決定する。ここで、QP決定部115への入力信号となる選択符号長は、各符号化部111において得られたPCM符号長またはDPCM符号長のうち、より小さい値となった符号長である。一方のQP決定部116への入力信号となる符号長は、各符号化部111におけるPCM符号長となる。QP決定部116は、入力信号が異なるだけで、基本的な構成及び処理内容はQP決定部115と同じである。以下では各QP決定部の動作を説明する。
<QP決定部115の動作>
本施形態における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選択フラグの情報であり、ここでのヘッダ情報の符号長は23ビットとする。このヘッダ情報のデータ構造については、図10(b)を参照して後述する。
ヘッダ情報の符号長hd_size(=23ビット)と、全画素グループの符号長との合計を加算したブロック符号長bl_size[qp]の算出が行われる。図9(a)は、pg_size[qp][pg]とbl_size[qp]の値の具体的な例を示す。図9(a)において、例えば参照番号901が示す値(35)はpg_size[0][0]であり、符号化ブロックにおける先頭の画素グループをQP=0で符号化した場合の符号長を示す。同様に、参照番号902が示す値(24)はpg_size[0][15]であり、符号化ブロックにおける最後の画素グループをQP=0で符号化した場合の符号長を示す。また、参照番号903が示す値(433)はbl_size[0]であり、QP=0で符号化した場合のブロック符号長を示し、参照番号904が示す値(349)はbl_size[3]であり、QP=3で符号化した場合のブロック符号長を示す。それぞれの値はビット単位で表されている。同図の値は以降の説明でも、具体的な値の例として用いて説明する。
次に、S503においてQP決定部115は、bl_size[qp]の中から所定の目標符号量target_size以下で、かつ最大の値を有するブロック符号長をsel_sizeに選定し、この時のqpをsel_qpに選定する。S503における具体的な処理は、図6のフローチャートに示すとおりである。
まずS601にて、最大のQP(MAX_QP)でもブロック符号長が目標符号量であるtarget_sizeを超えていることを識別するためのフラグover_flagを1に初期化する。ここでは、フラグover_flagが1である場合に、最大のQP(MAX_QP)でもブロック符号長が目標符号量であるtarget_sizeを超えていることを示すものとする。つづいてS602にて、QP決定部115はQPの値:qpを0に初期化する。次にS603にてQP決定部115は、現在選択されているQPにおける符号化ブロックの符号長:bl_size[qp]と目標符号量:target_sizeとを比較する。比較の結果、bl_size[qp]がtarget_size以下である場合(S603で「YES」)にはS604に移行し、bl_size[qp]がtarget_sizeより大きい場合(S603で「NO」)にはS607に移行する。
S604では、S603において判定対象となったbl_size[qp]を選択すべきブロック符号長sel_sizeに決定する。次いでS605では、bl_size[qp]のQPの値を符号化ブロックの暫定的なQPを表すsel_qpに決定する。その後、S606にてover_flagを0に更新し、S609にてover_flagの値をヘッダ省略判定部117に出力した後、処理を終了する。
S607では、現在選択されているQPの値が最大値(MAX_QP)よりも小さいかどうかを判定し、最大値より小さい場合(S607で「YES」)はS608においてQPの値を1つ更新し、S603に戻って処理を継続する。現在のQPの値が最大値以上の場合(S607で「NO」)は、S609にてover_flagの値をヘッダ省略判定部117に出力した後、処理を終了する。本実施形態におけるMAX_QPの値は3となる。S607でNOと判定された場合、目標符号量に対応する所定値以下のブロック符号長が存在せず、QPを選択できないこととなる。しかし、この場合はover_flagが1のままとなるので、ヘッダ省略モードが選択されることとなる。
このようにQP=0の初期値から1ずつ更新して、量子化ステップを1から2へ、2から4へと1段ずつ上げながら符号化ブロックの符号長を順に目標符号量と比較していく。そして、最初に目標符号量以下となったブロック符号長に対応するQPの値を暫定的なQP値とすることができる。また、最大のQP(MAX_QP)でもブロック符号長が目標符号量に対応する所定値以下とならない場合には、そのことをフラグover_flagの値1により示すことができる。
目標符号量target_sizeの具体的値については、本実施形態では例示的に360ビットとして説明する。この値は、符号化前の画像データの情報量が10ビット×3×16=480ビットであるので、その3/4に相当する。目標符号量の大きさは期待する圧縮率に応じて任意に設定することができる。図9(a)に示す例では、QP:3のブロック符号長bl_size[3]である349(ビット)が目標符号量360ビットよりも小さく、sel_sizeとして選定される。またこのときのQPの値3がsel_qpに決定される。ここで、符号化ブロックの符号長にヘッダ情報の符号長を含めていない場合、目標符号量の値は360ビットからヘッダ情報の符号長を差し引いた値となる。上述の例ではヘッダの符号長は23ビットであったので、この場合の目標符号量は337ビットとなる。
図5の説明に戻り、S504では、図6の処理において暫定的なQP値であるQP(sel_qp)が決定されたかどうかを判定する。前述のように、目標符号量以下となるブロック符号長が存在しない場合(S504で「NO」)には、QP(sel_qp)が決定されず、over_flagの値が1に設定されるので、そのまま処理が終了する。また、QP(sel_qp)が決定された場合(S504で「YES」)、S505ではQP決定部115がS503で決定した符号化ブロックの暫定的なQPの値sel_qpに対し画素グループ単位の調整を行う。これにより、画素グループ単位のQPalt:pg_qp[pg]を決定することができる。S505におけるpg_qp[pg]を決定するための処理の詳細を、図8のフローチャートを参照して詳述する。
図8において、S801では、QP決定部115は画素グループ単位のQPaltであるpg_qp[pg]を、S503で決定されたQP:sel_qpで初期化する。このとき、pg_qp[0]〜pg_qp[15]までの全てがsel_qpの値に初期化される。図9(a)の例では、QP=3が選択されたのでpg_qp[0]〜pg_qp[15]は全て3に初期化される。次にS802では、QP決定部115は現時点の符号化ブロックの符号長を表すパラメータnew_sizeを、S603で決定されたsel_sizeの値に初期化する。例えば図9(a)の例では、sel_sizeはQPが3のときのブロック符号長349に決定されたので、S802ではnew_sizeの値は349に初期化される。ヘッダ符号長を考慮していない場合は、ブロック符号長は326となる。次にS803では、QP決定部115は現在選択されているQPを示すパラメータqpの値をS604で決定されたsel_qpの値で初期化する。例えば図9(a)の例では、sel_qpは3に決定されたので、S803ではqpの値は3に初期化される。
次にS804では、QP決定部115は新たなQPを示すパラメータnew_qpの値を、qpより1を減じた値で初期化する。new_qpは、現在選択されているqpの値を1つ繰り下げた値を示す。さらにS805では、QP決定部115は処理対象の画素グループの番号を示すパラメータpgを初期化する。画素グループは0から15までの16グループがあるので、pg=0に初期化される。さらにS806、S807では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=3の場合を考えると、図9(a)に示す例では、minus_sizeは30となり、plus_sizeは32となる。このminus_sizeと、plus_sizeとは、画素グループ単位にqpを1だけ変更した場合に想定される符号化ブロックのブロック符号長の変化量を計算するために用いられる。
S808では、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=3の場合を考えると、図9(a)の例ではnew_size=349、minus_size=30、plus_size=32であるから、tmp_size=351となる。
次にS809にてQP決定部115は、S808で求めたqp変更後の符号長tmp_sizeが、目標符号量(target_size)以下かどうかを判定する。tmp_sizeの値が目標符号量を上回る場合(S809で「NO」)、S814に移行する。一方、tmp_sizeの値が目標符号量以下の場合(S809で「YES」)、S810に移行する。S810では、QP決定部115はnew_sizeの値をtmp_sizeの値で更新する。次いでS811においてQP決定部115は処理対象の画素グループのQPalt:pg_qp[pg]をnew_qpの値で更新する。その後のS812、S813の処理では処理対象となる画素グループを更新していく。具体的にS812では、QP決定部115は現在の処理対象の画素グループの番号pgが画素グループの番号の最大値(MAX_PG)より小さいか否かを判定する。MAX_PGの値は、本実施形態の場合15となる。ここで、pgが最大値より小さい場合(S812で「YES」)、S813に移行してQP決定部115はpgを1だけ更新して、S806に戻って新たな画素グループについて画素グループ単位のQPalt:pg_qp[pg]を決定する処理を行う。一方、pgが最大値に一致する場合(S813で「NO」)、S814に移行する。
次にS814では、QP決定部115は現在のqpの値が0より大きいか否かを判定すると共に、sel_qpから現在のqpを引いた値がMAX_DIFFより小さいか否かを判定する。MAX_DIFFは、sel_qpからqpを下げることが可能な回数を規定している。MAX_DIFFはQPが取り得る範囲に応じて任意に決定でき、例えば1とすることができ、その場合にはsel_qpの値から1回まではqpの値を下げることができる。上記の例ではsel_qp=3であるから、qp=2となるまで処理を行うことができる。このように回数を制限するのは、再帰的処理の実行時間を制限するためであるが、MAX_DIFFを2または3としてもよい。MAX_DIFFを設定することによりsel_qpに追加してQPaltに含めることが可能なQPの種類数を規定することができる。
S814では、QP決定部115はqpが0であった場合、または、qpを下げた回数がMAX_DIFFに一致する場合(S814で「NO」)は本処理を終了する。qpが0より大きく、かつ、qpを下げた回数がMAX_DIFFに満たない場合(S814で「YES」)は、S815に移行する。S815ではQP決定部115はqpの値を1だけ減じて、S804に戻って処理を繰り返す。このようにして決定された適用QPの候補となるQPaltはQP決定部115からヘッダ省略判定部117へ出力される。
ここで、図8における処理の具体例を、図9(a)を参照して説明する。選定されたsel_size(図9(a)の例では349)を基にして、まず、画素グループ番号0の画素グループのQPの値を1だけ小さくした場合のブロック符号長(349−30+32=351)を算出し、目標符号量(360)と比較する。算出したブロック符号長が目標符号量以下であった場合、次の画素グループ番号1のQPを1だけ小さくした場合のブロック符号長を算出して、同じように目標符号量と比較する。このとき算出される画素グループ番号1のブロック符号長は(351−30+32=353)であり、目標符号量よりも小さい。このようにして画素グループを順に選択してブロック符号長を算出していくと以下のようになる。
画素グループ番号2:353−24+24=353
画素グループ番号3:353−20+22=355
画素グループ番号4:355−20+22=357
画素グループ番号5:357−20+22=359
画素グループ番号6:359−16+18=361
上記算出されたブロック符号長において、画素グループ番号6のブロック符号長は目標符号量を超えてしまう。よって、この時点で本処理を終了する。このようにして決定されたQPaltの具体的な値を図9(b)に示す。図9(b)では、太線で囲った符号長に対応するQPが、画素グループ毎に決定されたQPaltを表している。画素グループ単位のQPaltの各値は、pg_qp[0〜5]は2、pg_qp[6〜15]は3となる。このようにしてQP値を組み合わせたブロック符号長は359ビットとなるが、目標符号量360ビットに対して足りないビットについては、後段の多重化部123でパディングビットを付加する処理を行う。生成されたQPaltはQP決定部115から出力され、ヘッダ省略判定部117へ入力される。
このように、本実施形態では、先頭の画素グループから順により小さいQPが割り当てられる。図9(b)では先頭の画素グループを含む連続する複数の画素グループに対して最小のQPが割り当てられたが、他の条件では先頭の画素グループのみに最小のQPが割り当てられる場合もある。
また、S814の判定においてMAX_DIFF=2であった場合には再び画素グループ番号0に戻ってQPの値を更に1だけ減少させて、同じようにブロック符号長を算出していく。上記の例では、
画素グループ番号0:359−32+32=359
画素グループ番号1:359−32+32=359
画素グループ番号2:359−24+26=361
となり、ここでは画素グループ番号2において目標符号量を超えてしまう。この時点でqpの値は1となっているので処理を終了する。このようにして決定された画素グループ単位のQPaltの各値は、pg_qp[0〜1]は1、pg_qp[2〜5]は2、pg_qp[6〜15]は3となる。このようにしてQP値を組み合わせたブロック符号長は359ビットとなる。以上の例では、ヘッダ情報の符号長を考慮した場合について説明したが、ヘッダ情報の符号長を考慮しない場合には上述の数値からヘッダ情報の符号長23ビットを適宜差し引くだけでよい。
<QP決定部116の動作>
次に、QP決定部116の動作を説明する。QP決定部116は、QP決定部115と同一構成を有するが、ヘッダ省略モードに対応するQP決定処理を行う。ヘッダ省略モードでは、ヘッダ情報をheader_skip_flgの1ビットのみとし、画素ブロック内の全ての画素をPCM符号化するとともに、符号化ブロック内の画素に対するQP値の割当パターンを一意に定める。その結果、どのような入力画像であっても、全画素をPCM符号化することによって必ず目標符号量に収めることができる。また、ヘッダ符号長を1ビットとすることで、画像データに多くの符号量を割り当てることができる。
QP決定部116への入力信号である符号長はすべてPCM符号化処理を行った結果の符号長である。各符号化部では全画素ブロックで同じ結果が得られるため、最初の画素ブロックだけQP値を算出することとしてもよい。また、QP決定部115の動作ではS502において加算するヘッダ符号長hd_sizeが23ビットであったが、QP決定部116の動作では同ヘッダ符号長hd_sizeが1ビットとなる。このヘッダ情報のデータ構造については、図10(c)を参照して後述する。またQP決定部116では、QP値を変化させる画素グループの番号を特定する必要がないので画素グループ単位でQP値を設定する必要はなく、画素単位でQP値を設定する点がQP決定部115の動作と異なる。
以下、図5、図6及び図8のフローチャートにおけるQP決定部116の動作につき、ヘッダ符号長hd_sizeの相違に基づきQP決定部115の動作と異なる点を主に説明する。QP決定部116の動作においては、画素グループ単位ではなく画素単位にQPを決定するため、各ステップにおけるpgは、pnに読み替える。pnは0から47までの値を取る。
図5のS502において、ヘッダ情報の符号長hd_size(=1ビット)と、全画素グループの符号長との合計を加算したブロック符号長bl_size[qp]の算出が行われる。図9(c)は、pn_size[qp][pn]とbl_size[qp]の値の具体的な例を示す。
次に、S503においてQP決定部116は、bl_size[qp]の中から所定の目標符号量target_size以下で、かつ最大の値を有するブロック符号長をsel_sizeに選定し、この時のqpをsel_qpに選定する。図9(c)に示す例では、QP:3のブロック符号長bl_size[3]である337(ビット)が目標符号量target_sizeの360ビットよりも小さく、sel_sizeとして選定される。またこのときのQPの値3がsel_qpに決定される。ここで、符号化ブロックの符号長にヘッダ情報の符号長を含めていない場合、目標符号量の値は360ビットからヘッダ情報の符号長を差し引いた値となる。上述の例ではヘッダの符号長は1ビットであったので、この場合の目標符号量は359ビットとなる。
図8において、S801では、QP決定部116は画素グループ単位のQPpcmであるpn_qp[pn]を、S503で決定されたQP:sel_qpで初期化する。このとき、pn_qp[0]〜pn_qp[47]までの全てがsel_qpの値に初期化される。図9(c)の例では、QP=3が選択されたのでpn_qp[0]〜pn_qp[47]は全て3に初期化される。次にS802では、QP決定部116は現時点の符号化ブロックの符号長を表すパラメータnew_sizeを、S603で決定されたsel_sizeの値に初期化する。例えば図9(c)の例では、sel_sizeはQPが3のときのブロック符号長337に決定されたので、S802ではnew_sizeの値は337に初期化される。ヘッダ符号長を考慮していない場合は、ブロック符号長は336となる。次にS803では、QP決定部116は現在選択されているQPを示すパラメータqpの値をS604で決定されたsel_qpの値で初期化する。例えば図9(c)の例では、sel_qpは3に決定されたので、S803ではqpの値は3に初期化される。
S806、S807ではQP決定部116はminus_sizeをpn_size[qp][pn]に設定し、plus_sizeをpn_size[new_qp][pn]に設定する。例えば、pn=0でqp=3の場合を考えると、図9(c)に示す例では、minus_sizeは7となり、plus_sizeは8となる。このminus_sizeと、plus_sizeとは、画素単位にqpを1だけ変更した場合に想定される符号化ブロックのブロック符号長の変化量を計算するために用いられる。
S808ではtmp_sizeは、例えばpn=0でqp=3の場合、図9(c)の例ではnew_size=337、minus_size=7、plus_size=8であるから、tmp_size=338となる。
以下、図8における処理の具体例を図9(c)を参照して説明する。選定されたsel_size(図9(c)の例では337)を基にして、まず、画素番号0の画素のQPの値を1だけ小さくした場合のブロック符号長(337−7+8=338)を算出し、目標符号量(360)と比較する。算出したブロック符号長が目標符号量以下であった場合、次の画素番号1のQPを1だけ小さくした場合のブロック符号長を算出して、同じように目標符号量と比較する。このとき算出されるブロック符号長は(338−7+8=339)であり、目標符号量よりも小さい。このようにして画素を順に選択してQPを変更し、ブロック符号長を算出していくと、ブロック符号長は画素番号が1増えるに応じて1だけ大きくなる。そして画素番号22においてブロック符号長は360と一致する。
上記算出されたブロック符号長において、画素番号22のブロック符号長が目標符号量と一致するので、この時点で本処理を終了する。このようにして決定されたQPpcmの具体的な値を図9(c)の太枠に示す。図9(c)では、太線で囲った符号長に対応するQPが、QP決定部116が画素毎に決定したQPpcmを表している。画素単位のQPpcmの各値は、pn_qp[0〜22]は2、pn_qp[23〜47]は3となる。このようにしてQP値を組み合わせたブロック符号長は360ビットとなり、目標符号量360ビットと一致する。生成された適用QPの候補となるQPpcmはQP決定部116から出力され、ヘッダ省略判定部117へ入力される。
上記では、説明のためにQPpcmを決定する処理の流れを示したがPCM符号化の場合には各画素に割り当てられるQP値は圧縮率(画素ブロックの目標符号量)に応じて一意に決定される。そのため、圧縮率に応じたQPパターンを予めQP決定部116が記憶しておいても良い。例えば、画素ブロックの目標符号量が360ビットである場合、図9(c)に示すように、画素番号0〜22のデータがQP2で符号化され、画素番号23〜47のデータがQP3で符号化される。また、上記では画素単位にQPpcmを決定することとしているが、QP決定部115と同様に画素グループ単位に決定しても良い。
<ヘッダ省略判定部>
次に、ヘッダ省略判定部117の動作を説明する。ヘッダ省略判定部117は、PCM/DPCMが混在し得る第1の符号化モードと、PCMに固定する第2の符号化モードとのいずれを選択するかを符号化ブロック単位に判定する。また、当該判定結果に基づいて、本符号化系120の符号化部111Eが使用する適用QPを、QP決定部115及び116のそれぞれから入力されたQPaltとQPpcmとのいずれかに決定する。
図11はヘッダ省略判定部117が実行する処理の一例を示すフローチャートである。ヘッダ省略判定部117は、QP決定部115が出力したover_flagの値や、第1の符号化モードと第2の符号化モードのそれぞれにおけるQP値の合計に基づき、いずれの符号化モードを採用するか否かを判定する。
具体的に、ヘッダ省略判定部117は、まずS1101ではover_flagをQP決定部115から取得する。次に、S1102ではover_flagの値が1であるか否かを判定する。もし値が1の場合(S1102でYES)、S1106に移行する。この場合、PCM/DPCMが混在し得る第1の符号化モードでは目標符号量以下で符号化ができないため、PCM固定で符号化を行う第2の符号化モードを選択する。その一方、値が0の場合(S1102でNO)S1103に移行する。S1103では、QP決定部115が出力したQPaltの符号化ブロック内での合計値SumQPaltを算出する。また、S1104では、QP決定部116が出力したQPpcmの符号化ブロック内での合計値SumQPpcmを算出する。
S1105では、S1103とS1104で算出されたQPの各合計値を比較する。ここでSumQPpcmの値がSumQPaltの値以上の場合(S1105でNO)、S1107に移行し、SumQPpcmの値がSumQPaltの値より小さい場合(S1105でYES)、S1106に移行する。S1106では、ヘッダ省略モードフラグを有効(header_skip_flg=1)に設定して、S1108に移行する。一方S1107ではヘッダ省略モードフラグを無効(header_skip_flg=0)に設定して、S1108に移行する。
次いでS1108では、上記で設定されたヘッダ省略モードフラグと、該フラグの設定値に従い、QP決定部115及び116のうちのいずれか一方が出力したQPを適用QPとして本符号化系120の符号化部111E及び多重化部123へ出力する。このようにして、符号化ブロックの符号量を確実に目標符号量以下とする一方で、QPの合計値がより小さくなる符号化モードを第1の符号化モードと第2の符号化モードとのいずれかから選択することができる。
上述の図9(b)及び図9(c)の例では、PCM/DPCMが混在しえる符号化モードのQPaltの合計値は126、PCMに固定した符号化モードのQPpcmの合計値は121となる。よって、後段の本符号化系120ではPCMモード固定で圧縮符号化を行うこととなる。
図11の処理では、符号化ブロックにおけるQP値合計を原画像に対する量子化誤差に起因する画質劣化の度合いを示す指標として用い、当該合計値が小さい方の符号化方式を決定する。また、PCM/DPCMが混在し得る第1の符号化モードでは目標符号量以下にできない場合でも、PCM固定の第2の符号化モードでは、画素データに最大限に符号を割り当てて画質の劣化を抑えながらも、目標符号量に必ず収めることができる。
<本符号化系の動作説明>
次に、図1の本符号化系120の動作について説明する。本符号化系120にも仮符号化系110に入力された画像データと同一の画像データが入力されるが、仮符号化系110のヘッダ省略判定部117が適用QPとヘッダ省略モードフラグを決定し出力するまで待機する必要がある。そこで、入力画像データは遅延部121に入力され、仮符号化系110が適用QP及びヘッダ省略モードフラグを決定するために必要な所定の処理サイクル分だけ遅延される。遅延後の画像データは遅延部121から符号化部111Eへ出力される。これにより符号化部111Eは、仮符号化系110が適用QPを決定した符号化ブロックを、当該決定された適用QPを用いて符号化することができる。
符号化部111Eは、図3に示した符号化部111と同一の構成を有し、適用QPを用いて、遅延された画像データを本符号化する。これによりQP決定部115または116が決定したブロック符号長と同じ符号長の符号データが生成され、PCM/DPCM選択フラグ、選択符号長と共に多重化部123に出力される。多重化部123には符号化部111Eからの符号データ、選択符号長、PCM/DPCM選択フラグと、ヘッダ省略判定部117からのQP及びヘッダ省略モードフラグが入力されており、符号ブロック毎に所定のフォーマットで多重化が行われる。多重化部123は、ヘッダ省略モードフラグの値に応じて以下に示す図10(b)及び図10(c)のいずれかのフォーマットに従い多重化を行って符号化データを生成し、出力する。
以下、発明の実施形態に対応する符号化データのフォーマットの一例について、図10(a)から(c)を参照して説明する。図10(a)は、符号化フォーマットのデータ構造の一例を表す図である。括弧で示す数値は各領域に格納されるデータのビット数を表している。図10(a)は、符号化ブロックの各画素グループに割り当てられたQPの値と、PCM/DPCMフラグ情報とを全画素グループについて記憶しておくフォーマットを示す。ブロックの全体の符号化データ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画素分)格納される。
このようなフォーマットに対し、ヘッダ部のサイズを小さくし、その分だけ画素データ部のサイズを大きく確保することを可能とする本実施形態に対応する符号化フォーマットを以下に示す。まず、図9(b)に示した適用QPのセットは、画素グループの先頭を含む連続する一部の画素グループについて同一のQPが割り当てられ、残りの画素グループには異なるQPが割り当てられている。そしてQPの変化の割合は1段階である。このような性質に基づき、本実施形態に対応する符号化フォーマットでは、符号化ブロックに含まれる全てのQPの値を保持する必要がない。その代わりに、先頭(画素グループ番号:0)のQPと、QPが切り替る位置を示す画素グループ番号の情報をヘッダ部に含む。一例として、先頭のQPをqp0、QPが変化する画素グループ番号をqp_posで示すこととする。また、上記では格納すべきQP値として先頭のQP、即ち最小のQPとしたが、同様の効果は割り当てられた最大のQPとした場合でも得られる。この場合でも切り替わり位置が特定できれば正しいQPの割当てを再現することができるからである。また、本実施形態では、ヘッダ省略モードフラグの値に応じて更にヘッダ部のサイズを小さくすることが可能となる。以下、本実施形態に対応する符号化フォーマットの例を図10(b)及び図10(c)を参照して説明する。
まず図10(b)は、ヘッダ省略モードフラグが無効(0)を示す場合の符号化フォーマットのデータ構造の一例を示す図である。ブロックの全体の符号化データ1011(360ビット)は、ヘッダ部1012(23ビット)と、画素データ部1013(337ビット)から構成される。ヘッダ部1012はQPを格納するQP値部1014(7ビット)とPCM/DPCM選択フラグを格納するフラグ部1015(16ビット)とで構成される。QP値部1014にはヘッダ省略モードフラグの1ビット(1016)、qp0の2ビット(1017)、qp_posの4ビット(1018)が格納される。図9(b)の例では、(0、2、6)の値が格納される。フラグ部1015には画素グループ毎に1ビットのPCM/DPCM選択フラグのフラグ値(1015_0〜1015_f)が16個分格納される。画素データ部1013には可変長符号である符号データが画素数分(3×16=48画素分)格納される。多重化された符号化データ1011はストリームデータとして出力端子102に出力され、非図示の画像メモリ、バスインターフェースに出力される。このような図10(b)のフォーマットでは、図10(a)のフォーマットに比べヘッダ部の大きさが25ビット分小さくなり、その分を画素データ部に振り分けることが可能となる。
次に、図10(c)は、ヘッダ省略モードフラグが有効(1)を示す場合の符号化フォーマットのデータ構造の一例を示す図である。ブロックの全体の符号化データ1021(360ビット)は、ヘッダ部1022(1ビット)と、画素データ部1023(359ビット)から構成される。前述のように、ヘッダ省略モードでは、画素ブロックにおける各画素データのQPが一意に決定される。そのため、ヘッダ部1022にはヘッダ省略モードフラグのみが格納され、図10(b)におけるqp0、qp_posの4ビットは省略される。このフォーマットが使用される場合には、ヘッダ省略モードフラグの値1が格納される。画素データ部1023には可変長符号である符号データが画素数分(3×16=48画素分)格納される。多重化された符号化データ1021はストリームデータとして出力端子102に出力され、非図示の画像メモリ、バスインターフェースに出力される。このような図10(c)のフォーマットでは、図10(b)のフォーマットに比べてヘッダ省略モードフラグの1ビット以外の情報が不要となるのでヘッダ部が22ビットさらに小さくなる。図10(a)との比較では、ヘッダ部が47ビット小さくなり、その分を画素データ部に振り分けることが可能となる。
次に、ヘッダ省略モードフラグの1ビットを確保するための方法について説明する。上述のヘッダ省略モード時の符号化データは、図10(c)に示すように参照番号1022のヘッダ省略モードフラグの1ビットと参照番号1023の画素データ部で構成される。この場合に、ヘッダ省略モードフラグの1ビット分の符号量を、固定的に画素データ部1023の先頭画素から1ビット確保する場合、符号対象ブロックのデータ構造は図12(a)に示すようになる。図12(a)は、図10(c)の画素データ部1023を詳細に示した図であり、括弧内の数値は符号量を示している。参照番号1201は、画素データ部の先頭画素を示す。このように先頭画素1201の符号量は4ビットであるのに対し、他の画素の符号量は5ビットであり、先頭画素1201は量子化によりヘッダ省略モードフラグのビット分、即ち1ビット分だけ多くデータが削られることになる。この場合、ヘッダ省略モード時は、常に符号化ブロック内の先頭画素のみが他の画素に比べて量子化精度が低くなってしまうことになる。
次に図12(b)は1フレーム分の画像を示しており、当該フレーム画像は符号化ブロック(ここでは水平16画素×垂直1画素×3成分)により、横128個×縦2048個に分割されている。図12(b)の符号化ブロック内の番号は、1フレームにおける符号化ブロックの位置を表す座標を示している。参照番号1211の座標情報は、(0,2)で0が横(X方向)の座標、2が縦(Y方向)の座標を示している。参照番号1212は符号化ブロックの先頭画素が、量子化において1ビット分多く削られており、かつ、そのような符号化ブロックが縦に並んだ場合を示している。ここで、例えば符号化対象のフレーム画像において、所定の絵柄が縦方向(Y方向)に連続的に存在する場合を考える。このような場合、所定の絵柄の位置が参照番号1212で示すようにヘッダ省略モードの符号化ブロックと重なって縦に並ぶと、当該符号化ブロックの先頭画素のみ符号量が1ビット分だけ少ないため縦縞などが視認しやすくなり、画質劣化を招くおそれがある。そこで、フラグ1ビット分の符号量を確保する対象となる画素は、先頭画素といった固定的な位置の画素とするのではなく、任意の位置の画素を対象とすべきである。具体的に、本実施形態では1ビット分の符号量を確保する対象となる画素位置を変更可能とする。
図13(a)はフラグ1ビット分のデータを確保するための方法を説明するための図であり、図1(a)及び(b)に基づく図である。図1と比較すると、図13(a)では取得部10から画像符号化部20に対して符号化ブロックの座標情報が提供されることを明示した点で異なっている。他の構成については図1に準ずるものとする。図13(a)では、取得部10、仮符号化系110、本符号化系120からなる構成を示すが、仮符号化系110の構成は図1(b)と同様であるので記載を省略している。
取得部10は本符号化系120に対して符号化対象の符号化ブロックを出力する際に、当該符号化ブロックの座標情報も合わせて出力する。ここで、座標情報は例えばフレーム画像において符号化ブロックが何ライン目に存在するのかを示すライン位置の情報(ライン番号)とすることができる。図12(b)に示した例では、当該符号化ブロックが属するライン位置を示すY座標値を座標情報として出力することができる。このとき、座標情報が取り得る値は0から2047までのいずれかの値となる。本符号化系120の符号化部111Eの量子化部301は、入力された座標情報を符号化ブロックの画素数で割った余りを符号化ブロック内の座標情報に置き換える。そして該ブロック内の座標情報に位置する画素データを1ビット多く削除して量子化する。例えば符号化対象の符号化ブロックがフレームの20ライン目だった場合、該フレームにおける座標情報におけるY座標値は19である。一方、本実施形態における符号化ブロックが有する輝度成分(Y成分)の画素数を16とすると、符号化ブロック内で画素を指定する座標情報として0から15を取り得る。そして剰余演算の結果、3という値を符号化ブロック内の座標情報とし、量子化部301は該ブロック内座標情報3に位置するY成分の画素データについて、他の画素データよりも1ビット多く削除して量子化することによりビット数を削減する。
前記説明では水平16画素として16で割ったが、色差分の画素数も入れて計算をしても良い。その場合は、1ビット多く削除して量子化する画素はY、Cb、Crのいずれかの成分となる。その際、画像の特性に応じて輝度信号(Y)から削除するか、或いは、色差信号(Cr,b)のいずれかから削除するかを決定しても良い。また剰余演算から得られた値をインデックスとして、予め定められたテーブルから符号化ブロック内の座標情報を算出しても良い。テーブルを用いる場合について図14を用いて説明する。図14(b)に示しているのがテーブルである。インデックスが剰余で、値には符号化ブロック内の座標情報が記録されている。ここでは符号化ブロックサイズが水平16画素なのでインデックス0から15までとなっているが、符号化ブロックサイズに応じて変更しても良い。
図14(a)は、フレームにおいて、X座標が1の列の符号化ブロックにおいてヘッダ省略モードが続いた場合を示している。またX座標が1の列の符号化ブロックは、他のX座標の符号化ブロックよりも詳細に示しており、かつ上部に記載している数値はY成分のブロック内の画素座標情報である。その他の成分については記載を省略している。
X座標が1の列の符号化ブロックにおいて最初にヘッダ省略モードになる符号化ブロックは座標が(1,0)の1ライン目の符号化ブロックである。Y座標の0という値が剰余の値となるので図14(b)のテーブルから符号化ブロック内の座標0を得る。よって参照番号1401に示した符号化ブロックの0番目(先頭)の画素が1ビット多く量子化される画素となる。次に座標が(1、1)の2ライン目の符号化ブロックでは、テーブルから座標15という値が得られる。よって座標(1,1)の符号化ブロックにおいては、参照番号1402が示す位置の画素が1ビット多く量子化される画素となる。図14(a)に示すように上述したテーブルによって1ビット多く削除して量子化する画素位置が離れるように設定することで縦に圧縮された画素が縦に並ぶことがなくなるため、縦縞が視認できるような画質劣化を低減することができる。
このように本実施形態では、符号化ブロックの全画素をPCMで固定的に符号化したことを示す1ビットのフラグ情報を導入することで、当該フラグ情報以外の他の情報をヘッダ部から省略してヘッダ部のサイズを1ビットにまで縮小することが可能となる。この結果、目標符号量のうち、画素データ部に割り当てる符号量を増やすことが可能となり、入力画像によっては、QP決定部115が決定したQPaltよりも小さなQPで符号化可能になるため、画質劣化を低減する効果が得られる。また、1ビット多く削除して量子化する画素について、符号化対象のフレーム画像のカラム方向に隣接するブロックにおいて同一位置で連続しないように決定することで、当該画素を1フレーム内で分散させることができる。これによりヘッダ省略モードの符号化ブロックが縦に並んだ場合においても縦縞のような画質劣化を低減することができる。
なお、上記の例では、ヘッダ省略モードフラグが1ビットの場合について説明したが、フラグに2ビット以上のサイズが割り当てられる場合、ビットの確保先となる画素をフラグビット数に応じた数とすることができる。その際に、符号化ブロックが属するライン毎に複数の画素位置の組み合わせを予め用意しておくことができる。また、画像データが、YCbCr、ベイヤー配列データなどの画像データ形式の場合に、同一画素グループ内の各成分の画素からフラグに相当するビット数を確保してもよい。
<画像復号化部の説明>
次に、画像符号化部20で生成された符号化データを復号する、発明の実施形態に対応する画像復号化部の構成例及び動作について説明する。図2は、発明の実施形態に対応する画像復号化部40の構成例を示すブロック図である。画像処理装置100は画像復号化部40を有し、メモリ30に記憶された符号化データを復号することができる。以下、本実施形態の画像復号化部の構成例において各ブロックの動作について説明する。
図2に示す画像復号化部40は、分離部203、可変長復号化部204、加算器205、セレクタ206、逆量子化部207、予測部208で構成されている。画像復号化部40は、専用のデバイス、ロジック回路やメモリを用いてハードウェア的に一体的に構成されても良いし、或いは、複数のデバイス等で分散して構成されてもよい。或いは、メモリに記憶されている処理プログラムをCPU等のコンピュータが実行することにより、ソフトウェア的に構成されてもよい。
画像復号化部40には、非図示の画像メモリ、バスインターフェースなどを介して、画像符号化部20で生成されたストリームデータが入力端子201を介して分離部203に入力される。分離部203は入力されたストリームデータを所定のフォーマットに従ってデコードして、QP、PCM/DPCM選択フラグ、符号データの情報を分離し、処理サイクル毎に順次出力する。また、分離部203は、ヘッダにおけるヘッダ省略モードフラグが無効(値0)を示している場合は、その後に多重されているPCM/DPCM選択フラグが示す値を順次出力する。また、ヘッダ情報に含まれる先頭のQPと、QPが切り替る位置の情報に基づき、逆量子化部207、量子化部210にQPを所定のタイミングで出力する。
ヘッダにおけるヘッダ省略モードフラグが有効(値1)を示している場合、分離部203は、このブロックの全ての画素について、PCMモードを示す値をPCM/DPCM選択フラグとして出力する。また、予め定められた画素ごとのQPパターンに基づきQPを逆量子化部207と量子化部210に出力し、PCM/DPCM選択フラグはセレクタ206に出力する。当該QPパターンは、QP決定部116と同様の処理によって算出してもよいし、予め算出した値を分離部203が保持しておいてもよい。符号データのうち、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を介し、外部へと出力される。
ここで、図13(b)を参照して、ヘッダ省略モードにおける復号時の動作について説明する。メモリ30は、画像符号化部20が生成した符号化データを記憶している。メモリI/F1301は、メモリ・アクセス要求を調停し、メモリ30に対する読み出し制御を行う。復号部40は、入力した符号化データの復号を行い、復号した画素データを出力する。画像処理部1302は、画素データを用いて画像処理を行うブロックで、現像処理や、別の符号化処理などを行うブロックである。
画像処理部1302からは、これから画像処理する画素の位置情報を出力し、復号部40に入力する。復号部40では、入力した画素位置情報をメモリ30のアドレスに変換し、メモリI/F1301に対し対応する符号化データの読み出し要求を発行する。読み出し要求に応じて得られた符号化データの画素位置を復号部40は保持しているので、読み出された符号化データがヘッダ省略モードで符号化されていたとしても1ビット多く削除されて量子化されている画素位置を把握して逆量子化部207が逆量子化を行うので、正しく復号することができる。
上述の発明の実施形態において、画像データのビット数は、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画素の隣接画素を含めることができる。
(第2の実施形態)
第1の実施形態では、ヘッダ省略モードフラグの1ビット分の符号量を捻出するための1ビット多く削除して量子化する画素位置を決めるために、フレームにおける符号化ブロックの座標情報を利用した。これに対して本実施形態では、符号化ブロック内の所定の画素の量子化後の画素値を用いて1ビット多く削除して量子化する画素の位置を決定する実施形態について説明する。
図15(a)は1つの符号化ブロックがヘッダ省略モードになった際の各情報が持つサイズを示しており、括弧内の数値がそのビット数である。図15(a)は、Y成分の先頭画素の画素値に応じて1ビット多く削除して量子化する画素の位置を決定していることを示している。ここではY成分のブロック内の画素座標情報のみを示し、その他の成分については記載を省略している。参照番号1501は、符号化ブロックの先頭の画素である。該画素データの値は、固定のQPで量子化された値である。
例えば先頭画素1501の画素値が「9」であった場合、符号化ブロックの先頭画素から9番目の画素位置である参照番号1502の画素データを1ビット多く削除して量子化する画素として決定する。本実施形態において、1つの符号化データにおいてY成分は16画素存在する。そして、画素データ5ビットのうち下位4ビットの値を1ビット多く削除して量子化する画素の座標として捉える。図15の例では、参照番号1501の画素値は、「9(01001)」もしくは「25(11001)」という値の時に参照番号2002が1ビット多く削除して量子化する画素として決定される。この例の場合、参照番号1501の画素値が0だった時は、例えば、先頭画素以外の他の予め定めた座標位置のY成分の画素データを1ビット多く削除して量子化する画素とすることができる。もしくは符号化時に1フレーム画像の符号化データのヘッダに座標位置を埋め込んで、復号部に伝達しても良い。いずれの場合においても復号時に当該座標位置が特定できればよい。
図15(b)は、フレームにおいて、符号化ブロックのX座標2の列においてヘッダ省略モードが続いた場合を示しており、上述した方法で、1ビット多く削除して量子化する画素位置を変えた場合の例を示している。2列目の符号化ブロックの上部に記載されている数値は、2列目の符号化ブロックのY成分の画素座標情報である。また2列目の符号化ブロックの左側に記載している数値(下線部有りの数値)は2列目の符号化ブロックそれぞれの先頭画素の量子化後の画素値である。符号化ブロック座標(1、0)の符号化ブロックの先頭画素値は5である。よって、先頭画素を0番目として先頭から5番目の画素位置のY成分の画素1511が1ビット多く削除して量子化される画素として決定される。次に符号化ブロック座標(1、1)の符号化ブロックの先頭画素値は21である。よって画素1511の真下の画素が1ビット多く削除して量子化される画素として決定される。ここで、2つの画素がX成分方向に連続しているが、続く符号化ブロック座標(1、2)の符号化ブロックの先頭画素値は26であるので、先頭画素から10番目の画素位置の画素が1ビット多く削除して量子化される画素として決定され、X成分方向への連続性を断ち切ることができる。
このように、本実施形態によれば符号化ブロック内の先頭画素の画素値を用いて1ビット多く削除して量子化する画素位置を決定することができるので、符号化ブロック内の座標情報のような符号化部や復号部ブロック以外からの情報を必要とせずに1ビット多く削除して量子化する画素位置を決定することができる。
また、復号の際は、この例では符号化ブロックの先頭画素を可変長復号すれば量子化後の画素値が得られるので、1ビット多く削除して量子化されている画素位置を特定でき、正しく復号することが可能である。
上記の本実施形態では、符号化ブロックの先頭画素の画素値に応じて1ビット多く削除して量子化する画素の位置を特定したが、他の位置の画素の値に応じて決定しても良い。フレーム画像の符号化データのヘッダ(1フレームに1回送れば良い)に、どの画素位置に応じて1ビット多く削除して量子化する画素の位置を決定するのかを記載すればフレーム毎に異なる画素位置に変更しても復号部に画素位置を伝えることが可能なので正しく復号することができる。
以上によれば、本実施形態においても、ヘッダ省略モードの符号化ブロックが縦に並んだ場合においても縦縞のような画質劣化を低減することができる。