説明

画像処理装置、画像処理装置における圧縮方法、および、プログラム

【課題】本発明は、画像データの圧縮処理を高速に行なう画像処理装置を提供する。
【解決手段】入力された前記画像データを、M×N画素のブロック単位に分割し、当該分割された各ブロックを構成する色数をM×N色から、1色ないし(M×N−1)色のそれぞれに減色する。そして、1色ないし(M×N−1)色のそれぞれに減色した後の各ブロックの画像データと当該減色する前の各ブロックの画像データとの差分を、前記分割されたブロックのそれぞれに対して取得する。当該取得した差分に基づいて、閾値の指標である複数の閾値インデックスと、減少するデータ量の指標あるいは残存するデータ量の指標のいずれかであるカウンタとの関係を示す第1のテーブルを生成する。当該生成した第1のテーブルに基づいて、圧縮後のデータ量が目標のデータ量以下となる閾値を決定し、当該決定された閾値を用いて減色した後の画像データに基づいて圧縮データを生成する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、画像データを圧縮する画像処理装置、画像処理装置における圧縮方法、および、プログラムに関する。
【背景技術】
【0002】
従来、高解像度のカラー画像への需要が高まっており、デジタル複合機では1200dpiやそれを超える解像度の画像を扱うことが多い。画像の高解像度化が進むにつれて、画像処理を必要とする画素数が飛躍的に増え、その処理負荷がますます増大している。例えば、600dpiから1200dpiに解像度が倍になることで処理すべき画素数は4倍となる。デジタル複合機に限らず、デジタルカメラやファクシミリ装置などの画像処理装置では、メモリ/ハードディスク量の節約やそれらへの書き込み時間の短縮により処理時間を短縮するために、カラー画像データの圧縮を行っている。
【0003】
カラー静止画像の圧縮方式には、離散コサイン変換を利用したJPEG方式やWavelet変換を利用した方式が多く用いられている。そのような符号化方式は、一般的に画像データを所定のブロック(例えば8×8画素や16×16画素単位)に符号化し、離散コサイン変換、量子化、エントロピー符号化を行うことで高い圧縮効率を達成するものである。そのような符号化方式は、可変長符号化方式であるので、符号化対象の画像データ毎に符号量が変化する。
【0004】
上述の方式で画像データを圧縮処理した後、画素データを参照してその画素データを画像処理するためには、圧縮された画像データのままで画像処理を行うことはできないので、圧縮された画像データの復号化処理が必要である。従って、高解像度データ全ての画素に対して画素単位に復号化処理を行なわなくてはならず、処理時間の増大の一因となってしまう。
【0005】
また、圧縮処理を行う方法としては、画素データとその連続数を記憶する公知のランレングス圧縮方式や、特許文献1のように、ブロック毎に2色以下に減色して2色分の色データとその2色の配置形状を出力することでデータ量を圧縮する方法が記載されている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2008−271046号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
特許文献1の方法では、ブロック内を常に2色以下にしていたが、更なる高画質化を行うために、本出願人は、2×2ブロックの場合、各ブロックの色数を最大4色まで許容して圧縮する技術も考えている。特願2009−221444号の提案では、まず、画像データをブロック(例えば2×2画素サイズのブロック)毎に分割し、ブロック内の各画素の色データを比較することにより、注目ブロックに含まれる色データの配置パターン情報と、着目ブロックに含まれる色数分の色データ情報とを出力する。そして、出力された色データ情報のうち、ブロックにおける予め決められた位置の画素に対応する第1の色データ情報(2×2画素サイズのブロックにおける左上の画素の色データ情報)と、それ以外の色データ情報(第2〜4の色データ情報)とに分けてメモリ領域に格納する。すなわち、各ブロックから得られる配置パターン情報と第1の色データ情報とそれ以外の色データ情報とを、それぞれ異なるメモリ領域にまとめて格納する技術を提案している。また、特願2009−221444号の提案では、各ブロックの色データを比較する際に、ブロック内の画素間の色(画素値)の差分を閾値と比較し、差分が該閾値より小さい場合に減色処理を行って、圧縮率を向上することも考えている。
【0008】
一方、減色処理をできるだけ行わない方が元の画像に忠実に再現することが可能となるので、減色処理の閾値を小さくした方が高画質になるが圧縮率は低下してしまう。また、システムによっては、例えば、1ページ分の画像データの格納に使用できるメモリサイズが制限されている場合がある。特願2009−221444号の提案で減色処理を行う場合、減色の閾値に応じてデータ量がどれほど削減されるかということは、処理対象の画像に応じて異なるので、減色処理を行う前に予め知ることができない。従って、ある入力画像データに対して、できるだけ高画質を保ちつつ、データ量を目標圧縮率以下にするためには、その圧縮率を達成するまで、閾値の設定を変更しながら再圧縮を繰り返す必要があり、その結果、目標値までの圧縮処理に時間がかかってしまう。
【0009】
本発明の目的は、このような問題点を解決することにある。上記の点に鑑み、本発明は、画像データの圧縮処理を高速に行なう画像処理装置、画像処理装置における圧縮方法、および、プログラムを提供することを目的とする。
【課題を解決するための手段】
【0010】
上記課題を解決するため、本発明に係る画像処理装置は、画像データを入力する入力手段と、前記入力手段により入力された前記画像データを、M×N画素(ここで、M及びNは2以上の整数)のブロック単位に分割する分割手段と、前記分割手段により分割された前記各ブロックを構成する色数をM×N色から、1色ないし(M×N−1)色のそれぞれに減色する減色手段と、前記減色手段で前記1色ないし(M×N−1)色のそれぞれに減色した後の各ブロックの画像データと当該減色する前の各ブロックの画像データとの差分を、前記分割手段で分割されたブロックのそれぞれに対して取得する取得手段と、前記取得手段により取得された、各ブロックの前記1色ないし(M×N−1)色のそれぞれに減色したときの差分に基づいて、閾値の指標である複数の閾値インデックスと、減少するデータ量の指標あるいは残存するデータ量の指標のいずれかであるカウンタとの関係を示す第1のテーブルを生成する生成手段と、前記生成した第1のテーブルに基づいて、圧縮後のデータ量が目標のデータ量以下となる閾値を決定する決定手段と、前記分割手段で分割された各ブロックを前記減色手段で減色したときの差分が前記決定手段により決定された前記閾値以下となるように減色し、当該減色後の画像データに基づいて圧縮データを生成する圧縮手段とを備えることを特徴とする。
【発明の効果】
【0011】
本発明によると、画像データを目標のデータ量以下に圧縮する場合の圧縮処理を高速に行なうことができる。
【図面の簡単な説明】
【0012】
【図1】画像処理装置の主要な構成を示す図である。
【図2】コントローラの内部の構成を示す図である。
【図3】ブロック内を構成する色の配置パターンを示す図である。
【図4】各配置パターンとパターンフラグとの対応を示す図である。
【図5】第1の実施例における圧縮処理の手順を示すフローチャートである。
【図6】データ出力部が出力するデータの一例を示す図である。
【図7】画像データのメモリ空間への書き込みの一例を示す図である。
【図8】第2の実施例における圧縮処理の手順を示すフローチャートである。
【図9】減色処理の手順を示すフローチャートである。
【図10】圧縮部の内部の構成を示すブロック図である。
【図11】減色処理をハードウエアで実行する場合の構成を示す図である。
【図12】減色処理の具体例を説明するための図である。
【図13】カウンタの動作を説明するための図である。
【図14】閾値調整処理の手順を示すフローチャートである。
【図15】第2の実施例におけるタイルとブロックとの関係を示す図である。
【図16】第2の実施例におけるパケットの構造の一例を示す図である。
【図17】第2の実施例におけるパケット管理テーブルの一例を示す図である。
【図18】第2の実施例におけるパケットがメモリに格納された様子を示す図である。
【図19】減色処理をハードウエアで実行する場合の他の構成を示す図である。
【発明を実施するための形態】
【0013】
以下、添付図面を参照して本発明の好適な実施例を詳しく説明する。尚、以下の実施例は特許請求の範囲に係る本発明を限定するものでなく、また本実施例で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。なお、同一の構成要素には同一の参照番号を付して、説明を省略する。
【0014】
[第1の実施形態]
図1は、本発明に係る実施例において用いられる画像処理装置の主要な構成を示す図である。本実施例においては、画像処理装置の一例として、スキャン機能、プリント機能、コピー機能等の複数の機能を有する多機能周辺装置(MFP:Multifunction Peripheral)を用いる。図1に示すように、コントローラ101は、画像入力部であるスキャナ102や画像出力部であるプリンタ103と接続されている。また、コントローラ101は、LANや公衆回線(WAN)などのネットワーク104と接続することで、画像情報やデバイス情報の入出力を行なう。また、コントローラ101は、PDLデータのイメージ展開を行う。CPU105は、記憶部107に格納されたプログラムに従って、画像処理装置全体を制御する。メモリ106は、CPU105が動作するためのシステムワークメモリや、画像データを一時記憶するための画像メモリとして機能する。記憶部107は、ハードディスクドライブであり、システムソフトウエア、プログラム、画像データなどを格納する。
【0015】
図2は、コントローラ101の内部の構成を示す図である。
【0016】
スキャナ102により読み取られた画像データを読み込む場合を説明する。スキャナ用画像処理部201は、スキャナ102で読み取られたRGB(レッド、グリーン、ブルー)3色の画像データを入力し、入力された画像データに対してシェーディング処理やフィルタ処理等の画像処理を行い、圧縮部202に出力する。圧縮部202は、スキャナ用画像処理部201から入力された画像データに対して圧縮処理を行う。DMAC(ダイレクト・メモリアクセス・コントローラ)203は、その圧縮された画像データ(圧縮データ)を画像メモリバスを介してメモリ106に格納する。
【0017】
次に、スキャナ102により読み取られた画像データをプリントする場合を説明する。DMAC221は、メモリ106に格納された圧縮データを画像メモリバスを介して色処理部212に出力する。色処理部212は、その圧縮データをCMYK(シアン、マゼンタ、イエロー、ブラック)色空間のデータに変換する。その後、色処理部212は、CMYKの各データに対して濃度調整、プリンタガンマ補正等の色処理を行なう。DMAC211は、色処理後のデータを画像メモリバスを介して再度、メモリ106に格納する。DMAC221は、プリント用の画像処理を行うために、画像メモリバスを介してメモリ106に格納されている圧縮データを読み込む。展開部222は、読み込んだ圧縮データをラスタ画像データに展開する。プリント用画像処理部223は、ラスタ画像データ(CMYK画像データ)を入力して、ディザ法や誤差拡散法によって面積階調処理を行い、プリンタ103に出力する。
【0018】
次に、スキャナ102により読み取られた画像データをネットワークに送信する場合を説明する。DMAC211は、メモリ106に格納されている圧縮データを画像メモリバスを介して色処理部212に出力する。色処理部212は、その圧縮データに対して、ディスプレイ・ガンマ調整や用紙地色調整等を行い、YCbCr(輝度、BLUE色差、RED色差)色空間のデータに変換する。DMAC211は、色処理部212で処理されたデータを画像メモリバスを介して再度、メモリ106に格納する。DMAC231は、ネットワーク送信用の画像処理を行うために、画像メモリバスを介してメモリ106に格納されている圧縮データを展開部232に出力する。展開部232は、その圧縮データをラスタ画像データに展開する。送信処理部233は、ラスタ画像データ(YCbCr画像データ)に対して、カラー画像送信であればJPEG圧縮処理を行い、モノクロ2値画像送信であればYデータに対して2値化を行ってJBIG圧縮等を行い、ネットワーク104に送信する。
【0019】
次に、スキャナ102により読み取られた画像データを保存する場合を説明する。DMAC241は、メモリ106に格納されている圧縮データを画像メモリバスを介してディスク・スプール高圧縮/展開部242に出力する。ディスク・スプール高圧縮/展開部242は、HDDの書き込みスピードがメモリに対して遅いという理由で、圧縮データに対してさらに高圧縮のJPEG圧縮を行なう。ディスク・アクセス・コントローラ243は、記憶部107に圧縮データを格納する。また、記憶部107に保存されている圧縮データを再度メモリ106に出力する場合には、上述の処理を逆に行なう。
【0020】
次に、ネットワーク104を介して接続された他の装置から受信したPDLデータをメモリ106に書き込む場合を説明する。図2に不図示のPDL解釈部として機能するCPU105が、PDLデータを解釈し、その結果であるディスプレイ・リストをメモリ106に格納する。レンダリング部251は、メモリ106に格納されているディスプレイ・リストをラスタ画像データであるRGB画像データにレンダリングする。圧縮部252は、レンダリングされたRGB画像データに対して画像圧縮処理を行う。DMAC253は、画像圧縮処理されたデータを画像メモリバスを介してメモリ106に格納する。なお、他の装置から受信したPDLデータをプリントしたり、ネットワークに送信したり、保存したりする場合は、上述したような画像データの場合と同様の処理を行う。
【0021】
次に、本実施例におけるラスタ画像データの圧縮処理を説明する。本実施例において、圧縮部252は、PDLデータから生成されたラスタ画像を圧縮し、圧縮部202は、スキャナ102により読み取られたラスタ画像を圧縮する。しかしながら、ラスタ画像データの圧縮処理は、このような2つの圧縮部からなる構成に限るものではない。例えば、図2のように圧縮部202と圧縮部252とを個別に設けるのではなく、共通の圧縮部として構成しても良い。本実施例においては、まず、ページ単位のラスタ画像データを、2×2画素単位(M×N画素(M及びNは2以上の整数)の一例)のブロック毎に分割し、その分割されたブロック単位に圧縮処理を行う。ここで、本発明の圧縮処理を説明する前に、2×2画素(1ブロック)の4画素の色数の組み合わせを考える。4画素それぞれが異なる色を表す場合に、ブロック内で最大4色が存在する。従って、ブロック内で存在する色数は、1色〜4色となる。
【0022】
図3は、色数が1色〜4色のそれぞれの場合において、考えられるブロック内の色の配置パターンを示す図である。まず、ブロック内を構成する色数が1色である場合に、4画素が同色で構成されていることになる。従って、その配置パターンは1通りである。次に、2色以上の場合を考える。ブロック内を構成する色数が2色の場合(各色を第1色と第2色と呼ぶこととする)は、図3に示すように、2色が4画素内に配置される場合の数は、所定位置の画素(本実施例では左上の画素とする)の色を第1色として考えると、左上画素以外の残りの3画素へ第1色もしくは第2色が入るので、4画素同色の場合を除くと、7通りである。次に、ブロック内を構成する色数が3色(第1色〜第3色)で構成される場合を考える。3色が4画素内に配置される場合の数は、3色のうち1色だけ2度使われる場合の数と言い換えることができる。従って、4画素のうち2画素が同じ色になる場合の数を求めれば良い。つまり、3色の場合の数は、4つの画素から2つの画素を取る組み合わせとなり、6通りとなる。また、ブロック内を構成する色数が4色(第1色〜第4色)で構成される場合は、1通りである。したがって、ブロック内の色数が1色〜4色の全ての場合の数を合計すると、15通りのパターンが考えられる。また、これら全てのパターンを識別するためのフラグ(識別子)を付与する場合には、そのフラグのデータ量は4ビット必要である。この15通りのパターンとフラグとの対応を図4に示すように定義する。以下、このフラグを「パターンフラグ」ともいう。
【0023】
次に、圧縮部202及び252で行われる圧縮処理を、図5及び図10を参照しながら説明する。図5は、圧縮処理の手順を示すフローチャートであり、図10は、圧縮部202及び252の内部の構成を示すブロック図である。ここで、1画素あたりのデータは、RGBそれぞれ8ビット(即ち、256階調)である、24ビットの画像データとする。
【0024】
まず、2×2画素の1ブロックに対応する画像データが、スキャナ用画像処理部201又はレンダリング部251から入力される(S501)。入力された画像データは、減色処理部1001に転送され、そのブロック内の減色処理が行われる(S502)。減色処理部1001における減色処理の詳細は後述する。減色処理部1001は、入力された画像データを減色処理した後、減色後の色数と色の配置パターンを示すパターンフラグを作成して、それに対応する減色処理された2×2画素の画像データとをデータ出力部1002に転送する。データ出力部1002は、減色処理部1001から転送されたパターンフラグからブロック内を構成する色数と配置パターンを判断して、各色の色データを取得する(S503)。図4(第2のテーブルの一例)に示すように、4ビットのパターンフラグに対応して、ブロック内を構成する色数と各色の配置パターンが対応付けられているので、パターンフラグからブロック内を構成する各色の色データを取得することができる。
【0025】
ここで、図4では、全てのパターンにおいて、所定位置(本実施形態では左上)の画素値(即ち、画素が表す色)が第1色値(1番目の色データ)となるように定義している。パターンフラグが0の場合は、色数が1であるので、左上の画素値を第1色値として取得する。また、パターンフラグが1〜7の場合は、色数が2であるので、左上の画素値を第1色値として取得し、更に、各パターンフラグに応じて定義されている第2色値(2番目の色データ)が存在する位置の画素値を取得する。例えば、パターンフラグが1の場合は、右上の画素値を第2色値として取得する。また、パターンフラグが8〜Dの場合は、色数が3であるので、左上の画素値を第1色値として取得し、更に各パターンフラグに応じて定義されている第2色(2番目の色データ)及び第3色(3番目の色データ)が存在する位置の画素値を、第2色値及び第3色値として取得する。例えば、パターンフラグが8の場合は、左上の画素値を第1色値、右上の画素値を第2色値として取得し、右下の画素値を第3色値として取得する。また、パターンフラグがEの場合は、左上の画素値を第1色値、右上の画素値を第2色値、左下の画素値を第3色値、右下の画素値を第4色値(4番目の色データ)として取得する。
【0026】
データ出力部1002は、転送されたパターンフラグに基づき、ブロック内を構成する色数を特定し(S504、S506、S508)、特定された色数それぞれに応じて、パターンフラグと色データとを出力する(S505、S507、S509、S510)。データ出力部1002が出力するデータを、図6を用いて説明する。
【0027】
パターンフラグが0の場合(S504でYES)を説明する。パターンフラグが0であるとは、即ち、4画素のブロック内を構成する色が1色であることを示す。その場合に、第2色以降の色データは存在しないので、パターンフラグの4ビットと、1色目の画素値(24ビット分の色データ)とを出力する(S505)。また、パターンフラグが1〜7の場合(S506でYES)を説明する。パターンフラグが1〜7であるとは、即ち、4画素のブロック内を構成する色が2色であることを示す。その場合に、2色目が存在する画素の位置をパターンフラグから求め、パターンフラグの4ビットと、2色分の画素値(2画素×24ビット(すなわち48ビット)分の色データ)とを出力する(S507)。また、パターンフラグが8〜Dの場合(S508でYES)を説明する。パターンフラグが8〜Dであるとは、即ち、4画素のブロック内を構成する色が3色であることを示す。その場合に、2色目と3色目が存在する画素の位置をパターンフラグから求め、パターンフラグの4ビットと、3色分の画素値(3画素×24ビット(すなわち72ビット)分の色データ)とを出力する(S509)。また、パターンフラグがEの場合(S508でNO)の場合を説明する。パターンフラグがEであるとは、即ち、4画素のブロック内を構成する色が4色であることを示す。その場合に、パターンフラグの4ビットと、4色分の画素値(4画素×4ビット(すなわち96ビット)分の色データ)とを出力する(S510)。言い換えると、各ブロックから出力される色データは、ブロック内の位置順(左上から右上、左下、右下の順に1、2、3、4とする)に走査した場合に、それまでに出現していなかった色データが現れるたびに順に出力していくことに相当する。
【0028】
このように、データ出力部1002は、2×2画素の1ブロック内の4色分の色データ(96ビット)を、4ビットのパターンフラグと、1ブロック内に存在する色数分の画素値のデータとを出力してメモリに格納する(第1の格納の一例)。その結果、入力された画像データから、容易に画像データ量を削減することができる。特に、2×2画素の1ブロック内で同色の画素が存在するブロック(即ち、各ブロック内を構成する色数が少ないブロック)が多いラスタ画像ほど、その出力される画像データ量の圧縮率も大きくなる。このような処理を、ラスタ画像データに含まれるブロック全てに対して行うことで、ラスタ画像データ全体を圧縮することができる。
【0029】
続いて、減色処理部1001の処理について説明する。図9は、減色処理部1001における減色処理の手順を示すフローチャートである。まず、処理対象となる2×2画素の1ブロック分の画像データを入力する(S901)。次に、1色減色部1101において、4画素の画素値から、1色への減色処理を行う(S902)。以下、画素値は例えばRGB値で表されるものとする。本実施例においては、4画素の平均画素値を算出することで1色への減色を行う。そして、その減色した画素値と入力された4画素それぞれの画素値との差分を算出し(S903)、予め設定されている閾値と比較する(S904)。例えば、入力された各画素の画素値と減色後の各画素値との差の絶対値を、4画素分について和を取り、その値を閾値と比較する。(なお、本実施例のS903,S908,S913における入力された4画素それぞれの画素値と減色処理後の4画素それぞれの画素値との差分の算出には、入力された各画素の画素値と減色後の各画素値との差分の絶対値の和を用いる。)この差分が閾値と比較して小さいと判定された場合には、1色に減色すると判定し、パターンフラグを0に決定し(S905)、その1色に減色した画像データとパターンフラグとをデータ出力部1002に出力する(S906)。一方、差分が閾値と比較して大きいと判定された場合には、2色への減色処理を行う(S907)。本実施例においては、4画素のうち差分が最も大きい2画素(画素A、Bとする)を抽出し、残りの2画素が画素A、Bどちらに近いかでクラスタリングし、その各クラスタにおいて平均値を求めることで2色化する。そして、その2色化した4画素それぞれの画素値と入力された4画素それぞれの画素値との差分を算出し(S908)、予め設定されている閾値と比較する(S909)。
【0030】
ここで、差分が閾値と比較して小さいと判定された場合には、図4のような対応関係に基づき、2色に減色した画素値の位置に応じてパターンフラグを決定する(S910)。そして、その2色に減色した画像データとパターンフラグとをデータ出力部1002に出力する(S911)。一方、差分が閾値と比較して大きいと判定された場合には、3色への減色処理を行う(S912)。本実施例においては、4画素のうち最も画素値の差分の小さい2画素を抽出し、その2画素の値の平均値を求め、それ以外の2画素の画素値と合わせて3色に減色する。そして、その3色化した4画素それぞれの画素値と入力された4画素それぞれの画素値との差分を算出し(S913)、予め設定されている閾値と比較する(S914)。
【0031】
ここで、差分が閾値と比較して小さいと判定された場合には、図4のような対応関係に基づき、3色に減色した画素値の位置に応じてパターンフラグを決定する(S915)。そして、その3色に減色した画像データとパターンフラグとをデータ出力部1002に出力する(S916)。一方、差分が閾値と比較して大きいと判定された場合には、減色すると視覚的に問題が生じるブロックであると判定し、パターンフラグをEに決定し(S917)、4色のままの画像データとパターンフラグとをデータ出力部1002に出力する(S918)。
【0032】
以上の減色処理は、図9に示すような順次処理ではなく、図11に示すようなハードウエアを構成することにより、同時に並列処理しても良い。即ち、1色減色部1101、2色減色部1102、3色減色部1103によって、入力された2×2画素の1ブロック分の画像データに対する、1色への減色処理(S902)、2色への減色処理(S907)、3色への減色処理(S912)を並列に実行する。各減色部で減色された4画素分の画像データと、入力された4画素分の画像データとは、それぞれ1色減色誤差算出部1104、2色減色誤差算出部1105、3色減色誤差算出部1106に転送される。各減色誤差算出部において、入力された4画素分の画像データの各画素値と、減色後の4画素分の各画素値との差分算出が並列に実行される(S903、S908、S913)。各減色誤差算出部で算出された差分は、減色処理後の4画素分の画像データとともに、データ選択出力部1109に転送される。データ選択出力部1109は、閾値設定部1108に設定された閾値と、各減色誤差算出部で算出された差分(1色減色誤差、2色減色誤差、3色減色誤差)との比較を並列に行う(S904、S909、S914)。そして、閾値よりも小さいと判定された差分に対応する減色した画素値とパターンフラグとを出力する。
【0033】
ここで、複数の差分(1色減色誤差、2色減色誤差、3色減色誤差)が閾値よりも小さい場合には、1色減色誤差、2色減色誤差、3色減色誤差の優先順で、いずれの画像データとパターンフラグとを出力するかを選択する。また、全ての差分が閾値よりも大きい場合には、入力された画像データと4色を示すパターンフラグEとが出力される。
【0034】
以上の減色処理を、図12を参照して具体的に説明する。図12における説明に限り、より説明を簡略化するために、入力する画像データの各画素値として8ビットデータ(0〜255)を用いる。なお、RGB8ビットの24ビットデータに対して処理を行う場合、後述する8ビットデータに対する処理を拡張して適用すればよい。
【0035】
まず、2×2画素の画像データ1201が入力されると、それぞれの1色減色部1101、2色減色部1102、3色減色部1103でそれぞれの色数へ減色される。例えば、1色減色部1101では、画像データ1201の4画素の平均値を取り、画像データ1202のような減色結果が得られる。また、2色減色部1102、3色減色部1103についても同様に、近い色を平均化することで、画像データ1203、1204のような減色結果が得られる。
【0036】
次に、それぞれの減色誤差算出部に、画像データ1201と、各画像データ1202〜1204が入力され、画素ごとの差分データ1205〜1207を算出する。さらに、それらの各合計値を、1色に減色、2色に減色、3色に減色した場合における各ブロックの差分1208〜1210とする。そして、画像データ1201、1202〜1204、差分1208〜1210は、データ選択出力部1109に転送される。この差分1208〜1210は、1色〜3色に減色したときの各ブロック単位での誤差を表していることになる(本実施例ではそれぞれ、1色減色誤差、2色減色誤差、3色減色誤差とも呼ぶ)。
【0037】
閾値設定部1108に閾値20が設定されていた場合には、これがデータ選択出力部1109で、それぞれの差分1208〜1210と比較され、閾値20よりも小さい差分1210を特定し、当該差分1210に対応する3色に減色された画像データ1204が選択出力される。従って、前述したように、閾値20の場合は、画像データ1204の各画素データ「5」、「85」、「45」、「5」と、画像データ1204の配置パターンに対応するパターンフラグ「9」とが出力される。
【0038】
また、閾値設定部1108に閾値60が設定されていた場合には、データ選択出力部1109は、閾値60よりも小さい差分1209又は1210に対応する、画像データ1203又は1204が出力対象となる。ここで、前述した優先順によって、出力データ量がより削減できる2色に減色された画像データ1203が、出力対象として選択される。従って、閾値60の場合は、画像データ1203の各画素データ「5」、「65」、「65」、「5」と、画像データ1203の配置パターンに対応するパターンフラグ「2」とが出力される。
【0039】
次に、本実施例における減色数カウント部1107について説明する。減色数カウント部1107は、前述した各減色誤差算出部1104〜1106から出力された各ブロックの差分(減色誤差)に基づいて、閾値設定部1108で閾値を設定した場合に、ページ全体でどれほどの色数が減色されるかを示す統計を取る。減色数カウント部1107は、2×2画素の1ブロック処理ごとに、減色誤差算出部1104〜1106で算出された1色減色誤差、2色減色誤差、3色減色誤差という3つの差分を入力する。内部には、図13に示すようなIndex値に対するカウンタ1301が設けられており、入力された3つの差分に基づいて、カウントアップしていく。ここで、Index値とは、閾値設定部1108で設定可能な閾値を示す指標である。なお、本実施例では、10刻みで閾値の指標を取っているがこれに限るものではなく、更に細かくしても構わない(例えば、5刻み)。図12の画像データ1201のような2×2画素ブロックが入力された場合、各差分1208〜1210の「120」、「50」、「10」が減色数カウント部1107に入力される。減色数カウント部1107は、それぞれの減色誤差以上のIndex値のカウンタをインクメントしていく。即ち、まず、差分1210の「10」に対して、Index値が10以上のカウンタを1ずつインクリメントする。そして、差分1209の「50」、差分1208の「120」に対しても、Index値がそれぞれ50、120以上のカウンタを1ずつインクリメントする。この処理は、ブロックを1つ処理するときに、当該ブロックに対する3色誤差(差分1210)未満のIndex値に対してはカウンタを増加させず、3色誤差(差分1210)以上で且つ2色誤差(差分1209)未満のIndex値に対してはカウンタを1増加させ、2色誤差(差分1209)以上で且つ1色誤差(差分1208)未満のIndex値に対してはカウンタを2増加させ、1色誤差(差分1208)以上のIndex値に対してはカウンタを3増加させることに等しい。したがって、画像データ1201が入力された場合、カウンタ1301は、カウンタ1302のように更新されることになる。このカウンタ1302の値は、閾値設定部1108で各Index値を閾値として設定した場合に、減少するデータ量の指標となる。例えば、閾値設定部1108で10〜40までの値を閾値として設定した場合、入力された画像データ1201は減色処理部1001で3色に減色処理される。つまり、2×2画素ブロックで入力される4画素分のデータ量(すなわち4色分の色データの量)に対して、出力データの色は3色に減色されるので、出力される色データの量は3色分の色データ量となり、データ量が1色分減少することを表わしている。すなわち、カウンタ1302で示したIndex値10〜40に対してカウントした値「1」は、1色分の色データ量が減少するということを示す指標として用いることができる。
【0040】
同様に、閾値設定部1108で50〜110までの値を閾値として設定した場合、入力された画像データ1201は減色処理部1001で2色に減色処理され、入力される4画素分のデータ量に対して、出力データの色は2色に減色されるので、出力される色データの量は2色分の色データ量となり、データ量が2色分減少することを示している。すなわち、Index値50〜110に対してカウントした値「2」は、2色分の色データ量が減少するということを示す指標として用いることができる。
【0041】
さらに、閾値設定部1108で120以上の値を閾値として設定した場合、入力された画像データ1201は減色処理部1001で1色に減色処理され、入力される4画素分のデータ量に対して、出力データの色は1色に減色されるので、出力される色データの量は1色分の色データ量となり、データ量が3色分減少することを表わしている。すなわち、Index値120以上に対してカウントした値「3」は、3色分の色データ量が減少するということを示す指標として用いることができる。
【0042】
以上のように、このカウンタ値によって、閾値をいくつに設定すれば、どれだけのデータ量が削減できるかという統計を取ることができる。なお、図13は、2×2画素の1ブロックについて示されているが、以下、説明する。まず、M×N色(M及びNは2以上の整数)からM×N−1色に減色された場合の減色誤差(第1の差分)より小さいIndex値のカウンタは増加させない。次に、第1の差分以上で、且つ、M×N色からM×N−2色に減色された場合の減色誤差(第2の差分)より小さいIndex値に対するカウンタを1インクリメントする。
【0043】
汎用化して説明すると、(M×N)色から(M×N−1)色に減色した場合の第1の差分より小さい閾値インデックスに対応するカウンタは増加させず、(M×N)色から(M×N−K)色に減色した場合の第Kの差分以上で且つ(M×N)色から(M×N−K―1)色に減色した場合の第(K+1)の差分より小さい閾値インデックスに対応するカウンタはK増加させる(ここで、K=1,2,…,M×N−2)。
【0044】
第2の差分以上で、且つ、M×N色からM×N−3色に減色された場合の減色誤差(第3の差分)より小さいIndex値に対するカウンタを2インクリメントする。以降、同様に処理を行っていくと、M×N色から2色に減色された場合の減色誤差(第M×N−2の差分)以上で、且つ、M×N色から1色に減色された場合の減色誤差(第M×N−1の差分)より小さいIndex値に対するカウンタをM×N−2インクリメントする。さらに、第M×N−1の差分以上のIndex値に対するカウンタをM×N−1インクリメントする。
【0045】
減色数カウント部1107は、前述のインクリメント処理を所定数の2×2画素サイズのブロックごとに対して行い、累計を取る。例えば、64×64画素の画像サイズを持つ入力画像データに対して処理を行う場合、当該入力画像データ内には2×2画素サイズのブロックが32×32個存在することになる。この32×32個の各ブロックに対して上述したインクリメント処理を繰り返し適用して統計を取った場合、例えば、図13のカウンタ1303(第1のテーブルの一例)のような統計結果が得られる。カウンタ1303に示すような統計情報を基にすれば、1回目のデータ圧縮時に目標となるデータサイズ(圧縮率)に達しなかった場合、データ再圧縮時において、目標となるデータサイズに圧縮することのできる閾値を決定することができる。この詳細については、後述する。
【0046】
圧縮部202、252から出力される4ビットのパターンフラグと1ブロック内を構成する色数分の画素値(色データ)は、DMAC203、253によってメモリに書き込まれる(メモリ格納処理)。DMACは、パターンフラグと第1色のデータと第2色、第3色、第4色のデータとの書き込み位置を変更する。DMACは、パターンフラグ書き込みのためのメモリ先頭アドレスと、第1色データの書き込みのためのメモリ先頭アドレスと、第2〜4色データの書き込みのためのメモリ先頭アドレスとの、3つのアドレスを指定する。即ち、各ブロックのパターンフラグは、メモリ上のパターンフラグ格納部(パターンフラグを格納するためのメモリ領域)に纏めて格納される。また、各ブロックの第1色のデータは、メモリ上の第1色格納部(第1色データを格納するためのメモリ領域)に纏めて格納される。更に、各ブロックの第2〜4色目のデータは、メモリ上の第2〜4色格納部に纏めて格納される。
【0047】
図7は、DMACによる画像データのメモリ空間への書き込みの一例を示す図である。なお、サイズがK×L画素のRGB各色8ビットの画像を圧縮部に2×2画素の1ブロックごとに入力する場合、パターンフラグのデータが格納されるパターンフラグ格納部のデータサイズは、「(K×L÷2÷2×4÷8)バイト」となる。また、第1色のデータが格納される第1色格納部のデータサイズは、「(K×L÷2÷2×24÷8)バイト」となる。また、第2色、第3色、第4色のデータが格納される第2〜4色格納部のデータサイズは、処理対象となるラスタ画像に応じて異なる。これは、第2、3、4色が存在するブロックの数が画像によって異なるためである。
【0048】
第1色格納部、第2〜4色格納部には、各画素値(色データ)がJPEG等の符号化により圧縮処理されずに、そのままのビット数(上述した例では24ビット)で格納されている。従って、例えばLUTを用いた色変換やガンマ補正処理、行列演算を用いた色空間変換処理等の1画素入力と1画素出力で完結する色処理を行う場合、圧縮データをデコード(復号化)して元のラスタ画像に戻さなくても、圧縮データ中の該当する色データを処理することが可能である。つまり、図7のようにメモリの第1色格納部と第2〜4色格納部に格納されているデータに対して、該当する画素値(色データ)の部分を直接処理することが可能である。図2の色処理部212で画素単位の画像処理を行う場合は、メモリ106上の第1色書き込み先頭アドレス以降の色データをDMAC211を介して読み込み、画素単位での処理を実行後、メモリ106上へ再度書き込む。その際、その画像処理によって画素のビット数が変わらない場合には、メモリ106上の同じ場所へ再度書き込むことで、メモリ106を不要に多く用いずにすむ。このように、メモリに格納されたデータを直接用いることで、メモリバス上の転送効率が向上し、入力されたラスタ画像データ(画像データ1201)の画素数よりも少ない数の色データに対して処理することになり、その結果、処理が高速化される。本実施例においては、図7に示すように、画像データをパターンフラグと第1色とその他の第2〜4色とに分け、離散的にメモリ上へ格納している。従って、第1色格納部には、ラスタ画像データを2×2画素のブロックごとに分割して、ブロック間において共通の位置、例えば、各ブロックの左上画素の画素値(色データ)がメモリ上に連続して存在する。
【0049】
MFPにおいては、蓄積したPDL画像データやスキャン画像データのプレビュー表示、ネットワーク送信などの機能を有している。例えば、プリント解像度が600dpiであったとしても、プレビューや送信時にそこまでの解像度は通常必要とされず、300dpiやそれ以下で十分な場合が多い。このように、縮小データを得る必要がある場合に、第1色格納部に格納されている第1色の色データのみをまとめて抽出することで、簡単に半分のサイズのラスタ画像データを取得することができる。
【0050】
例えば、600dpiのラスタ画像データが上述した圧縮処理が行われて図7に示すように格納されていた場合に、上述の縮小送信を行なう場合を例として説明する。送信する画像の解像度として300dpiが指定された場合は、第1色格納部に格納されているデータをそのまま抽出して送信すればよい。また、解像度として400dpiなど、第1色格納部にサンプリングされている300dpiより大きい解像度が指定されている場合には、次のように処理する。パターンフラグ格納部と第1色格納部と第2〜4色格納部とに格納されているデータに基づき、格納されているデータを一度展開し、公知の変倍処理を用いて変倍して、その変倍された画像を送信する。また、300dpiより小さい解像度が指定されている場合には、第1色格納部のデータのみを用いて、指定の解像度へ変倍処理を行う。このように、必要な画像サイズに応じて切り替えながらデータの読み込みを行うことで任意の解像度に応じて処理することができる。
【0051】
所定サイズの入力画像データを圧縮部202、252によって圧縮処理して出力されるデータサイズは、第2〜4色格納部に格納されるデータ量に依存する。システムによっては、1ページの画像格納に使用できるメモリサイズが制限され、そのメモリサイズに格納できるように圧縮されたデータを得るために、圧縮率の目標値が設定されている場合がある。そのため、減色処理部1001の閾値設定部1108による閾値の調整によって、第2〜4色格納部に格納されるデータ量を制御する必要がある。以下、初回の圧縮処理によって得られた減色数カウント部1107のカウンタ値に基づいて、再圧縮処理を行うことにより目標圧縮率を達成するための閾値調整方法について説明する。
【0052】
図14は、閾値調整処理の手順を示すフローチャートである。まず、データ圧縮開始前に、閾値設定部1108に減色処理部1001における減色判定のための閾値を設定する(S1402)。ここでは、初回の圧縮処理時には、閾値「0」を設定し、入力画像に対して画質劣化が全くない圧縮結果を出力する。しかしながら、初回から0以外の閾値(例えば10)を設定するようにしても良い。その場合に、入力画像に対して所定の画質劣化が発生したとしても、初回の圧縮によって目標の圧縮率を達成でき、圧縮処理時間が短縮できる可能性を高めることができる。
【0053】
次に、入力画像データを圧縮部202、252に転送して、初回の圧縮処理を行なう(S1403)。その際、減色数カウント部1107のカウンタに、図13において説明したような情報が格納される。初回の圧縮完了後、圧縮データのデータ量と入力画像データのデータ量との比率に基づき圧縮率を算出して、システムにおいて決められている目標圧縮率と比較する(S1404)。ここで、初回圧縮時の圧縮率が目標圧縮率以下であると判定された場合、再圧縮を行う必要は無いと判断して本処理を終了する(S1405)。一方、初回圧縮時の圧縮率が目標圧縮率よりも高いと判定された場合に、減色数カウント部1107に格納されたカウント情報から、目標圧縮率を達成できる最適閾値を決定する(S1407)。このとき、閾値を大きくすればするほど、圧縮率は良くなるが減色されて画質は劣化するので、目標圧縮率を達成できる閾値の中で、できるだけ小さい閾値を最適閾値として決定すればよい。
【0054】
S1407における最適閾値の決定方法を、32×32個のブロック(64×64画素サイズの画像)のRGB8ビットデータを入力して、図13のカウンタ1303の値が取得された場合を例に説明する。32×32個のブロックのRGB各色8ビットデータ(24ビットカラー)の入力画像データのサイズは、32×32×4×24÷8=12288バイトである。この入力画像データに対して閾値「0」を設定して圧縮した場合、カウンタ1303に示すように、画像全体の減色数は777色であることが分かる。そのために、初回圧縮時にメモリに書き出された色数は、32×32×4−777=3319色である。これによって、第1色格納部、第2〜4色格納部に格納されるデータサイズの合計は、3319×24÷8=9957バイトとなる。一方、前述したように、圧縮データにはパターンフラグの格納量も含まれる。パターンフラグのデータサイズは、32×32×4÷8=512バイトである。これらの情報から、初回圧縮時の圧縮率を算出すると、(9957+512)÷12288×100=85.2%となる。ここで、目標圧縮率が仮に40%に設定された場合、初回圧縮時の圧縮率は目標圧縮率より大きいので、再圧縮を行なう必要がある。そこで、再圧縮時に目標圧縮率を達成するために必要な大きさの閾値を、カウンタ1303を使用して決定する。
【0055】
まず、目標圧縮率を達成するために必要な削減すべきデータサイズは、小数点以下を切り上げて、12288×(1−0.4)=7373バイトである。ただし、圧縮後は、パターンフラグのデータ量512バイトが付加されるので、合計7373+512=7885バイトの色データを削減する必要がある。2×2画素の1ブロック内を1色減色すると、RGB8ビットデータで3バイトのデータが削減できる。そこで、64×64画素サイズの画像全体において7885バイト削減するための必要な減色数は、小数点以下を切り上げて、7885÷3=2629色となる。ここで、カウンタ1303の情報から、少なくとも1ページ全体で2629色を減色できる閾値をIndex値の小さい方から順に検索すると、閾値「70」で1ページ合計2630色を減色できることが分かる。
【0056】
このようにして求められた閾値「70」を、最適閾値として閾値設定部1108に設定する(S1408)。そして、同じ入力画像データを用いて再圧縮処理を行なえば(S1409)、1回の再圧縮処理によって目標圧縮率を必ず達成することができる。それによって、再圧縮処理後の出力画像データサイズの圧縮率計算や、再々圧縮処理が不要となり、圧縮処理にかかる時間を短縮することができる。
【0057】
次に、展開部222、232について説明する。展開部222、232では、上述したように圧縮部202または252で生成されて格納されたパターンフラグと色データとを、ラスタ画像データへ戻す処理を行う。メモリ106上に図7に示すように配置されている圧縮データのパターンフラグ書き込み先頭アドレス、第1色書き込み先頭アドレス、及び、第2〜4色書き込み先頭アドレスの3つのアドレスをDMAC221、231に指定する。DMAC221、231は3つのアドレスからデータを読み出して、展開部222、232に転送する。
【0058】
展開部222や232では、まず4ビットのパターンフラグを解釈し、そのブロック内の色数を取得する。第1色データに加えて、色数に応じて第2、3、4色データを読み出し、各パターンフラグに対して予め定義されている色データの配置パターン(図4に図示)に従って、第1色および第2〜4色の色データを再配置する。このようにすることで2×2画素ブロックを展開、復号することができる。
【0059】
また、展開部222、232で画像サイズを1/2にする場合には、上述したように、パターンフラグと第2〜4色データを必要としないので、DMAC221、231には第1色書き込み先頭アドレスのみ指定する。これにより、メモリ106の第1色格納部から第1色データのみを読み込み、画像データが構成される。このように処理することで、メモリバスの帯域を節約することができる。
【0060】
以上のように、初回圧縮時に格納される減色数カウント部1107のカウンタ1303の情報に基づいて、再圧縮時に減色処理部1001に最適な閾値設定を行なうことで、圧縮処理にかかる時間を短縮することができる。また、圧縮率向上のための閾値設定を大きくし過ぎることによる不要な画質劣化を生じることを防ぐことができる。
【0061】
なお、本実施例においては、色データの配置を示すパターンとパターンフラグとを図4に示すように対応付けたが、これに限るものではない。例えば、2×2画素の1ブロックの右下画素の画素値が第1色となるように、色データの配置を示すパターンとパターンフラグとを対応付けて定義しても良い。また、本実施例では、1ブロックのサイズとして2×2画素としているが、他の画素数を1ブロックのサイズとしても良い。また、圧縮の際に、入力画像データとしてRGB8ビットとしているが、異なる色空間(例えばCMYK色空間)のデータ、グレースケールのデータ、又は8ビット以外の画素値を有するデータであっても良い。
【0062】
また、本実施例における減色による圧縮方法は一例であり、他の公知の減色処理を用いて実施しても良い。例えば、色差を求める別の公知の手法を用いても良い。
【0063】
また、上述した本実施例の減色数カウント部1107では、設定可能な閾値を示す指標である複数のIndex値(閾値インデックス)それぞれに対して、減少するデータ量を示す指標であるカウンタを設けることにより、図13の1301のテーブルを生成するようにしていた。すなわち、上述した実施例では、Index値それぞれに対して減少するデータ量に着目してカウンタを増加させていったが、本発明はこれに限るものではなく、Index値それぞれに対して残存するデータ量に着目してカウンタを増加させていくようにしても構わない。ただし、この場合、ステップS1407で目標圧縮率を達成できる最適閾値を決定する際、残存すべきデータ量(色数)を基準にして計算を行うようにすることになる。例えば、図12の画像データ1201のような2×2画素ブロックが入力された場合、各差分1208〜1210の「120」、「50」、「10」がカウント部1107に入力されるので、カウンタテーブルでは、ブロックに対する3色誤差(差分1210)未満のIndex値に対してはカウンタを4増加させ、3色誤差(差分1210)以上で且つ2色誤差(差分1209)未満のIndex値に対してはカウンタを3増加させ、2色誤差(差分1209)以上で且つ1色誤差(差分1208)未満のIndex値に対してはカウンタを2増加させ、1色誤差(差分1208)以上のIndex値に対してはカウンタを1増加させる。64×64画素の画像の場合のデータサイズは前述したように12288バイトであるので、目標圧縮率が40%に設定された場合、圧縮処理後の目標データサイズは12288×0.4=4915バイトである。また、圧縮後のパターンフラグのデータ量は512バイトであるので、圧縮後の色データのデータ量が4915−512=4403バイト以下、すなわち、残存する色データが1467色分のデータ量以下となるようにすればよい。ここで、カウンタが1467以下となるIndex値の小さい順に検索すると、上述した実施例と同様に閾値「70」に設定すればよいことが分かる。つまり、70となる閾値以下の範囲が1467色分のデータ量以下となる。
【0064】
[第2の実施例]
第1の実施例において説明した圧縮処理によると、圧縮処理後にメモリに格納した圧縮データサイズは、入力されたラスタ画像データのサイズに依存する。そのため、圧縮データに対して、例えば画像の一部だけ切り出して処理することができない。本実施例においては、後述するように、ラスタ画像データをタイル単位で圧縮することにより生成した圧縮データをメモリに格納する。その結果、ラスタ画像データの画像の一部をタイル単位で切り出して処理することができ、メモリに対するランダムアクセス性を高めることができる。
【0065】
図8は、本実施例における圧縮処理の手順を示すフローチャートである。まず、ページごとに、ラスタ画像データを入力する(S801)。次に、入力画像データを所定の大きさのブロック単位に分割して、その1つを処理対象にする(S802)。本実施例では64×64画素を1ブロックとする。以下、第1の実施例における2×2画素の1ブロックと区別するために、64×64画素の1ブロックを「タイル」という。図15に、タイルとブロックとの関係を図示する。入力されたページ画像をタイル単位に分割する(タイル分割)と、各タイルのページ内における位置はタイル座標(X,Y)で表される。各タイルのサイズが64×64画素である場合、各タイル内には2×2画素のブロックが32×32個存在することになる。
【0066】
各タイルには、所定の固定長のヘッダ情報(タイルヘッダ)が付与される(S803)。圧縮後のタイルに付与されているヘッダ情報を図16に示す。付与されるヘッダには、ページID、タイル座標、色空間、画素データのビット数、タイルのデータサイズ、属性情報の有無、圧縮フラグ等が記述される。
【0067】
ページIDは、ページごとの一意なID番号である。タイル座標は、そのタイルがページごとのラスタ画像データ上でどの位置にあるかを示す。例えば、X、Y座標の2次元での座標であっても良い。色空間は、そのタイルがRGB画像データであるか、若しくは、CMYK画像データであるか、グレースケール画像データであるかの識別子として記述されている。画素データのビット数は、タイル内の1画素あたりのビット長である。データサイズは、そのタイルの第1色のデータサイズと第2〜4色のデータのデータサイズがバイト単位で記述されている。属性情報の有無は、その画像データに文字や写真といった属性情報が画素単位で付与されているか否かが記述されている。圧縮フラグは、そのタイルが圧縮されたデータを含むか、若しくは、非圧縮のデータを含むかを示している。
【0068】
次に、このタイル単位に、第1の実施例において説明した圧縮処理を行なう(S804)。
そして、圧縮されたタイル画像データを1つのデータとして纏める(S805)。このようにして纏められたデータ構造を、図16に示す(第2の格納の一例)。以下、図16に示すような、ヘッダを含めたデータの単位をパケットという。タイル単位で圧縮処理が終了してデータサイズが確定した後に、第1色格納部と第2〜4色格納部の間を詰めた状態でデータを図16に示すようなパケットに纏める。パケットは、DMACを介して、メモリ上に出力される(S806)。
【0069】
次に、そのパケットの座標とサイズをリスト化し、パケット管理テーブルを作成する(S807)。なお、2つ目以降のタイルについてのパケットを作成した場合は、当該パケットの座標とサイズに基づいて、パケット管理テーブルを更新していくことになる。図17は、パケット管理テーブルの一例を示す図である。
【0070】
全てのタイルを処理対象として、上記処理を実行済みか判断し、以上の処理をページ単位のラスタ画像データの最後のタイルまで繰り返す(S808)。
【0071】
本実施例においては、タイル単位で画像をメモリに書き出すので、図18に示すように、パケット毎にサイズが異なり、それぞれのパケットの先頭アドレスがとびとびになってしまう。しかしながら、S807で生成・更新されたパケット管理テーブルを用いることで、任意の座標のパケットの先頭アドレスを検索することができる。先頭パケットの書き込みアドレスが既知であれば、パケット管理テーブルに記載されているパケットサイズをオフセットとして任意のパケットの先頭アドレスを求めることができる。例えば、図18において、第3パケットを読み込む場合を考える。その場合、第1、第2パケットのサイズ合計を図17に示すパケット管理テーブルより求め、先頭パケットのアドレスに対してのオフセットから第3パケットアドレスを算出して、データを読み込む。その結果、第3パケットのデータを取得することができる。以上のように、本実施例においては、タイル単位に任意の圧縮された画像データへのアクセスが可能になるので、画像の部分的な処理を容易に行なうことができる。
【0072】
また、減色処理部1001の内部を、図19のように一部変更し、さらに内部にSRAMを構成するようにして、再減色処理をハードウエアで実現するようにしてより高速化を図るようにしても良い。つまり、減色数カウント部1901に、タイル単位で目標圧縮率を達成するために、必要な減色数を予め設定する。例えば、RGB各色8ビットの入力画像を64×64画素のタイルデータ単位で圧縮処理を行なう場合に、入力画像データは、64×64×8×3÷8=12288バイトとなる。ここで、目標圧縮率を40%とした場合に、第1の実施例で説明したように、減色すべき色数は、合計2629色であることが予め計算で求められる。従って、その値を目標減色数設定部1904に設定して、さらに、初期閾値「0」を閾値設定部1108に設定して圧縮処理を開始する。すると、最初のタイルデータが入力データ格納SRAM1902に転送され、閾値「0」での減色処理結果が出力データ格納SRAM1903に格納される。1タイル画像データが全てデータ選択出力部1109から出力データ格納SRAM1903に出力されると、データ選択出力部1109は、終了信号を減色数カウント部1901に通知する。減色数カウント部1901では、圧縮処理終了信号を受信すると、目標減色数設定部1904に設定された目標減色数と、内部に保持されているカウンタ1303の値との比較を、Index値が小さい値から順番に行なう。そして、目標減色数よりカウンタ1303の値の方が大きいIndex値を検索する。例えば、目標減色数設定部1904に「2629」が設定されている場合に、図13のカウンタ1303と比較したとすると、Index値「70」が検索される。
【0073】
減色数カウント部1901は、その値を閾値設定部1108に設定する。閾値設定部1108は、初回に設定された閾値「0」を内部バッファに一時退避し、最適閾値として「70」を設定し、減色処理部1001の再処理を指示する。再処理を指示された減色処理部1001は、入力データ格納SRAM1902から、再度同じ入力画像データを減色処理する。この際、「70」に設定された閾値で処理される。1タイル画像データが全てデータ選択出力部1109から出力データ格納SRAM1903に出力されると、出力データ格納SRAM1903から後段に、出力データを出力する。また、データ選択出力部1109は、終了信号を改めて減色数カウント部1901に通知する。減色数カウント部1901では、圧縮処理終了信号を受信すると、閾値設定を内部バッファに一時退避した初回に設定された閾値「0」に戻し、次のタイル画像データの処理を行なう。
【0074】
以上のような処理を1ページ分全てのタイル画像データに対して行なうことで、全て目標圧縮率以下のデータ量となるパケットデータを取得することができる。
【0075】
展開処理をする場合は、パケット単位にヘッダが付与されているので、そのヘッダに記載されている情報を用いて展開処理を行う。まず、ヘッダ内の圧縮フラグが非圧縮を示している場合には、ヘッダを取り除いたデータを出力する。一方、圧縮を示している場合には、展開処理を行う。展開処理は、ヘッダに記載されている情報から、パターンフラグ格納位置、第1色データ格納位置、及び、第2〜4色格納位置を求め、順次、タイル画像データに展開する。例えば、パターンフラグの位置は、固定長のヘッダなのでオフセット分から求められる。第1色データは、タイル画像データのサイズが64×64画素であればパターンフラグのサイズが32×32×4ビットで固定になるので、パターンフラグ位置からのオフセットにより求められる。第2、3、4色のデータは第1色のデータが不定長なので、ヘッダ内の第1色サイズを参照して、第1色のデータ位置からのオフセットにより求められる。
【0076】
以上のように、タイル単位で画像データの一部だけ切り出して処理することができるので、圧縮データに対するランダムアクセス性を高めることができる。
【0077】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。

