以下に添付図面を参照して、本発明に係る画像処理装置の最良な実施形態を詳細に説明する。先ず、本発明による画像処理を概念的に説明する。本発明では、画素データの符号化を、予測符号化とランレングス符号化とを用いて行う。ランレングスの生成の際に、属性データの変化を検出し、属性データの変化点で画素データのランレングス値を終端させてランレングス値を符号化し、符号化されたランレングス値と属性データを示す符号とを1の符号列に対して出力する。画素データと属性データとを1本の符号列で構成でき、復号時に用いるDMACがCMYK各版それぞれに付き1個で済む。また、属性データのランレングス符号が不要なので、より高い圧縮効率が期待できる。
<本実施形態に適用可能な画像処理装置の構成>
次に、この発明に係る画像処理装置の最良な実施形態を詳細に説明する。図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は、制御部750、メインメモリ751、画像処理部752およびパネルコントロール部753を有する。
制御部750は、CPU701、CPU I/F702、メモリアービタ(ARB)703、メモリコントローラ704、DMAC(Direct Memory Access Controller)705、バスコントローラ706および通信コントローラ707を有する。メモリアービタ703に対して、CPU701がCPU I/F702を介して、バス734がバスコントローラ706を介して、また、メインメモリ751がメモリコントローラ704を介してそれぞれ接続される。メモリコントローラ704は、メインメモリ751に対するアクセスの制御を行う。さらに、メモリアービタ703に対して、DMAC705、通信コントローラ707およびROM(Read Only Memory)731が接続される。メモリアービタ703は、CPU701、DMAC705、通信コントローラ707およびバス734の、メインメモリ751に対するアクセスを調停する。
CPU701は、CPU I/F702およびメモリアービタ703を介してROM731にアクセスし、ROM731に予め記憶されたプログラムを読み出して実行し、このカラープリンタ100の全体の動作を制御する。なお、ROM731は、CPU701に実行される各種のプログラムの他に、文字などのフォント情報が予め記憶される。
通信コントローラ707は、ネットワーク761を介して行われる通信を制御する。例えば、コンピュータ760から出力されたPDL(Page Description Language)データは、ネットワーク761を介して通信コントローラ707により受信される。通信コントローラ707は、受信したPDLデータを、メモリアービタ703およびメモリコントローラ704を介してメインメモリ751に転送する。
なお、ネットワーク761は、LAN(Local Area Network)などの所定の範囲内で通信を行うものでもよいし、インターネットなどより広範囲に通信可能なものでもよい。また、ネットワーク761は、有線通信に限らず無線通信を用いたものでもよいし、USB(Universal Serial Bus)やIEEE(Institute Electrical and Electronics Engineers)1394といったシリアル通信を行うものでもよい。
メインメモリ751は、CMYKAバンドデータ格納領域751Aとページ符号格納領域751Bとを有する。CMYKAバンドデータ格納領域751Aは、CMYK各版のバンドデータと、属性Aのバンドデータとが格納される。また、ページ符号格納領域751Bは、CMYK各版それぞれのバンドデータが属性Aのバンドデータを織り込まれて画素単位で符号化されたページ符号が格納される。
また、図示は省略するが、メインメモリ751は、例えばコンピュータ760から供給されたPDL(Page Description Language)データを格納するPDLデータ格納領域をさらに有する。
例えば、CPU701は、コンピュータ760から供給されたPDLデータに基づき描画を行いCMYK版それぞれの多値バンドデータを生成すると共に、属性Aのバンドデータを生成する。生成されたCMYK版それぞれの多値バンドデータと、属性Aのバンドデータは、メモリアービタ4を介してメインメモリ751のCMYKAバンドデータ格納領域751Aに格納される。
バスコントローラ706は、バス734に接続される各部の、バス734に対するアクセスの調停を行う。バス734に対して、制御部750が接続されると共に、画像処理部752およびパネルコントロール部753が接続される。
パネルコントロール部753は、例えばASIC(Application Specific Integrated Circuit)からなり、バスI/F729およびパネルコントロール部730を有する。パネルコントロール部730に対して、様々な操作子や表示素子が設けられた操作パネル737が接続される。パネルコントロール部730は、バスI/F729およびバス734を介して制御部750と通信を行い、操作パネル737に対してなされたユーザ操作に応じた制御信号を制御部750に送信したり、CPU701により生成され制御部750より送信された表示制御信号に基づき操作パネル737に設けられた表示素子の駆動を行う。
画像処理部752は、例えばASICからなり、C版プリンタエンジン738、M版プリンタエンジン739、Y版プリンタエンジン740およびK版プリンタエンジン741に印字させる画像の画像処理を行う。
画像処理部752において、バスアービタ708は、C+A版符号DMAC713、M+A版符号DMAC714、Y+A版符号DMAC715、K+A版符号DMAC716、CMYK版画像DMAC709、属性DMAC710およびCMYK+A版符号DMAC712が接続され、接続されたこれら各部のバス734に対する通信を調停する。
CMYK版画像DMAC709は、バス734および制御部750を介してメインメモリ2のCMYKAバンドデータ格納領域751AからC版、M版、Y版およびK版のうち1つの版(C版とする)のバンドデータを読み出し、CMYK+A符号化部711に転送する。同様に、属性DMAC710は、バス734および制御部750を介してメインメモリ751のCMYKAバンドデータ格納領域751Aから属性Aのバンドデータを読み出し、CMYK+A符号化部711に転送する。
CMYK+A符号化部711は、CMYK版画像DMAC709から転送された例えばC版のバンドデータと、属性DMAC710から転送された属性Aのバンドデータとを、後述する方法に従い符号化して1本の符号列を生成する。CMYK+A符号化部711で生成されたこの符号は、CMYK+A版符号DMAC712により、バス734および制御部750を介してメインメモリ751のページ符号格納領域751Bに格納される。
なお、以下では、C版のバンドデータと属性Aのバンドデータとから生成された符号を、C+A版バンド符号と呼ぶ。M版、Y版およびK版のバンドデータに関しても、同様にして、それぞれM+A版バンド符号、Y+A版バンド符号、K+A版バンド符号と呼ぶ。また、以下では、煩雑さを避けるため、特に説明のない限り、C版、M版、Y版およびK版それぞれについての処理を、C版の処理に代表させて説明する。
C+A版符号DMAC713は、バス734および制御部750を介してメインメモリ751のページ符号格納領域751BからC+A版バンド符号を読み出し、C+A復号部717に転送する。C+A復号部717は、転送されたC+A版バンド符号から、後述する方法によりC版の画像データと属性値とを復号し、C版階調処理部721に供給する。C版階調処理部721は、供給されたC版の画像データと属性値とに基づき、C版の画像データに対して階調処理を施してC版エンジンコントローラ725に供給する。C版エンジンコントローラ725は、供給されたC版画像データに基づきC版プリンタエンジン738を制御する。
M+A版バンド符号、Y+A版バンド符号およびK+A版バンド符号についても、上述のC+A版バンド符号と同様の処理がなされる。すなわち、M+A版符号DMAC714は、メインメモリ751のページ符号格納領域751BからM+A版バンド符号を読み出し、M+A復号部718に転送する。M+A復号部718は、転送されたM+A版バンド符号からM版の画像データと属性値とを復号し、M版階調処理部722に供給する。M版階調処理部722は、供給されたM版の画像データと属性値とに基づき、M版の画像データに対して階調処理を施してM版エンジンコントローラ726に供給する。M版エンジンコントローラ726は、供給されたM版画像データに基づきM版プリンタエンジン739を制御する。
Y+A版符号DMAC715は、メインメモリ751のページ符号格納領域751BからY+A版バンド符号を読み出し、Y+A復号部719に転送する。Y+A復号部719は、転送されたY+A版バンド符号からY版の画像データと属性値とを復号し、Y版階調処理部723に供給する。Y版階調処理部723は、供給されたY版の画像データと属性値とに基づき、Y版の画像データに対して階調処理を施してY版エンジンコントローラ727に供給する。Y版エンジンコントローラ727は、供給されたY版画像データに基づきY版プリンタエンジン740を制御する。
K+A版符号DMAC716は、メインメモリ751のページ符号格納領域751BからK+A版バンド符号を読み出し、K+A復号部720に転送する。K+A復号部720は、転送されたK+A版バンド符号からK版の画像データと属性値とを復号し、K版階調処理部724に供給する。K版階調処理部724は、供給されたK版の画像データと属性値とに基づき、K版の画像データに対して階調処理を施してK版エンジンコントローラ728に供給する。K版エンジンコントローラ728は、供給されたK版画像データに基づきK版プリンタエンジン741を制御する。
図3は、メインメモリ751におけるCMYKAバンドデータ格納領域751Aの一例のフォーマットを示す。図3−1に例示されるように、CMYKAバンドデータ格納領域751Aは、C版、M版、Y版およびK版の各版毎のプレーン構成とされ、各画素に対してそれぞれ8ビットが割り当てられる。すなわち、CMYKバンドデータは、各画素がそれぞれ8ビットのビット深度を持つ多値プレーン画像となっている。
また、属性Aは、図3−2に例示されるように、8ビットのうち2ビットを用いて、C版、M版、Y版およびK版に共通の属性を示す属性情報が画素毎に対応付けられて格納される。図3−2の例では、属性情報を示す2ビットの値(属性値と呼ぶ)が「00」で、対応する画素が下地属性を有することが示される。同様に、属性値が「01」、「10」および「11」で、対応する画素がそれぞれグラフィクス属性、文字属性および写真属性を持っていることが示される。
図4を用いて、CMYK各版によるCMYK画像と属性情報とについてより具体的に説明する。図4−1は、CMYK画像データによるCMYK画像の例を示す。この例では、CMYK画像は、写真画像と、文字と、グラフィクス画像とが混在して配置されている。図4−2は、図4−1に示したCMYK画像における写真画像の属性を持った領域を示す。図4−3は、図4−1に示したCMYK画像における文字の属性を持った領域を示す。また、図4−4は、図4−1に示したCMYK画像におけるグラフィクス画像の属性を持った領域を示す。一方、図4−5は、図4−1のCMYK画像に対応する属性情報の例を概念的に示す。属性情報は、図4−2〜図4−4に例示した各属性による領域について、例えば互いに排他的に設定される。
<本実施形態に適用可能な画像処理の概略>
図5は、上述した構成を有するカラープリンタ100における画像処理を概略的に示す一例のフローチャートである。また、図6は、図5のフローチャートにおける符号化処理に関するデータフローの例を示す。同様に、図7は、図5のフローチャートにおける復号および印字処理に関するデータフローの例を示す。
例えばコンピュータ760で生成されたPDLデータがネットワーク761を介して通信コントローラ707に受信され、メインメモリ751のPDLデータ格納領域(図示しない)に記憶される(ステップS1)。CPU701は、メインメモリ751のPDLデータ格納領域からPDLデータを読み出し、PDLを解析して(ステップS2)、解析結果に基づきCMYK各版および属性Aのバンド画像をプレーン単位で描画する(ステップS3)。
描画されたCMYK各版および属性Aのバンド画像によるCMYKAバンドデータは、次のステップS4で、メモリアービタ703を介してメモリコントローラ704に転送され、メモリコントローラ704の制御により、メインメモリ751のCMYKバンドデータ格納領域751Aに格納される(図6の経路A)。このCMYKAバンドデータは、上述したように、各画素が8ビットのビット深度を持つ多値プレーン画像データと、8ビットのうち2ビットを用いた各画素に対応した属性情報とからなる。
CMYK版画像DMAC709は、バス734を介してCMYKAバンドデータ格納領域751AからCMYKバンドデータを読み出して、CMYK+A符号化部711に転送する(図6の経路B)。なお、詳細は後述するが、CMYK版画像DMAC709は、CMYKAバンドデータ格納領域751Aから1つの版のバンドデータ(図6の例ではC版)を読み出して、CMYKA符号化部11に転送する。また、属性DMAC710は、バス734を介してCMYKAバンドデータ格納領域751Aから属性Aのバンドデータを読み出して、CMYKA符号化部11に転送する(図6の経路C)。CMYK+A符号化部711は、転送されたCMYKバンドデータと、属性Aのバンドデータとを本発明による符号化方法に従い符号化する(ステップS5)。
CMYKバンドデータと属性Aのバンドデータとが符号化された符号データは、次のステップS6で、バス734を介してメインメモリ751に供給され、メモリコントローラ704の制御によりページ符号格納領域751BにCMYK各版毎に格納される(図6の経路D)。
以下、復号時の処理について、C版のデータについて説明を行う。なお、M版、Y版およびK版の各データについても、以下に説明するC版のデータと同様の処理が、当該C版のデータに対する処理に続けて順次、行われる。
C+A版符号DMAC713は、バス734を介してページ符号格納領域751BからC+A版バンド符号を読み出して、C+A復号部717に転送する(図7の経路E)。C+A復号部717は、転送されたC+A版バンド符号をC版の画像データと属性値とに復号し、図7の経路Fに従いC版階調処理部721に転送する(ステップS7)。C版階調処理部721は、C+A復号部717から転送されたC版の画像データと属性値とに基づきC版の画像データに対して階調処理を施す(ステップS8)。階調処理されたC版の画像データは、図7の経路Gに従いC版エンジンコントローラ725に供給される(ステップS9)。C版プリンタエンジン738は、経路Hにより供給されたC版の画像データに基づき印字を行う。
上述したように、CMYKAバンドデータ格納領域751Aに格納されたバンドデータの符号化は、CMYK各版毎に属性Aのバンドデータを織り込みながら行う。この点について、図8のフローチャートを用いて説明する。先ず、ステップS10で、CPU701によりCMYKバンドデータおよび属性Aのバンドデータがプレーン単位で描画される。描画されたCMYKバンドデータおよび属性Aのバンドデータは、メインメモリ751のCMYKバンドデータ格納領域751Aに格納される。
次のステップS11で、CMYK版画像DMAC709は、CMYKAバンドデータ格納領域751Aから、C版のバンドデータと属性Aのバンドデータとを読み出し、CMYK+A符号部711に転送する。CMYK+A符号部711は、転送されたC版のバンドデータと属性Aのバンドデータとを符号化する。C版のバンドデータと属性Aのバンドデータとが符号化されたC+A版バンド符号は、メインメモリ751のページ符号格納領域751Bに格納される。
以降、ステップS12〜ステップS14で、M版〜K版のバンドデータと属性Aのバンドデータとがそれぞれ同様にして符号化される。すなわち、ステップS12で、M版のバンドデータと属性Aのバンドデータとが、CMYKAバンドデータ格納領域751AからCMYK版画像DMAC709により読み出され、CMYK+A符号部711に転送されて符号化される。M版のバンドデータと属性Aのバンドデータとが符号化されたM+A版バンド符号は、メインメモリ751のページ符号格納領域751Bに格納される。
同様に、次のステップS13で、Y版のバンドデータと属性Aのバンドデータとが、CMYKAバンドデータ格納領域751AからCMYK版画像DMAC709により読み出され、CMYK+A符号部711に転送されて符号化される。Y版のバンドデータと属性Aのバンドデータとが符号化されたY+A版バンド符号は、メインメモリ751のページ符号格納領域751Bに格納される。
さらに、次のステップS14で、K版のバンドデータと属性Aのバンドデータとが、CMYKAバンドデータ格納領域751AからCMYK版画像DMAC709により読み出され、CMYK+A符号部711に転送されて符号化される。K版のバンドデータと属性Aのバンドデータとが符号化されたK+A版バンド符号は、メインメモリ751のページ符号格納領域751Bに格納される。
図9は、1版分(この例ではC版)の復号および印字処理の例を示すフローチャートである。ステップS20で、C+A版符号DMAC713は、C版のプリンタエンジン738と同期してページ符号格納領域751BからC+A版バンド符号を1つ読み出して、C+A復号部717に転送する。次のステップS21で、C+A復号部717は、C+A版符号DMAC713から転送されたC+A版バンド符号を復号してC版の画像データと属性値とを画素単位で得る。このC版の画像データおよび属性値は、C版階調処理部721に転送される。
C版階調処理部721は、C+A復号部717から転送されたC版の画像データに対して所定に階調処理を施す。このとき、C版階調処理部721は、C+A復号部717からC版の画像データと共に転送された属性値に応じて階調処理を切り替える。C版階調処理部721で階調処理されたC版の画像データは、C版エンジンコントローラ725に供給される。C版エンジンコントローラ725は、供給されたC版の画像データに応じてC版プリンタエンジン738を制御して、C版の印字を行う(ステップS23)。
次のステップS24で、C版の1バンド分の処理が終了したか否かが判定され、若し、終了していないと判定されたら、処理がステップS20に戻され、次の符号について同様の処理が繰り返される。一方、ステップS24で、C版の1バンド分の処理が終了したと判定されたら、一連の処理が終了され、次の版(例えばM版)の処理が、C版の場合と同様にして所定のタイミングで開始される。
このように、復号処理では、1つ符号を読み込み、版の画像データと属性値とを復号し、階調処理装置へ転送する。
<本発明の実施形態による符号化処理の概略>
図10は、本発明の実施形態によるCMYK+A符号化部711の動作を説明するための一例の機能ブロック図である。画像読み込み処理部200は、メインメモリ751のCMYKAバンドデータ格納領域751Aから、CMYKバンドデータを読み出す。この画像読み込み処理部200によるCMYKバンドデータの読み出しは、CMYK各版のそれぞれについて、スキャンライン毎に画素単位で行われる。画像読み込み処理部200は、読み出したバンドデータをラインメモリ制御処理部201に転送する。
ラインメモリ制御処理部201は、画像読み込み処理部200から転送されたバンドデータをラインメモリ202に格納する。ラインメモリ202は、少なくとも2ライン分のバンドデータを格納可能とされており、今回供給されたデータを格納すると共に、直前に格納した1ライン分のデータを保持するように、ラインメモリ制御部201に制御される。
例えば、ラインメモリ202は、それぞれ1ライン分の画素を格納可能な第1および第2の領域を有する。ラインメモリ制御処理部201は、例えば、1ライン分の画素データの符号化が終了する度に、符号化が終了した画素データを書き込み領域を第1および第2の領域間で切り替えるように、ラインメモリ202に対するアクセスを制御する。
ラインメモリ制御処理部201は、ラインメモリ202から、符号化対象の画素(以下、注目画素と呼ぶ)の画素データと、注目画素の周辺3画素の画素データとを読み出す。ここで、ラインメモリ202から画素データが読み出される周辺3画素は、図11に例示されるように、注目画素のスキャン順で直前の画素a、ならびに、当該注目画素が属する現ラインに対してスキャン順で直前の前ライン(当該注目画素が属するラインの直上のライン)において当該注目画素の直上に位置する画素bおよび画素bのスキャン順で直前の画素cである。
ラインメモリ202から読み出された注目画素の周辺3画素a、bおよびcの画素データは、予測処理部203に転送される。また、ラインメモリ202から読み出された注目画素の画素データは、予測誤差処理部204に転送される。
予測処理部203は、ラインメモリ制御処理部201から転送された周辺画素の画素値に基づき、下記の式(1)に従い平面予測により予測値Pを算出し、注目画素の画素値を予測する。算出された予測値Pを示すデータは、予測誤差処理部204に転送される。
P=a+b−c …(1)
予測誤差処理部204は、予測処理部203から転送された予測値Pを示すデータと、ラインメモリ制御処理部201から転送された注目画素の画素データとに基づき、注目画素の画素値に対する予測値Pの誤差である予測誤差値を求める。この予測誤差値を示す予測誤差データは、注目画素の画素値を示す画素データと共にランレングス生成処理部205に転送される。
一方、属性読み込み処理部206は、メインメモリ751のCMYKAバンドデータ格納領域751Aから、属性Aのバンドデータ(以下、属性データと呼ぶ)を読み出し、属性変化検出処理部207に転送する。この属性読み込み処理部206による属性データの読み出しは、上述の画像読み込み処理部200によるCMYKバンドデータの読み出しと画素単位で同期して行われる。
属性変化検出処理部207は、属性読み込み処理部206から転送された属性データに示される属性値の変化を検出する。属性変化検出処理部207は、属性値の変化が検出されると、変化後の属性値を示す属性データをランレングス生成処理部205に転送する。
ランレングス生成処理部205は、予測誤差処理部204から転送された予測誤差データと、属性変化検出処理部207から転送された属性データとに基づきランレングスを生成する。より具体的には、ランレングス生成処理部205は、予測誤差データが示す予測誤差値が「0」である場合に、ランレングス値を1だけ増加させて予測誤差値が「0」の長さを計数することで、ランレングス値を生成する。一方、ランレングス生成処理部205は、予測誤差値が「0」以外の場合、予測誤差値を示す予測誤差データと、ランレングス値を示すランレングスデータとを、注目画素の画素値を示す画素データと共に符号フォーマット生成処理部208に転送する。
また、ランレングス生成処理部205は、予測誤差値が「0」であっても、属性値の変化があった場合、すなわち、属性変化検出処理部207から属性データが転送された場合は、ランレングスの生成を中止する。そして、属性データと、予測誤差値を示す予測誤差データと、ランレングス値を示すランレングスデータとを、注目画素の画素値を示す画素データと共に符号フォーマット生成処理部208に転送する。
符号フォーマット生成処理部208は、ランレングス生成処理部205から転送されたランレングスデータ、予測誤差データ、属性データおよび注目画素の画素データに基づき符号化を行い、符号データを生成する。生成された符号データは、符号書き込み部209に転送される。
より詳細には、符号フォーマット生成処理部208は、ランレングス生成処理部205から転送されたランレングスデータが示すランレングス値を、図12−2を用いて後述するランレングス符号のフォーマットに従い符号化する。また、ランレングス生成処理部205から転送された予測誤差データが示す予測誤差値が所定範囲内の値であれば、図12−1を用いて後述する予測誤差符号のフォーマットに従い符号化する。また、予測誤差値が所定範囲外の値の場合には、対応する画素の画素値そのものを符号として用いる。さらに、属性値が変化した場合、すなわち、ランレングス生成処理部205から属性データが転送された場合は、属性データが示す属性値を、図12−1を用いて後述する属性符号のフォーマットに従い符号化する。
なお、符号フォーマット生成処理部208によりランレングス値が符号化された後、ランレングス生成処理部205においてランレングス値が初期化される。
符号フォーマット生成処理部208は、生成した符号データを符号書き込み部209に転送する。符号書き込み部209は、転送されたこの符号データを、メインメモリ751のページ符号格納領域751Bに対して書き込む。
<符号フォーマット>
図12は、符号フォーマット生成処理部208で生成される符号の一例のフォーマットを示す。本実施形態では、予測誤差値、ランレングス値および属性値をそれぞれハフマン符号化して予測誤差符号、ランレングス符号および属性符号を生成すると共に、予測誤差値が所定範囲外の値の場合に画素値そのものを符号として用いたPASS符号を生成する。PASS符号は、予測誤差値をハフマン符号化した場合に、符号長が予測誤差値に適用される符号長を超える長さになる場合に生成される。
図12−1は、予測誤差符号、属性符号およびPASS符号の符号フォーマットの例を示す。各符号は、符号のそれぞれを識別するためのヘッダと、符号の本体である数値が格納される数値部分からなる。
予測誤差値は、値が大きいほど頻度が低くなるものとしてハフマン符号化される。このとき、予測誤差値を、段階的に設定された範囲により分類し、範囲毎に異なる符号長が割り当てられるように符号化を行う。分類された範囲は、符号の先頭から所定ビット(本実施形態では3ビット)を用いた誤差ヘッダにより、それぞれ識別される。この誤差ヘッダに対して、数値部分として符号化された予測誤差値が付加されて、1つの予測誤差符号が生成される。
本実施形態では、予測誤差値Peに対して例えば次のように6の範囲を設定する。
予測誤差範囲#1:Pe=1,Pe=−1
予測誤差範囲#2:Pe=−3,Pe=−2,Pe=2,Pe=3
予測誤差範囲#3:−7≦Pe≦−4,4≦Pe≦7
予測誤差範囲#4:−15≦Pe≦−8,8≦Pe≦15
予測誤差範囲#5:−31≦Pe≦−16,16≦Pe≦31
予測誤差範囲#6:−63≦Pe≦−32,32≦Pe≦63
また、各グループのグループ識別ビットと、付加ビットのビット長とを、例えば次のように設定する。
予測誤差範囲#1:誤差ヘッダ=「000」,付加される符号長=1ビット
予測誤差範囲#2:誤差ヘッダ=「001」,付加される符号長=2ビット
予測誤差範囲#3:誤差ヘッダ=「010」,付加される符号長=3ビット
予測誤差範囲#4:誤差ヘッダ=「011」,付加される符号長=4ビット
予測誤差範囲#5:誤差ヘッダ=「100」,付加される符号長=5ビット
予測誤差範囲#6:誤差ヘッダ=「101」,付加される符号長=6ビット
PASS符号は、ヘッダ(PASSヘッダと呼ぶ)として例えば値「110」が用いられ、8ビットのビット深度を有する画素データそのものがPASSヘッダに対して数値部分として付加されて生成される。
属性符号は、ヘッダ(属性ヘッダと呼ぶ)として例えば値「111」が用いられ、属性値が2ビットの符号長を持つ符号に符号化されて、数値部分として属性ヘッダに対して付加されて生成される。
図12−2は、ランレングス値が符号化されたランレングス符号の一例の符号フォーマットを示す。本実施形態では、ランレングス値は、値が小さいほど短い符号長が割り当てられるようにハフマン符号化され、ランレングス値が1で1ビットの符号長が割り当てられ、符号「0」に符号化される。
以下、図12−2に例示されるように、ランレングス値が2の場合には、2ビットの符号長が割り当てられ、符号「10」に符号化される。また、ランレングス値が3〜5の場合は、4ビットの符号長が割り当てられ、それぞれ符号「1100」、「1101」および「1110」に符号化される。
ランレングス値が6以上の場合、4ビットの符号長を持つ符号「1111」の後ろに所定符号長の数値部を接続した形式に符号化される。数値部は、図12−2の下段に示されるように、例えば先頭に1ビットのフレームヘッダを含む4ビットの符号長を有する、1または複数のフレームからなる。ランレングス値を示す符号が3ビット毎に区切られ、各フレームのヘッダを除く3ビットに対し、上述の符号「1111」側がMSBとなるように詰め込まれる。図12−2の例では、フレームは、最大数が7個に制限され、ランレングス値が1048576まで表現可能とされている。ランレングス値が5の場合は、フレームを省略することができる。
なお、フレームヘッダは、あるフレームに次のフレームが続くか否かを示す。例えば、フレームヘッダの値が「0」で次のフレームがあることを示し、フレームヘッダの値が「1」でそのフレームで終了することを示す。
図13は、上述した予測誤差符号、PASS符号、属性符号およびランレングス符号の構成例を示す。図13−1に例示されるように、予測誤差符号とランレングス符号とで1の符号が構成される。また、PASS符号とランレングス符号とで1の符号が構成される。一方、属性符号は、単独で1の符号として構成される。
符号データ全体としては、図13−2に例示されるように、それぞれの符号が符号化された順に連続的に配置されて構成される。それぞれの符号は、先頭の3ビットのヘッダを読み込むことで、予測誤差符号とランレングス符号とで構成された符号であるか、PASS符号とランレングス符号とで構成された符号であるか、若しくは、属性符号単独で構成された符号であるかを判別することができる。
<符号化処理の詳細>
図14は、CMYKA符号化部11で行われる、本実施形態による符号化処理を示す一例のフローチャートである。なお、この図14のフローチャートの処理に先んじて、ランレングス値が予め初期値である1に設定されているものとする。
先ず、ステップS30で、初期化フラグの値を1にセットする。次に、ステップS31で、画像読み込み部200により、メインメモリ751のCMYKAバンドデータ格納領域751Aから処理対象の1画素(注目画素GDATA)が読み出される。読み出された注目画素GDATAは、ラインメモリ制御処理部201の制御により、ラインメモリ202の、符号化対象のラインである現ラインの画素データが格納される領域に書き込まれる(ステップS32)。
次のステップS33で、予測処理部203により、ラインメモリ202から注目画素GDATAの周辺3画素a、bおよびc(図11参照)の画素データが読み出される。そして、これら画素a、bおよびcの画素値を用いて、上述した式(1)に従い、注目画素GDATAの画素値が平面予測より予測され、平面予測値が求められる。次のステップS34で、予測誤差処理部204により、注目画素GDATAの画素値から、ステップS33で求められた平面予測値が減じられて、注目画素GDATAに対する平面予測値の誤差(予測誤差値)が求められる。そして、処理はステップS35に移行される。
ステップS35では、属性読み込み部206により、メインメモリ751のCMYKAバンドデータ格納領域751Aから、注目画素GDATAに対応する属性データが読み出される。
次のステップS36で、ランレングス生成処理部205により、注目画素GDATAが下記の(1)〜(3)の各条件のうち少なくとも1を満たしているか否かが判定される。
(1)ステップS34で求められた予測誤差値が0以外の値である。
(2)ステップS35で読み出された属性データが示す属性値が1回前の処理で得られた属性値と異なっている。
(3)注目画素GDATAがラインの最終画素である。
若し、注目画素GDATAが上述の(1)〜(3)の各条件の何れも満たしていないと判定されたら、処理はステップS37に移行される。これは、すなわち、予測誤差値が0であって、且つ、対応する属性値が1回前の処理で得られた属性値と同一で、且つ、現ラインの最終画素ではない場合である。ステップS37では、ランレングス値を1だけ増加させる。そして、処理はステップS31に戻され、スキャン順で次の画素を新たな注目画素GDATAとして、処理が繰り返される。
一方、上述のステップS36において、注目画素GDATAが上述の(1)〜(3)の何れか1を満たしていると判定されたら、処理はステップS38に移行される。ステップS38では、初期化フラグの値が1であるか否かが判定される。若し、1であると判定されたら、処理はステップS40に移行される。一方、初期化フラグが1ではないと判定されたら、処理はステップS39に移行される。
ステップS39では、符号フォーマット生成処理部208により、図12−2を用いて説明した符号フォーマットに従い、ランレングス値を符号化してランレングス符号を生成する。そして、処理はステップS40に移行され、初期化フラグの値が0とされる。
処理はステップS41に移行され、注目画素GDATAに対応する属性値が1つ前の画素に対応する属性値と異なっているか否かが判定される。若し、注目画素GDATAに対応する属性値が1つ前の画素に対応する属性値と同一であると判定されたら、処理はステップS45に移行される。
ステップS405では、予測誤差値が0でないか否かが判定される。若し、予測誤差値が0であると判定されたら、処理はステップS51に移行される。一方、予測誤差値が0ではないと判定されたら、処理はステップS46に移行される。
ステップS46では、予測誤差値が所定の範囲外の値であるか否かが判定される。より具体的には、ステップS46では、図12−1に示される予測誤差範囲外、すなわち−63〜63の範囲外の値であるか否かが判定される。
若し、予測誤差値が所定範囲内、すなわち、予測誤差値が−63以上且つ63以下の値であれば、処理はステップS47に移行される。ステップS47で、ランレングス生成処理部205は、予測誤差値が図12−1に示される範囲#1〜#6のうちどの範囲に属するかを判定し、判定結果に基づき予測誤差ヘッダの符号化を行う。予測誤差ヘッダの符号化が行われると、処理はステップS48に移行され、図12−1を用いて説明した符号フォーマットに従い予測誤差値が符号化され、予測誤差ヘッダに付加されて予測誤差符号が生成される。そして、処理はステップS51に移行される。
一方、ステップS46で、予測誤差値が所定範囲外、すなわち、予測誤差値が−63未満若しくは63を超える値であると判定されたら、処理はステップS49に移行される。ステップS49で、ランレングス生成処理部205において、図12−1を用いて説明した符号フォーマットに従いPASSヘッダの符号化が行われる。PASSヘッダの符号化が行われると、処理はステップS50に移行され、注目画素GDATAの画素データそのものが符号としてPASSヘッダに付加されてPASS符号が生成される。そして、処理はステップS51に移行される。
ステップS51では、注目画素GDATAが現ラインの最終画素であるか否かが判定される。若し、注目画素GDATAが現ラインの最終画素ではないと判定されたら、処理はステップS52に移行され、ランレングス値が1とされ初期値にリセットされる。そして、処理はステップS31に戻され、スキャン順で次の画素を新たな注目画素GDATAとして、処理が繰り返される。
一方、ステップS51で、注目画素GDATAが現ラインの最終画素であると判定されたら、処理はステップS53に移行される。ステップS53では、ラインメモリ制御処理部201によって、ラインメモリ202の書き込み領域の切り替えが行われる。すなわち、当該注目画素GDATAの属する現ラインを符号化済みの前ラインとしてラインメモリ202の一方の領域にそのまま保持し、ラインメモリ202の他方の領域を、次に符号化を行うラインの画素データが格納される領域とする。そして、処理はステップS54に移行され、全てのラインについて処理が終了したか否かが判定される。若し、終了したと判定されたら、一連の符号化処理が終了される。
一方、ステップS54で全てのラインについて処理が終了していないと判定されたら、処理はステップS31に戻され、次のラインの先頭画素を注目画素GDATAとして、処理が繰り返される。
上述のステップS41で、注目画素GDATAに対応する属性値が1つ前の画素に対応する属性値と異なっていると判定されたら、処理はステップS42に移行される。
ステップS42では、ランレングス生成処理部205において、図12−1を用いて説明した符号フォーマットに従い属性ヘッダの符号化が行われる。属性ヘッダの符号化が行われると、処理はステップS43に移行され、図12−1を用いて説明した符号フォーマットに従い属性値が符号化され、属性ヘッダに付加されて属性符号が生成される。
ステップS43で属性符号が生成されると、処理はステップS44に移行され、ステップS34で求められた予測誤差値が0以外の値であるか否かが判定される。若し、予測誤差値が0以外の値であると判定されたら、処理は上述したステップS46に移行される。一方、予測誤差値が0であると判定されたら、処理は上述したステップS49に移行される。
図15を用いて、本発明の実施形態による符号化処理の例について、より具体的に説明する。図15−1は、上述した図14のフローチャートに従い符号化を行った場合の各値のより具体的な例を、画素単位で示す。また、図15−2は、図15−1に例示される画素および属性データを上述の図14のフローチャートに従い符号化して生成される符号データ(符号列)の例を概略的に示す。
なお、図15−1では、C版バンドデータに対して符号化を行った例を示す。C版バンドデータおよび属性データにおいて、番号#0の画素が先頭画素であって、図の左側から右側に向けて符号化処理がなされるものとする。符号は、図15−1に縦方向のならびとして例示されるように、属性値、予測誤差値、PASS値およびランレングス値の順で適宜、符号化される。
図15の例では、C版バンドデータにおいて、番号#2、番号#7、番号#10、番号#12および番号#15の画素で、それぞれ画素値が直前の画素に対して変化しているものとする。また、番号#2、番号#7、番号#10および番号#15の画素で、それぞれ属性値が直前の画素に対して変化しているものとする。
注目画素GDATAがラインの先頭画素(番号#0の画素)の場合、予測誤差値が0であって、且つ、属性値が変化した直後であるものと見做して、属性値と画素値(PASS値)の初期値を与える。すなわち、ステップS38で初期化フラグが1であると判定されて、ランレングス値の符号化を行わずにステップS40で初期化フラグが0とされる。初期化フラグは、以降、0から変化しない。そして、ステップS41で、1つ前の画素の属性値が注目画素GDATAの属性値と異なっていると判定され、ステップS42でステップS42およびステップS43で属性符号600が生成される。予測誤差値が0とされているので、ステップS44の判定により処理がステップS49に移行され、ステップS49およびステップS50によりPASS符号601が生成される。
注目画素GDATAはラインの最終画素ではないので、ステップS51の判定により処理がステップS52に移行されてランレングス値が1にリセットされて次の画素(番号#1の画素)が注目画素GDATAとされ、ステップS31からの処理が行われる。番号#1の画素は属性値が番号#0と同一なので、ステップS36の判定により処理がステップS37に移行されランレングス値に1が加算されて値が2とされ、ステップS31で次の画素(番号#2の画素)が注目画素GDATAとされる。
番号#2の画素は、1つ前の番号#1の画素と属性値が異なるので、ステップS36の判定により処理がステップS38に移行される。符号化フラグが0であるので、ステップS38の判定により処理がステップS39に移行されてランレングス値「2」が符号化され、ランレングス符号602が生成される。
番号#2の画素は、1つ前の番号#1の画素と属性値が異なるので、ステップS41の判定により、ステップS42およびステップS43により属性符号603が生成され、さらに予測誤差値が0ではなく且つ−63〜63の範囲内の値なので、ステップS44およびステップS45の判定により、ステップS47およびステップS48で予測誤差符号604が生成される。
ステップS52でランレングス値が1にリセットされて処理がステップS31に戻され、次の画素(番号#3の画素)が注目画素GDATAとされる。番号#2の画素から番号#6の画素までは、属性値が変化しないと共に予測誤差値が0であり、さらに、画素がラインの最終画素でもないので、ステップS36の判定により処理がステップS37に移行されて順次、ランレングス値に1が加算される。番号#6の画素の処理が行われた時点でのランレングス値は、5となる。
番号#6の画素の処理が終了すると、番号#7の画素が注目画素GDATAとされる。番号#7の画素は、1つ前の番号#6の画素と属性値が異なるので、ステップS36処理がステップS38に移行される。符号化フラグが0であるので、ステップS38の判定により処理がステップS39に移行されてランレングス値「5」が符号化され、ランレングス符号605が生成される。
番号#7の画素は、1つ前の番号#6の画素と属性値が異なるので、ステップS41の判定により、ステップS42およびステップS43により属性符号606が生成され、さらに予測誤差値が0ではなく且つ−63〜63の範囲内の値なので、ステップS44およびステップS45の判定により、ステップS47およびステップS48で予測誤差符号607が生成される。
ステップS52でランレングス値が1にリセットされて処理がステップS31に戻され、次の画素(番号#8の画素)が注目画素GDATAとされる。番号#7の画素から番号#9の画素までは、属性値が変化しないと共に予測誤差値が0であり、さらに、画素がラインの最終画素でもないので、ステップS36の判定により処理がステップS37に移行されて順次、ランレングス値に1が加算される。番号#9の画素の処理が行われた時点でのランレングス値は、3となる。
番号#9の画素の処理が終了すると、番号#10の画素が注目画素GDATAとされる。番号#10の画素は、1つ前の番号#9の画素と属性値が異なるので、ステップS36処理の判定により処理がステップS38に移行される。符号化フラグが0であるので、ステップS38の判定により処理がステップS39に移行されてランレングス値「3」が符号化され、ランレングス符号608が生成される。
番号#10の画素は、1つ前の番号#9の画素と属性値が異なるので、ステップS41の判定により、ステップS42およびステップS43により属性符号609が生成され、さらに予測誤差値が0ではなく且つ−63〜63の範囲外の値なので、ステップS44およびステップS45の判定により、ステップS49およびステップS50で、番号#10の画素の画素値そのものを用いてPASS符号610が生成される。
ステップS52でランレングス値が1にリセットされて処理がステップS31に戻され、次の画素(番号#11の画素)が注目画素GDATAとされる。番号#11の画素は属性値が番号#10と同一なので、ステップS36の判定により処理がステップS37に移行されランレングス値に1が加算されて値が2とされ、ステップS31で次の画素(番号#12の画素)が注目画素GDATAとされる。
番号#12の画素は、属性値が1つ前の番号#10の画素と同一である。一方、番号#12の画素は、予測誤差値が0ではないため、ステップS36の判定により処理がステップS38に移行される。初期化フラグが0であるので、ステップS38の判定により処理がステップS39に移行されてランレングス値「2」が符号化され、ランレングス符号611が生成される。
番号#12の画素は、属性値が1つ前の番号#10の画素と同一であるので、ステップS41の判定により処理がステップS45に移行される。番号#12の画素は、予測誤差値が0ではなく、且つ、−63〜63の範囲内の値であるため、ステップS47およびステップS48で予測誤差符号612が生成される。
以降、図14のフローチャートに従い処理が繰り返され、ランレングス符号613、属性符号614、予測誤差符号615およびランレングス符号616が順次、生成され、符号データが形成される。
図16を用いて、本発明の実施形態による符号化処理の他の例について説明する。ここでは、予測誤差値が0の状態が続く途中で、属性値が変化した場合について説明する。
なお、この図16の例は、上述の図15に示したC版バンドデータに対応するM版の例であり、図15の例と属性データが共通し、番号#2、番号#7、番号#10および番号#15の画素で、それぞれ属性値が直前の画素に対して変化している。また、図16の例において、画素値が番号#2、番号#4、番号#12および番号#15の画素でそれぞれ直前の画素に対して変化している一方で、予測処理による予測が良く的中し、予測誤差値が画素#2〜画素#14まで0となっている。
図15を用いて説明した例と同様にして、番号#6の画素まで処理が終了し、次の画素(番号#7の画素)の処理を行う場合ついて説明する。このとき、ランレングス値は、画素#2〜画素#6までの加算により値が5となっている。
番号#7の画素は、1つ前の番号#6の画素と属性値が異なるので、ステップS36処理の判定により処理がステップS38に移行される。符号化フラグが0であるので、ステップS38の判定により処理がステップS39に移行されてランレングス値「5」が符号化され、ランレングス符号620が生成される。
番号#10の画素は、1つ前の番号#6の画素と属性値が異なるので、ステップS41の判定により、ステップS42およびステップS43にて属性符号621が生成される。
さらに、番号#10の画素は予測誤差値が0なので、ステップS44の判定により、ステップS49およびステップS50にて番号#10の画素の画素値そのものを用いてPASS符号622が生成される。番号#10の画素はラインの最終画素ではないので、ステップS51の判定により処理がステップS52に移行されてランレングス値が1にリセットされる。
このように、予測誤差値が0であっても、属性値の変化に伴いランレングス値を初期化するため、属性値の変化点において、属性値が変化した画素の画素値をPASS符号として符号データに含める必要がある。こうすることで、復号時に、このPASS符号およびランレングス符号をそれぞれ復号して得られる画素値およびランレングス値に基づき、画素データを生成することができる。
<符号化装置>
図17は、本実施形態によるCMYK+A符号化部711の一例の構成を示すブロック図である。バスアービタI/F320は、バスアービタ708に対するインターフェイスである。バスアービタI/F320は、CMYK版画像DMAC709、属性DMAC710およびCMYKA符号DMAC12を介してバスアービタ708と通信を行うことで、バス734を介してのメインメモリ751に対する書き込み/読み出し要求やデータの読み書きなどを行う。
バンド画像読み込み部300は、バンドデータアドレス生成部301で生成されたアドレス情報に基づきバスアービタI/F320に対してメモリアドレスを送信する。バスアービタI/F320は、このメモリアドレスをCMYK版画像DMAC709を介してバスアービタ708に送信し、バス734を介してメインメモリ751のCMYKAバンドデータ格納領域751AからCMYKバンドデータをCMYK各版毎に読み出す。バンド画像読み込み部300は、読み出したバンドデータをラインメモリ制御部302に転送する。
ラインメモリ制御部302に対して、第1のラインメモリ303および第2のラインメモリ304が接続される。これら第1のラインメモリ303および第2のラインメモリ304は、同一のメモリの異なる領域であってもよい。ラインメモリ制御部302は、第1のラインメモリ303および第2のラインメモリ304の何れか一方を符号化ラインを格納するメモリとして割り当て、他方を参照ラインを格納するメモリとして割り当てる。そして、符号化ラインの符号化が終了したら、メモリの割り当てを切り替える。
ラインメモリ制御部302は、バンド画像読み込み部300から供給された画素データを、第1のラインメモリ303および第2のラインメモリ304のうち、符号化ラインを格納するメモリとして割り当てられた方(例えば第1のラインメモリ303とする)に書き込む。それと共に、この画素データは、ラインメモリ制御部302により注目画素の画素データとして予測処理部305に転送される。また、ラインメモリ制御部302は、第1のラインメモリ303および第2のラインメモリ304から、当該注目画素の周辺3画素a、bおよびcの画素データを読み出し、予測処理部305に転送する。
予測処理部305は、ラインメモリ制御部302から転送された画素a、bおよびcの画素データを用いて、上述した式(1)に従い平面予測により注目画素の画素値を予測する。注目画素の平面予測値を示すデータは、注目画素の画素データと共に、予測誤差処理部306に転送される。予測誤差処理部306は、予測処理部305から転送された平面予測値の注目画素の画素データによる画素値に対する誤差を求め、予測誤差データとして、注目画素の画素データと共にランレングス生成処理部310に転送する。
バンド属性読み込み部307は、バンド属性アドレス生成部308で生成されたアドレス情報に基づきバスアービタI/F320に対してメモリアドレスを送信する。バスアービタI/F320は、このメモリアドレスを属性DMAC710を介してバスアービタ708に送信し、バス734を介してメインメモリ751のCMYKAバンドデータ格納領域751Aから属性Aのバンドデータ(属性データ)を読み出す。バンド属性読み込み部307は、読み出した属性データを属性変化検出処理部309に転送する。
属性変化検出処理部309は、バンド属性読み込み部307から転送された属性データに示される属性値の変化を検出する。属性変化検出処理部309は、属性値の変化が検出されると、変化後の属性値を示す属性データをランレングス生成処理部310に転送する。
ランレングス生成処理部310は、予測誤差処理部306から転送された予測誤差データと、属性変化検出処理部309から転送された属性データとに基づきランレングスを生成する。より具体的には、ランレングス生成処理部310は、予測誤差データが示す予測誤差値が「0」である場合に、ランレングス値を1だけ増加させて予測誤差値が「0」の長さを計数することで、ランレングス値を生成する。一方、ランレングス生成処理部310は、予測誤差値が「0」以外の場合、予測誤差値を示す予測誤差データと、ランレングス値を示すランレングスデータとを、注目画素の画素値を示す画素データと共に符号フォーマット生成処理部311に転送する。
また、ランレングス生成処理部310は、予測誤差値が「0」であっても、属性値の変化があった場合、すなわち、属性変化検出処理部309から属性データが転送された場合は、ランレングスの生成を中止する。そして、属性データと、予測誤差値を示す予測誤差データと、ランレングス値を示すランレングスデータとを、注目画素の画素値を示す画素データと共に符号フォーマット生成処理部311に転送する。
符号フォーマット生成処理部311は、ランレングス生成処理部310から転送されたランレングスデータ、予測誤差データ、属性データおよび注目画素の画素データに基づき図12−1および図12−2を用いて説明したようにして符号化を行い、符号データを生成する。生成された符号データは、符号書き込み部312に転送される。
すなわち、符号フォーマット生成処理部311は、ランレングス生成処理部310から転送されたランレングスデータが示すランレングス値を符号化してランレングス符号を生成する。また、ランレングス生成処理部310から転送された予測誤差データが示す予測誤差値が所定範囲内の値であれば、予測誤差ヘッダおよび予測誤差値を符号化して予測誤差符号を生成する。また、予測誤差値が所定範囲外の値の場合には、PASSヘッダを符号化すると共に注目画素の画素値そのものを符号として用いてPASS符号を生成する。さらに、属性値が変化しランレングス生成処理部310から属性データが転送された場合は、属性ヘッダを符号化して属性符号を生成する。
なお、符号フォーマット生成処理部311でランレングス値が符号化された後、ランレングス生成処理部310においてランレングス値が初期化される。
符号フォーマット生成処理部311は、生成した各符号をバンド符号書き込み部312に転送する。バンド符号書き込み部312は、バンド符号アドレス生成部313で生成されたアドレス情報に基づき、符号フォーマット生成処理部311から転送された各符号データをメインメモリ751のページ符号格納領域751Bに書き込むためのアドレスを生成する。生成されたこのアドレスは、符号フォーマット生成処理部311から転送された各符号データと共に、バンド符号書き込み部312からバスアービタI/F320に転送される。バスアービタI/F320は、バンド符号書き込み部312から転送されたアドレスに基づき、各符号データをメインメモリ751のページ符号格納領域751Bに書き込むように、バスI/F34に要求する。
<復号処理の概略>
図18は、本発明の実施形態によるC+A復号部717の動作を説明するための一例の機能ブロック図である。なお、M+A復号部718、Y+A復号19およびK+A復号部720は、このC+A復号部717と同様の構成で実現できるので、ここではC+A復号部717でこれらを代表させて説明を行う。
C+A復号部717において、符号読み込み部400は、メインメモリ751のページ符号格納領域751BからC+A版バンド符号データを読み出し、符号フォーマット解析部401に転送する。符号フォーマット解析部401は、転送された符号データのヘッダに基づき、当該符号データが属性符号、予測誤差符号およびPASS符号のうち何れであるかを解析する。そして、当該符号データが属性符号であれば、図12−1を用いて説明した符号フォーマットに基づき属性値を復号し、属性データとして属性値生成処理部407に転送する。
一方、符号フォーマット解析部401は、転送された符号データが予測誤差符号またはPASS符号であれば、図12−1を用いて説明した符号フォーマットに基づき予測誤差値または画素値を復号する。そして、復号した予測誤差値または画素値を、予測誤差データまたは画素データとして、予測符号ヘッダまたはPASSヘッダと共に誤差処理部403に転送する。
さらに、符号フォーマット解析部401は、転送された符号データが予測誤差符号またはPASS符号の場合に、予測誤差符号またはPASS符号に続けて配置されるランレングス符号を取り出す。そして、図12−2を用いて説明した符号フォーマットに基づきランレングス符号をランレングス値に復号し、復号されたランレングス値をランレングスデータとしてランレングス処理部402および属性値生成処理部407に転送する。
誤差処理部403において、画素値生成処理部414は、符号フォーマット解析部401から転送されたヘッダが予測誤差ヘッダおよびPASSヘッダの何れであるかを判定する。若し、ヘッダがPASSヘッダであると判定されたら、符号フォーマット解析部401からヘッダと共に転送されたデータが画素データそのものであるので、当該画素データをラインメモリ制御処理部404に転送する。
一方、符号フォーマット解析部401から転送されたヘッダが予測誤差ヘッダであると判定されたら、予測処理部413により、ラインメモリ制御処理部404によりラインメモリ405から読み出された、注目画素の周辺3画素の復号済みの画素a、bおよびcの画素データに基づき、復号を行う注目画素の画素値を、平面予測により予測する。画素値生成処理部414は、符号フォーマット解析部401から転送された予測誤差データによる予測誤差値と、予測処理部620で予測された予測値とを加算して、注目画素の画素値を生成する。生成された画素値による画素データは、ラインメモリ制御処理部404に転送される。
ランレングス処理部402において、予測処理部410は、ラインメモリ制御処理部404から供給される、注目画素の周辺3画素の復号済みの画素a、bおよびcの画素データに基づき、上述の予測処理部413と同様にして注目画素の画素値を予測して、予測値を画素値生成処理部411に転送する。画素値生成処理部411は、予測処理部410から転送された予測値に基づき画素値を生成する。生成された画素値の画素データは、ランレングス処理制御部412の制御により、符号フォーマット解析部401から転送されたランレングスデータによるランレングス値で示される長さだけ出力される。ランレングス処理部402から出力された画素データは、ラインメモリ制御処理部404に転送される。
ラインメモリ制御処理部404は、ランレングス処理部402および誤差処理部403から転送された画素データをラインメモリ405に書き込むと共に、画像出力部406を介してC+A復号部717から出力する。
なお、ラインメモリ405は、復号を行っている現ラインと、直前に復号が終了した前ラインとの2ライン分の画素データを格納可能とされている。ラインメモリ制御処理部404は、ラインメモリ405に対する画素データの読み書きを制御する。例えば、ラインメモリ制御処理部604は、注目画素の周辺3画素a、bおよびcをラインメモリ405から読み出して、上述の誤差処理部402およびランレングス処理部403にそれぞれ供給する。
属性値生成処理部407は、符号フォーマット解析部401から転送された属性データを、符号フォーマット解析部401から転送されたランレングスデータによるランレングス値に示される長さだけ出力する。属性値生成処理部407から出力された属性データは、属性出力部408を介してC+A復号部717から出力される。ここで、属性データの出力は、上述した画像出力部406からの画素データの出力と、画素単位で同期的に行われる。
<復号処理の詳細>
図19は、C+A復号部717で行われる、本実施形態の符号化処理により符号化された符号データに対する復号処理を示す一例のフローチャートである。なお、M+A復号部718、Y+A復号部719およびK+A復号部720での処理は、このC+A復号部717での処理と同一なので、C+A復号部717での処理でCMYK各版の復号処理を代表させて説明する。
ステップS60で、符号読み込み部400によりメインメモリ751のページ符号格納領域751BからC+A版バンド符号が読み込まれる。符号フォーマット解析部401は、符号読み込み部400に読み込まれたC+A版バンド符号の先頭3ビットのヘッダを読み込んで解析し、符号が予測誤差符号、PASS符号および属性符号の何れであるかを判定する(ステップS61およびステップS65)。
すなわち、符号フォーマット解析部401は、先ずステップS61で、ヘッダが予測誤差ヘッダであるか否かを判定する。若し、ヘッダが予測誤差ヘッダではないと判定されたら、処理はステップS65に移行され、当該ヘッダがPASSヘッダであるか否かが判定される。ここで当該ヘッダがPASSヘッダではないと判定されたら、当該ヘッダが属性ヘッダであるため、符号が属性符号に確定される。この場合、処理がステップS67に移行され、ヘッダに続く数値部分が読み込まれ、図12−1を用いて説明した符号フォーマットに従い属性値が求められる。ステップS67で属性値が得られたら、処理は後述するステップS77に移行される。
符号フォーマット解析部401により、ステップS61でヘッダが予測誤差ヘッダであると判定されたら、符号が予測誤差符号であるとされ、処理はステップS62に移行される。そして、ヘッダに続く数値部分が読み込まれ、図12−1を用いて説明した符号フォーマットに従い予測誤差値が求められる。次のステップS63で、誤差処理部403内の予測処理部413で、ラインメモリ405から読み出された、復号を行う注目画素GDATAの周辺3画素a、bおよびcの画素値に基づき、上述の式(1)に従い注目画素GDATAの画素値を平面予測により予測する。
次のステップS64で、画素値生成処理部414により、ステップS62で求められた予測誤差値とステップS63で求められた予測値とが加算されて、注目画素GDATAの画素値が生成される。そして、処理がステップS68に移行される。
一方、上述のステップS61でヘッダが予測誤差ヘッダでないと判定され、次のステップS65でヘッダがPASSヘッダであると判定されたら、符号がPASS符号であるとされ、処理はステップS66に移行される。ステップS66では、ヘッダに続く数値部分が読み込まれ、図12−1を用いて説明した符号フォーマットに従いPASS符号から画素値が取り出され、これが注目画素GDATAの画素値とされる。そして、処理がステップS68に移行される。
ステップS68では、上述のステップS61の判定処理またはステップS65の判定処理で確定された予測誤差符号またはPASS符号に続けて配置されるランレングス符号が、符号フォーマット解析部401に読み込まれる。そして、次のステップS68で、図12−2を用いて説明した符号フォーマットに従いランレングス符号をランレングス値に復号する。
次のステップS70では、上述のステップS64またはステップS66で求められた注目画素GDATAの画素値が、ラインメモリ405の現ラインの領域に書き込まれる。この注目画素GDATAの画素値は、次のステップS71で、画像出力部406により出力される。また、ステップS71では、上述のステップS67で前回の処理の際に求められ、属性出力部408に保持された属性値も、注目画素GDATAの画素値と同期的に出力される。
ステップS71で画素値および属性値が出力されると、処理はステップS72に移行され、ステップS69で求められたランレングス値が1であるか否かが判定される。若し、ランレングス値が1であると判定されたら、処理は後述するステップS77に移行される。
一方、ランレングス値が1ではないと判定されたら、処理はステップS73に移行される。ステップS73では、ランレングス処理部402内の予測処理部410において、ラインメモリ405から読み出された、復号を行う注目画素の周辺3画素a、bおよびcの画素値に基づき、上述の式(1)に従い注目画素の画素値が平面予測により予測される。そして、この予測により得られた予測値が、注目画素GDATAの画素値とされる。
ステップS73で得られた注目画素GDATAの画素値は、次のステップS74で、ラインメモリ405の現ラインの領域に書き込まれる。この注目画素GDATAの画素値は、次のステップS75で、画像出力部406により出力される。また、ステップS75では、上述のステップS67で前回の処理の際に求められ、属性出力部408に保持された属性値も、注目画素GDATAの画素値と同期的に出力される。
次のステップS76では、ステップS69で求められたランレングス値から1を減じた回数だけ、ステップS73〜ステップS75の処理が繰り返されたか否かが判定される。若し、ランレングス値から1を減じた回数だけ処理を行っていないと判定されたら、処理はステップS73に戻される。
一方、ステップS76で、ランレングス値から1を減じた回数だけ処理を行ったと判定されら、処理はステップS77に移行される。ステップS77では、注目画素GDATAすなわち直前に出力された画素がラインの最終画素であるか否かが判定される。若し、最終画素であると判定されたら、処理はステップS78に移行され、ラインメモリ405において前ラインの領域と現ラインの領域とが切り替えられる。例えば、直前に出力された画素の属する現ラインを復号済みの前ラインとしてラインメモリ405の一方の領域にそのまま保持し、ラインメモリ405の他方の領域を、次に復号を現ラインの画素が格納される領域とする。そして、処理はステップS79に移行される。
ステップS79では、全ての画素について処理が終了したか否かが判定される。若し、終了したと判定されたら、一連の復号処理が終了される。一方、ステップS79で、全ての画素について処理が終了していないと判定されたら、処理はステップS60に戻され、次の符号について処理が行われる。
<復号装置>
図20は、本発明の実施形態によるC+A復号部717の一例の構成を示すブロック図である。なお、M+A復号部718、Y+A復号19およびK+A復号部720は、このC+A復号部717と同様の構成で実現できるので、ここではC+A復号部717でこれらを代表させて説明を行う。
バスアービタI/F500は、バスアービタ708に対するインターフェイスである。バスアービタI/F500は、C+A版符号DMAC713を介してバスアービタ708と通信を行うことで、バス734を介してのメインメモリ751に対する読み出し要求やメインメモリ751からのデータの読み出しを行う。
バンド符号読み込み部501は、バンド符号アドレス生成部502で生成されたアドレス情報に基づきバスアービタI/F500に対してメモリアドレスを送信する。バスアービタI/F500は、このメモリアドレスをC+A版符号DMAC713を介してバスアービタ708に送信し、バス734を介してメインメモリ751のページ符号格納領域751BからC+A版バンド符号を読み出す。バンド符号読み込み部501は、読み出したC+A版の符号データを、符号フォーマット解析部503に転送する。
符号フォーマット解析部503は、転送された符号データのヘッダに基づき、当該符号データが属性符号、予測誤差符号およびPASS符号のうち何れであるかを解析する。そして、当該符号データが属性符号であれば、図12−1を用いて説明した符号フォーマットに基づき属性値を復号し、属性データとして属性値生成処理部510に転送する。
一方、符号フォーマット解析部503は、転送された符号データが予測誤差符号またはPASS符号であれば、図12−1を用いて説明した符号フォーマットに基づき予測誤差値または画素値を復号する。そして、復号した予測誤差値または画素値を、予測誤差データまたは画素データとして、予測誤差ヘッダまたはPASSヘッダと共に誤差処理部505に転送する。
さらに、符号フォーマット解析部503は、転送された符号データが予測誤差符号またはPASS符号の場合に、予測誤差符号またはPASS符号からランレングス符号を取り出す。そして、図12−2を用いて説明した符号フォーマットに基づきランレングス符号をランレングス値に復号し、復号されたランレングス値をランレングスデータとしてランレングス処理部504および属性値生成処理部510に転送する。
誤差処理部505において、予測処理部530は、ラインメモリ制御部7506により第1のラインメモリ507および第2のラインメモリ508からそれぞれ読み出された、注目画素の周辺3画素a、bおよびcの画素データに基づき、復号を行う注目画素の画素値を、平面予測により予測する。予測値を示す予測値データは、画素値生成処理部531に転送される。
画素値生成処理部531は、符号フォーマット解析部503から転送されたヘッダが予測誤差ヘッダおよびPASSヘッダの何れであるかを判定する。若し、ヘッダがPASSヘッダであると判定されたら、符号フォーマット解析部401からヘッダと共に転送されたデータが画素データそのものであるので、当該画素データをラインメモリ制御処理部506に転送する。
一方、画素値生成処理部531は、符号フォーマット解析部503から転送されたヘッダが予測誤差ヘッダであると判定されたら、予測処理部530から転送された予測値データが示す予測値と、符号フォーマット解析部503から転送された予測誤差データによる予測誤差値を加算して、注目画素の画素値を生成する。生成された画素値による画素データは、ラインメモリ制御処理部506に転送される。
ランレングス処理部504において、予測処理部510は、予測処理部530は、ラインメモリ制御部7506により第1のラインメモリ507および第2のラインメモリ508からそれぞれ読み出された、注目画素の周辺3画素a、bおよびcの画素データに基づき、上述の予測処理部530と同様にして注目画素の画素値を予測する。予測値を示す予測値データは、画素値生成処理部521に転送される。
画素値生成処理部521は、予測処理部620から転送された予測値データに基づき画素値を生成する。生成された画素値の画素データは、ランレングス画素値生成制御処理部522の制御により、符号フォーマット解析部503から転送されたランレングスデータによるランレングス値で示される長さだけ出力される。ランレングス処理部504から出力された画素データは、ラインメモリ制御処理部506に転送される。
ラインメモリ制御処理部506は、ランレングス処理部504および誤差処理部505から転送された画素データを、第1のラインメモリ507および第2のラインメモリ508のうち現ラインのデータが格納される方に書き込むと共に、画像処理部I/F509に転送する。
なお、ラインメモリ制御処理部506に対して接続される第1のラインメモリ507および第2のラインメモリ508は、同一のメモリの異なる領域であってもよい。ラインメモリ制御部7506は、第1のラインメモリ507および第2のラインメモリ508の何れか一方を現ラインを格納するメモリとして割り当て、他方を前ラインを格納するメモリとして割り当てる。そして、符号化ラインの符号化が終了したら、メモリの割り当てを切り替える。
属性値生成処理部510は、符号フォーマット解析部503から転送された属性データを、符号フォーマット解析部503から転送されたランレングスデータによるランレングス値に示される長さだけ順次、出力する。属性生成処理部510から出力された属性データは、画像処理部I/F509に転送される。
画像処理部I/F509は、ラインメモリ制御部7506から転送された画素データと、属性値生成処理部510から転送された属性データを、互いに同期的に出力し、C版階調処理部721に転送する。
<効果>
上述したように、本発明では、画像データと属性データとをランレングス符号化により符号化する際に、画像データのランレングス値を属性データの変化点で終端とさせて、この変化点に属性データの符号を織り込むようにしている。そのため、画像データと属性データとを1の符号に符号化することができ、1の復号装置で画像データと属性データの復号を行うことができ、印字時のバス転送の無駄を省くことが可能である。
また、画像データの符号化と属性データの符号化とが一体的に行われるので、1の符号化装置で画像データおよび属性データの符号化を行うことができ、装置規模を低減させることができる。
さらに、上述した図15および図16に示されるように、ランレングス符号を属性データおよび画像データのそれぞれで持つ必要が無く、符号量の低減が図れる。
<他の実施形態>
なお、上述では、本発明の実施形態によるCMYK+A符号化部711、ならびに、C+A復号部717(およびM+A復号部718、Y+A復号部719、K+A復号部720(以下、C+A復号部717で代表させる))を構成する各部がハードウェア的に構成されるように説明したが、これはこの例に限定されない。すなわち、本発明に実施形態に適用な可能な画像処理装置におけるCMYK+A符号化部711およびC+A復号部717は、画像処理装置に組み込まれたCPU(図示しない)上で動作するプログラムとして、それぞれ実現可能である。
この場合、CPU上でCMYK+A符号化部711として実行されるプログラムは、例えば図10を用いて説明したCMYK+A符号化部711の各機能部(画像読み込み部200、ラインメモリ制御処理部201、予測処理部203、予測誤差処理部204、ランレングス生成処理部205、属性読み込み処理部206、属性変化検出処理部207、符号フォーマット生成処理部4208および符号書き込み部209)を含むモジュール構成となっている。同様に、CPU上でC+A復号部717として実行されるプログラムは、図18を用いて説明したC+A復号部717の各機能部(符号読み込み部400、符号フォーマット解析部401、ランレングス処理部402、予測誤差処理部403、ラインメモリ制御処理部404、画像出力部406、属性値生成処理部407および属性出力部408)を含むモジュール構成となっている。
これらのプログラムは、ンストール可能な形式又は実行可能な形式のファイルでCD(Compact Disk)、フレキシブルディスク(FD)、DVD(Digital Versatile Disk)などのコンピュータで読み取り可能な記録媒体に記録されて提供される。これに限らず、プログラムは、CPUに接続されるROM(図示しない)に予め記憶させておいてもよい。さらに、プログラムは、インターネットなどのネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、このプログラムを、インターネットなどのネットワーク経由で提供または配布するように構成してもよい。
実際のハードウェアとしては、CPUが、例えば上述した記録媒体から符号化部204や復号部205として機能するプログラムを読み出して実行することにより、上述した各部が主記憶装置(図示しない)上にロードされる。そして、例えばCMYK+A符号化部711を実行するプログラムの場合、画像読み込み部200、ラインメモリ制御処理部201、予測処理部203、予測誤差処理部204、ランレングス生成処理部205、属性読み込み処理部206、属性変化検出処理部207、符号フォーマット生成処理部4208および符号書き込み部209が主記憶装置上に生成されるようになっている。