以下に添付図面を参照して、この発明に係る画像処理装置の一実施形態を詳細に説明する。図1は、この発明の実施形態による画像処理装置を適用可能な画像形成装置(カラープリンタとする)の機構部の構成例を示す。なお、本実施形態では、本発明に係る画像処理装置および画像処理方法をカラープリンタである画像形成装置に適用した例について説明するが、文字画像を含む画像に画像処理を施すものであれば、これに限定するものではない。例えば、本発明は、複写機、ファクシミリ、複合機などの画像処理装置にも適用することができる。
<実施形態に適用可能なプリンタの例>
図1に例示されるカラープリンタ100は、4色(Y、M、C、K)の画像をそれぞれ独立の作像系1Y、1M、1C、1Kで形成し、この4色の画像を合成する4ドラムタンデムエンジンタイプの画像形成装置である。各作像系1Y、1M、1C、1Kは、像担持体としての感光体、例えば小径のOPC(有機感光体)ドラム2Y、2M、2C、2Kを有し、このOPCドラム2Y、2M、2C、2Kを取り囲むように作像の上流側から帯電手段としての帯電ローラ3Y、3M、3C、3Kと、OPCドラム2Y、2M、2C、2K上の静電潜像をそれぞれ現像剤で現像してY、M、C、K各色のトナー像とする現像装置4Y、4M、4C、4Kと、クリーニング装置5Y、5M、5C、5Kと、除電装置6Y、6M、6C、6Kなどが配置されている。
各現像装置4Y、4M、4C、4Kの脇には、Yトナー、Mトナー、Cトナー、Kトナーをそれぞれ現像装置4Y、4M、4C、4Kへ補給するトナーボトルユニット7Y、7M、7C、7K(が配置されている。また、各作像系1Y、1M、1C、1Kは各々独立な光書き込み装置8Y、8M、8C、8Kが配置され、この光書き込み装置8Y、8M、8C、8Kはレーザ光源としてのレーザダイオード(LD)光源9Y、9M、9C、9Kや、コリメートレンズ10Y、10M、10C、10K、fθレンズ11Y、11M、11C、11K、といった光学部品、偏向走査手段としてのポリゴンミラー12Y、12M、12C、12K、折り返しミラー13Y、13M、13C、13K、14Y、14M、14C、14Kなどを有する。
各作像系1Y、1M、1C、1Kは垂直に配列され、その右側には転写ベルトユニット15がOPCドラム2Y、2M、2C、2Kに接する形で配置される。転写ベルトユニット15は、転写ベルト16がローラ17〜20に張架されて図示しない駆動源により回転駆動される。装置下側には転写材としての転写紙が収納された給紙トレイ21が配置され、装置上部に定着装置22、排紙ローラ23及び排紙トレイ24が配設される。
作像時には、各作像系1Y、1M、1C、1Kにおいて、それぞれ、OPCドラム2Y、2M、2C、2Kが図示しない駆動源により回転駆動され、帯電ローラ3Y、3M、3C、3KによりOPCドラム2Y、2M、2C、2Kが一様に帯電されて光書き込み装置8Y、8M、8C、8Kが各色の画像データに基づきOPCドラム2Y、2M、2C、2Kに光書込みを行うことによって、OPCドラム2Y、2M、2C、2K上に静電潜像が形成される。
このOPCドラム2Y、2M、2C、2K上の静電潜像はそれぞれ現像装置4Y、4M、4C、4Kにより現像されてY、M、C、K各色のトナー像となり、一方、給紙トレイ21から給紙ローラ25により転写紙が水平方向に給紙されて搬送系により作像系1Y、1M、1C、1K方向へ垂直に搬送される。この転写紙は、転写ベルト16に静電的に吸着保持されて転写ベルト16により搬送され、図示しない転写バイアス印加手段により転写バイアスが印加されてOPCドラム2Y、2M、2C、2K上のY、M、C、K各色のトナー像が順次に重ねて転写されることでフルカラー画像が形成される。このフルカラー画像が形成された転写紙は、定着装置22によりフルカラー画像が定着されて排紙ローラ23により排紙トレイ24へ排出される。
上述した、カラープリンタ100における各部の制御は、電装・制御装置26により行われる。
図2は、電装・制御装置26の一例の構成を示す。電装・制御装置26は、制御ユニット101、画像処理ユニット102およびメインメモリ103を有する。制御ユニット101と画像処理ユニット102とがバス220で接続される。制御ユニット101は、CPU(Central Processing Unit)110、CPU I/F(インターフェイス)111、メモリアービタ(ARB)112、DMAC(Direct Memory Access Controler)113、メモリコントローラ114、バスコントローラ115および通信コントローラ116を有する。
制御ユニット101において、メモリアービタ112に対して、CPU110がCPU I/F111を介して、また、メインメモリ103がメモリコントローラ114を介してそれぞれ接続される。メモリコントローラ114は、メインメモリ103に対するアクセスの制御を行う。さらに、メモリアービタ112に対して、DMAC113、通信コントローラ116およびROM(Read Only Memory)117が接続される。メモリアービタ112は、CPU110、DMAC113、通信コントローラ116およびバス220の、メインメモリ103に対するアクセスを調停する。さらにまた、メモリアービタ112に対して、バス220に対するアクセスの調停を行うバスコントローラ115が接続される。
CPU110は、CPU I/F111およびメモリアービタ112を介してROM117にアクセスし、ROM117に予め記憶されたプログラムを読み出して実行し、このカラープリンタ100の全体の動作を制御する。なお、ROM117は、CPU110に実行される各種のプログラムの他に、文字などのフォント情報が予め記憶される。
通信コントローラ116は、ネットワーク210を介して行われる通信を制御する。例えば、コンピュータ200から出力されたPDL(Page Description Language)データは、ネットワーク210を介して通信コントローラ116により受信される。通信コントローラ116は、受信したPDLデータを、メモリアービタ112およびメモリコントローラ114を介してメインメモリ103に転送する。
なお、ネットワーク210は、LAN(Local Area Network)などの所定の範囲内で通信を行うものでもよいし、インターネットなどより広範囲に通信可能なものでもよい。また、ネットワーク210は、有線通信に限らず無線通信を用いたものでもよいし、USB(Universal Serial Bus)やIEEE(Institute Electrical and Electronics Engineers)1394といったシリアル通信を行うものでもよい。
メインメモリ103は、多値CMYKバンドデータ格納領域120と多値CMYKページ符号格納領域121とを有する。多値CMYKバンドデータ格納領域120は、CMYK各版の多値のバンドデータが格納される。また、多値CMYKページ符号格納領域121は、CMYK各版それぞれの多値のバンドデータが画素単位で符号化されたページ符号が格納される。
また、後述するが、メインメモリ103は、例えばコンピュータ200から供給されたPDL(Page Description Language)データを格納するPDLデータ格納領域をさらに有する。
例えば、CPU110は、コンピュータ200から供給されたPDLデータに基づき描画を行いCMYK版それぞれの多値バンドデータを生成する。生成されたCMYK版それぞれの多値バンドデータは、メモリアービタ112を介してメインメモリ103の多値CMYKAバンドデータ格納領域120に格納される。
画像処理ユニット102は、例えばASIC(Application Specific Integrated Circuit)からなり、CMYK各版のプリンタエンジンに印字させる画像の画像処理を行う。画像処理ユニット102は、バスI/F131、符号化部132、復号部133、画像処理部134およびエンジンコントローラ135を有する。バスI/F131は、符号化部132および復号部133が接続され、符号化部132および復号部133のバス220に対する通信を調停する。
符号化部132は、メインメモリ103の多値CMYKバンドデータ格納領域120からバス220を介して転送された各版のバンドデータを予測符号化を用いて符号化して、各版毎に1本の符号列を生成する。符号化部132で生成されたこの符号列は、バスI/F131からバス220を介してメインメモリ103に供給され、多値CMYKページ符号格納領域121に格納される。
多値CMYKページ符号格納領域121に格納された1ページ分の符号列は、プリンタエンジン104の動作に同期して多値CMYKページ符号格納領域121から読み出され、バス220を介して画像処理ユニット102に供給される。この符号列は、画像処理ユニット102内のバスI/F131から復号部133に供給される。復号部133は、供給された符号列を復号し、画像処理部134に供給する。画像処理部134は、供給された画像データに対して例えば階調処理などの画像処理を施してエンジンコントローラ135に供給する。エンジンコントローラ135は、画像処理部134から出力された画像データに基づきプリンタエンジン104を制御し、印字を行う。
<メインメモリのフォーマット例>
図3は、メインメモリ103の一例のフォーマットを示す。メインメモリ103は、上述した多値CMYKバンドデータ格納領域120および多値CMYKページ符号格納領域121の他に、プログラム格納領域122、PDLデータ格納領域123およびその他の領域124を有する。プログラム格納領域122は、CPU110が動作するためのプログラムが格納される。PDLデータ格納領域123は、例えばコンピュータ200から供給されたPDLデータが格納される。その他の領域124は、上述した以外のデータが格納される。
図4は、図3における多値CMYKバンドデータ格納領域120の一例のフォーマットを示す。このように、多値CMYKバンドデータ格納領域120は、C版、M版、Y版およびK版の各版毎のプレーン構成とされ、各画素に対してそれぞれ8ビットが割り当てられる。すなわち、CMYKバンドデータは、各画素がそれぞれ8ビットのビット深度を持つ多値プレーン画像となっている。
<プリンタにおける画像処理の概略>
図5は、上述した構成を有するカラープリンタ100における画像処理を概略的に示す一例のフローチャートである。この図5のフローチャートを用い、上述した図2を参照しながら、カラープリンタ100の動作について概略的に説明する。
例えばコンピュータ200で生成されたPDLデータがネットワーク210を介して通信コントローラ116に受信され、メインメモリ103のPDLデータ格納領域123に記憶される(ステップS1)。CPU110は、メインメモリ103のPDLデータ格納領域123からPDLデータを読み出し、PDLを解析して(ステップS2)、解析結果に基づきCMYKのバンド画像を描画する(ステップS3)。
本実施形態においては、このステップS3のバンド画像の描画を、テキストデータやCGデータなどのグラフィクス画像といった高解像度が要求される画像と、写真画像や絵画の画像などの自然画像といった、解像度よりも階調を要求される画像とに対してそれぞれ別途に行う。
すなわち、CPU110は、ステップS2のPDL解析処理によりグラフィクス画像の描画コマンドを受け取ると、高解像度でグラフィクス画像の描画を行う(ステップS3A)。また、CPU110は、ステップS2のPDL解析処理により自然画像の描画コマンドを受け取ると、当該自然画像のソース画像を後述するように変換して描画を行う(ステップS3B)。これらステップS3AおよびステップS3Bにおける描画処理の詳細は、後述する。
なお、以下では、グラフィクス画像の描画の解像度が1200dpi(dot per inch)の高解像度、自然画像のソース画像の描画の解像度が600dpiの中解像度であるものとする。また、自然画像のソース画像は、例えばビット深度が8ビットの多値画像データとする。ここで、ソース画像は、描画コマンドによる描画を行う前のオリジナルの画像をいう。
ステップS3で描画されたCMYKのバンド画像によるCMYKバンドデータは、メインメモリ103の多値CMYKバンドデータ格納領域120に格納される(ステップS4)。このCMYKバンドデータは、上述したように、各画素が8ビットのビット深度を持つ多値プレーン画像データである。
符号化部132は、多値CMYKバンドデータ格納領域120からCMYKバンドデータを読み出して、平面予測方式、LOCO−I方式、Paeth方式といった予測符号化方式により符号化する(ステップS5)。これら平面予測方式、LOCO−I方式およびPaeth方式については、後述する。CMYKバンドデータが符号化された符号データは、メインメモリ103の多値CMYKページ符号格納領域121に格納される(ステップS6)。
復号部133は、多値CMYKページ符号格納領域121からCMYKバンドデータが符号化された符号データを読み出して復号し、復号されたCMYKバンドデータを画像処理部134に供給する(ステップS7)。画像処理部134は、復号部133から供給されたCMYKバンドデータに対して階調処理などの画像処理を施す(ステップS8)。画像処理されたCMYKバンドデータは、エンジンコントローラ135を介してプリンタエンジン104に供給される。プリンタエンジン104は、供給されたCMYKバンドデータに基づきプリントアウトを行う(ステップS9)。
<実施形態による描画処理の例>
次に、上述したステップS3のCMYK描画処理について、より詳細に説明する。例えば、図6に例示されるように、9440画素×13552画素からなる多値CMYK画像を、1200dpiの解像度で描画する場合を考える。この場合、1200dpiの解像度を有するグラフィクス画像301は、そのまま描画できる(図5のステップS3A)。一方、600dpiの解像度を有する自然画像302(ソース画像)は、画像の画素を拡大倍率に応じて複製した画素を用いて補間することにより拡大して、1200dpiの解像度で描画を行う(図5のステップS3B)。
このステップS3Bにおける自然画像の拡大に適用可能な拡大方法としては、ニアレストネイバー(Nearest Neighbor)法がある。ニアレストネイバー法は、例えば画像の拡大の場合には、拡大の際の補間を補間位置から最も近い位置にある画素と同一の画素値の画素を用いて行う補間方法である。
なお、以下では、ソース画像の解像度が描画のために変換された画像を、描画用画像と呼ぶ。
図7は、図5のフローチャートで説明したステップS3による一例の描画処理を、より詳細に示すフローチャートである。CPU110は、図5のステップS2でPDLデータを解析して得られた描画コマンドを読み込み(ステップS50)、読み込んだ描画コマンドがグラフィクス画像を描画するグラフィクス描画コマンドであるか否かを判定する(ステップS51)。若し、グラフィクス描画コマンドであると判定されたら、処理はステップS52に移行され、高解像度(例えば1200dpi)でグラフィクス画像の描画処理を行う。
一方、ステップS51で、グラフィクス描画コマンドではない、すなわち、自然画像を描画する自然画像描画コマンドであると判定された場合、処理はステップS53に移行され、後述する処理により、自然画像の描画処理が行われる。
ステップS52またはステップS53での処理が終了したら、処理はステップS54に移行され、1ページにおける全ての描画コマンドが処理されたか否かが判定される。若し、全ての描画コマンドが処理されていないと判定されたら、処理はステップS50に移行され、次の描画コマンドが読み込まれ、この次の描画コマンドに対する処理が行われる。ステップS54で全ての描画コマンドが処理されていると判定されたら、図5のステップS3の処理を抜け、処理が図5のステップS4に移行される。
図8は、図7におけるステップS53による自然画像の一例の描画処理をより詳細に示すフローチャートである。図7のステップS51で描画コマンドがグラフィクス描画コマンドではないと判定されたら、処理が図8のステップS60に移行される。ステップS60では、描画コマンドがソース画像に対して2倍以上の拡大描画を行うものであるか否かを判定する。
若し、ステップS60で描画コマンドが2倍以上の拡大描画を行うものであると判定されたら、処理はステップS61に移行され、描画コマンドの拡大率に従いソース画像をニアレストネイバー法で拡大描画する。すなわちこの場合、ニアレストネイバー法に従い、ソース画像を構成する各画素を拡大倍率に応じた数だけ複製して、元の画素の隣に挿入する。実際的な処理としては、例えば、ソース画像を構成する各画素の行および列を拡大倍率に応じた数だけ複製して、元の行および列の隣に順次挿入し、ソース画像の拡大を行うことが考えられる。
図9は、ステップS61による2倍以上の拡大描画を行う場合の例をより具体的に示す。図9の例では、水平幅および垂直幅がそれぞれ10画素のソース画像を2.3倍の拡大倍率で拡大し、水平幅および垂直幅がそれぞれ23画素の描画用画像に変換している。この場合、10画素×10画素からなるソース画像の任意の3列および3行がそれぞれ2だけ複製されて、残りの7列および7行がそれぞれ1だけ複製されることで、ソース画像が2.3倍に拡大された23画素×23画素の描画用画像を得ることができる。この場合、描画用画像は、画素値が等しい連続する2列および2行が7組、画素値が等しい連続する3列および3行が3組からなる。この描画用画像が多値CMYKバンドデータ格納領域120に書き込まれる。
一方、ステップS60で描画コマンドが2倍以上の拡大描画を行うものではないと判定されたら、処理はステップS62に移行される。ステップS62以降では、ソース画像を、一旦、指定された拡大倍率に対してさらに1/2倍に縮小し、その後、ニアレストネイバー法により2倍に拡大して当該指定された拡大倍率の描画用画像を得る。
先ず、ステップS62で、指定された拡大倍率に基づきソース画像を縮小する際の水平縮小率を算出する。式(1)により、縮小後のソース画像の水平幅HSを算出する。
HS=描画用画像の水平幅×1/2 …(1)
求められた縮小後のソース画像の水平幅HSから、式(2)により水平縮小率を算出する。なお、式(2)において、縮小前のソース画像の水平幅をHORGとする。
水平縮小率=HS/HORG …(2)
次のステップS63で、ステップS62で求めた水平縮小率でソース画像を縮小し、縮小後ソース画像を生成する。さらに次のステップS64で、縮小御ソース画像をニアレストネイバー法により2倍に拡大して描画して、描画用画像を生成する。生成された描画用画像は、多値CMYKバンドデータ格納領域120に格納される。
図10および図11を用いて、ステップS62〜ステップS64の処理をより具体的に説明する。図10−1および図10−2は、ソース画像を2倍未満、1倍以上の拡大率で拡大する場合の例であり、この例では10画素×10画素からなるソース画像を1.6倍の拡大倍率で拡大し、16画素×16画素の描画用画像を得ている。
図10−1は、本実施形態の方法を用いない場合の例を示す。この場合、例えばソース画像310の10列および10行の画素のうち任意の6列および6行について1の複製を行い、残りの4列および4行については複製を行わないで単独で用いることで、1.6倍の拡大倍率で拡大された描画用画像311を得ることができる。この場合、ソース画像310が自然画像であれば、隣接する画素と画素値が一致しない画素が多数、存在する可能性がある。このような画素は、予測処理による予測が的中しない可能性が大きく、予測符号化による圧縮率を低下させるおそれがある。
図10−2は、本実施形態の方法を用いた場合の例を示す。先ず、上述のステップS62において、式(1)に従い縮小後のソース画像320の水平幅HSを求める。描画用画像、すなわちソース画像320を拡大後の画像のサイズが16画素×16画素なので、式(1)は、下記のようになる。
HS=16×1/2=8(画素)
さらに、式(2)に従い、縮小後のソース画像321の水平幅HSから水平縮小率を算出する。ソース画像320の水平幅が10画素なので、式(2)は、下記のようになる。
水平縮小率=8/10=0.8
次に、上述のステップS63に従い、求められた水平縮小率でソース画像320を縮小する。例えば、ソース画像320の画素を水平縮小率に応じて列および行のそれぞれで間引くことで、ソース画像の縮小を行い、縮小後のソース画像321を生成する。縮小後のソース画像321を、上述のステップS64に従い、ニアレストネイバー法を用いて2倍に拡大して、16画素×16画素からなる描画用画像323を生成する。この場合、描画用画像323は、縮小後のソース画像321の全ての列および行が1ずつ複製され、元の列および行に対して連続して挿入された画像となる。この場合、ソース画像320が自然画像であっても、少なくとも隣接する2画素毎に画素値が互いに等しくなり、予測符号化により高い圧縮率を得ることができる。
図11−1および図11−2は、ソース画像を縮小、すなわち1倍以下の拡大倍率で拡大する場合の例であり、この例では10画素×10画素からなるソース画像を0.8倍に縮小し、8画素×8画素の描画用画像を得ている。
図11−1は、本実施形態の方法を用いない場合の例を示す。この場合、例えばソース画像330の10列および10行の画素のうち任意の2列および2行を間引くことで、8画素×8画素の描画用画像331を得ることができる。この方法によれば、描画用画像331の列および行の画素値が全て異なる可能性があり、予測符号化による圧縮率を低下させるおそれが大きい。
図11−2は、本実施形態の方法を用いた場合の例を示す。先ず、上述のステップS62において、式(1)に従い縮小後のソース画像の水平幅HSを求める。描画用画像、すなわちソース画像340を拡大(縮小)後の画像のサイズが8画素×8画素なので、式(1)は、下記のようになる。
HS=8×1/2=4(画素)
さらに、式(2)に従い、縮小後のソース画像の水平幅HSから水平縮小率を算出する。ソース画像の水平幅が10画素なので、式(2)は、下記のようになる。
水平縮小率=4/10=0.4
次に、上述のステップS63に従い、求められた水平縮小率でソース画像を縮小する。例えば、ソース画像の画素を水平縮小率に応じて列および行のそれぞれで間引くことで、ソース画像の縮小を行い、縮小後のソース画像341を生成する。縮小後のソース画像341を、上述のステップS64に従い、ニアレストネイバー法を用いて2倍に拡大して、8画素×8画素からなる描画用画像342を生成する。この場合、描画用画像343は、縮小後のソース画像341の全ての列および行が1ずつ複製され、元の列および行に対して連続して挿入された画像となる。
この例でも、図10−2を用いて説明した2倍以下、1倍以上の拡大倍率の場合と同様に、描画用画像342において少なくとも隣接する2画素毎に画素値が互いに等しくなり、予測符号化により高い圧縮率を得ることができる。
ここで、グラフィクス画像の描画の解像度が1200dpi、自然画像の描画の解像度が600dpiと互いに異なるため、1の画像データに合成した際に、グラフィクス画像と自然画像との間に隙間が生じてしまうおそれがある。例えば解像度が、600dpiで描画された自然画像のバッファにおける座標を、解像度が1200dpiで描画されたグラフィクス画像のバッファにおける座標に対応させた場合について考える。この場合、自然画像の座標は、グラフィクス画像の座標に対して2画素単位の設定となり、画像の形状によっては、これらの画像の間に隙間が生じてしまう可能性がある。
そこで、本実施形態においては、ソース画像を本実施形態の方法により拡大または縮小して得られた描画用画像は、多値CMYKバンドデータ格納領域120に対して、ソース画像よりも高解像度であるグラフィクス画像の解像度に従ったアドレスで書き込まれる。
一例として、図12に例示されるように、例えば600dpiの解像度を持つソース画像352をニアレストネイバー法により2倍以上の拡大倍率で拡大して描画用画像351を生成する場合を考える。この場合、生成された描画用画像351は、多値CMYKバンドデータ格納領域120に対し、グラフィクス画像の描画解像度である1200dpiで描画位置が指定されて書き込まれる。このように描画用画像の描画位置を指定することで、グラフィクス画像と自然画像とが隣接または重なる場合であっても、グラフィクス画像と自然画像との間に隙間が生じることがない。
上述したような本実施形態による描画処理は、例えば、CPU110上で実現される機能の一つである描画処理機能により実行される。図13は、この描画処理機能を実行するための描画処理部700の一例の構成を示す機能ブロック図である。描画処理部700は、縮小処理部701、拡大処理部702および描画部703を有する。これら描画処理部700を構成する各部は、ROM117や、メインメモリ103のプログラム格納領域122に格納されたプログラムがCPU110上で実行されることで実現される。
縮小処理部701は、上述したように、指定された拡大倍率に応じてソース画像を縮小し、縮小ソース画像を生成する。拡大処理部702は、上述したように、指定された拡大倍率に応じてソース画像または縮小ソース画像を拡大して描画用画像を生成する。描画部703は、生成された描画用画像を多値CMYKバンドデータ格納領域120に対して描画する。
<符号化処理の概略>
次に、上述したステップS5の予測符号化処理について、より詳細に説明する。図14は、本実施形態による符号化部132の一例の構成を示す。符号化部132において、メインメモリ103の多値CMYKバンドデータ格納領域120から、画像読み込み部400によりCMYK各版毎の多値CMYKバンドデータが読み出される。このとき、CMYK各版毎の多値CMYKバンドデータは、図15に例示されるように、画像読み込み部400によりスキャンライン毎に順次、画素単位で多値CMYKバンドデータ格納領域120から読み出される。
ラインメモリ制御部401は、画像読み込み部400により画素単位で読み出された多値CMYKバンドデータは、ラインメモリ制御部401によりラインメモリ402に格納される。ラインメモリ402は、少なくとも2ライン分の多値CMYKバンドデータを格納可能とされており、今回供給されたデータを格納すると共に、直前に格納した1ライン分のデータを保持するように、ラインメモリ制御部401に制御される。
例えば、ラインメモリ402は、それぞれ1ライン分の画素を格納可能な第1および第2の領域を有し、1ライン分の画素データの符号化が終了すると、この符号化が終了した領域の画素データを保持し、他方の領域に次のラインの画素データを書き込むように制御される。
ラインメモリ制御部401の制御により、ラインメモリ402から、符号化対象の画素(以下、注目画素と呼ぶ)の画素データと、注目画素の周辺3画素の画素データが読み出され、予測処理部403に渡される。ここでラインメモリ402から読み出される周辺3画素は、注目画素に近接する、既に符号化が終了した画素である。より具体的には、図16に例示されるように、注目画素のスキャン順で直前の画素aと、当該注目画素が属する現ラインに対してスキャン順で直前の前ライン、すなわち当該注目画素が属するラインの直上のラインにおいて当該注目画素の直上に位置する画素bおよび画素bのスキャン順で直前の画素cである。
なお、以下では、符号化対象である注目画素が属するラインを現ライン、現ラインに対してスキャン順で直前のラインを前ラインと呼ぶ。
予測処理部403は、ラインメモリ制御部401から渡された画素a、画素bおよび画素cに基づき注目画素の画素値を予測する。本実施形態では、予測処理部403において、後述する平面予測方式、LOCO−I(LOw COmplexity LOssless COmpression for Images)方式またはPaeth方式を用いて注目画素の画素値を予測する。平面予測方式は、極めて簡易な方法により注目画素の画素値を予測することができる。一方、LOCO−I方式またはPaeth方式は、平面予測方式と比較して、より高い精度で予測値を求めることが可能である。注目画素の画素値と、予測処理部403で当該注目画素の画素値を予測した予測値とが予測誤差処理部404に渡される。
なお、注目画素がラインのスキャン順で先頭画素である場合、ならびに、現ラインがスキャン順で先頭のラインである場合は、平面予測値が0であるものとする。
予測誤差処理部404は、注目画素の画素値と、予測処理部403で求められた平面予測値との差分である予測誤差値を算出する。ランレングス処理部405は、予測誤差処理部404で算出された予測誤差値が「0」である場合に、ランレングス値を1だけ増加させる。一方、予測誤差値が「0」ではない場合は、予測誤差値とランレングス値と注目画素の画素値とを符号フォーマット生成処理部406に渡し、その後、ランレングス値をリセットする。
符号フォーマット生成処理部406は、ランレングス生成処理部405から渡されたランレングス値と、予測誤差値とをそれぞれ後述する符号フォーマットに従い符号化する。また、詳細を後述するように、予測誤差値が差分符号で表現可能な範囲外であれば、注目画素の画素値そのものを符号として用いる。符号フォーマット生成処理部406で生成された符号は、符号書き込み部407に渡され、メインメモリ103のページ符号格納領域121に書き込まれる。
<予測処理の例>
ここで、予測処理部403で用いられる予測方式について説明する。上述したように、本実施形態では、符号化済みの画素a、bおよびcの画素値から注目画素の画素値を予測する予測処理に、平面予測方式、LOCO−I方式またはPaeth方式を用いる。
先ず、平面予測方式について説明する。平面予測方式は、図17に例示されるように、現ラインにおける、注目画素の直前に符号化された画素aと、前ラインにおいて注目画素および画素aそれぞれの直上に隣接する画素bおよびcとを用いて、下記の式(3)の計算を行い、注目画素に対する予測値を求める。
予測値=a+b−c …(3)
次に、LOCO−I方式について説明する。LOCO−I方式は、画素cの画素値と画素aおよび画素bの画素値とを比較した結果に応じて、予測値の算出方法を切り替える。図18は、LOCO−I方式による予測処理の例を示すフローチャートである。最初のステップS30で、画素cの画素値が画素aの画素値以上であって、且つ、画素cの画素値が画素bの画素値以上であるか否かが判定される。若し、画素cの画素値がこの条件を満たしていると判定されたら、処理はステップS31に移行され、画素aの画素値と画素bの画素値とが比較され、値が小さい方の画素値が予測値とされる。
一方、ステップS30で、画素cの画素値が上述の条件を満たしていない、すなわち、画素cの画素値が画素aの画素値未満であるか、または、画素cの画素値が画素bの画素値未満であると判定されたら、処理はステップS32に移行される。ステップS32では、画素cの画素値が画素aの画素値以下であって、且つ、画素cの画素値が画素bの画素値以下であるか否かが判定される。若し、画素cの画素値がこの条件を満たしていると判定されたら、処理はステップS33に移行され、画素aの画素値と画素bの画素値とが比較され、値が大きい方の画素値が予測値とされる。
一方、ステップS32で、画素cの画素値が上述の条件を満たしていない、すなわち、画素cの画素値が画素aの画素値を超えるか、または、画素cの画素値が画素bの画素値を超えると判定されたら、処理はステップS34に移行される。これは、換言すれば、画素aおよび画素bのうち何れか一方の画素値が画素cの画素値を超え、他方の画素値が画素cの画素値未満であることを意味する。ステップS34では、画素a、bおよびcの画素値について上述した式(3)の演算を行い、得られた値を予測値とする。
次に、Paeth方式について説明する。図19は、Paeth方式による予測処理の例を示すフローチャートである。Paeth方式は、各画素a、bおよびcの単純な線形関数を計算し、各画素a、bおよびcのうち計算された値に最も近い値を予測値として選択する。より具体的には、上述の式(3)で値pを求め、求めた値pと、各画素a、bおよびcそれぞれの画素値との差分絶対値pa、pbおよびpcを算出する。算出されたこれら差分絶対値pa、pbおよびpcの大小関係に基づき、各画素a、bおよびcから予測値を選択する。
最初のステップS40で、上述の式(3)により、画素a、bおよびcの画素値から値pが計算される。そして、次のステップS41、ステップS42およびステップS43で、値pと各画素画素a、bおよびcそれぞれの画素値との差分絶対値pa、pbおよびpcが求められる。
なお、図19において、演算子absは、括弧内の値の絶対値を求めることを示す。また、以下では、煩雑さを避けるために、差分絶対値pa、pbおよびpcをそれぞれ値pa、pbおよびpcと呼ぶ。
ステップS43までの処理により値pa、pbおよびpcが求められると、処理はステップS44に移行される。ステップS44では、値paと値pbおよび値pcとが比較され、値paが値pb以下であって、且つ、値paが値pc以下であるか否かが判定される。若し、値paがこの条件を満たしていると判定されたら、処理はステップS45に移行され、画素aの画素値が予測値とされる。
一方、ステップS44で、値paが値pb以下であって、且つ、値paが値pc以下ではない、すなわち、値paが値pbを超えるか、または、値paが値pcを超えると判定されたら、処理はステップS46に移行される。ステップS46では、値pbと値paおよび値pcとが比較され、値pbが値pa以下であって、且つ、値pbが値pc以下であるか否かが判定される。若し、値pbがこの条件を満たしていると判定されたら、処理はステップS47に移行され、画素bの画素値が予測値とされる。
一方、ステップS46で値pbが値pa以下であって、且つ、値pbが値pc以下ではない、すなわち、値pbが値paを超えるか、または、値pbが値pcを超えると判定されたら、処理はステップS48に移行され、画素cの画素値が予測値とされる。
ここで、図20〜図22を用いて、上述した本実施形態に適用可能な予測方式の特性について考察する。図20−1および図20−2は、平面予測方式による予測例を具体的な数値を用いて示す。図20−1は、水平方向に相関が高い画像の例を示す。図20−1の例では、水平方向に並ぶ画素bおよび画素cの画素値がそれぞれ「100」であり、画素aおよび注目画素の画素値がそれぞれ「20」となっている。平面予測方式によれば、上述した式(3)により、注目画素の画素値の予測値=a+b−c=20+100−100=20となる。予測値が注目画素の画素値と一致し、注目画素の画素値に対する予測誤差が「0」となる。
図20−2は、垂直方向に相関が高い画像の例を示す。図20−2の例では、垂直方向に並ぶ画素aおよび画素cの画素値がそれぞれ「80」であり、画素bおよび注目画素GDATAの画素値がそれぞれ「30」となっている。平面予測方式によれば、上述した式(3)により、注目画素の予測値=80+30−80=30となる。予測値が注目画素の画素値と一致し、この場合でも、注目画素の画素値に対する予測誤差が「0」となる。
図21−1および図21−2は、LOCO−I方式による予測例を具体的な数値を用いて示す。画素a、bおよびc、ならびに、注目画素の画素値は、それぞれ、上述の図20−1および図20−2と同一としてある。図21−1の水平方向に相関が高い例の場合、上述の図18のフローチャートを参照し、画素値が画素cと画素bとで等しく、画素cと画素aとでは画素cの画素値の方が大きいので、ステップS30の判定により処理がステップS31に移行される。画素aと画素bとでは画素aの方が画素値が小さいので、予測値が画素aの画素値である「20」とされる。注目画素の画素値は「20」であるので、予測誤差が「0」となる。なお、図中、演算子minは、括弧内に併記される値のうち小さい方を選択することを示す。
図21−2の垂直方向に相関が高い画像の例の場合、上述の図18のフローチャートを参照し、画素値が画素aと画素cとで等しく、画素cと画素bとでは画素cの画素値の方が大きいので、ステップS30の判定により処理がステップS31に移行される。画素aと画素bとでは画素bの画素値の方が小さいので、予測値が画素bの画素値である「30」とされる。注目画素の画素値は「30」であるので、予測誤差が「0」となる。
図22−1および図22−2は、Paeth方式を用いて予測を行う例である。画素a、bおよびc、ならびに、注目画素の画素値は、それぞれ、上述の図20−1および図20−2と同一としてある。
図22−1の水平方向に相関が高い画像の例の場合、上述の図19のフローチャートを参照し、画素aの画素値が「20」、画素cおよび画素bの画素値がそれぞれ「100」となっているので、ステップS40で画素a、bおよびcの画素値から値pを算出すると、値p=20+100−100=20となる。この値pを用いてステップS41〜ステップS43で値pa、pbおよびpcを求めると、値pa=0、値pb=80、値pc=80となる。値paは、値pbおよび値pc以下であるので、ステップS44の判定により値a=20が予測値とされる。注目画素の画素値は「20」であるので、予測誤差が「0」となる。
図22−2の垂直方向に相関が高い画像の例の場合、上述の図19のフローチャートを参照し、画素aおよび画素cの画素値がそれぞれ「80」、画素bの画素値が「30」となっているので、ステップS40で画素a、bおよびcの画素値から値pを算出すると、値p=80+30−80=30となる。この値pを用いてステップS41〜ステップS43で値pa、pbおよびpcを求めると、値pa=50、値pb=0、値pc=50となる。値paは、値pbより大きいので、ステップS44の判定により処理がステップS46に移行される。値pbは、値paおよび値pcより小さいので、ステップS46の判定により値b=30が予測値とされる。注目画素の画素値は「30」であるので、予測誤差が「0」となる。
このように、平面予測方式、LOCO−I方式およびPaeth方式は、何れも、画像中の縦方向または横方向の相関が高い場合に、予測誤差が「0」となることが分かる。
<符号フォーマット>
次に、図23および図24を用いて、符号フォーマット生成処理部406で生成される符号の一例のフォーマットについて説明する。本実施形態においては、予測誤差値とランレングス値とをそれぞれ符号化する。そして、図24に例示されるように、符号化された予測誤差値(予測誤差符号と呼ぶ)の後ろに符号化されたランレングス値(ランレングス符号と呼ぶ)を接続し、予測誤差符号およびランレングス符号の組を単位として符号列を生成する。
図23−1は、予測誤差符号の一例の符号フォーマットを示す。本実施形態では、予測誤差値は、値が大きいほど頻度が低くなるものとしてハフマン符号化される。このとき、予測誤差値を、段階的に設定された範囲に対してグループ分けし、グループ毎に異なる符号長が割り当てられるように符号化を行う。グループの識別は、生成されたハフマン符号の先頭から、グループ数に応じたビット数分の符号を用いて行う。本実施形態では、予測誤差値を、3ビットをグループの識別用に用いる4のグループと、グループ識別用として1ビットを用い、画素値をそのまま符号として用いる1のグループとの5グループに分類している。
以下では、グループの識別に用いるビットをグループ識別ビットと呼び、このグループ識別ビットに付加されるビットを付加ビットと呼ぶ。3ビットを用いたグループ識別ビットと付加ビットとで、予測誤差値毎にユニークなハフマン符号が構成される。
本実施形態では、予測誤差値Peに対して例えば次のように範囲を設定し、予測誤差値Peをグループ#0〜グループ#7の8グループに分類する。
グループ#0(符号長4ビット):Pe=1,Pe=−1
グループ#1(符号長6ビット):−5≦Pe≦−2,2≦Pe≦5
グループ#2(符号長7ビット):−13≦Pe≦−6,6≦Pe≦13
グループ#3(符号長8ビット):−29≦Pe≦−14,14≦Pe≦29
グループ#4(符号長9ビット):Pe≦−30,30≦Pe
また、各グループのグループ識別ビットと、付加ビットのビット長とを、例えば下記のように設定する。
グループ#0:グループ識別ビット=「000」,付加ビット長=1ビット
グループ#1:グループ識別ビット=「001」,付加ビット長=3ビット
グループ#2:グループ識別ビット=「010」,付加ビット長=4ビット
グループ#3:グループ識別ビット=「011」,付加ビット長=5ビット
グループ#4:グループ識別ビット=「1」,付加ビット長=8ビット
以上により、各グループの符号長は、下記のようになる。
グループ#0:符号長=4ビット
グループ#1:符号長=6ビット
グループ#2:符号長=7ビット
グループ#3:符号長=8ビット
グループ#4:符号長=9ビット
ここで、グループ#4の、注目画素の予測誤差値が「−29」より小さいか、若しくは、「29」より大きい場合は、ハフマン符号を用いずに、当該注目画素の画素値をそのまま付加ビットとして用いる。これは、予測誤差値の符号長が8ビットよりも大きくなり圧縮率が低下してしまうことを防止するためである。このグループ#4による、グループ識別ビットと画素値をそのまま用いた付加ビットとからなる符号を、PASS符号と呼ぶ。PASS符号は、予測誤差符号と同様に、ランレングス符号の前に接続される。
図23−2は、ランレングス符号の一例の符号フォーマットを示す。本実施形態では、ランレングス値は、値が小さいほど短い符号長が割り当てられるようにハフマン符号化され、ランレングス値が「1」の場合には、1ビットの符号長が割り当てられ、符号「0」に符号化される。ランレングス値が「2」の場合には、2ビットの符号長が割り当てられ、符号「10」に符号化される。また、ランレングス値が「3」または「4」の場合は、4ビットの符号長が割り当てられ、それぞれ符号「1100」または「1101」に符号化される。
ランレングス値が「5」以上の場合、4ビットの符号長を持つ符号「1111」の後ろに所定符号長の数値部を接続した形式に符号化される。数値部は、図23−2の下段に示されるように、例えば先頭に1ビットのヘッダを含む4ビットの符号長を有する、最大で4フレームからなる。すなわち、ランレングス値は、最大で16ビットの符号長を有する。ランレングス値を示す符号が3ビット毎に区切られ、各フレームのヘッダを除く3ビットに対し、上述の符号「1111」側がMSBとなるように詰め込まれる。図23−2の例では、フレームの最大数が4個とされているので、ランレングス値が「516」まで表現可能とされている。ランレングス値が「5」の場合は、フレームを省略することができる。
なお、ヘッダは、あるフレームに次のフレームが続くか否かを示す。例えば、ヘッダの値が「0」で次のフレームがあることを示し、ヘッダの値が「1」でそのフレームで終了することを示す。
図23−3は、ラインの先頭であることを示すラインヘッダ符号の例を示す。この例では、ラインヘッダ符号は、符号「1110」に固定的とされ、予測誤差符号の前に配置される。
<符号化処理の詳細>
図25は、本実施形態において符号化部132で行われる一例の符号化処理を示すフローチャートである。なお、この図25のフローチャートの処理に先んじて、ランレングス値が予め「1」にリセットされているものとする。
ステップS100で、画像読み込み部400は、メインメモリ103の多値CMYKバンドデータ格納領域120から処理対象の1画素(注目画素GDATAとする)を読み出す。読み出された注目画素GDATAは、ラインメモリ制御部401の制御により、ラインメモリ402の現ラインを書き込む領域に書き込まれる(ステップS101)。なお、以下では、ラインメモリ402の現ラインを書き込む領域を現ライン領域、前ラインが書き込まれている領域を前ライン領域と呼ぶ。
次のステップS102で、注目画素GDATAがラインの先頭の画素であるか否かが判定される。若し、ラインの先頭の画素であると判定されたら、処理はステップS103に移行されてラインヘッダ符号の符号化が行われラインヘッダ符号が出力される。そして、ステップS104で当該注目画素GDATAの画素値によりPASS符号の符号化が行われ、PASS符号が出力される。ステップS104でPASS符号の符号化が行われると、処理がステップS100に戻され次の画素が注目画素GDATAとされる。
一方、ステップS102で注目画素GDATAがラインの先頭の画素ではないと判定されたら、処理はステップS105に移行される。ステップS105では、ラインメモリ402から注目画素GDATAの周辺3画素a、bおよびcの画素データを読み出し、これら画素a、bおよびcの画素値を用いて平面予測方式、LOCO−I方式またはPaeth方式などの予測方式により注目画素GDATAの画素値を予測する。そして、次のステップS106で、注目画素GDATAの画素値からステップS105で予測された予測値を減じて、注目画素GDATAに対する予測値の誤差(予測誤差値)を求める。
ステップS106で予測誤差値が求められると、処理はステップS107に移行され、注目画素GDATAがラインの終端の画素であるか否かが判定される。若し、ラインの終端の画素ではないと判定されたら、処理はステップS108に移行される。ステップS108では、予測誤差値が「0」以外の値であるか、または、ランレングス値が図23−2を用いて説明したランレングス符号の上限である値「516」を超えているか否かが判定される。
ステップS108で、若し、ランレングス値が値「516」以下であり、且つ、予測誤差値が「0」であると判定されたら、処理はステップS109に移行され、ランレングス値に値「1」が加算される。そして、処理がステップS100に戻され、次の画素が注目画素GDATAとされる。
一方、ステップS108で、予測誤差値が「0」以外の値であるか、または、ランレングス値が値「516」を超えていると判定されたら、処理はステップS110に移行される。ステップS110では、ランレングス値が上述の図23−2で示した符号化フォーマットに従い符号化されてランレングス符号が出力され、処理がステップS111に移行される。
ステップS111では、予測誤差値の絶対値が「29」を超えるか否かが判定される。若し、超えると判定されたら、処理がステップS112に移行され、上述の図23−1で示した符号化フォーマットに従い注目画素GDATAの画素値をそのまま符号として用いるPASS符号の符号化を行い、PASS符号を出力する。一方、ステップS111で予測誤差値の絶対値が「29」以下であると判定されたら、処理はステップS113に移行され、上述の図23−1で示した符号化フォーマットに従い注目画素GDATAに対する予測誤差値が符号化され、予測誤差符号が出力される。
ステップS112またはステップS113での符号化処理が終了すると、処理はステップS114に移行され、ランレングス値が「0」にリセットされる。ランレングス値がリセットされると、処理はステップS100に戻され、次の画素が注目画素GDATAとされる。
上述のステップS107で、注目画素GDATAがラインの終端の画素であると判定されたら、処理はステップS115に移行される。ステップS115では、注目画素GDATAに対する予測誤差値が「0」以外の値であるか否かが判定される。
若し、ステップS115で予測誤差値が「0」以外の値であると判定されたら、処理はステップS116に移行される。この場合、ステップS116においてランレングス値が符号化されランレングス符号が出力されると共に、次のステップS117で、注目画素GDATAの画素値がそのまま用いられてPASS符号の符号化が行われ、PASS符号が出力される。さらに、次のステップS118でランレングス値が「1」にリセットされ、この値「1」のランレングス値がステップS119で符号化される。
一方、ステップS115で予測誤差値が「0」であると判定されたら、処理はステップS120に移行される。ステップS120では、ランレングス値に「1」が加算される。そして、次のステップS121で、ランレングス値が上述の図23−2で示した符号化フォーマットに従い符号化され、ランレングス符号が出力される。
ステップS119またはステップS121でのランレングス値の符号化が終了したら、処理がステップS122に移行される。ステップS122では、ラインメモリ402における前ライン領域および現ライン領域が切り替えられる。すなわち、ラインメモリ制御部401は、ラインメモリ402における符号化済みのラインが格納されている前ライン領域を現ライン領域に切り替え、切り替えられた現ライン領域に対して次に符号化を行うラインの画素データが格納されるようにする。それと共に、ラインメモリ制御部401は、ラインメモリ402における現在の注目画素GDATAの属するラインが格納されている現ライン領域を、符号化済みの前ラインが格納される前ライン領域に切り替える。
ステップS122でラインメモリ402の領域の切り替えが終了したら、処理はステップS123に移行され、画像の全画素に対する処理が終了したか否かが判定される。若し、全画素に対する処理が終了したと判定されたら、一連の符号化処理が終了される。
一方、ステップS123で全画素に対する処理が終了していないと判定されたら、処理はステップS114に戻され、ランレングス値が「1」にリセットされて処理がステップS100に戻され、次の画素を注目画素GDATAとして処理が行われる。
<符号化の具体例>
次に、上述した図25のフローに従いなされる符号化の例を、図26および図27を用いてより具体的に説明する。予測符号化方式としては、LOCO−I方式を用いるものとする。また、前ラインおよび現ラインにおいて、番号#0の画素が先頭の画素、番号#15の画素が終端の画素であるものとする。また、図26および図27において、各升内の数値は画素値を示す。なお、以下では、「番号#nの画素」を「画素#n」と呼ぶ。
図25のフローチャートおよび図26を参照しながら、本実施形態によるグラフィクス画像の符号化処理について、より具体的に説明する。図26−1は、グラフィクス画像を符号化した場合の各値の具体的な例を示す。なお、図26−1において、予測値、画素値および予測誤差値は、画素に対応して示されている。また、画素符号(PASS符号、予測誤差符号)およびランレングス符号は、出力順に並べられている。グラフィクス画像は、一般的には所定の規則に従い生成されるため、同一の画素値を有する画素が連続的に並ぶ場合が多いことが期待される。
現ラインの先頭画素である番号#0の画素が注目画素GDATAである場合、ステップS102の判定によりラインヘッダが符号化される(ステップS103)と共に、画素#0の画素値がそのまま用いられてPASS符号化が行われ、PASS符号が出力される(ステップS104)。そして、注目画素GDATAが現ラインにおける画素#1に移る。
現ラインの画素#1は、図18を用いて説明したLOCO−I方式による予測で予測値が「30」とされ、当該画素#1の画素値と一致して予測誤差値が「0」となり、ステップS108の判定により、ステップS109でランレングス値が1だけ加算されて「2」となる。そして、注目画素GDATAが現ラインにおける画素#2に移る。
現ラインの画素#2は、予測値が「30」とされ、当該画素#2の画素値に対する予測誤差値が「−5」となり、ステップS108の判定により、ステップS110でランレングス値「2」が符号化され、ランレングス符号が出力される。さらに、予測誤差値の絶対値が「29」以下なので、ステップS111の判定により、ステップS113で予測誤差値が符号化され、予測誤差符号が出力される。その後、ステップS114でランレングス値が「1」にリセットされ、現ラインの画素#3が注目画素GDATAとされる。
現ラインの画素#3は、予測値が「25」とされ、当該画素#3の画素値と一致して予測誤差値が「0」となり、ステップS108の判定により、ステップS109でランレングス値が1だけ加算されて「2」となる。そして、注目画素GDATAが現ラインにおける画素#4に移る。
現ラインにおける画素#4から画素#12までの画素は、前ラインと現ラインとで垂直方向の相関が高い。したがって、図21−2を用いて説明したように、LOCO−I方式による予測値と注目画素GDATAの画素値とが一致し、それぞれ予測誤差値が「0」となる。その結果、現ラインにおける画素#4から画素#12までの各画素の処理においてランレングス値が「1」ずつ加算される。
現ラインにおける画素#13は、予測値が「30」とされ、当該画素#13の画素値「90」に対する予測誤差値が「60」となり、ステップS108の判定により、ステップS110でランレングス値が符号化され、ランレングス符号が出力される。この場合、現ラインにおける画素#3から画素#12までの処理で順次加算されて得られたランレングス値「10」が符号化され出力されることになる。
さらに、現ラインにおける画素#13の予測誤差値は「60」であるため、ステップS111で絶対値が「29」を超えると判定され、画素#13の画素値がそのまま用いられてPASS符号化が行われ、PASS符号が出力される(ステップS112)。そして、ランレングス値が「1」にリセットされて、注目画素GDATAが現ラインにおける画素#14に移る。
現ラインの画素#14は、予測値が「90」とされ、当該画素#14の画素値と一致して予測誤差値が「0」となり、ステップS108の判定により、ステップS109でランレングス値が1だけ加算されて「2」となる。そして、注目画素GDATAが現ラインにおける画素#15に移る。
現ラインにおける画素#15は、現ラインの終端の画素であるため、ステップS107の判定により処理がステップS115に移行される。当該画素#15は、予測値が「90」とされ、当該画素#15の画素値と一致して予測誤差値が「0」となる。そのため、ステップS115の判定によりステップS120でランレングス値に「1」が加算されて「3」となり、ステップS121でランレングス値「3」が符号化されてランレングス符号が出力され、次のラインに処理が移る。
図26−2は、上述の処理の結果で生成される符号列の例を示す。符号列は、ラインヘッダ、値「30」を示すPASS符号、ランレングス値「2」を示すランレングス符号、値「−5」を示す予測誤差符号、ランレングス値「10」を示すランレングス符号、値「90」を示すPASS符号、ランレングス値「3」を示すランレングス符号が順に並べられて形成される。
図25のフローチャートおよび図27を参照しながら、本実施形態による自然画像の符号化処理について、より具体的に説明する。自然画像は、グラフィクス画像のように所定の規則に従い生成されるものではないため、図27−1に例示されるように、画素により区々な値を取る場合が多いと考えられる。隣接する画素同士での画素値の一致が全く無い場合には、予測処理による予測の的中が期待できないことになり、例えば全ての画素について予測誤差値が「0」以外の値となると共にランレングスが発生しなくなるおそれがある。この場合は、高い圧縮率が期待できない。さらに、上述した符号化フォーマットの場合、全ての画素値が値「30」以上であると、全ての画素についてPASS符号を用いることになり、実質的に全く圧縮が行われないのと同等の結果になる場合も考えられる。
上述したように、本実施形態では、自然画像によるソース画像から描画用画像を生成する際に、ニアレストネイバー法により、そのままの状態から2倍以上に、または、一旦所定の縮小率で縮小してから2倍に拡大している。これにより、生成された描画用画像は、垂直および水平方向に連続する2画素以上の画素値が一致する画素の組で構成されることになる。
一例として、図27−1に例示する画素構成の画像をニアレストネイバー法を用いて2倍に拡大すると、図27−2に例示するように、拡大前の画像の全ての画素値に基づき2画素×2画素を単位として同一の画素値を持つ画像が生成される。図20〜図22を用いて説明したように、平面予測方式、LOCO−I方式およびPaeth方式においては、画素値の垂直方向または水平方向の相関が高い場合に、予測誤差値が「0」になる。したがって、図27−2に例示する画素構成によれば、所定以上の圧縮率が保証される。
図27−2、図27−3および図27−4を用いてより具体的に説明する。なお、図27−2に例示されるニアレストネイバー法を用いて拡大後の画像の、拡大の原点(この例では左上隅の画素)を含むラインをライン#0とし、画像の下に向けてライン#1、ライン#2、…とライン番号を順次大きくする。また、図27−3および図27−4において、予測値、画素値および予測誤差値は、画素に対応して示されている。また、画素符号(PASS符号、予測誤差符号)およびランレングス符号は、出力順に並べられている。
図27−3は、同一の画素値を持つ画素の単位を1対の前ラインと現ラインとが跨ぐ場合の例を示す。この例では、当該単位が2画素×2画素からなるので、前ラインが奇数番ライン、現ラインが偶数番ラインとなっている。この場合、それぞれの単位で水平方向の相関が高く、単位間で垂直方向の相関が低い。そのため、図25のフローチャートにおけるステップS108の判定に基づき、注目画素GDATAが単位の先頭以外の画素であれば、予測誤差値が「0」となってランレングス値が「1」だけ増加される。
また、注目画素GDATAが単位における現ラインの最初画素であれば、予測誤差値が「0」とならない。この場合、ステップS110〜ステップS113の処理に基づき、ランレングス値が符号化されランレングス符号が出力されると共に、PASS符号化または予測誤差値の符号化が行われ、PASS符号または予測誤差符号が出力される。すなわち、同一の画素値を持つ画素の単位が1対の前ラインと現ラインとを跨ぐ場合、当該単位それぞれにおける現ラインの最初の画素毎に予測誤差値が「0」とならず、予測誤差符号およびランレングス符号が出力される可能性がある。
図27−3の例では、現ラインの先頭画素#0は図25のフローチャートにおけるステップS102の判定によりPASS符号化されPASS符号が出力される。次の画素#1は、LOCO−I方式による予測で予測値が「0」とされ、画素値が「0」であるので予測誤差値が「0」となり、ステップS108の判定によりランレングス値が「1」だけ増加され値「2」とされる。
次の単位に属する画素#2は、予測値が「0」とされ、画素値が「90」であるので予測誤差値が「90」となる。そのため、ステップS110でランレングス値が符号化されランレングス符号が出力されると共に、ステップS111の判定により画素#2の画素値を用いてPASS符号化が行われPASS符号が出力される。次の画素#3は、予測値が「90」とされ、画素値が「90」であるので予測誤差値が「0」となり、ステップS108の判定によりランレングス値が「1」だけ増加して値「2」とされる。以降、同一画素値を持つ画素による単位が切り替わる度に、PASS符号または予測誤差符号の出力と、ランレングス符号の出力とが繰り返される。
この場合、最も悪い条件においては、注目画素GDATAが単位の先頭画素である場合に発生する予測誤差値が全て値「30」以上になり、PASS符号とランレングス値「2」を示すランレングス符号とが繰り返し出力されることになる。したがって、この最も悪い条件における圧縮率は、略1/2となる。
図27−4は、同一の画素値を持つ画素の単位に1対の前ラインと現ラインとが含まれる場合の例を示す。この例では、前ラインが偶数番ライン、現ラインが奇数番ラインとなっている。この場合、それぞれの単位で水平および垂直方向の相関が共に高い。そのため、図20〜図22を用いて説明した各予測方式の特徴により、現ラインの先頭画素以外の全ての画素において予測誤差値が「0」となる。したがって、現ラインの先頭画素に対してPASS符号化を行いPASS符号を出力する(ステップS102〜ステップS104)。また、現ラインの終端画素において、1ライン分のランレングス値を符号化したランレングス符号が出力される(ステップS107、ステップS115、ステップS120およびステップS121)。発生する符号がラインヘッダ符号、1のPASS符号および1のランレングス符号のみとなるので、非常に高い圧縮率を得ることができる。
ニアレストネイバー法を用いて2倍以上の拡大倍率で拡大された画像は、予測符号化において上述のような特徴を有し、同一の画素値を持つ画素の単位を1組の前ラインと現ラインとが跨ぐ場合に、少なくとも略1/2の圧縮率を得ることができる。一方、当該単位に1対の前ラインと現ラインとが含まれる場合には、非常に大きな圧縮率を得ることができる。したがって、対象画像全体においては、理想的には1/4の圧縮率を得ることができる。実際には、制御符号などが付加されるため、少なくとも1/3の圧縮率を得ることができる。
このように、本実施形態では、最低圧縮率が保証されるので、自然画像が多く含まれる画像を印字する場合でも、バス220におけるデータ転送レートが所定値を超えることが無い。したがって、バス220の転送レートを必要以上に大きく取らなくても、プリンタエンジン104に同期したページ符号データの転送レートがバス220の転送レートを超えてしまうことが無い。
また、最低圧縮率が保証されるために、メインメモリ103のデータ容量を小さくすることが可能である。さらに、1度の圧縮符号化処理のみで最低圧縮率が保証され、再度の圧縮符号化処理が不要なので、システムとして印字速度の低下が無い。
なお、上述では、図8のステップS62において、ソース画像を拡大倍率に従い拡大した後に1/2倍に縮小しているが、これはこの例に限定されない。すなわち、nを2以上の整数としたときに、ステップS62において、ソース画像を1/n倍で縮小してもよい。この場合には、ステップS64において、縮小後ソース画像がニアレストネイバー法を用いてn倍に拡大されることになる。
また、上述では、予測処理部403に適用される予測方式の例として、平面予測方式、LOCO−I方式およびPaeth方式を挙げたが、これはこの例に限定されない。すなわち、予測処理部403では、画像の垂直方向または水平方向に画素値が一致する場合に予測誤差値が「0」となる予測方式であれば、他の方式を適用することができる。
さらに、上述では、拡大倍率が2倍未満の場合に図8におけるステップS62〜ステップS64の処理を行い、ソース画像を一旦縮小してからニアレストネイバー法により2倍に拡大しているが、これは、拡大倍率が2倍以上の場合にも適用可能である。但し、拡大倍率が2倍以上の場合には、ステップS61の処理によりニアレストネイバー法による拡大処理がソース画像に対して直接的に行われるため、ソース画像を一旦縮小してからニアレストネイバー法により2倍に拡大する必然性が無い。
さらにまた、上述では、注目画素の画素値と、注目画素の画素値に対する予測値とが一致する数を表すランレングス値を求め、このランレングス値を符号化するようにしているが、これはこの例に限られない。すなわち、ランレングス値を求めなくても、注目画素の画素値と、注目画素の画素値に対する予測値とが一致する場合に、少ないビット数でハフマン符号化を行うことにより、高い圧縮率を得ることが可能である。
<復号処理の概略>
図28は、本実施形態による復号部133の一例の構成を示す。符号読み込み部600は、メインメモリ103の多値CMYKページ符号格納領域121から符号データを読み出し、符号フォーマット解析部601に転送する。符号フォーマット解析部601は、転送された符号データをハフマン符号の規則に従い解釈して、ラインヘッダ符号、予測誤差符号またはPASS符号、ならびに、ランレングス符号を取り出す。
符号フォーマット解析部601は、取り出したラインヘッダ符号に基づきライン先頭を判定する。また、符号フォーマット解析部601は、取り出した予測誤差符号に基づき予測誤差値を求め、PASS符号に基づき画素値を求める。さらに、符号フォーマット解析部601は、取り出したランレングス符号に基づきランレングス値を求める。
すなわち、符号フォーマット解析部601は、読み出した符号データが4ビットの「1110」であれば当該ビットがラインヘッダ符号であると判定する。ラインヘッダ符号に続くビットを順次読み込んで、予測誤差符号またはPASS符号の判定を行い、予測誤差値または画素値を求める。さらに、予測誤差符号またはPASS符号に続くビットを順次読み込んで、ランレングス符号の判定を行い、ランレングス値を求める。さらにまた、ランレングス符号に続くビットを順次読み込んで、予測誤差符号またはPASS符号を判定して予測誤差値または画素値を求める。この、予測誤差符号またはPASS符号、ならびに、ランレングス符号の判定および各値出力の処理を、次にラインヘッダ符号が読み込まれるまで繰り返し、ラインヘッダ符号が読み込まれると、次のラインに対して同様の処理を繰り返す。
予測誤差処理部603において、予測処理部620は、ラインメモリ制御処理部604によりラインメモリ606から読み出された、復号対象の画素(注目画素)の周辺3画素の復号済みの画素a、bおよびc(図16参照)の画素データに基づき、復号を行う注目画素の画素値を、符号化の際に用いた予測方式(本実施形態の例では平面予測方式、LOCO−I方式またはPaeth方式)により予測する。そして、予測誤差処理部603において、画素値生成処理部621は、符号フォーマット解析部601で求められた予測誤差値と、予測処理部620で予測された予測値とを加算して、注目画素の画素値を生成する。
ランレングス処理部602において、予測処理部610は、ラインメモリ制御処理部604から供給される、注目画素の周辺3画素の復号済みの画素a、bおよびcの画素値に基づき、上述の予測処理部620と同様にして注目画素の画素値を予測する。ランレングス処理制御部611の制御により、予測された画素値の画素が符号フォーマット解析部601で求められたランレングス値で示される数だけ出力される。
なお、ラインメモリ606は、復号を行っているライン(現ラインと呼ぶ)と、直前に復号が終了した復号済みライン(前ラインと呼ぶ)との2ライン分の画素データを格納可能とされている。なお、以下では、ラインメモリ606の現ラインを書き込む領域を現ライン領域、前ラインを書き込む領域を前ライン領域と呼ぶ。ラインメモリ制御処理部604は、ラインメモリ606に対する画素の読み書きを制御する。例えば、ラインメモリ制御処理部604は、注目画素の周辺3画素a、bおよびcをラインメモリ606から読み出して、上述の予測誤差処理部603およびランレングス処理部602にそれぞれ供給する。
ランレングス処理部602および予測誤差処理部603で復号された画素は、ラインメモリ制御処理部604により画像出力部605に転送され、復号部133から出力される。復号部133の出力は、階調処理部134に転送される。
<復号処理の詳細>
図29は、復号部133で行われる、本実施形態の符号化処理により符号化された符号化データに対する一例の復号処理を示すフローチャートである。符号読み込み部600によりメインメモリ103の多値CMYKページ符号格納領域121から読み出された符号データが符号フォーマット解析部601に転送される。符号フォーマット解析部601は、転送された符号データがラインヘッダ符号であるか否かを判定する(ステップS200)。若し、ラインヘッダ符号ではないと判定されたら、処理はステップS202に移行され、転送された符号データから予測誤差符号またはPASS符号を抽出して読み込み、次のステップS203で、当該予測誤差符号またはPASS符号に続けて配置されるランレングス符号を抽出する。
一方、ステップS200で、転送された符号データがラインヘッダ符号であると判定されたら、処理はステップS201に移行され、ラインメモリ606における前ライン領域および現ライン領域が切り替えられる。ラインメモリ606の切り替えが終了したら、処理は上述したステップS202に移行される。
ステップS203でランレングス符号が抽出されたら、処理はステップS204に移行され、ステップS202で抽出された符号データがPASS符号であるか否かが判定される。若し、当該符号データの先頭の1ビットが「1」であれば、当該符号データがPASS符号であると判定される。この場合、PASS符号から注目画素の画素値が取り出され、処理が後述するステップS207に移行される。
一方、ステップS204で、ステップS202で抽出された符号データがPASS符号ではないと判定されたら、処理はステップS205に移行される。ステップS205では、注目画素の周辺3画素a、bおよびc(図16参照)から、注目画素の画素値を予測する。例えば、予測誤差処理部603内の予測処理部620は、ラインメモリ制御処理部604を介してラインメモリ606から画素a、bおよびcを読み出し、これら画素a、bおよびcを用いて、符号化の際に用いた予測方式より注目画素の画素値を予測する。
ステップS205で注目画素の画素値が予測されたら、処理はステップS206に移行される。この場合、上述したステップS204の判定により、ステップS202で読み込まれた符号データが予測誤差符号であることが分かる。ステップS206では、この予測誤差符号が予測誤差値に復号され、この予測誤差値とステップS205で予測された予測値とが加算されて、注目画素の画素値が生成される。
次のステップS207では、注目画素の画素値がラインメモリ制御部604により、ラインメモリ606の現メモリ領域に書き込まれる。さらに、次のステップS208で、注目画素の画素値が画像出力部604に対して出力される。
処理はステップS209に移行され、ステップS203で抽出されたランレングス符号がランレングス値に復号され、このランレングス値が「1」であるか否かが判定される。若し、ランレングス値が「1」であると判定されたら、処理は後述するステップS214に移行される。
一方、ステップS209でランレングス値が「1」ではないと判定されたら、処理はステップS210に移行される。この場合、予測誤差値が「0」の画素、すなわち予測値が画素値と一致する画素がランレングス値に示される個数だけ連続的に並んでいることになる。ステップS210では、注目画素の周辺3画素a、bおよびc(図16参照)から、符号化の際に用いた予測方式により注目画素の画素値を予測する。例えば、ランレングス処理部602内の予測処理部610は、ラインメモリ制御処理部604を介してラインメモリ606から画素a、bおよびcを読み出し、これら画素a、bおよびcを用いて平面予測により注目画素の画素値を予測する。
ステップS210で注目画素の画素値が予測されると、処理はステップS211に移行され、予測された画素値を注目画素の画素値として、ラインメモリ制御処理部604によりラインメモリ606の現ライン領域に書き込む。ラインメモリ606に書き込まれたこの画素値は、次の予測処理時に画素aの画素値として用いられることになる。さらに、次のステップS212で、注目画素の画素値が画像出力部605に対して出力される。
次のステップS213で、ステップS209で求められたランレングス値が示す回数だけ、ステップS210〜ステップS212の処理が繰り返されたか否かが判定される。若し、ランレングス値が示す回数分の処理を未だ行っていないと判定されたら、処理はステップS210に戻され、予測値に基づく注目画素値の生成処理が行われる。
一方、ステップS213で、ランレングス値が示す回数だけ処理が繰り返されたと判定されたら、処理はステップS214に移行され、画像内の全ての画素について処理が終了したか否かが判定される。若し、終了していないと判定されたら、処理はステップS200に戻され、次の符号データが読み出される。一方、ステップS214で画像内の全ての画素について処理が終了したと判定されたら、一連の復号処理が終了される。
上述では、グラフィクス画像の描画の解像度が1200dpi、自然画像のソース画像の描画の解像度が600dpiであるとして説明したが、これはこの例に限定されない。例えば、グラフィクス画像を600dpi、自然画像を300dpiで描画する場合や、グラフィクス画像を2400dpi、自然画像を1200dpiで描画する場合であっても、本実施形態は適用可能である。また、上述では、CMYK描画とプレーン符号化方式を用いた例について説明したが、これはこの例に限定されず、例えばRGB描画とピクセル符号化方式を用いた場合であっても、本実施形態は適用可能である。
<他の実施形態>
なお、上述では、本発明の実施形態による符号化部132や復号部133を構成する各部がハードウェア的に構成されるように説明したが、これはこの例に限定されない。すなわち、本発明に実施形態に適用な可能な画像処理装置における符号化部132や復号部133は、CPU110や、画像処理装置に組み込まれた別のCPU(図示しない)上で動作するプログラムとして、それぞれ実現可能である。
この場合、CPU110または別のCPU上で符号化部132や復号部133として実行されるプログラムは、例えば図14を用いて説明した符号化部132の場合、符号化部132の各機能部(画像読み込み部400、ラインメモリ制御処理部401、予測処理部403、予測誤差処理部404、ランレングス生成処理部405、符号フォーマット生成処理部406および符号書き込み部407)を含むモジュール構成となっている。
これらの符号化部132や復号部133を実現するためのプログラムや、CPU110上で実行される描画処理部700を実現するためのプログラムは、インストール可能な形式又は実行可能な形式のファイルでCD(Compact Disk)、フレキシブルディスク(FD)、DVD(Digital Versatile Disk)などのコンピュータで読み取り可能な記録媒体に記録されて提供される。これに限らず、プログラムは、CPU110に接続されるROM117や、別のCPUに接続されるROM(図示しない)に予め記憶させておいてもよい。さらに、プログラムは、インターネットなどのネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、このプログラムを、インターネットなどのネットワーク経由で提供または配布するように構成してもよい。
実際のハードウェアとしては、CPU110または他のCPUが、上述した記録媒体から、例えば描画処理部700として機能するプログラム、あるいは、符号化部132や復号部133として機能するプログラムを読み出して実行することにより、上述した各部が主記憶装置(図示しない)上にロードされる。そして、例えば描画処理部700として機能するプログラムの場合、描画処理部700を構成する各部(縮小処理部701、拡大処理部702および描画部703)が主記憶装置上に生成されるようになっている。