JP3862590B2 - 画像処理装置及び方法及びコンピュータプログラム並びにコンピュータ可読記憶媒体 - Google Patents
画像処理装置及び方法及びコンピュータプログラム並びにコンピュータ可読記憶媒体 Download PDFInfo
- Publication number
- JP3862590B2 JP3862590B2 JP2002116309A JP2002116309A JP3862590B2 JP 3862590 B2 JP3862590 B2 JP 3862590B2 JP 2002116309 A JP2002116309 A JP 2002116309A JP 2002116309 A JP2002116309 A JP 2002116309A JP 3862590 B2 JP3862590 B2 JP 3862590B2
- Authority
- JP
- Japan
- Prior art keywords
- run
- input
- encoding
- dither
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Image Processing (AREA)
- Facsimile Image Signal Circuits (AREA)
- Compression Of Band Width Or Redundancy In Fax (AREA)
Description
【発明の属する技術分野】
本発明は画像データの圧縮処理をおこなう画像処理装置および画像処理方法に関するものである。
【0002】
【従来の技術】
レーザプリンタにおいて階調画像を再現する手法の1つとして、プリンタ記述言語からレンダリングした画像(多値画像)にディザ処理を施した後、プリントエンジンによって印刷するという構成をとるものがある。このとき、メモリ中にレンダリング後の画像を複数ページ保持することができると、プリントエンジンが画像を印刷中に、印刷ジョブ中の後続のページをあらかじめレンダリングしておくことができ、印刷の性能が向上する。しかしながら、プリンタの解像度が向上するにつれ、画像を保持するのに必要となるメモリ量は増大していく。そこで、何らかの方法をもちいて、レンダリング後の画像を圧縮する必要が生じる。ここで、複雑な圧縮方法を用いると、画像の圧縮に必要な処理時間が増大し、画像圧縮によって得られる性能向上という利点を相殺されてしまう。そのため、処理が簡単で、圧縮効率のよい、圧縮方法が望ましいことになる。
【0003】
【発明が解決しようとする課題】
処理が簡単な画像圧縮方法としては、ランレングス符号化があるが、ディザ法により処理された画像は、ランレングス符号化を適用すると、圧縮後のデータサイズが、圧縮前のデータサイズより大きくなってしまう。
【0004】
この問題を解決する1つの手段としては例えば特開平9−294210号公報がある。しかしながら、この公報に記載された技術は、ディザ処理済の画像を前提にし、且つ、ディザ処理と圧縮処理とが別々となっており、効率化の点では改善の余地がある。
【0005】
本発明はかかる問題点を解決するためになされたもので、単純な構成で、ディザ処理と圧縮処理を効率良く、且つ、高速に実行する画像処理装置及び方法及びコンピュータプログラム並びにコンピュータ可読記憶媒体を提供しようとするものである。
【0006】
【課題を解決するための手段】
かかる課題を解決するため、例えば本発明の画像処理装置は以下の構成を備える。すなわち、
入力される多値画像データをディザ処理手段でディザ処理し、符号化手段で圧縮符号化する画像処理装置であって、
ラスター順に多値画素データを入力する入力手段と、
該入力手段で入力した多値画素データを、ディザマトリクス中の閾値と比較することでディザ処理するディザ処理手段と、
該ディザ処理手段で処理された結果と、ディザマトリクスの幅Nの画素数分だけ先行してディザ処理された結果とを排他論理和する排他論理和手段と、
該排他論理和手段の結果に基づいて符号化する符号化手段とを備え、更に、
前記入力手段で入力された多値画素データにおける同じ値の連続数RUNを検出する検出手段と、
該検出手段で検出した連続数RUNと前記Nとの関係がRUN>Nとなっているか否かを判断する判断手段と、
該判断手段で越えていると判断した場合、連続する画素の後端からRUN−N個の画素については、0値がRUN−N個発生するものとして直接符号化する制御手段とを備える。
【0007】
【発明の実施の形態】
以下、添付図面に従って本発明にかかる実施形態を詳細に説明する。
【0008】
<基礎技術の説明>
先ず、実施形態における基本技術について説明する。説明を簡単なものとするため、8×8画素ブロック単位に2値化を行うディザ処理について説明するが、処理単位である画素ブロックのサイズは勿論これに限定されるものではなく、正方である必要もない。また、2値化ではなく、3値化、4値化…であっても構わない。要するに入力される階調画素の階調数(8ビットであれば256階調)を、それより少ない階調数にするものであれば良い。
【0009】
図7(a)は8×8画素ブロック毎にディザマトリクス(各マトリクス要素には閾値が設定されている)を用いて2値化結果の画像データを示している。図示において斜線部分が2値化結果の“1”の画素を、それ以外は“0”に2値化されたことを示している。
【0010】
通常、写真等の多階調画像の場合、局所的にみると、濃度変化はなだらかになっていて、変化が小さい。従って、2値化結果も、隣接する画素ブロック間では同様の結果になる傾向が高い。図7(a)はかかる多値画像の2値化結果を示しており、各ブロック毎に同様の2値化結果となっていることを示している。かかる2値化結果についてハフマン符号化処理を行ったとしても、“1”の画素が点在し、ランを稼げず、先に示したように高い符号化効率は望めない。
【0011】
そこで、2番目の2値化結果のブロックについては、その直前、すなわち、1番目の2値化結果のブロックとの排他的論理和演算処理を行う。先に説明したように多階調画像のディザ処理結果は、近接する画素ブロック間における相関関係は高いので、この結果、注目している2番目のブロックについては“1”となっている画素数は“0”になり、“1”として残る画素数は激減する。換言すれば、“0”のランが稼ぐことができることになる。3番目の2値化結果のブロックについても、直前の画素ブロックの2値化結果と排他的論理和演算を行うことで、同様の結果を得る。
【0012】
上記処理結果を示すのが図7(b)であり、先頭のブロックについては、2値化結果がそのまま残るものの、2番目以降についてはほとんどが“0”になっていることがわかる。
【0013】
なお、2番目以降の2値化結果を復元する場合、今度は、図7(b)について、先と同様の排他的論理和演算を行えば良いのは、これまでの説明からすれば容易に理解できよう。
【0014】
また、9〜16ライン(画素ブロックライン)についても同様に行うが、先頭の画素ブロックを除いて、同様の効果が期待できるし、それ以降の画素ブロックラインについも同様である。
【0015】
以上はディザ処理により画素ブロック単位のものであったが、通常、画像データはラスター順に入力されるので、上記のブロック単位の処理を行う場合には、少なくとも8ライン分のバッファメモリを介在させ、8×8の多値データを1単位に読み取って処理せざるを得ない。
【0016】
本実施形態では、かかる多ラインのバッファを必要とせず、且つ、ディザ処理と符号化処理を更に効率良く実行させることに成功するものである。
【0017】
<実施形態の説明>
実施形態における画像圧縮装置のブロック構成図を図1に示す。説明を簡単なものとするため、入力画素は単一の色成分(モノクロ画像)とし、1画素当たり8ビット(256階調)であるとする。また、ディザ処理は2値化であり、そのディザマトリクスサイズは一般にN×Mで表現できるが、ここでは8×8のサイズとする。ただし、かかる点で本願発明が限定されるものではない。
【0018】
さて、実施形態における画像圧縮装置は、図1に示す如く、バッファメモリ1、ディザ処理部2、FIFO3、排他的論理和演算器4、ハフマン符号化部5、ラン検出部6、全体の制御を司る制御部7で構成される。
【0019】
実施形態では、プリンタ内部のメモリに展開(レンダリング)された多値画像データをディザ処理して圧縮するものであるので、バッファメモリ1は制御部7の制御下で、この展開されたデータをラスター順に読込むことになる。また、このバッファメモリ1は、1ラインの数分の1程度の容量で充分である。つまり、少なくとも多ライン分の容量は不要である。
【0020】
ラン検出部6は、バッファメモリ6に格納された先頭画素の多値データに後続し、その先頭画素と同じ画素値がいくつ連続するかを検出する。ディザ処理部2は入力した多値データをラスター単位にディザ処理(2値化)を行うことになる。
【0021】
FIFO3はディザ処理部2のディザマトリックスの列幅N(=8)と同じ個数の画素を保持(遅延)するFIFOバッファである。排他的論理和演算器4は、FIFO3への入力および、FIFO3に格納される画素との排他的論理和を計算する。FIFO3はディザマトリクスの列幅分の容量を有するわけであるから、排他的論理和演算器4は、隣り合った画素ブロック内の相対的に同じ位置の2値化データを論理和することに他ならない。
【0022】
ハフマン符号化部5は、制御部7からの指示、又は、排他的論理和演算器4の出力をもとに、出力符号列を生成する。
【0023】
なお、上記ディザ処理部2には、8×8画素分の閾値テーブルが設けられ、最初のラスター画像を2値化する場合には、そのテーブルの第1行に相当する閾値(8個)を用いて8画素単位にサイクリックに2値化していく。そして、2ライン目のラスター画像を2値化する場合には、テーブルの2行目に相当する閾値を用いて2値化する。以下、8ライン目の2値化が終わり、9ラインめの2値化を行う場合には、テーブルの第1行の閾値を用いて2値化する(詳細は後述)。
【0024】
実施形態における装置全体の処理の流れを図2に示す。
【0025】
まず、入力される多値画像の1行(1ラスタ)の圧縮処理を行う。この1行に対する圧縮符号化処理を終えると、ステップS102で、画像のすべての行について処理を行ったかどうかを判定し、処理していない行があれば、ステップS101に戻って処理を続ける。すべての行の処理が終わっていれば、全体の処理を終了する。
【0026】
上記図2のステップS101の1ライン圧縮処理の詳細を示すのが図3である。以下、更に詳しく説明する。
【0027】
先ず、ステップS201において、処理対象の行に対応するディザマトリックスの閾値(実施形態の場合には8個)を、ディザ処理部2の閾値配列にセットする。続いてステップS202において、FIFO3の内容をすべて0で初期化する。ここまでが1行分の処理の初期化であり、引き続き、ディザおよび圧縮の処理の本体が始まる。
【0028】
ステップS203で、ラン検出部6において、同じ値の画素数をカウントする。ここで、得られた画素数をRUNとする。ステップS204で、RUNがディザマトリックスの列数N(実施形態ではディザマトリクスはラスター方向に8列であるので「8」となる)より大きいかどうか判別する。RUN>Nであれば、ステップS206に進み、そうでなければステップS205に進む。
【0029】
ステップS204において、RUN>Nの場合について説明する。
【0030】
画素数RUN>Nとなる場合、RUNで示される数の画素データの後端からRUN−Nの画素群は、少なくとも、注目画素ブロックに隣接する画素ブロック中のデータを意味する。すなわち、この隣接画素ブロック中のRUN−Nの画素データのディザ処理後のデータは、注目画素ブロック中のRUN−Nの画素のディザ処理結果と必ず同じになる。
【0031】
先の図7で説明したように、画素ブロック間の同じ位相にあるディザ処理後のパターンが同じである場合には、排他的論理和演算の結果は必ず“0”になる。したがって、上記における隣接画素ブロックのRUN−N個の多値画素データのディザ処理及び排他的論理和結果は、この時点で、“0”になることが判明していることに他ならない。そこで、本実施形態では、この時点で、次画素ブロックのRUN−N個の“0”のハフマン符号を生成する。つまり、ディザ処理において(厳密にはディザ処理以前)に符号化を同時に実行できることを意味する。より具体的には、RUN−N個のデータに対する符号化処理がこの時点で完了しているわけであり、その画素データについてはこれ以上の処理を行うことは不要(破棄しても良い)であり、この個数に見合う新たな多値画素データをバッファ1に入力を行っても構わないことになる。実施形態では、メモリに一旦レンダリング処理したデータを圧縮符号化する装置に適用しているわけであるから(ビデオカメラ等の場合には出力速度は一定であるので符号化速度はビデオ信号の出力速度に依存し、それを越えることはできない)、ディザ処理、FIFO3、排他論理和演算を行わずに、新たな多値画素データの入力が行えるようになり、結果的に、符号化速度を高速化させることに成功する。
【0032】
図3のフローチャートに戻って説明を続ける。RUN>Nと判断された場合には、処理はステップS206に進む。
【0033】
ステップS206では、入力する多値画素の先頭からN画素分(1画素ブロックの幅に相当する数の多値画素データ)についてディザ処理部2に出力してディザ処理を行わせ、FIFO3、および排他的論理和演算器4を通して、ハフマン符号化部5によって符号化させる。
【0034】
次いで、ステップS207では、RUN−N個の0が続くことを、ハフマン符号化部5に通知し、符号化データを出力させる。このとき、値0が連続する数があらかじめわかっているので、連続を示す適当な符号を割り付けることで、個別の0を1個づつ符号化するのに比べ短い符号で済ませることができる。
【0035】
なお、ハフマン符号化部4は2値画像について符号化するものであるが、3値、4値、…にも適用できるのは勿論である。因に、図6はディザ処理部2の出力が16階調(4ビット)の例である。この例では符号語"10000 xxxx xxxx"を0の繰り返しを表現する符号としている(xxxx xxxxが0の繰り返し回数)。符号語はこの例に限定されるものではなく、任意である。
【0036】
ステップS208で、FIFO3内のディザ処理後の画素データ(RUN modN個の画素データ)をシフト出力する。さらに、ステップS209で、ディザ処理部2の状態を同じくRUN mod N画素分すすめる。このとき、ディザ処理部2およびFIFO3から出力はなく、単に内部の状態を更新するだけである。なお、上記で、「RUN mod N」はRUNをNで除算した際の余りを返す関数である。実施形態の場合、FIFO3はディザマトリクスの列数と同数の8画素分の容量を有するものであるので、RUN mod N個の画素をシフト出力することは、RUN−N個の画素を処理したのと等価になる。
【0037】
次いで、ステップS210で、注目している1ラインの全てについて処理が完了したか否かを判断し、否の場合には、ステップS203以降の処理を繰り返すことになる。
【0038】
上記処理はディザ処理部2の実装にも依存するが、例えば、図4Aに示したように比較器201、シフトレジスタ202で構成する。このシフトレジスタ(FIFOメモリ)には、制御部7よりデータが設定されるものである(多値画素に同期してローテイトする)。先に説明したステップS201における1ライン処理開始時のしきい値設定はこのシフトレジスタ202に対して行われる。実施形態でのディザマトリクスサイズは8×8としているので、次ラインの処理時にも、同様に設定されることになる。
【0039】
なお、図4Aの代わりに、図4Bに示す如く、比較器201、シフトレジスタ群202、セレクタ203で構成するようにしても良い。この場合、図2の処理に先立ってディザしきい値を設定するれば良いことになる(図3におけるステップS201が不要になる)。
【0040】
すなわち、同図Bの場合、実施形態ではディザマトリクスサイズが8×8であるので、8ライン単位にサイクリックに切り換われるものであるので、8個のシフトレジスタで、各々には8個の閾値データが格納されることになる。1ラスタ入力する毎にカウンタもしくは制御部7でカウントアップし、その結果の値(3ビットで充分)を制御信号としてセレクタ203に供給することで、いずれか1つのシフトレジスタを選択することになる。各シフトレジスタは、入力する多値画素に同期してローテイトすることになる。
【0041】
なお、上記実施形態では、入力する多値画素データは8ビットの256階調で、8×8サイズのディザマトリクスを用いて2値化する例を説明した。
【0042】
ディザマトリクスサイズは8×8=64であるので、閾値は64個備えることになる。この場合、各閾値の値の差が等しくするのであれば、その差は256/64=4となる。例えば、入力された画素Aの値が0〜3のいずれかである場合、ディザマトリクスの如何なる位置の閾値と比較しても、これらは少なくとも“0”に2値化される。従って、ラン検出部6は同じ値の連続数を検出する際に、この「同じ値」に対してある程度の幅を設定し、その幅内であれば同値であると認定し、ランを検出するようにすれば、図3におけるステップS204で「RUN>N」と判定される確率を高めることができ、更に効率の良い符号化を行うことができることになる。
【0043】
<第2の実施形態>
上記実施形態(第1の実施形態)では、入力画像の色成分は単一であるとしたが、画像の色成分の数は任意である。本第2の実施形態では、図5に示すように、R、G、Bの3成分を入力とし、色空間変換処理部10をもち、記録色成分であるC、M、Y、Kの4成分についてディザ処理および圧縮を行うような構成をとることもできる。
【0044】
本第2の実施形態では、C、M、Y、Kそれぞれの色成分ごとに4組のディザ処理部2C、2M、2Y、2K、FIFO3C、3M、3Y、3K、排他的論理和演算器4C、4M、4Y、4K、およびハフマン符号化部5C、5M、5Y、5Kを備える。4組それぞれの処理部の動作は第1の実施形態と同様である。
【0045】
上記構成では、ラン検出部6は各RGBのデータを1単位として、ラン長を検出することになる。従って、1単位毎に異なることがあっても、その中の例えばR成分は同じとなることもあり得る。従って、バッファメモリ1を1つとせず、色空間変換部10の直後に、それぞれの色成分毎に設け、それぞれが独立して入力するようにしても良い。
【0046】
ここで、色空間変換部6および、各ディザ処理部の入力・出力の階調数は任意である。また、色成分ごとのディザマトリックスの大きさは異なっていてもよいのは勿論である。また、プリンタ内部にイメージを記録色成分でレンダリングする場合には、図示の色変換部は不要となる。
【0047】
なお、実施形態では多値画像データは8ビットもしくは、各成分が8ビットとし、ディザ処理は8×8サイズのディザマトリクスを用い、2値化する場合を説明したが、入力する多値画素データは8ビットに限定されるものではない。また、ディザマトリクスサイズも8×8に限るものでもなく、その形状も正方に限定されるものではく、一般にN×Mとして適用できるものである。
【0048】
また、2値化ばかりでなく、3値化、或いは4値化に適用しても構わない。例えば3値化の場合、仮に、入力多値画素データAに対して2つの閾値T1、T2(T2>T1)を用い、
A<T1 出力値0
T1≦A<T2 出力値1
T2≦A 出力値2
として3値化すれば良い。
【0049】
以上説明したように、本第1、第2の実施形態によれば、画像のディザ処理および圧縮を行う場合でも、単純な構成で、ディザ処理、符号化処理が効率良く高速に行えるようになる。また、第2の実施形態の如く、色空間変換を同時に行う場合でも、不必要な色空間変換を行わずにすむため、処理効率が向上する。
【0050】
<第3の実施形態>
上記第1、第2の実施形態では、ディザ処理の周期性を利用して1ライン単位に圧縮符号化するものであったが、以下では、ビットインターリーブを用いる場合に適用させた例を第3の実施形態として説明する。
【0051】
先ず、ビットインターリーブという手法について説明する。ビットインターリーブでは、画像を一定の幅のセルに分割し、セル内の同じ位置の画素データを集めたものをランレングス符号化する。
【0052】
説明を簡単なものとするため、入力画像は2値、セル幅は4とした場合の入力された画像の1ラインのデータが図10に示すようになっているものとする。
【0053】
図示の入力画像をセルで区切り、各セル内において同じ位相の画素データを集めると、図11のようになる。この集められた画素データを位相ごとにランレングス符号化したものが図12である。
【0054】
ここで、問題にしたいのは、このビットインターリーブ方式では、セル中の、ある位相の復号が終了してからでなければ、次の位相の復号ができない点である。すなわち、入力画像の1ライン分の画素データを順に得るためには、復号された画素データをラインバッファに保持しなければならず、1パスで復号できない。
【0055】
そこで、本第3の実施形態では、かかる問題点を解決する。即ち、1ラインの復号が完了するのを待たず(1ライン分の出力バッファを不要にすることでもある)に、1ラインの先頭から復号していっては、その都度、復号結果を出力し得るように符号を生成することを可能にする。
【0056】
なお、インターリーブ方式での符号化は、符号化効率の観点から、各セルの同位相の画素データは互いに高い相関を有することが望ましい。従って、入力される画像データが2値化のディザ処理後のデータとしたとき、上記のセルの大きさ(幅)は、ディザマトリクスの大きさ(幅)と一致させるか、或いは、その整数倍であることが望まれる。本実施形態では、画像データは、ディザ処理後のデータであって、そのディザ処理は4×4のディザマトリクスでもって2値化され、その結果を入力するものとして説明する。
【0057】
ただし、ディザ処理結果は4ライン分を格納するバッファを必要とするものではなく、図4Aや図4Bに示す処理を行った結果(ただし、ディザマトリクスサイズは4×4に変更する)で構わない。すなわち、1ライン単位に処理できるものである。
【0058】
図8は実施形態における符号化を行う画像符号化装置100のブロック構成図を示している。本装置は、図示の如く、画素収集部101、ラン検出部102、符号化部103、バッファ104、整列部105で構成されている。
【0059】
先ず、実施形態における画像符号化装置100の全体の処理の流れを図9のフローチャートに従って説明する。
【0060】
先ず、ステップS101では、画素収集部101で入力画像をセルで区切り、同じ位相の画素データを集める。ステップS102では、位相ごとに集められた画素データにおける同じ値の連続数ランをラン検出部102で検出する。ステップS103では、検出された連続数ランと画素データが符号化部103に送られてランレングス符号化される。この時、入力画像のどの座標から符号化されているかという情報を付加してバッファ104に格納する。続いて、ステップS104では、全ての位相について上記の処理が終了したかどうかを判定する。全ての位相について処理が終了していなければステップS102に戻り、処理が終了していればステップS105に進む。ステップS105では、整列部105でバッファ104に格納されている符号語列を座標の値が小さい順に整列する。
【0061】
上記処理の内容を以下に詳細に説明する。実施形態では、先に言及したように、入力画像は2値、セルの幅は4とし、入力画像の1ライン分の画素データは図10に示すようになっているものとする。
【0062】
図10の入力画像を、図9で示す処理の流れに従って符号化すると、その様子は次のようになる。
【0063】
ステップS101で各位相ごとに集められた画素データは、図11のようになる。ステップS102、S103の処理を繰り返し、全ての位相について画素データがランレングス符号化されると、バッファ104に格納されている符号語列及び座標情報は、図13(a)のようになる。ステップS105で図13(a)の符号語列を座標の値が小さい順に整列する(座標位置をキーにしてソートする)と、整列後の符号語列は図13(b)のようになる。
【0064】
なお、同図13(a)のデータでは、各ランは白、黒、白、黒…と交互になるので、先頭のランのみが画素値を有していれば、2番目以降のラインはその値を交互に反転した結果を用いれば良く、結局のところ、各ランは自身の画素値を持つ必要はない。一方、図13(b)であるが、ある箇所は黒ランが連続したり、別な箇所では白ランが連続するので、各ランには自身のランの画素値がどのようなものであるのかを保持する必要がある。従って、図9における符号化処理(ステップS103)では、各ランの符号には、その開始位置(開始位置を4で割ることで位相がわかるので、位相に関する情報を持っていることと等価である)及びそのランの画素値が含まれるように符号化することになる。
【0065】
さて、図13(b)に示す符号が完成したとする。実施形態における復号する際の構成とその処理手順の詳細は後述するが、復号そのものの原理を図14に従って説明する。
【0066】
図13(b)に示す符号が与えられたとき、先ず、先頭の符号“4”は、開始位置が0であり、画素値が“0”であることがわかっている。なお、図示において、“−”はその画素値が未定であることを示している。
【0067】
図14における工程1において、座標位置“0”から4セル分の位相0の画素が“0”として決定できる。次いで、工程2では、座標位置“1”から1セル分の位相1の画素が“1”として決定できる。工程3では、座標位置“2”から2セル分の位相2の画素が“0”として決定できる。以下、工程4、5…と続くことになる。
【0068】
かかる手順で注目したい点は、図13(b)に示すように符号を座標位置で並べ替えることで、例えば図14における各工程で復号する開始位置以前の画素値が確定していることである。すなわち、或る符号を復号する際、その復号位置以前の画素データは既に決定しているから、その復号位置以前のデータは復号済みとして出力できることに他ならない。
【0069】
上記の処理では、分かりやすく説明するためのものである。例えば最初の符号“4”に対して、4セル分のバッファを確保しなければならないが、本第3の実施形態ではかかるバッファを実質的に不要にし、更に効率良く1パスで出力することを可能にする。かかる復号処理を行う構成は、図15に示す構成となる。
【0070】
この復号を実現する画像復号装置200は、復号部201、データ格納部202、及び、制御部203で構成される。復号部201は制御部203の制御の元に符号語列から符号語を読み込んで復号する。復号して求められた連続数ランと画素データは、データ格納部202に格納される。このデータの格納はセルの位相ごとに行なわれる。制御部203は全体の制御を行ない、データ格納部202の内容によって、データ格納部202に格納されている画素データを出力させるか、又は、復号部201に符号語を読み込ませて復号させるかを制御する。
【0071】
以下、その動作手順を図16のフローチャート及び図17のシーケンス図に従って説明する。ただし、以下の説明で、変数phaseは位相(=0、1、2、3)を示しており、変数run[phase]は位相0、1、2、3のランを格納する変数である。また、widthは1ラインの画素数、tone[phase]は位相phaseにおける画素値を格納する変数、cel_widthは1セルの幅(実施形態では4)である。posは注目する画素位置(復号する画素位置)を格納する変数で、位相phaseはposを4で割った余りを算出することで得ることができる。
【0072】
先ず、ステップS201でデータ格納部202の内容を初期化する(run[]を0で初期化する)。続いて、ステップS202において、処理の対象となる座標を表わす変数posの初期化を行なう(先頭画素位置に設定する)。
【0073】
次いで、ステップS203では、現在の変数posと1ラインの画素数widthを比較することで、変数posが最終画素位置に到達したか否かを判断することで、1ライン分の処理が終わったかを判定する。1ライン分の処理が終了していなければ、ステップS204に進み、処理の対象となる座標posとセルの幅から位相phaseを求める。先に説明したように、復号する画素位置は変数posで表わされているから、変数posをcel_widthで割った余りを求めることで、その位相phaseを求めることができる。ステップS204における「mod」は、「x mod y」としたとき、xをyで割った際の余りを返す周知の関数である。
【0074】
ステップS205では、上記のようにして求めた変数phaseを元に、データ格納部202に格納してある run[phase] を調べ、この値が0であればステップS206に進み、そうでなければステップS207に進む。
【0075】
初期段階では、ステップS201で各run[]は0クリアされている。すなわち、run[0]=run[1]=run[2]=run[3]=0であるので、ステップS206に進むことになる。
【0076】
ステップS206では、復号部201が符号語列から符号語を読み込んで復号を行なう。符号は先に説明したように、ランとその座標位置、及び、画素値で構成されるわけであるから、復号部201から読出したデータは、pos、phase、run[phase]を読出すことになる。より詳しく説明すると、最初にこのステップS206の処理を行う場合であって、図13(b)のような符号が与えられている場合には、各変数の値は次のようになっている。
pos=0 ;画素位置が先頭
phase=0 ;位相は0
run[phase]=run[0]=4 ;位相0のランは4
tone[phase]=tone[0]=0 ;位相0の画素値は0
この結果、ステップS206では、画素位置0の復号結果の画素値は“0”(=tone[0]=0であるため)となり、その結果を出力する(図17における座標位置0の出力が完了する)。これにより、run[phase]のランが1つ減ることになるので、ステップS208でrun[phase]を1ディクリメントし、次の画素位置の処理を行うためposを1つ進め(インクリメント)、ステップS203に戻る。
【0077】
ステップS203に戻ると、posが今度は1となっているので、phase=1となり、位相1の出力結果を得る処理を行う。
【0078】
図17における「復号後」における4つの値は、pos(座標)に応じたrun[0],run[1],run[2],run[3]の値の復号時(ステップS207の時点)推移を示しており、同図における「出力後」は出力後のrun[]の値(ステップS208の処理結果)を示し、太枠は復号結果の画素値との関係を示している。
【0079】
以上のように本第3の実施形態は、ディザ処理等で処理された結果には、その処理で用いられたディザマトリクスのサイズ(幅)に依存して、そのサイズ内の同位相の画素値が互いに相関が高いことに着目し、そのディザマトリクスの幅をセルとしてインターリーブ符号化する。そして、符号化する際には、各ランの開始位置及び画素値を保持し、その開始位置でソートすることで、復号時においては、先頭画素からその座標位置の順に復号し、出力することが可能になり、これまでの様に1ライン分の出力バッファを不要とすることが可能になる。
【0080】
<第4の実施形態>
上記第3の実施形態では、符号化結果を出力する際に、各ランをその座標位置をキーに並べ替える処理(図9のS105)を必要とする。例では、高々28画素(7セル分)を例にしていたので、その並べ替えに係る処理は無視できる程度に小さい。しかしながら、一般に、処理対象の画像は、近年のイメージスキャナは数千dpiの解像度を有していたり、デジタルカメラは数百万画素のCCDを備えている等からもわかるように、数千×数千画素で構成されるものが普通であるから、現実には1ライン分の画素数は非常に多い。また、各ラインについての符号化を全ライン分行う必要があるわけであるから、符号化全体に対する並べ替え処理の占める割合は無視できない。
【0081】
そこで、上記第3の実施形態における並べ替え処理を不要とする例を第4の実施形態として説明する。
【0082】
なお、説明を簡単なものとするため、本第4の実施形態における処理対象の画像データは4×4のディザマトリクスで2値化された結果であって、図10に示すデータを採用する。すなわち、セル幅も4、更に、結果的に得られる符号は第3の実施形態における図13(b)となるものとして説明する。従って、復号処理も第3の実施形態と同様であり、復号処理については特に言及しない。
【0083】
以下、本第4の実施形態における符号化について説明する。
【0084】
図18は、第4の実施形態における符号化装置(符号化回路)のブロック構成図である。図示に示す如く、ランレングス検出部1801、符号化部1802、1ライン分の画素データを格納するラインバッファ1803と、符号バッファ1804とを備える。上記構成における符号化処理は次の通りである。
【0085】
入力画素は、まず、ラインバッファ1803に1ライン分格納される。ついで、ランレングス検出部1801および符号化部分1803によって符号化された符号列が符号バッファ1804に格納される。1ライン分の符号語が、符号バッファ1804に格納されたら、符号化部分1802は、バッファ1804から符号を符号化とは逆順に出力する。画像の全ラインについて、以上の一連の処理を行なう。
【0086】
ランレングス検出部1801における1ライン分の処理の具体例を図20を用いて説明する。なお、同図において、pos、phaseは第3の実施形態と同様の意味を持つ。また、line[pos]は、画素位置posにおける画素値であり、cell_widthはセル幅(実施形態では4)である。また、run[]は位相0、1、2、3それぞれにおけるランを格納するための変数である。
【0087】
ランレングス検出部1801は、ラインバッファ1803に1ライン分の画像データ(実施形態では2値画素データ)の格納が完了してから、その検出動作を開始するが、検出は、同図に示すように1ラインの後端から行う(図20における画素位置を示すposの値に注意されたい)。なお、レンダリングした2値画像を読出すとき、各ラインの最終画素から先頭に向かう順に読む出すようにすれば、ラインバッファ1803は不要であることを付言していおく。
【0088】
先ず、run[]を“0”で初期化し、後端位置を設定するため変数posに1ライン分の画素数“27”を格納する。phaseはpos mod cell_width(modは除算した際の余りを返す演算子)で算出されることは第3の実施形態と同様である。
【0089】
さて、画素位置27に着目すると、この画素位置の位相は3である。初期化処理でrun[3]は0に初期化されているので、先ず、このrun[3]に“1”を格納する。
【0090】
次いで、変数posで示される注目画素line[pos]と、その1つ前のセルの同位相の画素値line[pos-cell_width](line[27-4]=line[23])とが同じであるかどうかを判断する。図示では、posの画素値とその直前のセルの同位相の画素値とは等しいから、少なくとも注目画素は、1つ前の同位相の画素の値から連続することがわかるので、この時点ではランが確定しない(少なくともランが2であることがわかるだけで、3つ以上の場合も有り得るという意味)。従って、run[3]の値は出力しない。
【0091】
次に、画素位置pos=26に処理を進める。この位置における位相phaseは2(=26 mod 4)であるので、同様にrun[2]には初期値として“1”を格納する。そして、line[26]と1つ前のセルの同位相の画素値line[22]とを比較する。この場合も両方とも白画素であるわけであるから、run[2]は確定できないので、run[2]の値を出力しない。
【0092】
次に、画素位置pos=25に処理を進める。この位置における位相は1であるので、同様にrun[1]には初期値として“1”を格納する。そして、line[25]と1つ前のセルの同位相の画素値line[21]とを比較する。この場合、双方の画素値が異なる。換言すれば、1つ前のセルの同位相まででランが途切れていることが判明する。従って、このときrun[1]の値(この場合は“1”)、画素値line[pos]及び位置posを出力し、run[1]を次回のランの計数に備えて“0”でリセットする。
【0093】
以下、上記注目画素位置posを順に更新(−1減じる)し、その更新された画素位置について処理するとき、その位相phaseを求め、run[phase]を+1する処理を行う。そして、注目画素の値line[pos]と1つ前のセルの同位相の画素値line[pos-cell_width]とが等しくない場合に、run[phase]とその画素値を出力し、run[phase]を0でリセットすることを繰り返す。ただし、pos<cel_width(=4)となった場合、注目画素位置posの1つ前のセルは存在しないことになるので、その場合には、無条件でrun[],pos,line[pos]を出力していく。
【0094】
以上の結果、出力される符号は、図20の右端の「符号」で示されるものとなる。ここで着目したい点は、同図の「符号」の下端から上端に向かう符号の並びは、図13(b)と全く同じになることである。
【0095】
すなわち、生成された符号を今度は逆順に読出し、それを出力するという単純な作業を行うことで、図13(b)と等価の結果を得ることを意味していることに他ならない。
【0096】
以上の動作処理を行うには、結局のところ、図19に示すフローチャートに従って行えば良いであろう。
【0097】
先ず、1ラインの処理に先立ち、ステップS1901において、run[]の全要素、すなわち0番目からcell_width-1番目までの要素を0で初期化する。さらに、ステップS1902において、処理対象画素位置を1ラインの後端画素位置とするため1ライ分幅を格納している変数widthから“1”を減じた値を変数posにセットする(先頭画素位置を0としているため)。
【0098】
次いで、ステップS1903では、posが0以上であるかどうかを判断することで、1ラインの全画素についての処理が完了したか否かを判断する。否の場合には、以下に示すステップS1903〜S1910を繰り返す。
【0099】
ステップS1904では、位相phaseを、posをセル幅で除算し、その余りを求めることで算出する。ステップS1905において、run[phase]を1増加させ、これによって位相ごとのランを計数する。
【0100】
次の、ステップS1906は、処理対象の画素位置posが先頭のセル内にあるかどうかを判断するものであり、以下に説明するステップS1907の処理をスキップさせるものである。
【0101】
ステップS1907では、注目画素位置における画素値line[pos]と1つ前のセルの同位相の画素値line[pos-cell_width]とが同じであるか否かを判断する。互いに異なる場合には、ステップS1908において、画素値line[pos]とrun[phase]とを、符号化部102によって符号化し、符号バッファ104に格納する。ステップS1908において、画素が符号化された場合、次の同位相の画素からランを新たに計数しなおす必要があるので、ステップS1909においてrun[phase]を0にリセットしておく。
【0102】
この後、ステップS1910において、処理対象となる画素位置を次に進めるため、posを“1”だけ減じ、ステップS1903以降の処理を繰り返す。
【0103】
以上のようにして、図20に示した手順に沿った処理が実現できることになる。
【0104】
なお、第3の実施形態との対比で説明すれば、符号化処理では、図9におけるステップS105は不要になり、代わりに、符号化結果を逆順に読出し、出力する処理とすれば良いであろう。
【0105】
以上説明したように本第4の実施形態によれば、第3の実施形態で必要になっていた並べ替え処理が不要になり、第3の実施形態の作用効果に加えて、画像全体の符号化効率を更に向上させることが可能になる。
【0106】
また、第3、第4の実施形態では、入力される画像は4×4のディザマトリクスでディザ処理された結果であるものとして説明したため、セルのサイズは4であるものとして説明した。しかしながら、ディザマトリクスのサイズが8×8であれば、当然セルのサイズは8(位相は0〜7について処理することになる)、もしくはその整数倍にすれば良いわけであり、上記例によって本願発明が限定されるものではないし、単色に限らず、各色成分について同様に処理しても良いから、カラー画像についても当然に適用できる。
【0107】
また、変数run[]を格納する領域を適当に確保しておけば、cell_widthや1ラインの画素数widthを適宜設定できるようにすることで、入力される画像データが如何なる周期性のある画像であっても対応できるようになるであろう。
【0108】
また、2値化のディザ処理を例にして示したが、第1の実施形態でも言及したように、3値化、4値化でも構わない。要するに、符号化する対象となる画像データが、適当な周期毎の同位相の画素間で互いに相関性の高い状態になっていさえすれば、本実施形態は適用可能である。
【0109】
また、上記第1乃至4の実施形態では、プリンタ内における圧縮処理について説明したが、図2、図3、図16、図19に示す処理手順に従って処理すれば良いわけであり、汎用の情報処理装置(例えばパーソナルコンピュータ)にも適用できるのは明らかである。すなわち、本発明はコンピュータプログラムをもその対象とするものである。また、通常、パーソナルコンピュータ等にコンピュータプログラムを導入する場合には、そのプログラムを格納したフロッピーディスクやCDROM等の記憶媒体を装置にセットし、装置にコピーもしくはインストールすることで実現できるものであるから、本発明はかかるコンピュータ可読記憶媒体をもその範疇とするのは明らかである。
【0110】
【発明の効果】
以上説明したように本発明によれば、単純な構成で、ディザ処理した結果を効率良く、且つ、高速に圧縮符号化することが可能となる。
【図面の簡単な説明】
【図1】実施形態における画像圧縮処理部のブロック構成図である。
【図2】圧縮処理の全体の処理のフローチャートである。
【図3】図2におけるステップS101の詳細処理手順を示すフローチャートである。
【図4A】ディザ処理部の構成の一例を示す図である。
【図4B】ディザ処理部の構成の一例を示す図である。
【図5】第2の実施形態における画像圧縮処理部のブロック構成図である。
【図6】1画素4ビット表現の画像データに対するハフマン符号の例を示す図である。
【図7】実施形態の基本概念を示す図である。
【図8】第3の実施形態における符号化装置のブロック構成図である。
【図9】第3の実施形態における符号化処理手順を示すフローチャートである。
【図10】第3の実施形態における入力画像データの例を示す図である。
【図11】図10の入力画像をセル幅4としたときの各位相のデータ列を示す図である。
【図12】図11のデータをランで示す図である。
【図13】実施形態における符号語の並べ替え前と後とを対比して示す図である・
【図14】第3の実施形態における復号処理の基礎を示す図である。
【図15】第3の実施形態における復号装置のブロック構成図である。
【図16】第3の実施形態における復号処理の手順を示すフローチャートである。
【図17】第3の実施形態における復号処理のシーケンスを模式的に示す図である。
【図18】第4の実施形態における符号化装置のブロック構成図である。
【図19】第4の実施形態における符号化処理手順を示すフローチャートである。
【図20】第4の実施形態における符号化のシーケンスを模式的に示す図である。
Claims (7)
- 入力される多値画像データをディザ処理手段でディザ処理し、符号化手段で圧縮符号化する画像処理装置であって、
ラスター順に多値画素データを入力する入力手段と、
該入力手段で入力した多値画素データを、ディザマトリクス中の閾値と比較することでディザ処理するディザ処理手段と、
該ディザ処理手段で処理された結果と、ディザマトリクスの幅Nの画素数分だけ先行してディザ処理された結果とを排他論理和する排他論理和手段と、
該排他論理和手段の結果に基づいて符号化する符号化手段とを備え、更に、
前記入力手段で入力された多値画素データにおける同じ値の連続数RUNを検出する検出手段と、
該検出手段で検出した連続数RUNと前記Nとの関係がRUN>Nとなっているか否かを判断する判断手段と、
該判断手段で越えていると判断した場合、連続する画素の後端からRUN−N個の画素については、0値がRUN−N個発生するものとして直接符号化する制御手段と
を備えることを特徴とする画像処理装置。 - 前記検出手段は、ディザマトリクスの各閾値の差に応じた範囲内にある多値画素データを同じ値としてみなして計数すること特徴とする請求項第1項に記載の画像処理装置。
- 更に、前記ディザ処理手段、排他論理和手段、符号化手段を各色成分だけ備え、前記入力手段で入力したカラー多値画素データをそれぞれに分配する手段を備えることを特徴とする請求項第1項に記載の画像処理装置。
- 前記排他的論理和手段は、ディザ処理後のデータをN個記憶するFIFOメモリを備え、入力するディザ処理後のデータを前記FIFOメモリからの出力値とを排他論理和することを特徴とする請求項第1項に記載の画像処理装置。
- 入力される多値画像データをディザ処理手段でディザ処理し、符号化手段で圧縮符号化する画像処理方法であって、
ラスター順に多値画素データを入力する入力工程と、
該入力工程で入力した多値画素データを、ディザマトリクス中の閾値と比較することでディザ処理するディザ処理工程と、
該ディザ処理工程で処理された結果と、ディザマトリクスの幅Nの画素数分だけ先行してディザ処理された結果とを排他論理和する排他論理和工程と、
該排他論理和工程の結果に基づいて符号化する符号化工程とを備え、更に、
前記入力工程で入力された多値画素データにおける同じ値の連続数RUNを検出する検出工程と、
該検出工程で検出した連続数RUNと前記Nとの関係がRUN>Nとなっているか否かを判断する判断工程と、
該判断工程で越えていると判断した場合、連続する画素の後端からRUN−N個の画素については、0値がRUN−N個発生するものとして直接符号化する制御工程と
を備えることを特徴とする画像処理方法。 - コンピュータが読み込み実行することで、入力される多値画像データをディザ処理手段でディザ処理し、符号化手段で圧縮符号化する画像処理装置として機能するコンピュータプログラムであって、
ラスター順に多値画素データを入力する入力手段と、
該入力手段で入力した多値画素データを、ディザマトリクス中の閾値と比較することでディザ処理するディザ処理手段と、
該ディザ処理手段で処理された結果と、ディザマトリクスの幅Nの画素数分だけ先行してディザ処理された結果とを排他論理和する排他論理和手段と、
該排他論理和手段の結果に基づいて符号化する符号化手段とを備え、更に、
前記入力手段で入力された多値画素データにおける同じ値の連続数RUNを検出する検出手段と、
該検出手段で検出した連続数RUNと前記Nとの関係がRUN>Nとなっているか否かを判断する判断手段と、
該判断手段で越えていると判断した場合、連続する画素の後端からRUN−N個の画素については、0値がRUN−N個発生するものとして直接符号化する制御手段と
して機能するコンピュータプログラム。 - 請求項6に記載のコンピュータプログラムを格納することを特徴とするコンピュータ可読記憶媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002116309A JP3862590B2 (ja) | 2001-11-22 | 2002-04-18 | 画像処理装置及び方法及びコンピュータプログラム並びにコンピュータ可読記憶媒体 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001357779 | 2001-11-22 | ||
JP2001-357779 | 2001-11-22 | ||
JP2002116309A JP3862590B2 (ja) | 2001-11-22 | 2002-04-18 | 画像処理装置及び方法及びコンピュータプログラム並びにコンピュータ可読記憶媒体 |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2003224722A JP2003224722A (ja) | 2003-08-08 |
JP2003224722A5 JP2003224722A5 (ja) | 2005-04-14 |
JP3862590B2 true JP3862590B2 (ja) | 2006-12-27 |
Family
ID=27759218
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002116309A Expired - Fee Related JP3862590B2 (ja) | 2001-11-22 | 2002-04-18 | 画像処理装置及び方法及びコンピュータプログラム並びにコンピュータ可読記憶媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3862590B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012095909A1 (ja) * | 2011-01-13 | 2012-07-19 | 日本電気株式会社 | データ可逆圧縮装置及び方法並びにデータ可逆伸張装置及び方法 |
-
2002
- 2002-04-18 JP JP2002116309A patent/JP3862590B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2003224722A (ja) | 2003-08-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7415154B2 (en) | Compression of palettized color images with variable length color codes | |
US7561744B2 (en) | Image encoding apparatus, image decoding apparatus, and their control method, and computer program and computer-readable storage medium | |
JPWO2004068844A1 (ja) | 画像圧縮方法、画像復元方法、プログラム及び装置 | |
US7277585B2 (en) | Image encoding method, image encoding apparatus and storage medium | |
EP0103773B1 (en) | Method of processing picture signal to increase average run length and apparatus therefor | |
JP3027089B2 (ja) | 符号化方式及び復号方式及び符号化復号方法 | |
JP3387738B2 (ja) | 画像パターン変換装置 | |
JP3862590B2 (ja) | 画像処理装置及び方法及びコンピュータプログラム並びにコンピュータ可読記憶媒体 | |
KR100405819B1 (ko) | 이진 영상의 데이터 압축 및 복원방법 | |
JPH05151349A (ja) | 画像データ圧縮方法および符号化回路 | |
JPH0918350A (ja) | 符号化復号化装置及び符号化復号化方法 | |
JP3085118B2 (ja) | データ圧縮装置 | |
JPH0936749A (ja) | 符号化復号化装置およびこれに用いられる符号化方法 | |
JP3867886B2 (ja) | 画像符号化方法、画像符号化装置、画像復号化方法及び画像復号化装置 | |
JP2615215B2 (ja) | 画像データ圧縮方式 | |
JP3459723B2 (ja) | 画像処理装置及び方法 | |
JP2010074444A (ja) | 画像圧縮装置、画像圧縮方法、画像復号装置、画像復号方法、及び、コンピュータプログラム | |
JPS6364948B2 (ja) | ||
JP2798767B2 (ja) | 画像データ圧縮方式 | |
JPH04270569A (ja) | 画像処理装置におけるデータ圧縮方式 | |
JP2755463B2 (ja) | 画像データ圧縮方式 | |
JP4633577B2 (ja) | データ圧縮装置およびデータ圧縮プログラム | |
JP2708252B2 (ja) | 画像データ圧縮方式 | |
JP3146092B2 (ja) | 符号化装置及び復号化装置 | |
JP3867887B2 (ja) | 画像符号化方法、画像符号化装置、画像復号化方法、画像復号化装置、画像形成装置及び記録媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040607 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040607 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20060829 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060904 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060926 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091006 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101006 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101006 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111006 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111006 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121006 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131006 Year of fee payment: 7 |
|
LAPS | Cancellation because of no payment of annual fees |