(57)【特許請求の範囲】
【請求項１】
２値で表された所定数の画素データを含む画素データ群を記憶手段から各々のデータ群単位で順番に読み出し、これら画素データ群に含まれる画素データを圧縮するデータ圧縮装置であって、
各々の前記画素データ群において連続する同値の画素データを連続画素データとして抽出し、その連続数をランレングスとして算出するランレングス抽出手段と、
前記ランレングス抽出手段によって算出されたランレングスを記憶するランレングス記憶手段と、
各々の前記画素データ群において最後に読み出された画素データの値を記憶する隣接画素値記憶手段と、
前記画素データ群から前記ランレングス抽出手段によって抽出された連続画素データの中に、当該画素データ群において最後に読み出された画素データが含まれているか否かを各々の画素データ群について判断する判断手段と、
第１の画素データ群についての前記判断手段による判断結果が否定的な場合には、当該第１の画素データ群について前記ランレングス抽出手段により算出されて前記ランレングス記憶手段によって記憶されているランレングスを出力する一方、前記第１の画素データ群についての前記判断手段による判断結果が肯定的な場合には、前記ランレングス抽出手段によって算出されて前記ランレングス記憶手段によって記憶されているランレングスを出力せずに記憶させたままにしておく第１の制御手段と、
前記第１の画素データ群の次に読み出された第２の画素データ群において最初に読み出された画素データの値が、前記隣接画素値記憶手段によって記憶されている値と一致する場合であって、当該第２の画素データ群についての前記判断手段による判断結果が否定的な場合には、前記ランレングス記憶手段によって記憶された前記第１の画素データ群におけるランレングスと、前記第２の画素データ群について前記ランレングス抽出手段により算出されたランレングスとを加算して出力し、前記第２の画素データ群において最初に読み出された画素データの値が、前記隣接画素値記憶手段によって記憶されている値と一致する場合であって、当該第２の画素データ群についての前記判断手段による判断結果が肯定的な場合には、前記ランレングス記憶手段によって記憶された前記第１の画素データ群におけるランレングスと、前記第２の画素データ群について前記ランレングス抽出手段により算出されたランレングスとの加算結果を前記ランレングス記憶手段に記憶させる第２の制御手段と、
前記第２の画素データ群において最初に読み出された画素データの値が前記隣接画素値記憶手段によって記憶されている値と一致しない場合には、前記ランレングス記憶手段によって記憶された前記第１の画素データ群におけるランレングスを出力する第３の制御手段と
を備えることを特徴とするデータ圧縮装置。
【請求項２】
前記記憶手段から読み出された各画素データ群に含まれる画素データのうち、読み出された順序が連続する複数の画素データを、それよりも少ない数の画素データに変換する変換手段を備え、
前記ランレングス抽出手段、前記ランレングス記憶手段、前記隣接画素値記憶手段、前記第１の制御手段、前記第２の制御手段及び前記第３の制御手段は、前記変換手段による画素データが変換された画素データ群に対して処理を行うことを特徴とする請求項１記載のデータ圧縮装置。
【請求項３】
前記第１の制御手段、前記第２の制御手段及び前記第３の制御手段によって出力された複数のランレングスをそれぞれ異なる記憶領域に記憶するデータ記憶手段と、
前記データ記憶手段によって記憶されているランレングスを読み出させる順番を表す制御信号を生成する生成手段と、
前記生成手段によって生成された制御信号が表す順番で前記データ記憶手段に記憶されているランレングスを読み出して出力する出力制御手段と
を備えることを特徴とする請求項１記載のデータ圧縮装置。
【請求項４】
２値で表された所定数の画素データを含む画素データ群を記憶手段から各々のデータ群単位で順番に読み出し、これら画素データ群に含まれる画素データを圧縮するデータ圧縮装置に、
各々の前記画素データ群において連続する同値の画素データを連続画素データとして抽出し、その連続数をランレングスとして算出する機能と、
算出されたランレングスをランレングス記憶手段に記憶させる機能と、
各々の前記画素データ群において最後に読み出された画素データの値を隣接画素値記憶手段に記憶させる機能と、
前記画素データ群から抽出された連続画素データの中に、当該画素データ群において最後に読み出された画素データが含まれているか否かを各々の画素データ群について判断する機能と、
第１の画素データ群についての判断結果が否定的な場合には、当該第１の画素データ群について算出されて前記ランレングス記憶手段によって記憶されているランレングスを出力する一方、前記第１の画素データ群についての判断結果が肯定的な場合には、算出されて前記ランレングス記憶手段によって記憶されているランレングスを出力せずに記憶させたままにしておく機能と、
前記第１の画素データ群の次に読み出された第２の画素データ群において最初に読み出された画素データの値が、前記隣接画素値記憶手段によって記憶されている値と一致する場合であって、当該第２の画素データ群についての判断結果が否定的な場合には、前記ランレングス記憶手段によって記憶された前記第１の画素データ群におけるランレングスと、前記第２の画素データ群について算出されたランレングスとを加算して出力し、前記第２の画素データ群において最初に読み出された画素データの値が、前記隣接画素値記憶手段によって記憶されている値と一致する場合であって、当該第２の画素データ群についての判断結果が肯定的な場合には、前記ランレングス記憶手段によって記憶された前記第１の画素データ群におけるランレングスと、前記第２の画素データ群について算出されたランレングスとの加算結果を前記ランレングス記憶手段に記憶させる機能と、
前記第２の画素データ群において最初に読み出された画素データの値が前記隣接画素値記憶手段によって記憶されている値と一致しない場合には、前記ランレングス記憶手段によって記憶された前記第１の画素データ群におけるランレングスを出力する機能と
を実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、２値の画像データを圧縮する技術に関する。
【背景技術】
【０００２】
文字や図形など中間調のない２値の白黒画像を符号化すると、各々の主走査ラインにおいて、白画素を表す画素データや黒画素を表す画素データがそれぞれ複数個連続することがある。このように連続する同一色の画素データ群をその連続画素数（ランレングス）で表現することでデータ圧縮を行うという手法が知られている。これは、一般に「ランレングス圧縮」と呼ばれている。
【０００３】
ところで、２値の画素データをメモリなどの記憶媒体に格納したり、その記憶媒体から読み出して伝送したりする場合には、所定のビット数の画素データ群が一組にパッキングされ、その一組を単位として格納処理や伝送処理がなされるようになっている。このときのビット数は、画素データが格納される記憶媒体の構成に依存し、例えば４ｂｉｔ、８ｂｉｔ、１６ｂｉｔなどである。
【０００４】
ここで、図１６を用いて、画素データに対してランレングス圧縮を施すときの手順を説明する。この図１６では、白画素を表す画素データの値を“０”、黒画素を表す画素データの値を“１”とする。また、これら画素データは４ｂｉｔ毎にパッキングされるものとする。従って、図示のように、メモリＭには、４ｂｉｔ毎にパッキングされた画素データ群が格納されている。これらの画素データに対してランレングス圧縮を施すには、１つの主走査ライン分の画素データを全てアンパッキングしてバッファに展開する必要がある。なぜなら、パッキングされた状態では正確なランレングスを特定することができないからである。例えば画素データ群ｇ１のデータ値は“００００”であるから、この画素データ群ｇ１だけに着目すれば、ランレングスは「４」と判断されるが、実際にはこれら「００００」の後に続いて、画素データ群ｇ２のデータ値“０１１１”のうちの“０”が連続しているから、正確なランレングスは「５」となるのである。
【０００５】
このため、図中の矢印ｒが指し示すように、画素データ群ｇ１の下方から上方に向かって各画素データが順次読み出されてバッファに展開される。そして、画素データ群ｇ１が全て読み出された後には、画素データ群ｇ２、ｇ３，ｇ４・・・について上記の同様の順序で画素データが逐一読み出されてバッファに展開される。このようなアンパッキングを経て、１本の主走査ラインを構成する画素を表す画素データ群Ｇ“０００００１１１０００１１１１１１１１１０００１１１００００００・・・”がバッファに展開されることになる。そして、この画素データ群ｇにおいて白画素のランレングスと黒画素のランレングスとをそれぞれ特定することで圧縮データＬ“５，３，３，９，３，３・・・”を得ることができる。
【０００６】
このように、従来の技術では、ランレングス圧縮を施す前に、主走査ラインを構成する画素データ群ｇ１，ｇ２，ｇ３，ｇ４，・・・を全て読み出してバッファに展開するという処理が必須である。このため、画素データ群のパッキングを解除して（アンパッキングして）バッファに展開するための処理時間を要するとともに、そのためのバッファやアンパッキング回路を実装しなければならないという問題がある。そこで、この種の問題点を解消するため、例えば特許文献１では、画素データをパッキングしたままでランレングス圧縮を施すという技術が提案されている。
【特許文献１】特許第３４５９７０４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
特許文献１に記載の技術では、パッキングを解除することなく画像データのランレングス圧縮を行うことで処理の高速化を図ることが可能となる。しかし、その一方で、画素データを２次元ブロック化してパッキングし、さらにそれを所定の濃度パタンに変換して符号化しなければならないため、回路構成や処理が複雑になってしまうという欠点がある。
【０００８】
本発明は上述した背景に鑑みてなされたものであり、その目的は、回路構成を複雑化せずに、２値の画素データをパッキングしたままランレングス圧縮を行い、その圧縮処理に要する時間を短縮することにある。
【課題を解決するための手段】
【０００９】
上記目的を達成するために、本発明は、２値で表された所定数の画素データを含む画素データ群を記憶手段から各々のデータ群単位で順番に読み出し、これら画素データ群に含まれる画素データを圧縮するデータ圧縮装置であって、各々の前記画素データ群において連続する同値の画素データを連続画素データとして抽出し、その連続数をランレングスとして算出するランレングス抽出手段と、前記ランレングス抽出手段によって算出されたランレングスを記憶するランレングス記憶手段と、各々の前記画素データ群において最後に読み出された画素データの値を記憶する隣接画素値記憶手段と、前記画素データ群から前記ランレングス抽出手段によって抽出された連続画素データの中に、当該画素データ群において最後に読み出された画素データが含まれているか否かを各々の画素データ群について判断する判断手段と、第１の画素データ群についての前記判断手段による判断結果が否定的な場合には、当該第１の画素データ群について前記ランレングス抽出手段により算出されて前記ランレングス記憶手段によって記憶されているランレングスを出力する一方、前記第１の画素データ群についての前記判断手段による判断結果が肯定的な場合には、前記ランレングス抽出手段によって算出されて前記ランレングス記憶手段によって記憶されているランレングスを出力せずに記憶させたままにしておく第１の制御手段と、前記第１の画素データ群の次に読み出された第２の画素データ群において最初に読み出された画素データの値が、前記隣接画素値記憶手段によって記憶されている値と一致する場合であって、当該第２の画素データ群についての前記判断手段による判断結果が否定的な場合には、前記ランレングス記憶手段によって記憶された前記第１の画素データ群におけるランレングスと、前記第２の画素データ群について前記ランレングス抽出手段により算出されたランレングスとを加算して出力し、前記第２の画素データ群において最初に読み出された画素データの値が、前記隣接画素値記憶手段によって記憶されている値と一致する場合であって、当該第２の画素データ群についての前記判断手段による判断結果が肯定的な場合には、前記ランレングス記憶手段によって記憶された前記第１の画素データ群におけるランレングスと、前記第２の画素データ群について前記ランレングス抽出手段により算出されたランレングスとの加算結果を前記ランレングス記憶手段に記憶させる第２の制御手段と、前記第２の画素データ群において最初に読み出された画素データの値が前記隣接画素値記憶手段によって記憶されている値と一致しない場合には、前記ランレングス記憶手段によって記憶された前記第１の画素データ群におけるランレングスを出力する第３の制御手段とを備えることを特徴とするデータ圧縮装置を提供する。
【００１０】
本発明の好ましい態様においては、前記記憶手段から読み出された各画素データ群に含まれる画素データのうち、読み出された順序が連続する複数の画素データを、それよりも少ない数の画素データに変換する変換手段を備え、前記ランレングス抽出手段、前記ランレングス記憶手段、前記隣接画素値記憶手段、前記第１の制御手段、前記第２の制御手段及び前記第３の制御手段は、前記変換手段による画素データが変換された画素データ群に対して処理を行うことを特徴としている。
【００１１】
本発明の好ましい態様においては、前記第１の制御手段、前記第２の制御手段及び前記第３の制御手段によって出力された複数のランレングスをそれぞれ異なる記憶領域に記憶するデータ記憶手段と、前記データ記憶手段によって記憶されているランレングスを読み出させる順番を表す制御信号を生成する生成手段と、前記生成手段によって生成された制御信号が表す順番で前記データ記憶手段に記憶されているランレングスを読み出して出力する出力制御手段とを備えることを特徴としている。
【００１２】
また、本発明は、２値で表された所定数の画素データを含む画素データ群を記憶手段から各々のデータ群単位で順番に読み出し、これら画素データ群に含まれる画素データを圧縮するデータ圧縮装置に、各々の前記画素データ群において連続する同値の画素データを連続画素データとして抽出し、その連続数をランレングスとして算出する機能と、算出されたランレングスをランレングス記憶手段に記憶させる機能と、各々の前記画素データ群において最後に読み出された画素データの値を隣接画素値記憶手段に記憶させる機能と、前記画素データ群から抽出された連続画素データの中に、当該画素データ群において最後に読み出された画素データが含まれているか否かを各々の画素データ群について判断する機能と、第１の画素データ群についての判断結果が否定的な場合には、当該第１の画素データ群について算出されて前記ランレングス記憶手段によって記憶されているランレングスを出力する一方、前記第１の画素データ群についての判断結果が肯定的な場合には、算出されて前記ランレングス記憶手段によって記憶されているランレングスを出力せずに記憶させたままにしておく機能と、前記第１の画素データ群の次に読み出された第２の画素データ群において最初に読み出された画素データの値が、前記隣接画素値記憶手段によって記憶されている値と一致する場合であって、当該第２の画素データ群についての判断結果が否定的な場合には、前記ランレングス記憶手段によって記憶された前記第１の画素データ群におけるランレングスと、前記第２の画素データ群について算出されたランレングスとを加算して出力し、前記第２の画素データ群において最初に読み出された画素データの値が、前記隣接画素値記憶手段によって記憶されている値と一致する場合であって、当該第２の画素データ群についての判断結果が肯定的な場合には、前記ランレングス記憶手段によって記憶された前記第１の画素データ群におけるランレングスと、前記第２の画素データ群について算出されたランレングスとの加算結果を前記ランレングス記憶手段に記憶させる機能と、前記第２の画素データ群において最初に読み出された画素データの値が前記隣接画素値記憶手段によって記憶されている値と一致しない場合には、前記ランレングス記憶手段によって記憶された前記第１の画素データ群におけるランレングスを出力する機能とを実現させるためのプログラムを提供する。
【００１３】
本発明によれば、２値で表された所定数の画素データを含む画素データ群を記憶手段から各々のデータ群単位で順番に読み出し同値の画素が連なっている数をランレングスとして算出する。そして、順番に読み出される画素データ群の前に読み出された画素データ群の値やランレングスとの関係から、同値の画素データが連続する連続画素データのランレングスを算出する。そして、主走査ラインにおけるランレングスを特定すれば、算出されたランレングスを連ねて圧縮データとして出力する。このようにすれば、１本の主走査ラインを構成する画素データの全てを読み出してからランレングス圧縮を施すよりも、高速な圧縮処理が可能であり、主走査ラインを構成する全ての画素データを展開するためのバッファや、アンパッキングするための回路を必要としないため、回路構成を複雑化することがない。さらに、ランレングス圧縮の間、ランレングスのデータ量を見積もることができ、符号量制御と同様の役割を果たすことができるため、システムの設計を容易にすることも可能である。
【発明を実施するための最良の形態】
【００１４】
次に、図面を参照しながら、本発明を実施するための最良の形態について説明する。なお、各々の図面において同一の構成には同じ符号を付している。
【００１５】
（１）第１実施形態
まず、本発明の第１実施形態を説明する。同実施形態では、図１に示すように、画素データ群ｇ１〜ｇ８をパッキングしたままランレングス圧縮を施して圧縮データＬを得る。これにより、従来から必要とされていたバッファやアンパッキング回路を不要とするとともに、全体としてランレングス圧縮に要する時間を短縮することができる。
図２は、第１実施形態に係るデータ圧縮装置１の構成を示している。２値化処理部Ｔによって２値化された画素データが、パッキング回路Ｐによって４ｂｉｔずつにパッキングされ、複数の画素データ群としてメモリＭに格納されている。データ圧縮装置１は、このメモリＭから読み出された画素データに対してランレングス圧縮を施す。図２に示すように、このデータ圧縮装置１は、メモリＭから読み出されてデータ圧縮装置１に入力される複数の画素データ群から“０”又は“１”の連続する画素データを連続画素データとして抽出し、これら画素データ群に含まれる画素データをランレングス（連続画素数）に変換するデータ変換部１０と、各々の画素データ群の最後にデータ圧縮装置１に入力された画素データの値を記憶するデータ隣接値記憶部２０と、データ変換部１０から供給されるランレングスを記憶するランレングス記憶部３０と、データ変換部１０から供給されるランレングスとランレングス記憶部３０から供給されるランレングスとを加算する加算部４０と、データ変換部１０又は加算部４０から供給されるランレングスを出力する出力部５０とを備えている。特にデータ変換部１０は、このデータ圧縮装置１において全体を制御するとともに、後述する所要な処理を司る制御手段として機能する。なお、これらの各部に格納されているデータの初期値は“０”である。
【００１６】
次に、図３及び図４を参照しながら、ランレングス圧縮を施す際の具体例について説明する。
メモリＭには、４ｂｉｔずつパッキングされた画素データ群ｇ１，ｇ２，ｇ３，ｇ４，ｇ５，ｇ６，ｇ７，ｇ８・・・が記憶されている。図３は画素データ群ｇ１〜ｇ４に対するランレングス圧縮処理の過程を示し、図４は画素データ群ｇ４に引き続いて入力される画素データ群ｇ５〜ｇ８に対するランレングス圧縮処理の過程を示している。なお、これら画素データ群のうち、画素データ群ｇ１の画素値を“００００”とし、画素データ群ｇ２の画素値を“０１１１”とし、画素データ群ｇ３の画素値を“０００１”とし、画素データ群ｇ４の画素値を“１１１１”とし、画素データ群ｇ５の画素値を“１１１１”とし、画素データ群ｇ６の画素値を“０００１”とし、画素データ群ｇ７の画素値を“１１００”とし、画素データ群ｇ８の画素値を“００００”とする。これらの画素データ群は、画素データ群ｇ１，ｇ２，ｇ３，・・・，ｇ８という順序でメモリＭから読み出されてデータ変換部１０に入力される。図３及び図４において、出力部５０の“Ｎ”はランレングスを出力しないことを表しており、矩形で囲まれた数値は出力部５０から出力されるランレングスを意味している。なお、以下の説明においては、例えば画素データ群の画素値が“００００”である場合、画素データ群“００００”と表現する（画素値が異なっても同様の表現とする）。
【００１７】
図３において、まず、最初の画素データ群ｇ１“００００”がデータ変換部１０に入力される。この場合、データ変換部１０は、画素データ“０”が４個連続しているので、画素データ群の先頭から連続するランレングス“４”を算出する（矢印ａ１）。ただし、この時点では、次に供給される画素データ群ｇ２の値が不明であるため、データ変換部１０は画素データ“０”のランレングスが“４”であるのか、またはそれ以上の値であるかを特定することができない。つまり、データ変換部１０は、最初に入力された画素データ群について、同値の連続画素データの中に、同画素データ群の最後に読み出された画素データが含まれている場合には、算出されたランレングス（画素データ“０”のランレングス“４”）を記憶させる。よって、データ変換部１０は、ランレングス“４”をいったん加算部４０へ供給することになる（矢印ａ２）。これにより、ランレングス“４”が、加算部４０に保持されている“０”（初期値）に加算され、加算部４０には新たにランレングス“４”が保持される（矢印ａ３）。一方、最初に入力された画素データ群の値が“０００１”であるような場合には、同値の連続画素データ（画素データ“０”）の中に同画素データ群の最後に読み出された画素データが含まれていないので、データ変換部１０は、算出されたランレングス（画素データ“０”のランレングス“３”）を出力させることになる。そして、データ変換部１０は、画素データ群ｇ１のうちの最後に入力された画素データの値“０”を、データ隣接値記憶部２０に供給して記憶させる（矢印ａ４）。このデータ隣接値記憶部２０に記憶された値は、隣り合う画素データ群に含まれるランレングスどうしが連続しているか否かを判断するために利用される。
【００１８】
次に、画素データ群ｇ２“０１１１”がデータ変換部１０に入力される。データ変換部１０は、この画素データ群ｇ２から、画素データ群の先頭から連続する画素データ“０”のランレングス“１”を算出すると共に（矢印ｂ１）、その次に連続する画素データ“１”のランレングス“３”を算出する（矢印ｂ２）。そして、データ変換部１０は、データ隣接値記憶部２０から隣接値データ“０”を読み出し、画素データ群ｇ２の先頭の画素データの値と一致しているか否かを判断する。両者が一致していれば、隣り合う画素データ群のランレングスどうしが連続していることを意味するが、両者が一致していない場合には、隣り合う画素データ群のランレングスどうしが連続していないことになる。ここでは両者共に“０”で一致しているので、このような場合には、データ変換部１０は、すでに入力された画素データ群から算出されたランレングスと、ここで入力された画素データ群から算出されたランレングスとを加算する。つまり、データ変換部１０は、加算部４０へランレングス“１”を供給して（矢印ｂ３）、その加算部４０にランレングス“４”を加算させる（矢印ｂ４）。これにより、加算部４０にはランレングス“５”が保持される。さらに、この連続画素データの中には画素データ群ｇ２において最後に読み出された画素データが含まれていないので、ランレングス“５”はこれ以上連続しない。よって、データ変換部１０は、このランレングスの加算結果を加算部４０から出力部５０へ供給させる。そして、出力部５０から画素データ“０”のランレングスとして“５”が出力される（矢印ｂ５）。
【００１９】
このように、加算部４０に保持されているランレングスに対して、データ変換部１０から供給されてくるランレングスを加算させ、その加算結果を加算器４０に保持させておくか又は出力部５０へ供給させる。加算部４０に加算結果を保持させておく場合とは、その加算結果であるランレングスに対して、さらに同値のランレングスが連続する可能性がある場合である。一方、加算部４０から加算結果が出力部５０に供給される場合とは、その加算結果であるランレングスに対して、さらに同値のランレングスが連続する可能性がない場合である。加算部４０による加算結果が出力部５０へ供給されると、それまで加算部４０が保持していた値は“０”にクリアされる。
【００２０】
一方、画素データ群ｇ２から算出された画素データ“１”のランレングス“３”は、データ変換部１０からランレングス記憶部３０に供給され、ランレングス記憶部３０に記憶される（矢印ｂ６）。その理由は、前述した画素データ“０”のランレングスと同様に、次に供給される画素データ群ｇ３の値が不明であるため、画素データ“１”のランレングスが“３”であるのか、またはそれ以上の値であるかを特定することができないからである。なお、このランレングス記憶部３０は、パッキングの１単位となるビット数（ここでは４ｂｉｔ）の画素データを記憶することができればよい。そして、データ変換部１０は、画素データ群ｇ２のうちの最後に入力された画素データの値“１”を、データ隣接値記憶部２０に供給して記憶させる。
【００２１】
次に、画素データ群ｇ３“０００１”がデータ変換部１０に入力される。データ変換部１０は、この画素データ群ｇ３から、画素データ群の先頭から連続する画素データ“０”のランレングス“３”を算出すると共に（矢印ｃ１）、その次に連続する画素データ“１”のランレングス“１”を算出する（矢印ｃ２）。そして、データ変換部１０は、データ隣接値記憶部２０から隣接値データ“１”を読み出し、画素データ群ｇ３の先頭の画素データの値“０”と一致しているか否かを判断する。ここでは一致していないので、データ変換部１０は、画素データ群ｇ２のランレングスと画素データ群ｇ３のランレングスとが連続していないと判断するということになる。この場合、データ変換部１０は、画素データ群ｇ２から算出した画素データ“１”のランレングス“３”、即ちランレングス記憶部３０において画素データ群ｇ２の最後に読み出された画素データが含まれている連続画素データのランレングスとして保持されているランレングス“３”を加算部４０に供給させるが（矢印ｃ３）、加算結果も“３”のままであるため（矢印ｃ４）、そのまま出力部５０に供給して出力させる（矢印ｃ５）。
【００２２】
さらに、データ変換部１０は、画素データ群ｇ３から算出した画素データ“０”のランレングス“３”を出力部５０へ供給して出力させる（矢印ｃ６）。これは、画素データ“０”のランレングス“３”に続いて、画素データ“１”のランレングス“１”が既に算出されており、このランレングス“３”がこれ以上連続する可能性がないからである。続いて、データ変換部１０は、画素データ群ｇ３の最後尾の画素データ“１”のランレングス“１”を、ランレングス記憶部３０に記憶させる（矢印ｃ７）。そして、データ変換部１０は、画素データ群ｇ３のうちの最後に入力された画素データの値“１”を、データ隣接値記憶部２０に供給して記憶させる（矢印ｃ８）。
【００２３】
次に、画素データ群ｇ４“１１１１”がデータ変換部１０に入力される。データ変換部１０は、この画素データ群ｇ４から、画素データ群の先頭から連続する画素データ“１”のランレングス“４”を算出する（矢印ｄ１）。そして、データ変換部１０は、データ隣接値記憶部２０から隣接値データ“１”を読み出し、画素データ群ｇ２の先頭の画素データの値“１”と一致しているか否かを判断する。ここでは両者共に“１”で一致しているのでランレングスは連続しており、データ変換部１０は、画素データ群ｇ３から算出されて記憶されているランレングスと、その次の画素データ群ｇ４から算出されたランレングスとを加算する。つまり、データ変換部１０は、加算部４０へランレングス“４”を供給する（矢印ｄ２）。ここで、ランレングス記憶部３０から加算部４０に対してランレングス“１”が供給されて、この加算部４０によって保持されている（矢印ｄ３）。そして、データ変換部１０によって加算部４０に供給されるランレングス“４”と、加算部４０によって保持されているランレングス“１”とが加算される（矢印ｄ４）。これにより、加算部４０にはランレングス“５”が保持される。
さらに、画素データ群ｇ４から抽出された連続画素データの中には、その画素データ群ｇ４において最後に読み出された画素データが含まれているので、さらにランレングスが連続する可能性がある。よって、データ変換部１０は、このランレングスの加算結果を加算部４０に記憶させたままにする。そして、データ変換部１０は、画素データ群ｇ４において最後に入力された画素データの値“１”を、データ隣接値記憶部２０に供給して記憶させる（矢印ｄ５）。以上の処理に引き続いて、図４に示すような処理が行われる。なお、この図４に示したランレングス圧縮は図３に示したものと同様であるので、説明を省略する。また、例えば画素データ群に含まれる画素データが“０１１０”というようなケースにおいては、データ“１”のランレングスが「２」となるが、このように画素データ群において先頭及び最後に読み出された画素データが含まれていないランレングスである場合には、データ変換部１０は、算出したランレングスを出力部５０へ供給してそのまま出力させればよい。
【００２４】
データ圧縮装置１は、メモリＭから順次読み出される画素データ群の各々に対して上記のように処理を繰り返し行うことによって、出力部５０から出力されるランレングスを連ねた圧縮データ“５，３，３，９，３，３，・・・”を得ることができる。この圧縮データにおいては白画素を表す画素データ“０”のランレングスと黒画素を表す画素データ“１”のランレングスとが交互に現れるから、出力部５０から圧縮データを受け取った装置又はコンピュータプログラムはこの圧縮データに基づいて２値の画像データを再現することができる。
以上説明した第１実施形態によれば、従来は必要であったバッファやアンパッキングするための回路を必要としないため、回路構成を複雑化することなくランレングス圧縮の処理の高速化を実現することが可能となる。
【００２５】
（２）第２実施形態
次に、本発明の第２実施形態について説明する。
第１実施形態では、４ｂｉｔ毎にパッキングされた画素データ群に対してランレングス圧縮を施していたが、以下に説明する第２実施形態では、図５に示すように、８ｂｉｔ毎にパッキングされた画素データ群ｇ１〜ｇ４を、４ｂｉｔの画素データ群ｇ１’〜ｇ４’に変換してからランレングス圧縮を施して圧縮データＬを得る。つまり、画素データ群を構成する画素データを、少ない数の画素データに変換してからランレングス圧縮を施すので、データ量を減少させることができ、全体としてランレングス圧縮の処理に要する時間をさらに短縮させることが可能となる。
【００２６】
図６は、第２実施形態に係るデータ圧縮装置１ａの構成を示した図である。このデータ圧縮装置１ａは、第１実施形態と同様の処理を実行するデータ変換部１０と、データ隣接値記憶部２０と、ランレングス記憶部３０と、加算部４０と、出力部５０のほか、パッキング単位で入力された画素データ群のｂｉｔ数を小さいｂｉｔ数に変換するビット数変換部６０を備えている。なお、これらの各部に格納されているデータの初期値を“０”とする。
【００２７】
ビット数変換部６０は、８ｂｉｔ毎にパッキングされた画素データ群が入力されると、これを４ｂｉｔに変換する。このようにすればデータ量を小さくすることができ、ランレングス圧縮の高速化が可能となるが、後でこれらの画素データから元の主走査ラインを再現する際には、元の主走査ラインに対して誤差を含むことになる。そのため、ビット数変換部６０は、画素データの損失をできるだけ小さくして、元の画像に近い画像を再現できるように変換処理を行う必要がある。
【００２８】
図７は、ビット数変換部６０が、８ｂｉｔにパッキングされた画素データ群ｇを４ｂｉｔの画素データ群ｇ’に変換する処理の過程を示している。図７に示すように、画素データ群ｇは、画素データｐ１，ｐ２，ｐ３，ｐ４，ｐ５，ｐ６，ｐ７，ｐ８によって構成されている、これらはｐ１，ｐ２，ｐ３，・・・，ｐ８という順序でメモリＭから読み出されてデータ圧縮装置１ａに入力され、４ｂｉｔの画素データ群ｇ’に変換される。この画素データ群ｇ’は画素データｐ１’，ｐ２’，ｐ３’，ｐ４’によって構成されている。また、画素データ群ｇの前に入力された画素データ群のうちの最後（８番目）に入力された画素データが、ビット数変換部６０に備えられたデータ隣接値記憶部２０ａに画素データｂ８として記憶されている。ビット数変換部６０は、画素データ群ｇが入力されると、画素データｂ８を読み出した後に、その画素素データｂ８に代えて画素データｐ８をデータ隣接値記憶部２０ａに記憶させる。
【００２９】
次に、ビット数変換部６０が、画素データ群ｇを画素データ群ｇ’に変換する具体的な手順について説明する。図７に示しているように、ビット数変換部６０は、画素データ群ｇを構成する画素データｐ１〜ｐ８において、隣接する２ｂｉｔずつを一組とし、それぞれを１ｂｉｔに変換することで、８ｂｉｔを４ｂｉｔに変換する。具体的には、画素データ群ｇのうちの先頭の画素データｐ１と２番目の画素データｐ２を一組とし、３番目の画素データｐ３と４番目の画素データｐ４を一組とし、５番目の画素データｐ５と６番目の画素データｐ６を一組とし、７番目の画素データｐ７と８番目の画素データｐ８一組とするといった具合である。このようにして、ビット数変換部６０は画素データ群ｇを２ｂｉｔずつ分割して、各々の組について画素データを１ｂｉｔに変換する。つまり、メモリから読み出された各画素データ群に含まれている画素データのうち、読み出された順序が連続する複数の画素データを、それよりも少ない数の画素データに変換するのである。
【００３０】
ここで、図８は、各々の組の２ｂｉｔの画素データを１ｂｉｔの画素データにする変換方法を記述した変換テーブルを示している。データ変換部１０は、図８に示した変換テーブルに従って、画素データ群ｇを画素データ群ｇ’に変換する。具体的には、各々の組の画素データの値に着目して、２ｂｉｔの画素データの値が共に“０”であれば、値が“０”の１ｂｉｔの画素データに変換する。また、ビット数変換部６０は、２ｂｉｔの画素データの値が共に“１”であれば、値が“１”の１ｂｉｔの画素データに変換する。一方、２ｂｉｔの画素データの値がそれぞれ“０”及び“１”のように異なる場合には、ビット数変換部６０は、この組の直前に入力された画素データの値と同値になるように変換する。この「直前に入力された画素データの値」とは、図７の網掛けを施した画素データのことである。具体的には、画素データｐ１及びｐ２の組の直前に入力された画素データは画素データｂ８であり、画素データｐ３及びｐ４の組の直前に入力された画素データは画素データｐ２であり、画素データｐ５及びｐ６の組の直前に入力された画素データは画素データｐ４であり、画素データｐ７及びｐ８の組の直前に入力された画素データは画素データｐ６である。このように直前に入力された画素データの値を考慮して画素データ値を変換するのは、最も細い細線であっても２画素程度の太さであるから、主走査ラインにおいては黒画素及び白画素はそれぞれ複数個連続する場合が多いということや、白画素または黒画素が単数で含まれていても、それを人間が視認しても確認することは困難な大きさであったり、またそれがノイズの可能性もあるという理由による。
【００３１】
そして、ビット数変換部６０は、画素データｐ１及びｐ２を１ｂｉｔの画素データｐ１’に変換し、画素データｐ３及びｐ４を画素データｐ２’に変換し、画素データｐ５及びｐ６を画素データｐ３’に変換し、画素データｐ７及びｐ８を画素データｐ４’に変換すると、これらを画素データ群ｇ’としてデータ変換部１０に供給する。例えば画素データ群ｇの値が“０００００１１１”であるとすれば、画素データｐ１、ｐ２、ｐ３，ｐ４，ｐ５，ｐ６，ｐ７，ｐ８の値は、それぞれ“０”、“０”、“０”、“０”、“０”、“１”、“１”、“１”となる。この場合、ビット数変換部６０は画素データｐ１，ｐ２に着目すれば、共に画素データの値は“０”であるから、画素データ群ｇ’の画素データｐ１’の値を“０”とする。同様にして、ビット数変換部６０は画素データｐ３，ｐ４についても共に“０”であるから、画素データ群ｇ’の画素データｐ２’の値を“０”とする。また、ビット数変換部６０は、画素データｐ５，ｐ６については、画素データｐ５の値が“０”で画素データｐ６の値が“１”であるから、これらの組の直前の画素データｐ４の値“０”を考慮して、画素データ群ｇ’の画素データｐ３’の値を“０”とする。また、画素データｐ７，ｐ８については共に“１”であるから、画素データ群ｇ’の画素データｐ４’の値は“１”となる。このようにして、ビット数変換部６０は、８ｂｉｔの画素データ群ｇ“０００００１１１”と、４ｂｉｔの画素０００１”に変換することができる。
【００３２】
そして、この画素データ群ｇ’がビット数変換部６０からデータ変換部１０に供給されると、第１実施形態と同様の方法でデータ変換部１０によって画素データ群ｇ’にランレングス圧縮が施されることになる。つまり、データ変換部１０は、メモリＭから読み出された８ｂｉｔ毎にパッキングされた画素データ群ｇ１，ｇ２，ｇ３，ｇ４・・・から、各々が４ｂｉｔに変換された画素データ群ｇ１’，ｇ２’，ｇ３’，ｇ４’・・・に対してランレングス圧縮を施すことになる。
【００３３】
ここで、図９は、画素データ群ｇ１’〜ｇ４’に対してランレングス圧縮を施す際の具体例を説明する図である。なお、画素データ群ｇ１の画素値を“０００００１１１”とし、画素データ群ｇ２の画素値を“０００１１１１１”とし、画素データ群ｇ３の画素値を“１１１１０００１”とし、画素データ群ｇ４の画素値を“１１００００００”とする。そして、これらの画素データ群ｇ１，ｇ２，ｇ３，ｇ４・・・が、画素データ群ｇ１’“０００１”、画素データ群ｇ２’“００１１”、画素データ群ｇ３’“１１００”、画素データ群ｇ４’“１１００”・・・というように、それぞれ４ｂｉｔずつに変換される。これらの画素データ群ｇ１’〜ｇ４’に対して第１実施形態と同様の方法によってランレングス圧縮が行われるわけであるが、元々８ｂｉｔであった画素データ群ｇ１〜ｇ４を、４ｂｉｔの画素データ群ｇ１’〜ｇ４’に変換して更にランレングス圧縮を施しているので、この圧縮データを復号して画素データを再現すると、元の８ｂｉｔで表現されることになる。つまり、データ変換部１０は、画素データ群ｇ１’〜ｇ４’から算出されたランレングスの値をそれぞれ２倍にして扱うことになる。よって、図９においても画素データ群ｇ１’〜ｇ４’から算出されたランレングスの値を全て２倍にして表現している。
【００３４】
図９において、まず、最初の画素データ群ｇ１’“０００１”がデータ変換部１０に入力される。データ変換部１０は、この画素データ群ｇ１’から画素データ群の先頭から連続する画素データ“０”のランレングス“３”を算出すると共に、その次に連続する画素データ“０”のランレングス“１”を算出する。ところが、画素データ群ｇ１’は、元々８ｂｉｔであったものが４ｂｉｔに変換されているため、これらのランレングスを２倍にする。すなわち、白画素の画素データのランレングスは“６”、黒画素の画素データのランレングスは“２”となる。そして、データ変換部１０は、ランレングス“６”をいったん加算部４０へ供給する。これにより、ランレングス“４”が、加算部４０に保持されている“０”（初期値）に加算され、加算部４０には新たにランレングス“４”が保持される。次に、データ変換部１０は、ランレングス“２”をランレングス記憶部３０へ供給して記憶させる。そして、データ変換部１０は、画素データ群ｇ１のうちの最後に入力された画素データの値“１”を、データ隣接値記憶部２０に供給して記憶させる。
【００３５】
次に、画素データ群ｇ２’“００１１”がデータ変換部１０に入力される。データ変換部１０は、この画素データ群ｇ２’から、画素データ群の先頭から連続する画素データ“０”のランレングス“２”を算出すると共に、その次に連続する画素データ“１”のランレングス“２”を算出する。そして、画素データ群ｇ１’の場合と同様にして、これらの値を２倍にして、画素データ“０”のランレングスを“４”、画素データ“１”のランレングス“４”となる。そして、データ変換部１０は、データ隣接値記憶部２０から隣接値データ“１”を読み出し、画素データ群ｇ２’の先頭の画素データの値“０”と一致しているか否かを判断する。ここでは一致していないので、データ変換部１０は、画素データ群ｇ１’のランレングスと画素データ群ｇ２’のランレングスとが連続していないと判断するということになる。この場合、データ変換部１０は、画素データ群ｇ１’から算出した画素データ“１”のランレングス“２”、即ちランレングス記憶部３０に保持されているランレングス“２”を加算部４０に供給させるが、加算結果も“２”のままであるため、そのまま出力部５０に供給して出力させる。そして、データ変換部１０は、画素データ群ｇ２’から算出した画素データ“０”のランレングス“４”を出力部５０へ供給して出力させる。これは、画素データ“０”のランレングス“４”に続いて、画素データ“１”のランレングス“４”が既に算出されており、このランレングス“４”がこれ以上連続する可能性がないからである。続いて、データ変換部１０は、画素データ群ｇ２’の最後尾の画素データ“１”のランレングス“４”を、ランレングス記憶部３０に記憶させる。そして、データ変換部１０は、画素データ群ｇ３’のうちの最後に入力された画素データの値“１”を、データ隣接値記憶部２０に供給して記憶させる。
【００３６】
データ圧縮装置１ａは、メモリＭから順次読み出される画素データ群の各々に対して、上記のように処理を繰り返し行うことによって、出力部５０から出力されるランレングスを連ねた圧縮データ“６，２，４，８，４，４，・・・”を得ることができる。一方、ｂｉｔ数を変換せずに画素データ群ｇ１〜ｇ４に対してランレングス圧縮処理を施せば、圧縮データ“５，３，３，９，３，３，・・・”となる。これらを比較すれば、各々の画素データのランレングスについて１画素程度の誤差が含まれていることになる。ただし、人間が視認してこの程度の誤差を容易に判別することはできないため大きな問題は生じない。
この第２実施形態によれば、できるだけ画素データの損失を小さくして、８ｂｉｔから４ｂｉｔのように、ｂｉｔ数を減少するように変換してからランレングス圧縮を施しているため、画素データのデータ量が減少されて、ランレングス圧縮を施す処理の高速化が可能となる。
【００３７】
（３）第３実施形態
次に、本発明の第３実施形態について説明する。
この第３実施形態では、第１実施形態や第２実施形態で説明した方法によって算出されたランレングスを、データ圧縮装置から別の装置やコンピュータプログラムに出力する際に、正確な順序で且つスムーズに出力されるような制御を行う。
【００３８】
図１０は、同実施形態に係る処理の過程を説明する図である。４ｂｉｔ毎にパッキングされた画素データ群がｇ１，ｇ２，ｇ３，・・・ｇ８の順に入力されると、データ圧縮装置によってランレングスの値が順次算出されていく。このとき、パッキングされた１つの画素データ群がデータ圧縮装置に入力されると直ちにランレングスを算出可能な場合と、次の画素データ群の入力を待たないとランレングを算出することができない場合とがある。つまり、後者の場合は、その時点で算出しているランレングスがさらに大きな値になる可能性がある場合である。
【００３９】
この第３実施形態では、１つの画素データ群がデータ圧縮装置に入力されて直ちにランレングスが算出された場合であって、さらにその際に複数のランレングスが算出された場合には、これらが画素データの入力順に従って別々に保持されるようにしている。図１０において、例えば画素データ群ｇ３がデータ圧縮装置に入力された時点で考えると、画素データ群ｇ２の入力時点では特定できなかった黒画素を表す画素データのランレングス“３”を特定することができ、さらに画素データ群ｇ３のみで白画素のランレングス“３”も特定することができる。このように、１つの画素データ群が入力されて２つのランレングスが特定された場合には、これらを別々に保持させておき、それらが正しい順序で出力されるような制御を行うのである。図１０に示したパタン信号ｐは、このような出力制御を行うための制御信号である。
【００４０】
例えば４ｂｉｔ毎にパッキングされた画素データ群が入力される場合、１回の画素データ群の入力時点で最大３つのランレングスが特定される可能性がある。そのため、最初に特定されたランレングスをランレングスＬ１とし、その次に特定されたランレングスをランレングスＬ２とし、その次に特定されたランレングスをランレングスＬ３とする。また、次の画素データ群が入力されてランレングスが特定されると、そのランレングスはランレングスＬ１となる。これらのランレングスＬ１〜Ｌ３や上述したパタン信号ｐの信号値は、ＦＩＦＯ（First Input First Out）形式のメモリに記憶されており、メモリから出力されるパタン信号によってこれらランレングスＬ１，Ｌ２，Ｌ３の出力順が制御されて、ランレングスが連なった圧縮データＬが出力されることになる。
【００４１】
図１１は、第３実施形態に係るデータ圧縮装置１ｂの構成を示した図である。このデータ圧縮装置１ｂは、第１実施形態と同様の処理を実行するデータ隣接値記憶部２０と、ランレングス記憶部３０と、加算部４０のほか、第１実施形態の処理に加えてパタン信号の生成に関する処理を行うデータ変換部１０ａと、さらにこのパタン信号に従ってランレングスを連ねた圧縮データを出力する出力調整部５０ａとを備えている。なお、これらの各部に格納されているデータの初期値を“０”とする。
【００４２】
次に、図１２は、出力調整部５０ａの構成を示した図である。この出力調整部５０ａには、上述した第１実施形態や第２実施形態と同様の方法で算出されたランレングスが供給される。図１２に示すように、出力調整部５０ａは、供給されてくるランレングスをランレングスＬ１〜Ｌ３としてそれぞれ記憶するデータ記憶部５１と、データ変換部１０ａから供給されるパタン信号の値（パタン信号値）を記憶するパタン信号記憶部５２と、データ記憶部５１に記憶されたランレングスＬ１〜Ｌ３のうちのいずれか１つを読み出す選択部５３と、パタン信号記憶部５２から供給されるパタン信号値に基づいて選択部５３が読み出すべきランレングスを決定するパタン制御部５４とを備えている。データ記憶部５１は、ランレングスＬ１を記憶するための記憶領域５１ａと、ランレングスＬ２を記憶するための記憶領域５１ｂと、ランレングスＬ３を記憶するための記憶領域５１ｃとを有している。なお、ランレングス圧縮を施す処理速度が、ランレングスが出力される処理速度よりも大きい場合もあるため、このデータ記憶部５１やパタン信号記憶部５２はランレングスやパタン信号を出力されるまで記憶しておくための十分な容量を有している。
【００４３】
パタン制御部５４は、選択部５３が読み出すべきランレングスを決定するためのアルゴリズムを記憶しており、このアルゴリズムに従って決定された読出指示がパタン制御部５４から選択部５３に与えられる。図１３は、このアルゴリズムを説明するための概念図である。パタン信号は“０”，“１”，“２”，“３”という４種類の値をとり、それぞれ次のような処理を意味している。
【００４４】
まず、パタン信号値“０”は、出力可能なランレングスがないことを意味しており、この場合には、パタン制御部５４は、ランレングスＬ１〜Ｌ３のいずれも読み出す必要はないことを選択部５３に指示する。選択部５３は、この指示を受け取ったときには何の処理も行わない。
【００４５】
次に、パタン信号値“１”は、ランレングスＬ１を出力すべきことを意味しており、この場合には、パタン制御部５４は記憶領域５１ａに記憶されたランレングスＬ１を読み出すことを選択部５３に指示する。これにより、選択部５３によって、記憶領域５１ａからランレングスが１つだけ読み出されることになる。
【００４６】
次に、パタン信号値“２”は、ランレングスＬ１を出力した後にランレングスＬ２を出力すべきことを意味している。この場合、パタン制御部５４は、記憶領域５１ｂに記憶されたランレングスＬ１，Ｌ２を順番に読み出すことを選択部５３に指示する。これにより、選択部５３によって、記憶領域５１ａからランレングスが１つだけ読み出された後に、記憶領域５１ｂからランレングスが１つだけ読み出されることになる。
【００４７】
そして、パタン信号値“３”は、ランレングスＬ１を出力した後にランレングスＬ２を出力し、さらにその後にランレングスＬ３を出力すべきことを意味している。この場合、パタン制御部５４は、記憶領域５１ｂに記憶されたランレングスＬ１，Ｌ２，Ｌ３を順番に読み出すことを選択部５３に指示する。これにより、選択部５３によって、記憶領域５１ａからランレングスが１つだけ読み出された後に、記憶領域５１ｂからランレングスが１つだけ読み出され、さらに記憶領域５１ｃからランレングスが１つだけ読み出されることになる。
このようにして、パタン信号に基づいて読み出されたランレングスは、それらを連ねた圧縮データとして出力される。
【００４８】
ここで、ランレングスが出力される際の具体例を図１２及び図１３を用いて説明する。ここでは、４ｂｉｔ毎にパッキングされた画素データ群ｇ１，ｇ２，ｇ３，ｇ４，ｇ５，ｇ６，ｇ７，ｇ８・・・に対してランレングス圧縮が施されるものとする。なお、画素データ群ｇ１の画素値を“００００”とし、画素データ群ｇ２の画素値を“０１１１”とし、画素データ群ｇ３の画素値を“０００１”とし、画素データ群ｇ４の画素値を“１１１１”とし、画素データ群ｇ５の画素値を“１１１１”とし、画素データ群ｇ６の画素値を“０００１”とし、画素データ群ｇ７の画素値を“１１００”とし、画素データ群ｇ８の画素値を“００００”とする。
【００４９】
まず、データ変換部１０ａに画素データ群ｇ１が入力されると、画素データ群ｇ１の画素値は“００００”であるから、この段階で特定されるランレングスはないので出力調整部５０ａに供給されるランレングスはなく、出力可能なランレングスがないことを表すパタン信号“０”がデータ変換部１０ａからパタン信号記憶部５２に供給される。次に、データ変換部１０ａに画素データ群ｇ２が入力されると、画素データ群ｇ２の画素値は“０１１１”であるから、画素データ“０”のランレングスが“５”であることが特定されるので、ランレングス“５”がランレングスＬ１として記憶領域５１ａに記憶されるとともに、データ変換部１０ａからパタン信号“１”がパタン信号記憶部５２に供給される。次いで、データ変換部１０ａに画素データ群ｇ３が入力されると、画素データ群ｇ３の画素値は“０００１”であるから、画素データ“１”のランレングスが“３”であることと、画素データ“０”のランレングスが“３”であることが特定される。よって、最初に特定された画素データ“１”のランレングス“３”がランレングスＬ１として記憶領域５１ａに記憶され、次に特定された画素データ“０”のランレングス“３”がランレングスＬ２として記憶領域５１ｂに記憶される。そして、データ変換部１０ａからパタン信号“２”がパタン信号記憶部５２に供給される。
【００５０】
以降、画素データ群がデータ変換部１０ａに入力される毎に、上記と同様の処理が繰り返され、これにより記憶領域５１ａにはランレングス“５，３，９，３・・・”がその順番で記憶され、記憶領域５１ｂにはランレングス“３，３・・・”がその順番で記憶される。そして、パタン信号記憶部５２にはパタン信号値“０，１，２，０，０，２，１”がその順番で記憶されることになる。
【００５１】
上述したようなランレングスを算出する処理が実行されると同時に、出力調整部５０ａによってランレングスを読み出して出力する処理が実行される。まず、最初にパタン信号記憶部５２に読み出されたパタン信号“０”が読み出されてパタン制御部５４に供給される。パタン信号が“０”の場合はランレングスＬ１〜Ｌ３のいずれも読み出す必要はないため、パタン制御部５４は、ランレングスＬ１〜Ｌ３のいずれも読み出す必要はないことを選択部５３に指示する。
【００５２】
次に、パタン信号記憶部５２からパタン信号“１”が読み出されてパタン制御部５４に供給される。パタン制御部５４は、記憶領域５１ａに記憶されたランレングスＬ１を読み出すことを選択部５３に指示する。これにより、記憶領域５１ａに記憶されているランレングスＬ１のうち最も先に記憶領域５１ａに記憶されたランレングス“５”が選択部５３によって読み出される。
【００５３】
次に、パタン信号記憶部５２からパタン信号“２”が読み出される。パタン信号が“２”の場合には、パタン制御部５４によってランレングスＬ１からランレングスを１
つだけ読み出させて、次にランレングスＬ２からランレングスを１つだけ読み出させることが決定される。選択部５３はパタン制御部５４によって決定されたように、記憶領域５１ａに記憶されたランレングスＬ１を選択すると、ランレングスＬ１のうちの最も先に記憶領域５１ａに記憶されたランレングス“３”を読み出す。さらに、選択部５３は、記憶領域５１ｂに記憶されたランレングスＬ２を選択すると、ランレングスＬ２のうちの最も先に記憶領域５１ｂに記憶されたランレングス“３”を読み出す。
【００５４】
このようにして、出力調整部５０ａにランレングスＬ１〜Ｌ３と、パタン信号記憶部５２にパタン信号が供給されるたびに同様の処理が施されることになり、読み出された主走査ライン分のランレングスが連なった圧縮データＬ“５，３，３，９，３，３・・・”が出力されることになる。
【００５５】
この第３実施形態によれば、パッキング単位で画素データ群が入力されて、一度に複数のランレングスが算出された場合にも、パタン信号によって正しい順序でランレングスが読み出されるように制御されており、滞りなく圧縮データを出力させることが可能となる。
【００５６】
なお、上述した実施形態を次のように変形してもよい。
第２実施形態では、８ｂｉｔ毎にパッキングされた画素データ群を４ｂｉｔに変換してからランレングス圧縮を施していたが、これとは異なるｂｉｔ数毎にパッキングされた画素データ群に対しても同様の変換処理を施してもよい。例えば、図１４は、１６ｂｉｔ毎にパッキングされた画素データ群をそれぞれ４ｂｉｔに変換した場合のビット数変換部における処理の過程を示している。図１４において、画素データ群ｇは、画素データｐ１，ｐ２，ｐ３，・・・，ｐ１６によって構成され、これらはｐ１，ｐ２，ｐ３，・・・，ｐ１６という順序でメモリから読み出されて入力される。また、画素データ群ｇの前に入力された画素データ群のうちの最後（１６番目）に入力された画素データが、ビット数変換部６０に備えられたデータ隣接値記憶部２０ａに記憶されており、そこから画素データｂ１６に供給される。よって、ビット数変換部６０は、画素データ群ｇが入力されると、画素データｂ１６を読み出した後に、画素データｐ１６をデータ隣接値記憶部２０ａに供給して記憶させる。
【００５７】
そして、１６ｂｉｔの画素データ群ｇが４ｂｉｔの画素データ群ｇ’に変換される際には、画素データ群ｇを構成する画素データｐ１〜ｐ１６において、隣接する４ｂｉｔずつを一組としてビット数変換を行うことになる。具体的には、画素データ群ｇのうちの先頭の画素データｐ１から４番目の画素データｐ４までを一組とし、同様にして、５番目の画素データｐ５から８番目の画素データｐ８までを一組、９番目の画素データｐ９から１２番目の画素データｐ１２までを一組、１３番目の画素データｐ１３から１６番目の画素データｐ１６までを一組とするといった具合である。また、各々の組の直前の画素データは、それぞれｂ１６，ｐ４，ｐ８，ｐ１２となる。図１５は、各々の組の４ｂｉｔの画素データを１ｂｉｔにする変換方法を記述した変換テーブルを示している。図１５においては、第２実施形態と同様に、画素データの損失をできるだけ小さくして、元の画像に近い画像を再現できるように変換テーブルが記述されている。具体的には、各々の組の４ｂｉｔの画素データ、及びその直前の画素データに着目して、同値の画素データがより多く連続している方の画素データの値に変換しており、すなわち、目立ちやすい方の色が選択されるようにしている。
このようにすれば、第２実施形態よりも主走査ラインを再現させた際の誤差が大きくなるが、データ量がさらに小さくなるため、ランレングス圧縮に要する時間もそれに伴い短縮される。
【００５８】
なお、第１実施形態〜第３実施形態に係るデータ圧縮装置の処理を、ＣＰＵがプログラムを実行することによって実現してもよい。このプログラムは、コンピュータによって読み取り可能な磁気記録媒体、光記録媒体あるいはＲＯＭなどの記録媒体に記録してデータ圧縮装置に提供することができる。また、インターネットのようなネットワーク経由でデータ圧縮装置にダウンロードさせることも可能である。
【図面の簡単な説明】
【００５９】
【図１】本発明の第１実施形態に係るランレングス圧縮の処理の過程を説明する図である。
【図２】同実施形態に係る画像処理装置の構成を示したブロック図である。
【図３】同実施形態に係るランレングス圧縮の処理の過程を説明する図である。
【図４】同実施形態に係るランレングス圧縮の処理の過程を説明する図である。
【図５】第２実施形態に係るランレングス圧縮の処理の過程を説明する図である。
【図６】同実施形態に係る画像処理装置の構成を示したブロック図である。
【図７】同実施形態に係るビット数変換部の処理の過程を説明する図である。
【図８】同実施形態に係る変換テーブルを説明する図である。
【図９】同実施形態に係るランレングス圧縮の処理の過程を説明する図である。
【図１０】第３実施形態に係るランレングス圧縮の処理の過程を説明する図である。
【図１１】同実施形態に係る画像処理装置の構成を示したブロック図である。
【図１２】同実施形態に係る出力調整部の処理の過程を説明する図である。
【図１３】同実施形態に係るパタン制御部の処理の過程を説明する図である。
【図１４】変形例に係るビット数変換部の処理の過程を説明する図である。
【図１５】変形例に係る変換テーブルを説明する図である。
【図１６】従来の技術に係るランレングス圧縮の処理の過程を説明する図である。
【符号の説明】
【００６０】
１，１ａ，１ｂ…データ圧縮装置、１０，１０ａ…データ変換部、２０，２０ａ…データ隣接値記憶部、３０…ランレングス記憶部、４０…加算部、５０…出力部、５０ａ…出力調整部、５１…データ記憶部、５２…パタン信号記憶部、５３…選択部、５４…パタン制御部、６０…ビット数変換部。
【図１】
0004635956.tif 000002
【図２】
0004635956.tif 000003
【図３】
0004635956.tif 000004
【図４】
0004635956.tif 000005
【図５】
0004635956.tif 000006
【図６】
0004635956.tif 000007
【図７】
0004635956.tif 000008
【図８】
0004635956.tif 000009
【図９】
0004635956.tif 000010
【図１０】
0004635956.tif 000011
【図１１】
0004635956.tif 000012
【図１２】
0004635956.tif 000013
【図１３】
0004635956.tif 000014
【図１４】
0004635956.tif 000015
【図１５】
0004635956.tif 000016
【図１６】
0004635956.tif 000017