(57)【特許請求の範囲】
【請求項１】
画像データを入力する入力手段と、
前記入力手段により入力された前記画像データを、Ｍ×Ｎ画素（ここで、Ｍ及びＮは２以上の整数）のブロック単位に分割する分割手段と、
前記分割手段により分割された前記各ブロックを構成する色数をＭ×Ｎ色から、１色ないし（Ｍ×Ｎ−１）色のそれぞれに減色する減色手段と、
前記減色手段で前記１色ないし（Ｍ×Ｎ−１）色のそれぞれに減色した後の各ブロックの画像データと当該減色する前の各ブロックの画像データとの差分を、前記分割手段で分割されたブロックのそれぞれに対して取得する取得手段と、
前記取得手段により取得された、各ブロックの前記１色ないし（Ｍ×Ｎ−１）色のそれぞれに減色したときの差分に基づいて、閾値の指標である複数の閾値インデックスと、減少するデータ量の指標あるいは残存するデータ量の指標のいずれかであるカウンタとの関係を示す第１のテーブルを生成する生成手段と、
前記生成した第１のテーブルに基づいて、圧縮後のデータ量が目標のデータ量以下となる閾値を決定する決定手段と、
前記分割手段で分割された各ブロックを前記減色手段で減色したときの差分が前記決定手段により決定された前記閾値以下となるように減色し、当該減色後の画像データに基づいて圧縮データを生成する圧縮手段と
を備えることを特徴とする画像処理装置。
【請求項２】
前記圧縮手段で生成される圧縮データをメモリに格納する第１の格納手段をさらに備えることを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記圧縮手段は、前記閾値以下となるように減色された後の各ブロック内の各画素の色データを比較することにより、当該減色された後の各ブロックに含まれる色データの配置パターンを示すパターンフラグと、当該減色された後の各ブロックに含まれる色数分の色データとを、前記圧縮データとして生成することを特徴とする請求項１または２に記載の画像処理装置。
【請求項４】
前記Ｍ×Ｎ画素のブロック内で、１ないしＭ×Ｎ−１色それぞれの色数をどのように配置するかを示す配置パターンと前記パターンフラグとを予め対応づけた第２のテーブルをさらに備え、
前記圧縮手段は、前記閾値以下となるように減色された後の各ブロック内の各画素の色データを比較した結果と前記第２のテーブルとに基づいて、当該減色された後の各ブロックに含まれる色データの配置パターンを示すパターンフラグを特定し、当該特定されたパターンフラグと当該減色された後の各ブロックに含まれる色数分の色データとを、前記圧縮データとして生成することを特徴とする請求項３に記載の画像処理装置。
【請求項５】
前記圧縮手段は、前記閾値以下となるように減色された後の各ブロック内の各画素の色データを比較することにより、当該減色された後の各ブロックに含まれる色データの配置パターンを示すパターンフラグを特定し、
当該減色された後のブロックの予め定義された位置の画素に対応する色データを第１色の色データとして抽出し、
当該減色された後のブロックに含まれる色数が２色以上である場合は、当該特定されたパターンフラグで定義された配置パターンに対応する第２色以降の色データを抽出し、
前記特定されたパターンフラグと前記第１色の色データと前記第２色以降の色データとを、それぞれまとめることにより、前記圧縮データを生成する
ことを特徴とする請求項３または４に記載の画像処理装置。
【請求項６】
前記ブロックが２×２画素のブロックである場合、前記予め定義された位置の画素は、当該ブロックの左上の画素あるいは右下の画素のいずれかであることを特徴とする請求項５に記載の画像処理装置。
【請求項７】
前記第１のテーブルが、前記閾値の指標である複数の閾値インデックスと、減少するデータ量の指標であるカウンタとの関係を示す場合、
前記生成手段は、
前記分割手段により分割されたブロックを順に処理対象にし、当該処理対象となった各ブロックについて、（Ｍ×Ｎ）色から（Ｍ×Ｎ−１）色に減色した場合の第１の差分より小さい閾値インデックスに対応するカウンタは増加させず、（Ｍ×Ｎ）色から（Ｍ×Ｎ−Ｋ）色に減色した場合の第Ｋの差分以上で且つ（Ｍ×Ｎ）色から（Ｍ×Ｎ−Ｋ―１）色に減色した場合の第（Ｋ＋１）の差分より小さい閾値インデックスに対応するカウンタはＫ増加させ（ここで、Ｋ＝１，２，…，Ｍ×Ｎ−２とする）、（Ｍ×Ｎ）色から１色に減色した場合の第（Ｍ×Ｎ−１）の差分以上の閾値インデックスに対応するカウンタは（Ｍ×Ｎ−１）増加させることにより、前記第１のテーブルを生成する
ことを特徴とする請求項１乃至６のいずれか１項に記載の画像処理装置。
【請求項８】
前記第１のテーブルが、前記閾値の指標である複数の閾値インデックスと、残存するデータ量の指標であるカウンタとの関係を示す場合、
前記生成手段は、
前記分割手段により分割されたブロックを順に処理対象にし、当該処理対象となった各ブロックについて、（Ｍ×Ｎ）色から（Ｍ×Ｎ−１）色に減色した場合の第１の差分より小さい閾値インデックスに対応するカウンタは（Ｍ×Ｎ）増加させ、（Ｍ×Ｎ）色から（Ｍ×Ｎ−Ｋ）色に減色した場合の第Ｋの差分以上で且つ（Ｍ×Ｎ）色から（Ｍ×Ｎ−Ｋ―１）色に減色した場合の第（Ｋ＋１）の差分より小さい閾値インデックスに対応するカウンタは（Ｍ×Ｎ−Ｋ）増加させ（ここで、Ｋ＝１，２，…，Ｍ×Ｎ−２とする）、（Ｍ×Ｎ）色から１色に減色した場合の第（Ｍ×Ｎ−１）の差分以上の閾値インデックスに対応するカウンタは１増加させることにより、前記第１のテーブルを生成する
ことを特徴とする請求項１乃至６のいずれか１項に記載の画像処理装置。
【請求項９】
前記入力手段で入力された画像データを、所定の大きさのタイル単位に分割するタイル分割手段を更に備え、
前記分割手段は、前記タイル分割手段によって前記タイル単位に分割された画像データを、更に、Ｍ×Ｎ画素（ここで、Ｍ及びＮは２以上の整数）のブロック単位に分割することを特徴とする請求項１乃至８のいずれか１項に記載の画像処理装置。
【請求項１０】
入力手段が、画像データを入力する入力工程と、
分割手段が、前記入力工程で入力された前記画像データを、Ｍ×Ｎ画素（ここで、Ｍ及びＮは２以上の整数）のブロック単位に分割する分割工程と、
減色手段が、前記分割工程で分割された前記各ブロックを構成する色数をＭ×Ｎ色から、１色ないし（Ｍ×Ｎ−１）色のそれぞれに減色する減色工程と、
取得手段が、前記減色工程で前記１色ないし（Ｍ×Ｎ−１）色のそれぞれに減色した後の各ブロックの画像データと当該減色する前の各ブロックの画像データとの差分を、前記分割工程で分割されたブロックのそれぞれに対して取得する取得工程と、
生成手段が、前記取得工程で取得された、各ブロックの前記１色ないし（Ｍ×Ｎ−１）色のそれぞれに減色したときの差分に基づいて、閾値の指標である複数の閾値インデックスと、減少するデータ量の指標あるいは残存するデータ量の指標のいずれかであるカウンタとの関係を示す第１のテーブルを生成する生成工程と、
決定手段が、前記生成した第１のテーブルに基づいて、圧縮後のデータ量が目標のデータ量以下となる閾値を決定する決定工程と、
圧縮手段が、前記分割工程で分割された各ブロックを前記減色工程で減色したときの差分が前記決定工程で決定された前記閾値以下となるように減色し、当該減色後の画像データに基づいて圧縮データを生成する圧縮工程と
を備えることを特徴とする画像処理方法。
【請求項１１】
コンピュータを、
画像データを入力する入力手段、
前記入力手段により入力された前記画像データを、Ｍ×Ｎ画素（ここで、Ｍ及びＮは２以上の整数）のブロック単位に分割する分割手段、
前記分割手段により分割された前記各ブロックを構成する色数をＭ×Ｎ色から、１色ないし（Ｍ×Ｎ−１）色のそれぞれに減色する減色手段、
前記減色手段で前記１色ないし（Ｍ×Ｎ−１）色のそれぞれに減色した後の各ブロックの画像データと当該減色する前の各ブロックの画像データとの差分を、前記分割手段で分割されたブロックのそれぞれに対して取得する取得手段、
前記取得手段により取得された、各ブロックの前記１色ないし（Ｍ×Ｎ−１）色のそれぞれに減色したときの差分に基づいて、閾値の指標である複数の閾値インデックスと、減少するデータ量の指標あるいは残存するデータ量の指標のいずれかであるカウンタとの関係を示す第１のテーブルを生成する生成手段、
前記生成した第１のテーブルに基づいて、圧縮後のデータ量が目標のデータ量以下となる閾値を決定する決定手段、
前記分割手段で分割された各ブロックを前記減色手段で減色したときの差分が前記決定手段により決定された前記閾値以下となるように減色し、当該減色後の画像データに基づいて圧縮データを生成する圧縮手段、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像データを圧縮する画像処理装置、画像処理装置における圧縮方法、および、プログラムに関する。
【背景技術】
【０００２】
従来、高解像度のカラー画像への需要が高まっており、デジタル複合機では１２００ｄｐｉやそれを超える解像度の画像を扱うことが多い。画像の高解像度化が進むにつれて、画像処理を必要とする画素数が飛躍的に増え、その処理負荷がますます増大している。例えば、６００ｄｐｉから１２００ｄｐｉに解像度が倍になることで処理すべき画素数は４倍となる。デジタル複合機に限らず、デジタルカメラやファクシミリ装置などの画像処理装置では、メモリ／ハードディスク量の節約やそれらへの書き込み時間の短縮により処理時間を短縮するために、カラー画像データの圧縮を行っている。
【０００３】
カラー静止画像の圧縮方式には、離散コサイン変換を利用したＪＰＥＧ方式やＷａｖｅｌｅｔ変換を利用した方式が多く用いられている。そのような符号化方式は、一般的に画像データを所定のブロック（例えば８×８画素や１６×１６画素単位）に符号化し、離散コサイン変換、量子化、エントロピー符号化を行うことで高い圧縮効率を達成するものである。そのような符号化方式は、可変長符号化方式であるので、符号化対象の画像データ毎に符号量が変化する。
【０００４】
上述の方式で画像データを圧縮処理した後、画素データを参照してその画素データを画像処理するためには、圧縮された画像データのままで画像処理を行うことはできないので、圧縮された画像データの復号化処理が必要である。従って、高解像度データ全ての画素に対して画素単位に復号化処理を行なわなくてはならず、処理時間の増大の一因となってしまう。
【０００５】
また、圧縮処理を行う方法としては、画素データとその連続数を記憶する公知のランレングス圧縮方式や、特許文献１のように、ブロック毎に２色以下に減色して２色分の色データとその２色の配置形状を出力することでデータ量を圧縮する方法が記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００８−２７１０４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１の方法では、ブロック内を常に２色以下にしていたが、更なる高画質化を行うために、本出願人は、２×２ブロックの場合、各ブロックの色数を最大４色まで許容して圧縮する技術も考えている。特願２００９−２２１４４４号の提案では、まず、画像データをブロック（例えば２×２画素サイズのブロック）毎に分割し、ブロック内の各画素の色データを比較することにより、注目ブロックに含まれる色データの配置パターン情報と、着目ブロックに含まれる色数分の色データ情報とを出力する。そして、出力された色データ情報のうち、ブロックにおける予め決められた位置の画素に対応する第１の色データ情報（２×２画素サイズのブロックにおける左上の画素の色データ情報）と、それ以外の色データ情報（第２〜４の色データ情報）とに分けてメモリ領域に格納する。すなわち、各ブロックから得られる配置パターン情報と第１の色データ情報とそれ以外の色データ情報とを、それぞれ異なるメモリ領域にまとめて格納する技術を提案している。また、特願２００９−２２１４４４号の提案では、各ブロックの色データを比較する際に、ブロック内の画素間の色（画素値）の差分を閾値と比較し、差分が該閾値より小さい場合に減色処理を行って、圧縮率を向上することも考えている。
【０００８】
一方、減色処理をできるだけ行わない方が元の画像に忠実に再現することが可能となるので、減色処理の閾値を小さくした方が高画質になるが圧縮率は低下してしまう。また、システムによっては、例えば、１ページ分の画像データの格納に使用できるメモリサイズが制限されている場合がある。特願２００９−２２１４４４号の提案で減色処理を行う場合、減色の閾値に応じてデータ量がどれほど削減されるかということは、処理対象の画像に応じて異なるので、減色処理を行う前に予め知ることができない。従って、ある入力画像データに対して、できるだけ高画質を保ちつつ、データ量を目標圧縮率以下にするためには、その圧縮率を達成するまで、閾値の設定を変更しながら再圧縮を繰り返す必要があり、その結果、目標値までの圧縮処理に時間がかかってしまう。
【０００９】
本発明の目的は、このような問題点を解決することにある。上記の点に鑑み、本発明は、画像データの圧縮処理を高速に行なう画像処理装置、画像処理装置における圧縮方法、および、プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するため、本発明に係る画像処理装置は、画像データを入力する入力手段と、前記入力手段により入力された前記画像データを、Ｍ×Ｎ画素（ここで、Ｍ及びＮは２以上の整数）のブロック単位に分割する分割手段と、前記分割手段により分割された前記各ブロックを構成する色数をＭ×Ｎ色から、１色ないし（Ｍ×Ｎ−１）色のそれぞれに減色する減色手段と、前記減色手段で前記１色ないし（Ｍ×Ｎ−１）色のそれぞれに減色した後の各ブロックの画像データと当該減色する前の各ブロックの画像データとの差分を、前記分割手段で分割されたブロックのそれぞれに対して取得する取得手段と、前記取得手段により取得された、各ブロックの前記１色ないし（Ｍ×Ｎ−１）色のそれぞれに減色したときの差分に基づいて、閾値の指標である複数の閾値インデックスと、減少するデータ量の指標あるいは残存するデータ量の指標のいずれかであるカウンタとの関係を示す第１のテーブルを生成する生成手段と、前記生成した第１のテーブルに基づいて、圧縮後のデータ量が目標のデータ量以下となる閾値を決定する決定手段と、前記分割手段で分割された各ブロックを前記減色手段で減色したときの差分が前記決定手段により決定された前記閾値以下となるように減色し、当該減色後の画像データに基づいて圧縮データを生成する圧縮手段とを備えることを特徴とする。
【発明の効果】
【００１１】
本発明によると、画像データを目標のデータ量以下に圧縮する場合の圧縮処理を高速に行なうことができる。
【図面の簡単な説明】
【００１２】
【図１】画像処理装置の主要な構成を示す図である。
【図２】コントローラの内部の構成を示す図である。
【図３】ブロック内を構成する色の配置パターンを示す図である。
【図４】各配置パターンとパターンフラグとの対応を示す図である。
【図５】第１の実施例における圧縮処理の手順を示すフローチャートである。
【図６】データ出力部が出力するデータの一例を示す図である。
【図７】画像データのメモリ空間への書き込みの一例を示す図である。
【図８】第２の実施例における圧縮処理の手順を示すフローチャートである。
【図９】減色処理の手順を示すフローチャートである。
【図１０】圧縮部の内部の構成を示すブロック図である。
【図１１】減色処理をハードウエアで実行する場合の構成を示す図である。
【図１２】減色処理の具体例を説明するための図である。
【図１３】カウンタの動作を説明するための図である。
【図１４】閾値調整処理の手順を示すフローチャートである。
【図１５】第２の実施例におけるタイルとブロックとの関係を示す図である。
【図１６】第２の実施例におけるパケットの構造の一例を示す図である。
【図１７】第２の実施例におけるパケット管理テーブルの一例を示す図である。
【図１８】第２の実施例におけるパケットがメモリに格納された様子を示す図である。
【図１９】減色処理をハードウエアで実行する場合の他の構成を示す図である。
【発明を実施するための形態】
【００１３】
以下、添付図面を参照して本発明の好適な実施例を詳しく説明する。尚、以下の実施例は特許請求の範囲に係る本発明を限定するものでなく、また本実施例で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。なお、同一の構成要素には同一の参照番号を付して、説明を省略する。
【００１４】
［第１の実施形態］
図１は、本発明に係る実施例において用いられる画像処理装置の主要な構成を示す図である。本実施例においては、画像処理装置の一例として、スキャン機能、プリント機能、コピー機能等の複数の機能を有する多機能周辺装置（ＭＦＰ：Multifunction Peripheral）を用いる。図１に示すように、コントローラ１０１は、画像入力部であるスキャナ１０２や画像出力部であるプリンタ１０３と接続されている。また、コントローラ１０１は、ＬＡＮや公衆回線（ＷＡＮ）などのネットワーク１０４と接続することで、画像情報やデバイス情報の入出力を行なう。また、コントローラ１０１は、ＰＤＬデータのイメージ展開を行う。ＣＰＵ１０５は、記憶部１０７に格納されたプログラムに従って、画像処理装置全体を制御する。メモリ１０６は、ＣＰＵ１０５が動作するためのシステムワークメモリや、画像データを一時記憶するための画像メモリとして機能する。記憶部１０７は、ハードディスクドライブであり、システムソフトウエア、プログラム、画像データなどを格納する。
【００１５】
図２は、コントローラ１０１の内部の構成を示す図である。
【００１６】
スキャナ１０２により読み取られた画像データを読み込む場合を説明する。スキャナ用画像処理部２０１は、スキャナ１０２で読み取られたＲＧＢ（レッド、グリーン、ブルー）３色の画像データを入力し、入力された画像データに対してシェーディング処理やフィルタ処理等の画像処理を行い、圧縮部２０２に出力する。圧縮部２０２は、スキャナ用画像処理部２０１から入力された画像データに対して圧縮処理を行う。ＤＭＡＣ（ダイレクト・メモリアクセス・コントローラ）２０３は、その圧縮された画像データ（圧縮データ）を画像メモリバスを介してメモリ１０６に格納する。
【００１７】
次に、スキャナ１０２により読み取られた画像データをプリントする場合を説明する。ＤＭＡＣ２２１は、メモリ１０６に格納された圧縮データを画像メモリバスを介して色処理部２１２に出力する。色処理部２１２は、その圧縮データをＣＭＹＫ（シアン、マゼンタ、イエロー、ブラック）色空間のデータに変換する。その後、色処理部２１２は、ＣＭＹＫの各データに対して濃度調整、プリンタガンマ補正等の色処理を行なう。ＤＭＡＣ２１１は、色処理後のデータを画像メモリバスを介して再度、メモリ１０６に格納する。ＤＭＡＣ２２１は、プリント用の画像処理を行うために、画像メモリバスを介してメモリ１０６に格納されている圧縮データを読み込む。展開部２２２は、読み込んだ圧縮データをラスタ画像データに展開する。プリント用画像処理部２２３は、ラスタ画像データ（ＣＭＹＫ画像データ）を入力して、ディザ法や誤差拡散法によって面積階調処理を行い、プリンタ１０３に出力する。
【００１８】
次に、スキャナ１０２により読み取られた画像データをネットワークに送信する場合を説明する。ＤＭＡＣ２１１は、メモリ１０６に格納されている圧縮データを画像メモリバスを介して色処理部２１２に出力する。色処理部２１２は、その圧縮データに対して、ディスプレイ・ガンマ調整や用紙地色調整等を行い、ＹＣｂＣｒ（輝度、ＢＬＵＥ色差、ＲＥＤ色差）色空間のデータに変換する。ＤＭＡＣ２１１は、色処理部２１２で処理されたデータを画像メモリバスを介して再度、メモリ１０６に格納する。ＤＭＡＣ２３１は、ネットワーク送信用の画像処理を行うために、画像メモリバスを介してメモリ１０６に格納されている圧縮データを展開部２３２に出力する。展開部２３２は、その圧縮データをラスタ画像データに展開する。送信処理部２３３は、ラスタ画像データ（ＹＣｂＣｒ画像データ）に対して、カラー画像送信であればＪＰＥＧ圧縮処理を行い、モノクロ２値画像送信であればＹデータに対して２値化を行ってＪＢＩＧ圧縮等を行い、ネットワーク１０４に送信する。
【００１９】
次に、スキャナ１０２により読み取られた画像データを保存する場合を説明する。ＤＭＡＣ２４１は、メモリ１０６に格納されている圧縮データを画像メモリバスを介してディスク・スプール高圧縮／展開部２４２に出力する。ディスク・スプール高圧縮／展開部２４２は、ＨＤＤの書き込みスピードがメモリに対して遅いという理由で、圧縮データに対してさらに高圧縮のＪＰＥＧ圧縮を行なう。ディスク・アクセス・コントローラ２４３は、記憶部１０７に圧縮データを格納する。また、記憶部１０７に保存されている圧縮データを再度メモリ１０６に出力する場合には、上述の処理を逆に行なう。
【００２０】
次に、ネットワーク１０４を介して接続された他の装置から受信したＰＤＬデータをメモリ１０６に書き込む場合を説明する。図２に不図示のＰＤＬ解釈部として機能するＣＰＵ１０５が、ＰＤＬデータを解釈し、その結果であるディスプレイ・リストをメモリ１０６に格納する。レンダリング部２５１は、メモリ１０６に格納されているディスプレイ・リストをラスタ画像データであるＲＧＢ画像データにレンダリングする。圧縮部２５２は、レンダリングされたＲＧＢ画像データに対して画像圧縮処理を行う。ＤＭＡＣ２５３は、画像圧縮処理されたデータを画像メモリバスを介してメモリ１０６に格納する。なお、他の装置から受信したＰＤＬデータをプリントしたり、ネットワークに送信したり、保存したりする場合は、上述したような画像データの場合と同様の処理を行う。
【００２１】
次に、本実施例におけるラスタ画像データの圧縮処理を説明する。本実施例において、圧縮部２５２は、ＰＤＬデータから生成されたラスタ画像を圧縮し、圧縮部２０２は、スキャナ１０２により読み取られたラスタ画像を圧縮する。しかしながら、ラスタ画像データの圧縮処理は、このような２つの圧縮部からなる構成に限るものではない。例えば、図２のように圧縮部２０２と圧縮部２５２とを個別に設けるのではなく、共通の圧縮部として構成しても良い。本実施例においては、まず、ページ単位のラスタ画像データを、２×２画素単位（Ｍ×Ｎ画素（Ｍ及びＮは２以上の整数）の一例）のブロック毎に分割し、その分割されたブロック単位に圧縮処理を行う。ここで、本発明の圧縮処理を説明する前に、２×２画素（１ブロック）の４画素の色数の組み合わせを考える。４画素それぞれが異なる色を表す場合に、ブロック内で最大４色が存在する。従って、ブロック内で存在する色数は、１色〜４色となる。
【００２２】
図３は、色数が１色〜４色のそれぞれの場合において、考えられるブロック内の色の配置パターンを示す図である。まず、ブロック内を構成する色数が１色である場合に、４画素が同色で構成されていることになる。従って、その配置パターンは１通りである。次に、２色以上の場合を考える。ブロック内を構成する色数が２色の場合（各色を第１色と第２色と呼ぶこととする）は、図３に示すように、２色が４画素内に配置される場合の数は、所定位置の画素（本実施例では左上の画素とする）の色を第１色として考えると、左上画素以外の残りの３画素へ第１色もしくは第２色が入るので、４画素同色の場合を除くと、７通りである。次に、ブロック内を構成する色数が３色（第１色〜第３色）で構成される場合を考える。３色が４画素内に配置される場合の数は、３色のうち１色だけ２度使われる場合の数と言い換えることができる。従って、４画素のうち２画素が同じ色になる場合の数を求めれば良い。つまり、３色の場合の数は、４つの画素から２つの画素を取る組み合わせとなり、６通りとなる。また、ブロック内を構成する色数が４色（第１色〜第４色）で構成される場合は、１通りである。したがって、ブロック内の色数が１色〜４色の全ての場合の数を合計すると、１５通りのパターンが考えられる。また、これら全てのパターンを識別するためのフラグ（識別子）を付与する場合には、そのフラグのデータ量は４ビット必要である。この１５通りのパターンとフラグとの対応を図４に示すように定義する。以下、このフラグを「パターンフラグ」ともいう。
【００２３】
次に、圧縮部２０２及び２５２で行われる圧縮処理を、図５及び図１０を参照しながら説明する。図５は、圧縮処理の手順を示すフローチャートであり、図１０は、圧縮部２０２及び２５２の内部の構成を示すブロック図である。ここで、１画素あたりのデータは、ＲＧＢそれぞれ８ビット（即ち、２５６階調）である、２４ビットの画像データとする。
【００２４】
まず、２×２画素の１ブロックに対応する画像データが、スキャナ用画像処理部２０１又はレンダリング部２５１から入力される（Ｓ５０１）。入力された画像データは、減色処理部１００１に転送され、そのブロック内の減色処理が行われる（Ｓ５０２）。減色処理部１００１における減色処理の詳細は後述する。減色処理部１００１は、入力された画像データを減色処理した後、減色後の色数と色の配置パターンを示すパターンフラグを作成して、それに対応する減色処理された２×２画素の画像データとをデータ出力部１００２に転送する。データ出力部１００２は、減色処理部１００１から転送されたパターンフラグからブロック内を構成する色数と配置パターンを判断して、各色の色データを取得する（Ｓ５０３）。図４（第２のテーブルの一例）に示すように、４ビットのパターンフラグに対応して、ブロック内を構成する色数と各色の配置パターンが対応付けられているので、パターンフラグからブロック内を構成する各色の色データを取得することができる。
【００２５】
ここで、図４では、全てのパターンにおいて、所定位置（本実施形態では左上）の画素値（即ち、画素が表す色）が第１色値（１番目の色データ）となるように定義している。パターンフラグが０の場合は、色数が１であるので、左上の画素値を第１色値として取得する。また、パターンフラグが１〜７の場合は、色数が２であるので、左上の画素値を第１色値として取得し、更に、各パターンフラグに応じて定義されている第２色値（２番目の色データ）が存在する位置の画素値を取得する。例えば、パターンフラグが１の場合は、右上の画素値を第２色値として取得する。また、パターンフラグが８〜Ｄの場合は、色数が３であるので、左上の画素値を第１色値として取得し、更に各パターンフラグに応じて定義されている第２色（２番目の色データ）及び第３色（３番目の色データ）が存在する位置の画素値を、第２色値及び第３色値として取得する。例えば、パターンフラグが８の場合は、左上の画素値を第１色値、右上の画素値を第２色値として取得し、右下の画素値を第３色値として取得する。また、パターンフラグがＥの場合は、左上の画素値を第１色値、右上の画素値を第２色値、左下の画素値を第３色値、右下の画素値を第４色値（４番目の色データ）として取得する。
【００２６】
データ出力部１００２は、転送されたパターンフラグに基づき、ブロック内を構成する色数を特定し（Ｓ５０４、Ｓ５０６、Ｓ５０８）、特定された色数それぞれに応じて、パターンフラグと色データとを出力する（Ｓ５０５、Ｓ５０７、Ｓ５０９、Ｓ５１０）。データ出力部１００２が出力するデータを、図６を用いて説明する。
【００２７】
パターンフラグが０の場合（Ｓ５０４でＹＥＳ）を説明する。パターンフラグが０であるとは、即ち、４画素のブロック内を構成する色が１色であることを示す。その場合に、第２色以降の色データは存在しないので、パターンフラグの４ビットと、１色目の画素値（２４ビット分の色データ）とを出力する（Ｓ５０５）。また、パターンフラグが１〜７の場合（Ｓ５０６でＹＥＳ）を説明する。パターンフラグが１〜７であるとは、即ち、４画素のブロック内を構成する色が２色であることを示す。その場合に、２色目が存在する画素の位置をパターンフラグから求め、パターンフラグの４ビットと、２色分の画素値（２画素×２４ビット（すなわち４８ビット）分の色データ）とを出力する（Ｓ５０７）。また、パターンフラグが８〜Ｄの場合（Ｓ５０８でＹＥＳ）を説明する。パターンフラグが８〜Ｄであるとは、即ち、４画素のブロック内を構成する色が３色であることを示す。その場合に、２色目と３色目が存在する画素の位置をパターンフラグから求め、パターンフラグの４ビットと、３色分の画素値（３画素×２４ビット（すなわち７２ビット）分の色データ）とを出力する（Ｓ５０９）。また、パターンフラグがＥの場合（Ｓ５０８でＮＯ）の場合を説明する。パターンフラグがＥであるとは、即ち、４画素のブロック内を構成する色が４色であることを示す。その場合に、パターンフラグの４ビットと、４色分の画素値（４画素×４ビット（すなわち９６ビット）分の色データ）とを出力する（Ｓ５１０）。言い換えると、各ブロックから出力される色データは、ブロック内の位置順（左上から右上、左下、右下の順に１、２、３、４とする）に走査した場合に、それまでに出現していなかった色データが現れるたびに順に出力していくことに相当する。
【００２８】
このように、データ出力部１００２は、２×２画素の１ブロック内の４色分の色データ（９６ビット）を、４ビットのパターンフラグと、１ブロック内に存在する色数分の画素値のデータとを出力してメモリに格納する（第１の格納の一例）。その結果、入力された画像データから、容易に画像データ量を削減することができる。特に、２×２画素の１ブロック内で同色の画素が存在するブロック（即ち、各ブロック内を構成する色数が少ないブロック）が多いラスタ画像ほど、その出力される画像データ量の圧縮率も大きくなる。このような処理を、ラスタ画像データに含まれるブロック全てに対して行うことで、ラスタ画像データ全体を圧縮することができる。
【００２９】
続いて、減色処理部１００１の処理について説明する。図９は、減色処理部１００１における減色処理の手順を示すフローチャートである。まず、処理対象となる２×２画素の１ブロック分の画像データを入力する（Ｓ９０１）。次に、１色減色部１１０１において、４画素の画素値から、１色への減色処理を行う（Ｓ９０２）。以下、画素値は例えばＲＧＢ値で表されるものとする。本実施例においては、４画素の平均画素値を算出することで１色への減色を行う。そして、その減色した画素値と入力された４画素それぞれの画素値との差分を算出し（Ｓ９０３）、予め設定されている閾値と比較する（Ｓ９０４）。例えば、入力された各画素の画素値と減色後の各画素値との差の絶対値を、４画素分について和を取り、その値を閾値と比較する。（なお、本実施例のＳ９０３，Ｓ９０８，Ｓ９１３における入力された４画素それぞれの画素値と減色処理後の４画素それぞれの画素値との差分の算出には、入力された各画素の画素値と減色後の各画素値との差分の絶対値の和を用いる。）この差分が閾値と比較して小さいと判定された場合には、１色に減色すると判定し、パターンフラグを０に決定し（Ｓ９０５）、その１色に減色した画像データとパターンフラグとをデータ出力部１００２に出力する（Ｓ９０６）。一方、差分が閾値と比較して大きいと判定された場合には、２色への減色処理を行う（Ｓ９０７）。本実施例においては、４画素のうち差分が最も大きい２画素（画素Ａ、Ｂとする）を抽出し、残りの２画素が画素Ａ、Ｂどちらに近いかでクラスタリングし、その各クラスタにおいて平均値を求めることで２色化する。そして、その２色化した４画素それぞれの画素値と入力された４画素それぞれの画素値との差分を算出し（Ｓ９０８）、予め設定されている閾値と比較する（Ｓ９０９）。
【００３０】
ここで、差分が閾値と比較して小さいと判定された場合には、図４のような対応関係に基づき、２色に減色した画素値の位置に応じてパターンフラグを決定する（Ｓ９１０）。そして、その２色に減色した画像データとパターンフラグとをデータ出力部１００２に出力する（Ｓ９１１）。一方、差分が閾値と比較して大きいと判定された場合には、３色への減色処理を行う（Ｓ９１２）。本実施例においては、４画素のうち最も画素値の差分の小さい２画素を抽出し、その２画素の値の平均値を求め、それ以外の２画素の画素値と合わせて３色に減色する。そして、その３色化した４画素それぞれの画素値と入力された４画素それぞれの画素値との差分を算出し（Ｓ９１３）、予め設定されている閾値と比較する（Ｓ９１４）。
【００３１】
ここで、差分が閾値と比較して小さいと判定された場合には、図４のような対応関係に基づき、３色に減色した画素値の位置に応じてパターンフラグを決定する（Ｓ９１５）。そして、その３色に減色した画像データとパターンフラグとをデータ出力部１００２に出力する（Ｓ９１６）。一方、差分が閾値と比較して大きいと判定された場合には、減色すると視覚的に問題が生じるブロックであると判定し、パターンフラグをＥに決定し（Ｓ９１７）、４色のままの画像データとパターンフラグとをデータ出力部１００２に出力する（Ｓ９１８）。
【００３２】
以上の減色処理は、図９に示すような順次処理ではなく、図１１に示すようなハードウエアを構成することにより、同時に並列処理しても良い。即ち、１色減色部１１０１、２色減色部１１０２、３色減色部１１０３によって、入力された２×２画素の１ブロック分の画像データに対する、１色への減色処理（Ｓ９０２）、２色への減色処理（Ｓ９０７）、３色への減色処理（Ｓ９１２）を並列に実行する。各減色部で減色された４画素分の画像データと、入力された４画素分の画像データとは、それぞれ１色減色誤差算出部１１０４、２色減色誤差算出部１１０５、３色減色誤差算出部１１０６に転送される。各減色誤差算出部において、入力された４画素分の画像データの各画素値と、減色後の４画素分の各画素値との差分算出が並列に実行される（Ｓ９０３、Ｓ９０８、Ｓ９１３）。各減色誤差算出部で算出された差分は、減色処理後の４画素分の画像データとともに、データ選択出力部１１０９に転送される。データ選択出力部１１０９は、閾値設定部１１０８に設定された閾値と、各減色誤差算出部で算出された差分（１色減色誤差、２色減色誤差、３色減色誤差）との比較を並列に行う（Ｓ９０４、Ｓ９０９、Ｓ９１４）。そして、閾値よりも小さいと判定された差分に対応する減色した画素値とパターンフラグとを出力する。
【００３３】
ここで、複数の差分（１色減色誤差、２色減色誤差、３色減色誤差）が閾値よりも小さい場合には、１色減色誤差、２色減色誤差、３色減色誤差の優先順で、いずれの画像データとパターンフラグとを出力するかを選択する。また、全ての差分が閾値よりも大きい場合には、入力された画像データと４色を示すパターンフラグＥとが出力される。
【００３４】
以上の減色処理を、図１２を参照して具体的に説明する。図１２における説明に限り、より説明を簡略化するために、入力する画像データの各画素値として８ビットデータ（０〜２５５）を用いる。なお、ＲＧＢ８ビットの２４ビットデータに対して処理を行う場合、後述する８ビットデータに対する処理を拡張して適用すればよい。
【００３５】
まず、２×２画素の画像データ１２０１が入力されると、それぞれの１色減色部１１０１、２色減色部１１０２、３色減色部１１０３でそれぞれの色数へ減色される。例えば、１色減色部１１０１では、画像データ１２０１の４画素の平均値を取り、画像データ１２０２のような減色結果が得られる。また、２色減色部１１０２、３色減色部１１０３についても同様に、近い色を平均化することで、画像データ１２０３、１２０４のような減色結果が得られる。
【００３６】
次に、それぞれの減色誤差算出部に、画像データ１２０１と、各画像データ１２０２〜１２０４が入力され、画素ごとの差分データ１２０５〜１２０７を算出する。さらに、それらの各合計値を、１色に減色、２色に減色、３色に減色した場合における各ブロックの差分１２０８〜１２１０とする。そして、画像データ１２０１、１２０２〜１２０４、差分１２０８〜１２１０は、データ選択出力部１１０９に転送される。この差分１２０８〜１２１０は、１色〜３色に減色したときの各ブロック単位での誤差を表していることになる（本実施例ではそれぞれ、１色減色誤差、２色減色誤差、３色減色誤差とも呼ぶ）。
【００３７】
閾値設定部１１０８に閾値２０が設定されていた場合には、これがデータ選択出力部１１０９で、それぞれの差分１２０８〜１２１０と比較され、閾値２０よりも小さい差分１２１０を特定し、当該差分１２１０に対応する３色に減色された画像データ１２０４が選択出力される。従って、前述したように、閾値２０の場合は、画像データ１２０４の各画素データ「５」、「８５」、「４５」、「５」と、画像データ１２０４の配置パターンに対応するパターンフラグ「９」とが出力される。
【００３８】
また、閾値設定部１１０８に閾値６０が設定されていた場合には、データ選択出力部１１０９は、閾値６０よりも小さい差分１２０９又は１２１０に対応する、画像データ１２０３又は１２０４が出力対象となる。ここで、前述した優先順によって、出力データ量がより削減できる２色に減色された画像データ１２０３が、出力対象として選択される。従って、閾値６０の場合は、画像データ１２０３の各画素データ「５」、「６５」、「６５」、「５」と、画像データ１２０３の配置パターンに対応するパターンフラグ「２」とが出力される。
【００３９】
次に、本実施例における減色数カウント部１１０７について説明する。減色数カウント部１１０７は、前述した各減色誤差算出部１１０４〜１１０６から出力された各ブロックの差分（減色誤差）に基づいて、閾値設定部１１０８で閾値を設定した場合に、ページ全体でどれほどの色数が減色されるかを示す統計を取る。減色数カウント部１１０７は、２×２画素の１ブロック処理ごとに、減色誤差算出部１１０４〜１１０６で算出された１色減色誤差、２色減色誤差、３色減色誤差という３つの差分を入力する。内部には、図１３に示すようなIndex値に対するカウンタ１３０１が設けられており、入力された３つの差分に基づいて、カウントアップしていく。ここで、Index値とは、閾値設定部１１０８で設定可能な閾値を示す指標である。なお、本実施例では、１０刻みで閾値の指標を取っているがこれに限るものではなく、更に細かくしても構わない（例えば、５刻み）。図１２の画像データ１２０１のような２×２画素ブロックが入力された場合、各差分１２０８〜１２１０の「１２０」、「５０」、「１０」が減色数カウント部１１０７に入力される。減色数カウント部１１０７は、それぞれの減色誤差以上のIndex値のカウンタをインクメントしていく。即ち、まず、差分１２１０の「１０」に対して、Index値が１０以上のカウンタを１ずつインクリメントする。そして、差分１２０９の「５０」、差分１２０８の「１２０」に対しても、Index値がそれぞれ５０、１２０以上のカウンタを１ずつインクリメントする。この処理は、ブロックを１つ処理するときに、当該ブロックに対する３色誤差（差分１２１０）未満のIndex値に対してはカウンタを増加させず、３色誤差（差分１２１０）以上で且つ２色誤差（差分１２０９）未満のIndex値に対してはカウンタを１増加させ、２色誤差（差分１２０９）以上で且つ１色誤差（差分１２０８）未満のIndex値に対してはカウンタを２増加させ、１色誤差（差分１２０８）以上のIndex値に対してはカウンタを３増加させることに等しい。したがって、画像データ１２０１が入力された場合、カウンタ１３０１は、カウンタ１３０２のように更新されることになる。このカウンタ１３０２の値は、閾値設定部１１０８で各Index値を閾値として設定した場合に、減少するデータ量の指標となる。例えば、閾値設定部１１０８で１０〜４０までの値を閾値として設定した場合、入力された画像データ１２０１は減色処理部１００１で３色に減色処理される。つまり、２×２画素ブロックで入力される４画素分のデータ量（すなわち４色分の色データの量）に対して、出力データの色は３色に減色されるので、出力される色データの量は３色分の色データ量となり、データ量が１色分減少することを表わしている。すなわち、カウンタ１３０２で示したIndex値１０〜４０に対してカウントした値「１」は、１色分の色データ量が減少するということを示す指標として用いることができる。
【００４０】
同様に、閾値設定部１１０８で５０〜１１０までの値を閾値として設定した場合、入力された画像データ１２０１は減色処理部１００１で２色に減色処理され、入力される４画素分のデータ量に対して、出力データの色は２色に減色されるので、出力される色データの量は２色分の色データ量となり、データ量が２色分減少することを示している。すなわち、Index値５０〜１１０に対してカウントした値「２」は、２色分の色データ量が減少するということを示す指標として用いることができる。
【００４１】
さらに、閾値設定部１１０８で１２０以上の値を閾値として設定した場合、入力された画像データ１２０１は減色処理部１００１で１色に減色処理され、入力される４画素分のデータ量に対して、出力データの色は１色に減色されるので、出力される色データの量は１色分の色データ量となり、データ量が３色分減少することを表わしている。すなわち、Index値１２０以上に対してカウントした値「３」は、３色分の色データ量が減少するということを示す指標として用いることができる。
【００４２】
以上のように、このカウンタ値によって、閾値をいくつに設定すれば、どれだけのデータ量が削減できるかという統計を取ることができる。なお、図１３は、２×２画素の１ブロックについて示されているが、以下、説明する。まず、Ｍ×Ｎ色（Ｍ及びＮは２以上の整数）からＭ×Ｎ−１色に減色された場合の減色誤差（第１の差分）より小さいIndex値のカウンタは増加させない。次に、第１の差分以上で、且つ、Ｍ×Ｎ色からＭ×Ｎ−２色に減色された場合の減色誤差（第２の差分）より小さいIndex値に対するカウンタを１インクリメントする。
【００４３】
汎用化して説明すると、（Ｍ×Ｎ）色から（Ｍ×Ｎ−１）色に減色した場合の第１の差分より小さい閾値インデックスに対応するカウンタは増加させず、（Ｍ×Ｎ）色から（Ｍ×Ｎ−Ｋ）色に減色した場合の第Ｋの差分以上で且つ（Ｍ×Ｎ）色から（Ｍ×Ｎ−Ｋ―１）色に減色した場合の第（Ｋ＋１）の差分より小さい閾値インデックスに対応するカウンタはＫ増加させる（ここで、Ｋ＝１，２，…，Ｍ×Ｎ−２）。
【００４４】
第２の差分以上で、且つ、Ｍ×Ｎ色からＭ×Ｎ−３色に減色された場合の減色誤差（第３の差分）より小さいIndex値に対するカウンタを２インクリメントする。以降、同様に処理を行っていくと、Ｍ×Ｎ色から２色に減色された場合の減色誤差（第Ｍ×Ｎ−２の差分）以上で、且つ、Ｍ×Ｎ色から１色に減色された場合の減色誤差（第Ｍ×Ｎ−１の差分）より小さいIndex値に対するカウンタをＭ×Ｎ−２インクリメントする。さらに、第Ｍ×Ｎ−１の差分以上のIndex値に対するカウンタをＭ×Ｎ−１インクリメントする。
【００４５】
減色数カウント部１１０７は、前述のインクリメント処理を所定数の２×２画素サイズのブロックごとに対して行い、累計を取る。例えば、６４×６４画素の画像サイズを持つ入力画像データに対して処理を行う場合、当該入力画像データ内には２×２画素サイズのブロックが３２×３２個存在することになる。この３２×３２個の各ブロックに対して上述したインクリメント処理を繰り返し適用して統計を取った場合、例えば、図１３のカウンタ１３０３（第１のテーブルの一例）のような統計結果が得られる。カウンタ１３０３に示すような統計情報を基にすれば、１回目のデータ圧縮時に目標となるデータサイズ（圧縮率）に達しなかった場合、データ再圧縮時において、目標となるデータサイズに圧縮することのできる閾値を決定することができる。この詳細については、後述する。
【００４６】
圧縮部２０２、２５２から出力される４ビットのパターンフラグと１ブロック内を構成する色数分の画素値（色データ）は、ＤＭＡＣ２０３、２５３によってメモリに書き込まれる（メモリ格納処理）。ＤＭＡＣは、パターンフラグと第１色のデータと第２色、第３色、第４色のデータとの書き込み位置を変更する。ＤＭＡＣは、パターンフラグ書き込みのためのメモリ先頭アドレスと、第１色データの書き込みのためのメモリ先頭アドレスと、第２〜４色データの書き込みのためのメモリ先頭アドレスとの、３つのアドレスを指定する。即ち、各ブロックのパターンフラグは、メモリ上のパターンフラグ格納部（パターンフラグを格納するためのメモリ領域）に纏めて格納される。また、各ブロックの第１色のデータは、メモリ上の第１色格納部（第１色データを格納するためのメモリ領域）に纏めて格納される。更に、各ブロックの第２〜４色目のデータは、メモリ上の第２〜４色格納部に纏めて格納される。
【００４７】
図７は、ＤＭＡＣによる画像データのメモリ空間への書き込みの一例を示す図である。なお、サイズがＫ×Ｌ画素のＲＧＢ各色８ビットの画像を圧縮部に２×２画素の１ブロックごとに入力する場合、パターンフラグのデータが格納されるパターンフラグ格納部のデータサイズは、「（Ｋ×Ｌ÷２÷２×４÷８）バイト」となる。また、第１色のデータが格納される第１色格納部のデータサイズは、「（Ｋ×Ｌ÷２÷２×２４÷８）バイト」となる。また、第２色、第３色、第４色のデータが格納される第２〜４色格納部のデータサイズは、処理対象となるラスタ画像に応じて異なる。これは、第２、３、４色が存在するブロックの数が画像によって異なるためである。
【００４８】
第１色格納部、第２〜４色格納部には、各画素値（色データ）がＪＰＥＧ等の符号化により圧縮処理されずに、そのままのビット数（上述した例では２４ビット）で格納されている。従って、例えばＬＵＴを用いた色変換やガンマ補正処理、行列演算を用いた色空間変換処理等の１画素入力と１画素出力で完結する色処理を行う場合、圧縮データをデコード（復号化）して元のラスタ画像に戻さなくても、圧縮データ中の該当する色データを処理することが可能である。つまり、図７のようにメモリの第１色格納部と第２〜４色格納部に格納されているデータに対して、該当する画素値（色データ）の部分を直接処理することが可能である。図２の色処理部２１２で画素単位の画像処理を行う場合は、メモリ１０６上の第１色書き込み先頭アドレス以降の色データをＤＭＡＣ２１１を介して読み込み、画素単位での処理を実行後、メモリ１０６上へ再度書き込む。その際、その画像処理によって画素のビット数が変わらない場合には、メモリ１０６上の同じ場所へ再度書き込むことで、メモリ１０６を不要に多く用いずにすむ。このように、メモリに格納されたデータを直接用いることで、メモリバス上の転送効率が向上し、入力されたラスタ画像データ（画像データ１２０１）の画素数よりも少ない数の色データに対して処理することになり、その結果、処理が高速化される。本実施例においては、図７に示すように、画像データをパターンフラグと第１色とその他の第２〜４色とに分け、離散的にメモリ上へ格納している。従って、第１色格納部には、ラスタ画像データを２×２画素のブロックごとに分割して、ブロック間において共通の位置、例えば、各ブロックの左上画素の画素値（色データ）がメモリ上に連続して存在する。
【００４９】
ＭＦＰにおいては、蓄積したＰＤＬ画像データやスキャン画像データのプレビュー表示、ネットワーク送信などの機能を有している。例えば、プリント解像度が６００ｄｐｉであったとしても、プレビューや送信時にそこまでの解像度は通常必要とされず、３００ｄｐｉやそれ以下で十分な場合が多い。このように、縮小データを得る必要がある場合に、第１色格納部に格納されている第１色の色データのみをまとめて抽出することで、簡単に半分のサイズのラスタ画像データを取得することができる。
【００５０】
例えば、６００ｄｐｉのラスタ画像データが上述した圧縮処理が行われて図７に示すように格納されていた場合に、上述の縮小送信を行なう場合を例として説明する。送信する画像の解像度として３００ｄｐｉが指定された場合は、第１色格納部に格納されているデータをそのまま抽出して送信すればよい。また、解像度として４００ｄｐｉなど、第１色格納部にサンプリングされている３００ｄｐｉより大きい解像度が指定されている場合には、次のように処理する。パターンフラグ格納部と第１色格納部と第２〜４色格納部とに格納されているデータに基づき、格納されているデータを一度展開し、公知の変倍処理を用いて変倍して、その変倍された画像を送信する。また、３００ｄｐｉより小さい解像度が指定されている場合には、第１色格納部のデータのみを用いて、指定の解像度へ変倍処理を行う。このように、必要な画像サイズに応じて切り替えながらデータの読み込みを行うことで任意の解像度に応じて処理することができる。
【００５１】
所定サイズの入力画像データを圧縮部２０２、２５２によって圧縮処理して出力されるデータサイズは、第２〜４色格納部に格納されるデータ量に依存する。システムによっては、１ページの画像格納に使用できるメモリサイズが制限され、そのメモリサイズに格納できるように圧縮されたデータを得るために、圧縮率の目標値が設定されている場合がある。そのため、減色処理部１００１の閾値設定部１１０８による閾値の調整によって、第２〜４色格納部に格納されるデータ量を制御する必要がある。以下、初回の圧縮処理によって得られた減色数カウント部１１０７のカウンタ値に基づいて、再圧縮処理を行うことにより目標圧縮率を達成するための閾値調整方法について説明する。
【００５２】
図１４は、閾値調整処理の手順を示すフローチャートである。まず、データ圧縮開始前に、閾値設定部１１０８に減色処理部１００１における減色判定のための閾値を設定する（Ｓ１４０２）。ここでは、初回の圧縮処理時には、閾値「０」を設定し、入力画像に対して画質劣化が全くない圧縮結果を出力する。しかしながら、初回から０以外の閾値（例えば１０）を設定するようにしても良い。その場合に、入力画像に対して所定の画質劣化が発生したとしても、初回の圧縮によって目標の圧縮率を達成でき、圧縮処理時間が短縮できる可能性を高めることができる。
【００５３】
次に、入力画像データを圧縮部２０２、２５２に転送して、初回の圧縮処理を行なう（Ｓ１４０３）。その際、減色数カウント部１１０７のカウンタに、図１３において説明したような情報が格納される。初回の圧縮完了後、圧縮データのデータ量と入力画像データのデータ量との比率に基づき圧縮率を算出して、システムにおいて決められている目標圧縮率と比較する（Ｓ１４０４）。ここで、初回圧縮時の圧縮率が目標圧縮率以下であると判定された場合、再圧縮を行う必要は無いと判断して本処理を終了する（Ｓ１４０５）。一方、初回圧縮時の圧縮率が目標圧縮率よりも高いと判定された場合に、減色数カウント部１１０７に格納されたカウント情報から、目標圧縮率を達成できる最適閾値を決定する（Ｓ１４０７）。このとき、閾値を大きくすればするほど、圧縮率は良くなるが減色されて画質は劣化するので、目標圧縮率を達成できる閾値の中で、できるだけ小さい閾値を最適閾値として決定すればよい。
【００５４】
Ｓ１４０７における最適閾値の決定方法を、３２×３２個のブロック（６４×６４画素サイズの画像）のＲＧＢ８ビットデータを入力して、図１３のカウンタ１３０３の値が取得された場合を例に説明する。３２×３２個のブロックのＲＧＢ各色８ビットデータ（２４ビットカラー）の入力画像データのサイズは、３２×３２×４×２４÷８＝１２２８８バイトである。この入力画像データに対して閾値「０」を設定して圧縮した場合、カウンタ１３０３に示すように、画像全体の減色数は７７７色であることが分かる。そのために、初回圧縮時にメモリに書き出された色数は、３２×３２×４−７７７＝３３１９色である。これによって、第１色格納部、第２〜４色格納部に格納されるデータサイズの合計は、３３１９×２４÷８＝９９５７バイトとなる。一方、前述したように、圧縮データにはパターンフラグの格納量も含まれる。パターンフラグのデータサイズは、３２×３２×４÷８＝５１２バイトである。これらの情報から、初回圧縮時の圧縮率を算出すると、（９９５７＋５１２）÷１２２８８×１００＝８５．２％となる。ここで、目標圧縮率が仮に４０％に設定された場合、初回圧縮時の圧縮率は目標圧縮率より大きいので、再圧縮を行なう必要がある。そこで、再圧縮時に目標圧縮率を達成するために必要な大きさの閾値を、カウンタ１３０３を使用して決定する。
【００５５】
まず、目標圧縮率を達成するために必要な削減すべきデータサイズは、小数点以下を切り上げて、１２２８８×（１−０．４）＝７３７３バイトである。ただし、圧縮後は、パターンフラグのデータ量５１２バイトが付加されるので、合計７３７３＋５１２＝７８８５バイトの色データを削減する必要がある。２×２画素の１ブロック内を１色減色すると、ＲＧＢ８ビットデータで３バイトのデータが削減できる。そこで、６４×６４画素サイズの画像全体において７８８５バイト削減するための必要な減色数は、小数点以下を切り上げて、７８８５÷３＝２６２９色となる。ここで、カウンタ１３０３の情報から、少なくとも１ページ全体で２６２９色を減色できる閾値をIndex値の小さい方から順に検索すると、閾値「７０」で１ページ合計２６３０色を減色できることが分かる。
【００５６】
このようにして求められた閾値「７０」を、最適閾値として閾値設定部１１０８に設定する（Ｓ１４０８）。そして、同じ入力画像データを用いて再圧縮処理を行なえば（Ｓ１４０９）、１回の再圧縮処理によって目標圧縮率を必ず達成することができる。それによって、再圧縮処理後の出力画像データサイズの圧縮率計算や、再々圧縮処理が不要となり、圧縮処理にかかる時間を短縮することができる。
【００５７】
次に、展開部２２２、２３２について説明する。展開部２２２、２３２では、上述したように圧縮部２０２または２５２で生成されて格納されたパターンフラグと色データとを、ラスタ画像データへ戻す処理を行う。メモリ１０６上に図７に示すように配置されている圧縮データのパターンフラグ書き込み先頭アドレス、第１色書き込み先頭アドレス、及び、第２〜４色書き込み先頭アドレスの３つのアドレスをＤＭＡＣ２２１、２３１に指定する。ＤＭＡＣ２２１、２３１は３つのアドレスからデータを読み出して、展開部２２２、２３２に転送する。
【００５８】
展開部２２２や２３２では、まず４ビットのパターンフラグを解釈し、そのブロック内の色数を取得する。第１色データに加えて、色数に応じて第２、３、４色データを読み出し、各パターンフラグに対して予め定義されている色データの配置パターン（図４に図示）に従って、第１色および第２〜４色の色データを再配置する。このようにすることで２×２画素ブロックを展開、復号することができる。
【００５９】
また、展開部２２２、２３２で画像サイズを１／２にする場合には、上述したように、パターンフラグと第２〜４色データを必要としないので、ＤＭＡＣ２２１、２３１には第１色書き込み先頭アドレスのみ指定する。これにより、メモリ１０６の第１色格納部から第１色データのみを読み込み、画像データが構成される。このように処理することで、メモリバスの帯域を節約することができる。
【００６０】
以上のように、初回圧縮時に格納される減色数カウント部１１０７のカウンタ１３０３の情報に基づいて、再圧縮時に減色処理部１００１に最適な閾値設定を行なうことで、圧縮処理にかかる時間を短縮することができる。また、圧縮率向上のための閾値設定を大きくし過ぎることによる不要な画質劣化を生じることを防ぐことができる。
【００６１】
なお、本実施例においては、色データの配置を示すパターンとパターンフラグとを図４に示すように対応付けたが、これに限るものではない。例えば、２×２画素の１ブロックの右下画素の画素値が第１色となるように、色データの配置を示すパターンとパターンフラグとを対応付けて定義しても良い。また、本実施例では、１ブロックのサイズとして２×２画素としているが、他の画素数を１ブロックのサイズとしても良い。また、圧縮の際に、入力画像データとしてＲＧＢ８ビットとしているが、異なる色空間（例えばＣＭＹＫ色空間）のデータ、グレースケールのデータ、又は８ビット以外の画素値を有するデータであっても良い。
【００６２】
また、本実施例における減色による圧縮方法は一例であり、他の公知の減色処理を用いて実施しても良い。例えば、色差を求める別の公知の手法を用いても良い。
【００６３】
また、上述した本実施例の減色数カウント部１１０７では、設定可能な閾値を示す指標である複数のIndex値（閾値インデックス）それぞれに対して、減少するデータ量を示す指標であるカウンタを設けることにより、図１３の１３０１のテーブルを生成するようにしていた。すなわち、上述した実施例では、Index値それぞれに対して減少するデータ量に着目してカウンタを増加させていったが、本発明はこれに限るものではなく、Index値それぞれに対して残存するデータ量に着目してカウンタを増加させていくようにしても構わない。ただし、この場合、ステップＳ１４０７で目標圧縮率を達成できる最適閾値を決定する際、残存すべきデータ量（色数）を基準にして計算を行うようにすることになる。例えば、図１２の画像データ１２０１のような２×２画素ブロックが入力された場合、各差分１２０８〜１２１０の「１２０」、「５０」、「１０」がカウント部１１０７に入力されるので、カウンタテーブルでは、ブロックに対する３色誤差（差分１２１０）未満のIndex値に対してはカウンタを４増加させ、３色誤差（差分１２１０）以上で且つ２色誤差（差分１２０９）未満のIndex値に対してはカウンタを３増加させ、２色誤差（差分１２０９）以上で且つ１色誤差（差分１２０８）未満のIndex値に対してはカウンタを２増加させ、１色誤差（差分１２０８）以上のIndex値に対してはカウンタを１増加させる。６４×６４画素の画像の場合のデータサイズは前述したように１２２８８バイトであるので、目標圧縮率が４０％に設定された場合、圧縮処理後の目標データサイズは１２２８８×０．４＝４９１５バイトである。また、圧縮後のパターンフラグのデータ量は５１２バイトであるので、圧縮後の色データのデータ量が４９１５−５１２＝４４０３バイト以下、すなわち、残存する色データが１４６７色分のデータ量以下となるようにすればよい。ここで、カウンタが１４６７以下となるIndex値の小さい順に検索すると、上述した実施例と同様に閾値「７０」に設定すればよいことが分かる。つまり、７０となる閾値以下の範囲が１４６７色分のデータ量以下となる。
【００６４】
［第２の実施例］
第１の実施例において説明した圧縮処理によると、圧縮処理後にメモリに格納した圧縮データサイズは、入力されたラスタ画像データのサイズに依存する。そのため、圧縮データに対して、例えば画像の一部だけ切り出して処理することができない。本実施例においては、後述するように、ラスタ画像データをタイル単位で圧縮することにより生成した圧縮データをメモリに格納する。その結果、ラスタ画像データの画像の一部をタイル単位で切り出して処理することができ、メモリに対するランダムアクセス性を高めることができる。
【００６５】
図８は、本実施例における圧縮処理の手順を示すフローチャートである。まず、ページごとに、ラスタ画像データを入力する（Ｓ８０１）。次に、入力画像データを所定の大きさのブロック単位に分割して、その１つを処理対象にする（Ｓ８０２）。本実施例では６４×６４画素を１ブロックとする。以下、第１の実施例における２×２画素の１ブロックと区別するために、６４×６４画素の１ブロックを「タイル」という。図１５に、タイルとブロックとの関係を図示する。入力されたページ画像をタイル単位に分割する（タイル分割）と、各タイルのページ内における位置はタイル座標（Ｘ，Ｙ）で表される。各タイルのサイズが６４×６４画素である場合、各タイル内には２×２画素のブロックが３２×３２個存在することになる。
【００６６】
各タイルには、所定の固定長のヘッダ情報（タイルヘッダ）が付与される（Ｓ８０３）。圧縮後のタイルに付与されているヘッダ情報を図１６に示す。付与されるヘッダには、ページＩＤ、タイル座標、色空間、画素データのビット数、タイルのデータサイズ、属性情報の有無、圧縮フラグ等が記述される。
【００６７】
ページＩＤは、ページごとの一意なＩＤ番号である。タイル座標は、そのタイルがページごとのラスタ画像データ上でどの位置にあるかを示す。例えば、Ｘ、Ｙ座標の２次元での座標であっても良い。色空間は、そのタイルがＲＧＢ画像データであるか、若しくは、ＣＭＹＫ画像データであるか、グレースケール画像データであるかの識別子として記述されている。画素データのビット数は、タイル内の１画素あたりのビット長である。データサイズは、そのタイルの第１色のデータサイズと第２〜４色のデータのデータサイズがバイト単位で記述されている。属性情報の有無は、その画像データに文字や写真といった属性情報が画素単位で付与されているか否かが記述されている。圧縮フラグは、そのタイルが圧縮されたデータを含むか、若しくは、非圧縮のデータを含むかを示している。
【００６８】
次に、このタイル単位に、第１の実施例において説明した圧縮処理を行なう（Ｓ８０４）。
そして、圧縮されたタイル画像データを１つのデータとして纏める（Ｓ８０５）。このようにして纏められたデータ構造を、図１６に示す（第２の格納の一例）。以下、図１６に示すような、ヘッダを含めたデータの単位をパケットという。タイル単位で圧縮処理が終了してデータサイズが確定した後に、第１色格納部と第２〜４色格納部の間を詰めた状態でデータを図１６に示すようなパケットに纏める。パケットは、ＤＭＡＣを介して、メモリ上に出力される（Ｓ８０６）。
【００６９】
次に、そのパケットの座標とサイズをリスト化し、パケット管理テーブルを作成する（Ｓ８０７）。なお、２つ目以降のタイルについてのパケットを作成した場合は、当該パケットの座標とサイズに基づいて、パケット管理テーブルを更新していくことになる。図１７は、パケット管理テーブルの一例を示す図である。
【００７０】
全てのタイルを処理対象として、上記処理を実行済みか判断し、以上の処理をページ単位のラスタ画像データの最後のタイルまで繰り返す（Ｓ８０８）。
【００７１】
本実施例においては、タイル単位で画像をメモリに書き出すので、図１８に示すように、パケット毎にサイズが異なり、それぞれのパケットの先頭アドレスがとびとびになってしまう。しかしながら、Ｓ８０７で生成・更新されたパケット管理テーブルを用いることで、任意の座標のパケットの先頭アドレスを検索することができる。先頭パケットの書き込みアドレスが既知であれば、パケット管理テーブルに記載されているパケットサイズをオフセットとして任意のパケットの先頭アドレスを求めることができる。例えば、図１８において、第３パケットを読み込む場合を考える。その場合、第１、第２パケットのサイズ合計を図１７に示すパケット管理テーブルより求め、先頭パケットのアドレスに対してのオフセットから第３パケットアドレスを算出して、データを読み込む。その結果、第３パケットのデータを取得することができる。以上のように、本実施例においては、タイル単位に任意の圧縮された画像データへのアクセスが可能になるので、画像の部分的な処理を容易に行なうことができる。
【００７２】
また、減色処理部１００１の内部を、図１９のように一部変更し、さらに内部にＳＲＡＭを構成するようにして、再減色処理をハードウエアで実現するようにしてより高速化を図るようにしても良い。つまり、減色数カウント部１９０１に、タイル単位で目標圧縮率を達成するために、必要な減色数を予め設定する。例えば、ＲＧＢ各色８ビットの入力画像を６４×６４画素のタイルデータ単位で圧縮処理を行なう場合に、入力画像データは、６４×６４×８×３÷８＝１２２８８バイトとなる。ここで、目標圧縮率を４０％とした場合に、第１の実施例で説明したように、減色すべき色数は、合計２６２９色であることが予め計算で求められる。従って、その値を目標減色数設定部１９０４に設定して、さらに、初期閾値「０」を閾値設定部１１０８に設定して圧縮処理を開始する。すると、最初のタイルデータが入力データ格納ＳＲＡＭ１９０２に転送され、閾値「０」での減色処理結果が出力データ格納ＳＲＡＭ１９０３に格納される。１タイル画像データが全てデータ選択出力部１１０９から出力データ格納ＳＲＡＭ１９０３に出力されると、データ選択出力部１１０９は、終了信号を減色数カウント部１９０１に通知する。減色数カウント部１９０１では、圧縮処理終了信号を受信すると、目標減色数設定部１９０４に設定された目標減色数と、内部に保持されているカウンタ１３０３の値との比較を、Index値が小さい値から順番に行なう。そして、目標減色数よりカウンタ１３０３の値の方が大きいIndex値を検索する。例えば、目標減色数設定部１９０４に「２６２９」が設定されている場合に、図１３のカウンタ１３０３と比較したとすると、Index値「７０」が検索される。
【００７３】
減色数カウント部１９０１は、その値を閾値設定部１１０８に設定する。閾値設定部１１０８は、初回に設定された閾値「０」を内部バッファに一時退避し、最適閾値として「７０」を設定し、減色処理部１００１の再処理を指示する。再処理を指示された減色処理部１００１は、入力データ格納ＳＲＡＭ１９０２から、再度同じ入力画像データを減色処理する。この際、「７０」に設定された閾値で処理される。１タイル画像データが全てデータ選択出力部１１０９から出力データ格納ＳＲＡＭ１９０３に出力されると、出力データ格納ＳＲＡＭ１９０３から後段に、出力データを出力する。また、データ選択出力部１１０９は、終了信号を改めて減色数カウント部１９０１に通知する。減色数カウント部１９０１では、圧縮処理終了信号を受信すると、閾値設定を内部バッファに一時退避した初回に設定された閾値「０」に戻し、次のタイル画像データの処理を行なう。
【００７４】
以上のような処理を１ページ分全てのタイル画像データに対して行なうことで、全て目標圧縮率以下のデータ量となるパケットデータを取得することができる。
【００７５】
展開処理をする場合は、パケット単位にヘッダが付与されているので、そのヘッダに記載されている情報を用いて展開処理を行う。まず、ヘッダ内の圧縮フラグが非圧縮を示している場合には、ヘッダを取り除いたデータを出力する。一方、圧縮を示している場合には、展開処理を行う。展開処理は、ヘッダに記載されている情報から、パターンフラグ格納位置、第１色データ格納位置、及び、第２〜４色格納位置を求め、順次、タイル画像データに展開する。例えば、パターンフラグの位置は、固定長のヘッダなのでオフセット分から求められる。第１色データは、タイル画像データのサイズが６４×６４画素であればパターンフラグのサイズが３２×３２×４ビットで固定になるので、パターンフラグ位置からのオフセットにより求められる。第２、３、４色のデータは第１色のデータが不定長なので、ヘッダ内の第１色サイズを参照して、第１色のデータ位置からのオフセットにより求められる。
【００７６】
以上のように、タイル単位で画像データの一部だけ切り出して処理することができるので、圧縮データに対するランダムアクセス性を高めることができる。
【００７７】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
0005595151.tif 000002
【図２】
0005595151.tif 000003
【図３】
0005595151.tif 000004
【図４】
0005595151.tif 000005
【図５】
0005595151.tif 000006
【図６】
0005595151.tif 000007
【図７】
0005595151.tif 000008
【図８】
0005595151.tif 000009
【図９】
0005595151.tif 000010
【図１０】
0005595151.tif 000011
【図１１】
0005595151.tif 000012
【図１２】
0005595151.tif 000013
【図１３】
0005595151.tif 000014
【図１４】
0005595151.tif 000015
【図１５】
0005595151.tif 000016
【図１６】
0005595151.tif 000017
【図１７】
0005595151.tif 000018
【図１８】
0005595151.tif 000019
【図１９】
0005595151.tif 000020