(57)【特許請求の範囲】
【請求項１】
入力される多値画像データをディザ処理手段でディザ処理し、符号化手段で圧縮符号化する画像処理装置であって、
ラスター順に多値画素データを入力する入力手段と、
該入力手段で入力した多値画素データを、ディザマトリクス中の閾値と比較することでディザ処理するディザ処理手段と、
該ディザ処理手段で処理された結果と、ディザマトリクスの幅Ｎの画素数分だけ先行してディザ処理された結果とを排他論理和する排他論理和手段と、
該排他論理和手段の結果に基づいて符号化する符号化手段とを備え、更に、
前記入力手段で入力された多値画素データにおける同じ値の連続数ＲＵＮを検出する検出手段と、
該検出手段で検出した連続数ＲＵＮと前記Ｎとの関係がＲＵＮ＞Ｎとなっているか否かを判断する判断手段と、
該判断手段で越えていると判断した場合、連続する画素の後端からＲＵＮ−Ｎ個の画素については、０値がＲＵＮ−Ｎ個発生するものとして直接符号化する制御手段と
を備えることを特徴とする画像処理装置。
【請求項２】
前記検出手段は、ディザマトリクスの各閾値の差に応じた範囲内にある多値画素データを同じ値としてみなして計数すること特徴とする請求項第１項に記載の画像処理装置。
【請求項３】
更に、前記ディザ処理手段、排他論理和手段、符号化手段を各色成分だけ備え、前記入力手段で入力したカラー多値画素データをそれぞれに分配する手段を備えることを特徴とする請求項第１項に記載の画像処理装置。
【請求項４】
前記排他的論理和手段は、ディザ処理後のデータをＮ個記憶するＦＩＦＯメモリを備え、入力するディザ処理後のデータを前記ＦＩＦＯメモリからの出力値とを排他論理和することを特徴とする請求項第１項に記載の画像処理装置。
【請求項５】
入力される多値画像データをディザ処理手段でディザ処理し、符号化手段で圧縮符号化する画像処理方法であって、
ラスター順に多値画素データを入力する入力工程と、
該入力工程で入力した多値画素データを、ディザマトリクス中の閾値と比較することでディザ処理するディザ処理工程と、
該ディザ処理工程で処理された結果と、ディザマトリクスの幅Ｎの画素数分だけ先行してディザ処理された結果とを排他論理和する排他論理和工程と、
該排他論理和工程の結果に基づいて符号化する符号化工程とを備え、更に、
前記入力工程で入力された多値画素データにおける同じ値の連続数ＲＵＮを検出する検出工程と、
該検出工程で検出した連続数ＲＵＮと前記Ｎとの関係がＲＵＮ＞Ｎとなっているか否かを判断する判断工程と、
該判断工程で越えていると判断した場合、連続する画素の後端からＲＵＮ−Ｎ個の画素については、０値がＲＵＮ−Ｎ個発生するものとして直接符号化する制御工程と
を備えることを特徴とする画像処理方法。
【請求項６】
コンピュータが読み込み実行することで、入力される多値画像データをディザ処理手段でディザ処理し、符号化手段で圧縮符号化する画像処理装置として機能するコンピュータプログラムであって、
ラスター順に多値画素データを入力する入力手段と、
該入力手段で入力した多値画素データを、ディザマトリクス中の閾値と比較することでディザ処理するディザ処理手段と、
該ディザ処理手段で処理された結果と、ディザマトリクスの幅Ｎの画素数分だけ先行してディザ処理された結果とを排他論理和する排他論理和手段と、
該排他論理和手段の結果に基づいて符号化する符号化手段とを備え、更に、
前記入力手段で入力された多値画素データにおける同じ値の連続数ＲＵＮを検出する検出手段と、
該検出手段で検出した連続数ＲＵＮと前記Ｎとの関係がＲＵＮ＞Ｎとなっているか否かを判断する判断手段と、
該判断手段で越えていると判断した場合、連続する画素の後端からＲＵＮ−Ｎ個の画素については、０値がＲＵＮ−Ｎ個発生するものとして直接符号化する制御手段と
して機能するコンピュータプログラム。
【請求項７】
請求項６に記載のコンピュータプログラムを格納することを特徴とするコンピュータ可読記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は画像データの圧縮処理をおこなう画像処理装置および画像処理方法に関するものである。
【０００２】
【従来の技術】
レーザプリンタにおいて階調画像を再現する手法の１つとして、プリンタ記述言語からレンダリングした画像（多値画像）にディザ処理を施した後、プリントエンジンによって印刷するという構成をとるものがある。このとき、メモリ中にレンダリング後の画像を複数ページ保持することができると、プリントエンジンが画像を印刷中に、印刷ジョブ中の後続のページをあらかじめレンダリングしておくことができ、印刷の性能が向上する。しかしながら、プリンタの解像度が向上するにつれ、画像を保持するのに必要となるメモリ量は増大していく。そこで、何らかの方法をもちいて、レンダリング後の画像を圧縮する必要が生じる。ここで、複雑な圧縮方法を用いると、画像の圧縮に必要な処理時間が増大し、画像圧縮によって得られる性能向上という利点を相殺されてしまう。そのため、処理が簡単で、圧縮効率のよい、圧縮方法が望ましいことになる。
【０００３】
【発明が解決しようとする課題】
処理が簡単な画像圧縮方法としては、ランレングス符号化があるが、ディザ法により処理された画像は、ランレングス符号化を適用すると、圧縮後のデータサイズが、圧縮前のデータサイズより大きくなってしまう。
【０００４】
この問題を解決する１つの手段としては例えば特開平９−２９４２１０号公報がある。しかしながら、この公報に記載された技術は、ディザ処理済の画像を前提にし、且つ、ディザ処理と圧縮処理とが別々となっており、効率化の点では改善の余地がある。
【０００５】
本発明はかかる問題点を解決するためになされたもので、単純な構成で、ディザ処理と圧縮処理を効率良く、且つ、高速に実行する画像処理装置及び方法及びコンピュータプログラム並びにコンピュータ可読記憶媒体を提供しようとするものである。
【０００６】
【課題を解決するための手段】
かかる課題を解決するため、例えば本発明の画像処理装置は以下の構成を備える。すなわち、
入力される多値画像データをディザ処理手段でディザ処理し、符号化手段で圧縮符号化する画像処理装置であって、
ラスター順に多値画素データを入力する入力手段と、
該入力手段で入力した多値画素データを、ディザマトリクス中の閾値と比較することでディザ処理するディザ処理手段と、
該ディザ処理手段で処理された結果と、ディザマトリクスの幅Ｎの画素数分だけ先行してディザ処理された結果とを排他論理和する排他論理和手段と、
該排他論理和手段の結果に基づいて符号化する符号化手段とを備え、更に、
前記入力手段で入力された多値画素データにおける同じ値の連続数ＲＵＮを検出する検出手段と、
該検出手段で検出した連続数ＲＵＮと前記Ｎとの関係がＲＵＮ＞Ｎとなっているか否かを判断する判断手段と、
該判断手段で越えていると判断した場合、連続する画素の後端からＲＵＮ−Ｎ個の画素については、０値がＲＵＮ−Ｎ個発生するものとして直接符号化する制御手段とを備える。
【０００７】
【発明の実施の形態】
以下、添付図面に従って本発明にかかる実施形態を詳細に説明する。
【０００８】
＜基礎技術の説明＞
先ず、実施形態における基本技術について説明する。説明を簡単なものとするため、８×８画素ブロック単位に２値化を行うディザ処理について説明するが、処理単位である画素ブロックのサイズは勿論これに限定されるものではなく、正方である必要もない。また、２値化ではなく、３値化、４値化…であっても構わない。要するに入力される階調画素の階調数（８ビットであれば２５６階調）を、それより少ない階調数にするものであれば良い。
【０００９】
図７（ａ）は８×８画素ブロック毎にディザマトリクス（各マトリクス要素には閾値が設定されている）を用いて２値化結果の画像データを示している。図示において斜線部分が２値化結果の“１”の画素を、それ以外は“０”に２値化されたことを示している。
【００１０】
通常、写真等の多階調画像の場合、局所的にみると、濃度変化はなだらかになっていて、変化が小さい。従って、２値化結果も、隣接する画素ブロック間では同様の結果になる傾向が高い。図７（ａ）はかかる多値画像の２値化結果を示しており、各ブロック毎に同様の２値化結果となっていることを示している。かかる２値化結果についてハフマン符号化処理を行ったとしても、“１”の画素が点在し、ランを稼げず、先に示したように高い符号化効率は望めない。
【００１１】
そこで、２番目の２値化結果のブロックについては、その直前、すなわち、１番目の２値化結果のブロックとの排他的論理和演算処理を行う。先に説明したように多階調画像のディザ処理結果は、近接する画素ブロック間における相関関係は高いので、この結果、注目している２番目のブロックについては“１”となっている画素数は“０”になり、“１”として残る画素数は激減する。換言すれば、“０”のランが稼ぐことができることになる。３番目の２値化結果のブロックについても、直前の画素ブロックの２値化結果と排他的論理和演算を行うことで、同様の結果を得る。
【００１２】
上記処理結果を示すのが図７（ｂ）であり、先頭のブロックについては、２値化結果がそのまま残るものの、２番目以降についてはほとんどが“０”になっていることがわかる。
【００１３】
なお、２番目以降の２値化結果を復元する場合、今度は、図７（ｂ）について、先と同様の排他的論理和演算を行えば良いのは、これまでの説明からすれば容易に理解できよう。
【００１４】
また、９〜１６ライン（画素ブロックライン）についても同様に行うが、先頭の画素ブロックを除いて、同様の効果が期待できるし、それ以降の画素ブロックラインについも同様である。
【００１５】
以上はディザ処理により画素ブロック単位のものであったが、通常、画像データはラスター順に入力されるので、上記のブロック単位の処理を行う場合には、少なくとも８ライン分のバッファメモリを介在させ、８×８の多値データを１単位に読み取って処理せざるを得ない。
【００１６】
本実施形態では、かかる多ラインのバッファを必要とせず、且つ、ディザ処理と符号化処理を更に効率良く実行させることに成功するものである。
【００１７】
＜実施形態の説明＞
実施形態における画像圧縮装置のブロック構成図を図１に示す。説明を簡単なものとするため、入力画素は単一の色成分（モノクロ画像）とし、１画素当たり８ビット（２５６階調）であるとする。また、ディザ処理は２値化であり、そのディザマトリクスサイズは一般にＮ×Ｍで表現できるが、ここでは８×８のサイズとする。ただし、かかる点で本願発明が限定されるものではない。
【００１８】
さて、実施形態における画像圧縮装置は、図１に示す如く、バッファメモリ１、ディザ処理部２、ＦＩＦＯ３、排他的論理和演算器４、ハフマン符号化部５、ラン検出部６、全体の制御を司る制御部７で構成される。
【００１９】
実施形態では、プリンタ内部のメモリに展開（レンダリング）された多値画像データをディザ処理して圧縮するものであるので、バッファメモリ１は制御部７の制御下で、この展開されたデータをラスター順に読込むことになる。また、このバッファメモリ１は、１ラインの数分の１程度の容量で充分である。つまり、少なくとも多ライン分の容量は不要である。
【００２０】
ラン検出部６は、バッファメモリ６に格納された先頭画素の多値データに後続し、その先頭画素と同じ画素値がいくつ連続するかを検出する。ディザ処理部２は入力した多値データをラスター単位にディザ処理（２値化）を行うことになる。
【００２１】
ＦＩＦＯ３はディザ処理部２のディザマトリックスの列幅Ｎ（＝８）と同じ個数の画素を保持（遅延）するＦＩＦＯバッファである。排他的論理和演算器４は、ＦＩＦＯ３への入力および、ＦＩＦＯ３に格納される画素との排他的論理和を計算する。ＦＩＦＯ３はディザマトリクスの列幅分の容量を有するわけであるから、排他的論理和演算器４は、隣り合った画素ブロック内の相対的に同じ位置の２値化データを論理和することに他ならない。
【００２２】
ハフマン符号化部５は、制御部７からの指示、又は、排他的論理和演算器４の出力をもとに、出力符号列を生成する。
【００２３】
なお、上記ディザ処理部２には、８×８画素分の閾値テーブルが設けられ、最初のラスター画像を２値化する場合には、そのテーブルの第１行に相当する閾値（８個）を用いて８画素単位にサイクリックに２値化していく。そして、２ライン目のラスター画像を２値化する場合には、テーブルの２行目に相当する閾値を用いて２値化する。以下、８ライン目の２値化が終わり、９ラインめの２値化を行う場合には、テーブルの第１行の閾値を用いて２値化する（詳細は後述）。
【００２４】
実施形態における装置全体の処理の流れを図２に示す。
【００２５】
まず、入力される多値画像の１行（１ラスタ）の圧縮処理を行う。この１行に対する圧縮符号化処理を終えると、ステップＳ１０２で、画像のすべての行について処理を行ったかどうかを判定し、処理していない行があれば、ステップＳ１０１に戻って処理を続ける。すべての行の処理が終わっていれば、全体の処理を終了する。
【００２６】
上記図２のステップＳ１０１の１ライン圧縮処理の詳細を示すのが図３である。以下、更に詳しく説明する。
【００２７】
先ず、ステップＳ２０１において、処理対象の行に対応するディザマトリックスの閾値（実施形態の場合には８個）を、ディザ処理部２の閾値配列にセットする。続いてステップＳ２０２において、ＦＩＦＯ３の内容をすべて０で初期化する。ここまでが１行分の処理の初期化であり、引き続き、ディザおよび圧縮の処理の本体が始まる。
【００２８】
ステップＳ２０３で、ラン検出部６において、同じ値の画素数をカウントする。ここで、得られた画素数をＲＵＮとする。ステップＳ２０４で、ＲＵＮがディザマトリックスの列数Ｎ（実施形態ではディザマトリクスはラスター方向に８列であるので「８」となる）より大きいかどうか判別する。ＲＵＮ＞Ｎであれば、ステップＳ２０６に進み、そうでなければステップＳ２０５に進む。
【００２９】
ステップＳ２０４において、ＲＵＮ＞Ｎの場合について説明する。
【００３０】
画素数ＲＵＮ＞Ｎとなる場合、ＲＵＮで示される数の画素データの後端からＲＵＮ−Ｎの画素群は、少なくとも、注目画素ブロックに隣接する画素ブロック中のデータを意味する。すなわち、この隣接画素ブロック中のＲＵＮ−Ｎの画素データのディザ処理後のデータは、注目画素ブロック中のＲＵＮ−Ｎの画素のディザ処理結果と必ず同じになる。
【００３１】
先の図７で説明したように、画素ブロック間の同じ位相にあるディザ処理後のパターンが同じである場合には、排他的論理和演算の結果は必ず“０”になる。したがって、上記における隣接画素ブロックのＲＵＮ−Ｎ個の多値画素データのディザ処理及び排他的論理和結果は、この時点で、“０”になることが判明していることに他ならない。そこで、本実施形態では、この時点で、次画素ブロックのＲＵＮ−Ｎ個の“０”のハフマン符号を生成する。つまり、ディザ処理において（厳密にはディザ処理以前）に符号化を同時に実行できることを意味する。より具体的には、ＲＵＮ−Ｎ個のデータに対する符号化処理がこの時点で完了しているわけであり、その画素データについてはこれ以上の処理を行うことは不要（破棄しても良い）であり、この個数に見合う新たな多値画素データをバッファ１に入力を行っても構わないことになる。実施形態では、メモリに一旦レンダリング処理したデータを圧縮符号化する装置に適用しているわけであるから（ビデオカメラ等の場合には出力速度は一定であるので符号化速度はビデオ信号の出力速度に依存し、それを越えることはできない）、ディザ処理、ＦＩＦＯ３、排他論理和演算を行わずに、新たな多値画素データの入力が行えるようになり、結果的に、符号化速度を高速化させることに成功する。
【００３２】
図３のフローチャートに戻って説明を続ける。ＲＵＮ＞Ｎと判断された場合には、処理はステップＳ２０６に進む。
【００３３】
ステップＳ２０６では、入力する多値画素の先頭からＮ画素分（１画素ブロックの幅に相当する数の多値画素データ）についてディザ処理部２に出力してディザ処理を行わせ、ＦＩＦＯ３、および排他的論理和演算器４を通して、ハフマン符号化部５によって符号化させる。
【００３４】
次いで、ステップＳ２０７では、ＲＵＮ−Ｎ個の０が続くことを、ハフマン符号化部５に通知し、符号化データを出力させる。このとき、値０が連続する数があらかじめわかっているので、連続を示す適当な符号を割り付けることで、個別の０を１個づつ符号化するのに比べ短い符号で済ませることができる。
【００３５】
なお、ハフマン符号化部４は２値画像について符号化するものであるが、３値、４値、…にも適用できるのは勿論である。因に、図６はディザ処理部２の出力が１６階調（４ビット）の例である。この例では符号語"１００００ xxxx xxxx"を０の繰り返しを表現する符号としている(xxxx xxxxが０の繰り返し回数)。符号語はこの例に限定されるものではなく、任意である。
【００３６】
ステップＳ２０８で、ＦＩＦＯ３内のディザ処理後の画素データ（ＲＵＮ modＮ個の画素データ）をシフト出力する。さらに、ステップＳ２０９で、ディザ処理部２の状態を同じくＲＵＮ mod Ｎ画素分すすめる。このとき、ディザ処理部２およびＦＩＦＯ３から出力はなく、単に内部の状態を更新するだけである。なお、上記で、「ＲＵＮ mod Ｎ」はＲＵＮをＮで除算した際の余りを返す関数である。実施形態の場合、ＦＩＦＯ３はディザマトリクスの列数と同数の８画素分の容量を有するものであるので、ＲＵＮ mod Ｎ個の画素をシフト出力することは、ＲＵＮ−Ｎ個の画素を処理したのと等価になる。
【００３７】
次いで、ステップＳ２１０で、注目している１ラインの全てについて処理が完了したか否かを判断し、否の場合には、ステップＳ２０３以降の処理を繰り返すことになる。
【００３８】
上記処理はディザ処理部２の実装にも依存するが、例えば、図４Ａに示したように比較器２０１、シフトレジスタ２０２で構成する。このシフトレジスタ（ＦＩＦＯメモリ）には、制御部７よりデータが設定されるものである（多値画素に同期してローテイトする）。先に説明したステップＳ２０１における１ライン処理開始時のしきい値設定はこのシフトレジスタ２０２に対して行われる。実施形態でのディザマトリクスサイズは８×８としているので、次ラインの処理時にも、同様に設定されることになる。
【００３９】
なお、図４Ａの代わりに、図４Ｂに示す如く、比較器２０１、シフトレジスタ群２０２、セレクタ２０３で構成するようにしても良い。この場合、図２の処理に先立ってディザしきい値を設定するれば良いことになる（図３におけるステップＳ２０１が不要になる）。
【００４０】
すなわち、同図Ｂの場合、実施形態ではディザマトリクスサイズが８×８であるので、８ライン単位にサイクリックに切り換われるものであるので、８個のシフトレジスタで、各々には８個の閾値データが格納されることになる。１ラスタ入力する毎にカウンタもしくは制御部７でカウントアップし、その結果の値（３ビットで充分）を制御信号としてセレクタ２０３に供給することで、いずれか１つのシフトレジスタを選択することになる。各シフトレジスタは、入力する多値画素に同期してローテイトすることになる。
【００４１】
なお、上記実施形態では、入力する多値画素データは８ビットの２５６階調で、８×８サイズのディザマトリクスを用いて２値化する例を説明した。
【００４２】
ディザマトリクスサイズは８×８＝６４であるので、閾値は６４個備えることになる。この場合、各閾値の値の差が等しくするのであれば、その差は２５６／６４＝４となる。例えば、入力された画素Ａの値が０〜３のいずれかである場合、ディザマトリクスの如何なる位置の閾値と比較しても、これらは少なくとも“０”に２値化される。従って、ラン検出部６は同じ値の連続数を検出する際に、この「同じ値」に対してある程度の幅を設定し、その幅内であれば同値であると認定し、ランを検出するようにすれば、図３におけるステップＳ２０４で「ＲＵＮ＞Ｎ」と判定される確率を高めることができ、更に効率の良い符号化を行うことができることになる。
【００４３】
＜第２の実施形態＞
上記実施形態（第１の実施形態）では、入力画像の色成分は単一であるとしたが、画像の色成分の数は任意である。本第２の実施形態では、図５に示すように、Ｒ、Ｇ、Ｂの３成分を入力とし、色空間変換処理部１０をもち、記録色成分であるＣ、Ｍ、Ｙ、Ｋの４成分についてディザ処理および圧縮を行うような構成をとることもできる。
【００４４】
本第２の実施形態では、Ｃ、Ｍ、Ｙ、Ｋそれぞれの色成分ごとに４組のディザ処理部２Ｃ、２Ｍ、２Ｙ、２Ｋ、ＦＩＦＯ３Ｃ、３Ｍ、３Ｙ、３Ｋ、排他的論理和演算器４Ｃ、４Ｍ、４Ｙ、４Ｋ、およびハフマン符号化部５Ｃ、５Ｍ、５Ｙ、５Ｋを備える。４組それぞれの処理部の動作は第１の実施形態と同様である。
【００４５】
上記構成では、ラン検出部６は各ＲＧＢのデータを１単位として、ラン長を検出することになる。従って、１単位毎に異なることがあっても、その中の例えばＲ成分は同じとなることもあり得る。従って、バッファメモリ１を１つとせず、色空間変換部１０の直後に、それぞれの色成分毎に設け、それぞれが独立して入力するようにしても良い。
【００４６】
ここで、色空間変換部６および、各ディザ処理部の入力・出力の階調数は任意である。また、色成分ごとのディザマトリックスの大きさは異なっていてもよいのは勿論である。また、プリンタ内部にイメージを記録色成分でレンダリングする場合には、図示の色変換部は不要となる。
【００４７】
なお、実施形態では多値画像データは８ビットもしくは、各成分が８ビットとし、ディザ処理は８×８サイズのディザマトリクスを用い、２値化する場合を説明したが、入力する多値画素データは８ビットに限定されるものではない。また、ディザマトリクスサイズも８×８に限るものでもなく、その形状も正方に限定されるものではく、一般にＮ×Ｍとして適用できるものである。
【００４８】
また、２値化ばかりでなく、３値化、或いは４値化に適用しても構わない。例えば３値化の場合、仮に、入力多値画素データＡに対して２つの閾値Ｔ１、Ｔ２（Ｔ２＞Ｔ１）を用い、
Ａ＜Ｔ１          出力値０
Ｔ１≦Ａ＜Ｔ２    出力値１
Ｔ２≦Ａ          出力値２
として３値化すれば良い。
【００４９】
以上説明したように、本第１、第２の実施形態によれば、画像のディザ処理および圧縮を行う場合でも、単純な構成で、ディザ処理、符号化処理が効率良く高速に行えるようになる。また、第２の実施形態の如く、色空間変換を同時に行う場合でも、不必要な色空間変換を行わずにすむため、処理効率が向上する。
【００５０】
＜第３の実施形態＞
上記第１、第２の実施形態では、ディザ処理の周期性を利用して１ライン単位に圧縮符号化するものであったが、以下では、ビットインターリーブを用いる場合に適用させた例を第３の実施形態として説明する。
【００５１】
先ず、ビットインターリーブという手法について説明する。ビットインターリーブでは、画像を一定の幅のセルに分割し、セル内の同じ位置の画素データを集めたものをランレングス符号化する。
【００５２】
説明を簡単なものとするため、入力画像は２値、セル幅は４とした場合の入力された画像の１ラインのデータが図１０に示すようになっているものとする。
【００５３】
図示の入力画像をセルで区切り、各セル内において同じ位相の画素データを集めると、図１１のようになる。この集められた画素データを位相ごとにランレングス符号化したものが図１２である。
【００５４】
ここで、問題にしたいのは、このビットインターリーブ方式では、セル中の、ある位相の復号が終了してからでなければ、次の位相の復号ができない点である。すなわち、入力画像の１ライン分の画素データを順に得るためには、復号された画素データをラインバッファに保持しなければならず、１パスで復号できない。
【００５５】
そこで、本第３の実施形態では、かかる問題点を解決する。即ち、１ラインの復号が完了するのを待たず（１ライン分の出力バッファを不要にすることでもある）に、１ラインの先頭から復号していっては、その都度、復号結果を出力し得るように符号を生成することを可能にする。
【００５６】
なお、インターリーブ方式での符号化は、符号化効率の観点から、各セルの同位相の画素データは互いに高い相関を有することが望ましい。従って、入力される画像データが２値化のディザ処理後のデータとしたとき、上記のセルの大きさ（幅）は、ディザマトリクスの大きさ（幅）と一致させるか、或いは、その整数倍であることが望まれる。本実施形態では、画像データは、ディザ処理後のデータであって、そのディザ処理は４×４のディザマトリクスでもって２値化され、その結果を入力するものとして説明する。
【００５７】
ただし、ディザ処理結果は４ライン分を格納するバッファを必要とするものではなく、図４Ａや図４Ｂに示す処理を行った結果（ただし、ディザマトリクスサイズは４×４に変更する）で構わない。すなわち、１ライン単位に処理できるものである。
【００５８】
図８は実施形態における符号化を行う画像符号化装置１００のブロック構成図を示している。本装置は、図示の如く、画素収集部１０１、ラン検出部１０２、符号化部１０３、バッファ１０４、整列部１０５で構成されている。
【００５９】
先ず、実施形態における画像符号化装置１００の全体の処理の流れを図９のフローチャートに従って説明する。
【００６０】
先ず、ステップＳ１０１では、画素収集部１０１で入力画像をセルで区切り、同じ位相の画素データを集める。ステップＳ１０２では、位相ごとに集められた画素データにおける同じ値の連続数ランをラン検出部１０２で検出する。ステップＳ１０３では、検出された連続数ランと画素データが符号化部１０３に送られてランレングス符号化される。この時、入力画像のどの座標から符号化されているかという情報を付加してバッファ１０４に格納する。続いて、ステップＳ１０４では、全ての位相について上記の処理が終了したかどうかを判定する。全ての位相について処理が終了していなければステップＳ１０２に戻り、処理が終了していればステップＳ１０５に進む。ステップＳ１０５では、整列部１０５でバッファ１０４に格納されている符号語列を座標の値が小さい順に整列する。
【００６１】
上記処理の内容を以下に詳細に説明する。実施形態では、先に言及したように、入力画像は２値、セルの幅は４とし、入力画像の１ライン分の画素データは図１０に示すようになっているものとする。
【００６２】
図１０の入力画像を、図９で示す処理の流れに従って符号化すると、その様子は次のようになる。
【００６３】
ステップＳ１０１で各位相ごとに集められた画素データは、図１１のようになる。ステップＳ１０２、Ｓ１０３の処理を繰り返し、全ての位相について画素データがランレングス符号化されると、バッファ１０４に格納されている符号語列及び座標情報は、図１３（ａ）のようになる。ステップＳ１０５で図１３（ａ）の符号語列を座標の値が小さい順に整列する（座標位置をキーにしてソートする）と、整列後の符号語列は図１３（ｂ）のようになる。
【００６４】
なお、同図１３（ａ）のデータでは、各ランは白、黒、白、黒…と交互になるので、先頭のランのみが画素値を有していれば、２番目以降のラインはその値を交互に反転した結果を用いれば良く、結局のところ、各ランは自身の画素値を持つ必要はない。一方、図１３（ｂ）であるが、ある箇所は黒ランが連続したり、別な箇所では白ランが連続するので、各ランには自身のランの画素値がどのようなものであるのかを保持する必要がある。従って、図９における符号化処理（ステップＳ１０３）では、各ランの符号には、その開始位置（開始位置を４で割ることで位相がわかるので、位相に関する情報を持っていることと等価である）及びそのランの画素値が含まれるように符号化することになる。
【００６５】
さて、図１３（ｂ）に示す符号が完成したとする。実施形態における復号する際の構成とその処理手順の詳細は後述するが、復号そのものの原理を図１４に従って説明する。
【００６６】
図１３（ｂ）に示す符号が与えられたとき、先ず、先頭の符号“４”は、開始位置が０であり、画素値が“０”であることがわかっている。なお、図示において、“−”はその画素値が未定であることを示している。
【００６７】
図１４における工程１において、座標位置“０”から４セル分の位相０の画素が“０”として決定できる。次いで、工程２では、座標位置“１”から１セル分の位相１の画素が“１”として決定できる。工程３では、座標位置“２”から２セル分の位相２の画素が“０”として決定できる。以下、工程４、５…と続くことになる。
【００６８】
かかる手順で注目したい点は、図１３（ｂ）に示すように符号を座標位置で並べ替えることで、例えば図１４における各工程で復号する開始位置以前の画素値が確定していることである。すなわち、或る符号を復号する際、その復号位置以前の画素データは既に決定しているから、その復号位置以前のデータは復号済みとして出力できることに他ならない。
【００６９】
上記の処理では、分かりやすく説明するためのものである。例えば最初の符号“４”に対して、４セル分のバッファを確保しなければならないが、本第３の実施形態ではかかるバッファを実質的に不要にし、更に効率良く１パスで出力することを可能にする。かかる復号処理を行う構成は、図１５に示す構成となる。
【００７０】
この復号を実現する画像復号装置２００は、復号部２０１、データ格納部２０２、及び、制御部２０３で構成される。復号部２０１は制御部２０３の制御の元に符号語列から符号語を読み込んで復号する。復号して求められた連続数ランと画素データは、データ格納部２０２に格納される。このデータの格納はセルの位相ごとに行なわれる。制御部２０３は全体の制御を行ない、データ格納部２０２の内容によって、データ格納部２０２に格納されている画素データを出力させるか、又は、復号部２０１に符号語を読み込ませて復号させるかを制御する。
【００７１】
以下、その動作手順を図１６のフローチャート及び図１７のシーケンス図に従って説明する。ただし、以下の説明で、変数phaseは位相（＝０、１、２、３）を示しており、変数run[phase]は位相０、１、２、３のランを格納する変数である。また、widthは１ラインの画素数、tone[phase]は位相phaseにおける画素値を格納する変数、cel_widthは１セルの幅（実施形態では４）である。posは注目する画素位置（復号する画素位置）を格納する変数で、位相phaseはposを４で割った余りを算出することで得ることができる。
【００７２】
先ず、ステップＳ２０１でデータ格納部２０２の内容を初期化する（run[]を０で初期化する）。続いて、ステップＳ２０２において、処理の対象となる座標を表わす変数posの初期化を行なう（先頭画素位置に設定する）。
【００７３】
次いで、ステップＳ２０３では、現在の変数posと１ラインの画素数widthを比較することで、変数posが最終画素位置に到達したか否かを判断することで、１ライン分の処理が終わったかを判定する。１ライン分の処理が終了していなければ、ステップＳ２０４に進み、処理の対象となる座標posとセルの幅から位相phaseを求める。先に説明したように、復号する画素位置は変数posで表わされているから、変数posをcel_widthで割った余りを求めることで、その位相phaseを求めることができる。ステップＳ２０４における「mod」は、「x mod y」としたとき、ｘをｙで割った際の余りを返す周知の関数である。
【００７４】
ステップＳ２０５では、上記のようにして求めた変数phaseを元に、データ格納部２０２に格納してある run[phase] を調べ、この値が０であればステップＳ２０６に進み、そうでなければステップＳ２０７に進む。
【００７５】
初期段階では、ステップＳ２０１で各run[]は０クリアされている。すなわち、run[0]=run[1]=run[2]=run[3]=0であるので、ステップＳ２０６に進むことになる。
【００７６】
ステップＳ２０６では、復号部２０１が符号語列から符号語を読み込んで復号を行なう。符号は先に説明したように、ランとその座標位置、及び、画素値で構成されるわけであるから、復号部２０１から読出したデータは、pos、phase、run[phase]を読出すことになる。より詳しく説明すると、最初にこのステップＳ２０６の処理を行う場合であって、図１３（ｂ）のような符号が与えられている場合には、各変数の値は次のようになっている。
pos=0                      ；画素位置が先頭
phase=0                    ；位相は０
run[phase]=run[0]=4        ；位相０のランは４
tone[phase]=tone[0]=0      ；位相０の画素値は０
この結果、ステップＳ２０６では、画素位置０の復号結果の画素値は“０”（＝tone[0]＝0であるため）となり、その結果を出力する（図１７における座標位置０の出力が完了する）。これにより、run[phase]のランが１つ減ることになるので、ステップＳ２０８でrun[phase]を１ディクリメントし、次の画素位置の処理を行うためposを１つ進め（インクリメント）、ステップＳ２０３に戻る。
【００７７】
ステップＳ２０３に戻ると、posが今度は１となっているので、phase＝１となり、位相１の出力結果を得る処理を行う。
【００７８】
図１７における「復号後」における４つの値は、pos（座標）に応じたrun[0],run[1],run[2],run[3]の値の復号時（ステップＳ２０７の時点）推移を示しており、同図における「出力後」は出力後のrun[]の値（ステップＳ２０８の処理結果）を示し、太枠は復号結果の画素値との関係を示している。
【００７９】
以上のように本第３の実施形態は、ディザ処理等で処理された結果には、その処理で用いられたディザマトリクスのサイズ（幅）に依存して、そのサイズ内の同位相の画素値が互いに相関が高いことに着目し、そのディザマトリクスの幅をセルとしてインターリーブ符号化する。そして、符号化する際には、各ランの開始位置及び画素値を保持し、その開始位置でソートすることで、復号時においては、先頭画素からその座標位置の順に復号し、出力することが可能になり、これまでの様に１ライン分の出力バッファを不要とすることが可能になる。
【００８０】
＜第４の実施形態＞
上記第３の実施形態では、符号化結果を出力する際に、各ランをその座標位置をキーに並べ替える処理（図９のＳ１０５）を必要とする。例では、高々２８画素（７セル分）を例にしていたので、その並べ替えに係る処理は無視できる程度に小さい。しかしながら、一般に、処理対象の画像は、近年のイメージスキャナは数千ｄｐｉの解像度を有していたり、デジタルカメラは数百万画素のＣＣＤを備えている等からもわかるように、数千×数千画素で構成されるものが普通であるから、現実には１ライン分の画素数は非常に多い。また、各ラインについての符号化を全ライン分行う必要があるわけであるから、符号化全体に対する並べ替え処理の占める割合は無視できない。
【００８１】
そこで、上記第３の実施形態における並べ替え処理を不要とする例を第４の実施形態として説明する。
【００８２】
なお、説明を簡単なものとするため、本第４の実施形態における処理対象の画像データは４×４のディザマトリクスで２値化された結果であって、図１０に示すデータを採用する。すなわち、セル幅も４、更に、結果的に得られる符号は第３の実施形態における図１３（ｂ）となるものとして説明する。従って、復号処理も第３の実施形態と同様であり、復号処理については特に言及しない。
【００８３】
以下、本第４の実施形態における符号化について説明する。
【００８４】
図１８は、第４の実施形態における符号化装置（符号化回路）のブロック構成図である。図示に示す如く、ランレングス検出部１８０１、符号化部１８０２、１ライン分の画素データを格納するラインバッファ１８０３と、符号バッファ１８０４とを備える。上記構成における符号化処理は次の通りである。
【００８５】
入力画素は、まず、ラインバッファ１８０３に１ライン分格納される。ついで、ランレングス検出部１８０１および符号化部分１８０３によって符号化された符号列が符号バッファ１８０４に格納される。１ライン分の符号語が、符号バッファ１８０４に格納されたら、符号化部分１８０２は、バッファ１８０４から符号を符号化とは逆順に出力する。画像の全ラインについて、以上の一連の処理を行なう。
【００８６】
ランレングス検出部１８０１における１ライン分の処理の具体例を図２０を用いて説明する。なお、同図において、pos、phaseは第３の実施形態と同様の意味を持つ。また、line[pos]は、画素位置posにおける画素値であり、cell_widthはセル幅（実施形態では４）である。また、run[]は位相０、１、２、３それぞれにおけるランを格納するための変数である。
【００８７】
ランレングス検出部１８０１は、ラインバッファ１８０３に１ライン分の画像データ（実施形態では２値画素データ）の格納が完了してから、その検出動作を開始するが、検出は、同図に示すように１ラインの後端から行う（図２０における画素位置を示すposの値に注意されたい）。なお、レンダリングした２値画像を読出すとき、各ラインの最終画素から先頭に向かう順に読む出すようにすれば、ラインバッファ１８０３は不要であることを付言していおく。
【００８８】
先ず、run[]を“０”で初期化し、後端位置を設定するため変数posに１ライン分の画素数“２７”を格納する。phaseはpos mod cell_width（modは除算した際の余りを返す演算子）で算出されることは第３の実施形態と同様である。
【００８９】
さて、画素位置２７に着目すると、この画素位置の位相は３である。初期化処理でrun[3]は０に初期化されているので、先ず、このrun[3]に“１”を格納する。
【００９０】
次いで、変数posで示される注目画素line[pos]と、その１つ前のセルの同位相の画素値line[pos-cell_width]（line[27-4]＝line[23]）とが同じであるかどうかを判断する。図示では、posの画素値とその直前のセルの同位相の画素値とは等しいから、少なくとも注目画素は、１つ前の同位相の画素の値から連続することがわかるので、この時点ではランが確定しない（少なくともランが２であることがわかるだけで、３つ以上の場合も有り得るという意味）。従って、run[3]の値は出力しない。
【００９１】
次に、画素位置pos＝２６に処理を進める。この位置における位相phaseは２（＝２６ mod ４)であるので、同様にrun[2]には初期値として“１”を格納する。そして、line[26]と１つ前のセルの同位相の画素値line[22]とを比較する。この場合も両方とも白画素であるわけであるから、run[2]は確定できないので、run[2]の値を出力しない。
【００９２】
次に、画素位置pos＝２５に処理を進める。この位置における位相は１であるので、同様にrun[1]には初期値として“１”を格納する。そして、line[25]と１つ前のセルの同位相の画素値line[21]とを比較する。この場合、双方の画素値が異なる。換言すれば、１つ前のセルの同位相まででランが途切れていることが判明する。従って、このときrun[1]の値（この場合は“１”）、画素値line[pos]及び位置posを出力し、run[1]を次回のランの計数に備えて“０”でリセットする。
【００９３】
以下、上記注目画素位置posを順に更新（−１減じる）し、その更新された画素位置について処理するとき、その位相phaseを求め、run[phase]を＋１する処理を行う。そして、注目画素の値line[pos]と１つ前のセルの同位相の画素値line[pos-cell_width]とが等しくない場合に、run[phase]とその画素値を出力し、run[phase]を０でリセットすることを繰り返す。ただし、pos＜cel_width（＝４）となった場合、注目画素位置posの１つ前のセルは存在しないことになるので、その場合には、無条件でrun[],pos,line[pos]を出力していく。
【００９４】
以上の結果、出力される符号は、図２０の右端の「符号」で示されるものとなる。ここで着目したい点は、同図の「符号」の下端から上端に向かう符号の並びは、図１３（ｂ）と全く同じになることである。
【００９５】
すなわち、生成された符号を今度は逆順に読出し、それを出力するという単純な作業を行うことで、図１３（ｂ）と等価の結果を得ることを意味していることに他ならない。
【００９６】
以上の動作処理を行うには、結局のところ、図１９に示すフローチャートに従って行えば良いであろう。
【００９７】
先ず、１ラインの処理に先立ち、ステップＳ１９０１において、run[]の全要素、すなわち０番目からcell_width-１番目までの要素を０で初期化する。さらに、ステップＳ１９０２において、処理対象画素位置を１ラインの後端画素位置とするため１ライ分幅を格納している変数widthから“１”を減じた値を変数posにセットする（先頭画素位置を０としているため）。
【００９８】
次いで、ステップＳ１９０３では、posが０以上であるかどうかを判断することで、１ラインの全画素についての処理が完了したか否かを判断する。否の場合には、以下に示すステップＳ１９０３〜Ｓ１９１０を繰り返す。
【００９９】
ステップＳ１９０４では、位相phaseを、posをセル幅で除算し、その余りを求めることで算出する。ステップＳ１９０５において、run[phase]を１増加させ、これによって位相ごとのランを計数する。
【０１００】
次の、ステップＳ１９０６は、処理対象の画素位置posが先頭のセル内にあるかどうかを判断するものであり、以下に説明するステップＳ１９０７の処理をスキップさせるものである。
【０１０１】
ステップＳ１９０７では、注目画素位置における画素値line[pos]と１つ前のセルの同位相の画素値line[pos-cell_width]とが同じであるか否かを判断する。互いに異なる場合には、ステップＳ１９０８において、画素値line[pos]とrun[phase]とを、符号化部１０２によって符号化し、符号バッファ１０４に格納する。ステップＳ１９０８において、画素が符号化された場合、次の同位相の画素からランを新たに計数しなおす必要があるので、ステップＳ１９０９においてrun[phase]を０にリセットしておく。
【０１０２】
この後、ステップＳ１９１０において、処理対象となる画素位置を次に進めるため、posを“１”だけ減じ、ステップＳ１９０３以降の処理を繰り返す。
【０１０３】
以上のようにして、図２０に示した手順に沿った処理が実現できることになる。
【０１０４】
なお、第３の実施形態との対比で説明すれば、符号化処理では、図９におけるステップＳ１０５は不要になり、代わりに、符号化結果を逆順に読出し、出力する処理とすれば良いであろう。
【０１０５】
以上説明したように本第４の実施形態によれば、第３の実施形態で必要になっていた並べ替え処理が不要になり、第３の実施形態の作用効果に加えて、画像全体の符号化効率を更に向上させることが可能になる。
【０１０６】
また、第３、第４の実施形態では、入力される画像は４×４のディザマトリクスでディザ処理された結果であるものとして説明したため、セルのサイズは４であるものとして説明した。しかしながら、ディザマトリクスのサイズが８×８であれば、当然セルのサイズは８（位相は０〜７について処理することになる）、もしくはその整数倍にすれば良いわけであり、上記例によって本願発明が限定されるものではないし、単色に限らず、各色成分について同様に処理しても良いから、カラー画像についても当然に適用できる。
【０１０７】
また、変数run[]を格納する領域を適当に確保しておけば、cell_widthや１ラインの画素数widthを適宜設定できるようにすることで、入力される画像データが如何なる周期性のある画像であっても対応できるようになるであろう。
【０１０８】
また、２値化のディザ処理を例にして示したが、第１の実施形態でも言及したように、３値化、４値化でも構わない。要するに、符号化する対象となる画像データが、適当な周期毎の同位相の画素間で互いに相関性の高い状態になっていさえすれば、本実施形態は適用可能である。
【０１０９】
また、上記第１乃至４の実施形態では、プリンタ内における圧縮処理について説明したが、図２、図３、図１６、図１９に示す処理手順に従って処理すれば良いわけであり、汎用の情報処理装置（例えばパーソナルコンピュータ）にも適用できるのは明らかである。すなわち、本発明はコンピュータプログラムをもその対象とするものである。また、通常、パーソナルコンピュータ等にコンピュータプログラムを導入する場合には、そのプログラムを格納したフロッピーディスクやＣＤＲＯＭ等の記憶媒体を装置にセットし、装置にコピーもしくはインストールすることで実現できるものであるから、本発明はかかるコンピュータ可読記憶媒体をもその範疇とするのは明らかである。
【０１１０】
【発明の効果】
以上説明したように本発明によれば、単純な構成で、ディザ処理した結果を効率良く、且つ、高速に圧縮符号化することが可能となる。
【図面の簡単な説明】
【図１】実施形態における画像圧縮処理部のブロック構成図である。
【図２】圧縮処理の全体の処理のフローチャートである。
【図３】図２におけるステップＳ１０１の詳細処理手順を示すフローチャートである。
【図４Ａ】ディザ処理部の構成の一例を示す図である。
【図４Ｂ】ディザ処理部の構成の一例を示す図である。
【図５】第２の実施形態における画像圧縮処理部のブロック構成図である。
【図６】１画素４ビット表現の画像データに対するハフマン符号の例を示す図である。
【図７】実施形態の基本概念を示す図である。
【図８】第３の実施形態における符号化装置のブロック構成図である。
【図９】第３の実施形態における符号化処理手順を示すフローチャートである。
【図１０】第３の実施形態における入力画像データの例を示す図である。
【図１１】図１０の入力画像をセル幅４としたときの各位相のデータ列を示す図である。
【図１２】図１１のデータをランで示す図である。
【図１３】実施形態における符号語の並べ替え前と後とを対比して示す図である・
【図１４】第３の実施形態における復号処理の基礎を示す図である。
【図１５】第３の実施形態における復号装置のブロック構成図である。
【図１６】第３の実施形態における復号処理の手順を示すフローチャートである。
【図１７】第３の実施形態における復号処理のシーケンスを模式的に示す図である。
【図１８】第４の実施形態における符号化装置のブロック構成図である。
【図１９】第４の実施形態における符号化処理手順を示すフローチャートである。
【図２０】第４の実施形態における符号化のシーケンスを模式的に示す図である。
【図１】
0003862590.tif 000002
【図２】
0003862590.tif 000003
【図３】
0003862590.tif 000004
【図４Ａ】
0003862590.tif 000005
【図４Ｂ】
0003862590.tif 000006
【図５】
0003862590.tif 000007
【図６】
0003862590.tif 000008
【図７】
0003862590.tif 000009
【図８】
0003862590.tif 000010
【図９】
0003862590.tif 000011
【図１０】
0003862590.tif 000012
【図１１】
0003862590.tif 000013
【図１２】
0003862590.tif 000014
【図１３】
0003862590.tif 000015
【図１４】
0003862590.tif 000016
【図１５】
0003862590.tif 000017
【図１６】
0003862590.tif 000018
【図１７】
0003862590.tif 000019
【図１８】
0003862590.tif 000020
【図１９】
0003862590.tif 000021
【図２０】
0003862590.tif 000022