【課題】ブロック数を多くしても圧縮後の符号量を削減することができ、かつ、ブロックの間で量子化レベルが異なっていても予測誤差データを算出することができる画像処理装置を提供する。
【解決手段】ブロックの量子化レベルを判定し、量子化レベルを用いた乱数ディザリングにより画像データを量子化し、1ラインの先頭画素の量子化データを出力する。次の画素の量子化データから現在の画素の量子化データを減算し、2番目以降の画素の予測誤差データを出力する。現在の量子化レベルを用いたビットのシフト演算により現在のブロックの最後の画素の量子化データを逆量子化し、遅延し、次のブロックの量子化レベルを用いたビットのシフト演算により遅延データを量子化して、次のブロックの先頭画素の量子化データから減算し、次のブロックの先頭画素の予測誤差データを出力する。
前記量子化レベル判定部は、前記各々のブロックについて、隣接する2つの画素のRGB毎の画素データの差分の絶対値と閾値とを比較し、前記各々のブロックが、全ての前記隣接する2つの画素のRGB毎の画素データの差分の絶対値が前記閾値よりも小さい平坦領域なのか、前記全ての隣接する2つの画素のRGB毎の画素データの差分の絶対値が前記閾値以上である非平坦領域なのかを判定することにより、前記各々のブロックの量子化レベルを判定する請求項2に記載の画像処理装置。
【発明を実施するための形態】
【0026】
以下に、添付の図面に示す好適実施形態に基づいて、本発明の画像処理装置を詳細に説明する。
【0027】
図1は、本発明の画像処理装置の概略的な構成を表す一実施形態のブロック図である。
図1に示す画像処理装置10は、1ラインを複数のブロックに分割し、複数のブロックの各々に含まれる複数の画素の各々の画像データを量子化して圧縮し、さらに、逆量子化して伸張するものである。画像処理装置10は、画像圧縮部(エンコーダ)12と、メモリ14と、画像伸張部(デコーダ)16とを備えている。
【0028】
図2は、
図1に示す画像圧縮部の構成を表す一実施形態のブロック図である。
図2に示す画像圧縮部12は、各々のブロックに含まれる各々の画素の画像データを量子化して圧縮するものであり、量子化レベル判定部18と、第1の量子化処理部20と、第1の逆量子化処理部22と、第1の遅延部24と、第2の量子化処理部26と、減算部28と、第1の出力部30と、第1の制御部32Aおよび32Bとを備えている。
【0029】
画像圧縮部12において、量子化レベル判定部18には、画像データが外部から入力される。量子化レベル判定部18は、各々のブロックの複数の画素の画像データに基づいて、各々のブロックの量子化レベル(量子化係数)を判定して判定結果を出力する。
【0030】
続いて、第1の量子化処理部20には、画像データが外部から入力され、量子化レベルの判定結果が量子化レベル判定部18から入力される。第1の量子化処理部20は、各々のブロックの判定結果に対応する量子化レベルを用いた乱数ディザリングにより、各々のブロックの各々の画素の画像データを量子化して第1の量子化データを出力する。
【0031】
続いて、第1の逆量子化処理部22には、第1の量子化データが第1の量子化処理部20から入力され、量子化レベルの判定結果が量子化レベル判定部18から入力される。第1の逆量子化処理部22は、各々のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により、各々のブロックの各々の画素の第1の量子化データを逆量子化して第1の逆量子化データを出力する。
【0032】
続いて、第1の制御部32Aには、第1の量子化データが第1の量子化処理部20から入力され、第1の逆量子化データが第1の逆量子化処理部22から入力される。第1の制御部32Aは、各々のブロックの最後の画素の画像データを制御する場合に、各々のブロックの最後の画素の第1の逆量子化データを第1の選択データとして出力し、各々のブロックの最後の画素以外の画素の画像データを制御する場合に、各々のブロックの最後の画素以外の画素の第1の量子化データを第1の選択データとして出力するように制御する。
【0033】
続いて、第1の遅延部24には、第1の選択データが第1の制御部32Aから入力される。第1の遅延部24は、各々のブロックの各々の画素の第1の選択データを、1画素分の時間だけ、遅延して第1の遅延データを出力する。
【0034】
続いて、第2の量子化処理部26には、第1の遅延データが第1の遅延部24から入力され、量子化レベルの判定結果が量子化レベル判定部18から入力される。第2の量子化処理部26は、各々のブロックの最後の画素以外の画素の画像データを量子化する場合、現在のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により、現在のブロックの各々の画素の第1の遅延データを量子化して第2の量子化データを出力する。各々のブロックの最後の画素の画像データを量子化する場合、現在のブロックの次のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により、現在のブロックの最後の画素の第1の遅延データを量子化して第2の量子化データを出力する。
【0035】
続いて、第1の制御部32Bには、第1の遅延データが第1の遅延部24から入力され、第2の量子化データが第2の量子化処理部26から入力される。第1の制御部32Bは、各々のブロックの最後の画素の画像データを制御する場合に、各々のブロックの最後の画素の第2の量子化データを第2の選択データとして出力し、各々のブロックの最後の画素以外の画素の画像データを制御する場合に、各々のブロックの最後の画素以外の画素の第1の遅延データを第2の選択データとして出力するように制御する。
【0036】
続いて、減算部28には、第1の量子化データが第1の量子化処理部20から入力され、1画素前の第2の選択データが第1の制御部32Bから入力される。減算部28は、各々のブロックの各々の画素の第1の量子化データから、1画素前の第2の選択データを減算して予測誤差データを出力する。
【0037】
続いて、第1の出力部30には、第1の量子化データが第1の量子化処理部20から入力され、予測誤差データが減算部28から入力される。第1の出力部30は、1ラインの先頭画素の画像データを出力する場合に1ラインの先頭画素の第1の量子化データを圧縮データとして出力し、1ラインの2番目以降の画素の画像データを出力する場合に1ラインの2番目以降の画素の予測誤差データを圧縮データとして出力する。
【0038】
続いて、メモリ14には、圧縮データが第1の出力部30から入力される。圧縮データはメモリ14に格納(保存)される。
【0039】
図3は、
図1に示す画像伸張部の構成を表す一実施形態のブロック図である。
図3に示す画像伸張部16は、メモリ14から読み出された各々のブロックの各々の画素の圧縮データを逆量子化して伸張するものであり、第2の逆量子化処理部34と、第2の遅延部36と、第3の量子化処理部38と、加算部40と、第2の出力部42と、第3の逆量子化処理部44と、第2の制御部46Aおよび46Bとを備えている。
【0040】
画像伸張部16において、第2の逆量子化処理部34には、加算部40から加算データが入力され、量子化レベルの判定結果が量子化レベル判定部18から入力される。第2の逆量子化処理部34は、各々のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により、各々のブロックの各々の画素の加算データを逆量子化して第2の逆量子化データを出力する。
【0041】
続いて、第2の制御部46Aには、加算データが加算部40から入力され、第2の逆量子化データが第2の逆量子化処理部34から入力される。第2の制御部46Aは、各々のブロックの最後の画素の圧縮データを制御する場合に各々のブロックの最後の画素の第2の逆量子化データを第3の選択データとして出力し、各々のブロックの最後の画素以外の画素の圧縮データを制御する場合に各々のブロックの最後の画素以外の画素の加算データを第3の選択データとして出力するように制御する。
【0042】
続いて、第2の遅延部36には、第3の選択データが第2の制御部46Aから入力される。第2の遅延部36は、各々のブロックの各々の画素の第3の選択データを、1画素分の時間だけ、遅延して第2の遅延データを出力する。
【0043】
続いて、第3の量子化処理部38には、第2の遅延データが第2の遅延部36から入力され、量子化レベルの判定結果が量子化レベル判定部18から入力される。第3の量子化処理部38は、各々のブロックの最後の画素以外の画素の画像データを量子化する場合、
現在のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により、現在のブロックの各々の画素の第2の遅延データを量子化して第3の量子化データを出力する。各々のブロックの最後の画素の画像データを量子化する場合、現在のブロックの次のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により、現在のブロックの最後の画素の第2の遅延データを量子化して第3の量子化データを出力する。
【0044】
続いて、第2の制御部46Bには、第2の遅延データが第2の遅延部36から入力され、第3の量子化データが第3の量子化処理部38から入力される。第2の制御部46Bは、各々のブロックの最後の画素の圧縮データを制御する場合に各々のブロックの最後の画素の第3の量子化データを第4の選択データとして出力し、各々のブロックの最後の画素以外の画素の圧縮データを制御する場合に各々のブロックの最後の画素以外の画素の第2の遅延データを第4の選択データとして出力するように制御する。
【0045】
続いて、加算部40には、メモリ14から読み出された圧縮データが入力され、1画素前の第4の選択データが第2の制御部46Bから入力される。加算部40は、メモリ14から読み出された各々のブロックの各々の画素の圧縮データと各々のブロックの各々の画素の、1画素前の第4の選択データを加算して加算データを出力する。
【0046】
続いて、第2の出力部42には、メモリ14から読み出された圧縮データが入力され、加算データが加算部40から入力される。第2の出力部42は、1ラインの先頭画素の圧縮データを出力する場合にメモリ14から読み出された1ラインの先頭画素の圧縮データを第4の量子化データとして出力し、1ラインの2番目以降の画素の圧縮データを出力する場合に、1ラインの2番目以降の画素の加算データを第4の量子化データとして出力する。
【0047】
続いて、第3の逆量子化処理部44には、第4の量子化データが第2の出力部42から入力され、量子化レベルの判定結果が量子化レベル判定部18から入力される。第3の逆量子化処理部44は、各々のブロックの判定結果に対応する量子化レベルを用いた乱数ディザリングにより、各々のブロックの各々の画素の第4の量子化データを逆量子化して伸張データを出力する。
【0048】
次に、乱数ディザリングによる量子化および逆量子化について説明する。
【0049】
ディザリングは、量子化誤差による視覚的な画像の劣化を抑えるための技術である。ディザリングによる量子化では、画像データの量子化の際に、画像データの下位ビット成分を切り捨てて単純に丸めるだけではなく、例えば、画像データにおいて、視覚的な誤差が小さくなるように、下位ビット成分の切り捨てまたは切り上げが制御される。ディザリングの1つに乱数ディザリングがある。
【0050】
乱数ディザリングによる量子化データおよび逆量子化データの演算式は、例えば、式(1)に示す通りである。
量子化データ:Quant = Floor ((In + Rand(Q)) / Q)
逆量子化データ:DeQuant = Quant * Q - Rand(Q) … 式(1)
ここで、Floorは、小数点以下の数値を切り捨てる関数、Inは入力画像データ、Qは量子化レベル、Rand(Q)は、量子化レベルQに基づいて生成される擬似乱数である。
【0051】
乱数ディザリングによる量子化では、量子化レベルQに基づいて、0〜量子化レベルQ−1の範囲の擬似乱数Rand(Q)が生成され、入力画像データInおよび擬似乱数Rand(Q)を加算して加算データが生成され、量子化レベルQに基づいて、加算データを量子化することにより量子化データQuantが生成される。また、乱数ディザリングによる逆量子化では、量子化データQuantおよび量子化レベルQを掛け、擬似乱数Rand(Q)を減算して逆量子化することにより逆量子化データDeQuantが生成される。
【0052】
例えば、量子化レベルQ=4の場合、擬似乱数Rand(Q)の可能な範囲は、[2, 3, 4, 5]となる。入力画像データIn=22、量子化の際の擬似乱数Rand(Q)=3、逆量子化の際の擬似乱数Rand(Q)=2の場合、量子化データおよび逆量子化データは、下記式(2)の通りとなる。
量子化データ:Quant = Floor ((22 + 3) / 4) = 6
逆量子化データ:DeQuant = 6 * 4 - 2 = 22 … 式(2)
【0053】
乱数ディザリングによる量子化および逆量子化の場合、量子化データQuantは入力画像データInの近傍の値に確率的に決まり、空間的または時間的に見ると、その平均値は保存される。乱数ディザリングによる量子化および逆量子化では、擬似乱数Rand(Q)の処理が複雑であり、ハードウェアの規模が大きいというデメリットはあるが、量子化および逆量子化後の画像の見た目の劣化を減らすことができるというメリットがある。
【0054】
次に、ビットのシフト演算による量子化および逆量子化について説明する。
【0055】
ビットのシフト演算による量子化では、量子化レベルQに基づいて、画像データの全てのビットを下位ビット側にシフトすることにより、画像データの下位ビット成分が切り捨てられて丸められる。
【0056】
ビットのシフト演算による量子化データおよび逆量子化データの演算式は、例えば、式(3)に示す通りである。
量子化データ:Quant = Floor ((In + Q/2) / Q)
逆量子化データ:DeQuant = Quant * Q … 式(3)
【0057】
ビットのシフト演算による量子化では、入力画像データInおよび量子化レベルQ/2を加算して加算データが生成され、量子化レベルQに基づいて、加算データを量子化することにより量子化データQuantが生成される。また、ビットのシフト演算による逆量子化では、量子化データQuantおよび量子化レベルQを掛けて逆量子化することにより逆量子化データDeQuantが生成される。
【0058】
同様に、量子化レベルQ=4、入力画像データIn=22の場合、量子化データおよび逆量子化データは、下記式(4)の通りとなる。
量子化データ:Quant = Floor ((22 + 2) / 4) = 6
逆量子化データ:DeQuant = 6 * 4 = 24 … 式(4)
【0059】
ビットのシフト演算による量子化では、量子化レベルQが大きくなると、量子化および逆量子化後の画像の階調が階段状に変化し、画質の劣化が乱数ディザリングによる量子化の場合よりも大きいというデメリットはあるが、擬似乱数を発生させる必要がなく、しかもビットのシフト演算だけで画像データの下位ビット成分を切り捨てる処理を実現できるため、ハードウェアの規模が小さいというメリットがある。
【0060】
次に、画像処理装置10について、1ラインを4画素からなる複数のブロックに分割し、ブロック単位で画像データを順次圧縮伸張する場合の具体例を挙げて説明する。
【0061】
図4は、
図2に示す画像圧縮部のより具体的な構成を表す一実施形態のブロック図である。
図4に示す画像圧縮部12は、前述のように、量子化レベル判定部18と、第1の量子化処理部20と、第1の逆量子化処理部22と、第1の遅延部24と、第2の量子化処理部26と、減算部28と、第1の出力部30と、第1の制御部32Aおよび32Bとを備えている。
【0062】
画像圧縮部12において、量子化レベル判定部18は、各々のブロックが、平坦領域なのか非平坦領域なのかを判定することにより、各々のブロックの量子化レベルを判定する。つまり、平坦領域なのか非平坦領域なのかに応じてブロックの量子化レベルを決定する。
【0063】
各々のブロックが平坦領域なのか非平坦領域なのかを判定する平坦判定は、例えば、各々のブロックについて、隣接する2つの画素のRGB(赤緑青)毎の画素データの差分の絶対値と閾値とを比較し、全ての隣接する2つの画素のRGB毎の画素データの差分の絶対値が閾値よりも小さい場合に平坦領域であると判定し、全ての隣接する2つの画素のRGB毎の画素データの差分の絶対値が閾値以上である場合に非平坦領域であると判定する。
【0064】
各々のブロックにp1、p2、p3、p4の4画素が含まれる場合、例えば、平坦判定の判定式は下記式(5)となり、その演算結果が0の場合に非平坦領域であると判定され、演算結果が1の場合に平坦領域であると判定される。
(|p2[R] - p1[R]|) < (V << shift) &&
(|p3[R] - p2[R]|) < (V << shift) &&
(|p4[R] - p3[R]|) < (V << shift) &&
(|p2[G] - p1[G]|) < (V << shift) &&
(|p3[G] - p2[G]|) < (V << shift) &&
(|p4[G] - p3[G]|) < (V << shift) &&
(|p2[B] - p1[B]|) < (V << shift) &&
(|p3[B] - p2[B]|) < (V << shift) &&
(|p4[B] - p3[B]|) < (V << shift) … 式(5)
ここで、Vは、外部から設定される前述の閾値、shiftは、量子化レベルの初期設定値である。また、<<はビットのシフト演算、&&は論理積(AND)を意味する。
【0065】
一例として、V=3、shift=1であり、
図5Aに示すブロックに含まれる4画素の画像データが下記式(6)の場合について説明する。
p1[R, G, B] = (93, 38, 95)
p2[R, G, B] = (108, 5, 218)
p3[R, G, B] = (178, 98, 247)
p4[R, G, B] = (255, 229, 255) … 式(6)
【0066】
この場合、閾値(V << shift)の演算結果は、下記式(7)となり、
(V << shift) = (3 << 1) = 6 … 式(7)
隣接する2つの画素のRGB毎の差分の絶対値の演算結果は、下記式(8)となる。
(|p2[R] - p1[R]|) < (V << shift) = (|108 - 93|) < 6 = 0
(|p3[R] - p2[R]|) < (V << shift) = (|178 - 108|) < 6 = 0
(|p4[R] - p3[R]|) < (V << shift) = (|255 - 178|) < 6 = 0
(|p2[G] - p1[G]|) < (V << shift) = (|5 - 38|) < 6 = 0
(|p3[G] - p2[G]|) < (V << shift) = (|98 - 5|) < 6 = 0
(|p4[G] - p3[G]|) < (V << shift) = (|229 - 98|) < 6 = 0
(|p2[B] - p1[B]|) < (V << shift) = (|218 - 95|) < 6 = 0
(|p3[B] - p2[B]|) < (V << shift) = (|247 - 218|) < 6 = 0
(|p4[B] - p3[B]|) < (V << shift) = (|255 - 247|) < 6 = 0 … 式(8)
従って、全ての隣接する2つの画素のRGB毎の差分の絶対値の論理積の演算結果は0となり、
図5Aに示すブロックは非平坦領域であると判定される。
【0067】
他の一例として、
図5Bに示すブロックに含まれる4画素の画像データが下記式(9)の場合について説明する。
p1[R, G, B] = (102, 79, 73)
p2[R, G, B] = (101, 78, 72)
p3[R, G, B] = (100, 77, 69)
p4[R, G, B] = (100, 75, 71) … 式(9)
【0068】
この場合、隣接する2つの画素のRGB毎の差分の絶対値の演算結果は、下記式(10)となる。
(|p2[R] - p1[R]|) < (V << shift) = (|101 - 102|) < 6 = 1
(|p3[R] - p2[R]|) < (V << shift) = (|100 - 101|) < 6 = 1
(|p4[R] - p3[R]|) < (V << shift) = (|100 - 100|) < 6 = 1
(|p2[G] - p1[G]|) < (V << shift) = (|78 - 79|) < 6 = 1
(|p3[G] - p2[G]|) < (V << shift) = (|77 - 78|) < 6 = 1
(|p4[G] - p3[G]|) < (V << shift) = (|75 - 77|) < 6 = 1
(|p2[B] - p1[B]|) < (V << shift) = (|72 - 73|) < 6 = 1
(|p3[B] - p2[B]|) < (V << shift) = (|69 - 72|) < 6 = 1
(|p4[B] - p3[B]|) < (V << shift) = (|71 - 69|) < 6 = 1 … 式(10)
従って、全ての隣接する2つの画素のRGB毎の差分の絶対値の論理積は1となり、
図5Bに示すブロックは平坦領域であると判定される。
【0069】
なお、平坦判定は、平坦および非平坦の2段階に限らず、多段階に平坦度を判定してもよい。また、量子化レベル判定部18は、平坦判定に限らず、各々のブロックの複数の画素の画像データに基づいて、各々のブロックの量子化レベルを判定することができる。
【0070】
続いて、第1の量子化処理部20は、第1の平坦領域量子化部52と、第1の非平坦領域量子化部54と、第1の切替部56とを備えている。
【0071】
第1の量子化処理部20において、第1の平坦領域量子化部52は、平坦領域用の量子化レベルQ’を用いた乱数ディザリングにより、各々のブロックの各々の画素の画像データを量子化して第1の平坦領域量子化データを出力する。
【0072】
続いて、第1の非平坦領域量子化部54は、非平坦領域用の量子化レベルQを用いた乱数ディザリングにより、各々のブロックの各々の画素の画像データを量子化して第1の非平坦領域量子化データを出力する。
【0073】
続いて、第1の切替部56は、第1の量子化データとして、各々のブロックが平坦領域である場合に第1の平坦領域量子化データを出力し、各々のブロックが非平坦領域である場合に第1の非平坦領域量子化データを出力する。
【0074】
続いて、第1の逆量子化処理部22は、第1の平坦領域逆量子化部58と、第1の非平坦領域逆量子化部60と、第2の切替部62とを備えている。
【0075】
第1の逆量子化処理部22において、第1の平坦領域逆量子化部58は、平坦領域用の量子化レベルQ’を用いたビットのシフト演算により、各々のブロックの各々の画素の第1の量子化データを逆量子化して第1の平坦領域逆量子化データを出力する。
【0076】
続いて、第1の非平坦領域逆量子化部60は、非平坦領域用の量子化レベルQを用いたビットのシフト演算により、各々のブロックの各々の画素の第1の量子化データを逆量子化して第1の非平坦領域逆量子化データを出力する。
【0077】
続いて、第2の切替部62は、第1の逆量子化データとして、各々のブロックが平坦領域である場合に第1の平坦領域逆量子化データを出力し、各々のブロックが非平坦領域である場合に第1の非平坦領域逆量子化データを出力する。
【0078】
続いて、第1の制御部32Aは、カウンタ70と、第7の切替部72とを備えている。
【0079】
第1の制御部32Aにおいて、カウンタ70は、各々のブロックの最後の画素、本実施形態の場合には4番目の画素の処理タイミングを検出するために設けられたものであり、各々のブロックの画素の番号をカウントしてカウント値を出力する。
【0080】
続いて、第7の切替部72は、カウント値が、各々のブロックの最後の画素の番号である場合に第1の逆量子化データを第1の選択データとして出力し、カウント値が、各々のブロックの最後の画素の番号ではない場合に第1の量子化データを第1の選択データとして出力する。
【0081】
続いて、第1の遅延部24には、第1の選択データが第1の制御部32Aの第7の切替部72から入力される。第1の遅延部24は、各々のブロックの各々の画素の第1の選択データを、1画素分の時間だけ、遅延して第1の遅延データを出力する。
【0082】
続いて、第2の量子化処理部26は、第2の平坦領域量子化部64と、第2の非平坦領域量子化部66と、第3の切替部68とを備えている。
【0083】
第2の量子化処理部26において、第2の平坦領域量子化部64は、平坦領域用の量子化レベルQ’を用いたビットのシフト演算により、各々のブロックの各々の画素の第1の遅延データを量子化して第2の平坦領域量子化データを出力する。
【0084】
続いて、第2の非平坦領域量子化部66は、非平坦領域用の量子化レベルQを用いたビットのシフト演算により、各々のブロックの各々の画素の第1の遅延データを量子化して第2の非平坦領域量子化データを出力する。
【0085】
続いて、第3の切替部68は、第2の量子化データとして、各々のブロックの最後の画素以外の画素の画像データを出力する場合、現在のブロックが平坦領域である場合に第2の平坦領域量子化データを出力し、現在のブロックが非平坦領域である場合に第2の非平坦領域量子化データを出力する。各々のブロックの最後の画素の画像データを出力する場合、次のブロックが平坦領域である場合に第2の平坦領域量子化データを出力し、次のブロックが非平坦領域である場合に第2の非平坦領域量子化データを出力する。
【0086】
続いて、第1の制御部32Bは、第8の切替部74を備えている。
【0087】
第1の制御部32Bの第8の切替部74は、カウント値が、各々のブロックの最後の画素の番号である場合に第2の量子化データを第2の選択データとして出力し、カウント値が、各々のブロックの最後の画素の番号ではない場合に第1の遅延データを第2の選択データとして出力する。
【0088】
図6は、
図3に示す画像伸張部のより具体的な構成を表す一実施形態のブロック図である。
図6に示す画像伸張部16は、前述のように、第2の逆量子化処理部34と、第2の遅延部36と、第3の量子化処理部38と、加算部40と、第2の出力部42と、第3の逆量子化処理部44と、第2の制御部46Aおよび46Bとを備えている。
【0089】
画像伸張部16において、第2の逆量子化処理部34は、第2の平坦領域逆量子化部76と、第2の非平坦領域逆量子化部78と、第4の切替部80とを備えている。
【0090】
第2の逆量子化処理部34において、第2の平坦領域逆量子化部76は、平坦領域用の量子化レベルQ’を用いたビットのシフト演算により、各々のブロックの各々の画素の加算データを逆量子化して第2の平坦領域逆量子化データを出力する。
【0091】
続いて、第2の非平坦領域逆量子化部78は、非平坦領域用の量子化レベルQを用いたビットのシフト演算により、各々のブロックの各々の画素の加算データを逆量子化して第2の非平坦領域逆量子化データを出力する。
【0092】
続いて、第4の切替部80は、第2の逆量子化データとして、各々のブロックが平坦領域である場合に第2の平坦領域逆量子化データを出力し、各々のブロックが非平坦領域である場合に第2の非平坦領域逆量子化データを出力する。
【0093】
続いて、第2の制御部46Aは、第9の切替部94を備えている。
【0094】
第2の制御部46Aの第9の切替部94は、カウント値が、各々のブロックの最後の画素の番号である場合に第2の逆量子化データを第3の選択データとして出力し、カウント値が、各々のブロックの最後の画素の番号ではない場合に加算データを第3の選択データとして出力する。
【0095】
続いて、第2の遅延部36には、第3の選択データが第2の制御部46Aの第9の切替部94から入力される。第2の遅延部36は、各々のブロックの各々の画素の第3の選択データを、1画素分の時間だけ、遅延して第2の遅延データを出力する。
【0096】
続いて、第3の量子化処理部38は、第3の平坦領域量子化部82と、第3の非平坦領域量子化部84と、第5の切替部86とを備えている。
【0097】
第3の量子化処理部38において、第3の平坦領域量子化部82は、平坦領域用の量子化レベルQ’を用いたビットのシフト演算により、各々のブロックの各々の画素の第2の遅延データを量子化して第3の平坦領域量子化データを出力する。
【0098】
続いて、第3の非平坦領域量子化部84は、非平坦領域用の量子化レベルQを用いたビットのシフト演算により、各々のブロックの各々の画素の第2の遅延データを量子化して第3の非平坦領域量子化データを出力する。
【0099】
続いて、第5の切替部86は、第3の量子化データとして、各々のブロックの最後の画素以外の画素の画像データを出力する場合、現在のブロックが平坦領域である場合に第3の平坦領域量子化データを出力し、現在のブロックが非平坦領域である場合に第3の非平坦領域量子化データを出力する。各々のブロックの最後の画素の画像データを出力する場合、次のブロックが平坦領域である場合に第3の平坦領域量子化データを出力し、次のブロックが非平坦領域である場合に第3の非平坦領域量子化データを出力する。
【0100】
続いて、第2の制御部46Bは、第10の切替部96を備えている。
【0101】
第2の制御部46Bの第10の切替部96は、カウント値が、各々のブロックの最後の画素の番号である場合に第3の量子化データを第4の選択データとして出力し、カウント値が、各々のブロックの最後の画素の番号ではない場合に第2の遅延データを第4の選択データとして出力する。
【0102】
続いて、第3の逆量子化処理部44は、第3の平坦領域逆量子化部88と、第3の非平坦領域逆量子化部90と、第6の切替部92とを備えている。
【0103】
第3の逆量子化処理部44において、第3の平坦領域逆量子化部88は、平坦領域用の量子化レベルQ’を用いた乱数ディザリングにより、各々のブロックの各々の画素の第4の量子化データを逆量子化して第3の平坦領域逆量子化データを出力する。
【0104】
続いて、第3の非平坦領域逆量子化部90は、非平坦領域用の量子化レベルQを用いた乱数ディザリングにより、各々のブロックの各々の画素の第4の量子化データを逆量子化して第3の非平坦領域逆量子化データを出力する。
【0105】
続いて、第6の切替部92は、伸張データとして、各々のブロックが平坦領域である場合に第3の平坦領域逆量子化データを出力し、各々のブロックが非平坦領域である場合に第3の非平坦領域逆量子化データを出力する。
【0106】
なお、量子化レベル判定部18を画像圧縮部12だけに設けて、画像伸張部16においても、その判定結果の出力を使用してもよいし、その逆でもよいし、あるいは、画像圧縮部12および画像伸張部16の両方に設けてもよい。カウンタ70も同様である。
【0107】
次に、画像処理装置10の動作を説明する。
【0108】
画像データを圧縮する場合、1ラインの各々のブロックに含まれる複数の画素の画像データが量子化レベル判定部18に順次入力される。また、1ラインに含まれる各々の画素の画像データが第1の量子化処理部20に順次入力される。つまり、量子化レベル判定部18には画像データがブロック単位で順次入力され、第1の量子化処理部20には、画像データが画素単位で順次入力される。
【0109】
画像圧縮部12では、まず、量子化レベル判定部18において、各々のブロックの量子化レベルが判定され、各々のブロックの量子化レベルの判定結果が出力される。
【0110】
また、各々のブロックの量子化レベルの判定結果が出力された後、第1の量子化処理部20において、各々のブロックの判定結果に対応する量子化レベルを用いた乱数ディザリングにより、1ラインの各々のブロックの各々の画素の画像データが量子化され、各々のブロックの各々の画素の第1の量子化データが出力される。
【0111】
つまり、第1の平坦領域量子化部52において、平坦領域用の量子化レベルQ’を用いた乱数ディザリングにより、各々のブロックの各々の画素の画像データが量子化され、第1の平坦領域量子化データが出力される。また、第1の非平坦領域量子化部54において、非平坦領域用の量子化レベルQを用いた乱数ディザリングにより、各々のブロックの各々の画素の画像データが量子化され、第1の非平坦領域量子化データが出力される。
【0112】
続いて、第1の切替部56から、各々のブロックの各々の画素の第1の量子化データとして、各々のブロックが平坦領域である場合に第1の平坦領域量子化データが出力され、各々のブロックが非平坦領域である場合に第1の非平坦領域量子化データが出力される。
【0113】
1ラインの先頭ブロックの先頭画素の画像データ、つまり、1ラインの先頭画素の画像データを量子化する場合、先頭ブロックの先頭画素の第1の量子化データが、第1の出力部30から先頭ブロックの先頭画素の圧縮データとして出力され、メモリ14に格納される。第1の出力部30は、ラインのデータイネーブル信号等により、ラインの先頭画素を識別する。メモリ14に格納される圧縮データは、RGBの画像データの場合、RGBの第1の量子化データとなり、YUV(Y:輝度およびUV:色差)の画像データの場合、YUVの第1の量子化データとなる。画像データが他の色空間の画像データの場合も同様である。
【0114】
また、先頭ブロックの先頭画素の第1の量子化データは、
図4において破線で示すように、カウンタ70のカウント値=1に応じて、第1の制御部32Aの第7の切替部72から先頭ブロックの先頭画素の第1の選択データとして出力される。続いて、先頭ブロックの先頭画素の第1の選択データは、第1の遅延部24から先頭ブロックの先頭画素の第1の遅延データとして出力され、先頭ブロックの先頭画素の第1の遅延データは、
図4において破線で示すように、カウンタ70のカウント値=1に応じて、第1の制御部32Bの第8の切替部74から先頭ブロックの先頭画素の第2の選択データとして出力される。
【0115】
続いて、先頭ブロックの2番目の画素の画像データを量子化する場合、減算部28において、先頭ブロックの2番目の画素の第1の量子化データから先頭ブロックの先頭画素の第2の選択データが減算され、つまり、先頭ブロックの2番目の画素の第1の量子化データと先頭画素の第1の量子化データとの差分が算出され、先頭ブロックの2番目の画素の予測誤差データが出力される。差分の算出は、RGB色空間の第1の量子化データに限らず、色空間を変換して、例えば、YUV色空間等の第1の量子化データで行ってもよい。
【0116】
続いて、先頭ブロックの2番目の画素の予測誤差データは、第1の出力部30から圧縮データとして出力され、メモリ14に格納される。
【0117】
先頭ブロックの2番目の画素の画像データを量子化する場合の第1の制御部32Aおよび32Bならびに第1の遅延部24の動作は、先頭ブロックの先頭画素の画像データを量子化する場合の動作と同様である(破線の経路)。
【0118】
続いて、先頭ブロックの3番目の画素の画像データを量子化する場合の動作は、先頭ブロックの2番目の画素の画像データを量子化する場合の動作と同様である。
【0119】
続いて、先頭ブロックの4番目の画素の画像データを量子化する場合の減算部28、第1の出力部30およびメモリ14の動作は、先頭ブロックの2番目の画素の画像データを量子化する場合の動作と同様である。
【0120】
先頭ブロックの4番目の画素の第1の量子化データは、第1の逆量子化処理部22において、先頭ブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により逆量子化され、先頭ブロックの4番目の画素の第1の逆量子化データが出力される。
【0121】
つまり、第1の平坦領域逆量子化部58において、平坦領域用の量子化レベルQ’を用いたビットのシフト演算により、先頭ブロックの4番目の画素の第1の量子化データが逆量子化され、第1の平坦領域逆量子化データが出力される。また、第1の非平坦領域逆量子化部60において、非平坦領域用の量子化レベルQを用いたビットのシフト演算により、先頭ブロックの4番目の画素の第1の量子化データが逆量子化され、第1の非平坦領域逆量子化データが出力される。
【0122】
続いて、第2の切替部62から、先頭ブロックの4番目の画素の第1の逆量子化データとして、先頭ブロックが平坦領域である場合に第1の平坦領域逆量子化データが出力され、先頭ブロックが非平坦領域である場合に第1の非平坦領域逆量子化データが出力される。
【0123】
続いて、先頭ブロックの4番目の画素の第1の逆量子化データは、カウンタ70のカウント値=4に応じて、第1の制御部32Aの第7の切替部72から先頭ブロックの4番目の画素の第1の選択データとして出力され、先頭ブロックの4番目の画素の第1の選択データは、第1の遅延部24から先頭ブロックの4番目の画素の第1の遅延データとして出力される。
【0124】
続いて、先頭ブロックの4番目の画素の第1の遅延データは、第2の量子化処理部26において、2番目のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により量子化され、先頭ブロックの4番目の画素の第2の量子化データが出力される。
【0125】
つまり、第2の平坦領域量子化部64において、平坦領域用の量子化レベルQ’を用いたビットのシフト演算により、先頭ブロックの4番目の画素の第1の遅延データが量子化され、第2の平坦領域量子化データが出力される。また、第2の非平坦領域量子化部66において、非平坦領域用の量子化レベルQを用いたビットのシフト演算により、先頭ブロックの4番目の画素の第1の遅延データが量子化され、第2の非平坦領域量子化データが出力される。
【0126】
続いて、第3の切替部68から、先頭ブロックの4番目の画素の第2の量子化データとして、2番目のブロックが平坦領域である場合に第2の平坦領域量子化データが出力され、2番目のブロックが非平坦領域である場合に第2の非平坦領域量子化データが出力される。
【0127】
続いて、先頭ブロックの4番目の画素の第2の量子化データは、カウンタ70のカウント値=4に応じて、第1の制御部32Bの第8の切替部74から先頭ブロックの4番目の画素の第2の選択データとして出力される。
【0128】
続いて、1ラインの2番目のブロックの先頭画素の画像データを量子化する場合、減算部28において、2番目のブロックの先頭画素の第1の量子化データから先頭ブロックの4番目の画素の第2の選択データが減算され、つまり、2番目のブロックの先頭画素の第1の量子化データと先頭ブロックの4番目の画素の第1の量子化データを先頭のブロックの量子化レベルを用いたビットのシフト演算で逆量子化し、2番目のブロックの量子化レベルを用いたビットのシフト演算で量子化した第2の選択データとの差分が算出され、2番目のブロックの先頭画素の予測誤差データが出力される。
【0129】
続いて、2番目のブロックの先頭画素の予測誤差データは、第1の出力部30から圧縮データとして出力され、メモリ14に格納される。
【0130】
2番目のブロックの先頭画素の第1の量子化データを量子化する場合の第1の制御部32Aおよび32Bならびに第1の遅延部24の動作は、先頭ブロックの先頭画素の画像データを量子化する場合の動作と同様である(破線の経路)。
【0131】
これ以後の動作は、1ラインの最後の画素の画像データの量子化が終了するまで上記の動作の繰り返しとなる。
【0132】
一方、圧縮データを伸張する場合、メモリ14から読み出された圧縮データが加算部40および第2の出力部42に順次入力される。
【0133】
画像伸張部16では、先頭ブロックの先頭画素の圧縮データ、つまり、1ラインの先頭画素の圧縮データを逆量子化する場合、メモリ14から読み出された先頭ブロックの先頭画素の圧縮データが、第2の出力部42から先頭ブロックの先頭画素の第4の量子化データとして出力される。第2の出力部42は、ラインのデータイネーブル信号等により、ラインの先頭画素を識別する。
【0134】
続いて、第3の逆量子化処理部44において、先頭ブロックの判定結果に対応する量子化レベルを用いた乱数ディザリングにより、先頭ブロックの先頭画素の第4の量子化データが逆量子化され、先頭ブロックの先頭画素の伸張データが出力される。
【0135】
つまり、第3の平坦領域逆量子化部88において、平坦領域用の量子化レベルQ’を用いた乱数ディザリングにより、先頭ブロックの先頭画素の第3の量子化データが逆量子化され、第3の平坦領域逆量子化データが出力される。また、第3の非平坦領域逆量子化部90において、非平坦領域用の量子化レベルQを用いた乱数ディザリングにより、先頭ブロックの先頭画素の第3の量子化データが逆量子化され、第3の非平坦領域逆量子化データが出力される。
【0136】
続いて、第6の切替部92から、先頭ブロックの先頭画素の伸張データとして、先頭ブロックが平坦領域である場合に第3の平坦領域逆量子化データが出力され、先頭ブロックが非平坦領域である場合に第3の非平坦領域逆量子化データが出力される。
【0137】
また、先頭ブロックの先頭画素の圧縮データは、加算部40から先頭ブロックの先頭画素の加算データとして出力される。
【0138】
続いて、先頭ブロックの先頭画素の加算データは、
図6において破線で示すように、カウンタ70のカウント値=1に応じて、第2の制御部46Aから先頭ブロックの先頭画素の第3の選択データとして出力される。続いて、先頭ブロックの先頭画素の第3の選択データは、第2の遅延部36から先頭ブロックの先頭画素の第2の遅延データとして出力され、先頭ブロックの先頭画素の第2の遅延データは、
図6において破線で示すように、カウンタ70のカウント値=1に応じて、第2の制御部46Bから先頭ブロックの先頭画素の第4の選択データとして出力される。
【0139】
続いて、先頭ブロックの2番目の画素の圧縮データを逆量子化する場合、メモリ14から読み出された先頭ブロックの2番目の画素の圧縮データおよび先頭ブロックの先頭画素の第4の選択データが加算され、つまり、先頭ブロックの先頭画素の圧縮データおよび2番目の画素の圧縮データが加算され、先頭ブロックの2番目の画素の加算データが出力される。
【0140】
続いて、先頭ブロックの2番目の画素の加算データは、第2の出力部42から先頭ブロックの2番目の画素の第4の量子化データとして出力され、第3の逆量子化処理部44から先頭ブロックの2番目の画素の伸張データが出力される。
【0141】
また、先頭ブロックの2番目の画素の圧縮データを逆量子化する場合の第2の制御部46Aおよび46Bならびに第2の遅延部36の動作は、先頭ブロックの先頭画素の圧縮データを逆量子化する場合の動作と同様である(破線の経路)。
【0142】
続いて、先頭ブロックの3番目の画素の圧縮データを逆量子化する場合の動作は、先頭ブロックの2番目の画素の圧縮データを逆量子化する場合の動作と同様である。
【0143】
続いて、先頭ブロックの4番目の画素の圧縮データを逆量子化する場合の加算部40、第2の出力部42および第3の逆量子化処理部44の動作は、先頭ブロックの2番目の画素の圧縮データを逆量子化する場合の動作と同様である。
【0144】
先頭ブロックの4番目の画素の加算データは、第2の逆量子化処理部34において、先頭ブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により逆量子化され、先頭ブロックの4番目の画素の第2の逆量子化データが出力される。
【0145】
つまり、第2の平坦領域逆量子化部76において、平坦領域用の量子化レベルQ’を用いたビットのシフト演算により、先頭ブロックの4番目の画素の加算データが逆量子化され、第2の平坦領域逆量子化データが出力される。また、第2の非平坦領域逆量子化部78において、非平坦領域用の量子化レベルQを用いたビットのシフト演算により、先頭ブロックの4番目の画素の加算データが逆量子化され、第2の非平坦領域逆量子化データが出力される。
【0146】
続いて、第4の切替部80から、先頭ブロックの4番目の画素の第2の逆量子化データとして、先頭ブロックが平坦領域である場合に第2の平坦領域逆量子化データが出力され、先頭ブロックが非平坦領域である場合に第2の非平坦領域逆量子化データが出力される。
【0147】
続いて、先頭ブロックの4番目の画素の第2の逆量子化データは、カウンタ70のカウント値=4に応じて、第2の制御部46Aの第9の切替部94から先頭ブロックの4番目の画素の第3の選択データとして出力され、先頭ブロックの4番目の画素の第3の選択データは、第2の遅延部36から先頭ブロックの4番目の画素の第2の遅延データとして出力される。
【0148】
続いて、先頭ブロックの4番目の画素の第2の遅延データは、第3の量子化処理部38において、2番目のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により量子化され、先頭ブロックの4番目の画素の第3の量子化データが出力される。
【0149】
つまり、第3の平坦領域量子化部82において、平坦領域用の量子化レベルQ’を用いたビットのシフト演算により、先頭ブロックの4番目の画素の第2の遅延データが量子化され、第3の平坦領域量子化データが出力される。また、第3の非平坦領域量子化部84において、非平坦領域用の量子化レベルQを用いたビットのシフト演算により、先頭ブロックの4番目の画素の第2の遅延データが量子化され、第3の非平坦領域量子化データが出力される。
【0150】
続いて、第5の切替部86から、先頭ブロックの4番目の画素の第3の量子化データとして、2番目のブロックが平坦領域である場合に第3の平坦領域量子化データが出力され、2番目のブロックが非平坦領域である場合に第3の非平坦領域量子化データが出力される。
【0151】
続いて、先頭ブロックの4番目の画素の第3の量子化データは、カウンタ70のカウント値=4に応じて、第2の制御部46Bの第10の切替部96から先頭ブロックの4番目の画素の第4の選択データとして出力される。
【0152】
続いて、2番目のブロックの先頭画素の圧縮データを逆量子化する場合、メモリ14から読み出された2番目のブロックの先頭画素の圧縮データおよび先頭ブロックの4番目の画素の第4の選択データが加算され、つまり、2番目のブロックの先頭画素の圧縮データおよび先頭ブロックの4番目の画素の圧縮データが加算され、2番目のブロックの先頭画素の加算データが出力される。
【0153】
続いて、2番目のブロックの先頭画素の加算データを逆量子化する場合の第2の出力部42、第3の逆量子化処理部44、第2の制御部46Aおよび46Bならびに第2の遅延部36の動作は、先頭ブロックの2番目の画素の加算データを逆量子化する場合の動作と同様である。
【0154】
これ以後の動作は、1ラインの最後の画素の画像データの量子化が終了するまで上記の動作の繰り返しとなる。また、2番目以降のラインの画像データについても同様にして圧縮伸張が行われ、1画面の画像データについて圧縮伸張が行われる。
【0155】
次に、画像圧縮部12の動作タイミングについて説明する。尚、本説明では、1ラインを4画素からなる複数のブロックに分割し、ブロック単位で画像データを順次圧縮伸張する場合の具体例を挙げて説明する。
【0156】
図7は、
図4に示す画像圧縮部の動作と、
図6に示す画像伸張部の動作を表す一実施形態のタイミングチャートである。
図7のタイミングチャートは、
図4の画像圧縮部12において、1ラインの先頭画素から画像データ1、2、3、…が順次入力され、1ラインの先頭画素の第1の量子化データおよび2番目以降の画素の予測誤差データ、つまり、圧縮データが出力されるまでの動作と、
図6に示す画像伸張部16において、圧縮データが伸張され、伸張データが出力されるまでの動作を表したものである。クロック信号CLKは、1画素の画像データを処理するタイミングを制御する信号である。
【0157】
画像データ1、2、3…は、
図7のタイミングチャートに示すように、クロック信号CLKの立上がりのタイミングに同期して順次画像圧縮部12に入力される。なお、これ以後は、主に画像データ1〜4について説明を続けるが、画像データ5以降についても同様である。
【0158】
画像圧縮部12では、画像データ1〜4、つまり、先頭ブロックの4画素分の画像データが入力された後、量子化レベル判定部18から先頭ブロックの量子化レベルの判定結果が出力される。本実施形態の場合、先頭ブロックの量子化レベルの判定結果としてAが出力され、画像データ5〜8、つまり、2番目のブロックの量子化レベルの判定結果としてBが出力される。
【0159】
続いて、量子化レベル判定部18から先頭ブロックの量子化レベルの判定結果Aが出力された後、第1の量子化処理部20から、先頭ブロックの量子化レベルの判定結果Aに基づいて、画像データ1〜4に対応する第1の量子化データ1Q1A〜4Q1Aが順次出力される。
【0160】
続いて、第1の量子化処理部20から第1の量子化データ1Q1Aが出力された後、第1の出力部30から、1ラインの先頭画素に対応する圧縮データを出力する場合、第1の量子化データ1Q1Aが圧縮データとして出力され、メモリ14に格納される。
【0161】
続いて、第1の量子化処理部20から第1の量子化データ1Q1A〜4Q1Aが順次出力された後、第1の逆量子化処理部22から、先頭ブロックの量子化レベルの判定結果Aに基づいて、第1の量子化データ1Q1A〜4Q1Aに対応する第1の逆量子化データ1IQ1A〜4IQ1Aが順次出力される。
【0162】
続いて、第1の逆量子化処理部22から第1の逆量子化データ1IQ1A〜4IQ1Aが順次出力された後、第1の制御部32Aの第7の切替部72から、カウンタ70のカウント値=1〜3の場合、第1の量子化データ1Q1A〜3Q1Aが第1の選択データとして順次出力される。一方、カウント値=4の場合、第1の逆量子化データ4IQ1Aが第1の選択データとして出力される。
【0163】
続いて、第1の制御部32Aの第7の切替部72から第1の選択データ1Q1A〜3Q1Aおよび4IQ1Aが順次出力された後、第1の遅延部24から、第1の選択データ1Q1A〜3Q1Aおよび4IQ1Aが1画素分(クロック信号CLKの1クロック分)の時間だけ遅延された第1の遅延データ1Q1A〜3Q1Aおよび4IQ1Aが順次出力される。
【0164】
続いて、第1の遅延部24から第1の遅延データ1Q1A〜3Q1Aおよび4IQ1Aが順次出力された後、第2の量子化処理部26から、カウント値=1〜3の場合、先頭ブロックの量子化レベルの判定結果Aに基づいて、第2の量子化データ1Q2A〜3Q2Aが順次出力され、カウント値=4の場合、2番目のブロックの量子化レベルの判定結果Bに基づいて、第2の量子化データ4Q2Bが出力される。
【0165】
続いて、第2の量子化処理部26から第2の量子化データ1Q2A〜3Q2Aおよび4Q2Bが順次出力された後、第1の制御部32Bの第8の切替部74から、カウンタ70のカウント値=1〜3の場合、第1の遅延データ1Q1A〜3Q1Aが第2の選択データとして順次出力される。一方、カウント値=4の場合、第2の量子化データ4Q2Bが第2の選択データとして出力される。
【0166】
続いて、第1の制御部32Bの第8の切替部74から第2の選択データ1Q1A〜3Q1Aおよび4Q2Bが順次出力された後、減算部28から、第1の量子化データ2Q1A〜4Q1Aおよび5Q1Bと第2の選択データ1Q1A〜3Q1Aおよび4Q2Bとの差分データ2Q1A−1Q1A、3Q1A−2Q1A、4Q1A−3Q1Aおよび5Q1B−4Q2Bが予測誤差データ2−1PEA、3−2PEA、4−3PEAおよび5−4PEBとして順次出力される。
【0167】
続いて、減算部28から予測誤差データ2−1PEA、3−2PEA、4−3PEAおよび5−4PEBが順次出力された後、1ラインの2番目以降の画素に対応する圧縮データを出力する場合、予測誤差データ2−1PEA、3−2PEA、4−3PEAおよび5−4PEBが圧縮データとして順次出力され、メモリ14に格納される。
【0168】
画像圧縮部12では、第1の逆量子化処理部22および第2の量子化処理部26において、乱数ディザリングではなく、ビットのシフト演算により逆量子化および量子化が行われるため、
図7のタイミングチャートに示すように、第1の量子化データおよび第1の遅延データが出力されてから、クロック信号CLKの1サイクル以内で処理を完了することができる。
【0169】
次に、画像伸張部16の動作タイミングについて説明する。
【0170】
図7のタイミングチャートに示すように、メモリ14から読み出された圧縮データ1Q1A、2−1PEA、3−2PEA、4−3PEAおよび5−4PEB、…は、クロック信号CLKの立上がりのタイミングに同期して順次画像伸張部16に入力される。
【0171】
画像伸張部16では、メモリ14から圧縮データ1Q1Aが読み出された後、第2の出力部42から、1ラインの先頭画素に対応する第4の量子化データを出力し、圧縮データ1Q1Aが第4の量子化データとして出力される。
【0172】
続いて、第2の出力部42から第4の量子化データ1Q1Aが出力された後、第3の逆量子化処理部44から、先頭ブロックの量子化レベルの判定結果Aに基づいて、第4の量子化データ1Q1Aに対応する伸張データとして画像データ1が出力される。
【0173】
また、メモリ14から圧縮データ1Q1Aが読み出された後、加算部40から、圧縮データ1Q1Aが加算データとして出力される。
【0174】
続いて、メモリ14から圧縮データ2−1PEA、3−2PEA、4−3PEAおよび5−4PEBが読み出された後、圧縮データ2−1PEA、3−2PEA、4−3PEAおよび5−4PEB、つまり、差分データ2Q1A−1Q1A、3Q1A−2Q1A、4Q1A−3Q1Aおよび5Q1B−4Q2Bと、後述する第4の選択データ1Q1A〜3Q1Aおよび4Q2Bとの加算データ2Q1A〜4Q1Aおよび5Q1Bが順次出力される。
【0175】
続いて、加算部40から加算データ1Q1A〜4Q1Aが順次出力された後、第2の逆量子化処理部34から、先頭ブロックの量子化レベルの判定結果Aに基づいて、加算データ1Q1A〜4Q1Aに対応する第2の逆量子化データ1IQ1A〜4IQ1Aが順次出力される。
【0176】
続いて、第2の逆量子化処理部34から第2の逆量子化データ1IQ1A〜4IQ1Aが順次出力された後、第2の制御部46Aの第9の切替部94から、カウンタ70のカウント値=1〜3の場合、加算データ1Q1A〜3Q1Aが第3の選択データとして順次出力される。一方、カウント値=4の場合、第2の逆量子化データ4IQ1Aが第3の選択データとして出力される。
【0177】
続いて、第2の制御部46Aの第9の切替部94から第3の選択データ1Q1A〜3Q1Aおよび4IQ1Aが順次出力された後、第2の遅延部36から、第3の選択データ1Q1A〜3Q1Aおよび4IQ1Aが1画素分の時間だけ遅延された第2の遅延データ1Q1A〜3Q1Aおよび4IQ1Aが順次出力される。
【0178】
続いて、第2の遅延部36から第2の遅延データ1Q1A〜3Q1Aおよび4IQ1Aが順次出力された後、第3の量子化処理部38から、カウント値=1〜3の場合、先頭ブロックの量子化レベルの判定結果Aに基づいて、第3の量子化データ1Q2A〜3Q2Aが順次出力され、カウント値=4の場合、2番目のブロックの量子化レベルの判定結果Bに基づいて、第3の量子化データ4Q2Bが出力される。
【0179】
続いて、第3の量子化処理部38から第3の量子化データ1Q2A〜3Q2Aおよび4Q2Bが順次出力された後、第2の制御部46Bの第10の切替部96から、カウンタ70のカウント値=1〜3の場合、第2の遅延データ1Q1A〜3Q1Aが第4の選択データとして順次出力される。一方、カウント値=4の場合、第3の量子化データ4Q2Bが第4の選択データとして出力される。
【0180】
続いて、第2の制御部46Bの第10の切替部96から第4の選択データ1Q1A〜3Q1Aおよび4Q2Bが順次出力された後、前述の加算部40に順次入力される。
【0181】
続いて、加算部40から、加算データ2Q1A〜4Q1Aおよび5Q1Bが順次出力された後、1ラインの2番目以降の画素に対応する第4の量子化データを出力する場合、加算データ2Q1A〜4Q1Aおよび5Q1Bが第4の量子化データとして順次出力される。
【0182】
続いて、第2の出力部42から第4の量子化データ2Q1A〜4Q1Aおよび5Q1Bが出力された後、第3の逆量子化処理部44から、先頭ブロックの量子化レベルの判定結果Aに基づいて、第4の量子化データ2Q1A〜4Q1Aおよび5Q1Bに対応する伸張データとして画像データ2、3、4、…が順次出力される。
【0183】
画像伸張部16においても、第2の逆量子化処理部34および第3の量子化処理部38において、乱数ディザリングではなく、ビットのシフト演算により逆量子化および量子化が行われるため、
図7のタイミングチャートに示すように、加算データおよび第2の遅延データが出力されてから、クロック信号CLKの1サイクル以内で処理を完了することができる。
【0184】
以上のように、画像圧縮部12では、現在の画素が現在のブロックの最後の画素ではなくかつ先頭ブロックの先頭画素でない場合、第1の遅延部24において、現在の画素の第1の量子化データが遅延された第1の遅延データが予測誤差データの算出に使用される。
【0185】
一方、平坦領域のブロックと非平坦領域のブロックとの間では量子化レベルが異なるため、そのままでは隣接する2つのブロックの間で予測誤差データを算出することができない。これに対し、画像圧縮部12では、現在のブロックの最後の画素の第1の量子化データが、一旦、現在のブロックの量子化レベルに基づいて逆量子化され、次のブロックの量子化レベルに基づいて再度量子化し直された第2の量子化データが予測誤差データの算出に使用される。
【0186】
例えば、現在のブロックが非平坦領域、次のブロックが平坦領域であると判定され、非平坦領域のブロックの量子化レベルが2、平坦領域のブロックの量子化レベルが1の場合を考える。
【0187】
この場合、現在のブロックの画像データRGB=888(RGB各8ビット)は、第1の量子化処理部20において、非平坦領域のブロックの量子化レベル2に基づいて第1の量子化データRGB=666に量子化される。続いて、第1の量子化データRGB=666は、第1の逆量子化処理部22において、第1の逆量子化データRGB=888に逆量子化され、第1の逆量子化データRGB=888は、再度、第2の量子化処理部26において、平坦領域のブロックの量子化レベル1に基づいて第2の量子化データRGB=777に量子化される。
【0188】
これにより、画像圧縮部12では、隣接する2つのブロックの量子化レベルが異なる場合であっても、隣接する2つのブロックの間で予測誤差データを算出することができる。また、従来例の
図11Bに対応する本実施形態の
図8に示すように、1ラインの先頭画素のみの第1の量子化データおよび2番目以降の画素の予測誤差データをメモリ14に格納するため、1ラインに含まれるブロック数を多くしても圧縮後の符号量を削減することができる。
【0189】
また、現在のブロックの最後の画素の第1の量子化データの逆量子化および量子化をし直す場合、圧縮伸張後の画像の画質を向上させるために、乱数ディザリングにより逆量子化および量子化を行うことが考えられる。しかし、乱数ディザリングにより逆量子化および量子化をし直す場合、ハードウェアが複雑となり、かつ、処理時間も長くなるため、所望の処理時間内に逆量子化および量子化をし直すことが難しい場合がある。
【0190】
これに対し、画像圧縮部12では、ビットのシフト演算により逆量子化および量子化をし直すため、ハードウェアを簡素化し、かつ、所望の時間内に逆量子化および量子化をし直すことができる。また、乱数ディザリングにより量子化された第1の量子化データを使用して逆量子化および量子化をし直すため、ビットのシフト演算により逆量子化および量子化をし直したとしても圧縮伸張後の画像の画質を向上させることができる。
【0191】
なお、例えば、ブロックに含まれる4画素のRGB色空間の圧縮データをYUV色空間の圧縮データに変換し、水平方向の2画素の圧縮データの色差Uの平均値を算出したものを圧縮後の色差Uとしてもよい。また、水平方向の2画素の圧縮データの色差Vについても同様である。さらに、垂直方向の2画素の圧縮データの色差UおよびVについても同様にして圧縮してもよい。
【0192】
また、1ブロックの画素数が4画素の場合に限らず、1ブロックを任意の画素数としてブロック単位で圧縮伸張を行うことができる。
【0193】
また、画像圧縮部12は、さらに、第1の出力部30から出力される圧縮データを符号化して符号化データを出力する符号化部を備え、符号化データをメモリ14に格納する構成としてもよい。この場合、画像伸張部16は、さらに、メモリ14から読み出された符号化データを復号化して復号化データを出力する復号化部を備え、復号化データを加算部40および第2の出力部42に入力する構成とする。
【0194】
以上、本発明について詳細に説明したが、本発明は上記実施形態に限定されず、本発明の主旨を逸脱しない範囲において、種々の改良や変更をしてもよいのはもちろんである。