(57)【要約】【課題】ブロック数を多くしても圧縮後の符号量を削減することができ、かつ、ブロックの間で量子化レベルが異なっていても予測誤差データを算出することができる画像処理装置を提供する。【解決手段】ブロックの量子化レベルを判定し、量子化レベルを用いた乱数ディザリングにより画像データを量子化し、１ラインの先頭画素の量子化データを出力する。次の画素の量子化データから現在の画素の量子化データを減算し、２番目以降の画素の予測誤差データを出力する。現在の量子化レベルを用いたビットのシフト演算により現在のブロックの最後の画素の量子化データを逆量子化し、遅延し、次のブロックの量子化レベルを用いたビットのシフト演算により遅延データを量子化して、次のブロックの先頭画素の量子化データから減算し、次のブロックの先頭画素の予測誤差データを出力する。【選択図】  図２
2018164226.tif 000002
【特許請求の範囲】
【請求項１】
１ラインを複数のブロックに分割し、前記複数のブロックの各々に含まれる複数の画素の各々の画像データを量子化して圧縮する画像圧縮部を備え、
前記画像圧縮部は、
前記各々のブロックの複数の画素の画像データに基づいて、前記各々のブロックの量子化レベルを判定して判定結果を出力する量子化レベル判定部と、
前記各々のブロックの判定結果に対応する量子化レベルを用いた乱数ディザリングにより、前記各々のブロックの各々の画素の画像データを量子化して第１の量子化データを出力する第１の量子化処理部と、
前記各々のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の第１の量子化データを逆量子化して第１の逆量子化データを出力する第１の逆量子化処理部と、
前記各々のブロックの各々の画素の第１の選択データを遅延して第１の遅延データを出力する第１の遅延部と、
前記各々のブロックの次のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の第１の遅延データを量子化して第２の量子化データを出力する第２の量子化処理部と、
前記各々のブロックの各々の画素の第１の量子化データから第２の選択データを減算して予測誤差データを出力する減算部と、
前記１ラインの先頭画素の第１の量子化データおよび前記１ラインの２番目以降の画素の予測誤差データを圧縮データとして出力する第１の出力部と、
前記各々のブロックの最後の画素の第１の逆量子化データおよび第２の量子化データをそれぞれ前記第１および第２の選択データとして出力し、前記各々のブロックの最後の画素以外の画素の第１の量子化データおよび第１の遅延データをそれぞれ前記第１および第２の選択データとして出力するように制御する第１の制御部とを備える画像処理装置。
【請求項２】
さらに、前記圧縮データを格納するメモリと、
前記メモリから読み出された前記各々のブロックの各々の画素の圧縮データを逆量子化して伸張する画像伸張部とを備え、
前記画像伸張部は、
前記各々のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の加算データを逆量子化して第２の逆量子化データを出力する第２の逆量子化処理部と、
前記各々のブロックの各々の画素の第３の選択データを遅延して第２の遅延データを出力する第２の遅延部と、
前記次のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の第２の遅延データを量子化して第３の量子化データを出力する第３の量子化処理部と、
前記メモリから読み出された前記各々のブロックの各々の画素の圧縮データおよび前記各々のブロックの各々の画素の第４の選択データを加算して前記加算データを出力する加算部と、
前記メモリから読み出された前記１ラインの先頭画素の圧縮データおよび前記１ラインの２番目以降の画素の加算データを第４の量子化データとして出力する第２の出力部と、
前記各々のブロックの判定結果に対応する量子化レベルを用いた乱数ディザリングにより、前記各々のブロックの各々の画素の第４の量子化データを逆量子化して伸張データを出力する第３の逆量子化処理部と、
前記各々のブロックの最後の画素の第２の逆量子化データおよび第３の量子化データそれぞれ前記第３および第４の選択データとして出力し、前記各々のブロックの最後の画素以外の画素の加算データおよび第２の遅延データをそれぞれ前記第３および第４の選択データとして出力するように制御する第２の制御部とを備える請求項１に記載の画像処理装置。
【請求項３】
前記量子化レベル判定部は、前記各々のブロックについて、隣接する２つの画素のRGB毎の画素データの差分の絶対値と閾値とを比較し、前記各々のブロックが、全ての前記隣接する２つの画素のRGB毎の画素データの差分の絶対値が前記閾値よりも小さい平坦領域なのか、前記全ての隣接する２つの画素のRGB毎の画素データの差分の絶対値が前記閾値以上である非平坦領域なのかを判定することにより、前記各々のブロックの量子化レベルを判定する請求項２に記載の画像処理装置。
【請求項４】
前記第１の量子化処理部は、
前記平坦領域用の量子化レベルを用いた乱数ディザリングにより、前記各々のブロックの各々の画素の画像データを量子化して第１の平坦領域量子化データを出力する第１の平坦領域量子化部と、
前記非平坦領域用の量子化レベルを用いた乱数ディザリングにより、前記各々のブロックの各々の画素の画像データを量子化して第１の非平坦領域量子化データを出力する第１の非平坦領域量子化部と、
前記第１の量子化データとして、前記各々のブロックが前記平坦領域である場合に前記第１の平坦領域量子化データを出力し、前記各々のブロックが前記非平坦領域である場合に前記第１の非平坦領域量子化データを出力する第１の切替部とを備え、
前記第１の逆量子化処理部は、
前記平坦領域用の量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の第１の量子化データを逆量子化して第１の平坦領域逆量子化データを出力する第１の平坦領域逆量子化部と、
前記非平坦領域用の量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の第１の量子化データを逆量子化して第１の非平坦領域逆量子化データを出力する第１の非平坦領域逆量子化部と、
前記第１の逆量子化データとして、前記各々のブロックが前記平坦領域である場合に前記第１の平坦領域逆量子化データを出力し、前記各々のブロックが前記非平坦領域である場合に前記第１の非平坦領域逆量子化データを出力する第２の切替部とを備え、
前記第２の量子化処理部は、
前記平坦領域用の量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の第１の遅延データを量子化して第２の平坦領域量子化データを出力する第２の平坦領域量子化部と、
前記非平坦領域用の量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の第１の遅延データを量子化して第２の非平坦領域量子化データを出力する第２の非平坦領域量子化部と、
前記第２の量子化データとして、前記各々のブロックの最後の画素以外の画素の画像データを出力する場合、前記各々のブロックが前記平坦領域である場合に前記第２の平坦領域量子化データを出力し、前記各々のブロックが前記非平坦領域である場合に前記第２の非平坦領域量子化データを出力し、前記各々のブロックの最後の画素の画像データを出力する場合、前記次のブロックが前記平坦領域である場合に前記第２の平坦領域量子化データを出力し、前記次のブロックが前記非平坦領域である場合に前記第２の非平坦領域量子化データを出力する第３の切替部とを備える請求項３に記載の画像処理装置。
【請求項５】
前記第２の逆量子化処理部は、
前記平坦領域用の量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の第１の量子化データを逆量子化して第２の平坦領域逆量子化データを出力する第２の平坦領域逆量子化部と、
前記非平坦領域用の量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の第１の量子化データを逆量子化して第２の非平坦領域逆量子化データを出力する第２の非平坦領域逆量子化部と、
前記第２の逆量子化データとして、前記各々のブロックが前記平坦領域である場合に前記第２の平坦領域逆量子化データを出力し、前記各々のブロックが前記非平坦領域である場合に前記第２の非平坦領域逆量子化データを出力する第４の切替部とを備え、
前記第３の量子化処理部は、
前記平坦領域用の量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の第２の遅延データを量子化して第３の平坦領域量子化データを出力する第３の平坦領域量子化部と、
前記非平坦領域用の量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の第２の遅延データを量子化して第３の非平坦領域量子化データを出力する第３の非平坦領域量子化部と、
前記第３の量子化データとして、前記各々のブロックの最後の画素以外の画素の画像データを出力する場合、前記各々のブロックが前記平坦領域である場合に前記第３の平坦領域量子化データを出力し、前記各々のブロックが前記非平坦領域である場合に前記第３の非平坦領域量子化データを出力し、前記各々のブロックの最後の画素の画像データを出力する場合、前記次のブロックが前記平坦領域である場合に前記第３の平坦領域量子化データを出力し、前記次のブロックが前記非平坦領域である場合に前記第３の非平坦領域量子化データを出力する第５の切替部とを備え、
前記第３の逆量子化処理部は、
前記平坦領域用の量子化レベルを用いた乱数ディザリングにより、前記各々のブロックの各々の画素の第３の量子化データを逆量子化して第３の平坦領域逆量子化データを出力する第３の平坦領域逆量子化部と、
前記非平坦領域用の量子化レベルを用いた乱数ディザリングにより、前記各々のブロックの各々の画素の第３の量子化データを逆量子化して第３の非平坦領域逆量子化データを出力する第３の非平坦領域逆量子化部と、
前記伸張データとして、前記各々のブロックが前記平坦領域である場合に前記第３の平坦領域逆量子化データを出力し、前記各々のブロックが前記非平坦領域である場合に前記第３の非平坦領域逆量子化データを出力する第６の切替部とを備える請求項４に記載の画像処理装置。
【請求項６】
前記第１の制御部は、
前記各々のブロックの画素の番号をカウントしてカウント値を出力するカウンタと、
前記カウント値が、前記各々のブロックの最後の画素の番号である場合に前記第１の逆量子化データを前記第１の選択データとして出力し、前記カウント値が、前記各々のブロックの最後の画素の番号ではない場合に前記第１の量子化データを前記第１の選択データとして出力する第７の切替部と、
前記カウント値が、前記各々のブロックの最後の画素の番号である場合に前記第２の量子化データを前記第２の選択データとして出力し、前記カウント値が、前記各々のブロックの最後の画素の番号ではない場合に前記第１の遅延データを前記第２の選択データとして出力する第８の切替部とを備える請求項５に記載の画像処理装置。
【請求項７】
前記第２の制御部は、
前記カウント値が、前記各々のブロックの最後の画素の番号である場合に前記第２の逆量子化データを前記第３の選択データとして出力し、前記カウント値が、前記各々のブロックの最後の画素の番号ではない場合に前記加算データを前記第３の選択データとして出力する第９の切替部と、
前記カウント値が、前記各々のブロックの最後の画素の番号である場合に前記第３の量子化データを前記第４の選択データとして出力し、前記カウント値が、前記各々のブロックの最後の画素の番号ではない場合に前記第２の遅延データを前記第４の選択データとして出力する第１０の切替部とを備える請求項６に記載の画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、１ラインを複数のブロックに分割し、複数のブロックの各々に含まれる複数の画素の各々の画像データを量子化して圧縮し、さらに、量子化された画像データを逆量子化して伸張する画像処理装置に関する。
【背景技術】
【０００２】
画像データの圧縮処理として、圧縮後の符号量を削減するために、画像データの各画素の下位ビットを削る量子化およびその逆量子化の処理は一般的に使われる手法である。また、量子化レベル（量子化の度合い）を設定するにより、圧縮伸張後の画像の画質の劣化の程度と符号量とのバランスをコントロールする技術も提案されている。例えば、特許文献１および２には、目標とする圧縮後の符号量に応じて、量子化レベルを設定することが記載されている。
【０００３】
しかし、量子化レベルを大きく設定すると、圧縮伸張後の画像に階段状の模様が発生し、画質の劣化が目立つようになる。その対策の１つとして、乱数ディザリングにより画像データを量子化することが行われている。
【０００４】
図９は、従来の画像圧縮部の構成を表す一例のブロック図である。図９に示す画像圧縮部１００は、量子化処理部１０２と、遅延部１０４と、減算部１０６と、出力部１０８とを備えている。
【０００５】
画像圧縮部１００において、例えば、１ラインの先頭画素の画像データを量子化する場合、まず、量子化処理部１０２において、乱数ディザリングにより、先頭画素の画像データが量子化されて先頭画素の量子化データが生成される。
【０００６】
先頭画素の量子化データは、出力部１０８から先頭画素の圧縮データとして出力され、メモリ１１０に格納される。また、先頭画素の量子化データは、遅延部１０４において遅延され、先頭画素の遅延データが出力される。
【０００７】
続いて、２番目の画素の画像データを量子化する場合、減算部１０６において、２番目の画素の量子化データから先頭画素の遅延データが減算される。つまり、２番目の画素の量子化データと先頭画素の量子化データとの差分が算出され、２番目の画素の予測誤差データが出力される。２番目の画素の予測誤差データは、出力部１０８から２番目の画素の圧縮データとして出力され、メモリ１１０に格納される。
【０００８】
３番目以降の画素の画像データを量子化する場合の動作は、２番目の画素の画像データを量子化する場合の動作と同様であり、これ以後の動作は、１ラインの最後の画素の画像データの量子化が終了するまで上記の動作の繰り返しとなる。
【０００９】
例えば、１ライン単位で画像データを圧縮するライン圧縮方式の場合、図１０に示すように、１ラインの先頭画素（ハッチ部分）のみの量子化データおよび２番目以降の画素（その他の部分）の予測誤差データがメモリ１１０に格納される。従って、ライン方式圧縮の場合、圧縮後の符号量を削減することができるという利点があるが、１ライン内では同じ量子化レベルが使用されるため、画質をコントロールしづらいという問題がある。
【００１０】
これに対し、１ラインを複数のブロックに分割し、ブロック単位で画像データを圧縮するブロック圧縮方式の場合、図１１Ａに示すように、各々のブロックの先頭画素のみの量子化データおよび２番目以降の画素の予測誤差データがメモリ１１０に格納される。従って、ブロック圧縮方式の場合、ブロック内では同じ量子化レベルが使用されるが、ブロック毎に量子化レベルを変えて画質を可変とすることができる。
【００１１】
しかし、ブロック圧縮方式の場合、ブロック毎に先頭画素の量子化データがそのままメモリ１１０に格納されるため、ブロック数が多くなるに従って、圧縮後の符号量が次第に多くなる。図１１Ａは、１ブロックの画素数が３２画素の場合であり、図１１Ｂは、１ブロックの画素数が４画素の場合である。このように、１ラインに含まれるブロック数が増えると、ブロックの先頭画素数が増えるため、圧縮後の符号量が多くなる。
【００１２】
また、ブロック圧縮方式の場合、隣接する２つのブロックの間で量子化レベルが異なる場合、減算部１０６において、隣接する２つのブロックの量子化データを減算することができず、予測誤差データを算出することができないという問題がある。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２００６−１７４３３１号公報
【特許文献２】特開２００８−２５２７２６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
本発明の目的は、ブロック圧縮方式におけるブロック数を多くしても圧縮後の符号量を削減することができ、かつ、隣接する２つのブロックの間で量子化レベルが異なっていても予測誤差データを算出することができる画像処理装置を提供することにある。
【課題を解決するための手段】
【００１５】
上記目的を達成するために、本発明は、１ラインを複数のブロックに分割し、前記複数のブロックの各々に含まれる複数の画素の各々の画像データを量子化して圧縮する画像圧縮部を備え、
前記画像圧縮部は、
前記各々のブロックの複数の画素の画像データに基づいて、前記各々のブロックの量子化レベルを判定して判定結果を出力する量子化レベル判定部と、
前記各々のブロックの判定結果に対応する量子化レベルを用いた乱数ディザリングにより、前記各々のブロックの各々の画素の画像データを量子化して第１の量子化データを出力する第１の量子化処理部と、
前記各々のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の第１の量子化データを逆量子化して第１の逆量子化データを出力する第１の逆量子化処理部と、
前記各々のブロックの各々の画素の第１の選択データを遅延して第１の遅延データを出力する第１の遅延部と、
前記各々のブロックの次のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の第１の遅延データを量子化して第２の量子化データを出力する第２の量子化処理部と、
前記各々のブロックの各々の画素の第１の量子化データから第２の選択データを減算して予測誤差データを出力する減算部と、
前記１ラインの先頭画素の第１の量子化データおよび前記１ラインの２番目以降の画素の予測誤差データを圧縮データとして出力する第１の出力部と、
前記各々のブロックの最後の画素の第１の逆量子化データおよび第２の量子化データをそれぞれ前記第１および第２の選択データとして出力し、前記各々のブロックの最後の画素以外の画素の第１の量子化データおよび第１の遅延データをそれぞれ前記第１および第２の選択データとして出力するように制御する第１の制御部とを備える画像処理装置を提供する。
【００１６】
さらに、前記圧縮データを格納するメモリと、
前記メモリから読み出された前記各々のブロックの各々の画素の圧縮データを逆量子化して伸張する画像伸張部とを備え、
前記画像伸張部は、
前記各々のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の加算データを逆量子化して第２の逆量子化データを出力する第２の逆量子化処理部と、
前記各々のブロックの各々の画素の第３の選択データを遅延して第２の遅延データを出力する第２の遅延部と、
前記次のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の第２の遅延データを量子化して第３の量子化データを出力する第３の量子化処理部と、
前記メモリから読み出された前記各々のブロックの各々の画素の圧縮データおよび前記各々のブロックの各々の画素の第４の選択データを加算して前記加算データを出力する加算部と、
前記メモリから読み出された前記１ラインの先頭画素の圧縮データおよび前記１ラインの２番目以降の画素の加算データを第４の量子化データとして出力する第２の出力部と、
前記各々のブロックの判定結果に対応する量子化レベルを用いた乱数ディザリングにより、前記各々のブロックの各々の画素の第４の量子化データを逆量子化して伸張データを出力する第３の逆量子化処理部と、
前記各々のブロックの最後の画素の第２の逆量子化データおよび第３の量子化データそれぞれ前記第３および第４の選択データとして出力し、前記各々のブロックの最後の画素以外の画素の加算データおよび第２の遅延データをそれぞれ前記第３および第４の選択データとして出力するように制御する第２の制御部とを備えることが好ましい。
【００１７】
また、前記量子化レベル判定部は、前記各々のブロックについて、隣接する２つの画素のRGB毎の画素データの差分の絶対値と閾値とを比較し、前記各々のブロックが、全ての前記隣接する２つの画素のRGB毎の画素データの差分の絶対値が前記閾値よりも小さい平坦領域なのか、前記全ての隣接する２つの画素のRGB毎の画素データの差分の絶対値が前記閾値以上である非平坦領域なのかを判定することにより、前記各々のブロックの量子化レベルを判定することが好ましい。
【００１８】
また、前記第１の量子化処理部は、
前記平坦領域用の量子化レベルを用いた乱数ディザリングにより、前記各々のブロックの各々の画素の画像データを量子化して第１の平坦領域量子化データを出力する第１の平坦領域量子化部と、
前記非平坦領域用の量子化レベルを用いた乱数ディザリングにより、前記各々のブロックの各々の画素の画像データを量子化して第１の非平坦領域量子化データを出力する第１の非平坦領域量子化部と、
前記第１の量子化データとして、前記各々のブロックが前記平坦領域である場合に前記第１の平坦領域量子化データを出力し、前記各々のブロックが前記非平坦領域である場合に前記第１の非平坦領域量子化データを出力する第１の切替部とを備え、
前記第１の逆量子化処理部は、
前記平坦領域用の量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の第１の量子化データを逆量子化して第１の平坦領域逆量子化データを出力する第１の平坦領域逆量子化部と、
前記非平坦領域用の量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の第１の量子化データを逆量子化して第１の非平坦領域逆量子化データを出力する第１の非平坦領域逆量子化部と、
前記第１の逆量子化データとして、前記各々のブロックが前記平坦領域である場合に前記第１の平坦領域逆量子化データを出力し、前記各々のブロックが前記非平坦領域である場合に前記第１の非平坦領域逆量子化データを出力する第２の切替部とを備え、
前記第２の量子化処理部は、
前記平坦領域用の量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の第１の遅延データを量子化して第２の平坦領域量子化データを出力する第２の平坦領域量子化部と、
前記非平坦領域用の量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の第１の遅延データを量子化して第２の非平坦領域量子化データを出力する第２の非平坦領域量子化部と、
前記第２の量子化データとして、前記各々のブロックの最後の画素以外の画素の画像データを出力する場合、前記各々のブロックが前記平坦領域である場合に前記第２の平坦領域量子化データを出力し、前記各々のブロックが前記非平坦領域である場合に前記第２の非平坦領域量子化データを出力し、前記各々のブロックの最後の画素の画像データを出力する場合、前記次のブロックが前記平坦領域である場合に前記第２の平坦領域量子化データを出力し、前記次のブロックが前記非平坦領域である場合に前記第２の非平坦領域量子化データを出力する第３の切替部とを備えることが好ましい。
【００１９】
また、前記第２の逆量子化処理部は、
前記平坦領域用の量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の第１の量子化データを逆量子化して第２の平坦領域逆量子化データを出力する第２の平坦領域逆量子化部と、
前記非平坦領域用の量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の第１の量子化データを逆量子化して第２の非平坦領域逆量子化データを出力する第２の非平坦領域逆量子化部と、
前記第２の逆量子化データとして、前記各々のブロックが前記平坦領域である場合に前記第２の平坦領域逆量子化データを出力し、前記各々のブロックが前記非平坦領域である場合に前記第２の非平坦領域逆量子化データを出力する第４の切替部とを備え、
前記第３の量子化処理部は、
前記平坦領域用の量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の第２の遅延データを量子化して第３の平坦領域量子化データを出力する第３の平坦領域量子化部と、
前記非平坦領域用の量子化レベルを用いたビットのシフト演算により、前記各々のブロックの各々の画素の第２の遅延データを量子化して第３の非平坦領域量子化データを出力する第３の非平坦領域量子化部と、
前記第３の量子化データとして、前記各々のブロックの最後の画素以外の画素の画像データを出力する場合、前記各々のブロックが前記平坦領域である場合に前記第３の平坦領域量子化データを出力し、前記各々のブロックが前記非平坦領域である場合に前記第３の非平坦領域量子化データを出力し、前記各々のブロックの最後の画素の画像データを出力する場合、前記次のブロックが前記平坦領域である場合に前記第３の平坦領域量子化データを出力し、前記次のブロックが前記非平坦領域である場合に前記第３の非平坦領域量子化データを出力する第５の切替部とを備え、
前記第３の逆量子化処理部は、
前記平坦領域用の量子化レベルを用いた乱数ディザリングにより、前記各々のブロックの各々の画素の第３の量子化データを逆量子化して第３の平坦領域逆量子化データを出力する第３の平坦領域逆量子化部と、
前記非平坦領域用の量子化レベルを用いた乱数ディザリングにより、前記各々のブロックの各々の画素の第３の量子化データを逆量子化して第３の非平坦領域逆量子化データを出力する第３の非平坦領域逆量子化部と、
前記伸張データとして、前記各々のブロックが前記平坦領域である場合に前記第３の平坦領域逆量子化データを出力し、前記各々のブロックが前記非平坦領域である場合に前記第３の非平坦領域逆量子化データを出力する第６の切替部とを備えることが好ましい。
【００２０】
また、前記第１の制御部は、
前記各々のブロックの画素の番号をカウントしてカウント値を出力するカウンタと、
前記カウント値が、前記各々のブロックの最後の画素の番号である場合に前記第１の逆量子化データを前記第１の選択データとして出力し、前記カウント値が、前記各々のブロックの最後の画素の番号ではない場合に前記第１の量子化データを前記第１の選択データとして出力する第７の切替部と、
前記カウント値が、前記各々のブロックの最後の画素の番号である場合に前記第２の量子化データを前記第２の選択データとして出力し、前記カウント値が、前記各々のブロックの最後の画素の番号ではない場合に前記第１の遅延データを前記第２の選択データとして出力する第８の切替部とを備えることが好ましい。
【００２１】
また、前記第２の制御部は、
前記カウント値が、前記各々のブロックの最後の画素の番号である場合に前記第２の逆量子化データを前記第３の選択データとして出力し、前記カウント値が、前記各々のブロックの最後の画素の番号ではない場合に前記加算データを前記第３の選択データとして出力する第９の切替部と、
前記カウント値が、前記各々のブロックの最後の画素の番号である場合に前記第３の量子化データを前記第４の選択データとして出力し、前記カウント値が、前記各々のブロックの最後の画素の番号ではない場合に前記第２の遅延データを前記第４の選択データとして出力する第１０の切替部とを備えることが好ましい。
【発明の効果】
【００２２】
本発明では、現在のブロックの最後の画素の第１の量子化データが、一旦、現在のブロックの量子化レベルに基づいて逆量子化され、次のブロックの量子化レベルに基づいて再度量子化し直される。
【００２３】
これにより、画像圧縮部では、隣接する２つのブロックの量子化レベルが異なる場合であっても、隣接する２つのブロックの間で予測誤差データを算出することができる。また、１ラインの先頭画素のみの第１の量子化データおよび２番目以降の画素の予測誤差データをメモリに格納するため、１ラインに含まれるブロック数を多くしても圧縮後の符号量を削減することができる。
【００２４】
また、本発明では、ビットのシフト演算により逆量子化および量子化をし直すため、ハードウェアを簡素化し、かつ、所望の時間内に逆量子化および量子化をし直すことができる。また、乱数ディザリングにより量子化された第１の量子化データを使用して逆量子化および量子化をし直すため、ビットのシフト演算により逆量子化および量子化をし直したとしても圧縮伸張後の画像の画質を向上させることができる。
【図面の簡単な説明】
【００２５】
【図１】本発明の画像処理装置の概略的な構成を表す一実施形態のブロック図である。
【図２】図１に示す画像圧縮部の構成を表す一実施形態のブロック図である。
【図３】図１に示す画像伸張部の構成を表す一実施形態のブロック図である。
【図４】図２に示す画像圧縮部のより具体的な構成を表す一実施形態のブロック図である。
【図５Ａ】非平坦領域であると判定されるブロックの構成を表す一実施形態の概念図である。
【図５Ｂ】平坦領域であると判定されるブロックの構成を表す一実施形態の概念図である。
【図６】図３に示す画像伸張部のより具体的な構成を表す一実施形態のブロック図である。
【図７】図４に示す画像圧縮部の動作と、図６に示す画像伸張部の動作を表す一実施形態のタイミングチャートである。
【図８】図４に示す画像処理部において、１ブロックの画素数が４画素の場合にブロック圧縮方式でメモリに格納されるデータを表す一実施形態の概念図である。
【図９】従来の画像圧縮部の構成を表す一例のブロック図である。
【図１０】ライン圧縮方式でメモリに格納されるデータを表す一例の概念図である。
【図１１Ａ】図９に示す画像処理部において、１ブロックの画素数が３２画素の場合にブロック圧縮方式でメモリに格納されるデータを表す一例の概念図である。
【図１１Ｂ】図９に示す画像処理部において、１ブロックの画素数が４画素の場合にブロック圧縮方式でメモリに格納されるデータを表す一例の概念図である。
【発明を実施するための形態】
【００２６】
以下に、添付の図面に示す好適実施形態に基づいて、本発明の画像処理装置を詳細に説明する。
【００２７】
図１は、本発明の画像処理装置の概略的な構成を表す一実施形態のブロック図である。図１に示す画像処理装置１０は、１ラインを複数のブロックに分割し、複数のブロックの各々に含まれる複数の画素の各々の画像データを量子化して圧縮し、さらに、逆量子化して伸張するものである。画像処理装置１０は、画像圧縮部（エンコーダ）１２と、メモリ１４と、画像伸張部（デコーダ）１６とを備えている。
【００２８】
図２は、図１に示す画像圧縮部の構成を表す一実施形態のブロック図である。図２に示す画像圧縮部１２は、各々のブロックに含まれる各々の画素の画像データを量子化して圧縮するものであり、量子化レベル判定部１８と、第１の量子化処理部２０と、第１の逆量子化処理部２２と、第１の遅延部２４と、第２の量子化処理部２６と、減算部２８と、第１の出力部３０と、第１の制御部３２Ａおよび３２Ｂとを備えている。
【００２９】
画像圧縮部１２において、量子化レベル判定部１８には、画像データが外部から入力される。量子化レベル判定部１８は、各々のブロックの複数の画素の画像データに基づいて、各々のブロックの量子化レベル（量子化係数）を判定して判定結果を出力する。
【００３０】
続いて、第１の量子化処理部２０には、画像データが外部から入力され、量子化レベルの判定結果が量子化レベル判定部１８から入力される。第１の量子化処理部２０は、各々のブロックの判定結果に対応する量子化レベルを用いた乱数ディザリングにより、各々のブロックの各々の画素の画像データを量子化して第１の量子化データを出力する。
【００３１】
続いて、第１の逆量子化処理部２２には、第１の量子化データが第１の量子化処理部２０から入力され、量子化レベルの判定結果が量子化レベル判定部１８から入力される。第１の逆量子化処理部２２は、各々のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により、各々のブロックの各々の画素の第１の量子化データを逆量子化して第１の逆量子化データを出力する。
【００３２】
続いて、第１の制御部３２Ａには、第１の量子化データが第１の量子化処理部２０から入力され、第１の逆量子化データが第１の逆量子化処理部２２から入力される。第１の制御部３２Ａは、各々のブロックの最後の画素の画像データを制御する場合に、各々のブロックの最後の画素の第１の逆量子化データを第１の選択データとして出力し、各々のブロックの最後の画素以外の画素の画像データを制御する場合に、各々のブロックの最後の画素以外の画素の第１の量子化データを第１の選択データとして出力するように制御する。
【００３３】
続いて、第１の遅延部２４には、第１の選択データが第１の制御部３２Ａから入力される。第１の遅延部２４は、各々のブロックの各々の画素の第１の選択データを、１画素分の時間だけ、遅延して第１の遅延データを出力する。
【００３４】
続いて、第２の量子化処理部２６には、第１の遅延データが第１の遅延部２４から入力され、量子化レベルの判定結果が量子化レベル判定部１８から入力される。第２の量子化処理部２６は、各々のブロックの最後の画素以外の画素の画像データを量子化する場合、現在のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により、現在のブロックの各々の画素の第１の遅延データを量子化して第２の量子化データを出力する。各々のブロックの最後の画素の画像データを量子化する場合、現在のブロックの次のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により、現在のブロックの最後の画素の第１の遅延データを量子化して第２の量子化データを出力する。
【００３５】
続いて、第１の制御部３２Ｂには、第１の遅延データが第１の遅延部２４から入力され、第２の量子化データが第２の量子化処理部２６から入力される。第１の制御部３２Ｂは、各々のブロックの最後の画素の画像データを制御する場合に、各々のブロックの最後の画素の第２の量子化データを第２の選択データとして出力し、各々のブロックの最後の画素以外の画素の画像データを制御する場合に、各々のブロックの最後の画素以外の画素の第１の遅延データを第２の選択データとして出力するように制御する。
【００３６】
続いて、減算部２８には、第１の量子化データが第１の量子化処理部２０から入力され、１画素前の第２の選択データが第１の制御部３２Ｂから入力される。減算部２８は、各々のブロックの各々の画素の第１の量子化データから、１画素前の第２の選択データを減算して予測誤差データを出力する。
【００３７】
続いて、第１の出力部３０には、第１の量子化データが第１の量子化処理部２０から入力され、予測誤差データが減算部２８から入力される。第１の出力部３０は、１ラインの先頭画素の画像データを出力する場合に１ラインの先頭画素の第１の量子化データを圧縮データとして出力し、１ラインの２番目以降の画素の画像データを出力する場合に１ラインの２番目以降の画素の予測誤差データを圧縮データとして出力する。
【００３８】
続いて、メモリ１４には、圧縮データが第１の出力部３０から入力される。圧縮データはメモリ１４に格納（保存）される。
【００３９】
図３は、図１に示す画像伸張部の構成を表す一実施形態のブロック図である。図３に示す画像伸張部１６は、メモリ１４から読み出された各々のブロックの各々の画素の圧縮データを逆量子化して伸張するものであり、第２の逆量子化処理部３４と、第２の遅延部３６と、第３の量子化処理部３８と、加算部４０と、第２の出力部４２と、第３の逆量子化処理部４４と、第２の制御部４６Ａおよび４６Ｂとを備えている。
【００４０】
画像伸張部１６において、第２の逆量子化処理部３４には、加算部４０から加算データが入力され、量子化レベルの判定結果が量子化レベル判定部１８から入力される。第２の逆量子化処理部３４は、各々のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により、各々のブロックの各々の画素の加算データを逆量子化して第２の逆量子化データを出力する。
【００４１】
続いて、第２の制御部４６Ａには、加算データが加算部４０から入力され、第２の逆量子化データが第２の逆量子化処理部３４から入力される。第２の制御部４６Ａは、各々のブロックの最後の画素の圧縮データを制御する場合に各々のブロックの最後の画素の第２の逆量子化データを第３の選択データとして出力し、各々のブロックの最後の画素以外の画素の圧縮データを制御する場合に各々のブロックの最後の画素以外の画素の加算データを第３の選択データとして出力するように制御する。
【００４２】
続いて、第２の遅延部３６には、第３の選択データが第２の制御部４６Ａから入力される。第２の遅延部３６は、各々のブロックの各々の画素の第３の選択データを、１画素分の時間だけ、遅延して第２の遅延データを出力する。
【００４３】
続いて、第３の量子化処理部３８には、第２の遅延データが第２の遅延部３６から入力され、量子化レベルの判定結果が量子化レベル判定部１８から入力される。第３の量子化処理部３８は、各々のブロックの最後の画素以外の画素の画像データを量子化する場合、
現在のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により、現在のブロックの各々の画素の第２の遅延データを量子化して第３の量子化データを出力する。各々のブロックの最後の画素の画像データを量子化する場合、現在のブロックの次のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により、現在のブロックの最後の画素の第２の遅延データを量子化して第３の量子化データを出力する。
【００４４】
続いて、第２の制御部４６Ｂには、第２の遅延データが第２の遅延部３６から入力され、第３の量子化データが第３の量子化処理部３８から入力される。第２の制御部４６Ｂは、各々のブロックの最後の画素の圧縮データを制御する場合に各々のブロックの最後の画素の第３の量子化データを第４の選択データとして出力し、各々のブロックの最後の画素以外の画素の圧縮データを制御する場合に各々のブロックの最後の画素以外の画素の第２の遅延データを第４の選択データとして出力するように制御する。
【００４５】
続いて、加算部４０には、メモリ１４から読み出された圧縮データが入力され、１画素前の第４の選択データが第２の制御部４６Ｂから入力される。加算部４０は、メモリ１４から読み出された各々のブロックの各々の画素の圧縮データと各々のブロックの各々の画素の、１画素前の第４の選択データを加算して加算データを出力する。
【００４６】
続いて、第２の出力部４２には、メモリ１４から読み出された圧縮データが入力され、加算データが加算部４０から入力される。第２の出力部４２は、１ラインの先頭画素の圧縮データを出力する場合にメモリ１４から読み出された１ラインの先頭画素の圧縮データを第４の量子化データとして出力し、１ラインの２番目以降の画素の圧縮データを出力する場合に、１ラインの２番目以降の画素の加算データを第４の量子化データとして出力する。
【００４７】
続いて、第３の逆量子化処理部４４には、第４の量子化データが第２の出力部４２から入力され、量子化レベルの判定結果が量子化レベル判定部１８から入力される。第３の逆量子化処理部４４は、各々のブロックの判定結果に対応する量子化レベルを用いた乱数ディザリングにより、各々のブロックの各々の画素の第４の量子化データを逆量子化して伸張データを出力する。
【００４８】
次に、乱数ディザリングによる量子化および逆量子化について説明する。
【００４９】
ディザリングは、量子化誤差による視覚的な画像の劣化を抑えるための技術である。ディザリングによる量子化では、画像データの量子化の際に、画像データの下位ビット成分を切り捨てて単純に丸めるだけではなく、例えば、画像データにおいて、視覚的な誤差が小さくなるように、下位ビット成分の切り捨てまたは切り上げが制御される。ディザリングの１つに乱数ディザリングがある。
【００５０】
乱数ディザリングによる量子化データおよび逆量子化データの演算式は、例えば、式（１）に示す通りである。
量子化データ：Quant = Floor ((In + Rand(Q)) / Q)
逆量子化データ：DeQuant = Quant * Q - Rand(Q)  …  式（１）
ここで、Floorは、小数点以下の数値を切り捨てる関数、Inは入力画像データ、Ｑは量子化レベル、Rand(Q)は、量子化レベルＱに基づいて生成される擬似乱数である。
【００５１】
乱数ディザリングによる量子化では、量子化レベルＱに基づいて、０〜量子化レベルＱ−１の範囲の擬似乱数Rand(Q)が生成され、入力画像データInおよび擬似乱数Rand(Q)を加算して加算データが生成され、量子化レベルＱに基づいて、加算データを量子化することにより量子化データQuantが生成される。また、乱数ディザリングによる逆量子化では、量子化データQuantおよび量子化レベルＱを掛け、擬似乱数Rand(Q)を減算して逆量子化することにより逆量子化データDeQuantが生成される。
【００５２】
例えば、量子化レベルＱ＝４の場合、擬似乱数Rand(Q)の可能な範囲は、[2, 3, 4, 5]となる。入力画像データIn＝２２、量子化の際の擬似乱数Rand(Q)＝３、逆量子化の際の擬似乱数Rand(Q)＝２の場合、量子化データおよび逆量子化データは、下記式（２）の通りとなる。
量子化データ：Quant = Floor ((22 + 3) / 4) = 6
逆量子化データ：DeQuant = 6 * 4 - 2 = 22  …  式（２）
【００５３】
乱数ディザリングによる量子化および逆量子化の場合、量子化データQuantは入力画像データInの近傍の値に確率的に決まり、空間的または時間的に見ると、その平均値は保存される。乱数ディザリングによる量子化および逆量子化では、擬似乱数Rand(Q)の処理が複雑であり、ハードウェアの規模が大きいというデメリットはあるが、量子化および逆量子化後の画像の見た目の劣化を減らすことができるというメリットがある。
【００５４】
次に、ビットのシフト演算による量子化および逆量子化について説明する。
【００５５】
ビットのシフト演算による量子化では、量子化レベルＱに基づいて、画像データの全てのビットを下位ビット側にシフトすることにより、画像データの下位ビット成分が切り捨てられて丸められる。
【００５６】
ビットのシフト演算による量子化データおよび逆量子化データの演算式は、例えば、式（３）に示す通りである。
量子化データ：Quant = Floor ((In + Q/2) / Q)
逆量子化データ：DeQuant = Quant * Q  …  式（３）
【００５７】
ビットのシフト演算による量子化では、入力画像データInおよび量子化レベルＱ／２を加算して加算データが生成され、量子化レベルＱに基づいて、加算データを量子化することにより量子化データQuantが生成される。また、ビットのシフト演算による逆量子化では、量子化データQuantおよび量子化レベルＱを掛けて逆量子化することにより逆量子化データDeQuantが生成される。
【００５８】
同様に、量子化レベルＱ＝４、入力画像データIn＝２２の場合、量子化データおよび逆量子化データは、下記式（４）の通りとなる。
量子化データ：Quant = Floor ((22 + 2) / 4) = 6
逆量子化データ：DeQuant = 6 * 4 = 24  …  式（４）
【００５９】
ビットのシフト演算による量子化では、量子化レベルＱが大きくなると、量子化および逆量子化後の画像の階調が階段状に変化し、画質の劣化が乱数ディザリングによる量子化の場合よりも大きいというデメリットはあるが、擬似乱数を発生させる必要がなく、しかもビットのシフト演算だけで画像データの下位ビット成分を切り捨てる処理を実現できるため、ハードウェアの規模が小さいというメリットがある。
【００６０】
次に、画像処理装置１０について、１ラインを４画素からなる複数のブロックに分割し、ブロック単位で画像データを順次圧縮伸張する場合の具体例を挙げて説明する。
【００６１】
図４は、図２に示す画像圧縮部のより具体的な構成を表す一実施形態のブロック図である。図４に示す画像圧縮部１２は、前述のように、量子化レベル判定部１８と、第１の量子化処理部２０と、第１の逆量子化処理部２２と、第１の遅延部２４と、第２の量子化処理部２６と、減算部２８と、第１の出力部３０と、第１の制御部３２Ａおよび３２Ｂとを備えている。
【００６２】
画像圧縮部１２において、量子化レベル判定部１８は、各々のブロックが、平坦領域なのか非平坦領域なのかを判定することにより、各々のブロックの量子化レベルを判定する。つまり、平坦領域なのか非平坦領域なのかに応じてブロックの量子化レベルを決定する。
【００６３】
各々のブロックが平坦領域なのか非平坦領域なのかを判定する平坦判定は、例えば、各々のブロックについて、隣接する２つの画素のRGB（赤緑青）毎の画素データの差分の絶対値と閾値とを比較し、全ての隣接する２つの画素のRGB毎の画素データの差分の絶対値が閾値よりも小さい場合に平坦領域であると判定し、全ての隣接する２つの画素のRGB毎の画素データの差分の絶対値が閾値以上である場合に非平坦領域であると判定する。
【００６４】
各々のブロックにｐ１、ｐ２、ｐ３、ｐ４の４画素が含まれる場合、例えば、平坦判定の判定式は下記式（５）となり、その演算結果が０の場合に非平坦領域であると判定され、演算結果が１の場合に平坦領域であると判定される。
(|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)  …  式（５）
ここで、Ｖは、外部から設定される前述の閾値、shiftは、量子化レベルの初期設定値である。また、＜＜はビットのシフト演算、＆＆は論理積（ＡＮＤ）を意味する。
【００６５】
一例として、Ｖ＝３、shift＝１であり、図５Ａに示すブロックに含まれる４画素の画像データが下記式（６）の場合について説明する。
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)  …  式（６）
【００６６】
この場合、閾値(V << shift)の演算結果は、下記式（７）となり、
(V << shift) = (3 << 1) = 6  …  式（７）
隣接する２つの画素のRGB毎の差分の絶対値の演算結果は、下記式（８）となる。
(|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  …  式（８）
従って、全ての隣接する２つの画素のRGB毎の差分の絶対値の論理積の演算結果は０となり、図５Ａに示すブロックは非平坦領域であると判定される。
【００６７】
他の一例として、図５Ｂに示すブロックに含まれる４画素の画像データが下記式（９）の場合について説明する。
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)  …  式（９）
【００６８】
この場合、隣接する２つの画素のRGB毎の差分の絶対値の演算結果は、下記式（１０）となる。
(|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  …  式（１０）
従って、全ての隣接する２つの画素のRGB毎の差分の絶対値の論理積は１となり、図５Ｂに示すブロックは平坦領域であると判定される。
【００６９】
なお、平坦判定は、平坦および非平坦の２段階に限らず、多段階に平坦度を判定してもよい。また、量子化レベル判定部１８は、平坦判定に限らず、各々のブロックの複数の画素の画像データに基づいて、各々のブロックの量子化レベルを判定することができる。
【００７０】
続いて、第１の量子化処理部２０は、第１の平坦領域量子化部５２と、第１の非平坦領域量子化部５４と、第１の切替部５６とを備えている。
【００７１】
第１の量子化処理部２０において、第１の平坦領域量子化部５２は、平坦領域用の量子化レベルＱ’を用いた乱数ディザリングにより、各々のブロックの各々の画素の画像データを量子化して第１の平坦領域量子化データを出力する。
【００７２】
続いて、第１の非平坦領域量子化部５４は、非平坦領域用の量子化レベルＱを用いた乱数ディザリングにより、各々のブロックの各々の画素の画像データを量子化して第１の非平坦領域量子化データを出力する。
【００７３】
続いて、第１の切替部５６は、第１の量子化データとして、各々のブロックが平坦領域である場合に第１の平坦領域量子化データを出力し、各々のブロックが非平坦領域である場合に第１の非平坦領域量子化データを出力する。
【００７４】
続いて、第１の逆量子化処理部２２は、第１の平坦領域逆量子化部５８と、第１の非平坦領域逆量子化部６０と、第２の切替部６２とを備えている。
【００７５】
第１の逆量子化処理部２２において、第１の平坦領域逆量子化部５８は、平坦領域用の量子化レベルＱ’を用いたビットのシフト演算により、各々のブロックの各々の画素の第１の量子化データを逆量子化して第１の平坦領域逆量子化データを出力する。
【００７６】
続いて、第１の非平坦領域逆量子化部６０は、非平坦領域用の量子化レベルＱを用いたビットのシフト演算により、各々のブロックの各々の画素の第１の量子化データを逆量子化して第１の非平坦領域逆量子化データを出力する。
【００７７】
続いて、第２の切替部６２は、第１の逆量子化データとして、各々のブロックが平坦領域である場合に第１の平坦領域逆量子化データを出力し、各々のブロックが非平坦領域である場合に第１の非平坦領域逆量子化データを出力する。
【００７８】
続いて、第１の制御部３２Ａは、カウンタ７０と、第７の切替部７２とを備えている。
【００７９】
第１の制御部３２Ａにおいて、カウンタ７０は、各々のブロックの最後の画素、本実施形態の場合には４番目の画素の処理タイミングを検出するために設けられたものであり、各々のブロックの画素の番号をカウントしてカウント値を出力する。
【００８０】
続いて、第７の切替部７２は、カウント値が、各々のブロックの最後の画素の番号である場合に第１の逆量子化データを第１の選択データとして出力し、カウント値が、各々のブロックの最後の画素の番号ではない場合に第１の量子化データを第１の選択データとして出力する。
【００８１】
続いて、第１の遅延部２４には、第１の選択データが第１の制御部３２Ａの第７の切替部７２から入力される。第１の遅延部２４は、各々のブロックの各々の画素の第１の選択データを、１画素分の時間だけ、遅延して第１の遅延データを出力する。
【００８２】
続いて、第２の量子化処理部２６は、第２の平坦領域量子化部６４と、第２の非平坦領域量子化部６６と、第３の切替部６８とを備えている。
【００８３】
第２の量子化処理部２６において、第２の平坦領域量子化部６４は、平坦領域用の量子化レベルＱ’を用いたビットのシフト演算により、各々のブロックの各々の画素の第１の遅延データを量子化して第２の平坦領域量子化データを出力する。
【００８４】
続いて、第２の非平坦領域量子化部６６は、非平坦領域用の量子化レベルＱを用いたビットのシフト演算により、各々のブロックの各々の画素の第１の遅延データを量子化して第２の非平坦領域量子化データを出力する。
【００８５】
続いて、第３の切替部６８は、第２の量子化データとして、各々のブロックの最後の画素以外の画素の画像データを出力する場合、現在のブロックが平坦領域である場合に第２の平坦領域量子化データを出力し、現在のブロックが非平坦領域である場合に第２の非平坦領域量子化データを出力する。各々のブロックの最後の画素の画像データを出力する場合、次のブロックが平坦領域である場合に第２の平坦領域量子化データを出力し、次のブロックが非平坦領域である場合に第２の非平坦領域量子化データを出力する。
【００８６】
続いて、第１の制御部３２Ｂは、第８の切替部７４を備えている。
【００８７】
第１の制御部３２Ｂの第８の切替部７４は、カウント値が、各々のブロックの最後の画素の番号である場合に第２の量子化データを第２の選択データとして出力し、カウント値が、各々のブロックの最後の画素の番号ではない場合に第１の遅延データを第２の選択データとして出力する。
【００８８】
図６は、図３に示す画像伸張部のより具体的な構成を表す一実施形態のブロック図である。図６に示す画像伸張部１６は、前述のように、第２の逆量子化処理部３４と、第２の遅延部３６と、第３の量子化処理部３８と、加算部４０と、第２の出力部４２と、第３の逆量子化処理部４４と、第２の制御部４６Ａおよび４６Ｂとを備えている。
【００８９】
画像伸張部１６において、第２の逆量子化処理部３４は、第２の平坦領域逆量子化部７６と、第２の非平坦領域逆量子化部７８と、第４の切替部８０とを備えている。
【００９０】
第２の逆量子化処理部３４において、第２の平坦領域逆量子化部７６は、平坦領域用の量子化レベルＱ’を用いたビットのシフト演算により、各々のブロックの各々の画素の加算データを逆量子化して第２の平坦領域逆量子化データを出力する。
【００９１】
続いて、第２の非平坦領域逆量子化部７８は、非平坦領域用の量子化レベルＱを用いたビットのシフト演算により、各々のブロックの各々の画素の加算データを逆量子化して第２の非平坦領域逆量子化データを出力する。
【００９２】
続いて、第４の切替部８０は、第２の逆量子化データとして、各々のブロックが平坦領域である場合に第２の平坦領域逆量子化データを出力し、各々のブロックが非平坦領域である場合に第２の非平坦領域逆量子化データを出力する。
【００９３】
続いて、第２の制御部４６Ａは、第９の切替部９４を備えている。
【００９４】
第２の制御部４６Ａの第９の切替部９４は、カウント値が、各々のブロックの最後の画素の番号である場合に第２の逆量子化データを第３の選択データとして出力し、カウント値が、各々のブロックの最後の画素の番号ではない場合に加算データを第３の選択データとして出力する。
【００９５】
続いて、第２の遅延部３６には、第３の選択データが第２の制御部４６Ａの第９の切替部９４から入力される。第２の遅延部３６は、各々のブロックの各々の画素の第３の選択データを、１画素分の時間だけ、遅延して第２の遅延データを出力する。
【００９６】
続いて、第３の量子化処理部３８は、第３の平坦領域量子化部８２と、第３の非平坦領域量子化部８４と、第５の切替部８６とを備えている。
【００９７】
第３の量子化処理部３８において、第３の平坦領域量子化部８２は、平坦領域用の量子化レベルＱ’を用いたビットのシフト演算により、各々のブロックの各々の画素の第２の遅延データを量子化して第３の平坦領域量子化データを出力する。
【００９８】
続いて、第３の非平坦領域量子化部８４は、非平坦領域用の量子化レベルＱを用いたビットのシフト演算により、各々のブロックの各々の画素の第２の遅延データを量子化して第３の非平坦領域量子化データを出力する。
【００９９】
続いて、第５の切替部８６は、第３の量子化データとして、各々のブロックの最後の画素以外の画素の画像データを出力する場合、現在のブロックが平坦領域である場合に第３の平坦領域量子化データを出力し、現在のブロックが非平坦領域である場合に第３の非平坦領域量子化データを出力する。各々のブロックの最後の画素の画像データを出力する場合、次のブロックが平坦領域である場合に第３の平坦領域量子化データを出力し、次のブロックが非平坦領域である場合に第３の非平坦領域量子化データを出力する。
【０１００】
続いて、第２の制御部４６Ｂは、第１０の切替部９６を備えている。
【０１０１】
第２の制御部４６Ｂの第１０の切替部９６は、カウント値が、各々のブロックの最後の画素の番号である場合に第３の量子化データを第４の選択データとして出力し、カウント値が、各々のブロックの最後の画素の番号ではない場合に第２の遅延データを第４の選択データとして出力する。
【０１０２】
続いて、第３の逆量子化処理部４４は、第３の平坦領域逆量子化部８８と、第３の非平坦領域逆量子化部９０と、第６の切替部９２とを備えている。
【０１０３】
第３の逆量子化処理部４４において、第３の平坦領域逆量子化部８８は、平坦領域用の量子化レベルＱ’を用いた乱数ディザリングにより、各々のブロックの各々の画素の第４の量子化データを逆量子化して第３の平坦領域逆量子化データを出力する。
【０１０４】
続いて、第３の非平坦領域逆量子化部９０は、非平坦領域用の量子化レベルＱを用いた乱数ディザリングにより、各々のブロックの各々の画素の第４の量子化データを逆量子化して第３の非平坦領域逆量子化データを出力する。
【０１０５】
続いて、第６の切替部９２は、伸張データとして、各々のブロックが平坦領域である場合に第３の平坦領域逆量子化データを出力し、各々のブロックが非平坦領域である場合に第３の非平坦領域逆量子化データを出力する。
【０１０６】
なお、量子化レベル判定部１８を画像圧縮部１２だけに設けて、画像伸張部１６においても、その判定結果の出力を使用してもよいし、その逆でもよいし、あるいは、画像圧縮部１２および画像伸張部１６の両方に設けてもよい。カウンタ７０も同様である。
【０１０７】
次に、画像処理装置１０の動作を説明する。
【０１０８】
画像データを圧縮する場合、１ラインの各々のブロックに含まれる複数の画素の画像データが量子化レベル判定部１８に順次入力される。また、１ラインに含まれる各々の画素の画像データが第１の量子化処理部２０に順次入力される。つまり、量子化レベル判定部１８には画像データがブロック単位で順次入力され、第１の量子化処理部２０には、画像データが画素単位で順次入力される。
【０１０９】
画像圧縮部１２では、まず、量子化レベル判定部１８において、各々のブロックの量子化レベルが判定され、各々のブロックの量子化レベルの判定結果が出力される。
【０１１０】
また、各々のブロックの量子化レベルの判定結果が出力された後、第１の量子化処理部２０において、各々のブロックの判定結果に対応する量子化レベルを用いた乱数ディザリングにより、１ラインの各々のブロックの各々の画素の画像データが量子化され、各々のブロックの各々の画素の第１の量子化データが出力される。
【０１１１】
つまり、第１の平坦領域量子化部５２において、平坦領域用の量子化レベルＱ’を用いた乱数ディザリングにより、各々のブロックの各々の画素の画像データが量子化され、第１の平坦領域量子化データが出力される。また、第１の非平坦領域量子化部５４において、非平坦領域用の量子化レベルＱを用いた乱数ディザリングにより、各々のブロックの各々の画素の画像データが量子化され、第１の非平坦領域量子化データが出力される。
【０１１２】
続いて、第１の切替部５６から、各々のブロックの各々の画素の第１の量子化データとして、各々のブロックが平坦領域である場合に第１の平坦領域量子化データが出力され、各々のブロックが非平坦領域である場合に第１の非平坦領域量子化データが出力される。
【０１１３】
１ラインの先頭ブロックの先頭画素の画像データ、つまり、１ラインの先頭画素の画像データを量子化する場合、先頭ブロックの先頭画素の第１の量子化データが、第１の出力部３０から先頭ブロックの先頭画素の圧縮データとして出力され、メモリ１４に格納される。第１の出力部３０は、ラインのデータイネーブル信号等により、ラインの先頭画素を識別する。メモリ１４に格納される圧縮データは、RGBの画像データの場合、RGBの第１の量子化データとなり、YUV（Y：輝度およびUV：色差）の画像データの場合、YUVの第１の量子化データとなる。画像データが他の色空間の画像データの場合も同様である。
【０１１４】
また、先頭ブロックの先頭画素の第１の量子化データは、図４において破線で示すように、カウンタ７０のカウント値＝１に応じて、第１の制御部３２Ａの第７の切替部７２から先頭ブロックの先頭画素の第１の選択データとして出力される。続いて、先頭ブロックの先頭画素の第１の選択データは、第１の遅延部２４から先頭ブロックの先頭画素の第１の遅延データとして出力され、先頭ブロックの先頭画素の第１の遅延データは、図４において破線で示すように、カウンタ７０のカウント値＝１に応じて、第１の制御部３２Ｂの第８の切替部７４から先頭ブロックの先頭画素の第２の選択データとして出力される。
【０１１５】
続いて、先頭ブロックの２番目の画素の画像データを量子化する場合、減算部２８において、先頭ブロックの２番目の画素の第１の量子化データから先頭ブロックの先頭画素の第２の選択データが減算され、つまり、先頭ブロックの２番目の画素の第１の量子化データと先頭画素の第１の量子化データとの差分が算出され、先頭ブロックの２番目の画素の予測誤差データが出力される。差分の算出は、RGB色空間の第１の量子化データに限らず、色空間を変換して、例えば、YUV色空間等の第１の量子化データで行ってもよい。
【０１１６】
続いて、先頭ブロックの２番目の画素の予測誤差データは、第１の出力部３０から圧縮データとして出力され、メモリ１４に格納される。
【０１１７】
先頭ブロックの２番目の画素の画像データを量子化する場合の第１の制御部３２Ａおよび３２Ｂならびに第１の遅延部２４の動作は、先頭ブロックの先頭画素の画像データを量子化する場合の動作と同様である（破線の経路）。
【０１１８】
続いて、先頭ブロックの３番目の画素の画像データを量子化する場合の動作は、先頭ブロックの２番目の画素の画像データを量子化する場合の動作と同様である。
【０１１９】
続いて、先頭ブロックの４番目の画素の画像データを量子化する場合の減算部２８、第１の出力部３０およびメモリ１４の動作は、先頭ブロックの２番目の画素の画像データを量子化する場合の動作と同様である。
【０１２０】
先頭ブロックの４番目の画素の第１の量子化データは、第１の逆量子化処理部２２において、先頭ブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により逆量子化され、先頭ブロックの４番目の画素の第１の逆量子化データが出力される。
【０１２１】
つまり、第１の平坦領域逆量子化部５８において、平坦領域用の量子化レベルＱ’を用いたビットのシフト演算により、先頭ブロックの４番目の画素の第１の量子化データが逆量子化され、第１の平坦領域逆量子化データが出力される。また、第１の非平坦領域逆量子化部６０において、非平坦領域用の量子化レベルＱを用いたビットのシフト演算により、先頭ブロックの４番目の画素の第１の量子化データが逆量子化され、第１の非平坦領域逆量子化データが出力される。
【０１２２】
続いて、第２の切替部６２から、先頭ブロックの４番目の画素の第１の逆量子化データとして、先頭ブロックが平坦領域である場合に第１の平坦領域逆量子化データが出力され、先頭ブロックが非平坦領域である場合に第１の非平坦領域逆量子化データが出力される。
【０１２３】
続いて、先頭ブロックの４番目の画素の第１の逆量子化データは、カウンタ７０のカウント値＝４に応じて、第１の制御部３２Ａの第７の切替部７２から先頭ブロックの４番目の画素の第１の選択データとして出力され、先頭ブロックの４番目の画素の第１の選択データは、第１の遅延部２４から先頭ブロックの４番目の画素の第１の遅延データとして出力される。
【０１２４】
続いて、先頭ブロックの４番目の画素の第１の遅延データは、第２の量子化処理部２６において、２番目のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により量子化され、先頭ブロックの４番目の画素の第２の量子化データが出力される。
【０１２５】
つまり、第２の平坦領域量子化部６４において、平坦領域用の量子化レベルＱ’を用いたビットのシフト演算により、先頭ブロックの４番目の画素の第１の遅延データが量子化され、第２の平坦領域量子化データが出力される。また、第２の非平坦領域量子化部６６において、非平坦領域用の量子化レベルＱを用いたビットのシフト演算により、先頭ブロックの４番目の画素の第１の遅延データが量子化され、第２の非平坦領域量子化データが出力される。
【０１２６】
続いて、第３の切替部６８から、先頭ブロックの４番目の画素の第２の量子化データとして、２番目のブロックが平坦領域である場合に第２の平坦領域量子化データが出力され、２番目のブロックが非平坦領域である場合に第２の非平坦領域量子化データが出力される。
【０１２７】
続いて、先頭ブロックの４番目の画素の第２の量子化データは、カウンタ７０のカウント値＝４に応じて、第１の制御部３２Ｂの第８の切替部７４から先頭ブロックの４番目の画素の第２の選択データとして出力される。
【０１２８】
続いて、１ラインの２番目のブロックの先頭画素の画像データを量子化する場合、減算部２８において、２番目のブロックの先頭画素の第１の量子化データから先頭ブロックの４番目の画素の第２の選択データが減算され、つまり、２番目のブロックの先頭画素の第１の量子化データと先頭ブロックの４番目の画素の第１の量子化データを先頭のブロックの量子化レベルを用いたビットのシフト演算で逆量子化し、２番目のブロックの量子化レベルを用いたビットのシフト演算で量子化した第２の選択データとの差分が算出され、２番目のブロックの先頭画素の予測誤差データが出力される。
【０１２９】
続いて、２番目のブロックの先頭画素の予測誤差データは、第１の出力部３０から圧縮データとして出力され、メモリ１４に格納される。
【０１３０】
２番目のブロックの先頭画素の第１の量子化データを量子化する場合の第１の制御部３２Ａおよび３２Ｂならびに第１の遅延部２４の動作は、先頭ブロックの先頭画素の画像データを量子化する場合の動作と同様である（破線の経路）。
【０１３１】
これ以後の動作は、１ラインの最後の画素の画像データの量子化が終了するまで上記の動作の繰り返しとなる。
【０１３２】
一方、圧縮データを伸張する場合、メモリ１４から読み出された圧縮データが加算部４０および第２の出力部４２に順次入力される。
【０１３３】
画像伸張部１６では、先頭ブロックの先頭画素の圧縮データ、つまり、１ラインの先頭画素の圧縮データを逆量子化する場合、メモリ１４から読み出された先頭ブロックの先頭画素の圧縮データが、第２の出力部４２から先頭ブロックの先頭画素の第４の量子化データとして出力される。第２の出力部４２は、ラインのデータイネーブル信号等により、ラインの先頭画素を識別する。
【０１３４】
続いて、第３の逆量子化処理部４４において、先頭ブロックの判定結果に対応する量子化レベルを用いた乱数ディザリングにより、先頭ブロックの先頭画素の第４の量子化データが逆量子化され、先頭ブロックの先頭画素の伸張データが出力される。
【０１３５】
つまり、第３の平坦領域逆量子化部８８において、平坦領域用の量子化レベルＱ’を用いた乱数ディザリングにより、先頭ブロックの先頭画素の第３の量子化データが逆量子化され、第３の平坦領域逆量子化データが出力される。また、第３の非平坦領域逆量子化部９０において、非平坦領域用の量子化レベルＱを用いた乱数ディザリングにより、先頭ブロックの先頭画素の第３の量子化データが逆量子化され、第３の非平坦領域逆量子化データが出力される。
【０１３６】
続いて、第６の切替部９２から、先頭ブロックの先頭画素の伸張データとして、先頭ブロックが平坦領域である場合に第３の平坦領域逆量子化データが出力され、先頭ブロックが非平坦領域である場合に第３の非平坦領域逆量子化データが出力される。
【０１３７】
また、先頭ブロックの先頭画素の圧縮データは、加算部４０から先頭ブロックの先頭画素の加算データとして出力される。
【０１３８】
続いて、先頭ブロックの先頭画素の加算データは、図６において破線で示すように、カウンタ７０のカウント値＝１に応じて、第２の制御部４６Ａから先頭ブロックの先頭画素の第３の選択データとして出力される。続いて、先頭ブロックの先頭画素の第３の選択データは、第２の遅延部３６から先頭ブロックの先頭画素の第２の遅延データとして出力され、先頭ブロックの先頭画素の第２の遅延データは、図６において破線で示すように、カウンタ７０のカウント値＝１に応じて、第２の制御部４６Ｂから先頭ブロックの先頭画素の第４の選択データとして出力される。
【０１３９】
続いて、先頭ブロックの２番目の画素の圧縮データを逆量子化する場合、メモリ１４から読み出された先頭ブロックの２番目の画素の圧縮データおよび先頭ブロックの先頭画素の第４の選択データが加算され、つまり、先頭ブロックの先頭画素の圧縮データおよび２番目の画素の圧縮データが加算され、先頭ブロックの２番目の画素の加算データが出力される。
【０１４０】
続いて、先頭ブロックの２番目の画素の加算データは、第２の出力部４２から先頭ブロックの２番目の画素の第４の量子化データとして出力され、第３の逆量子化処理部４４から先頭ブロックの２番目の画素の伸張データが出力される。
【０１４１】
また、先頭ブロックの２番目の画素の圧縮データを逆量子化する場合の第２の制御部４６Ａおよび４６Ｂならびに第２の遅延部３６の動作は、先頭ブロックの先頭画素の圧縮データを逆量子化する場合の動作と同様である（破線の経路）。
【０１４２】
続いて、先頭ブロックの３番目の画素の圧縮データを逆量子化する場合の動作は、先頭ブロックの２番目の画素の圧縮データを逆量子化する場合の動作と同様である。
【０１４３】
続いて、先頭ブロックの４番目の画素の圧縮データを逆量子化する場合の加算部４０、第２の出力部４２および第３の逆量子化処理部４４の動作は、先頭ブロックの２番目の画素の圧縮データを逆量子化する場合の動作と同様である。
【０１４４】
先頭ブロックの４番目の画素の加算データは、第２の逆量子化処理部３４において、先頭ブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により逆量子化され、先頭ブロックの４番目の画素の第２の逆量子化データが出力される。
【０１４５】
つまり、第２の平坦領域逆量子化部７６において、平坦領域用の量子化レベルＱ’を用いたビットのシフト演算により、先頭ブロックの４番目の画素の加算データが逆量子化され、第２の平坦領域逆量子化データが出力される。また、第２の非平坦領域逆量子化部７８において、非平坦領域用の量子化レベルＱを用いたビットのシフト演算により、先頭ブロックの４番目の画素の加算データが逆量子化され、第２の非平坦領域逆量子化データが出力される。
【０１４６】
続いて、第４の切替部８０から、先頭ブロックの４番目の画素の第２の逆量子化データとして、先頭ブロックが平坦領域である場合に第２の平坦領域逆量子化データが出力され、先頭ブロックが非平坦領域である場合に第２の非平坦領域逆量子化データが出力される。
【０１４７】
続いて、先頭ブロックの４番目の画素の第２の逆量子化データは、カウンタ７０のカウント値＝４に応じて、第２の制御部４６Ａの第９の切替部９４から先頭ブロックの４番目の画素の第３の選択データとして出力され、先頭ブロックの４番目の画素の第３の選択データは、第２の遅延部３６から先頭ブロックの４番目の画素の第２の遅延データとして出力される。
【０１４８】
続いて、先頭ブロックの４番目の画素の第２の遅延データは、第３の量子化処理部３８において、２番目のブロックの判定結果に対応する量子化レベルを用いたビットのシフト演算により量子化され、先頭ブロックの４番目の画素の第３の量子化データが出力される。
【０１４９】
つまり、第３の平坦領域量子化部８２において、平坦領域用の量子化レベルＱ’を用いたビットのシフト演算により、先頭ブロックの４番目の画素の第２の遅延データが量子化され、第３の平坦領域量子化データが出力される。また、第３の非平坦領域量子化部８４において、非平坦領域用の量子化レベルＱを用いたビットのシフト演算により、先頭ブロックの４番目の画素の第２の遅延データが量子化され、第３の非平坦領域量子化データが出力される。
【０１５０】
続いて、第５の切替部８６から、先頭ブロックの４番目の画素の第３の量子化データとして、２番目のブロックが平坦領域である場合に第３の平坦領域量子化データが出力され、２番目のブロックが非平坦領域である場合に第３の非平坦領域量子化データが出力される。
【０１５１】
続いて、先頭ブロックの４番目の画素の第３の量子化データは、カウンタ７０のカウント値＝４に応じて、第２の制御部４６Ｂの第１０の切替部９６から先頭ブロックの４番目の画素の第４の選択データとして出力される。
【０１５２】
続いて、２番目のブロックの先頭画素の圧縮データを逆量子化する場合、メモリ１４から読み出された２番目のブロックの先頭画素の圧縮データおよび先頭ブロックの４番目の画素の第４の選択データが加算され、つまり、２番目のブロックの先頭画素の圧縮データおよび先頭ブロックの４番目の画素の圧縮データが加算され、２番目のブロックの先頭画素の加算データが出力される。
【０１５３】
続いて、２番目のブロックの先頭画素の加算データを逆量子化する場合の第２の出力部４２、第３の逆量子化処理部４４、第２の制御部４６Ａおよび４６Ｂならびに第２の遅延部３６の動作は、先頭ブロックの２番目の画素の加算データを逆量子化する場合の動作と同様である。
【０１５４】
これ以後の動作は、１ラインの最後の画素の画像データの量子化が終了するまで上記の動作の繰り返しとなる。また、２番目以降のラインの画像データについても同様にして圧縮伸張が行われ、１画面の画像データについて圧縮伸張が行われる。
【０１５５】
次に、画像圧縮部１２の動作タイミングについて説明する。尚、本説明では、１ラインを４画素からなる複数のブロックに分割し、ブロック単位で画像データを順次圧縮伸張する場合の具体例を挙げて説明する。
【０１５６】
図７は、図４に示す画像圧縮部の動作と、図６に示す画像伸張部の動作を表す一実施形態のタイミングチャートである。図７のタイミングチャートは、図４の画像圧縮部１２において、１ラインの先頭画素から画像データ１、２、３、…が順次入力され、１ラインの先頭画素の第１の量子化データおよび２番目以降の画素の予測誤差データ、つまり、圧縮データが出力されるまでの動作と、図６に示す画像伸張部１６において、圧縮データが伸張され、伸張データが出力されるまでの動作を表したものである。クロック信号ＣＬＫは、１画素の画像データを処理するタイミングを制御する信号である。
【０１５７】
画像データ１、２、３…は、図７のタイミングチャートに示すように、クロック信号ＣＬＫの立上がりのタイミングに同期して順次画像圧縮部１２に入力される。なお、これ以後は、主に画像データ１〜４について説明を続けるが、画像データ５以降についても同様である。
【０１５８】
画像圧縮部１２では、画像データ１〜４、つまり、先頭ブロックの４画素分の画像データが入力された後、量子化レベル判定部１８から先頭ブロックの量子化レベルの判定結果が出力される。本実施形態の場合、先頭ブロックの量子化レベルの判定結果としてＡが出力され、画像データ５〜８、つまり、２番目のブロックの量子化レベルの判定結果としてＢが出力される。
【０１５９】
続いて、量子化レベル判定部１８から先頭ブロックの量子化レベルの判定結果Ａが出力された後、第１の量子化処理部２０から、先頭ブロックの量子化レベルの判定結果Ａに基づいて、画像データ１〜４に対応する第１の量子化データ１Ｑ１Ａ〜４Ｑ１Ａが順次出力される。
【０１６０】
続いて、第１の量子化処理部２０から第１の量子化データ１Ｑ１Ａが出力された後、第１の出力部３０から、１ラインの先頭画素に対応する圧縮データを出力する場合、第１の量子化データ１Ｑ１Ａが圧縮データとして出力され、メモリ１４に格納される。
【０１６１】
続いて、第１の量子化処理部２０から第１の量子化データ１Ｑ１Ａ〜４Ｑ１Ａが順次出力された後、第１の逆量子化処理部２２から、先頭ブロックの量子化レベルの判定結果Ａに基づいて、第１の量子化データ１Ｑ１Ａ〜４Ｑ１Ａに対応する第１の逆量子化データ１ＩＱ１Ａ〜４ＩＱ１Ａが順次出力される。
【０１６２】
続いて、第１の逆量子化処理部２２から第１の逆量子化データ１ＩＱ１Ａ〜４ＩＱ１Ａが順次出力された後、第１の制御部３２Ａの第７の切替部７２から、カウンタ７０のカウント値＝１〜３の場合、第１の量子化データ１Ｑ１Ａ〜３Ｑ１Ａが第１の選択データとして順次出力される。一方、カウント値＝４の場合、第１の逆量子化データ４ＩＱ１Ａが第１の選択データとして出力される。
【０１６３】
続いて、第１の制御部３２Ａの第７の切替部７２から第１の選択データ１Ｑ１Ａ〜３Ｑ１Ａおよび４ＩＱ１Ａが順次出力された後、第１の遅延部２４から、第１の選択データ１Ｑ１Ａ〜３Ｑ１Ａおよび４ＩＱ１Ａが１画素分（クロック信号ＣＬＫの１クロック分）の時間だけ遅延された第１の遅延データ１Ｑ１Ａ〜３Ｑ１Ａおよび４ＩＱ１Ａが順次出力される。
【０１６４】
続いて、第１の遅延部２４から第１の遅延データ１Ｑ１Ａ〜３Ｑ１Ａおよび４ＩＱ１Ａが順次出力された後、第２の量子化処理部２６から、カウント値＝１〜３の場合、先頭ブロックの量子化レベルの判定結果Ａに基づいて、第２の量子化データ１Ｑ２Ａ〜３Ｑ２Ａが順次出力され、カウント値＝４の場合、２番目のブロックの量子化レベルの判定結果Ｂに基づいて、第２の量子化データ４Ｑ２Ｂが出力される。
【０１６５】
続いて、第２の量子化処理部２６から第２の量子化データ１Ｑ２Ａ〜３Ｑ２Ａおよび４Ｑ２Ｂが順次出力された後、第１の制御部３２Ｂの第８の切替部７４から、カウンタ７０のカウント値＝１〜３の場合、第１の遅延データ１Ｑ１Ａ〜３Ｑ１Ａが第２の選択データとして順次出力される。一方、カウント値＝４の場合、第２の量子化データ４Ｑ２Ｂが第２の選択データとして出力される。
【０１６６】
続いて、第１の制御部３２Ｂの第８の切替部７４から第２の選択データ１Ｑ１Ａ〜３Ｑ１Ａおよび４Ｑ２Ｂが順次出力された後、減算部２８から、第１の量子化データ２Ｑ１Ａ〜４Ｑ１Ａおよび５Ｑ１Ｂと第２の選択データ１Ｑ１Ａ〜３Ｑ１Ａおよび４Ｑ２Ｂとの差分データ２Ｑ１Ａ−１Ｑ１Ａ、３Ｑ１Ａ−２Ｑ１Ａ、４Ｑ１Ａ−３Ｑ１Ａおよび５Ｑ１Ｂ−４Ｑ２Ｂが予測誤差データ２−１ＰＥＡ、３−２ＰＥＡ、４−３ＰＥＡおよび５−４ＰＥＢとして順次出力される。
【０１６７】
続いて、減算部２８から予測誤差データ２−１ＰＥＡ、３−２ＰＥＡ、４−３ＰＥＡおよび５−４ＰＥＢが順次出力された後、１ラインの２番目以降の画素に対応する圧縮データを出力する場合、予測誤差データ２−１ＰＥＡ、３−２ＰＥＡ、４−３ＰＥＡおよび５−４ＰＥＢが圧縮データとして順次出力され、メモリ１４に格納される。
【０１６８】
画像圧縮部１２では、第１の逆量子化処理部２２および第２の量子化処理部２６において、乱数ディザリングではなく、ビットのシフト演算により逆量子化および量子化が行われるため、図７のタイミングチャートに示すように、第１の量子化データおよび第１の遅延データが出力されてから、クロック信号ＣＬＫの１サイクル以内で処理を完了することができる。
【０１６９】
次に、画像伸張部１６の動作タイミングについて説明する。
【０１７０】
図７のタイミングチャートに示すように、メモリ１４から読み出された圧縮データ１Ｑ１Ａ、２−１ＰＥＡ、３−２ＰＥＡ、４−３ＰＥＡおよび５−４ＰＥＢ、…は、クロック信号ＣＬＫの立上がりのタイミングに同期して順次画像伸張部１６に入力される。
【０１７１】
画像伸張部１６では、メモリ１４から圧縮データ１Ｑ１Ａが読み出された後、第２の出力部４２から、１ラインの先頭画素に対応する第４の量子化データを出力し、圧縮データ１Ｑ１Ａが第４の量子化データとして出力される。
【０１７２】
続いて、第２の出力部４２から第４の量子化データ１Ｑ１Ａが出力された後、第３の逆量子化処理部４４から、先頭ブロックの量子化レベルの判定結果Ａに基づいて、第４の量子化データ１Ｑ１Ａに対応する伸張データとして画像データ１が出力される。
【０１７３】
また、メモリ１４から圧縮データ１Ｑ１Ａが読み出された後、加算部４０から、圧縮データ１Ｑ１Ａが加算データとして出力される。
【０１７４】
続いて、メモリ１４から圧縮データ２−１ＰＥＡ、３−２ＰＥＡ、４−３ＰＥＡおよび５−４ＰＥＢが読み出された後、圧縮データ２−１ＰＥＡ、３−２ＰＥＡ、４−３ＰＥＡおよび５−４ＰＥＢ、つまり、差分データ２Ｑ１Ａ−１Ｑ１Ａ、３Ｑ１Ａ−２Ｑ１Ａ、４Ｑ１Ａ−３Ｑ１Ａおよび５Ｑ１Ｂ−４Ｑ２Ｂと、後述する第４の選択データ１Ｑ１Ａ〜３Ｑ１Ａおよび４Ｑ２Ｂとの加算データ２Ｑ１Ａ〜４Ｑ１Ａおよび５Ｑ１Ｂが順次出力される。
【０１７５】
続いて、加算部４０から加算データ１Ｑ１Ａ〜４Ｑ１Ａが順次出力された後、第２の逆量子化処理部３４から、先頭ブロックの量子化レベルの判定結果Ａに基づいて、加算データ１Ｑ１Ａ〜４Ｑ１Ａに対応する第２の逆量子化データ１ＩＱ１Ａ〜４ＩＱ１Ａが順次出力される。
【０１７６】
続いて、第２の逆量子化処理部３４から第２の逆量子化データ１ＩＱ１Ａ〜４ＩＱ１Ａが順次出力された後、第２の制御部４６Ａの第９の切替部９４から、カウンタ７０のカウント値＝１〜３の場合、加算データ１Ｑ１Ａ〜３Ｑ１Ａが第３の選択データとして順次出力される。一方、カウント値＝４の場合、第２の逆量子化データ４ＩＱ１Ａが第３の選択データとして出力される。
【０１７７】
続いて、第２の制御部４６Ａの第９の切替部９４から第３の選択データ１Ｑ１Ａ〜３Ｑ１Ａおよび４ＩＱ１Ａが順次出力された後、第２の遅延部３６から、第３の選択データ１Ｑ１Ａ〜３Ｑ１Ａおよび４ＩＱ１Ａが１画素分の時間だけ遅延された第２の遅延データ１Ｑ１Ａ〜３Ｑ１Ａおよび４ＩＱ１Ａが順次出力される。
【０１７８】
続いて、第２の遅延部３６から第２の遅延データ１Ｑ１Ａ〜３Ｑ１Ａおよび４ＩＱ１Ａが順次出力された後、第３の量子化処理部３８から、カウント値＝１〜３の場合、先頭ブロックの量子化レベルの判定結果Ａに基づいて、第３の量子化データ１Ｑ２Ａ〜３Ｑ２Ａが順次出力され、カウント値＝４の場合、２番目のブロックの量子化レベルの判定結果Ｂに基づいて、第３の量子化データ４Ｑ２Ｂが出力される。
【０１７９】
続いて、第３の量子化処理部３８から第３の量子化データ１Ｑ２Ａ〜３Ｑ２Ａおよび４Ｑ２Ｂが順次出力された後、第２の制御部４６Ｂの第１０の切替部９６から、カウンタ７０のカウント値＝１〜３の場合、第２の遅延データ１Ｑ１Ａ〜３Ｑ１Ａが第４の選択データとして順次出力される。一方、カウント値＝４の場合、第３の量子化データ４Ｑ２Ｂが第４の選択データとして出力される。
【０１８０】
続いて、第２の制御部４６Ｂの第１０の切替部９６から第４の選択データ１Ｑ１Ａ〜３Ｑ１Ａおよび４Ｑ２Ｂが順次出力された後、前述の加算部４０に順次入力される。
【０１８１】
続いて、加算部４０から、加算データ２Ｑ１Ａ〜４Ｑ１Ａおよび５Ｑ１Ｂが順次出力された後、１ラインの２番目以降の画素に対応する第４の量子化データを出力する場合、加算データ２Ｑ１Ａ〜４Ｑ１Ａおよび５Ｑ１Ｂが第４の量子化データとして順次出力される。
【０１８２】
続いて、第２の出力部４２から第４の量子化データ２Ｑ１Ａ〜４Ｑ１Ａおよび５Ｑ１Ｂが出力された後、第３の逆量子化処理部４４から、先頭ブロックの量子化レベルの判定結果Ａに基づいて、第４の量子化データ２Ｑ１Ａ〜４Ｑ１Ａおよび５Ｑ１Ｂに対応する伸張データとして画像データ２、３、４、…が順次出力される。
【０１８３】
画像伸張部１６においても、第２の逆量子化処理部３４および第３の量子化処理部３８において、乱数ディザリングではなく、ビットのシフト演算により逆量子化および量子化が行われるため、図７のタイミングチャートに示すように、加算データおよび第２の遅延データが出力されてから、クロック信号ＣＬＫの１サイクル以内で処理を完了することができる。
【０１８４】
以上のように、画像圧縮部１２では、現在の画素が現在のブロックの最後の画素ではなくかつ先頭ブロックの先頭画素でない場合、第１の遅延部２４において、現在の画素の第１の量子化データが遅延された第１の遅延データが予測誤差データの算出に使用される。
【０１８５】
一方、平坦領域のブロックと非平坦領域のブロックとの間では量子化レベルが異なるため、そのままでは隣接する２つのブロックの間で予測誤差データを算出することができない。これに対し、画像圧縮部１２では、現在のブロックの最後の画素の第１の量子化データが、一旦、現在のブロックの量子化レベルに基づいて逆量子化され、次のブロックの量子化レベルに基づいて再度量子化し直された第２の量子化データが予測誤差データの算出に使用される。
【０１８６】
例えば、現在のブロックが非平坦領域、次のブロックが平坦領域であると判定され、非平坦領域のブロックの量子化レベルが２、平坦領域のブロックの量子化レベルが１の場合を考える。
【０１８７】
この場合、現在のブロックの画像データRGB＝888（RGB各８ビット）は、第１の量子化処理部２０において、非平坦領域のブロックの量子化レベル２に基づいて第１の量子化データRGB＝666に量子化される。続いて、第１の量子化データRGB＝666は、第１の逆量子化処理部２２において、第１の逆量子化データRGB＝888に逆量子化され、第１の逆量子化データRGB＝888は、再度、第２の量子化処理部２６において、平坦領域のブロックの量子化レベル１に基づいて第２の量子化データRGB＝777に量子化される。
【０１８８】
これにより、画像圧縮部１２では、隣接する２つのブロックの量子化レベルが異なる場合であっても、隣接する２つのブロックの間で予測誤差データを算出することができる。また、従来例の図１１Ｂに対応する本実施形態の図８に示すように、１ラインの先頭画素のみの第１の量子化データおよび２番目以降の画素の予測誤差データをメモリ１４に格納するため、１ラインに含まれるブロック数を多くしても圧縮後の符号量を削減することができる。
【０１８９】
また、現在のブロックの最後の画素の第１の量子化データの逆量子化および量子化をし直す場合、圧縮伸張後の画像の画質を向上させるために、乱数ディザリングにより逆量子化および量子化を行うことが考えられる。しかし、乱数ディザリングにより逆量子化および量子化をし直す場合、ハードウェアが複雑となり、かつ、処理時間も長くなるため、所望の処理時間内に逆量子化および量子化をし直すことが難しい場合がある。
【０１９０】
これに対し、画像圧縮部１２では、ビットのシフト演算により逆量子化および量子化をし直すため、ハードウェアを簡素化し、かつ、所望の時間内に逆量子化および量子化をし直すことができる。また、乱数ディザリングにより量子化された第１の量子化データを使用して逆量子化および量子化をし直すため、ビットのシフト演算により逆量子化および量子化をし直したとしても圧縮伸張後の画像の画質を向上させることができる。
【０１９１】
なお、例えば、ブロックに含まれる４画素のRGB色空間の圧縮データをYUV色空間の圧縮データに変換し、水平方向の２画素の圧縮データの色差Ｕの平均値を算出したものを圧縮後の色差Ｕとしてもよい。また、水平方向の２画素の圧縮データの色差Ｖについても同様である。さらに、垂直方向の２画素の圧縮データの色差ＵおよびＶについても同様にして圧縮してもよい。
【０１９２】
また、１ブロックの画素数が４画素の場合に限らず、１ブロックを任意の画素数としてブロック単位で圧縮伸張を行うことができる。
【０１９３】
また、画像圧縮部１２は、さらに、第１の出力部３０から出力される圧縮データを符号化して符号化データを出力する符号化部を備え、符号化データをメモリ１４に格納する構成としてもよい。この場合、画像伸張部１６は、さらに、メモリ１４から読み出された符号化データを復号化して復号化データを出力する復号化部を備え、復号化データを加算部４０および第２の出力部４２に入力する構成とする。
【０１９４】
以上、本発明について詳細に説明したが、本発明は上記実施形態に限定されず、本発明の主旨を逸脱しない範囲において、種々の改良や変更をしてもよいのはもちろんである。
【符号の説明】
【０１９５】
１０  画像処理装置
１２  画像圧縮部
１４  メモリ
１６  画像伸張部
１８  量子化レベル判定部
２０  第１の量子化処理部
２２  第１の逆量子化処理部
２４  第１の遅延部
２６  第２の量子化処理部
２８  減算部
３０  第１の出力部
３２Ａ、３２Ｂ  第１の制御部
３４  第２の逆量子化処理部
３６  第２の遅延部
３８  第３の量子化処理部
４０  加算部
４２  第２の出力部
４４  第３の逆量子化処理部
４６Ａ、４６Ｂ  第２の制御部
５２  第１の平坦領域量子化部
５４  第１の非平坦領域量子化部
５６  第１の切替部
５８  第１の平坦領域逆量子化部
６０  第１の非平坦領域逆量子化部
６２  第２の切替部
６４  第２の平坦領域量子化部
６６  第２の非平坦領域量子化部
６８  第３の切替部
７０  カウンタ
７２  第７の切替部
７４  第８の切替部
７６  第２の平坦領域逆量子化部
７８  第２の非平坦領域逆量子化部
８０  第４の切替部
８２  第３の平坦領域量子化部
８４  第３の非平坦領域量子化部
８６  第５の切替部
８８  第３の平坦領域逆量子化部
９０  第３の非平坦領域逆量子化部
９２  第６の切替部
９４  第９の切替部
９６  第１０の切替部
１００  画像圧縮部
１０２  量子化処理部
１０４  遅延部
１０６  減算部
１０８  出力部
１１０  メモリ
【図１】
2018164226.tif 000003
【図２】
2018164226.tif 000004
【図３】
2018164226.tif 000005
【図４】
2018164226.tif 000006
【図５Ａ】
2018164226.tif 000007
【図５Ｂ】
2018164226.tif 000008
【図６】
2018164226.tif 000009
【図７】
2018164226.tif 000010
【図８】
2018164226.tif 000011
【図９】
2018164226.tif 000012
【図１０】
2018164226.tif 000013
【図１１Ａ】
2018164226.tif 000014
【図１１Ｂ】
2018164226.tif 000015