JP4164257B2 - 画像処理装置、画像処理方法、プログラム、及び記憶媒体 - Google Patents
画像処理装置、画像処理方法、プログラム、及び記憶媒体 Download PDFInfo
- Publication number
- JP4164257B2 JP4164257B2 JP2001373269A JP2001373269A JP4164257B2 JP 4164257 B2 JP4164257 B2 JP 4164257B2 JP 2001373269 A JP2001373269 A JP 2001373269A JP 2001373269 A JP2001373269 A JP 2001373269A JP 4164257 B2 JP4164257 B2 JP 4164257B2
- Authority
- JP
- Japan
- Prior art keywords
- image
- encoding
- data
- decoding
- period
- 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
- Compression Of Band Width Or Redundancy In Fax (AREA)
- Image Processing (AREA)
- Facsimile Image Signal Circuits (AREA)
Description
【発明の属する技術分野】
本発明は、画像を符号化する、もしくは符号化された画像を復号する画像処理装置、画像処理方法、プログラム、及び記憶媒体に関するものである。
【0002】
【従来の技術】
壁紙あるいはテクスチャなどと呼ばれる、同一の背景パターンを並べて出力するアプリケーションプログラムが出力する印刷データを画像データに展開して印刷する場合において、データサイズを小さくするためにこの画像データを圧縮する場合、背景パターン自体がよく圧縮できる場合は画像データ全体をよく圧縮することは容易である。しかしながら、背景パターンそれ自体があまり圧縮できない場合も多く、そのような場合には画像データ全体をよく圧縮することは必ずしも容易ではない。
【0003】
図10はそのような印刷データの一例であり、図11に示すように、同一のパターンを並べることにより、背景が構成されている。
【0004】
従来の圧縮技術では、例えばランレングス符号化、あるいはデルタロウ符号化のように、画素値が近隣の画素と同じ値になる傾向が強いことを利用して、近隣の画素を参照し、値が同一であれば圧縮する符号化方法がある。
【0005】
またLZ77符号化、あるいはLZ78符号化のように、広い範囲の画素を参照し、値が同一の並びの画素を検出してこれを利用することにより圧縮する符号化方法がある。これらの方法によればかなり離れた位置にある同一の値を有する画素を検出して圧縮に利用することができるため、上述の壁紙などをよく圧縮することができる。
【0006】
またJPEG符号のように、背景パターンそれ自体をよく圧縮できる符号化方法がある。
【0007】
また、特願2000−76424にテクスチャの周期を検出して圧縮を行う方法が示されている。
【0008】
【発明が解決しようとする課題】
しかしながら、上記ランレングス符号化、あるいはデルタロウ符号化によれば、上述の壁紙などを圧縮する場合、その繰り返し周期が例えば1024画素と大きな値をとるため、近隣の画素を参照しただけではよく圧縮することができないという欠点がある。
【0009】
また、上記LZ77符号化、あるいはL78符号化によれば、符号化時に広い範囲の画素を参照するため、計算量が多く、符号化に要する時間が長いという欠点がある。またこれらの方法によれば、復号時に広い範囲の画素を参照するために、大容量のバッファメモリが必要となるという欠点があり、例えばプリンタに復号機能を持たせる場合にコストアップの原因となる。
【0010】
また、上記JPEGによれば、符号化時の計算量が多いため、符号化に要する時間が長いという欠点がある。又、この方法によれば、復号時の計算量もまた多いという欠点があり、例えばプリンタに復号機能を持たせる場合にコストアップの原因となる。
【0011】
また、上記特願2000−76424によれば、フーリエ解析あるいは自己相関係数によるもので、背景パターンのデータを用いて膨大な量の計算を行う必要があるため、高速に符号化することができない。
【0012】
本発明は以上の問題に鑑みて成されたものであり、周期性を有する画像、特に壁紙などの背景パターンを並べた画像データを符号化する際に、画像全体をより高速に、且つより高圧縮率で圧縮することを目的とする。
【0013】
また本発明の別の目的は、壁紙などの背景パターンを並べた画像を符号化した符号を復号する復号回路の回路規模を小さくし、かつ大量のバッファメモリを必要としない、低コストで構成可能な復号を行うことを目的とする。
【0014】
【課題を解決するための手段】
本発明の目的を達成するために、例えば本発明の画像処理装置は以下の構成を備える。
【0015】
すなわち、画像を符号化する画像処理装置であって、
前記画像のパターンの行方向の周期pを検出する周期検出手段と、
前記画像に対してn行m列のマトリクスを用いて擬似中間調処理を施す擬似中間調処理手段と、
前記擬似中間調処理を施された画像を符号化する符号化手段とを備え、
前記符号化手段は、
符号化対象画素から距離m×a(a>0)だけ行方向に離れた第1参照画素と、前記符号化対象画素から、前記周期pの整数倍である距離m×b(b>0,a≠b)だけ行方向に離れた第2参照画素と、を用いて前記符号化対象画素を符号化することを特徴とする。
【0016】
本発明の目的を達成するために、例えば本発明の画像処理装置は以下の構成を備える。
【0017】
すなわち、符号化された画像を復号する画像処理装置であって、
n行m列のマトリクスを用いて擬似中間調処理が施され、符号化された画像を入力する入力手段と、
前記入力手段によって入力された画像を復号する復号手段とを備え、
前記復号手段は、
復号対象画素から距離m×a(a>0)だけ行方向に離れた第1参照画素と、前記復号対象画素から、前記画像のパターンの周期pの整数倍である距離m×b(b>0,a≠b)だけ行方向に離れた第2参照画素と、を用いて前記復号対象画素を復号することを特徴とする。
【0018】
【発明の実施の形態】
以下、添付図面を参照して、本発明を好適な実施形態に従って詳細に説明する。
【0019】
[第1の実施形態]
図17に本実施形態の画像処理装置の基本構成を示す。本実施形態では画像処理装置として一般的なパーソナルコンピュータやワークステーションを用いる。
【0020】
1701はCPUで、RAM1702やROM1703に格納されたプログラムやデータを用いて本装置全体の制御を行うと共に、後述の画像圧縮処理も行う。1702はRAMで、外部記憶装置1704や記憶媒体ドライブ1709からロードされたプログラムやデータ等を一時的に記憶するエリアを備えると共に、CPU1701が各種の処理を実行する際に用いるワークエリアも備える。1703はROMで、本装置全体の制御プログラム(例えばブートプログラム)や制御データ(例えば本装置の設定データ)を格納する。1704はハードディスクなどの外部記憶装置で、記憶媒体ドライブ1709からインストールされたプログラムやデータなどを保存する。また、上述のワークエリアのサイズがRAM1702内に設けられなくなった場合に、不足分をファイルとして提供することもできる。1705,1706は夫々キーボード、マウスで、夫々ポインティングデバイスとして用いられ、各種の指示を本装置に入力することができる。1707は表示装置で、CRTや液晶画面などにより構成されており、画像や文字などを表示することができる。1708が画像入力装置で、ディジタルカメラやスキャナなどにより構成されており、撮像や取り込みなどの操作により画像をディジタルデータとしてRAM1702や外部記憶装置1704に入力することができる。
【0021】
1709は記憶媒体ドライブで、CD−ROMやDVD−ROMなどの記憶媒体からプログラムやデータなどを読み込み、読み込んだプログラムやデータをRAM1702や外部記憶装置1704等に出力する。1710はI/F(インターフェース)で、インターネットやLANなどを介して外部の機器から圧縮処理対象の画像を受信したり、逆に圧縮した画像を外部の機器に対して送信する等、外部の機器とのデータの送受信を行う際のI/Fとして機能する。1711はプリンタで、圧縮された画像を伸長して紙などの記録媒体に印刷を行う画像伸長装置として機能する。1712は上述の各部を繋ぐバスである。
【0022】
図1は画像を印刷する際に用いるソフトウェア群とプリンタとの関係を示す概念図である。外部記憶装置1704内にはオペレーティングシステム2(以下、OS)、アプリケーション3、プリンタドライバ4,ポートドライバ6が格納されている。
【0023】
OS2は図1に示した各部(プリンタ1711は除く)、及びアプリケーション3、プリンタドライバ4、ポートドライバ5などのソフトウェアを管理する。アプリケーション3は、例えばワードプロセッサのようなアプリケーションソフトウェアであり、操作者からキーボード1705やマウス1706を用いて指示された内容に従って文書の作成・印刷などを行う。4はプリンタドライバであり、アプリケーション3が発行した印刷指令をOS2を介して受け取り、該印刷指令をプリンタ1711が解釈可能なプリンタコマンドに変換する。5はポートドライバであり、プリンタドライバ4が変換したプリンタコマンドをOS2を介して受け取り、不図示のパラレルポートを介してプリンタ1711に送信する。そしてプリンタ1711は、ポートドライバ5から受信したプリンタコマンドに従って印刷を行う。
【0024】
図2はプリンタ1111の基本構成を示すブロック図である。図中、11はパラレルポートであり、ポートドライバ6から出力されたプリンタコマンドを受信する。12はFIFO(ファーストインファーストアウト)メモリであり、パラレルポート11が受信したプリンタコマンドに含まれる符号化データ(詳細は後述)を記憶し、記憶したデータを先入れ先出しの順に復号回路13に出力する。復号回路13は、FIFOメモリ12に記憶された符号列データを復号し、復元した画像データをシフトレジスタ16に出力する。プリンタエンジン14はレーザビームプリンタエンジンであり、制御回路15の指示により、復号回路13が出力した画像データに従って印刷を行う。15は制御回路であり,例えば1チップCPUで構成され、パラレルポート11,FIFOメモリ12,復号回路13,およびプリンタエンジン14の制御を行う。16はシフトレジスタであり、復号回路13が復号したバイトデータを複数の画素に分割し、画素ごとに順次プリンタエンジン14に出力する。
【0025】
以下、印刷を行う際に、図1,2に示した各部の動作について以下、説明する。
【0026】
操作者がキーボード1105やマウス1106を用いてアプリケーション3を操作して印刷データを生成し、更に、生成した印刷データを印刷する指示を入力すると、アプリケーション3からOS2を介してプリンタドライバ4に印刷指令が渡される。プリンタドライバ4はアプリケーション3から発行された印刷指令に基づき、印刷対象となる画像データを作成し、次いでこの画像データに対してディザマトリックスを用いてディザ処理を行い、2値化処理行う。なお、その際、そして、プリンタドライバ4は、後述する符号化手順に基づき、2値化処理を施された画像データから符号化データを生成し、用紙サイズ、画像データ(ビットマップデータ)のラインの長さとライン数などを指定する印刷制御コマンド、圧縮パラメタを指定する圧縮パラメタコマンド、ページ終了を示すページ終了コマンドとともに出力する。ポートドライバ5は、プリンタドライバ4が作成した一連のコマンド群と上記符号化データをプリンタ1711に送信する。
【0027】
制御回路15はパラレルポート11を経由してプリンタコマンドを受信する。受信したプリンタコマンドのうち印刷制御コマンド、圧縮パラメタ指定コマンドは、印刷制御のために制御回路15の内部に保持される。また、受信したプリンタコマンドのうち符号化データは、FIFOメモリ12に格納される。その後、ページ終了コマンドの受信などにより、1ページを構成するプリンタコマンドの受信が完了したことを制御回路15が検出したときに、プリンタエンジン14に印刷の開始を指示する。印刷の開始が指示されると、プリンタエンジン14は。シフトレジスタ16に画像データの出力を要求する。シフトレジスタ16は予め復号回路13から復号データを読み出し、読み出した復号データを格納する。そして、プリンタエンジン14からの出力要求を受けると格納しておいた復号データをプリンタエンジン14に出力すると共に、シフトレジスタ16内に空きのバッファができたときには、復号回路13に引き続く復号データの出力を要求する。このようにして符号化データは順次復号されて画像データ(復号データ)として出力され、1ページの画像データの出力が全て終了すると、印刷が完了する。ここで、アプリケーション3から背景パターンのイメージ出力指令が発行されると、プリンタドライバ4は後述する手順にてこれを検出し、背景パターンの周期を求める。プリンタドライバ4はまた、背景パターンを検出した場合には、画像データを符号化する際に、後述する手順に従って背景パターンの周期を利用して符号化を行う。
【0028】
次に、図3および図4に示すテーブルを参照し、図1に示したプリンタドライバ4が生成する符号について説明する。
【0029】
図3は、図1に示したプリンタドライバ4が生成する符号化データに含まれる各符号の一例を説明するテーブルである。本実施形態で説明する符号は、所定ライン上のラインのデータ列を複写する上複写、同一ラインの所定バイト左のデータ列を複写する近い左複写、同一ラインの所定バイト左のデータ列を複写する遠い左複写、およびデータを直接指定する生データの4種類の操作のうち、一つを指定する。なお、上複写および近い左複写が参照する所定の位置は、上記ディザマトリクスの周期に応じた値であり、遠い左複写が参照する所定の位置は、背景パターンの周期に応じたものとなる。
【0030】
図3に示すように、符号(コマンド符号)が「0」で開始する場合はRAWコマンドであり、引き続く8ビットのデータ(<data8>)をそのまま生データとして指定する。符号が「10」で開始する場合はCOPY UPコマンドであり、引き続くカウント符号(<count>)が示すバイト数だけ上複写を行う。符号「110」で開始する場合はCOPY NEAR LFTコマンドであり、引き続くカウント符号(<count>)が示すバイト数だけ近い左複写を行う。符号「1110」で開始する場合はCOPY FAR LEFTコマンドであり、引き続くカウント符号(<count>)が示すバイト数だけ遠い左複写を行う。符号「11110」で開始する場合はCOUNT HIGHコマンドであり、引き続くカウント符号(<count>)が示す数の64倍を、後続するCOPY UP、もしくはCOPY NEAR LEFT、もしくはCOPYFAR LEFTコマンドのいずれかのカウント符号に加算することを示す。符号「11111」で開始する場合はEOBコマンドであり、符号列の終了を示す。
【0031】
図4は上述のカウント符号の一例を示すテーブルを示す図である。同図に示すように、コマンド符号のビットが「111111」の場合は、COUNT0符号を示し、カウントが0であることを示す。コマンド符号のビットが「0」で開始される場合は、COUNT1符号を示し、カウントが1であることを示す。コマンド符号のビットが「10」で開始される場合は、COUNT2−3符号を示し、後続する1ビットのデータ(<data1>)が0の場合はコマンド符号としては「010」となり、意味としては2バイトを意味することになる。一方、後続する1ビットのデータが1の場合はコマンド符号としては「011」となり、意味としては3バイトを意味することになる。つまり、コマンド符号のビット列が「01」で開始する場合は、2バイト、もしくは3バイトの長さを意味することにある。
【0032】
また、コマンド符号のビットが「110」で開始される場合は、COUNT4−7符号を示し、2ビットのデータが後続することになるので4バイトから7バイトまでの長さを意味し、コマンド符号のビットが「1110」で開始される場合は、COUNT8−15符号を示し、2ビットのデータが後続することになるので8バイトから15バイトまでの長さを意味し、コマンド符号のビットが「11110」で開始される場合は、COUNT16−31符号を示し、2ビットのデータが後続することになるので16バイトから31バイトまでの長さを意味し、コマンド符号のビットが「111110」で開始される場合は、COUNT32−63符号を示し、2ビットのデータが後続することになるので32バイトから63バイトを意味することになる。
【0033】
次に図5を参照し、図3および図4に示した符号の使用例について説明する。なお、同図に示した符号列は上から記載された順番に解釈されるものとする。
【0034】
同図において符号列「0 00000000」は以下のようにして解釈される。つまり、先頭の「0」はRAWコマンドなので、引き続く8ビットのデータ「00000000」をそのまま生データとして指定する。次に、符号列「1100」は、以下のようにして解釈される。先頭の「110」は近い左複写コマンドであり、引き続く「0」はCOUNT1符号なので、1バイトの近い左複写を示す。次に、符号列「10 10 1」は以下のようにして解釈される。つまり、先頭の「10」は上複写コマンドであり、引き続く「10」はCOUNT2−3符号であるので、引き続く1ビット「1」に2を加算した値、すなわち3バイトの上複写を示す。次に、符号列「11110 10 0」は以下のようにして解釈される。つまり、「11110」はCOUNT HIGHコマンドであり、引き続く「10」はCOUNT2−3符号であるので、引き続く1ビット「0」に2を加算した値の64倍、すなわち128を後続するコマンドのカウントに加算することを示す。
【0035】
次に、符号列「1110 111111」は以下のようにして解釈される。つまり、「1110」は遠い左複写コマンドであり、引き続く「111111」はCOUNT0符号なので、0バイトの遠い左複写を示す。ただし、この場合はCOUNT HIGH 2コマンドが先行しているため、128が加算され、128バイトの遠い左複写を示す。次に、「11111」はEOBコマンドであり、符号列の終了を示す。引き続く「0000000」はバイト境界に整列するための詰め物であり、特別な意味を持たない。なお、上記の符号に符号化するに際し、上複写位置、近い左複写位置、および遠い左複写位置の選定にあたり、圧縮率を向上するためには下記の注意が必要である。
【0036】
例えば8ビットのグレイスケール原画像を1ビットの2値画像、あるいは4ビット以下のグレイスケール画像に減色する場合、ディザマトリクスを用いて各マトリクス内の画素ごとに異なった閾値による演算処理を行って減色するのが一般的である。この場合、隣接した画素は異なった閾値によって演算が行われるため、原画像の画素値が同一であっても、減色後の画素値は異なった値になることが多く、相関が低いため、隣接した画素を参照しても圧縮率を向上することが困難である。
【0037】
ディザマトリクスは周期的に適用されるため、隣接画素ではなく、むしろ少し離れた画素、通常はディザマトリクスの周期だけ離れた画素と同じ閾値が適用されるため、そのような画素との相関が高くなる。したがって、隣接画素の代わりに、ディザマトリクスの周期に応じた、少し離れた画素を参照することにより、圧縮率を向上することができる。
【0038】
上位置に関しては、ディザマトリックスの周期に等しいライン数をそのまま適用することができるが、近い左位置および遠い左位置については、符号化の単位がバイト単位であるため、画素が8ビット未満の場合にはさらに注意が必要となる。例えば、画素が1ビットで、ディザマトリックスの基本周期が12画素の場合、1.5バイトの周期となるが、符号化の単位が1バイトであるため、バイト単位で同一の閾値が適用される周期は3バイトとなり、この周期を近い左位置に適用する必要がある。遠い左位置についても同様で、例えば画素が1ビットで、背景パターンの周期が1024画素すなわち128バイトであり、ディザマトリックスの基本周期が12画素の場合、背景パターンの1周期違いの位置には異なった閾値が適用されるため相関が低く、圧縮率を向上することは困難である。この場合は128バイトと3バイトの最小公倍数である384バイト離れた位置を遠い左位置とする必要がある。
【0039】
次に、図6に示すフローチャートを参照し、プリンタドライバ4の処理の詳細について以下、説明する。図6はプリンタドライバ4が行うメインの処理のフローチャートである。プリンタドライバ4がオペレーティングシステム2から呼び出されると、まずステップS1にて呼び出しの種類が描画指令であるか否かを判定する。呼び出しの種類が描画指令であった場合は、処理をステップS2に進め、描画処理を行う。描画処理として具体的には、オペレーティングシステム2を経由してアプリケーション3から指示された文字、図形またはビットマップ等を8ビットのグレイスケール画像に変換し、RAM1702、もしくは外部記憶装置1704に記録する。
【0040】
次にステップS3にて呼び出しの種類がビットマップ描画指令であるか否かを判定する。呼び出しの種類がビットマップ描画指令でなかった場合には処理を終了する。一方、呼び出しの種類がビットマップ描画指令だった場合にはステップS4にて、後述する背景パターン周期検出処理を行い、処理を終了する。
【0041】
一方、ステップS1にて呼び出しの種類が描画指令でなかった場合は、処理をステップS7に進め、呼び出しの種類がページ終了指令であるか判定する。呼び出しの種類がページ終了指令であった場合には、処理をステップS8に進め、2値化処理を行う。具体的にはステップS2にてRAM1702、もしくは外部記憶装置1704に記録された8ビットのグレイスケール画像を、ディザマトリックスを使用して、白黒1ビットの画像に変換する。
【0042】
次にステップS9にて印刷制御コマンド、具体的には用紙サイズ、給紙カセット、解像度、階調数、1ラインのバイト数、1ページのライン数など、印刷に必要な条件を指定するコマンドを出力する。次にステップS10にて、符号化時に使用する、上複写時に複写元が何ライン上の位置であるかを指定する上複写垂直オフセット値、近い左複写時に複写元が同一ラインの何バイト左の位置であるかを指定する近い左複写水平オフセット値、および遠い左複写時に複写元が同一ラインの何バイト左の位置であるかを指定する遠い左複写水平オフセット値を指定する圧縮パラメタ指定コマンドを出力する。
【0043】
ここで、上複写垂直オフセット値および近い左複写水平オフセット値は、ステップS8にて使用したディザマトリックスに応じて、あらかじめ理論的に、あるいは実験により最適値を求めておき、それを使用する。また遠い左複写水平オフセット値は、ステップS4にて求めた背景パターン周期に応じた値を使用する。
【0044】
次にステップS11にて、後述する符号化手順に従い、画像データを符号化する。このときに、ステップS10にて出力した圧縮パラメタ指定コマンドが指定する、上複写垂直オフセット値、近い左複写水平オフセット値、および遠い左複写水平オフセット値を用いて符号化を行う。次にステップS12にて、ステップS11にて符号化された画像データのサイズおよびライン数を指定する画像データコマンドヘッダを出力する。次にステップS13にて、ステップS11にて符号化された画像データを出力する。次にステップS15にて、ページの終了を指定するコマンド(ページ終了コマンド)を出力して処理を終了する。
【0045】
一方、ステップS7にて呼び出しの種類がページ終了指令でなかった場合には処理をステップS16に進め、呼び出しの種類に応じたその他の処理、例えばページ開始指令あるいはプリンタ能力問い合わせ指令等に対応する処理を行い、終了する。
【0046】
次に図7を参照し、上記ステップS4における処理の詳細について以下、説明する。図7は上記ステップS4における背景パターン周期検出処理の詳細を示すフローチャートである。
【0047】
ビットマップ描画命令を受けると、まずステップS21にてこのビットマップ(以下、第1のビットマップ)の幅が256画素以上であるか否かを判定する。該ビットマップの幅が256画素以上でない場合は処理を終了する。これは、背景パターンは例えば1024画素といった、大きな幅および高さを持つのが一般的であること、また、小さい幅または高さのビットマップを対象に処理を行うと、ビットマップを管理するテーブル(以下、ビットマップ管理テーブル)のサイズが大きくなり、またビットマップ管理テーブルを検索する処理時間も長くなることから、小さい幅または高さのビットマップの場合は背景パターン周期検出処理を行わないようにするためである。ここでビットマップ管理テーブルとは、1ページ内に含まれるビットマップを管理する予め定められた固定サイズのテーブルで、本実施形態では後述の条件を満たしたビットマップに対してのみ、このビットマップに関する情報を格納する。具体的には図18に例示するように、ビットマップの左上隅のx座標、y座標、幅、高さを管理する。図18はビットマップ管理テーブルの構成例を示す図である。また、ビットマップ管理テーブルは、各ページの処理を開始するごとに空に初期化される。
【0048】
図7に戻って、ビットマップの幅が256画素以上である場合は処理をステップS22に進め、ビットマップの高さが256画素以上であるか判定する。ビットマップの高さが256画素以上でない場合は処理を終了する。
【0049】
ビットマップの高さが256画素以上である場合は処理をステップS23に進め、ビットマップ管理テーブルの検索が終了したか否かを判断する。終了していない場合は処理をステップS24に進め、ビットマップ管理テーブルに格納されているビットマップの左上隅のy座標、高さを参照し、第1のビットマップの左上隅のy座標、高さと一致するものを検索する。そして一致しない場合は処理をステップS23に戻し、上記検索の対象がビットマップ管理テーブルの最後に行き着くまで行われる。一方、一致するもの(第2のビットマップの左上隅のy座標、高さ)が見つかった場合には処理をステップS25に進め、第1のビットマップが第2のビットマップの右に隣接しているか否かを判定する。具体的にはビットマップ管理テーブルを参照し、第2のビットマップの左上隅のX座標+第2のビットマップの幅=第1のビットマップの左上隅のX座標であれば、第1のビットマップが第2のビットマップの右に隣接していることになる。右に隣接している場合は処理をステップS27に進める。
【0050】
一方、右に隣接していない場合は処理をステップS26に進め、第1のビットマップが、第2のビットマップの左に隣接しているか否かを判定する。具体的には、第2のビットマップの左上隅のX座標=第1のビットマップの左上隅のX座標+第1のビットマップの幅であれば、第1のビットマップは第2のビットマップの左に隣接していることになる。左に隣接している場合は処理をステップS27に進め、左に隣接していない場合は処理をステップS23に戻す。
【0051】
ステップS27では、第1のビットマップの幅と、後述の処理により求まる背景周期とを比較する。なお、背景周期は、各ページの処理を開始するごとに、0に初期化される。背景周期が第1のビットマップの幅より大きい場合は、処理をステップS29に進める。一方、背景周期が第1のビットマップの幅以下である場合には処理をステップS28に進め、ステップS28にて背景周期に第1のビットマップの幅を代入し、処理をステップS29に進める。
【0052】
ステップS29では、第2のビットマップの幅と背景周期とを比較する。背景周期が第2のビットマップの幅より大きい場合には、処理をステップS31に進める。一方、背景周期がテーブル中の現在のビットマップの幅以下である場合には、処理をステップS30に進め、ステップS30にて背景周期に第2のビットマップの幅を代入し、処理をステップS31に進める。このようにして、今までの背景周期、および左右に隣接する2つのビットマップの幅のうち、最大の値が新たに背景周期に代入される。最大の値を用いる理由は、背景ビットマップが用紙の左端または右端でクリップされることにより周期よりも小さい幅となることがあるため、この影響を除外するためである。
【0053】
ステップS31では、ビットマップ管理テーブルがフルであるか否かを判定する。ビットマップ管理テーブルがフルである場合は、新たにビットマップに関する情報を格納(登録)する余地がないため、何もせずに処理を終了する。一方、ビットマップ管理テーブルがフルでない場合は、第1のビットマップの左上隅のX座標、左上隅のY座標、幅、及び高さをビットマップ管理テーブルに格納して処理を終了する。
【0054】
このようにして1ページの処理が終了すると、このページ内で隣接するビットマップの幅の最大値が背景周期に格納されていることになる。また、隣接するビットマップがこのページ内に存在しなかった場合は、背景周期には0が格納されている。
【0055】
次に、図8を参照して、図6のステップS10における処理の詳細について以下、説明する。図8はステップS10における処理の詳細を示すフローチャートである。まずステップS41にて、上記ステップS4にて求めた背景周期が0であるか否かを判定する。背景周期が0でない場合、すなわち背景パターンの周期が検出された場合は、処理をステップS42に進め、背景周期と1バイトの画素数の最小公倍数を求める。例えば、背景周期が1024画素であり、1画素が1ビットで構成されている場合(1バイトの画素数が8)、その最小公倍数は1024となる。また、背景周期が511画素であり、1画素が4ビットで構成されている場合(1バイトの画素数が2)、その最小公倍数は1022となる。この処理は、符号化の単位が1バイトであるため、画素単位の周期をバイト単位の周期に変換するために行う。
【0056】
次にステップS43にて、ステップS42で求めた最小公倍数をバイト単位に変換する。具体的には、最小公倍数を1バイトの画素数で除算する。次にステップS44にて、ステップS43で求めたバイト単位の背景周期と、ディザ周期の最小公倍数を求める。例えば、背景周期が128バイトであり、ディザ周期が2バイトである場合は、128バイトとなる。また、背景周期が511バイトであり、ディザ周期が3バイトである場合は、1533バイトとなる。この処理は、背景周期がディザ周期の整数倍でない場合は、背景周期だけ離れた点に異なったディザ処理がほどこされることにより、異なった画素値となるため、同一のディザ処理が行われる点を参照するようにするために行う。
【0057】
次にステップS45にて、ステップS44で求めた最小公倍数が、ライン長の90%未満であるか判定する。ライン長の90%未満であった場合は、処理をステップS47に進め、上記ステップS8の2値化処理にて使用したディザマトリックスの周期に応じた、上複写および近い左複写の位置、およびステップS44にて求めた最小公倍数(遠い左複写の位置)を圧縮パラメタを指定するコマンド(圧縮パラメタ指定コマンド)として出力し、処理を終了する。
【0058】
一方、ステップS41にて背景周期が0であった場合、及びステップS45にて、ステップS44にて求めた最小公倍数がライン長の90%以上であった場合、処理をステップS46に進め、背景周期をディフォルトの値に設定する。これらの場合は、背景周期が検出できなかった、あるいは背景周期が過大であり、圧縮の向上に大きな寄与を与えない場合であるので、かわりにディフォルト値を設定する。ディフォルト値は、近い左複写の位置とは異なるようにあらかじめ定めておく。例えば、ディザ周期が16画素であり、1バイトの画素数が8である場合、近い左複写の位置は2バイト左となる。この場合は背景周期のディフォルト値を1バイトに定めておく。前述のように、ディザ周期だけ離れた点と相関が高くなるのが一般的であるが、印刷データが通常のテキストまたは表のごとく、白黒2値で表現される場合は、ディザ処理を行わなかった場合と同じ結果となる。また、ディザ周期とはかかわりなく隣接する点との相関が高くなるため、かかる場合には2バイト離れた位置よりも1バイト離れた位置のほうが相関が高くなり、圧縮率の向上に寄与することができる。
【0059】
次にステップS47にて、上記ステップS8の2値化処理にて使用したディザマトリックスの周期に応じた、上複写および近い左複写の位置、およびステップS46にて設定したディフォルトの背景周期(遠い左複写の位置)を圧縮パラメタを指定するコマンド(圧縮パラメタ指定コマンド)として出力し、処理を終了する。
【0060】
次に図9を参照し、図6のステップS11における符号化処理の詳細について説明する。図9はステップS11における符号化処理の詳細を示すフローチャートである。
【0061】
まずステップS51にて、ライン番号Yを0に初期化する。次にステップS52にて、ライン先頭からのバイトオフセットXを0に初期化する。
【0062】
次にステップS53にて、上位置が有効な画像領域にあるか判定する。具体的には、図8のステップS47にて出力した、上複写位置を示すライン数(以下、Zで表す)が、ライン番号Yよりも大きいか否かを判定する。上複写位置を示すライン数Zがライン番号Y以下である場合は、上位置が有効な画像領域(符号化対象のビットマップ内に存在する領域)にある場合なので、ステップS54にて現在の位置(X、Y)から始まるバイト列と、上位置(X、Y−Z)から始まるバイト列とが連続して一致する長さを求める。なお、この際に、ライン末まで連続して一致している場合には、ライン末で打ち切るものとする。また、連続して一致する長さが、カウント符号の最大値である4095バイトを超える場合には、4095バイトで打ち切るものとする。
【0063】
次にステップS55にて、ステップS54で求めた長さが0であるか否かを判定する。ステップS54で求めた長さが0でない場合、処理をステップS56に進め、ステップS54で求めた長さ(カウント)が63より大きいか否かを判定する。ステップS54で求めた長さが63より大きい場合は、処理をステップS57に進め、COUNT HIGHコマンドをRAM1702、もしくは外部記憶装置1704に出力し、次いでステップS58にて、ステップS54で求めた長さを64で除算した商(カウントの上位)をRAM1702、もしくは外部記憶装置1704に出力し、処理をステップS59に進める。一方、ステップS56にて、ステップS54で求めた長さが63以下である場合には処理をステップS59に進める。
【0064】
次にステップS59にてCOPY UPコマンドをRAM1702、もしくは外部記憶装置1704に出力し、次いでステップS60にて、ステップS54で求めた長さを64で除算した剰余(カウントの下位)をRAM1702、もしくは外部記憶装置1704に出力する。
【0065】
一方、ステップS53にて、上複写位置を示すライン数が、ライン番号Yよりも大きい場合、及びステップS55にて求めた長さが0であった場合は、処理をステップS62に進め、近い左位置が有効な画像領域にあるか判定する。具体的には、上記ステップS47にて出力した、近い左複写位置を示すバイト数(以下、Wで表す)が、ライン先頭からのバイトオフセットXよりも大きいか否かを判定する。近い左複写位置を示すバイト数Wが、ライン先頭からのバイトオフセットX以下である場合は、近い左位置が有効な画像領域にある場合なので、処理をステップS63に進め、現在の位置(X、Y)から始めるバイト列と、近い左位置(X−W、Y)から始まるバイト列とが連続して一致する長さ(カウント)を求める。なお、この際に、ライン末まで連続して一致している場合には、ライン末で打ち切るものとする。また、連続して一致する長さが、カウント符号の最大値である4095バイトを超える場合には、4095バイトで打ち切るものとする。
【0066】
次にステップS64にて、ステップS63で求めた長さが0であるか否かを判定する。ステップS63にて求めた長さが0でない場合には、処理をステップS65に進め、ステップS63にて求めた長さが63より大きいか否かを判定する。ステップS63にて求めた長さが63より大きい場合には、処理をステップS66に進め、COUNT HIGHコマンドをRAM1702、もしくは外部記憶装置1704に出力し、次いでステップS67にて、カウントの上位、すなわちステップS63にて求めた長さを64で除算した商をRAM1702、もしくは外部記憶装置1704に出力し、処理をステップS68に進める。一方、ステップS65にて、ステップS63で求めた長さが63以下の場合には、処理をステップS68に進める。
【0067】
次にステップS68にてCOPY NEAR LEFTコマンドをRAM1702、もしくは外部記憶装置1704に出力し、次にステップS60にて、カウントの下位、すなわちステップS63にて求めた長さを64で除算した剰余をRAM1702、もしくは外部記憶装置1704に出力する。
【0068】
一方、ステップS62にて、近い左複写位置を示すバイト数Wが、ライン先頭からのバイトオフセットXよりも大きい場合、及びステップS64にて求めた長さが0であった場合は、処理をステップS69に進め、遠い左位置が有効な画像領域にあるか判定する。具体的には、図8のステップS47にて出力した、遠い左複写位置を示すバイト数(以下、Rで表す)が、ライン先頭からのバイトオフセットXよりも大きいか否かを判定する。遠い左複写位置を示すバイト数Rが、ライン先頭からのバイトオフセットX以下である場合は、遠い左位置が有効な画像領域にある場合なので、処理をステップS70に進め、現在の位置(X、Y)から始めるバイト列と、遠い左位置(X−R、Y)から始まるバイト列とが連続して一致する長さ(カウント)を求める。なお、この際に、ライン末まで連続して一致している場合には、ライン末で打ち切るものとする。また、連続して一致する長さが、カウント符号の最大値である4095バイトを超える場合には、4095バイトで打ち切るものとする。次にステップS71にて、ステップS70にて求めた長さが0であるか否かを判定する。ステップS70にて求めた長さが0でない場合には、処理をステップS72に進め、ステップS70にて求めた長さが63より大きいか否かを判定する。ステップS70にて求めた長さが63より大きい場合には、処理をステップS73に進め、COUNT HIGHコマンドをRAM1702、もしくは外部記憶装置1704に出力し、次いでステップS74にて、カウントの上位、すなわちステップS70にて求めた長さを64で除算した商をRAM1702、もしくは外部記憶装置1704に出力し、処理をステップS75に進める。一方、ステップS72にて、ステップS70で求めた長さが63以下である場合には処理をステップS75に進める。
【0069】
ステップS75では、COPY FAR LEFTコマンドをRAM1702、もしくは外部記憶装置1704に出力し、次いでステップS60にて、カウントの下位、すなわちステップS70にて求めた長さを64で除算した剰余をRAM1702、もしくは外部記憶装置1704に出力する。
【0070】
一方、ステップS69にて、遠い左複写位置を示すバイト数Rが、ライン先頭からのバイトオフセットXよりも大きい場合、及びステップS71にて求めた長さが0であった場合は、処理をステップS76に進め、RAWコマンドをRAM1702、もしくは外部記憶装置1704に出力し、次に現在の位置(X、Y)のデータ(1バイト分)を生データとしてRAM1702、もしくは外部記憶装置1704に出力する。
【0071】
上記の処理が終了すると処理をステップS78に進め、処理したバイト数をXに加算する。次にステップS79にて、Xがライン末に達したか、すなわちXが1ラインのバイト数に等しいか否かを判定する。Xが1ラインのバイト数より小さい場合は、処理をステップS53に戻し、処理を継続する。一方、Xが1ラインのバイト数と等しい場合は、処理をステップS80に進め、ライン番号Yに1を加算し、ステップS81にて、画像の処理が終了したか、すなわちYが画像のライン数と等しいか判定する。Yが画像のライン数より小さい場合は、処理をステップS52に戻し、処理を継続する。一方、Yが画像のライン数と等しい場合は、処理をステップS82に進め、EOBコマンドをRAM1702、もしくは外部記憶装置1704に出力し、次いでステップS83にて、バイト境界に整列するために必要な数だけ(例えば上述の符号化処理によりRAM1702、もしくは外部記憶装置1704に出力されたビット列の長さが8の倍数となるように)ビット「0」をバッファに出力し、処理を終了する。
【0072】
次に、図12を参照し、図2に示した復号回路13の構成について詳細に説明する。図12は復号回路13の詳細な構成を示すブロック図である。
【0073】
同図において、入力バッファ21は、FIFOメモリ12から読み出した符号データを格納する。入力バッファ21は、少なくとも4バイトのデータを格納することができ、バッファに空きが生じ、かつFIFOメモリ12にデータがある場合はFIFOメモリ12からデータを読み出して格納する。入力バッファ21はまた、ビットカウンタ23に保持された、処理済ビット数が8以上になった場合には、不要になった処理済データを破棄する。
【0074】
セレクタ22は、例えば11組の8入力セレクタであり、入力バッファ21に格納された符号データを、ビットカウンタ23が示す処理済ビット数に従って選択することにより、コマンドデコード回路24が処理するために必要な、コマンドの開始位置合わせを行う。これは、入力バッファ21がバイト単位にデータを保持するのに対し、コマンドはビット単位の可変長データであるため8箇所の開始位置があるために必要なものである。
【0075】
ビットカウンタ23は、入力バッファ21に格納された符号データのうち処理済みのビット数を格納する。ビットカウンタ23はまた、コマンドデコード回路24から出力された、コマンドのビット数を加算することによりビットカウンタに格納された値を更新する。ビットカウンタ23はまた、入力バッファが処理済データを破棄した場合には、破棄したビット数を減算する。ビットカウンタ23はまた、コマンドデコード回路23がEOBコマンドを復号したときに、コマンドデコード回路23からEOB信号を受信し、バイト境界合わせの処理を行う。具体的には、ビットカウンタの下位3ビットが全て0であれば何もせず、そうでなければ8を加算するとともに下位3ビットをクリアする。
【0076】
コマンドデコード回路24は、例えばリードオンリーメモリ、あるいはワイヤードロジックにより構成され、セレクタ22によって位置合わせが行われた、入力バッファ21に格納された符号データを復号し、復号したコマンドに従ってカウンタ26、上複写出力回路27、遠い左複写出力回路28、近い左複写出力回路29、生データ出力回路30、およびビットカウンタ23に、前述の、あるいは後述する各種の信号を出力する。
【0077】
ライン長レジスタ25は、制御回路15があらかじめ出力した、1ラインのバイト数を保持する。
【0078】
カウンタ26は、COPY UP、COPY NEAR LEFTあるいはCOPY FAR LEFTコマンドの処理バイト数を保持し、1バイトのデータ出力が行われる毎に減算される。カウンタ26は上位6ビットと下位6ビットを独立に設定可能であり、コマンドデコード回路23がCOUNT HIGHコマンドを復号した時にはコマンドデコード回路23が出力する、処理バイト数の加算値をカウンタ26の上位に格納する。また、コマンドデコード回路23がCOPY UP、COPY NEAR LEFTあるいはCOPY FAR LEFTコマンドを復号した時にはコマンドデコード回路23が出力する、処理バイト数をカウンタ26の下位に格納する。
【0079】
上複写出力回路27は、カウンタ26が保持する処理バイト数に従って、ラインバッファ31が出力する、上複写位置のデータを読み取り、出力する。遠い左複写出力回路28は、カウンタ26が保持する処理バイト数に従って、ラインバッファ31が出力する、遠い左複写位置のデータを読み取り、出力する。近い左複写出力回路29は、カウンタ26が保持する処理バイト数に従って、可変段シフトレジスタ38が出力する、近い左複写位置のデータを読み取り、出力する。生データ出力回路30は、コマンドデコード回路24が出力した1バイトの生データを出力する。
【0080】
列カウンタ41は、ラインバッファ31の現在の列アドレスを保持し、ラインバッファ31に書き込みが行われる毎に書き込まれたデータのサイズを随時加算することで、カウント値を求める。そしてこのカウント値がライン長レジスタ25が保持する1ラインのバイト数に達した場合、0に復帰する。
【0081】
ラインバッファ31は、複数のラインの復号データを保持し、減算回路40が出力するアドレスに従って、復号データの入力または出力を行う。
【0082】
行カウンタ32は、ラインバッファ31の現在の行アドレスを保持し、上記カウント値が0に復帰する毎にカウントアップし、カウントの結果が行数レジスタ36が保持するライン数に達した場合には、カウントを0に復帰する。行カウンタ32はまた、行数レジスタ36にライン数が出力されたときには0に復帰する。
【0083】
乗算回路33は、行カウンタ32が保持する現在の行アドレスと、ライン長レジスタ25が保持する1ラインのバイト数との積を計算することにより、ラインバッファ31の現在の行の先頭アドレスを出力する。加算回路34は、乗算回路33が出力する現在の行の先頭アドレスと、列カウンタ41が保持する現在の列アドレスとの和を計算することにより、ラインバッファ31の現在のアドレスを出力する。背景周期レジスタ39は、制御回路15があらかじめ出力した、背景周期バイト数を保持する。
【0084】
減算回路40は、遠い左複写出力回路より、遠い左複写の読み取りを指示する信号を受信しているときは、加算回路34が出力する現在のアドレスから、背景周期レジスタ39が保持する背景周期バイト数を減算して出力するとともに、遠い左複写出力回路より、遠い左複写の読み取りを指示する信号を受信していないときは、加算回路34が出力する現在のアドレスをそのまま出力する。
【0085】
出力バッファ35は、上複写出力回路27、遠い左複写出力回路28、近い左複写出力回路29、または生データ出力回路30から復号データが出力される毎に、出力された復号データを格納する。出力バッファ35はまた、シフトレジスタ16から画像データの出力を要求されたときに、格納された復号データを出力する。
【0086】
行数レジスタ36は、制御回路15があらかじめ出力した、ライン数(上複写垂直オフセット値)を保持する。
【0087】
段数レジスタ37は、制御回路15があらかじめ出力した、近い左位置を示すバイトオフセット値を保持する。可変段シフトレジスタ38は、シフトレジスタとセレクタによって構成され、段数レジスタ37が保持する近い左位置を示すバイトオフセット値に等しい段数のシフトレジスタを構成し、出力された復号データを、段数レジスタ37が保持する近い左位置を示すバイトオフセット値で指定された値より1だけ小さい回数遅延したデータを出力する。
【0088】
コマンドデコード回路24はCOPY UPコマンドをデコードすると、それに引き続くカウントをデコードし、カウンタ26の下位に格納するとともに、上複写出力回路27に上複写の読み取りを指示する信号を出力する。カウンタ26の上位には、COUNT HIGHコマンドが先行しなかった場合には0が、先行した場合にはCOUNT HIGHコマンドが示す上位カウントが格納されている。上複写出力回路27は、ラインバッファ31において、加算回路34、減算回路40が出力するアドレス(言い換えれば、現在の位置)に格納されたデータを読み出し、ラインバッファ31に出力する(同じデータを上書きすることになるので、この処理は行わなくても良いが)と共に、出力バッファ35に出力する。一方、読み出された復号データは可変段シフトレジスタ38に入力される(以下、先頭から)。そして可変段シフトレジスタ38に既に保持されていたデータは一段ずつシフトされ、可変段シフトレジスタ38の最終段からは、現在の位置の次の位置に対応する近い左複写位置の1バイトが出力される。次いで列カウンタ41はカウントアップされ、カウンタ26はカウントダウンされる。このようにして、カウンタ26が0に達するまで、復号データの出力が行われる。
【0089】
コマンドデコード回路24はCOPY FAR LEFTコマンドをデコードすると、引き続くカウントをデコードし、カウンタ26の下位に格納するとともに、遠い左複写出力回路28に遠い左複写を指示する信号を出力する。カウンタ26の上位には、COUNT HIGHコマンドが先行しなかった場合には0が、先行した場合にはCOUNT HIGHコマンドが示す上位カウントが格納されている。ここで遠い左複写出力回路は、遠い左位置のデータ読み取りを指示する信号を一時的に出力するため、ラインバッファ31において、加算回路40の出力(現在のアドレス)から、背景周期レジスタ39が保持する背景周期の値を減算した値、すなわち遠い左位置のアドレスに格納された復号データを読み取り、ラインバッファ31の現在の位置に書き込むと共に、出力バッファ35にも出力する。また、読み出した復号データは可変段シフトレジスタ38に入力される。そして、可変段シフトレジスタ38に保持されていたデータは一段ずつシフトされ、可変段シフトレジスタ38の最終段からは、現在の位置の次の位置に対応する近い左複写位置の1バイトが出力される。次いで列カウンタ41はカウントアップされ、カウンタ26はカウントダウンされる。このようにして、カウンタ26が0に達するまで、復号データの出力が行われる。
【0090】
コマンドデコード回路24はCOPY NEAR LEFTコマンドをデコードすると、引き続くカウントをデコードし、カウンタ26の下位に格納するとともに、近い左複写出力回路29に近い左複写を指示する信号を出力する。カウンタ26の上位には、COUNT HIGHコマンドが先行しなかった場合には0が、先行した場合にはCOUNT HIGHコマンドが示す上位カウントが格納されている。近い左複写回路29は、可変段シフトレジスタ38が出力する近い左複写位置の1バイトの復号データを出力バッファ35に出力すると共に、ラインバッファ31の現在の位置に書き込む。又読み出した1バイトの復号データは可変段シフトレジスタ38に入力する。可変段シフトレジスタ38に保持されていたデータは一段ずつシフトされ、可変段シフトレジスタ38の最終段からは、現在の位置の次の位置に対応する近い左複写位置の1バイトが出力される。次いで列カウンタ41はカウントアップされ、カウンタ26はカウントダウンされる。このようにして、カウンタ26が0に達するまで、復号データの出力が行われる。
【0091】
コマンドデコード回路24はRAWコマンドをデコードすると、引き続く1バイトの生データ(復号データ)を生データ出力回路30に出力する。生データ出力回路30はこの復号データを出力バッファ35に出力すると共に、ラインバッファ31の現在の位置に書き込む。またこの復号データは可変段シフトレジスタ38に入力される。また可変段シフトレジスタ38に保持されていたデータは一段ずつシフトされ、可変段シフトレジスタ38の最終段からは、現在の位置の次の位置に対応する近い左複写位置の1バイトが出力される。
【0092】
コマンドデコード回路24はCOUNT HIGHコマンドをデコードすると、引き続くカウントをデコードし、カウンタ26の上位に格納する。
【0093】
次に図13および図14を参照し、ラインバッファ31のデータ入出力の動作について説明する。図13は、符号化前、もしくは復号後の画像データの構成を示すものであり、一例として1ラインの長さが10バイトの場合を示す。図に示すように、先頭ラインの左から00、01、...09の順にバイト(画像データ)が並び、次のラインの左から10、11、...19の順にバイトが並ぶ。以降のラインも同様である。
【0094】
図14は、ラインバッファ31の各々のアドレスに、図13に示す画像データがどのように格納されるのかを説明するものであり、一例として1ラインの長さが10バイト、上複写位置を示すライン数が3ラインの場合を示す。
【0095】
最初に行カウンタ32および列カウンタ41がともに0であったとすると、最初のデータ入出力は行アドレス0かつ列アドレス0に対して行われる。なお、最初の3ラインの画像が書き込まれるまでは、ラインバッファ31から出力されるデータは不定である。
【0096】
ラインバッファ31の、行アドレス0かつ列アドレス0からデータが読み取られ、次いで同じアドレスに、図11示のバイト00が書き込まれると、列カウンタ41はカウントアップし、1を保持する。次に行アドレス0かつ列アドレス1からデータが読み取られ、次いで同じアドレスに、バイト01が書き込まれると、列カウンタ42はカウントアップし、2を保持する。このようにして10バイトが書き込まれると、列カウンタ41は10を保持するので、ライン長レジスタ25が保持する1ラインのバイト数と等しくなり、列カウンタ41は0を保持し、行カウンタ32はカウントアップし、1を保持する。次に行アドレス1かつ列アドレス0からデータが読み取られ、次いで同じアドレスに、バイト10が書き込まれると、列カウンタ30はカウントアップし、1を保持する。このようにして、20バイトのデータが書き込まれると、列カウンタ41は0を保持するとともに、行カウンタ32はカウントアップして3を保持するので、行数レジスタ36が保持するライン数と等しくなり、行カウンタ32は0を保持することになる。
【0097】
ここで行カウンタ32および列カウンタ30はともに0となっているので、最初に書き込まれた、バイト00が読み取られ、次いでバイト30が書き込まれる。このようにして、順次、3ライン上のデータを読んだ後に現在のラインのデータが上書きされ、ラインバッファ31は、いわゆるリングメモリとして動作する。
【0098】
次に図15を参照し、ラインバッファ31、および可変段シフトレジスタ38の動作タイミングを説明する。
【0099】
図15は、図13に示す画像データがどのようなタイミングで処理されるかを説明するものであり、一例として1ラインの長さが10バイト、上複写位置を示すライン数が3ライン、近い左複写位置を示すバイトオフセット値が2バイトの場合を示す。
【0100】
図中、A1はちょうど先頭の3ラインの処理を終えた時点を示す。上述の説明のごとく、このときに行カウンタ32および列カウンタ41はともに0に復帰するので、ラインバッファ35からは図11に示すバイト00が読み取られる。A1時点にて、上複写回路27が動作している場合には、A2時点にて、ラインバッファ35から読み取っているデータが確定すると、バイト00が上複写回路27に入力される。次に上複写出力回路27が復号データをA3時点までに出力する。A3時点において、出力された復号データは、バイト30として、ラインバッファ35に格納される。このとき可変段レジスタ38にクロックが入力され、可変段シフトレジスタ38に保持されていたデータは1段ずつシフトするとともに、先頭段のシフトレジスタには出力された復号データ、すなわちデータバイト30が保持される。また、可変段シフトレジスタ38は、段数レジスタ37が保持する、近い左位置を示すバイトオフセット値より1小さい段数のシフトレジスタを構成するため、可変段シフトレジスタ38の最終段は、可変段シフトレジスタ38の先頭段より1バイト遅れたデータ、すなわちバイト29が出力される。このようにして、復号データが出力される毎に、データバッファ35に格納されるとともに、可変段シフトレジスタ38に保持されたデータは1段ずつシフトされる。
【0101】
C1時点で近い左複写出力回路29が動作していた場合は、可変段シフトレジスタ38の最終段が出力している、近い左位置のデータバイト、すなわちデータバイト30が近い左複写出力回路29に入力される。次に上複写出力回路27が復号データをA3時点までに出力する。C3時点において、出力された復号データは、データバイト32として、データバッファ35に格納され、以下上述の例と同様に動作を行う。
【0102】
遠い左複写出力回路28、あるいは生データ出力回路30がデータ出力した場合も同様に動作する。
【0103】
次に図16を参照し、制御回路15が実行する印刷制御手順を説明する。図16は、制御回路15が実行する印刷制御手順を示すフローチャートであり、データの受信などその他の処理(不図示)と並行に動作する。
【0104】
印刷制御手順が起動されると、まずステップS101にて印刷可能ページがあるか、具体的には改ページコマンドを受信していて未印刷のページがあるか否かを判定する。印刷可能ページがない場合には、改ページコマンドを受信して印刷可能ページができるまでステップS101にて待機する。
【0105】
印刷可能ページがある場合は処理をステップS102に進め、プリンタエンジン14に印刷の開始を指示する。次にステップS103にて、ページの印刷条件指定コマンドにて指定された1ラインのバイト数をライン長レジスタ25に設定する。次にステップS104にて、ページの圧縮パラメタ指定コマンドにて指定された、上複写位置を示すライン数、近い左複写位置を示すバイトオフセット値、および遠い左複写位置を示すバイトオフセット値を、行数レジスタ36、段数レジスタ37、および背景周期レジスタ39にそれぞれ設定する。次にステップS105にて、1ページの印刷が終了するまで待つ。印刷が開始されると、復号回路13により、上記のレジスタに設定された値に基づいて復号が行われる。1ページの印刷が終了すると、処理をステップS101に戻し、印刷可能ページを待つ。
【0106】
このようにして、符号化の際に使用された圧縮パラメタを用いて復号が行われるため、常に正しい復号データが得られる。
【0107】
以上の説明により、本実施形態によって、背景パターンの周期を検出し、検出した周期に応じた位置を参照して符号化を行うため、背景パターンを効率よく圧縮することができる。また、検出した周期に応じた位置および限られた少数の位置のみを参照して符号化を行うため、高速に圧縮することができる。また、背景パターンの周期を検出する際に、背景パターンのデータ自体を使用せず、背景パターンの大きさと位置のみにより検出するため、高速に周期を検出することができる。また、検出した背景パターンの周期を、1バイトの画素数およびディザ周期に応じて補正しているため、ディザ処理が行われた画像であっても効率よく圧縮することができる。また、背景パターンの周期が検出されなかった場合に、ディフォルトの参照位置を使用して符号化を行うため、そのようなことを行わない場合に較べて効率よく圧縮することができる。
【0108】
[第2の実施形態]
なお上述の実施形態では、画像の左端付近で近い左複写位置が画像の左端からはみ出る場合には参照しないように構成されているが、これに代えて他の方法、例えば前ラインの右側に回り込むように、あるいは画像の左端からはみ出た場合には、固定値0を参照するようにしても良い。
【0109】
また、上述の実施形態では、画像データ1バイトを単位として符号化および復号が行われているが、これに代えて他の単位、例えば1画素あるいは2バイトなどを単位としても良い。
【0110】
また上述の実施形態では、白黒画像を扱っていたが、これに代えてカラー画像を扱うようにしてもよい。
【0111】
また上述の実施形態では、1画素が1ビットにより構成されていたが、これに代えて他の値、例えば2ビット、4ビットあるいは8ビットとしてもよい。
【0112】
また上述の実施形態では、ハードウェアによって復号していたが、これに代えてソフトウェアで復号するようにしてもよい。
【0113】
また上述の実施形態では、ディザ処理を行っているが、これに代えてディザ処理を行わないようにしてもよい。
【0114】
また上述の実施形態では、背景パターンの横方向の周期性を利用して圧縮を行っているが、これに代えて縦方向、あるいは縦横双方の周期性を利用して圧縮してもよい。
【0115】
また上述の実施形態では、異なる周期を検出した場合に最大値を周期としていたが、これに代えて、異なる周期のうち最も頻度が高い値を周期としてもよい。
【0116】
[他の実施形態]
なお、本発明は、複数の機器(例えばホストコンピュータ、インタフェイス機器、リーダ、プリンタなど)から構成されるシステムに適用しても、一つの機器からなる装置(例えば、複写機、ファクシミリ装置など)に適用してもよい。
【0117】
また、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体(または記録媒体)を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記憶媒体に格納されたプログラムコードを読み出し実行することによっても、達成されることは言うまでもない。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム(OS)などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【0118】
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【0119】
本発明を上記記憶媒体に適用する場合、その記憶媒体には、先に説明した(図6乃至9,16の一部もしくは全部の)フローチャートに対応するプログラムコードが格納されることになる。
【0120】
【発明の効果】
以上の説明したとおり、本発明によれば、周期性を有する画像、特に壁紙などの背景パターンを並べた画像データを符号化する際に、画像全体をより高速に、且つより高圧縮率で圧縮することができる。
【0121】
また本発明によれば、壁紙などの背景パターンを並べた画像を符号化した符号を復号する復号回路の回路規模を小さくし、かつ大量のバッファメモリを必要としない、低コストで構成可能な復号を行うことができる。
【図面の簡単な説明】
【図1】画像を印刷する際に用いるソフトウェア群とプリンタとの関係を示す概念図である。
【図2】プリンタ1111の基本構成を示すブロック図である。
【図3】図1に示したプリンタドライバ4が生成する符号化データに含まれる各符号の一例を示すテーブルを示す図である。
【図4】カウント符号の一例を示すテーブルを示す図である。
【図5】図3及び図4に示した各符号の使用例を説明する図である。
【図6】プリンタドライバ4が行うメインの処理のフローチャートである。
【図7】ステップS4における処理の詳細を示すフローチャートである。
【図8】ステップS10における処理の詳細を示すフローチャートである。
【図9】ステップS11における処理の詳細を示すフローチャートである。
【図10】印刷データの一例を示す図である。
【図11】図10の印刷データを構成する各パターンを示す図である。
【図12】復号回路13の詳細な構成を示すブロック図である。
【図13】符号化前、もしくは復号後の画像データの構成を示す図である。
【図14】ラインバッファ31の各々のアドレスに、図13に示す画像データがどのようにして格納されるのかを説明する図である。
【図15】図13に示す画像データがどのようなタイミングで処理されるかを説明する図である。
【図16】制御回路15が実行する印刷制御処理手順を示すフローチャートである。
【図17】本発明の実施形態における画像処理装置の基本構成を示す図である。
【図18】ビットマップ管理テーブルの構成例を示す図である。
Claims (7)
- 画像を符号化する画像処理装置であって、
前記画像のパターンの行方向の周期pを検出する周期検出手段と、
前記画像に対してn行m列のマトリクスを用いて擬似中間調処理を施す擬似中間調処理手段と、
前記擬似中間調処理を施された画像を符号化する符号化手段とを備え、
前記符号化手段は、
符号化対象画素から距離m×a(a>0)だけ行方向に離れた第1参照画素と、前記符号化対象画素から、前記周期pの整数倍である距離m×b(b>0,a≠b)だけ行方向に離れた第2参照画素と、を用いて前記符号化対象画素を符号化することを特徴とする画像処理装置。 - 前記擬似中間調処理手段は、画像に対してディザマトリクスを用いてディザ処理を施すことを特徴とする請求項1に記載の画像処理装置。
- 符号化された画像を復号する画像処理装置であって、
n行m列のマトリクスを用いて擬似中間調処理が施され、符号化された画像を入力する入力手段と、
前記入力手段によって入力された画像を復号する復号手段とを備え、
前記復号手段は、
復号対象画素から距離m×a(a>0)だけ行方向に離れた第1参照画素と、前記復号対象画素から、前記画像のパターンの周期pの整数倍である距離m×b(b>0,a≠b)だけ行方向に離れた第2参照画素と、を用いて前記復号対象画素を復号することを特徴とする画像処理装置。 - 画像を符号化する画像処理方法であって、
前記画像のパターンの行方向の周期pを検出する周期検出工程と、
前記画像に対してn行m列のマトリクスを用いて擬似中間調処理を施す擬似中間調処理工程と、
前記擬似中間調処理を施された画像を符号化する符号化工程とを備え、
前記符号化工程では、
符号化対象画素から距離m×a(a>0)だけ行方向に離れた第1参照画素と、前記符号化対象画素から、前記周期pの整数倍である距離m×b(b>0,a≠b)だけ行方向に離れた第2参照画素と、を用いて前記符号化対象画素を符号化することを特徴とする画像処理方法。 - 符号化された画像を復号する画像処理方法であって、
n行m列のマトリクスを用いて擬似中間調処理が施され、符号化された画像を入力する入力工程と、
前記入力工程で入力された画像を復号する復号工程とを備え、
前記復号工程では、
復号対象画素から距離m×a(a>0)だけ行方向に離れた第1参照画素と、前記復号対象画素から、前記画像のパターンの周期pの整数倍である距離m×b(b>0,a≠b)だけ行方向に離れた第2参照画素と、を用いて前記復号対象画素を復号することを特徴とする画像処理方法。 - コンピュータに請求項4又は5に記載の画像処理方法を実行させるためのコンピュータプログラム。
- 請求項6に記載のコンピュータプログラムを格納したことを特徴とする、コンピュータ読み取り可能な記憶媒体。
Priority Applications (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001373269A JP4164257B2 (ja) | 2001-12-06 | 2001-12-06 | 画像処理装置、画像処理方法、プログラム、及び記憶媒体 |
EP02258367.8A EP1318665B1 (en) | 2001-12-06 | 2002-12-04 | Image processing apparatus and method, program, and storage medium |
CN 200810094578 CN101282405B (zh) | 2001-12-06 | 2002-12-05 | 图像处理装置、图像处理方法 |
CNB02155529XA CN100397866C (zh) | 2001-12-06 | 2002-12-05 | 图像处理装置、图像处理方法 |
CN 200810097396 CN101282406B (zh) | 2001-12-06 | 2002-12-05 | 图像处理装置 |
CN2008100973975A CN101282407B (zh) | 2001-12-06 | 2002-12-05 | 图像处理装置、图像处理方法 |
US10/310,812 US7245396B2 (en) | 2001-12-06 | 2002-12-06 | Image data coding apparatus, image data decoding apparatus, image data coding method and image data decoding method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001373269A JP4164257B2 (ja) | 2001-12-06 | 2001-12-06 | 画像処理装置、画像処理方法、プログラム、及び記憶媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003174564A JP2003174564A (ja) | 2003-06-20 |
JP4164257B2 true JP4164257B2 (ja) | 2008-10-15 |
Family
ID=19182021
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001373269A Expired - Fee Related JP4164257B2 (ja) | 2001-12-06 | 2001-12-06 | 画像処理装置、画像処理方法、プログラム、及び記憶媒体 |
Country Status (2)
Country | Link |
---|---|
JP (1) | JP4164257B2 (ja) |
CN (3) | CN101282406B (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7359546B2 (ja) | 2016-05-09 | 2023-10-11 | マーカス インターナショナル リミテッド | サンプリング装置 |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7006700B2 (en) * | 2004-06-25 | 2006-02-28 | Avocent Corporation | Digital video compression command priority |
JP4801778B2 (ja) | 2007-10-18 | 2011-10-26 | 富士通株式会社 | 映像圧縮符号化装置、映像復元装置、映像圧縮プログラム、及び、映像復元プログラム |
JP2010231726A (ja) | 2009-03-30 | 2010-10-14 | Oki Data Corp | 情報処理装置 |
JP6003059B2 (ja) * | 2012-01-05 | 2016-10-05 | 株式会社リコー | 画像処理装置および画像処理方法、ならびに、画像形成装置 |
CN103729153B (zh) * | 2012-10-15 | 2016-12-21 | 金蝶软件(中国)有限公司 | 打印方法和打印装置 |
JP6427961B2 (ja) * | 2014-05-30 | 2018-11-28 | セイコーエプソン株式会社 | 画像処理装置、表示装置、画像処理方法およびプログラム |
CN110830423A (zh) * | 2018-08-10 | 2020-02-21 | 北京仁光科技有限公司 | 一种安全网络数据交互系统及方法 |
CN116779114B (zh) * | 2023-08-24 | 2023-11-03 | 邹城市人民医院 | 一种抗肿瘤医疗mri图像信息智能管理系统 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6229372A (ja) * | 1985-07-31 | 1987-02-07 | インタ−ナショナル ビジネス マシ−ンズ コ−ポレ−ション | 2値デ−タの圧縮方法 |
US5787192A (en) * | 1994-09-27 | 1998-07-28 | Kabushikaisha Equos Research | Image data compression apparatus and image data communication system |
US5917952A (en) * | 1995-09-20 | 1999-06-29 | Hewlett-Packard Company | Compression of randomly dithered bi-level images |
GB9522077D0 (en) * | 1995-10-27 | 1996-01-03 | Univ Strathclyde | Data compression |
FR2742248B1 (fr) * | 1995-12-06 | 1998-01-23 | Thomson Multimedia Sa | Procede de traitement de donnees dans des reseaux matriciels dans un systeme d'estimation de mouvement |
EP0797348A3 (en) * | 1996-03-22 | 1999-01-20 | Hewlett-Packard Company | A one dimensional context model for entropy encoding digital halftone images with arithmetic coding |
US5915042A (en) * | 1996-03-28 | 1999-06-22 | Oki Data Corporation | Coding and decoding methods and apparatus for compressing and expanding image data |
EP1689188A3 (en) * | 1996-11-07 | 2008-12-10 | Panasonic Corporation | Image encoder and image decoder |
US5930790A (en) * | 1997-09-25 | 1999-07-27 | Xerox Corporation | String-match array for substitutional compression |
JP3095071B2 (ja) * | 1998-04-21 | 2000-10-03 | 日本電気株式会社 | パタンマッチング符号化装置、及びその符号化方法 |
US6011873A (en) * | 1998-04-29 | 2000-01-04 | Penware, Inc. | Method and apparatus for lossless compression of signature data |
JP3589871B2 (ja) * | 1998-09-03 | 2004-11-17 | 富士通株式会社 | テクスチャ圧縮・復元方法及び装置 |
-
2001
- 2001-12-06 JP JP2001373269A patent/JP4164257B2/ja not_active Expired - Fee Related
-
2002
- 2002-12-05 CN CN 200810097396 patent/CN101282406B/zh not_active Expired - Fee Related
- 2002-12-05 CN CN 200810094578 patent/CN101282405B/zh not_active Expired - Fee Related
- 2002-12-05 CN CN2008100973975A patent/CN101282407B/zh not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7359546B2 (ja) | 2016-05-09 | 2023-10-11 | マーカス インターナショナル リミテッド | サンプリング装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101282406A (zh) | 2008-10-08 |
JP2003174564A (ja) | 2003-06-20 |
CN101282406B (zh) | 2013-03-06 |
CN101282407B (zh) | 2011-12-21 |
CN101282405B (zh) | 2012-12-26 |
CN101282407A (zh) | 2008-10-08 |
CN101282405A (zh) | 2008-10-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP1318665B1 (en) | Image processing apparatus and method, program, and storage medium | |
US7468803B2 (en) | Image processing apparatus and image processing method | |
KR20120065394A (ko) | 화상처리장치 및 그 처리 방법 | |
JP2008042688A (ja) | 画像処理装置およびその制御方法、並びに、コンピュータプログラム及びコンピュータ可読記憶媒体 | |
JPH08235346A (ja) | 画像処理装置 | |
JP4164257B2 (ja) | 画像処理装置、画像処理方法、プログラム、及び記憶媒体 | |
JP2000295113A (ja) | ハフマン符号化データ圧縮装置 | |
JP2830690B2 (ja) | 画像処理装置 | |
US6785424B1 (en) | Encoding method and apparatus for compressing a data structure having two or more dimensions, decoding method, and storage medium | |
JP2006139606A (ja) | 画像処理方法、画像処理装置、コンピュータプログラム、及びコンピュータ読み取り可能な記録媒体 | |
JPH1070654A (ja) | 画像処理装置 | |
JP3970007B2 (ja) | 画像処理装置、画像処理方法、プログラム、及び記憶媒体 | |
US8649051B2 (en) | Image composition device, image forming apparatus and computer readable medium storing program | |
JP2003244448A (ja) | 符号化方法及び復号方法 | |
JP3346051B2 (ja) | 画像処理装置 | |
JP2018098611A (ja) | 符号化装置、符号化方法、復号装置、復号方法および生成方法 | |
US8494261B2 (en) | Image processing apparatus, image processing method, and computer-readable medium | |
JP2011139162A (ja) | 画像符号化装置、制御方法、及びプログラム | |
JPH09167222A (ja) | 画像処理装置 | |
US9049404B2 (en) | Image processing apparatus and method that perform multiple image processes, and storage medium storing a program thereof, for decompressing a compressed image according to first and second information indicating image processing to be performed | |
US5682250A (en) | Method and apparatus for reproducing an image without salt and pepper specks | |
JP2003189108A (ja) | 画像圧縮方法 | |
JP2000251061A (ja) | 画像処理装置、画像処理方法および画像処理用記録媒体 | |
CN110913223B (zh) | 图像解压缩装置、其控制方法及计算机可读存储介质 | |
JPH11187261A (ja) | 画像処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20041001 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20070104 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070206 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070409 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080331 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080529 |
|
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: 20080714 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20080728 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110801 Year of fee payment: 3 |
|
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: 20120801 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120801 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130801 Year of fee payment: 5 |
|
LAPS | Cancellation because of no payment of annual fees |