【特許請求の範囲】
【請求項1】
画像データを入力する入力手段と、
前記入力手段により入力された前記画像データを、M×N画素(ここで、M及びNは2以上の整数)のブロック単位に分割する分割手段と、
前記分割手段により分割された前記各ブロックを構成する色数をM×N色から、1色ないし(M×N−1)色のそれぞれに減色する減色手段と、
前記減色手段で前記1色ないし(M×N−1)色のそれぞれに減色した後の各ブロックの画像データと当該減色する前の各ブロックの画像データとの差分を、前記分割手段で分割されたブロックのそれぞれに対して取得する取得手段と、
前記取得手段により取得された、各ブロックの前記1色ないし(M×N−1)色のそれぞれに減色したときの差分に基づいて、閾値の指標である複数の閾値インデックスと、減少するデータ量の指標あるいは残存するデータ量の指標のいずれかであるカウンタとの関係を示す第1のテーブルを生成する生成手段と、
前記生成した第1のテーブルに基づいて、圧縮後のデータ量が目標のデータ量以下となる閾値を決定する決定手段と、
前記分割手段で分割された各ブロックを前記減色手段で減色したときの差分が前記決定手段により決定された前記閾値以下となるように減色し、当該減色後の画像データに基づいて圧縮データを生成する圧縮手段と
を備えることを特徴とする画像処理装置。
【請求項2】
前記圧縮手段で生成される圧縮データをメモリに格納する第1の格納手段をさらに備えることを特徴とする請求項1に記載の画像処理装置。
【請求項3】
前記圧縮手段は、前記閾値以下となるように減色された後の各ブロック内の各画素の色データを比較することにより、当該減色された後の各ブロックに含まれる色データの配置パターンを示すパターンフラグと、当該減色された後の各ブロックに含まれる色数分の色データとを、前記圧縮データとして生成することを特徴とする請求項1または2に記載の画像処理装置。
【請求項4】
前記M×N画素のブロック内で、1ないしM×N−1色それぞれの色数をどのように配置するかを示す配置パターンと前記パターンフラグとを予め対応づけた第2のテーブルをさらに備え、
前記圧縮手段は、前記閾値以下となるように減色された後の各ブロック内の各画素の色データを比較した結果と前記第2のテーブルとに基づいて、当該減色された後の各ブロックに含まれる色データの配置パターンを示すパターンフラグを特定し、当該特定されたパターンフラグと当該減色された後の各ブロックに含まれる色数分の色データとを、前記圧縮データとして生成することを特徴とする請求項3に記載の画像処理装置。
【請求項5】
前記圧縮手段は、前記閾値以下となるように減色された後の各ブロック内の各画素の色データを比較することにより、当該減色された後の各ブロックに含まれる色データの配置パターンを示すパターンフラグを特定し、
当該減色された後のブロックの予め定義された位置の画素に対応する色データを第1色の色データとして抽出し、
当該減色された後のブロックに含まれる色数が2色以上である場合は、当該特定されたパターンフラグで定義された配置パターンに対応する第2色以降の色データを抽出し、
前記特定されたパターンフラグと前記第1色の色データと前記第2色以降の色データとを、それぞれまとめることにより、前記圧縮データを生成する
ことを特徴とする請求項3または4に記載の画像処理装置。
【請求項6】
前記ブロックが2×2画素のブロックである場合、前記予め定義された位置の画素は、当該ブロックの左上の画素あるいは右下の画素のいずれかであることを特徴とする請求項5に記載の画像処理装置。
【請求項7】
前記第1のテーブルが、前記閾値の指標である複数の閾値インデックスと、減少するデータ量の指標であるカウンタとの関係を示す場合、
前記生成手段は、
前記分割手段により分割されたブロックを順に処理対象にし、当該処理対象となった各ブロックについて、(M×N)色から(M×N−1)色に減色した場合の第1の差分より小さい閾値インデックスに対応するカウンタは増加させず、(M×N)色から(M×N−K)色に減色した場合の第Kの差分以上で且つ(M×N)色から(M×N−K―1)色に減色した場合の第(K+1)の差分より小さい閾値インデックスに対応するカウンタはK増加させ(ここで、K=1,2,…,M×N−2とする)、(M×N)色から1色に減色した場合の第(M×N−1)の差分以上の閾値インデックスに対応するカウンタは(M×N−1)増加させることにより、前記第1のテーブルを生成する
ことを特徴とする請求項1乃至6のいずれか1項に記載の画像処理装置。
【請求項8】
前記第1のテーブルが、前記閾値の指標である複数の閾値インデックスと、残存するデータ量の指標であるカウンタとの関係を示す場合、
前記生成手段は、
前記分割手段により分割されたブロックを順に処理対象にし、当該処理対象となった各ブロックについて、(M×N)色から(M×N−1)色に減色した場合の第1の差分より小さい閾値インデックスに対応するカウンタは(M×N)増加させ、(M×N)色から(M×N−K)色に減色した場合の第Kの差分以上で且つ(M×N)色から(M×N−K―1)色に減色した場合の第(K+1)の差分より小さい閾値インデックスに対応するカウンタは(M×N−K)増加させ(ここで、K=1,2,…,M×N−2とする)、(M×N)色から1色に減色した場合の第(M×N−1)の差分以上の閾値インデックスに対応するカウンタは1増加させることにより、前記第1のテーブルを生成する
ことを特徴とする請求項1乃至6のいずれか1項に記載の画像処理装置。
【請求項9】
前記入力手段で入力された画像データを、所定の大きさのタイル単位に分割するタイル分割手段を更に備え、
前記分割手段は、前記タイル分割手段によって前記タイル単位に分割された画像データを、更に、M×N画素(ここで、M及びNは2以上の整数)のブロック単位に分割することを特徴とする請求項1乃至8のいずれか1項に記載の画像処理装置。
【請求項10】
入力手段が、画像データを入力する入力工程と、
分割手段が、前記入力工程で入力された前記画像データを、M×N画素(ここで、M及びNは2以上の整数)のブロック単位に分割する分割工程と、
減色手段が、前記分割工程で分割された前記各ブロックを構成する色数をM×N色から、1色ないし(M×N−1)色のそれぞれに減色する減色工程と、
取得手段が、前記減色工程で前記1色ないし(M×N−1)色のそれぞれに減色した後の各ブロックの画像データと当該減色する前の各ブロックの画像データとの差分を、前記分割工程で分割されたブロックのそれぞれに対して取得する取得工程と、
生成手段が、前記取得工程で取得された、各ブロックの前記1色ないし(M×N−1)色のそれぞれに減色したときの差分に基づいて、閾値の指標である複数の閾値インデックスと、減少するデータ量の指標あるいは残存するデータ量の指標のいずれかであるカウンタとの関係を示す第1のテーブルを生成する生成工程と、
決定手段が、前記生成した第1のテーブルに基づいて、圧縮後のデータ量が目標のデータ量以下となる閾値を決定する決定工程と、
圧縮手段が、前記分割工程で分割された各ブロックを前記減色工程で減色したときの差分が前記決定工程で決定された前記閾値以下となるように減色し、当該減色後の画像データに基づいて圧縮データを生成する圧縮工程と
を備えることを特徴とする画像処理方法。
【請求項11】
コンピュータを、
画像データを入力する入力手段、
前記入力手段により入力された前記画像データを、M×N画素(ここで、M及びNは2以上の整数)のブロック単位に分割する分割手段、
前記分割手段により分割された前記各ブロックを構成する色数をM×N色から、1色ないし(M×N−1)色のそれぞれに減色する減色手段、
前記減色手段で前記1色ないし(M×N−1)色のそれぞれに減色した後の各ブロックの画像データと当該減色する前の各ブロックの画像データとの差分を、前記分割手段で分割されたブロックのそれぞれに対して取得する取得手段、
前記取得手段により取得された、各ブロックの前記1色ないし(M×N−1)色のそれぞれに減色したときの差分に基づいて、閾値の指標である複数の閾値インデックスと、減少するデータ量の指標あるいは残存するデータ量の指標のいずれかであるカウンタとの関係を示す第1のテーブルを生成する生成手段、
前記生成した第1のテーブルに基づいて、圧縮後のデータ量が目標のデータ量以下となる閾値を決定する決定手段、
前記分割手段で分割された各ブロックを前記減色手段で減色したときの差分が前記決定手段により決定された前記閾値以下となるように減色し、当該減色後の画像データに基づいて圧縮データを生成する圧縮手段、
として機能させるためのプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate


【公開番号】特開2012−23508(P2012−23508A)
【公開日】平成24年2月2日(2012.2.2)
【国際特許分類】
【出願番号】特願2010−159164(P2010−159164)
【出願日】平成22年7月13日(2010.7.13)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】