以下、図面を参照しながら発明を実施するための形態について詳細に説明する。以下で説明する各実施形態では、画像処理装置として、スキャン、プリント、コピーなどの複数の機能を有するデジタル複合機(MFP)を例に説明する。
[第1の実施形態]
図1は、第1の実施形態における画像処理装置100の構成例を示すブロック図である。図1に示すように、画像処理装置100は、コントローラ101、スキャナ102、プリンタ103、ネットワーク104、HDD記憶部105で構成される。コントローラ101は、スキャナ102、プリンタ103、ネットワーク104、HDD記憶部105と接続され、画像処理装置100全体を制御する制御部である。スキャナ102は、画像入力機器として画像データの入力を行う処理部である。プリンタ103は、画像出力機器として画像データの出力を行う処理部である。また、ネットワーク104は、LANや公衆回線(WAN)などで構成され、画像データやデバイス情報などの入出力を行う通信部である。また、HDD記憶部105は、ハードディスクドライブで構成され、システムソフトウェアやプログラム、画像データなどを格納する記憶部である。
図2は、図1で示したコントローラ101の構成例を示すブロック図である。図2を用いて、コントローラ101の各部の詳細な処理を説明する。
まず、スキャナ102によってスキャンされた画像データを読み込む場合を説明する。スキャナ用画像処理部211は、スキャナ102で読み取られたRGB(レッド、グリーン、ブルー)3色の画像データを受け取り、その画像データに対してシェーディング処理やフィルタ処理等の画像処理を行う。そして、画像圧縮部212は、スキャナ用画像処理部211で処理された画像データに対して圧縮処理を行う。その後、DMAC(ダイレクトメモリアクセスコントローラ)213は、画像圧縮部212による圧縮処理で得られた圧縮データを画像メモリバス203を介して転送し、メモリ202に格納する。
次に、スキャンされた画像データをプリントする場合を説明する。DMAC261は、メモリ202に格納されている圧縮データを画像メモリバス203を介して色処理部262へ転送する。そして、色処理部262は、DMAC261によって転送された圧縮データをCMYK(シアン、マゼンタ、イエロー、ブラック)色空間へ変換する。その後、更に色処理部262がCMYKの各値に対して濃度調整やプリンタガンマ補正などの色処理を行う。そして、DMAC261は、該色処理後のデータを画像メモリバス203を介して再度メモリ202に格納する。その後、DMAC221は、プリント用の画像処理を行うために、画像メモリバス203を介してメモリ202に格納されている圧縮データを読み込む。画像伸張部222は、該色処理後のデータをラスタ画像データに展開する。そして、プリント用画像処理部223は、CMYKのラスタ画像データに対してディザ法や誤差拡散法による面積階調処理を行い、プリンタ103へ出力する。
次に、スキャンされた画像データをネットワークへ送信する場合を説明する。DMAC261は、メモリ202に格納されている圧縮データを画像メモリバス203を介して色処理部262へ転送する。そして、色処理部262は、ディスプレイガンマ調整や用紙地色調整等を行った後、YCbCr(輝度、BLUE色差、RED色差)色空間へ変換する。その後、DMAC261が、色処理部262で処理されたデータを画像メモリバス203を介してメモリ202に格納する。そして、DMAC231は、送信用の画像処理を行うために、画像メモリバス203を介してメモリ202に格納されている圧縮データを画像伸張部232へ転送する。その後、画像伸張部232は、圧縮データをラスタ画像データに展開する。そして、送受信処理部233は、カラー画像送信であればYCbCrのラスタ画像データに対してJPEG圧縮処理を行い、モノクロ2値画像送信であればYデータを2値化した後にJBIG圧縮処理を行い、ネットワーク104へ出力する。
次に、スキャンされた画像データを保存する場合を説明する。DMAC241は、メモリ202に格納されている圧縮データを画像メモリバス203を介してスプール用画像圧縮伸張部242へ転送する。そして、スプール用画像圧縮伸張部242は、HDDの書き込みスピードがメモリの書き込みスピードに対して遅いため、更に高圧縮のJPEG圧縮を行う。その後、HDDコントローラ243は、HDD記憶部105へ圧縮データを保存する。なお、HDD記憶部105に保存されている圧縮データを再度メモリ202に転送する場合には、上述した処理を逆に行えば良い。
次に、図1に示すネットワーク104を介して接続された他の装置から送られてきたPDLデータをメモリ202へ書き込む場合を説明する。図2にはPDL解釈部が図示されていないが、PDL解釈部として機能するCPU201が、PDLデータを解釈し、その結果のディスプレイリストをメモリ202に出力する。そして、レンダリング部251は、メモリ202に格納されているディスプレイリストをRGBのラスタ画像データとしてレンダリングし、画像圧縮部252は、レンダリング結果を圧縮処理する。その後、DMAC253は、圧縮データを画像メモリバス203を介してメモリ202に格納する。
なお、PDLデータをプリント、ネットワークへ送信、保存する処理は、スキャンされた画像データの場合と同様の処理を行うことで実現可能である。
なお、本実施形態は、画像圧縮部252でPDLデータから生成されたラスタ画像データを圧縮し、または、画像圧縮部212でスキャンで得たラスタ画像データを圧縮するものとして説明するが、本実施形態はこのような構成に限らない。例えば、図2のように画像圧縮部212と252を個別に設けるのではなく、共通の画像圧縮部を設けるように構成しても良い。
次に、本実施形態の特徴であるラスタ画像データの圧縮処理を詳細に説明する。本実施形態では、まずページ単位のラスタ画像データを、2×2画素単位のブロックに分割し、分割して抽出されたブロックを処理単位として画像データの圧縮処理を行う。
図3は、ラスタ画像データを分割した際のブロックのパターンを示す図である。ここで圧縮処理を説明する前に、図3を用いて2×2の4画素データの中に占める色数に応じてその組み合わせをする場合の数について説明する。図3に示すように、2×2の画素数が4画素であるので、そこに占める色数は最大4色になり、ブロック内で高々1色〜4色の組み合わせしか存在しない。
まず、ブロック内が1色の場合、4画素が全て同色で構成されていることになるので、その組み合わせは1通りである。
次に、ブロック内が2色の場合を考える。2色が4画素内にレイアウトされる場合の数は、左上の画素を第1色として考えると、左上以外の残りの3画素へ第1色もしくは第2色が入るので、4画素同色の場合を除く7通りの組み合わせが考えられる。
次に、ブロック内が3色の場合を考える。3色が4画素内にレイアウトされる場合の数は、3色のうち1色だけ2度使われる場合の数と言い換えることが可能であり、4画素の座標のうち、2画素が同じ色になる場合の数を求めれば良い。つまり、3色の場合の数は、4つの座標から2つの座標を取る組み合わせとなり、全部で6通りとなる。
最後に、ブロック内が4色の場合は1色の場合と同様で1パターンしか存在しない。
以上、1色〜4色の全ての場合の数を合計すると、全部で15通りのパターンが考えられる。また、これら全てのパターンを識別するために、フラグ(識別子)を付与することを考えると、0〜E(16進数)を識別するためのフラグのデータ量としては4ビット必要となる。この15通りのブロックのパターンとフラグとの関係を図4に示すように定義し、以下、このフラグを「パターンフラグ」と呼ぶ。
図5は、第1の実施形態における圧縮処理全体を示すフローチャートである。
まず、ページ単位で図3に示したラスタ画像データを入力する(S501)。そして、ページ単位で1画素のページ背景画素を設定する(S502)。これは圧縮処理時の初期記憶ブロックとして用いる為の画素データで、通常白色(RGB各色8ビット画像であれば255、CMYK画像であれば0)が用いられる。ここで背景画素に白色を用いた理由は、予め背景画素を設定しておくことで、背景画素と同色の画素データを出力しないで済む可能性があり、通常の原稿画像では背景画素が白色の可能性が最も高いためである。次に、図3に示した2×2画素単位のブロックに対する減色処理の適用履歴を保持するための減色情報である「減色フラグ」を0で初期化する(S503)。次に、1回目のページ圧縮処理で、減色フラグを参照する(S504)。この時、S504で参照した減色フラグが減色処理未適用を示す0に対して、予め定めた減色回数の上限を1とするならば、減色回数が上限に達していないので減色すると判定し(S505でYes)、減色圧縮処理を実行する(S506)。一方で、S504で参照した減色フラグが減色未適用を示す0に対して、予め定めた減色回数の上限を0(減色処理禁止)とするならば、減色回数が上限に達しているので減色しないと判定し(S505でNo)、圧縮処理を実行する(S507)。なお、S506の減色圧縮処理の詳細な説明は、図9を用いて後述する。また、S505の圧縮処理の詳細な説明は、図6を用いて後述する。ここで、1回目のページ圧縮処理が終了した後に、再圧縮するかを判定し、再圧縮しないと判定したならば(S508でNo)、ページ圧縮処理を終了する。一方で、再圧縮すると判定したならば(S508でYes)、S504に遷移し、2回目のページ圧縮処理を開始する。2回目のページ圧縮処理で、再び減色フラグを参照する(S504)。この時、S504で参照した減色フラグが減色処理適用済を示す1に対して、予め定めた減色回数の上限を1とするならば、減色回数が上限に達したので減色しないと判定して(S505でNo)、圧縮処理を実行する(S507)。以上で説明した処理フローに従い、入力されたページ画像データが所望の解像度になるまでページ圧縮処理を繰り返す(S508)。例えば、圧縮回数を2段階と定めた場合には、ページ画像データの解像度は、1回目の圧縮処理で1200dpiから600dpiに変換され、2回目の圧縮処理で600dpiから300dpiに変換されることになる。なお、図5の例では、ページ毎に減色処理を行うかを判定しているが、これは換言すれば、ページ内の処理対象のブロックに対して減色処理を行うかを判定しているともいえる。
図6は、画像圧縮部212、252で実行されるS505の圧縮処理を詳細に説明するフローチャートである。図3及び図4で示した前述の2×2画素の取り得る組み合わせを踏まえ、図6を用いて画像圧縮部212、252で実行される処理を説明する。入力としては、例えばRGBそれぞれ8ビットの256階調を持っており、またデータとしては8ビットデータの点順次で1画素当たり24ビットの画像として説明する。
まず、2×2画素のブロックを入力し(S601)、そのブロック内の全ての2画素の組み合わせに対して24ビットを比較する(S602)。ここで比較した結果、全ビットが一致していた場合は1を、不一致の場合は0を出力をする。
図7は、図6のフローチャートを補足説明するための図である。図7に示すように、2×2画素内の左上、右上、左下、右下の画素位置順に、座標1、2、3、4とする。1ブロック内の任意の2画素の組み合わせの座標は、1−2、1−3、1−4、2−3、2−4、3−4の全部で6通りあるので、S602では6回比較する必要があり、比較結果は6ビット出力される。図7に示す比較結果のように、1ブロック内の全画素が同色であれば、比較結果として全て1を出力し、逆に4画素が全て異なる画素値を持っていれば、比較結果として全て0を出力する。
この2×2画素のブロックを用いる例では、4画素で色の一致から出現し得るパターンの数は15通りなので、図7に示すように、6ビットの比較結果に応じて、4ビットのパターンフラグを特定する(S603)。次に、4画素内で出現した色数及び色データを抽出する(S604)。図7に示すように、4ビットのパターンフラグ(すなわち6ビットの比較結果)に対して、ブロック内での各色の配置を示す各パターンが対応づけられているので、各ブロックにおける色数と色データを特定することができる。なお、本実施形態の図4では、全てのパターンにおいて、左上の画素の色(画素値)が第1色(1番目の色データ)となるように定義している。従って、パターンフラグが0の場合は、色数1で、左上の画素の色(画素値)を第1色として抽出する。また、パターンフラグが1〜7の場合は、色数2で、左上の画素の色(画素値)を第1色として抽出し、更に、各パターンフラグに応じて定義されている第2色(2番目の色データ)が存在する位置の画素の色(画素値)を抽出する。例えば、パターンフラグが1の場合は、右上の画素の色を第2色として抽出する。また、パターンフラグが8〜Dの場合は、色数3で、左上の画素の色(画素値)を第1色として抽出し、更に、各パターンフラグに応じて定義されている第2色および第3色(2番目、3番目の色データ)が存在する位置の画素の色(画素値)を抽出する。例えば、パターンフラグが8の場合は、右上の画素の色(画素値)を第2色として抽出し、右下の画素の色(画素値)を第3色として抽出する。また、パターンフラグがEの場合は、左上の画素の色を第1色、右上の画素の色を第2色、左下の画素の色を第3色、右下の画素の色を第4色として抽出する。すなわち、パターンフラグ(または比較結果)に基づいて、ブロックの色数が特定され(S605、S607、S609)、それぞれに応じたパターンフラグと色データとを出力する(S606、S608、S610、S611)。
図8は、図6のフローチャートを補足説明するための図である。図8を用いて、ここで出力されるデータを説明する。図8に示すように、例えばパターンフラグが0(すなわち4画素内が1色で構成されている)の場合には(S605でYES)、2色目以降は存在しないので、パターンフラグの4ビットと1色目の画素値(24ビット分の色データ)とを出力する(S606)。また、パターンフラグが1〜7(すなわち2色)の場合(S607でYES)には、その2色目が存在する画素の座標をパターンフラグより算出し、パターンフラグの4ビットと2色分の画素値(48ビット分の色データ)を出力する(S608)。出力データは、パターンフラグに続いて第1色目の画素値、第2色目の画素値の順で構成される。また、パターンフラグが8〜D(すなわち3色)の場合(S609でYES)、パターンフラグの4ビットと3色分の画素値(72ビット分の色データ)とを出力する(S610)。そして、パターンフラグがE(すなわち4色)の場合(S609でNO)、パターンフラグの4ビットと4色分の画素値(96ビット分の色データ)とを出力する(S611)。言い換えると、各ブロックから出力される色データは、ブロック内の座標(左上、右上、左下、右下の順に1、2、3、4)順に走査した場合に、ブロック内で出現していなかった色データが第1色から順に出力されることに相当する。
このように、2×2画素のブロック内の4色(96ビット)の入力データを4ビットのパターンフラグと、そこに存在する色数分だけ画素値を出力することで、比較的簡単な処理で出力データ量を削減することが可能になる。特に、2×2画素のブロック内で同色の画素が存在するブロック(すなわち各ブロック内の色数が少ないブロック)が多いラスタ画像の場合は、出力されるデータ量の圧縮率も大きくなる。また、パターンフラグを参照することで、そのブロック内の色数を特定することが可能になる。このような処理を画像ブロック全てに対して行うことで、画像データ全体を圧縮することが可能になる。
図6の処理フローにおいて、最後に、図3に示したページ単位のラスタ画像データの中に2×2画素の次のブロックが存在するかを確認する。ここで、存在するならば(S612でYes)、次のブロックに対して図8に示した入力データから出力データへの変換を繰り返し(S601〜S611)、存在しなければ(S612でNo)、ページ単位の圧縮処理を終了する。
次に、本実施形態の特徴であるラスタ画像データの減色圧縮処理を詳細に説明する。減色圧縮処理では、ブロック内の画素が数レベルの違いしかないのであれば同色と見なして、各ブロックで減色処理を行うことで、4色と判断されるブロックを減らし、圧縮率の向上を図る。
図9は、画像圧縮部212、252で実行されるS506の減色圧縮処理を詳細に説明するフローチャートである。図9を用いて、各ブロックの減色処理を行った後、前述したように2×2画素の取りうる組み合わせを踏まえて、画像圧縮を行う処理を説明する。
まず、処理対象となる2×2画素のブロックを入力し(S901)、4画素の画素値から1色へと減色処理を行う(S902)。ここでは、例えば4画素の平均画素値を算出することで1色への減色を実現する。つまり、その減色した画素値と入力の4画素の画素値との差分を算出し(S903)、誤差の大小を判定する(S904)。例えば、入力された各画素の画素値と減色後のRGB値との差の絶対値の和を取り、その値が閾値以下である場合には差が小さいと判断できる。差が小さいということは、そのブロック内での画素が数レベルの違いしかないので、同色とみなすことができる。従って、差が小さいと判定された場合には(S904でYes)、1色に減色すると判断し、減色処理を適用したことを示す減色フラグを生成する(S905)。その後、パターンフラグを0に特定し(S906)、その減色した1色の画素値とパターンフラグを出力する(S907)。
また、誤差が大きいと判定された場合には(S904でNo)、続いて2色へ減色処理を行う(S908)。ここでは、例えば4画素のうちRGB値の差が最も大きい2画素A、Bを抽出し、残りの2画素がA、Bどちらに近いかでクラスタリングし、その各クラスタにおいて平均値を求めることで、2色化する。そして、その2色化した画素値と入力の4画素の画素値との差分を計算し(S909)、誤差の大小を判定する(S910)。すなわち、各クラスタの平均値とそのクラスタリングに用いた各画素との差をそれぞれ算出して絶対値の和を取り、その値が閾値以下である場合には差が小さいと判定する。ここで、差が小さいと判定された場合には(S910でYes)、2色に減色すると判断し、減色処理を適用したことを示す減色フラグを生成する(S911)。その後、2色に減色した場合の画素値の位置に応じてパターンフラグを特定し(S912)、減色した2色の画素値とパターンフラグとを出力する(S913)。
また、ここでも誤差が大きいと判定された場合には(S910でNo)、続いて3色への減色処理を行う(S914)。ここでは、例えば4画素のうち最もRGB値の差の小さい2画素を抽出し、その2画素の値の平均値を求め、それ以外の2画素の画素値と合わせて3色へ減色する。そして、その3色化した画素値と入力の4画素の画素値との差分を計算し(S915)、誤差の大小を判定する(S916)。なお、平均値に用いた2画素以外の2画素については、入力画素と同じ画素値となるので、RGB値の差の小さい2画素の平均値と、その2画素の各画素値の差分によって誤差の大小を判定する。
判定した結果、差が小さいと判定された場合には(S916でYes)、3色に減色すると判断し、減色処理を適用したことを示す減色フラグを生成する(S917)。その後、3色に減色した場合の画素値の位置に応じてパターンフラグを特定し(S918)、減色した3色の画素値とパターンフラグを出力する(S919)。
更に、ここでも誤差が大きいと判定された場合には(S916でNo)、減色すると視覚的に問題が出るブロックと判断し、減色フラグを生成することなくパターンフラグをEに特定し(S920)、4画素全ての画素値とパターンフラグを出力する(S921)。
図9の処理フローにおいて、最後に、図3に示したページ単位のラスタ画像データの中に2×2画素の次のブロックが存在するかを確認する。ここで、存在するならば(S922でYes)、図8に示した入力データから出力データへの変換を繰り返し(S901〜S921)、存在しなければ(S922でNo)、ページ単位の減色圧縮処理を終了する。このように、図9の処理においては、ある解像度のページ単位の画像データにおいて、いずれかのブロックで減色処理が行われた場合には減色フラグが生成されることになる。
次に、このようにして求めたパターンフラグと色データとを、DMAC213、253がメモリに書き込む処理(メモリ格納処理)を行う。このとき、DMACではパターンフラグと、第1色のデータと、第2色、第3色、及び第4色のデータと、の書き込み位置を変える。DMACにはパターンフラグ書き込みのためのメモリ先頭アドレスと、第1色データの書き込みのためのメモリ先頭アドレスと、第2色以降のデータの書き込みのためのメモリ先頭アドレスの3つのアドレスを指定する。すなわち、各ブロックのパターンフラグはメモリ上のパターンフラグ格納部(パターンフラグを格納するためのメモリ領域)にまとめて格納されることになる。また、各ブロックの第1色(1色目)の色データ(色データの集合データ)は、メモリ上の第1色格納部(各ブロックの1色目の色データを格納するためのメモリ領域)にまとめて格納されることになる。更に、各ブロックの第2〜4色目の色データは、メモリ上の第2、3、4色格納部(各ブロックの2〜4色目の色データを格納するためのメモリ領域)にまとめて格納されることになる。上記に加え、当該データに対応付けられた減色情報として、減色フラグをメモリ空間上あるいはハードウェアレジスタとして別途保持する。
図10は、DMACによる画像データのメモリ空間への書き込み例を示す図である。なお、サイズがM×N画素のRGB各色8ビットの画像を圧縮部へ入力する場合、パターンフラグのデータが格納されるパターンフラグ格納部のデータサイズは、(M×N×4/8)/4バイトとなる。また、第1色のデータが格納される第1色格納部のデータサイズは、(M×N×24/8)/4バイトとなる。なお、4で除算している理由は、パターンフラグや第1色格納部は2×2画素のブロック毎に用意してあればよいからである。また、第2色、第3色、第4色のデータが格納される第2、3、4色格納部のデータサイズは、処理対象となるラスタ画像データに応じて異なる。これは、第2、3、4色が存在するブロック数が画像によって異なるためである。
ここで、図10に示すように、第1色書き込み先頭アドレス以降のメモリ領域(第1色格納部、および第2、3、4色格納部)に関しては、画素の色データがそのままのビット数で格納されることを利用して、圧縮データに対する画像処理が可能になる。すなわち、JPEG等の圧縮データとは異なり、圧縮データをデコードしてラスタ画像データに戻さなくても、各画素の色(画素値)を特定することができる。したがって、1画素入力1画素出力で完結する色処理、例えばLUTを用いた色変換やガンマ補正処理、行列演算を用いた色空間変換処理等を行う場合は、元のラスタ画像データに戻さずに、図8のように格納された画像データを直接処理することができる。図2に示した色処理部262で画素単位の画像処理を行う場合は、メモリ202上の第1色書き込み先頭アドレス以降の画素データをDMAC261経由で読み込み、画素単位での処理を済ませた後に、メモリ202上へ書き戻す。このとき、何らかの画素単位処理によって画素のビット数が変わらない場合には、メモリ202上の同じ場所へ上書きすることでメモリ202の節約も可能である。このように、圧縮データを直接用いることで、メモリバス上の転送効率が向上し、かつオリジナルのラスタ画像データの画素数よりも少ない数の色データに対して処理することになり、高速な処理が可能になる。
また、図10に示すように、画像データをパターンフラグと第1色とその他の色とに分け、離散的にメモリ上へ格納していることを利用して、第1色として保持されている低解像度の画像データをそのまま利用することが可能になる。これは例えば、MFPで蓄積したPDL画像データやスキャン画像データのプレビュー表示、ネットワーク送信などの機能を実現する際に利用可能である。具体的には、第1色格納部には、ラスタ画像データを2×2画素のブロックに分割して、各ブロックの左上の座標の画素をサンプリングした場合の画素値(色データ)がメモリ上に連続して存在することになる。したがって、例えば、プリント解像度が600dpiであったとしても、プレビューや送信時に300dpiやそれ以下で十分な場合に、300dpiの画像データをそのまま利用することが可能になる。このように、縮小されたラスタ画像データを得る必要がある場合には、第1色格納部に格納されている第1色の色データのみをまとめて抽出することで、簡単に半分のサイズのラスタ画像データを得ることができる。
更に、図10に示すように、画像データをパターンフラグと第1色とその他の色とに分け、離散的にメモリ上へ格納していることを利用して、必要最小限のメモリアクセスによって所望の解像度(画像サイズ)の画像データを生成することが可能になる。一例として、600dpiのラスタ画像データが図8のようなデータに変換されて蓄積されていた場合の縮小送信時について説明する。送信する画像の解像度として300dpiが指定された場合は、第1色格納部に格納されているデータをそのまま抽出して送信すればよい。また、解像度として400dpiなど、第1色格納部にサンプリングされている300dpiより大きい解像度が指定されている場合には、次のように処理する。すなわち、パターンフラグ格納部と第1色格納部と第2、3、4色格納部とに格納されているデータに基づき、圧縮データを一度展開し、公知の変倍処理を用いて変倍し、当該変倍された画像を送信する。また、300dpiより小さい送信解像度指定がされている場合には、第1色格納部のデータのみを用いて、指定の解像度へ変倍処理を行う。このように、必要な画像サイズに応じて切り替えながらデータの読み込みを行うようにすればよい。
このように、オリジナルの1/2サイズの画像を得ることができるのであれば、その画像を入力として再度圧縮を行うことも可能である。また、入力の画像データが高解像度になればなるほどそのサンプリング後の縮小画像には冗長性が残っており、多段で圧縮処理を行うことが可能になりまたそのときの圧縮率も十分期待できる。
次に、画像圧縮部212、252と対になる画像伸張部222、232を説明する。なお、画像伸張部222、232では、上述したようなパターンフラグと色データを、ラスタ画像データへ戻す処理を行う。メモリ202上に図10に示すように配置されている圧縮データのパターンフラグ書き込み先頭アドレス、第1色書き込み先頭アドレス、及び第2、3、4色書き込み先頭アドレスの3つのアドレスをDMAC221、231へ指定する。DMAC221、231は3つのアドレスからデータを読み出し、画像伸張部222、232へ転送する。
画像伸張部222、232では、まず4ビットのパターンフラグを解釈し、そのブロック内の色数を算出する。第1色データに加え、色数に応じて第2、3、4色データを読み出し、図6に示した各パターンフラグに対して予め定義されている色データの配置パターンにしたがって、第1色ならびに第2〜4色の色データを再配置する。このようにすることで、2×2画素ブロックを展開、復号する。
また、画像伸張部222、232で画像サイズを1/2にする場合には、前述したように、パターンフラグと2、3、4色データを必要としないので、DMAC221、231には第1色書き込み先頭アドレスのみ指定する。これにより、メモリ202から第1色データのみの読み込みが行われ、画像が構成される。このように処理することで、メモリバスの帯域を節約することが可能になる。
以上述べたように、第1の実施形態によれば、比較的単純な圧縮方式でメモリ容量やメモリバス帯域の節約が可能になるだけでなく、画素単位での画像処理や縮小変倍を行う場合の処理負荷も削減することが可能になる。
なお、第1の実施形態は、色データの配置を示すブロックのパターンとパターンフラグとを図7のように対応付けたが、本発明をこれに限定するものではない。例えば、2×2画素ブロックの右下画素の画素値が第1色となるように、色データの配置を示すパターンとパターンフラグとを対応付けて予め定義しても構わない。また、第1の実施形態では、ブロックのサイズとして2×2画素のサイズを用いて説明してきたが、本発明をこれに限定するものではない。また、圧縮の説明の際に画像データとしてRGB8ビットを例に説明してきたが、CMYKの色空間の画像データやGRAYスケールの画像データ、或いは各色成分が8ビット以外のビット数を持つ画像データであっても良い。
また第1の実施形態で説明した減色処理による非可逆圧縮の方法は一例であり、他の公知の減色処理を用いて実施することも可能である。例えば、公知の色差を求める別の手法で代替することも可能である。
また、圧縮の段数についてもたとえば2段階、3段階など複数回繰り返し圧縮することができる。
これまで説明してきたようにMFPにおいては画像の入力手段として、スキャナを用いたものやネットワークからのものなど多岐にわたり、その解像度もさまざまである。またその用途によっても種類が増える。例えば同じスキャナからの入力であっても、コピー用途のスキャンであれば600dpiといった比較的高い解像度となるが、ネットワークの送信やFAXであれば300dpiやそれ以下であることもある。また、PDLの入力であればそのプリンタ解像度に応じてドライバからユーザーが複数選択可能であり、通常600dpiや1200dpiや2400dpiなどが選べる。
このように、さまざまな解像度に応じて圧縮時の圧縮段数を切り替え最適化させることで、処理速度やデータサイズ、画質を最適化させることが可能になる。
例えば、PDLの場合、ワープロソフトで作成されたドキュメントを1200dpiでプリントする場合に対し2400dpiでプリントする場合では画像サイズが4倍になる。しかし、実際のコンテンツは同じものであり、2400dpiの画像データには1200dpiの画像データに対して冗長性が高い。そのため、2400dpiの画像が入力の場合には3段の圧縮処理を行って300dpiまで圧縮し、1200dpiの画像の場合には2段の圧縮処理を行って300dpiまで圧縮する。圧縮回数が多いことで画質の劣化やパフォーマンスに差は生まれるが、通常前述したように2400dpiのような高解像度の画像データは冗長性が高いため、同じPDLデータであればこの両者でそれほどデータサイズに差は生まれない。
同様に、スキャンの場合、1200dpiであれば2段、600dpiであれば1段の圧縮処理で300dpiまで圧縮するなど、その入力解像度に応じて圧縮の段数を切り替えることにより、データサイズとパフォーマンスの最適化を行うことが可能になる。
[第2の実施形態]
次に、図面を参照しながら第2の実施形態を詳細に説明する。第2の実施形態では、前述した実施形態におけるラスタ画像データの圧縮処理で、画像データに対するランダムアクセス性を高めたものである。なお、第2の実施形態でも、画像処理装置として、第1の実施形態と同様に、MFPを例に説明する。
前述したように、第1の実施形態で説明した圧縮処理は画像データに依存し、その圧縮データサイズが変わる可変長圧縮処理である。そのため、圧縮データに対してのランダムアクセス性はなく、圧縮画像データの一部(例えば、一部のオブジェクト)だけを切り出して処理するなどといった目的には向かない。
そこで、図11のフローチャートを用いて、第1の実施形態で説明した方法よりもランダムアクセス性を高めることに着目した圧縮方法を詳細に説明する。まず、図12に示すページ単位でラスタ画像データを入力する(S1101)。そして、画像データのページ単位に1画素のページ背景画素を設定する(S1102)。これは圧縮処理時の初期記憶ブロックとして用いるための画素データで、通常白(RGB各色8ビット画像であれば255、CMYK画像であれば0)が用いられる。次に、圧縮部の入力となる画像データを所定の大きさのブロックへ分割する(S1103)。第2の実施形態では、32×32画素とする。以下の説明では、これまでの2×2画素のブロックと区別するために、この複数ブロックで構成される矩形領域のことを「タイル」と呼ぶ。図12に示すように、1つのタイル中には、2×2画素ブロックが16×16個存在することになる。
次に、タイルに所定の固定長のヘッダ情報を付与する(S1104)。このヘッダ情報は、ページID、タイル座標、色空間、画素データのビット数、タイルのデータサイズ、属性情報の有無、圧縮フラグ等に減色フラグを加えた情報である。ここで、ページIDは、ページ単位に付与されるユニークなID番号である。タイル座標は、このタイルがページ単位のラスタ画像上どの位置にあるかを示す座標情報である。ここには、X座標とY座標の2次元で座標が記述される。色空間は、このタイルが、RGB画像なのかCMYK画像なのかGRAY−SCALE画像なのかを識別するための識別子を示す情報である。画素データのビット数は、タイル内の1画素当たりのビット長を示す情報である。データサイズは、このタイルの第1色のデータサイズと第2、3、4色のデータのデータサイズとを示すバイト単位の情報である。属性情報の有無は、画像データに文字や写真といった属性情報が画素単位で付与されているか否かを示す情報である。圧縮フラグは、このタイルが圧縮されたデータか、非圧縮のデータかまたそのとき何段回の圧縮が施されているかを示すフラグ(またはカウンタ)の情報である。減色フラグは、このタイルが減色処理を適用されたデータか、適用されていないデータか、適用された場合にはどれくらい(例えば何回)適用されたかを示すフラグの情報である。なお、この減色フラグに関しては、以降の実施形態においても後述する。
次に、タイル単位で減色情報である減色フラグを参照し、減色フラグに基づいて当該タイルを減色圧縮処理するか圧縮処理するかを切り替えて実行し、これをタイル単位で所望の解像度(画像サイズ)になるまで繰り返す(S1105〜S1109)。この一連の圧縮処理は、第1の実施形態で図5を用いて説明した圧縮処理(S504〜S508)と同様であり、その説明は割愛する。
そして、上述の結果を受けて圧縮されたタイルデータを、当該タイルのヘッダ情報と一緒に1つのデータにパッキングする(S1110)。このパッキングされたデータのデータ構造を図13に示す。これ以降、上述のヘッダ部分を含むデータの単位を「パケット」と呼ぶ。このようなパケットにするには、タイル単位で圧縮処理が終了し、データサイズが確定した後、第1色格納部と第2、3、4色格納部の間を詰めた状態でデータをパッキングする。すなわち、ヘッダと、前述したパターンフラグ格納部と、第1色格納部と第2、3、4色格納部とがタイル単位でパケットとしてデータ形成される。その後、DMACを経由してメモリ上へ出力する。次に、このパケットの座標とサイズとをリストとして列挙し、パケット管理テーブルとして作成(更新)する(S1111)。このパケット管理テーブルの一例を図14に示す。上述の処理を最後のタイルまで繰り返すことで(S1112でYES)、ページ単位のラスタ画像の圧縮処理を終了する。
なお、上述のタイル単位でデータをメモリへ書き出すと、図14に示すように、パケット毎にサイズが異なり、それぞれのパケットの先頭アドレスが飛び飛びになる。そのため、パケット管理テーブルを用いて任意の座標のパケットの先頭アドレスを探索する。したがって、先頭パケットの書き込みアドレスが既知であれば、パケット管理テーブルに記載されている座標までのデータサイズをオフセットとして任意のパケットの先頭アドレスを求めることが可能になる。例えば、図15に示すメモリ空間上で、第3パケットを読み込む場合は、第1、第2パケットのサイズ合計をパケット管理テーブルより求め、先頭パケットのアドレスに対してオフセットを付加することで第3パケットアドレスを算出する。そして、算出した第3パケットアドレスからデータを読み込むことで第3パケットのデータを取得することが可能になる。
このように、タイル単位に任意のデータへのアクセスが可能になるので、画像の部分的な処理が可能になる。例えば、画像の一部の領域を抽出して処理したい場合は、当該領域に対応するパケットのデータを取得して処理すればよい。そして、このように画像の一部の領域を抽出して処理する場合であっても、第1の実施形態で説明したように、圧縮されたデータを用いて処理を行うことができる。
また、タイル単位で多段の圧縮を施すことも可能である。このときのパケットのデータ構造としては図16のようになり、第1色格納部に対してデータが入れ子になる。多段の圧縮を施す場合には、第1の実施形態で説明したように、出力データの中の第1色のデータに対してさらに圧縮を施すことになる。従って、パケットのデータ構造としても第1色の格納部のデータが入れ子になるのである。
また、展開処理は、パケット毎にヘッダが付与されているので、各ヘッダに記載されている情報を用いて処理を行う。展開処理とはパケット化されているデータからタイル毎の画像データに伸張する処理のことである。まず、圧縮フラグが非圧縮を示している場合にはヘッダを取り除いたデータを出力し、そうでない場合には展開処理を行う。展開処理では、ヘッダよりパターンフラグ格納位置、第1色のデータ格納位置、及び第2、3、4色格納位置を求め、後は順次前述した実施形態と同様に、タイルの画像データへ展開する。
例えば、パターンフラグの位置は固定長のヘッダの後なので、オフセットを付加することで求めることができる。第1色のデータの格納位置は、タイルのサイズが32×32画素であれば、パターンフラグのサイズが32×32ビットで固定になるので、パターンフラグ位置からオフセットを付加することで求める。最後に、第2、3、4色のデータ格納位置は、第1色のデータが不定長なので、ヘッダに記載されている第1色サイズを参照し、第1色のデータ位置からオフセットを付加することで求める。
第1色のデータがさらに圧縮されている場合には、その段数毎ヘッダに記載されている次のデータサイズを参照し、そのサイズ分のオフセットを付加しながらデータを読み出し、展開処理を段を追って行う。
以上述べたように、第2の実施形態によれば、画像データに依存して、その圧縮データサイズが変わる可変長圧縮処理でも、圧縮データに対してのランダムアクセス性を高め、タイル単位で画像の一部だけ切り出して処理することが可能になる。
[第3の実施形態]
次に、図面を参照しながら第3の実施形態を詳細に説明する。第3の実施形態は、前述した第1および第2の実施形態におけるラスタ画像データの圧縮処理において、入力された画像データに対して適応的に減色処理を制御するものである。なお、第3の実施形態でも、画像処理装置として、第1の実施形態と同様に、MFPを例に説明する。
前述した図9のフローチャートに示す処理においては、減色処理が可能な場合には直ちに減色処理を実行して減色フラグを生成する処理を行っている。この場合、例えば減色情報として1回の減色を許容するという情報が設定されている際には、必ず1回目の減色圧縮処理で減色処理が行われ、減色フラグが生成されることになる。しかしながら、ページ単位またはタイル単位における圧縮処理では、1回目の圧縮処理では減色処理が有効に作用せず、2回目以降の圧縮処理において初めて減色処理が有効に作用する場合がある。第3の実施形態においては、減色処理が有効に作用したかどうかを考慮した処理を行うことで、適応的に減色処理を制御する例を説明する。
そこで、図17のフローチャートを用いて、入力された画像データに対して適応的に減色処理を制御することに着目した減色圧縮方法を詳細に説明する。ただし、図17に示す減色圧縮処理の流れは、前述した図9に示す減色圧縮処理の説明の流れと概ね同様であるため、その差分のみに着目して以下に説明する。
第1および第2の実施形態では、図9のように、減色情報である減色フラグは、減色処理を適用した時点で無条件に付加していた(S905、S911、S917)。これに対して、第3の実施形態では、図17のように、減色情報である減色フラグは、減色処理を適用した時点で、減色が有効に作用しているか否かを検出する(S1705、S1712、S1719)。すなわち、入力との差分が0より大きかった場合には(S1705、S1712、S1719でYes)、そこで初めて減色情報である減色フラグを付加し(S1706、S1713、S1720)、入力との差分が0であった場合は、減色フラグを付加しない。入力との差分が0である場合とは、換言すれば、入力画素に対する減色処理による画素値の削減効果がないことを意味する。従って、このような場合に減色処理が行われた旨の減色情報を生成してしまうと、以降の圧縮処理において減色処理によって画素値を削減できる状況であるにも関わらず、実際には減色が行われなくなってしまう。このため、十分な削減効果が得られない結果となってしまう場合がある。そこで、図17に示す条件を追加することで、ページ単位またはタイル単位で減色処理を適用した際に、当該領域における減色が有効に作用している場合のみを対象とした減色制御が実現できる。
前述した、入力との差分が0であるとの条件は、入力された高解像度の画像データの一部もしくは全部の領域が低解像度の画像オブジェクトで構成されている場合に、効果的な減色制御を実現するためのものである。同一の画像サイズを例にとると、低解像度の画像オブジェクトの部分では高解像度の画像オブジェクトの部分と比較して同一の画素値が連続することになる。従って、低解像度の画像オブジェクトの部分では減色処理が有効に作用しないことがある。具体的には、例えば、第2の実施形態のようにタイル単位で圧縮処理する場合において、1200dpi画像データの一部のタイル単位領域で300dpiの画像データのみが含まれる場合である。この時、図9のフローチャートの制御では、当該タイルに対して減色フラグが付加されるが、図17のフローチャートの制御では、当該タイルに対して減色フラグが付加されない。このように、領域毎の減色情報を正しく検出することで、画質劣化を最小限に抑えつつ非可逆圧縮による圧縮効率を高める目的で実施する減色制御を、より効果的に実現することができる。
次に、具体例として、図18に示す解像度の異なる8×8画素の画像A、画像B、画像Cを3ページとして入力したページ画像データに対して、第3の実施形態で説明した処理を用いて減色回数を上限1回で圧縮処理し、再び伸張処理した場合を説明する。なお、図18に示す画素値は、視覚的に分かりやすいように色差の大きいグラデーションによって強調表示しているが、実際に処理する画像データは、目視で確認できないレベルの色差の小さいグラデーションである。従って、仮に図18に示す8×8画素が1色で出力されたとしても、画質的な問題がないものとする。
図18に示すように、画像Aのページは、1回目の圧縮処理(600dpiから300dpi)が実行される。画像Aでは2×2のブロックで圧縮処理を行う場合のパターンとしては、全てが第1色のみのパターンとなる。すなわち、入力画素の平均値と各入力画素の画素値との差分が0であるので、1回目の圧縮処理においては減色処理が適用されずに第1色のみが出力データとして出力されることになる。次に、この圧縮された画像Aのデータ(すなわち、第1色の画素値のデータ)に対して2回目の圧縮処理(300dpiから150dpi)が実行される。この場合も同様に、ブロックのパターンとしては第1色のみのパターンとなるので、減色処理が適用されずに第1色のみが出力される。更に、圧縮された画像Aのデータに対して、3回目の圧縮処理(150dpiから75dpi)が実行される。この場合、第2色のパターンが初めて出現する。ここでは、第1色の画素値と第2色の画素値との差分が0ではないので減色処理が初めて適用される。減色処理の結果、第2色の色と平均化された第1色の色のみが出力される。以上の結果、600dpi相当の画像Aに対する画像圧縮(600dpiから75dpiに解像度を圧縮)の結果として計1個の色値(3回目の圧縮処理で出力された第1色)がメモリに格納される。なお、減色処理の結果として、第2色の色と平均化された第1色の色が出力されるとして説明したが、第1色の色をそのまま出力してもよい。この圧縮された画像を伸張すると、図18に示す300dpi相当の画像Aが出力されることになる。すなわち、非可逆の圧縮処理である減色処理を行うので、伸張した画像は圧縮前の画像を完全には再現できないものの、当初の解像度の半分の解像度を有する画像データを再現することができる。
同様に、画像Bのページについては、1回目の圧縮処理(1200dpiから600dpi)が実行される。この場合、ブロックのパターンとしては第1色のみのパターンとなるので、減色処理が適用されずに第1色のみが出力される。既に説明しているように本実施形態では、2×2のブロックの左上の画素について第1色としている点に留意されたい。次に、圧縮された画像Bのデータについて、2回目の圧縮処理(600dpiから300dpi)が実行される。この場合、第2色のパターンが初めて出現する。ここでは、第1色の画素値と第2色の画素値との差分が0ではないので、減色処理が初めて適用されて第2色と平均化された第1色のみが出力される。更に、圧縮された画像Bのデータについて、3回目の圧縮処理が実行され、減色処理済みなので減色処理が適用されずに第1色と第2色が出力される。以上の結果、1200dpi相当の画像Bに対する画像圧縮の結果として計2個の色値(3回目の圧縮処理で出力された第1色、第2色)がメモリに格納される。これを伸張すると、600dpi相当の画像Bが出力される。
同様に、画像Cは、1回目の圧縮処理が実行され、減色処理が初めて適用されて第2色と平均化された第1色のみが出力される。次に、画像Cは、2回目の圧縮処理が実行され、減色処理済みなので減色処理が適用されずに第1色と第2色が出力される。更に、画像Cは、3回目の圧縮処理が実行され、減色処理済みなので減色処理が適用されずに第1色と第2色が出力される。以上の結果、2400dpi相当の画像Cに対する画像圧縮の結果として計6個の色値(2回目の圧縮処理で出力された第2色、および、3回目の圧縮処理で出力された第1色、第2色)がメモリに格納される。これを伸張すると、1200dpi相当の画像Bが出力される。
以上のように、図18に示した例では、画像Aのページに対して、例えば、第1の実施形態のように1回目の圧縮処理のみ決め打ちで減色処理を適用した場合には、減色は有効に作用しない。しかしながら本実施形態によれば、3回目の圧縮時に1画素分の減色を達成できる。また、画像Bのページに対して、例えば、1回目の圧縮処理のみ決め打ちで減色処理を適用した場合に、減色されないのに対し、本実施形態によれば、2回目の圧縮時の4画素分の減色を達成できる。画像Cのページに対しては、例えば、1回目の圧縮処理のみ決め打ちで減色処理を適用した場合と全く同様に、本実施形態によっても、1回目の圧縮時の16画素分の減色を達成できる。このように、画像A、画像B、画像Cの各ページ画像データにおいて最も有効な解像度でのみ減色を適用することで、画質劣化の問題を最小限に抑制しつつ、減色による圧縮率を最大限に向上できる減色制御が実現できる。
上述した図18の例では、画像A、画像B、画像Cがそれぞれ1ページの画像データであるものとして説明した。図18の例は、第2の実施形態で説明したタイル化されたデータを扱う場合でも同様に説明が可能である。第2の実施形態ではタイル毎に減色フラグを有しているので、解像度の異なるオブジェクトが1ページ内に含まれている場合に特に適用的に減色処理を制御することができる。なお、第2の実施形態ではタイルは32×32画素として説明したが、図18では簡潔に表現するために8×8画素のタイルとしている点に留意されたい。図18の画像A、画像B、画像Cがタイルとして1ページ内に含まれている場合においても、上述したような画像A、画像B、画像Cがそれぞれページを構成している場合と同様に減色圧縮処理が行われる。
図18で示す画像A、画像B、画像Cがタイルとして1ページの画像データを構成する場合には、減色圧縮処理の結果は次のとおりとなる。まず、(8×8画素)×3画像=192画素のうち、例えば、1回目の圧縮処理のみ決め打ちで減色処理を適用した場合には、画像Cの1回目の圧縮の第2色に相当する16画素分の減色を達成できる。これに対し、適応的に減色処理を制御する本実施形態によれば、画像Aの3回目の圧縮の第2色の画素と、画像Bの2回目の圧縮の第2色の画素とを加えた21画素分の減色を達成できる。このように、画像A、画像B、画像Cのページ分割された各タイルのオブジェクト領域毎に最も有効な解像度でのみ減色を適用することで、画質劣化の問題を最小限に抑制しつつ、減色による圧縮率を最大限に向上できる減色制御が実現できる。
以上述べたように、第3の実施形態によれば、入力された画像データに対して減色が有効に作用した減色処理を適用した場合に限り、減色フラグを付加するように条件づけることで、更に減色処理を効果的に制御することが可能になる。
[第4の実施形態]
次に、図面を参照しながら第4の実施形態を詳細に説明する。第4の実施形態は、前述した実施形態におけるラスタ画像データの圧縮処理で、入力された画像データに対して減色の程度を鑑みて減色処理を制御したものである。なお、第4の実施形態でも、画像処理装置として、第1の実施形態と同様に、MFPを例に説明する。
前述したように、減色情報としての減色フラグは、ページ単位またはタイル単位で減色処理が適用されていない場合に0、適用された場合に1を保持するという簡易なフラグであるため、減色処理の適用回数を制御するために必ずしも十分な減色情報ではない。
そこで、図9および図17を参照しながら、入力された画像データに対して減色の程度を鑑みて減色処理を制御することに着目した減色圧縮方法を詳細に説明する。ただし、減色圧縮処理の流れは、前述した図9および図17に示す減色圧縮処理の説明の流れと同様であるため、その差分のみに着目して以下に説明する。
第4の実施形態では、図9の減色フラグ生成(S905、S911、S917)、および、図17の減色フラグ生成(S1706、S1713、S1720)において、減色フラグの代わりの減色情報として減色カウンタを保持する。この減色カウンタは、減色の程度を保持するカウンタであって、カウンタ値、例えば、減色が適用された累積回数や、減色時の色値の累積誤差などを保持する。すなわち、減色が適用された累積回数を保持する場合には、画質保持と圧縮率向上を両立するように、閾値Nを与え、減色処理を上限N回として減色処理を制御することができる。すなわち、色処理の適用回数が所定回数未満の場合には減色処理を実行するように制御することができる。また、減色時の色値の累計誤差を保持する場合には、画質保持と圧縮率向上を両立するように、閾値Nを与え、減色の程度を測る累計誤差の上限をNレベルとして減色処理を制御することができる。すなわち、累計誤差が予め定めた閾値未満である場合に限り減色処理を実行するように制御することができる。
以上述べたように、第4の実施形態によれば、入力された画像データに対して減色の程度を鑑みて、減色カウンタをカウントするように条件づけることで、更に減色処理を効果的に制御することが可能になる。
[他の実施形態]
また、本発明は、以下の処理を実行することによっても実現される。すなわち、前述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給してもよい。この場合、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して処理を実行する。