(57)【要約】【課題】カラー画像データをドット形成有無により表現されたデータに迅速に変換する。【解決手段】隣接する複数の画素を第１種のブロックとしてまとめ、誤差拡散法を適用して行うドット形成有無の判断を、ブロック単位で行う。かかる判断に用いられる色変換後の画像データは、ブロック内でのエッジの有無に応じて圧縮された状態で一旦メモリに記憶しておき、必要に応じてメモリから読み出しながらドット形成の有無を判断する。こうすれば、ブロック単位で行うドット形成有無の判断が複雑化することを避けつつ、迅速に判断することができる。また、画像データはエッジの有無に応じて圧縮されているので、メモリに対して迅速に読み書きし、更に迅速に解凍することができる。このため、カラー画像データを色変換して、ドットの形成有無により表現されたデータに変換する処理を、処理内容を複雑化させることなく、迅速に行うことが可能となる。【選択図】  図１
2004289274.tif 000002
【特許請求の範囲】
【請求項１】
第１の表色系により表現されたカラー画像データを、第２の表色系を構成する各色についてのドットの形成有無によって表現された画像データに変換する画像処理装置であって、
前記第１の表色系により表現されたカラー画像データを前記第２の表色系によるカラー画像データに色変換する色変換手段と、
互いに隣接する画素を所定の複数個ずつ第１種のブロックとしてまとめて、該第１種のブロック内でのエッジの有無を検出するエッジ検出手段と、
前記第１種のブロックに含まれる各画素についての前記色変換後のカラー画像データを、該ブロック内でのエッジの有無に応じて圧縮された状態でメモリに記憶する圧縮データ記憶手段と、
前記圧縮された状態で記憶されたカラー画像データを前記メモリから読み出して解凍した後、互いに隣接する画素を所定の複数個ずつ第２種のブロックとしてまとめる圧縮データ解凍手段と、
前記第２種のブロックとしてまとめられたカラー画像データに基づいて、該ブロックに含まれる各画素についてのドットの形成有無を、前記第２の表色系の各色毎に該ブロック単位で判断するドット形成有無判断手段と
を備える画像処理装置。
【請求項２】
請求項１記載の画像処理装置であって、
前記ドット形成有無判断手段は、前記第２種のブロックを構成する複数の画素の中で、エッジが検出されることなく圧縮されていた複数の画素については、該画素のカラー画像データを均一な画像データとして扱って、前記ドットの形成有無を判断する手段である画像処理装置。
【請求項３】
請求項１記載の画像処理装置であって、
前記エッジ検出手段は、前記第１種のブロック内でのエッジの検出を、該ブロック内の各画素についての前記色変換後のカラー画像データに基づいて行う手段であり、
前記圧縮データ記憶手段は、前記色変換後のカラー画像データを、前記第１種のブロック内でのエッジの有無に応じて圧縮した後、圧縮されたデータを前記メモリに記憶する手段である画像処理装置。
【請求項４】
請求項１記載の画像処理装置であって、
前記エッジ検出手段は、前記第１種のブロック内でのエッジの検出を、該ブロック内の各画素についての前記色変換前のカラー画像データに基づいて行う手段であり、
前記圧縮データ記憶手段は、前記エッジの検出されなかった前記第１種のブロックについて、前記色変換前のカラー画像データを圧縮した後、該圧縮したカラー画像データを前記第２の表色系のカラー画像データに色変換して前記メモリに記憶する手段である画像処理装置。
【請求項５】
請求項４記載の画像処理装置であって、
前記エッジ検出手段は、前記色変換前のカラー画像データに基づいてエッジが検出された前記第１種のブロックについては、前記色変換後のカラー画像データに基づいて再びエッジの検出を行う手段であり、
前記圧縮データ記憶手段は、前記色変換後のカラー画像データに基づいて再びエッジの有無を検出した前記第１種のブロックについては、該エッジの検出結果に応じて該色変換後のカラー画像データを圧縮した後、前記メモリに記憶する手段である画像処理装置。
【請求項６】
請求項１ないし請求項５のいずれかに記載の画像処理装置であって、
前記圧縮データ記憶手段は、エッジを含まない前記第１種のブロックについては、該ブロックに含まれる複数個分の画素の画像データを１画素分の画像データに圧縮して記憶する手段である画像処理装置。
【請求項７】
請求項６記載の画像処理装置であって、
前記圧縮データ記憶手段は、エッジを含まない前記第１種のブロックについては、該ブロックに含まれる複数個分の画素の画像データを、該画像データの平均値に圧縮して記憶する手段である画像処理装置。
【請求項８】
請求項６記載の画像処理装置であって、
前記圧縮データ記憶手段は、エッジを含まない前記第１種のブロックについては、該ブロックに含まれる複数個分の画素の画像データを、該ブロック内から選択された１の画素の画像データに圧縮して記憶する手段である画像処理装置。
【請求項９】
請求項１ないし請求項５のいずれかに記載の画像処理装置であって、
前記圧縮データ記憶手段は、前記第１種のブロック内にエッジが検出された場合には、該ブロックをエッジを含まないサブブロックに分割し、該サブブロックに含まれる画素について前記色変換後の画像データを圧縮した後、前記メモリに記憶する手段である画像処理装置。
【請求項１０】
請求項１ないし請求項５のいずれかに記載の画像処理装置であって、
前記圧縮データ記憶手段は、前記エッジの有無に応じて圧縮された色変換後のカラー画像データとともに、該カラー画像データが圧縮されている状態を表す圧縮情報を前記メモリに記憶する手段である画像処理装置。
【請求項１１】
請求項１ないし請求項５のいずれかに記載の画像処理装置であって、
前記圧縮データ解凍手段は、前記第２種のブロックとして、前記第１種のブロックと同一のブロックにまとめる手段である画像処理装置。
【請求項１２】
請求項１１記載の画像処理装置であって、
前記エッジ検出手段および前記圧縮データ解凍手段は、２行２列に配列された４つの画素を、それぞれ前記第１種のブロックおよび前記第２種のブロックとしてまとめる手段である画像処理装置。
【請求項１３】
第１の表色系により表現されたカラー画像データを、第２の表色系を構成する各色についてのドットの形成有無によって表現された画像データに変換する画像処理装置であって、
前記第１の表色系により表現されたカラー画像データを前記第２の表色系によるカラー画像データに色変換する色変換手段と、
互いに隣接する画素を所定の複数個ずつ第１種のブロックとしてまとめて、該第１種のブロック内でのエッジの有無を検出するエッジ検出手段と、
前記第１種のブロックに含まれる各画素についての前記色変換後のカラー画像データを、該ブロック内でのエッジの有無に応じて圧縮された状態でメモリに記憶する圧縮データ記憶手段と、
前記圧縮された状態で記憶されたカラー画像データを前記メモリから読み出して解凍する圧縮画像データ解凍手段と、
前記解凍されたカラー画像データに基づいて、前記第２の表色系の各色毎にドットの形成有無を判断するドット形成有無判断手段と
を備える画像処理装置。
【請求項１４】
第１の表色系により表現されたカラー画像データを、第２の表色系を構成する各色についてのドットの形成有無によって表現された画像データに変換する画像処理方法であって、
前記第１の表色系により表現されたカラー画像データを前記第２の表色系によるカラー画像データに色変換する工程と、
互いに隣接する画素を所定の複数個ずつ第１種のブロックとしてまとめて、該第１種のブロック内でのエッジの有無を検出する工程と、
前記第１種のブロックに含まれる各画素についての前記色変換後のカラー画像データを、該ブロック内でのエッジの有無に応じて圧縮された状態でメモリに記憶する工程と、
前記圧縮された状態で記憶されたカラー画像データを前記メモリから読み出して解凍した後、互いに隣接する画素を所定の複数個ずつ第２種のブロックとしてまとめる工程と、
前記第２種のブロックとしてまとめられたカラー画像データに基づいて、該ブロックに含まれる各画素についてのドットの形成有無を、前記第２の表色系の各色毎に該ブロック単位で判断する工程と
を備える画像処理方法。
【請求項１５】
第１の表色系により表現されたカラー画像データを、第２の表色系を構成する各色についてのドットの形成有無によって表現された画像データに変換する画像処理方法であって、
前記第１の表色系により表現されたカラー画像データを前記第２の表色系によるカラー画像データに色変換する工程と、
互いに隣接する画素を所定の複数個ずつ第１種のブロックとしてまとめて、該第１種のブロック内でのエッジの有無を検出する工程と、
前記第１種のブロックに含まれる各画素についての前記色変換後のカラー画像データを、該ブロック内でのエッジの有無に応じて圧縮された状態でメモリに記憶する工程と、
前記圧縮された状態で記憶されたカラー画像データを前記メモリから読み出して解凍する工程と、
前記解凍されたカラー画像データに基づいて、前記第２の表色系の各色毎にドットの形成有無を判断する工程と
を備える画像処理方法。
【請求項１６】
第１の表色系により表現されたカラー画像データを、第２の表色系を構成する各色についてのドットの形成有無によって表現された画像データに変換する方法を、コンピュータを用いて実現するためのプログラムであって、
前記第１の表色系により表現されたカラー画像データを前記第２の表色系によるカラー画像データに色変換する機能と、
互いに隣接する画素を所定の複数個ずつ第１種のブロックとしてまとめて、該第１種のブロック内でのエッジの有無を検出する機能と、
前記第１種のブロックに含まれる各画素についての前記色変換後のカラー画像データを、該ブロック内でのエッジの有無に応じて圧縮された状態でメモリに記憶する機能と、
前記圧縮された状態で記憶されたカラー画像データを前記メモリから読み出して解凍した後、互いに隣接する画素を所定の複数個ずつ第２種のブロックとしてまとめる機能と、
前記第２種のブロックとしてまとめられたカラー画像データに基づいて、該ブロックに含まれる各画素についてのドットの形成有無を、前記第２の表色系の各色毎に該ブロック単位で判断する機能と
を実現するプログラム。
【請求項１７】
第１の表色系により表現されたカラー画像データを、第２の表色系を構成する各色についてのドットの形成有無によって表現された画像データに変換する方法を、コンピュータを用いて実現するためのプログラムであって、
前記第１の表色系により表現されたカラー画像データを前記第２の表色系によるカラー画像データに色変換する機能と、
互いに隣接する画素を所定の複数個ずつ第１種のブロックとしてまとめて、該第１種のブロック内でのエッジの有無を検出する機能と、
前記第１種のブロックに含まれる各画素についての前記色変換後のカラー画像データを、該ブロック内でのエッジの有無に応じて圧縮された状態でメモリに記憶する機能と、
前記圧縮された状態で記憶されたカラー画像データを前記メモリから読み出して解凍する機能と、
前記解凍されたカラー画像データに基づいて、前記第２の表色系の各色毎にドットの形成有無を判断する機能と
を実現するプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、カラー画像データを変換する技術に関し、詳しくは、第１の表色系による画像データを第２の表色系の画像データに色変換した後、該色変換後のデータを、ドット形成の有無による表現形式の画像データに変換する技術に関する。
【０００２】
【従来の技術】
インクジェットプリンタなど、印刷媒体上にドットを形成して画像を印刷する印刷装置は、コンピュータやデジタルカメラなどの画像機器の出力装置として広く使用されている。また近年では、液晶や有機ＬＥＤなどの画面上に輝点を形成して画像を表示する画像表示装置も、こうした出力装置として使用され始めており、今後は、広く使用されるようになるものと考えられる。
【０００３】
コンピュータやデジタルカメラ上の画像を、これら出力装置を用いて表示するためには、画像データに、色変換処理およびハーフトーン処理と呼ばれる画像処理を施しておく必要がある。これは、画像データを作成する側（コンピュータなど）と画像データに基づいて画像を表示する側（印刷装置など）とで、カラー画像データの表現方法が以下のように異なっているためである。
【０００４】
先ず、コンピュータなどと印刷装置などとでは、色相を表現するための方式が異なっている。すなわち、コンピュータなどでは、Ｒ（赤色）、Ｇ（緑色）、Ｂ（青色）を組み合わせて色相を表現するのに対して、印刷装置ではＣ（シアン色）、Ｍ（マゼンタ色）、Ｙ（イエロ色）を基本とする組合せを用いて色相を表現する。このように、ＲＧＢ各色を用いた色相の表現形式はＲＧＢ表色系と呼ばれることがある。これに対して、ＣＭＹの各色を基本として用いた色相の表現形式はＣＭＹ表色系と呼ばれることがある。また、液晶や有機ＬＥＤなど、コンピュータなどと同じくＲＧＢ表色系を採用している場合でも詳しく見れば、ほとんどの場合は、ＲＧＢ各色の色目が微妙に異なっている。従って、同じＲＧＢ表色系を採用している場合でも、色目の違いを補正するために、カラー画像データの変換が必要となる。このように、コンピュータやデジタルカメラなどのカラー画像を正しい色相で表現するためには、コンピュータなどの側で採用されている表色系により表現されたカラー画像データを、印刷装置などの側で採用されている表色系によるカラー画像データに変換する必要がある。色変換処理とは、こうした変換を行う処理である。
【０００５】
また、コンピュータなどと印刷装置などとでは、階調の表現方法も異なっている。すなわち、コンピュータなどでは、画像の最小単位である画素が、それ単独で多階調を表現可能であり、例えば１バイトの画像データであれば、個々の画素が単独で２５６階調を表現することが可能である。これに対して、印刷装置や画像表示装置では、基本的には、ドットまたは輝点を形成するか否かの２つの状態しか取り得ず、従って、ドットや輝点の形成密度を変えることによって擬似的に階調を表現する方法が主に用いられる。このことから、画素毎に多階調を表現可能な画像データ（階調画像データ）を、擬似的に階調を表現した画像データ（擬似階調画像データ）に変換する処理が必要となる。ハーフトーン処理とは、こうした変換を行う処理である。
【０００６】
ハーフトーン処理の手法には種々の手法が提案されているが、代表的なものに「誤差拡散法」と呼ばれる手法がある。誤差拡散法は、着目画素にドットを形成したこと、あるいはドットを形成しなかったことによって生じる階調表現の誤差を、着目画素周辺の未判断画素に拡散して記憶しておき、未判断画素についてのドット形成有無を判断するにあたっては、周辺画素から拡散されてきた誤差を解消するように、ドットの形成有無を判断する手法である。誤差拡散法では、このように周辺画素で発生した階調表現の誤差を解消しながらハーフトーン処理を行うために、変換により発生する誤差を抑制して画像データを精度良く変換することが可能である。もっとも、誤差拡散法では、誤差を周辺の画素に拡散するたびに、メモリに対する読み出しおよび書き込みが発生するため、処理に時間がかかり、従って、画像の表示に時間がかかってしまう傾向がある。
【０００７】
こうした誤差拡散法の欠点を補いながら、カラー画像データに色変換処理と、誤差拡散法によるハーフトーン処理とを行う場合、それぞれに着眼点の異なった大きく３つの方式が考えられる。
【０００８】
先ず、第１の方式は、色変換処理と、誤差拡散法によるハーフトーン処理とを１画素毎に行う方式である。すなわち、処理する画素を１つ選択して、色変換処理とハーフトーン処理とを続けて行った後、ハーフトーン結果をメモリに記憶する。１つの画素についての処理が終了したら、また新たな画素を１つ選択して、色変換処理とハーフトーン処理とを行って、ハーフトーン結果をメモリに蓄えていく。こうした第１の方式によれば、色変換処理に続けてハーフトーン処理を行っているので、色変換処理の結果は一時的なメモリ、すなわち中央演算装置（ＣＰＵ）内のレジスタやキャッシュメモリなどの高速に読み書き可能なメモリに記憶することが可能となる。第１の方式は、一時的なメモリを活用することによって画像処理の高速化を図ろうとするものである。
【０００９】
第２の方式は、初めに色変換処理をまとめて行い、その後でハーフトーン処理を行う方式である。例えば、表示しようとしている画像の全画素について、あるいは画像中の１列分の画素について、初めに色変換処理を行って処理結果をメモリに記憶しておき、その後、色変換結果をメモリから読み出してハーフトーン処理を行う。第２の方式では、色変換処理だけを連続して行い、その後、ハーフトーン処理だけを連続して行う。このように同じ処理を連続して行うことにより、処理内容の簡素化あるいは並列化などの効果によって、画像処理の高速化を図ろうとするものである。
【００１０】
第３の方式は、第１の方式と第２の方式との中間的な方式であり、色変換処理とハーフトーン処理とを数画素単位で行う方式である（特許文献１）。例えば、縦横２列ずつの４つの画素を１組として、組単位で色変換処理とハーフトーン処理とを行う。このように、数画素単位で処理するのであれば、色変換処理の結果を、高速に読み書き可能な一時的なメモリに記憶しておくことが可能である。また、数画素分については同じ処理を続けて行うことになるので、この点では、第２の方式と同様な効果を狙ったものと考えることもできる。
【００１１】
【特許文献１】
特開２００２−１８５７８８号公報
【００１２】
【発明が解決しようとする課題】
しかし、これら方式は次のような課題を有しており、いずれも画像処理を充分に迅速化するには到っていないと言う問題があった。先ず、第１の方式では、処理内容がめまぐるしく切り換わるために、ハーフトーン処理が複雑となり高速化を図ることが困難である。すなわち、第１の方式では、色変換後、処理内容が直ちにハーフトーン処理に切り換わる。更にハーフトーン処理の内部でも、対象とする色成分が次々に切り換わることになる。結局、１画素毎にこうしてめまぐるしく処理を切換ながら画像処理を行うことになってしまうので、処理が複雑となり、高速化を図ることが困難となる。
【００１３】
第２の方式では、色変換処理をまとめて行い、ハーフトーン処理も色成分毎にまとめて行うことができるので、第１の方式のように、処理内容がめまぐるしく切り換わることはない。しかし、第２の方式では、色変換処理の結果を記憶しておくために大きなメモリ容量が必要となるので、色変換結果は、レジスタやキャッシュメモリなどのような一時的なメモリではなく、ハードディスクやＲＡＭなどの通常のメモリ上に記憶されることになる。このため、第２の方式では、通常のメモリに対して多量のデータを読み書きしながら画像処理を行うことになり、そのために時間がかかってしまうので高速処理が困難となる。
【００１４】
更に、第３の方式では、数画素については、色成分毎にハーフトーン処理を行うことができるので、第１の方式に比べれば、処理内容が切り換わる頻度を抑制することができる。しかし、切り換えを抑制することによる効果は、数画素をまとめた程度では小さい上に、実際には、数画素ずつハーフトーン処理するために処理内容が複雑化してしまうでの、充分な高速化を図ることは困難となっている。
【００１５】
この発明は、従来技術における上述の課題を解決するためになされたものであり、画像処理を複雑化させることなく、更なる迅速化が可能な技術を提供することを目的とする。
【００１６】
【課題を解決するための手段およびその作用・効果】
上述の課題の少なくとも一部を解決するため、本発明の第１の画像処理装置は、次の構成を採用した。すなわち、
第１の表色系により表現されたカラー画像データを、第２の表色系を構成する各色についてのドットの形成有無によって表現された画像データに変換する画像処理装置であって、
前記第１の表色系により表現されたカラー画像データを前記第２の表色系によるカラー画像データに色変換する色変換手段と、
互いに隣接する画素を所定の複数個ずつ第１種のブロックとしてまとめて、該第１種のブロック内でのエッジの有無を検出するエッジ検出手段と、
前記第１種のブロックに含まれる各画素についての前記色変換後のカラー画像データを、該ブロック内でのエッジの有無に応じて圧縮された状態でメモリに記憶する圧縮データ記憶手段と、
前記圧縮された状態で記憶されたカラー画像データを前記メモリから読み出して解凍した後、互いに隣接する画素を所定の複数個ずつ第２種のブロックとしてまとめる圧縮データ解凍手段と、
前記第２種のブロックとしてまとめられたカラー画像データに基づいて、該ブロックに含まれる各画素についてのドットの形成有無を、前記第２の表色系の各色毎に該ブロック単位で判断するドット形成有無判断手段と
を備えることを要旨とする。
【００１７】
また、上記の画像処理装置に対応する本発明の第１の画像処理方法は、
第１の表色系により表現されたカラー画像データを、第２の表色系を構成する各色についてのドットの形成有無によって表現された画像データに変換する画像処理方法であって、
前記第１の表色系により表現されたカラー画像データを前記第２の表色系によるカラー画像データに色変換する工程と、
互いに隣接する画素を所定の複数個ずつ第１種のブロックとしてまとめて、該第１種のブロック内でのエッジの有無を検出する工程と、
前記第１種のブロックに含まれる各画素についての前記色変換後のカラー画像データを、該ブロック内でのエッジの有無に応じて圧縮された状態でメモリに記憶する工程と、
前記圧縮された状態で記憶されたカラー画像データを前記メモリから読み出して解凍した後、互いに隣接する画素を所定の複数個ずつ第２種のブロックとしてまとめる工程と、
前記第２種のブロックとしてまとめられたカラー画像データに基づいて、該ブロックに含まれる各画素についてのドットの形成有無を、前記第２の表色系の各色毎に該ブロック単位で判断する工程と
を備えることを要旨とする。
【００１８】
かかる第１の画像処理装置および第１の画像処理方法においては、ドット形成有無の判断を、ブロック単位で行うことにより迅速に行うことができる。ドット形成有無を判断するための手法としては、誤差拡散法やディザ法などの周知の方法を適用することができる。こうしたドット形成の有無を判断するために用いられる色変換後の画像データは、圧縮された状態で一旦メモリに記憶されており、必要に応じてメモリから読み出しながらドット形成の有無が判断される。このため、ドット形成有無の判断をブロック単位で行うにも関わらず、処理が複雑化することがない。また、互いに隣接する画素を所定の複数個ずつ、第１種のブロックとしてまとめ、該ブロック内でのエッジの有無を検出した後、エッジの有無に応じて画像データを圧縮しているので、画像データの圧縮および解凍を迅速に行うことができる。このように、上記の画像処理装置および画像処理方法によれば、カラー画像データを色変換して、ドットの形成有無により表現されたデータに変換する処理を、処理の複雑化を伴うことなく、迅速に行うことが可能となる。
【００１９】
こうした第１の画像処理装置および画像処理方法においては、前記第２種のブロックを構成する各画素についてドット形成有無を判断するに際して、次のようにして判断しても良い。該第２種のブロックを構成する複数の画素の中で、第１種のブロックにエッジが含まれないとして圧縮されていた画素については、これら画素のカラー画像データを均一のデータとして扱って、ドット形成の有無を判断することとしても良い。ここで、均一な画像データとしては、これら複数の画素の中の１の画素についてのデータを用いても良いし、あるいはブロック内のデータの平均値を用いても良い。
【００２０】
第２種のブロックを構成する画素の中、元々、エッジのないブロックに含まれているとして圧縮されていた画素については、画像データは近い値を取るものと考えられる。一方、ドット形成の有無を判断する際に、複数の画素の画像データを均一なデータとして扱うことができれば、ドット形成の有無を判断する処理の迅速化を図ることとが可能である。従って、エッジが検出されないものとして圧縮されていた画素については、これら画素のデータを均一なデータとして扱うことで、画質に悪影響を与えることなく処理を迅速化することが可能となるので好適である。
【００２１】
また、画像処理装置および画像処理方法においては、前記第１種のブロックに含まれる各画素について、色変換後のカラー画像データに基づいてエッジの有無を検出し、該ブロック内でのエッジの有無に応じて、色変換後のカラー画像データを圧縮して前記メモリに記憶することとしても良い。
【００２２】
メモリに記憶されるカラー画像データは色変換後の画像データであるから、こうして色変換後の画像データに基づいてエッジを検出し、画像データを圧縮してやれば、第２の表色系を構成する各色毎に確実にエッジを検出して圧縮することが可能となるので好ましい。
【００２３】
あるいは、前記第１種のブロックに含まれる各画素について、色変換前のカラー画像データに基づいてエッジの有無を検出し、エッジの検出されなかったブロックについては、色変換前の画像データを圧縮することとしても良い。こうして、圧縮後のカラー画像データを色変換し、得られた画像データを前記メモリに記憶する。
【００２４】
こうすれば、エッジの検出されなかったブロックについては、該ブロックに含まれる画素をまとめて色変換することができるので、それだけ迅速に色変換を行うことができ、延いては画像処理を迅速に行うことが可能となる。
【００２５】
更に、色変換前のカラー画像データに基づいてエッジの存在が検出された前記第１種のブロックについては、色変換後のカラー画像データに基づいて再びエッジの有無を各色毎に検出することとしても良い。そして、該エッジの検出結果に応じて、色変換後のカラー画像データを圧縮した後、該圧縮した画像データを前記メモリに記憶する。
【００２６】
こうすれば、色変換前に圧縮されなかったカラー画像データについても、色変換後の画像データに基づいて圧縮することができるので、画像データの圧縮率を向上させることができる。その結果、色変換後のカラー画像データを、前記メモリに対して迅速に読み書きすることが可能となり、延いては画像処理を高速化することができるので好ましい。
【００２７】
上述した第１の画像処理装置および画像処理方法においては、前記第１種のブロック内でエッジが検出されなかった場合は、該ブロック内に含まれる複数画素の画像データを、１画素分の画像データに圧縮して記憶することとしても良い。また、かかる圧縮に際しては、複数画素の中から１の画素を選択して、選択した画素の画像データに圧縮しても良いし、あるいは、複数画素についての画像データの平均値を算出して、複数画素分の画像データを得られた平均値に圧縮することとしても良い。
【００２８】
こうした方法によれば、複数画素の画像データを迅速に且つ効率よく圧縮することが可能であり、また、圧縮された画像データを迅速に解凍することが可能となるので好適である。
【００２９】
あるいは、上述した第１の画像処理装置および画像処理方法においては、前記第１種のブロック内にエッジの存在が検出された場合には、該ブロックをエッジを含まないサブブロックに分割し、該サブブロックに含まれる画素について前記色変換後の画像データを圧縮した後、該圧縮された画像データを前記メモリに記憶することとしても良い。
【００３０】
こうして前記第１種のブロック内にエッジが検出された場合には、サブブロック単位でカラー画像データを圧縮してやれば、画像データの圧縮率を更に向上させることが可能となり、延いては、画像処理を高速化することが可能となるので好ましい。
【００３１】
更に、こうした各種の画像処理装置および画像処理方法においては、色変換後のカラー画像データを圧縮された状態で前記メモリに記憶するとともに、該画像データが圧縮されている状態を表す圧縮情報も、該メモリに記憶することとしても良い。
【００３２】
こうして圧縮された画像データとともに、圧縮情報を記憶しておけば、画像データを簡便に解凍することが可能となるので好ましい。
【００３３】
また、上述した第１の画像処理装置および画像処理方法においては、画像データを圧縮する際に用いられる前記第１種のブロックと、ドット形成有無を判断する際に用いられる前記第２種のブロックとを、同一のブロックとしても良い。
【００３４】
前記第１種のブロックと前記第２種のブロックとを同一のブロックとしておけば、圧縮されたカラー画像データを前記メモリから読み出して解凍する処理を簡素なものとすることができる。このため、画像処理を迅速に行うことが可能となるので好適である。
【００３５】
特に、前記第１種のブロックおよび前記第２種のブロックを、いずれも２行２列に配列された４つの画素から構成することとしても良い。
【００３６】
これらブロックに含まれる画素があまりに多くなると、エッジが含まれる確率が高くなったり、画像処理が複雑となる。かといって、ブロックに含まれる画素があまりに少ないのでは、ブロック内のカラー画像データを圧縮しても、データ量がそれほど小さくならず、また、ドット形成有無の判断をブロック単位で行うことによるメリットも小さいので、画像処理を十分に迅速化することが困難となる。こうした観点から、２行２列に配列された４つの画素を第１種のブロックおよび第２種のブロックとしてまとめてやれば、画像処理を複雑化させることなく、処理速度を効果的に向上させることができる。
【００３７】
また、上述した課題の少なくとも一部を解決するために、本発明の第２の画像処理装置は、次の構成を採用した。すなわち、
第１の表色系により表現されたカラー画像データを、第２の表色系を構成する各色についてのドットの形成有無によって表現された画像データに変換する画像処理装置であって、
前記第１の表色系により表現されたカラー画像データを前記第２の表色系によるカラー画像データに色変換する色変換手段と、
互いに隣接する画素を所定の複数個ずつ第１種のブロックとしてまとめて、該第１種のブロック内でのエッジの有無を検出するエッジ検出手段と、
前記第１種のブロックに含まれる各画素についての前記色変換後のカラー画像データを、該ブロック内でのエッジの有無に応じて圧縮された状態でメモリに記憶する圧縮データ記憶手段と、
前記圧縮された状態で記憶されたカラー画像データを前記メモリから読み出して解凍する圧縮画像データ解凍手段と、
前記解凍されたカラー画像データに基づいて、前記第２の表色系の各色毎にドットの形成有無を判断するドット形成有無判断手段と
を備えることを要旨とする。
【００３８】
また、上記の画像処理装置に対応する本発明の第２の画像処理方法は、
第１の表色系により表現されたカラー画像データを、第２の表色系を構成する各色についてのドットの形成有無によって表現された画像データに変換する画像処理方法であって、
前記第１の表色系により表現されたカラー画像データを前記第２の表色系によるカラー画像データに色変換する工程と、
互いに隣接する画素を所定の複数個ずつ第１種のブロックとしてまとめて、該第１種のブロック内でのエッジの有無を検出する工程と、
前記第１種のブロックに含まれる各画素についての前記色変換後のカラー画像データを、該ブロック内でのエッジの有無に応じて圧縮された状態でメモリに記憶する工程と、
前記圧縮された状態で記憶されたカラー画像データを前記メモリから読み出して解凍する工程と、
前記解凍されたカラー画像データに基づいて、前記第２の表色系の各色毎にドットの形成有無を判断する工程と
を備えることを要旨とする。
【００３９】
こうした第２の画像処理装置および画像処理方法においても、色変換後の画像データを圧縮された状態で一旦メモリに記憶しておく。そして、ドット形成の有無を判断する際には、必要に応じてメモリから読み出したデータを解凍しながら判断する。こうすれば、カラー画像データを色変換して、ドットの形成有無により表現されたデータに変換する処理を、処理の複雑化を伴うことなく、迅速に行うことが可能となる。
【００４０】
更に本発明は、上述した画像処理を実現するためのプログラムをコンピュータに読み込ませることにより、コンピュータを用いて実現することも可能である。従って、本発明は、次のようなプログラムあるいは該プログラムを記録した記録媒体として把握することもできる。すなわち、上述した第１の画像処理方法に対応する本発明の第１のプログラムは、
第１の表色系により表現されたカラー画像データを、第２の表色系を構成する各色についてのドットの形成有無によって表現された画像データに変換する方法を、コンピュータを用いて実現するためのプログラムであって、
前記第１の表色系により表現されたカラー画像データを前記第２の表色系によるカラー画像データに色変換する機能と、
互いに隣接する画素を所定の複数個ずつ第１種のブロックとしてまとめて、該第１種のブロック内でのエッジの有無を検出する機能と、
前記第１種のブロックに含まれる各画素についての前記色変換後のカラー画像データを、該ブロック内でのエッジの有無に応じて圧縮された状態でメモリに記憶する機能と、
前記圧縮された状態で記憶されたカラー画像データを前記メモリから読み出して解凍した後、互いに隣接する画素を所定の複数個ずつ第２種のブロックとしてまとめる機能と、
前記第２種のブロックとしてまとめられたカラー画像データに誤差拡散法を適用して、該ブロックに含まれる各画素についてのドットの形成有無を、前記第２の表色系の各色毎に該ブロック単位で判断する機能と
を実現することを要旨とする。
【００４１】
また、上述した第１の画像処理方法に対応する本発明の第１の記録媒体は、
第１の表色系により表現されたカラー画像データを、第２の表色系を構成する各色についてのドットの形成有無によって表現された画像データに変換する方法を、コンピュータを用いて実現するためのプログラムを記録した記録媒体であって、
前記第１の表色系により表現されたカラー画像データを前記第２の表色系によるカラー画像データに色変換する機能と、
互いに隣接する画素を所定の複数個ずつ第１種のブロックとしてまとめて、該第１種のブロック内でのエッジの有無を検出する機能と、
前記第１種のブロックに含まれる各画素についての前記色変換後のカラー画像データを、該ブロック内でのエッジの有無に応じて圧縮された状態でメモリに記憶する機能と、
前記圧縮された状態で記憶されたカラー画像データを前記メモリから読み出して解凍した後、互いに隣接する画素を所定の複数個ずつ第２種のブロックとしてまとめる機能と、
前記第２種のブロックとしてまとめられたカラー画像データに誤差拡散法を適用して、該ブロックに含まれる各画素についてのドットの形成有無を、前記第２の表色系の各色毎に該ブロック単位で判断する機能と
を、コンピュータで読み取り可能に記録したことを要旨とする。
【００４２】
更に、上述した第２の画像処理方法に対応する本発明の第２のプログラムは、第１の表色系により表現されたカラー画像データを、第２の表色系を構成する各色についてのドットの形成有無によって表現された画像データに変換する方法を、コンピュータを用いて実現するためのプログラムであって、
前記第１の表色系により表現されたカラー画像データを前記第２の表色系によるカラー画像データに色変換する機能と、
互いに隣接する画素を所定の複数個ずつ第１種のブロックとしてまとめて、該第１種のブロック内でのエッジの有無を検出する機能と、
前記第１種のブロックに含まれる各画素についての前記色変換後のカラー画像データを、該ブロック内でのエッジの有無に応じて圧縮された状態でメモリに記憶する機能と、
前記圧縮された状態で記憶されたカラー画像データを前記メモリから読み出して解凍する機能と、
前記解凍されたカラー画像データに基づいて、前記第２の表色系の各色毎にドットの形成有無を判断する機能と
を実現することを要旨とする。
【００４３】
また、上述した第２の画像処理方法に対応する本発明の第２の記録媒体は、
第１の表色系により表現されたカラー画像データを、第２の表色系を構成する各色についてのドットの形成有無によって表現された画像データに変換する方法を、コンピュータを用いて実現するためのプログラムを記録した記録媒体であって、
前記第１の表色系により表現されたカラー画像データを前記第２の表色系によるカラー画像データに色変換する機能と、
互いに隣接する画素を所定の複数個ずつ第１種のブロックとしてまとめて、該第１種のブロック内でのエッジの有無を検出する機能と、
前記第１種のブロックに含まれる各画素についての前記色変換後のカラー画像データを、該ブロック内でのエッジの有無に応じて圧縮された状態でメモリに記憶する機能と、
前記圧縮された状態で記憶されたカラー画像データを前記メモリから読み出して解凍する機能と、
前記解凍されたカラー画像データに基づいて、前記第２の表色系の各色毎にドットの形成有無を判断する機能と
を実現することを要旨とする。
【００４４】
こうしたプログラム、あるいは記録媒体に記憶されているプログラムをコンピュータに読み込ませ、該コンピュータを用いて上述の各種機能を実現すれば、画像処理を複雑化することなく、迅速にカラー画像データを変換することが可能となる。
【００４５】
【発明の実施の形態】
本発明の作用・効果をより明確に説明するために、本発明の実施の形態を、次のような順序に従って以下に説明する。
Ａ．発明の概要：
Ｂ．第１実施例：
Ｂ−１．装置構成：
Ｂ−２．画像処理の概要：
Ｂ−３．第１実施例の色変換・圧縮処理：
Ｂ−４．ハーフトーン処理の概要：
Ｃ．第２実施例：
Ｄ．第３実施例：
Ｅ．変形例：
【００４６】
Ａ．発明の概要：
実施例の詳細な説明を開始する前に、理解の便宜から、発明の概要について簡単に説明しておく。図１は、印刷システムを例にとって、本発明の概要を例示した説明図である。本印刷システムは、画像処理装置としてのコンピュータ１０と、カラープリンタ２０等から構成されている。コンピュータ１０は、デジタルカメラやカラースキャナなどの画像機器からＲＧＢカラー画像の階調画像データを受け取ると、該カラー画像データに所定の画像処理を施すことにより、カラープリンタ２０で印刷可能な各色ドットの形成有無により表現された印刷データに変換する。かかる画像処理は、プリンタドライバ１２と呼ばれる専用のプログラムを用いて行われる。尚、ＲＧＢカラー画像データは、各種アプリケーションプログラムを用いてコンピュータ１０で作成することもできる。
【００４７】
図１に例示のプリンタドライバ１２は、色変換・圧縮モジュール、エッジ検出モジュール、ハーフトーンモジュールなどの複数のモジュールから構成されている。色変換・圧縮モジュールは、解像度が変換されたＲＧＢ画像データを受け取り、これをカラープリンタ２０が形成可能なドットの色、すなわちシアン（Ｃ）色、マゼンタ（Ｍ）色、イエロ（Ｙ）色の各色、あるいはこれに黒（Ｋ）色を加えた各色により表現されたＣＭＹ画像データに色変換する。色変換に先立って、画像データの解像度をカラープリンタ２０が印刷するための解像度に変換しておくなど、必要に応じて前処理を施しておくこととしても良い。色変換後の画像データは、隣接する画素を所定の複数個ずつブロックとしてまとめて圧縮した後、このデータをメモリに記憶する。あるいは、後述するように色変換前に圧縮しておき、圧縮した状態で色変換することとしてもよい。画像データの圧縮に際しては、ブロック内にエッジが存在するか否かを検出し、この検出結果に応じて圧縮する。エッジの検出は、エッジ検出モジュールによって行われる。エッジの検出結果に応じた圧縮の詳細については、後述の各実施例において説明する。
【００４８】
ハーフトーンモジュールは、圧縮して記憶されている画像データをメモリから読み出して、隣接する画素を複数個ずつブロックとしてまとめた後、ブロック内に含まれる各画素についてドットの形成有無をブロック単位で行う。ここで、ハーフトーンモジュールが生成するブロックは、色変換・圧縮モジュールが生成するブロックと同一である必要はなく、例えば、ハーフトーンモジュールが生成するブロックと色変換・圧縮モジュールが生成するブロックとで、画素数を異ならせることも可能である。また、ドットの形成有無をブロック単位で行う方法についても、後述する方法を初めとして種々の方法を適用することができる。こうして、色変換によって生成した各色の画像データにハーフトーン処理を加えた後、得られたデータを印刷データとしてカラープリンタ２０に出力する。カラープリンタ２０への出力に先立って、プリンタがドットを形成する順番を考慮してデータの順番を並べ替えるなど、必要に応じて後処理を施すこととしてもよい。カラープリンタ２０は、こうして得られた印刷データに基づいて、印刷媒体上に各色インクドットを形成することによってカラー画像を印刷する。
【００４９】
以上に説明した画像処理装置は、色変換後の画像データを圧縮してメモリに一旦記憶しておき、画像データを必要に応じてメモリから読み出して解凍してからハーフトーン処理を行う。ハーフトーン処理は複数画素ずつブロック単位で行っているので、迅速な処理が可能である。また、ハーフトーン処理では、必要に応じて画像データをメモリから読み出して処理しているので、ブロック単位で処理を行うにも関わらず、ハーフトーン処理を大幅に簡素化することができる。もちろん、画像データを圧縮したり解凍する処理や、画像データをメモリに対して読み書きする処理が新たに発生するが、後述するように、ブロック内でのエッジの有無に応じて圧縮することとすれば、極めて迅速に画像データを圧縮および解凍することが可能である。また、こうして圧縮された画像データを扱うことにより、メモリへの読み書きも極めて迅速に行うことができる。このため、本発明の画像処理によれば、処理内容を簡素化しつつ、画像処理全体としての処理速度を向上させることが可能となるのである。以下では、こうした画像処理の詳細について、実施例に基づき説明する。
【００５０】
Ｂ．第１実施例：
Ｂ−１．装置構成：
図２は、本実施例の画像処理装置としてのコンピュータ１００の構成を示す説明図である。コンピュータ１００は、ＣＰＵ１０２を中心に、ＲＯＭ１０４や、上述のメモリとして使用されるＲＡＭ１０６などを、バス１１６で互いに接続して構成された周知のコンピュータである。ＣＰＵ１０２には、演算器やレジスタ、キャッシュなどが搭載されている。レジスタやキャッシュは、データを記憶する点ではＲＡＭ１０６と同じメモリの一種であるが、ＲＡＭ１０６に比べてデータを遙かに高速に読み書きすることができる。
【００５１】
コンピュータ１００には、フレキシブルディスク１２４やコンパクトディスク１２６のデータを読み込むためのディスクコントローラＤＤＣ１０９や、周辺機器とデータの授受を行うための周辺機器インターフェースＰ−Ｉ／Ｆ１０８、ＣＲＴ１１４を駆動するためのビデオインターフェースＶ−Ｉ／Ｆ１１２等が接続されている。Ｐ−Ｉ／Ｆ１０８には、後述するカラープリンタ２００や、ハードディスク１１８等が接続されている。また、デジタルカメラ１２０やカラースキャナ１２２等をＰ−Ｉ／Ｆ１０８に接続すれば、デジタルカメラ１２０やカラースキャナ１２２で取り込んだ画像を印刷することも可能である。また、ネットワークインターフェースカードＮＩＣ１１０を装着すれば、コンピュータ１００を通信回線３００に接続して、通信回線に接続された記憶装置３１０に記憶されているデータを取得することもできる。
【００５２】
図３は、第１実施例のカラープリンタ２００の概略構成を示す説明図である。カラープリンタ２００はシアン，マゼンタ，イエロ，ブラックの４色インクのドットを形成可能なインクジェットプリンタである。もちろん、これら４色のインクに加えて、染料濃度の低いシアン（淡シアン）インクと染料濃度の低いマゼンタ（淡マゼンタ）インクとを含めた合計６色のインクドットを形成可能なインクジェットプリンタを用いることもできる。尚、以下では場合によって、シアンインク，マゼンタインク，イエロインク，ブラックインク，淡シアンインク，淡マゼンタインクのそれぞれを、Ｃインク，Ｍインク，Ｙインク，Ｋインク，ＬＣインク，ＬＭインクと略称することがあるものとする。
【００５３】
カラープリンタ２００は、図示するように、キャリッジ２４０に搭載された印字ヘッド２４１を駆動してインクの吐出およびドットの形成を行う機構と、このキャリッジ２４０をキャリッジモータ２３０によってプラテン２３６の軸方向に往復動させる機構と、紙送りモータ２３５によって印刷用紙Ｐを搬送する機構と、ドットの形成やキャリッジ２４０の移動および印刷用紙の搬送を制御する制御回路２６０とから構成されている。
【００５４】
キャリッジ２４０には、Ｋインクを収納するインクカートリッジ２４２と、Ｃインク，Ｍインク，Ｙインクの各種インクを収納するインクカートリッジ２４３とが装着されている。キャリッジ２４０にインクカートリッジ２４２，２４３を装着すると、カートリッジ内の各インクは図示しない導入管を通じて、印字ヘッド２４１の下面に設けられた各色毎のインク吐出用ヘッド２４４ないし２４７に供給される。各色毎のインク吐出用ヘッド２４４ないし２４７には、４８個のノズルＮｚ  が一定のノズルピッチｋで配列されたノズル列が１組ずつ設けられている。
【００５５】
制御回路２６０は、ＣＰＵ２６１と、ＲＯＭ２６２、ＲＡＭ２６３等から構成されている。制御回路２６０は、キャリッジモータ２３０と紙送りモータ２３５とを適切に駆動する。これにより、キャリッジ２４０の主走査と副走査とが制御される。また、制御回路２６０は、コンピュータ１００から供給される印刷データに基づいて、各ノズルから適切なタイミングでインク滴を吐出する制御も司っている。こうして、制御回路２６０の制御の下、印刷媒体上の適切な位置に各色のインクドットを形成することによって、カラープリンタ２００はカラー画像を印刷することができる。
【００５６】
尚、各色のインク吐出ヘッドからインク滴を吐出する方法には、種々の方法を適用することができる。すなわち、ピエゾ素子を用いてインクを吐出する方式や、インク通路に配置したヒータでインク通路内に泡（バブル）を発生させてインク滴を吐出する方法などを用いることができる。また、インクを吐出する代わりに、熱転写などの現象を利用して印刷用紙上にインクドットを形成する方式や、静電気を利用して各色のトナー粉を印刷媒体上に付着させる方式のプリンタを使用することも可能である。
【００５７】
更には、吐出するインク滴の大きさを制御したり、あるいは一度に複数のインク滴を吐出して、吐出するインク滴の数を制御することにより、印刷用紙上に形成されるインクドットの大きさを制御可能な、いわゆるバリアブルドットプリンタを使用することもできる。
【００５８】
以上のようなハードウェア構成を有するカラープリンタ２００は、キャリッジモータ２３０を駆動することによって、各色のインク吐出用ヘッド２４４ないし２４７を印刷用紙Ｐに対して主走査方向に移動させ、また紙送りモータ２３５を駆動することによって、印刷用紙Ｐを副走査方向に移動させる。制御回路２６０は、印刷データに従って、キャリッジ２４０の主走査および副走査を繰り返しながら、適切なタイミングでノズルを駆動してインク滴を吐出することによって、カラープリンタ２００は印刷用紙上にカラー画像を印刷している。
【００５９】
Ｂ−２．画像処理の概要：
図４は、本実施例の画像処理装置としてのコンピュータ１００が、受け取った画像データに所定の画像処理を加えることによって、画像データを印刷データに変換する処理の流れを示すフローチャートである。かかる画像処理は、コンピュータ１００のオペレーティングシステムがプリンタドライバ１２を起動することによって開始される。以下、図４に従って、本実施例の画像処理について簡単に説明する。
【００６０】
プリンタドライバ１２は、画像処理を開始すると、先ず初めに、変換すべきＲＧＢカラー画像データの読み込みを開始する（ステップＳ１００）。次いで、取り込んだ画像データの解像度を、カラープリンタ２００が印刷するための解像度に変換する（ステップＳ１０２）。カラー画像データの解像度が印刷解像度よりも低い場合は、線形補間を行うことで隣接する画像データ間に新たなデータを生成し、逆に印刷解像度よりも高い場合は一定の割合でデータを間引くことによって、画像データの解像度を印刷解像度に変換する。
【００６１】
こうして解像度を変換すると、カラー画像データの色変換および圧縮を行って、圧縮後の画像データをメモリすなわちＲＡＭ１０６に書き込む処理を行う（ステップＳ１０４）。色変換においては、Ｒ，Ｇ，Ｂの階調値の組み合わせによって表現されているカラー画像データを、Ｃ，Ｍ，Ｙ，Ｋなどのカラープリンタ２００で使用する各色の階調値の組み合わせによって表現された画像データに変換する処理を行う。色変換・圧縮処理の詳細については後述する。
【００６２】
プリンタドライバ１２は、色変換・圧縮処理に続いてハーフトーン処理を開始する（ステップＳ１０６）。ハーフトーン処理とは次のような処理である。ＲＧＢ画像データは、色変換を施されることによって、Ｃ，Ｍ，Ｙ，Ｋ各色の階調データに変換される。これら各色の階調データは、階調値０から２５５の２５６階調を有するデータである。これに対し、本実施例のカラープリンタ２００は、「ドットを形成する」，「ドットを形成しない」のいずれかの状態しか採り得ない。そこで、２５６階調を有する各色の階調データを、カラープリンタ２００が表現可能な２階調で表現された画像データに変換する必要がある。このような階調数の変換を行う処理がハーフトーン処理である。後述するように、本実施例のプリンタドライバ１２は、圧縮された色変換済みの画像データをメモリすなわちＲＡＭ１０６から読み出して、隣接する画素を所定の複数個ずつブロックにまとめた後、ブロック単位でハーフトーン処理を行う。こうしてブロック単位で処理することで、ハーフトーン処理を迅速に行うことが可能である。ブロック単位で行うハーフトーン処理の詳細については後述する。
【００６３】
こうしてハーフトーン処理を終了したら、プリンタドライバはインターレース処理を開始する（ステップＳ１０８）。インターレース処理とは、ドットの形成有無を表す形式に変換された画像データを、ドットの形成順序を考慮しながらカラープリンタ２００に転送すべき順序に並べ替える処理である。プリンタドライバ１２は、インターレース処理を行って最終的に得られた画像データを、印刷データとしてカラープリンタ２００に出力する（ステップＳ１１０）。カラープリンタ２００は、印刷データに従って、各色のインクドットを印刷媒体上に形成する。その結果、画像データに対応したカラー画像が印刷媒体上に印刷される。
【００６４】
以上に説明した画像処理では、色変換済みの画像データをメモリに一旦記憶しておき、ハーフトーン処理に際しては、必要な画像データをメモリから読み出して処理している。このため、迅速化のためにブロック単位で処理を行っているにもかかわらず、ハーフトーン処理が複雑化することがない。画像データは圧縮された状態でメモリに読み書きされるので、色変換済みの画像データを書き込む動作も、ハーフトーン処理のためにメモリから読み出す動作も、迅速に実行することができる。もっとも、こうして画像データを圧縮した状態で読み書きする場合、データの圧縮および解凍する処理が必要となるが、以下に説明するように、隣接する画素を所定の複数個ずつブロックにまとめて、ブロック内でのエッジの有無に応じて画像データを圧縮しているので、画像データの圧縮も解凍も極めて迅速に行うことが可能である。このため、本実施例の画像処理では、処理内容を複雑化させることなく、迅速な処理が可能となっている。
【００６５】
Ｂ−３．第１実施例の色変換・圧縮処理：
図５は、第１実施例の色変換・圧縮処理の流れを示すフローチャートである。かかる処理は、コンピュータ１００が内蔵したＣＰＵ１０２の機能を用いて実行する処理である。以下、フローチャートに従って説明する。
【００６６】
第１実施例の色変換・圧縮処理を開始すると、先ず初めに、隣接する画素を所定の複数個ずつまとめて、第１のブロックを生成する（ステップＳ２００）。図６は、複数の画素をまとめて第１のブロックを形成している様子を概念的に例示した説明図である。図６（ａ）は、縦横２列ずつの４つの画素Ｐａ  、Ｐｂ  、Ｐｃ  、Ｐｄ  をまとめることにより、第１のブロックを生成している様子を示している。また図６（ｂ）は、横に並んだ２つの画素Ｐａ  および画素Ｐｂ  を、第１のブロックとしてまとめている様子を示している。もちろん、第１のブロックを生成する方法は、こうした例示に限られるものではなく、互いに所定の位置関係にある複数の画素をまとめて第１のブロックとすることができる。尚、説明の便宜から、以下では、第１のブロックは、図６（ａ）に示すように４つの画素で構成されている場合について説明する。
【００６７】
第１のブロックを生成したら、該ブロック内の各画素について、画像データを色変換する処理を行う（ステップＳ２０２）。今、第１のブロックは図６（ａ）に示すように４つの画素で構成されているから、これら４つの画素のＲＧＢ画像データのそれぞれを、Ｃ，Ｍ，Ｙ，Ｋ各色の階調データに変換するのである。こうした変換は、色変換テーブル（ＬＵＴ）と呼ばれる３次元の数表を参照することによって迅速に行うことができる。
【００６８】
図７は、ＬＵＴを概念的に示した説明図である。画像データが１バイトデータであるとすると、ＲＧＢ各色の階調値は０から２５５の値を取りうるので、ＲＧＢ画像データは、図７に示すように、直交３軸をそれぞれＲ軸，Ｇ軸，Ｂ軸とする一辺の長さ２５５の立方体の内部の座標として表すことができる。このような立方体を色立体と呼ぶ。ＬＵＴは色立体を格子状に細分し、各格子点にＣＭＹＫの各色の階調値を記憶した数表である。図５のステップＳ２０２においては、このようなＬＵＴを参照することにより、第１のブロックを構成する各画素のＲＧＢ画像データを、迅速に色変換する。
【００６９】
次いで、色変換することによって発生したＣ，Ｍ，Ｙ，Ｋ各色の中から、圧縮しようとする色を１つ選択する（ステップＳ２０４）。ついで、選択した色の階調値について、第１のブロック内の所定画素間での階調差を算出する処理を行う（ステップＳ２０６）。こうして階調差を求めておけば、ブロック内でのエッジの有無を容易に判断することができる。これについて、図８を参照しながら説明する。
【００７０】
図８（ａ）は、ブロック内の所定画素間の階調差を算出する様子を概念的に示した説明図である。例えば、図５のステップＳ２０４において、圧縮しようとする色としてＣ色を選択したものとすると、図８に示すように、ブロック内の左上の画素Ｐａ  と右上の画素Ｐｂ  との間で、Ｃ色についての階調差を算出する。同様に、左上の画素Ｐａ  と左下の画素Ｐｃ  との間の階調差、および画素Ｐａ  と右下の画素Ｐｄ  との間でのＣ色についての階調差を、それぞれ算出する。画素Ｐａ  と画素Ｐｂ  との階調差は主走査方向（図８上では左右方向）への階調値の変化量を示している。同様に、画素Ｐａ  と画素Ｐｃ  との間の階調差は副走査方向（図８上では上下方向）への階調値の変化量を示し、画素Ｐａ  と画素Ｐｄ  との間の階調差は斜め方向への変化量を示している。エッジの部分では階調差が大きくなっていると考えることができるから、こうして求めた階調差が、縦横斜めのいずれの方向についても所定の閾値以下であれば、Ｃ色についてはブロック内にエッジが存在しないと判断することができる。これに対して、いずれか一つの方向でも、階調差が所定の閾値より大きい場合は、Ｃ色についてはブロック内にエッジが存在していると判断することができる。
【００７１】
エッジを検出する様子を、図８（ｂ）に示した具体例を用いて説明する。図８（ｂ）中で、２行４列に並んで示された８つの小さな矩形は、それぞれが画素を示しており、矩形の中に表示された数値は、圧縮しようとして選択した色（ここではＣ色）についての各画素の階調値を示している。先ず、図８（ｂ）のブロックＡに着目すると、主走査方向および副走査方向の階調差はいずれも階調値「１」であり、斜め方向への階調差は「０」である。いずれの方向についても階調差は小さく、従ってこの様な場合は、ブロックＡにはエッジが含まれていないと判断することができる。次にブロックＢに着目すると、主走査方向の階調差は階調値「２」であるが、副走査方向の階調差は階調値「１８」、斜め方向の階調差は階調値「２０」と比較的大きな値となる。従って、閾値の値を例えば階調値「１５」程度に設定しておけば、ブロックＢ内のエッジを検出することができる。このように、ブロック内の所定画素間の階調差を検出することで、エッジの有無を容易に検出することができる。そこで、図５のステップＳ２０４においては、図８（ａ）に示すように、ブロック内の縦横斜め方向へのそれぞれの階調差を算出するのである。
【００７２】
こうして算出した階調差に基づいて、ブロック内でのエッジの有無を判断する（ステップＳ２０８）。すなわち、算出しておいた階調差と所定の閾値とを比較して、一つでも閾値より大きな階調差があれば該ブロック内にエッジが存在すると判断する（ステップＳ２０８：ｙｅｓ）。逆に、いずれの階調差も閾値より小さい場合は、そのブロック内にはエッジは存在しないと判断する（ステップＳ２０８：ｎｏ）。
【００７３】
次いで、エッジの有無に応じてブロック内の画像データを圧縮し（ステップＳ２１０）、得られた画像データをメモリに書き込む処理を行う（ステップＳ２１２）。図９は、この様子を概念的に示す説明図である。図９（ａ）はブロック内のエッジが存在していない場合の処理を示し、図９（ｂ）はブロック内にエッジが存在している場合の処理を示している。図中で、縦横２列に並んだ４つの小さな矩形のそれぞれは、ブロックに含まれている画素を示している。また、各矩形の中に表示されたＤａｔａ＿ａ  、Ｄａｔａ＿ｂ  、Ｄａｔａ＿ｃ  、Ｄａｔａ＿ｄ  は、圧縮しようとする色（ここではＣ色）についての各画素の階調値を表している。
【００７４】
ブロック内にエッジが存在しない場合は、各画素間の階調差が小さく、従ってＣ色については、いずれの画素の階調値もほぼ同じような値となっている。そこで、このような場合は、ブロック内での階調値の平均値Ｄａｔａ＿ｃｍを算出して、４つの画素の階調値Ｄａｔａ＿ａ  、Ｄａｔａ＿ｂ  、Ｄａｔａ＿ｃ  、Ｄａｔａ＿ｄ  を、階調値Ｄａｔａ＿ｃｍに圧縮する。そして、メモリには、階調値Ｄａｔａ＿ｃｍと、階調値Ｄａｔａ＿ｃｍが４画素分の階調値を圧縮したことを表す値「１」とを書き込んでやる。このように、メモリに記憶された階調値が、何画素分の階調値に相当するかを表している値を、本明細書では圧縮情報と呼ぶ。図９（ａ）は、ブロック内に含まれる４つの階調値を、１つの階調値Ｄａｔａ＿ｃｍに圧縮して、圧縮情報「１」とともにメモリに書き込んでいる様子を概念的に表している。
【００７５】
これに対して、ブロック内にエッジが存在する場合は、各画素の階調値Ｄａｔａ＿ａ  、Ｄａｔａ＿ｂ  、Ｄａｔａ＿ｃ  、Ｄａｔａ＿ｄ  を圧縮することなく、圧縮情報「０」とともにそのまま順番にメモリに書き込んでやる。圧縮情報「０」は、ブロック内の階調値が圧縮されておらず、従って、４つの階調値Ｄａｔａ＿ａ  、Ｄａｔａ＿ｂ  、Ｄａｔａ＿ｃ  、Ｄａｔａ＿ｄ  が、ブロック内の４つの画素Ｐａ  、Ｐｂ  、Ｐｃ  、Ｐｄ  の階調値に対応することを示している。図９（ｂ）は、ブロック内に含まれる４つの階調値を、圧縮情報とともにそのままメモリに書き込んでいる様子を概念的に表している。
【００７６】
図５に示したステップＳ２１２では、ブロック内に含まれる各画素の階調値を、エッジの有無に応じて圧縮した後、圧縮情報とともにメモリに書き込む処理を行う。こうすれば、エッジを含むブロックについては圧縮情報を付加する分だけデータ量が増加してしまうが、エッジを含まないブロックについては、４画素分の階調値を１つの階調値で表現することができるので、全体として画像データを圧縮することができる。また、圧縮情報を記憶するために要する記憶容量は、各画素の階調値に比べれば僅かなものである。例えば、図９に示した例では、圧縮情報は「０」または「１」のいずれかの値しか採らず、従って１ブロックあたり１ｂｉｔの記憶容量で足りる。このように圧縮情報を付加することによるデータ量の増加はわずかなものに過ぎず、全体としては画像データを大きく圧縮することが可能である。
【００７７】
尚、圧縮情報と階調値とをメモリに書き込むにあたっては、本実施例では、メモリ上に圧縮情報を記憶するための領域と階調値を記憶するための領域とを確保しておき、それぞれの領域に圧縮情報および階調値を書き込んでいる。もちろん、このような方式に限られるものではなく、例えば、圧縮情報の後に続けて階調値を書き込むなどして、メモリ上の同じ領域に書き込むこととしても良い。
【００７８】
以上のようにして、圧縮しようと選択した色（ここではＣ色）についての各画素の階調値と階調値とをメモリに書き込んだら、未選択の色が残っているか否かを判断する（ステップＳ２１４）。ここでは、まだＣ色についてしか選択していないので、ステップＳ２１４でｙｅｓと判断する。そして、ステップＳ２０４に戻って新たな色を選択し、上述した一連の処理を行う。以上のような処理を繰り返し、すべての色を選択し終わったら（ステップＳ２１４：ｎｏ）、１つのブロックについて色変換・圧縮処理を行ったことになる。
【００７９】
こうして１つのブロックについての処理が終わったら、未処理の画素が残っているか否かを判断する（ステップＳ２１６）。そして、未処理の画素が残っていれば（ステップＳ２１６：ｎｏ）、ステップＳ２００に戻って新たなブロックを生成し、このブロック内の各画素について、続く一連の処理を行う。こうしてすべての画素についての処理を終了したら（ステップＳ２１６：ｙｅｓ）、図５に示す色変換・圧縮処理を終了して、図４の画像処理に復帰する。画像処理では、色変換・圧縮処理（図４のステップＳ１０４）に続いて、ハーフトーン処理（図４のステップＳ１０６）を行う。本実施例のハーフトーン処理では、圧縮された画像データをメモリから読み出した後、ブロック単位でハーフトーン処理を行うことで、迅速な処理が可能となっている。以下、本実施例のハーフトーン処理について説明する。
【００８０】
Ｂ−４．ハーフトーン処理の概要：
図１０は、本実施例の画像処理において、ブロック単位で行うハーフトーン処理の流れを示すフローチャートである。かかる処理も、コンピュータ１００に内蔵されたＣＰＵ１０２の機能を用いて実行される。尚、ハーフトーン処理は、色変換によって得られたＣ，Ｍ，Ｙ，Ｋの各色ごとに行われるが、説明が煩雑となることを避けるために、以下では、色を特定せずに説明することで、各色について同様の処理を行っていることを表すものとする。
【００８１】
処理を開始すると、まず初めに、ハーフトーン処理を行うブロックを設定する（ステップＳ３００）。このブロックは、所定の位置関係で互いに隣接した複数の画素から構成されている。尚、図５を用いて前述したように、本実施例の画像処理では、色変換・圧縮処理においてもブロック単位で処理を行っている。この色変換・圧縮処理で処理するブロックと、以下に説明するハーフトーン処理で処理するブロックとは、必ずしも一致している必要はない。そこで、本明細書では、色変換・圧縮処理において設定するブロックを第１のブロックと呼び、ハーフトーン処理において設定するブロックを第２のブロックと呼んで区別することにすることがあるものとする。
【００８２】
ハーフトーン処理においても、第２のブロックは種々の形態を取ることができる。図１１は、第２のブロックが取り得る種々の形態を例示した説明図である。図中に示した小さな矩形は、それぞれが画素を表しており、斜線が付された複数の画素が、第２のブロックとしてまとめられた画素である。図中では、第２のブロックを破線で囲って表している。説明の便宜から、以下では、図１１（ａ）に示すように、縦横２列ずつの４つの画素を第２のブロックとして設定するものとして説明する。
【００８３】
こうして、ハーフトーン処理しようとする第２のブロックを設定したら、前述した色変換・圧縮処理において記憶しておいた圧縮情報と画像データとをメモリから読み出して、第２のブロックとして解凍する処理を行う（ステップＳ３０２）。例えば、圧縮情報の値が「１」である場合は、色変換後の画像データが圧縮されてメモリに記憶されていることを示している（図９（ａ）を参照のこと）。そこで、図１１（ａ）に示した第２のブロック内の４つの画素Ｐａ  、画素Ｐｂ  、画素Ｐｃ  、画素Ｐｄ  に、メモリから読み出した階調値Ｄａｔａ＿ｃｍを設定してやる。こうすれば、圧縮して記憶された画像データから、第２のブロックの画像データを速やかに解凍することができる。圧縮されて記憶されているブロックは、もともと画素間の階調差が小さいブロックであるから、こうしてすべての画素に同一の階調値Ｄａｔａ＿ｃｍを設定しても、画質が大きく悪化することはない。
【００８４】
逆に、メモリから読み出した圧縮情報の値が「０」である場合は、画像データは圧縮されることなく、そのままメモリに記憶されていることを示している（図９（ｂ）を参照のこと）。そこで、メモリから４画素分の画像データを読み出して、これら画像データを、第２のブロック内の４つの画素Ｐａ  、画素Ｐｂ  、画素Ｐｃ  、画素Ｐｄ  の階調値として、それぞれ設定してやる。
【００８５】
以上に説明したように、ステップＳ３０２では、圧縮情報を用いることによりきわめて簡単な方法で画像データを解凍することができる。このため、メモリから圧縮された画像データを読み出して、第２のブロックの画像データを迅速に解凍することが可能である。
【００８６】
尚、ここでは、第１のブロックと第２のブロックとが一致しているものとしているが、前述したように、これらブロックは一致している必要はない。一致していない場合は、第２のブロックに含まれるすべての画素について画像データを設定し終わるまで、メモリに記憶された圧縮情報と画像データとを読み出してやればよい。従って、第２のブロック中の一部の画素は圧縮された状態でメモリに記憶されており、他の画素は圧縮されずに記憶されているといった場合も起こり得る。
【００８７】
ついで、こうして解凍した第２のブロック内の各画素について、ブロック単位でドット形成の有無を判断する処理を行う（ステップＳ３０４）。この処理の詳細については、別図を用いて後述する。
【００８８】
第２のブロック内の各画素について、ドット形成の有無を判断したら、該判断によってブロック内で生じた階調表現の誤差を、周辺の画素に拡散する処理を行う（ステップＳ３０６）。ブロック内で生じた階調表現の誤差を求める方法については後述する。図１２は、ブロック内で生じた誤差を周辺の画素に拡散している様子を概念的に示す説明図である。図中に示した小さな矩形は画素を表しており、破線で示した大きな矩形は第２のブロックを表している。斜線が付されたブロックが、ドット形成の有無が判断されたブロックである。図１０のステップＳ３０８では、このブロック全体で発生した階調表現の誤差を、周辺の画素に向かって所定の比率で分配する処理を行う。一例として、ブロック内で生じた誤差を周辺の各画素に分配する比率を、図１３に例示した。図１３（ａ）は、判断を行ったブロックに隣接している６つの画素に分配する場合を示し、図１３（ｂ）は、判断を行ったブロックに隣接するブロック内の各画素に分配する場合を示している。図１２に示した黒い矢印は、図１３（ａ）に例示された比率に従って、ブロックで生じた誤差を周辺の画素に拡散している様子を概念的に表している。こうして拡散された誤差は各画素毎に蓄積され、各画素に対応付けられた状態でコンピュータ１００のＲＡＭ１０６に記憶される。
【００８９】
以上のようにして、ブロック内で生じた誤差を拡散したら、全画素についての処理を終了したか否かを判断する（ステップＳ３０８）。そして、未処理の画素が残っていれば（ステップＳ３０８：ｎｏ）、ステップＳ３００に戻ってブロックの位置を移動させ、設定した第２のブロックについて、上述した一連の処理を行う。こうして全ての画素についての処理を終了したら（ステップＳ３０８：ｙｅｓ）、図１０に示したハーフトーン処理を終了して図４の画像処理に復帰する。
【００９０】
以下では、ブロック単位で各画素についてのドット形成の有無を判断する処理（ブロック単位２値化処理）について説明する。図１４は、本実施例のハーフトーン処理中で、ブロック単位でドット形成の有無を判断する処理の流れを示したフローチャートである。
【００９１】
図１４に示すブロック単位２値化処理を開始すると、先ず初めに、処理しようとするブロックの中から、ドット形成の有無を判断する画素（着目画素）を１つ設定する（ステップＳ４００）。つまり、前述したように、複数の画素をまとめて第２のブロックとしているから、これらの画素を所定の順序で１画素ずつドット形成の有無を判断することとして、着目画素を１つ選択するのである。図１１（ａ）に示したように、第２のブロックは隣接する４つの画素から構成されているとしている。ここでは、これら４つの画素を、ブロック内の左上にある画素から右下の画素に向かって画素Ｐａ  、画素Ｐｂ  、画素Ｐｃ  、画素Ｐｄ  の順番にドット形成有無を判断することとする。そこで、先ず初めに、ステップＳ４００では、左上隅にある画素Ｐａ  を着目画素として設定する。
【００９２】
次いで、設定した着目画素（ここでは、画素Ｐａ  ）についての補正データＣｘ  を算出する（ステップＳ３０２）。補正データＣｘ  は、着目画素の画像データと着目画素に拡散されて記憶されている誤差（拡散誤差）とを加算することによって求めることができる。処理している第２のブロックの各画素についての画像データは、図１０に示したハーフトーン処理中のステップＳ３０２において、圧縮されてメモリに記憶されているデータを読み出して既に解凍され、ＣＰＵ１０２に内蔵されたレジスタあるいはキャッシュに記憶されている。また、着目画素についての拡散誤差は、図１０のステップＳ３０６中で、画素毎に蓄積されて記憶されている。図１４に示したステップＳ４０２においては、着目画素についての画像データと拡散誤差とを加算することによって、補正データＣｘ  を算出する処理を行う。
【００９３】
着目画素Ｐａ  の補正データＣｘ  を算出したら、得られた補正データＣｘ  と所定の閾値ｔｈとの大小関係を判断する（ステップＳ４０４）。そして、補正データＣｘ  の方が大きければ着目画素（ここでは画素Ｐａ  ）にドットを形成すると判断し（ステップＳ４０６）、そうでなければ、着目画素にはドットを形成しないと判断する（ステップＳ４０８）。判断の結果は、各画素についての判断結果を示す変数としてＲＡＭ１０６に蓄えられる。
【００９４】
こうして着目画素についてのドット形成有無を判断したら、判断に伴って着目画素に生じた階調誤差を算出する（ステップＳ４１０）。階調誤差は、ドットを形成したこと、あるいはドットを形成しなかったことによって着目画素に表現される階調値（以下では、この階調値を結果値と呼ぶ）を、着目画素の補正データＣｘ  から減算することによって算出することができる。
【００９５】
着目画素で生じた階調誤差を算出したら、処理中のブロック内の全画素の処理を終了したか否かを判断する（ステップＳ４１２）。そして、未処理の画素が残っている場合は（ステップＳ４１２：ｎｏ）、これら未処理の画素中で着目画素周辺にある画素に誤差を拡散させる処理を行う（ステップＳ４１４）。この処理について、図１５を参照しながら説明する。
【００９６】
図１５は、処理中の第２のブロック内の画素から着目画素を１つずつ選択してドット形成の有無を判断することにより、ドット形成の有無をブロック単位で判断している様子を模式的に示した説明図である。図中の４つの正方形は、処理中の第２のブロックを構成する画素Ｐａ  、画素Ｐｂ  、画素Ｐｃ  、画素Ｐｄ  をそれぞれ示している。また、画素Ｐａ  を示す正方形の中に示したＤＴａ  は、メモリから読み出されて解凍された画像データを示しており、また、画素Ｐａ  中に示したＥＤａ  は、画素Ｐａ  に拡散された蓄積されている拡散誤差を示している。同様に、画素Ｐｂ  中に示したＤＴｂ  およびＥＤｂ  はそれぞれ画素Ｐｂ  の画像データおよび拡散誤差を示し、画素Ｐｃ  中のＤＴｃ  およびＥＤｃ  はそれぞれ画素Ｐｃ  の画像データおよび拡散誤差ＥＤｃ  を、画素Ｐｄ  中のＤＴｄ  およびＥＤｄ  は画素Ｐｄ  の画像データおよび拡散誤差を示している。前述したように、これら各画素の画像データは、ＲＡＭ１０６から読み出されて解凍された後、ＣＰＵ１０２に内蔵されたレジスタあるいはキャッシュに記憶されている。また、そのブロックについての処理を開始した直後では、各画素の拡散誤差は、ＲＡＭ１０６に記憶されている。
【００９７】
前述したように、ブロック単位２値化処理を開始すると、先ず初めにブロック内で左上の画素Ｐａ  が着目画素として設定される（図１４のステップＳ４００参照）。そして、画素Ｐａ  についての補正データＣｘ  を算出し、閾値ｔｈと比較することによってドット形成の有無を判断する（図１４のステップＳ４０２，Ｓ４０４参照）。画素Ｐａ  についてドット形成の有無を判断した時点では、図１５（ａ）に示すように、同じブロック内には画素Ｐｂ  と画素Ｐｃ  と画素Ｐｄ  の３つの画素が未判断画素として残っている。そこで、画素Ｐａ  で生じた階調誤差を、これら３つの画素に１／３ずつ均等に分配して、これら誤差を、各画素毎に記憶されている拡散誤差に加算する処理を行う。例えば図１５（ａ）に示すように、画素Ｐｂ  に既に記憶されている拡散誤差をＥＤｂ  とすると、画素Ｐａ  で生じた階調誤差は、その１／３の階調値が画素Ｐｂ  に分配されて、拡散誤差ＥＤｂ  に加算される。その結果、画素Ｐｂ  に記憶されていた拡散誤差ＥＤｂ  は、画素Ｐａ  からの誤差が加算された新たな拡散誤差ＥＤｂ  に更新される。更新された拡散誤差は、ＣＰＵ１０２のレジスタあるいはキャッシュに記憶される。
【００９８】
他の画素Ｐｃ  および画素Ｐｄ  についても同様な処理を行う。簡単に説明すると、画素Ｐａ  からの誤差が画素Ｐｃ  に拡散されると、画素Ｐｃ  に記憶されていた拡散誤差ＥＤｃ  と画素Ｐａ  からの誤差とが加算され、新たな拡散誤差ＥＤｃ  として画素Ｐｃ  に記憶される。また、画素Ｐｄ  についても同様に、画素Ｐｄ  に記憶されていた拡散誤差ＥＤｄ  と画素Ｐａ  からの誤差とが加算され、新たな拡散誤差ＥＤｄ  として画素Ｐｄ  に記憶される。図１５（ａ）中で画素Ｐａ  から他の３つ画素に向かって表示されている白抜きの矢印は、画素Ｐａ  で生じた誤差がこれら３つの画素に拡散されることを模式的に示したものである。こうして画素Ｐａ  で生じた階調誤差が拡散されて更新された各画素の拡散誤差は、ＣＰＵ１０２のレジスタあるいはキャッシュに記憶される。尚、階調誤差は、必ずしも周辺の未判断画素に均等に分配する必要はなく、各画素に所定の割合で分配することも可能である。
【００９９】
以上のようにして画素Ｐａ  で生じた階調誤差をブロック内の周辺画素に拡散したら、図１４のステップＳ４１４の処理を終了してステップＳ４００に戻り、新たな着目画素を設定する処理を行う。画素Ｐａ  については既にドット形成の有無を判断したから、ステップＳ４００では、今度は画素Ｐａ  の右隣の画素Ｐｂ  を着目画素として設定する。こうして設定した新たな着目画素について、上述した処理とほぼ同様の処理を行う。以下、画素Ｐａ  における処理との相違点を中心に簡単に説明する。
【０１００】
画素Ｐｂ  についての処理を行う場合にも画素Ｐａ  における場合と同様に、先ず初めに、補正データＣｘ  を算出する（ステップＳ４０２）。ここで、画素Ｐｂ  に記憶されている拡散誤差ＥＤｂ  には、先に画素Ｐａ  で生じた階調誤差が拡散されて、新たな拡散誤差ＥＤｂ  として更新されている。そこで、画素Ｐｂ  についての画像データＤＴｂ  と、画素Ｐａ  からの階調誤差が拡散された新たな拡散誤差ＥＤｂ  とを加算することにより、画素Ｐｂ  についての補正データＣｘ  を算出する。ここで、画像データＤＴｂ  および拡散誤差ＥＤｂ  は、いずれもＣＰＵ１０２内のレジスタあるいはキャッシュに記憶されているので、極めて高速に読み出して補正データＣｘ  を算出することができる。こうして算出した補正データＣｘ  と所定の閾値ｔｈとの大小関係を判断し（ステップＳ４０４）、補正データＣｘ  の方が大きければ画素Ｐｂ  にはドットを形成すると判断し（ステップＳ４０６）、そうでなければ画素Ｐｂ  にはドットを形成しないと判断する（ステップＳ４０８）。次いで、画素Ｐｂ  について発生した階調誤差を算出する（ステップＳ４１０）。階調誤差は、画素Ｐａ  の場合と同様に、画素Ｐｂ  の補正データＣｘ  から結果値を減算することによって算出することができる。
【０１０１】
着目画素Ｐｂ  で生じた階調誤差を算出したら、処理中の第２のブロック内のすべての画素について処理を終了したか否かを判断し（ステップＳ４１２）、未処理の画素が残っていれば、算出しておいた階調誤差を、これら未処理の画素に拡散させる処理を行う（ステップＳ４１４）。前述したように、ブロック内の画素Ｐａ  については既に判断を終了しているから、未判断画素として残っているのは画素Ｐｃ  および画素Ｐｄ  の２つの画素である。そこで、画素Ｐｂ  で生じた階調誤差はこれら２つの画素に拡散させることになる。再び、図１５を参照しながら、画素Ｐｂ  からの誤差を拡散させる処理について説明する。
【０１０２】
図１５（ｂ）は、画素Ｐｂ  で生じた階調誤差を拡散している様子を概念的に示した説明図である。図中で、画素Ｐａ  に斜線が施されているのは、画素Ｐａ  については既にドット形成の有無を判断済みであることを模式的に示したものである。画素Ｐｂ  についてドット形成の有無を判断した時点では、処理ブロック内には未判断画素として画素Ｐｃ  、画素Ｐｄ  の２つの画素が残っている。そこで、画素Ｐｂ  で生じた階調誤差は、図１５（ｂ）に示したように、これらの画素Ｐｃ  および画素Ｐｄ  にそれぞれ、１／２ずつ拡散させる。図中で、画素Ｐｂ  から画素Ｐｃ  および画素Ｐｄ  に向かって伸びる白抜きの矢印は、画素Ｐｂ  で生じた階調誤差がこれら画素に拡散されていることを模式的に示している。こうして誤差が拡散される結果、各画素の拡散誤差は、拡散されてきた誤差が加算された新たな拡散誤差に更新されて、ＣＰＵ１０２のレジスタあるいはキャッシュに記憶される。尚、ここでも、階調誤差は処理ブロック内の未判断画素に均等に拡散されるものとしているが、もちろん、均等に拡散させるのではなく、所定の割合で誤差を拡散させることとしても構わない。
【０１０３】
こうして画素Ｐｂ  で生じた階調誤差を周辺の画素に拡散したら、再び図１４のステップＳ４００に戻って、今度は着目画素を画素Ｐｃ  に移動させた後、着目画素Ｐｃ  について同様の処理を行う。以下では、かかる処理について、図１５（ｃ）を参照しながら説明する。画素Ｐｃ  についての処理を開始すると、先ず初めに画素Ｐｃ  の画像データＤＴｃ  と拡散誤差ＥＤｃ  とを加算して補正データＣｘ  を算出する。ここで、画素Ｐｃ  についてのドット形成有無を開始した時点では、画素Ｐｃ  の拡散誤差ＥＤｃ  は、元々記憶されていた拡散誤差に加えて、画素Ｐａ  からの誤差と画素Ｐｂ  からの誤差とが加算され、新たな拡散誤差ＥＤｃ  として更新されてＣＰＵ１０２のレジスタあるいはキャッシュに記憶されている。このことから、画素Ｐｃ  の補正データＣｘ  の算出に際しては、画素Ｐｃ  の画像データＤＴｃ  に、新たな拡散誤差ＥＤｃ  が算出されることになる。こうして得られた補正データＣｘ  と、所定の閾値ｔｈとを比較することによって、画素Ｐｃ  についてのドット形成有無を判断する。こうして画素Ｐｃ  についてのドット形成有無を判断した時点では、処理中のブロック内に残る未判断画素は、図１５（ｃ）に示すように画素Ｐｄ  のみである。そこで、画素Ｐｃ  で生じた階調誤差は全て画素Ｐｄ  に拡散され、画素Ｐｄ  に元々記憶されていた拡散誤差に加算されて、新たな拡散誤差ＥＤｄ  として更新される。
【０１０４】
着目画素Ｐｃ  で生じた階調誤差を拡散したら、図１４のステップＳ４００に戻って着目画素を画素Ｐｄ  に移動した後、画素Ｐｄ  についてのドット形成有無の判断を開始する。すなわち、画素Ｐｄ  に記憶されている拡散誤差ＥＤｄ  と画素Ｐｄ  の画像データＤＴｄ  とを加算して補正データＣｘ  を算出する（ステップＳ４０２）。次いで、補正データＣｘ  と閾値ｔｈとを比較し（ステップＳ４０４）、補正データＣｘ  の方が大きい場合は画素Ｐｄ  にはドットを形成する（ステップＳ４０６）と判断し、そうでない場合は画素Ｐｄ  にはドットを形成しないと判断する（ステップＳ４０８）。
【０１０５】
こうして画素Ｐｄ  についてのドット形成の有無を判断したら、画素Ｐｄ  で生じた階調誤差を算出した後（ステップＳ４１０）、処理中のブロック内の全画素の処理を終了したか否かを判断する（ステップＳ４１２）。図１５（ｄ）に示したように、画素Ｐｄ  について処理を開始した時点で、もはや処理中のブロック内には未判断の画素は残っておらず、画素Ｐｄ  についての判断が終了した後のステップＳ４１２においては、ブロック内の全画素についての処理が終了したと判断される。そこで、図１４に示したブロック単位２値化処理を終了して、図１０を用いて前述したブロック単位で行うハーフトーン処理に復帰する。前述したように、図１０に示したハーフトーン処理では、ブロック単位２値化処理から復帰すると、処理した第２のブロックで生じた階調誤差を周辺のブロックに拡散する処理を行う（図１０のステップＳ３０６）。
【０１０６】
ここで、処理した第２のブロックで生じた階調表現の誤差としては、ブロック単位２値化処理のステップＳ４１０において画素Ｐｄ  について求めた階調誤差の値を用いることができる。これは、着目画素で生じた階調誤差をブロック内の未判断画素に拡散しながらドット形成有無の判断を行っているために、ブロック内で生じた階調誤差が、最後に判断する画素Ｐｄ  に拡散誤差ＥＤｄ  として蓄積されることによる。以下、図１５を参照して詳しく説明する。
【０１０７】
画素Ｐａ  で生じた階調誤差は、処理中のブロック内の画素Ｐｂ  、画素Ｐｃ  、画素Ｐｄ  の３つの画素に拡散される。画素Ｐｂ  のドット形成有無の判断に際しては、画素Ｐａ  からの誤差を考慮して、画素Ｐｂ  に拡散されている誤差ができるだけ解消されるようにドット形成の有無が判断される。仮に、画素Ｐｂ  についてドット形成有無を判断することにより、画素Ｐｂ  に拡散されている誤差を解消することができたものとする。この場合は、画素Ｐｂ  では新たな階調誤差は発生せず、また、画素Ｐｂ  から画素Ｐｃ  、画素Ｐｄ  に拡散される誤差も生じない。他の２つの画素Ｐｃ  、画素Ｐｄ  についても同様に、ドット形成の有無を判断したことで、それぞれの画素に拡散されている誤差を解消することができたものとすると、これらの画素では階調誤差は生じない。結局、この場合は、画素Ｐａ  で生じた階調誤差を、周辺の未判断画素Ｐｂ  、画素Ｐｃ  、画素Ｐｄ  で解消したこととなって、処理ブロック全体としては階調誤差の発生を避けることができる。
【０１０８】
ここでは、画素Ｐｂ  のドット形成有無の判断によって、画素Ｐｂ  での誤差を解消するものとしたが、画素Ｐｂ  で新たな階調誤差が発生した場合には、この誤差は周辺の未判断画素Ｐｃ  および画素Ｐｄ  に拡散されて、その結果、これらの画素には、画素Ｐａ  で生じた階調誤差と画素Ｐｂ  で生じた階調誤差とが拡散されることになる。しかし、これら画素Ｐｃ  、画素Ｐｄ  についてドット形成の有無を判断することで、それぞれの画素に拡散された誤差を解消することができれば、依然としてブロック全体としてみれば階調誤差は生じない。
【０１０９】
画素Ｐｃ  についてドット形成有無を判断することで、画素Ｐｃ  に拡散されている拡散誤差を解消することができない場合も、全く同様にして、画素Ｐｄ  で誤差を解消することができれば、ブロック全体としては階調誤差が生じることはない。換言すれば、画素Ｐｄ  で解消しきれずに残った誤差が、ブロック全体で生じた階調誤差となる。このように、着目画素で生じた階調誤差をブロック内の未判断画素に拡散しながらドット形成有無を判断していくと、各画素で解消しきれずに残った階調誤差が後続する画素に集約されていくので、ブロック内で最後に判断する画素Ｐｄ  で生じた階調誤差を、処理中のブロック全体で生じた階調誤差として用いることができるのである。
【０１１０】
尚、以上の説明では、処理中のブロック内で最後にドット形成有無を判断する画素Ｐｄ  で生じた階調誤差の値を、ブロック全体で生じた階調誤差として用いるものとしたが、もちろん、ブロックを構成する各画素毎に階調誤差を算出し、これら階調誤差の総和をブロック全体としての階調誤差としても構わない。
【０１１１】
また、図１５に示した例では、第２のブロックを構成する各画素のドット形成有無を判断するに際しては、画素Ｐａ  、画素Ｐｂ  、画素Ｐｃ  、画素Ｐｄ  の順番で判断を行ったが、必ずしもこの順番で判断する必要はなく、例えば、画素Ｐａ  、画素Ｐｃ  、画素Ｐｂ  、画素Ｐｄ  の順番でドット形成有無を判断しても構わない。第２のブロック内で着目画素を設定する順番は、良好な画質が得られる順番を選択しておくことができる。
【０１１２】
以上に説明したように本実施例の画像処理では、色変換後の画像データに基づいて、第２のブロック内にエッジが存在するか否かを検出する。そして、エッジの有無によって画像データを圧縮し、圧縮後の画像データを一旦メモリに記憶する。続くハーフトーン処理では、メモリから必要な画像データを読み出して、ブロック単位でハーフトーン処理を行う。ハーフトーン処理をブロック単位で行えば、ブロック内の各画素については、誤差を拡散する処理あるいは補正データＣｘ  を算出してドット形成の有無を判断する処理を迅速に行うことができるので、ハーフトーン処理を高速化することができる。
【０１１３】
また、ハーフトーン処理をブロック単位で行った場合、処理が複雑化し易いが、本実施例では、メモリに画像データを圧縮して記憶しておき、必要に応じて読み出してハーフトーン処理を行っている。このように必要なデータを読み出しながらハーフトーン処理を行えば、処理が複雑化することを効果的に回避することができる。
【０１１４】
加えて、ハーフトーン処理を行う画像データ（色変換後の画像データ）は圧縮されているので、メモリに書き込む動作もメモリから読み出す動作も極めて迅速に行うことができる。更に本実施例の画像処理では、ブロック内でのエッジの有無に応じて画像データを圧縮しているので、画像データの圧縮および解凍も極めて迅速に且つ効率良く行うことができる。すなわち、ブロック内でエッジが検出されなかった場合は、ブロック内の各画素の階調値を平均階調値によって代表させることによって画像データを圧縮し、解凍に際しては各画素に平均階調値を設定する。また、ブロック内にエッジが検出された場合は画像データの圧縮は行わない。このようにエッジが検出された場合は圧縮を行わないとしても、画像データ全体としては、実用上十分な圧縮率を確保することができる。これは、ブロックを極端に大きなものに設定しない限り、エッジが検出されるブロックはさほど多くはないことと、エッジが検出されなかったブロックについての圧縮率が高いことによる。こうしてエッジに有無に応じて圧縮および解凍しているために、圧縮も解凍も極めて迅速に行うことができる。
【０１１５】
以上に説明したように、本実施例の画像処理によれば、処理を複雑化させることなく、画像処理全体としての処理速度を向上させることが可能となる。
【０１１６】
Ｃ．第２実施例：
上述した第１実施例では、エッジの検出は色変換後の画像データに基づいて行った。しかし、色変換前の画像データに基づいてエッジを検出することで、エッジを検出する処理をより簡素なものとすることもできる。以下では、こうした第２実施例について説明する。
【０１１７】
図１６は、第２実施例の色変換・圧縮処理の流れを示すフローチャートである。以下ではフローチャートを参照しながら、第１実施例との相違点を中心に説明する。
【０１１８】
第２実施例においても、色変換・圧縮処理を開始すると、先ず初めに、隣接する画素を所定の複数個ずつまとめて、第１のブロックを生成する（ステップＳ５００）。ここでは、前述した第１実施例と同様に、第１のブロックは、図６（ａ）に示すように、縦横２列ずつに並んだ４つの画素で構成されているものとして説明する。
【０１１９】
第１のブロックを生成したら、該ブロック内の所定画素間で、各画素についてＲＧＢ画像データの階調差を算出する処理を行う（ステップＳ５０２）。すなわち図８（ａ）に示したように、画素Ｐａ  と画素Ｐｂ  との間、画素Ｐａ  と画素Ｐｃ  との間、画素Ｐａ  と画素Ｐｄ  との間のそれぞれについて、ＲＧＢ各色毎に階調差を算出するのである。前述した第１実施例の色変換・圧縮処理では、このように、ＲＧＢ画像データを色変換して得られたＣ，Ｍ，Ｙ，Ｋの各色についての階調差を算出したが、第２実施例では、色変換前のＲＧＢ各色について階調差を算出する点が大きく異なっている。
【０１２０】
こうして算出した階調差に基づいて、ブロック内でのエッジの有無を判断する処理を行う（ステップＳ５０４）。ステップＳ５０２において所定画素間で算出したＲＧＢ各色の階調差の中で、所定の閾値より大きなものが１つでも含まれていれば、そのブロックにはエッジが含まれていると判断する。逆に、いずれの階調差も閾値より小さい場合には、そのブロックにはエッジは含まれていないと判断する。
【０１２１】
そして、エッジが含まれていない場合は（ステップＳ５０４：ｎｏ）、ブロック内のＲＧＢ画像データを圧縮し（ステップＳ５０６）、圧縮したＲＧＢ画像データをＣＭＹＫ各色による画像データに色変換する（ステップＳ５０８）。ＲＧＢ画像データの圧縮は、第１のブロックに含まれる各画素についての画像データの平均値を、各色毎に算出することによって行う。例えば、ブロック内の各画素Ｐａ  、Ｐｂ  、Ｐｃ  、Ｐｄ  のＲ画像データの階調値が、それぞれＲａ  、Ｒｂ  、Ｒｃ  、Ｒｄ  とすると、Ｒ画像データは、階調値Ｒａｖｅ  に圧縮される。ここで、
Ｒａｖｅ  ＝（Ｒａ  ＋Ｒｂ  ＋Ｒｃ  ＋Ｒｄ  ）／４
である。Ｇ画像データ、Ｂ画像データについても同様に、ブロック内の各画素Ｐａ  、Ｐｂ  、Ｐｃ  、Ｐｄ  のＧ画像データの階調値をＧａ  、Ｇｂ  、Ｇｃ  、Ｇｄ  として、Ｂ画像データの階調値をＢａ  、Ｂｂ  、Ｂｃ  、Ｂｄ  とすると、Ｇ画像データは、階調値Ｇａｖｅ  に圧縮され、Ｂ画像データは、階調値Ｂａｖｅ  に圧縮される。ここで、Ｇａｖｅ  およびＢａｖｅ  は、それぞれ
Ｇａｖｅ  ＝（Ｇａ  ＋Ｇｂ  ＋Ｇｃ  ＋Ｇｄ  ）／４
Ｂａｖｅ  ＝（Ｂａ  ＋Ｂｂ  ＋Ｂｃ  ＋Ｂｄ  ）／４
として求められる。
【０１２２】
続くステップＳ５０８では、こうして圧縮されたＲＧＢ画像データ（Ｒａｖｅ  ，Ｇａｖｅ  ，Ｂａｖｅ  ）について、図７に示したＬＵＴを参照しながら色変換する。第２実施例では、第１のブロック内にエッジが存在しない場合には、こうしてＲＧＢ画像データを圧縮した後に色変換しているので、画素毎に色変換を行う必要が無く、迅速に色変換することができる。また、エッジが存在しないブロックでは、画素間でのＲＧＢ画像データがほぼ同じ階調値となっているから、各画素についてのＲＧＢ画像データを色変換して得られたＣＭＹＫ各色の階調値も、ほぼ同じ階調値になると考えられる。従って、こうしたブロックについては、圧縮したＲＧＢ画像データを色変換することとしても、ほとんど画質が悪化することはない。
【０１２３】
一方、ステップＳ５０４においてブロック内にエッジが存在すると判断された場合は（ステップＳ５０４：ｙｅｓ）、該ブロックに含まれる各画素毎に、ＲＧＢ画像データをＣＭＹＫ画像データに色変換する（ステップＳ５１０）。
【０１２４】
尚、以上の説明では、ブロック内の所定画素間での全ての階調差を各色毎に一旦算出し（ステップＳ５０２）、その後ステップＳ５０４において、算出した階調差と閾値を比較してエッジの有無を検出するものとして説明した。しかし、これは、理解の便宜を考慮して説明の簡素化を図ったためであり、必ずしもブロック内の全ての階調差を算出する必要はない。すなわち、所定の閾値を超える階調差が１つでも見出されたら、他の階調差については算出することなく、そのブロックにはエッジ存在すると判断して、ステップＳ５１０の処理を行うこととしても良い。
【０１２５】
以上のようにして、圧縮したＲＧＢ画像データあるいは圧縮していないＲＧＢ画像データの色変換を終了したら、得られたＣＭＹＫ各色の画像データを、圧縮情報とともにメモリすなわちＲＡＭ１０６に記憶する（ステップＳ５１２）。圧縮情報は、第１のブロックにエッジが存在していない場合（圧縮したＲＧＢ画像データを色変換した場合）には、画像データが圧縮されていることを表す値「１」を記憶する。逆に、第１のブロックにエッジが存在する場合は、画像データが圧縮されていないことを表す値「０」を、圧縮情報として記憶する。
【０１２６】
尚、前述した第１実施例では、Ｃ，Ｍ，Ｙ，Ｋ各色毎にエッジの検出および画像データの圧縮を行っているので、同一ブロック内でも、色によって圧縮状態が異なっている場合が起こり得る。このため圧縮情報は、ブロック毎に、そして各色毎に設定して記憶されている。これに対して第２実施例では、エッジの検出と圧縮とをブロック単位で行っているので、同一ブロックで有れば、圧縮状態はＣＭＹＫ各色いずれも同じとなっている。従って、ブロック毎に１つずつ圧縮情報を設定して記憶することも可能である。
【０１２７】
こうして１つのブロックについての処理が終わったら、未処理の画素が残っているか否かを判断する（ステップＳ５１４）。そして、未処理の画素が残っていれば（ステップＳ５１４：ｎｏ）、ステップＳ５００に戻って新たなブロックを生成し、このブロック内の各画素について、続く一連の処理を行う。こうしてすべての画素についての処理を終了したら（ステップＳ５１４：ｙｅｓ）、図１６に示す第２実施例の色変換・圧縮処理を終了して、図４の画像処理に復帰する。
【０１２８】
こうした第２実施例の色変換・圧縮処理においては、エッジの存在しないブロックについては、１回だけ色変換すればよい。従って、ブロック内の全画素について色変換する第１実施例の色変換・圧縮処理よりも、処理の高速化を図ることができる。また、エッジの検出に際しても、ＲＧＢ各色についての階調差を算出して、閾値より大きな階調差が１つでも見出されたら、残りの階調差は算出することなく、次の処理を開始することができる。この点においても、第２実施例の色変換・圧縮処理は、第１実施例の色変換・圧縮処理よりも処理の高速化を図ることが可能である。
【０１２９】
Ｄ．第３実施例：
上述した第２実施例の色変換・圧縮処理では、ブロック内の画素間でＲＧＢ各色についての階調差がいずれも小さい場合にのみ、画像データを圧縮する。こうすることにより、第１実施例に対して画像処理をより迅速化することが可能であるが、その一方で、画像データ全体としてみたときの圧縮率が小さくなる傾向がある。圧縮率があまりに小さくなってしまっては、画像データをメモリすなわちＲＡＭ１０６に対して読み書きするために時間がかかり、却って処理速度が低下するおそれが生じる。こうした可能性を回避するためには、色変換の前後で画像データを圧縮することが効果的である。以下では、こうした第３実施例の色変換・圧縮処理について説明する。
【０１３０】
図１７は、第３実施例の色変換・圧縮処理の流れを示すフローチャートである。以下ではフローチャートを参照しながら、第１実施例および第２実施例との相違点を中心に説明する。
【０１３１】
第３実施例においても、色変換・圧縮処理を開始すると、先ず初めに、隣接する画素を所定の複数個ずつまとめて、第１のブロックを生成する（ステップＳ６００）。ここでも前述した各種実施例と同様に、第１のブロックは、図６（ａ）に示すように、縦横２列ずつに並んだ４つの画素で構成されているものとして説明する。
【０１３２】
第１のブロックを生成したら、該ブロック内の所定画素間で、各画素についてのＲＧＢ画像データの階調差を算出して（ステップＳ６０２）、エッジを検出する処理を行う（ステップＳ６０４）。かかる処理は、第２実施例におけるステップＳ５０２およびＳ５０４と同様である。以下、概要のみ説明すると、先ず、ブロック内の所定画素間について、ＲＧＢ各色毎に階調差を算出し、所定の閾値と比較する。そして、閾値より大きな階調差が見出されたら、そのブロックについてはエッジを含んでいると判断する。逆に、全ての階調差が閾値より小さいことが確認されたブロックについては、エッジを含んでいないと判断する。
【０１３３】
ブロック内にエッジが存在していないと判断された場合は（ステップＳ６０４：ｎｏ）、前述した第２実施例と同様に、ブロック内のＲＧＢ画像データを圧縮し（ステップＳ６０６）、圧縮したＲＧＢ画像データの色変換を行う（ステップＳ６０８）。
【０１３４】
一方、ブロック内にエッジが存在していると判断された場合は（ステップＳ６０４：ｙｅｓ）、各画素のＲＧＢ画像データをＣ，Ｍ，Ｙ，Ｋ各色の画像データに色変換する（ステップＳ６１０）。次いで、第１実施例の色変換・圧縮処理と同様に、ブロック内の所定画素間での階調差を各色毎に算出（ステップＳ６１２）、ブロック内でのエッジの有無を各色毎に判断する（ステップＳ６１４）。すなわち、所定画素間での階調差がいずれも、所定の閾値より小さければ、その色についてはブロック内にエッジが存在しないと判断する。逆に、閾値より大きな階調差が存在する場合には、その色についてはブロック内にエッジが含まれていると判断する。
【０１３５】
こうしてブロックについてのエッジの有無を検出した結果、エッジが含まれていないと判断された色については（ステップＳ６１４：ｎｏ）、ブロック内の画像データを圧縮する処理を行う（ステップＳ６１６）。画像データの圧縮は、前述した第１実施例と同様に、圧縮しようとしている色について、ブロック内の各画素の平均階調値を算出し、各画素の階調値を平均階調値で代表させることによって行う。一方、ブロック内にエッジが含まれていると判断された色については、ブロック内の画像データを圧縮する処理はスキップする。
【０１３６】
以上のようにして、ブロック内でのエッジの有無を検出し、エッジの有無に応じて画像データを圧縮する処理を行ったら、これら画像データを圧縮情報とともにメモリすなわちＲＡＭ１０６に書き込む処理を行う（ステップＳ６１８）。圧縮情報は、画像データを圧縮している色については「１」を、圧縮していない色については「０」を書き込んでやる。
【０１３７】
こうして１つのブロックについての処理が終わったら、未処理の画素が残っているか否かを判断する（ステップＳ６２０）。そして、未処理の画素が残っていれば（ステップＳ６２０：ｎｏ）、ステップＳ６００に戻って新たなブロックを生成し、このブロック内の各画素について、続く一連の処理を行う。こうしてすべての画素についての処理を終了したら（ステップＳ６２０：ｙｅｓ）、図１７に示す第３実施例の色変換・圧縮処理を終了して、図４の画像処理に復帰する。
【０１３８】
以上に説明した第３実施例の色変換・圧縮処理においては、色変換前の画像データに基づいてエッジの有無を検出し、エッジを含まないブロックについては、ＲＧＢ画像データを圧縮した後に色変換する。こうして、圧縮後に色変換すれば、色変換を１度に行うことができるので、迅速に色変換・圧縮処理を行うことができる。
【０１３９】
また、エッジの検出されたブロックについては、各画素毎に色変換した後、各色毎にエッジの有無を検出する。そして、エッジの検出されなかった色については画像データの圧縮を行う。こうすれば、色変換後の画像データについて各色毎にエッジの有無を検出して圧縮しなければならないのは、色変換前にエッジが検出されたブロックだけでよいので、色変換・圧縮処理を迅速に行うことができる。加えて、これらブロックについては各色毎にエッジの有無を検出して圧縮しているので、第１実施例と同様に、十分な圧縮率を確保することが可能となる。
【０１４０】
Ｅ．変形例：
以下では、上述した各種実施例の変形例について簡単に説明する。
【０１４１】
（１）第１の変形例：
上述した各種実施例では、ブロック内でのエッジの有無を検出するために、図８に示した所定画素間での階調差を算出するものとした。もっとも、エッジを検出するために算出する階調差は、図８に示した所定画素間の階調差に限定されるものではない。例えば、図１８（ａ）に示すように、画素Ｐａ  と画素Ｐｄ  との階調差および画素Ｐｂ  と画素Ｐｃ  との階調差を算出することとしても良い。こうすれば、例えば図１８（ｂ）に示すように、幅が１画素の細いエッジがブロック内を斜めに横切っていない限り、２つの階調差を算出するだけでブロック内のエッジを正しく検出することができる。
【０１４２】
（２）第２の変形例：
上述した各種実施例では、ブロック内の画像データを圧縮する場合、先ず、該ブロック内の各画素の平均階調値を算出して、各画素の階調値を平均階調値に圧縮するものとして説明した。しかし、簡便には、平均階調値の代わりに、ブロック内の１つの画素の階調値に圧縮することとしても良い。再び、図１８（ａ）を用いて説明すると、ブロック内でエッジが検出されなかった場合は、図中で斜線を付した画素Ｐａ  の階調値で、ブロック内の他の画素の階調値を代表させても良い。エッジの存在しないブロックについては、各画素の階調値はほぼ近い値を取るから、平均階調値を１つの画素の階調値で代用することも可能である。階調値を平均階調値の代わりに用いる画素は、ブロック内の所定位置の画素とすることもできるし、任意の画素を選択することとしても良い。
【０１４３】
（３）第３の変形例：
上述した各種実施例においては、ブロック内にエッジが含まれているか否かだけを判断して、エッジが含まれていなければ画像データを圧縮し、エッジが含まれていれば圧縮しないものとして説明した。すなわち、画像データの圧縮状態は、圧縮されているか圧縮されていないかの、いずれかの状態しか取らないものとして説明した。しかし、エッジの有無だけでなく、エッジの方向も判断して、それに応じて圧縮状態を切り換えることとしても良い。
【０１４４】
図１９は、エッジの方向によって種々の圧縮状態を切り換えている様子を例示した説明図である。図１９（ａ）は、ブロック内にエッジが含まれていない場合を示している。この場合は、上述した各種実施例と同様に、各画素の画像データを１つの階調値に圧縮してやる。また、前述した各種実施例では、圧縮状態は２つの状態しか取り得なかったので、圧縮情報は１ｂｉｔのデータで足りたが、図１９に例示した場合は４つの圧縮状態を取り得るので、圧縮情報は２ｂｉｔのデータとなる。そこで、エッジが含まれていないブロックについては、圧縮情報として値「１１」を記憶してやる。
【０１４５】
また、縦方向に並んだ２つの画素間の階調差、すなわち、画素Ｐａ  と画素Ｐｃ  との間の階調差、および画素Ｐｂ  と画素Ｐｄ  との間の階調差はいずれも小さいが、横方向あるいは斜め方向の画素間の階調差は必ずしも小さくない場合は、ブロック内をエッジが縦方向に走っているものと考えられる。そこで、この様な場合は、図１９（ｂ）に示すように、１つのブロックを２つのサブブロックに分けて考えて、サブブロック毎に画像データを圧縮してやる。また、このときの圧縮情報として「１０」を記憶してやる。
【０１４６】
更に、横に並んだ２つの画素間での階調差は小さいが、縦方向あるは斜め方向の画素間では必ずしも階調差が小さくはない場合は、エッジがブロック内を横方向に走っていると考えられる。そこで、この様な場合は、１つのブロックを、図１９（ｃ）に示すような２つのサブブロックに分割して、サブブロックごとに画像データを圧縮してやる。このときは、圧縮情報として「０１」を記憶する。
【０１４７】
そして、いずれの場合に該当しない場合は、図１９（ｄ）に示すように、画像データを圧縮することなく、そのままメモリに記憶してやる。また、このときの圧縮情報は、画像データが圧縮されていないことを示す「００」を記憶する。
【０１４８】
この様に、ブロック内でのエッジの有無だけでなく、エッジが走っている方向も検出し、これに応じて画像データを圧縮してやれば、画像データの圧縮率を更に向上させることができる。また、このような圧縮を行った場合でも、上述した各種実施例と同様に、画像データの圧縮および解凍する処理を迅速に行うことができる。このため、色変換後の画像データをメモリに対して読み書きする動作が更に高速化され、画像処理全体として、より迅速な処理を行うことが可能となる。
【０１４９】
（４）第４の変形例：
図１４および図１５を用いて説明したハーフトーン処理では、ブロックを構成する各画素がどのような階調値を取る場合であっても、処理内容は全く同じものとして説明した。しかし、ブロック内でも、エッジを含まないとして圧縮されていた画素間では近似した階調値を取るものと考えられる。特に、図９に示したように、エッジを含まないブロックについては複数の画素の階調値を単一の階調値に圧縮する場合、解凍された各画素の階調値は同じ値となる。このように、エッジを含まないとして圧縮されていた画素については、近似した（あるいは同一の）階調値を有するものと考えられるので、これを利用して、処理の高速化を図ることも可能である。
【０１５０】
例えば、ディザ法を用いたハーフトーン処理においてディザマトリックスを画像データの階調値に応じて使い分けたり、あるいは誤差拡散法で用いられる閾値を画像データの階調値に応じて変更する場合がある。また、誤差拡散法では、画像データの階調値に応じて誤差拡散マトリックスを切り換える処理を行う場合もある。複数の画素については、階調値が近似あるいは同一であることが分かっていれば、マトリックスや閾値を変更する処理を簡素なものとすることが可能となる。
【０１５１】
以上、各種の実施例について説明してきたが、本発明は上記すべての実施例に限られるものではなく、その要旨を逸脱しない範囲において種々の態様で実施することができる。例えば、上述した機能を実現するソフトウェアプログラム（アプリケーションプログラム）を、通信回線を介してコンピュータシステムのメインメモリまたは外部記憶装置に供給し実行するものであってもよい。もちろん、ＣＤ−ＲＯＭやフレキシブルディスクに記憶されたソフトウェアプログラムを読み込んで実行するものであっても構わない。
【０１５２】
また、上述した各種実施例では、ハーフトーン処理を含む画像データ変換処理はコンピュータ内で実行されるものとして説明したが、画像データ変換処理の一部あるいは全部をプリンタ側、あるいは専用の画像処理装置を用いて実行するものであっても構わない。
【０１５３】
更には、画像表示装置は、必ずしも印刷媒体上にインクドットを形成して画像を印刷する印刷装置に限定されるものではなく、例えば、液晶表示画面上で輝点を適切な密度で分散させることにより、階調が連続的に変化する画像を表現する液晶表示装置であっても構わない。
【図面の簡単な説明】
【図１】本発明の概要を例示した印刷システムの概略構成図である。
【図２】本実施例の画像処理装置としてのコンピュータの構成を示す説明図である。
【図３】本実施例の画像表示装置としてのプリンタの概略構成図である。
【図４】本実施例の画像処理装置で行われる画像処理の流れを示すフローチャートである。
【図５】第１実施例の色変換・圧縮処理の流れを示すフローチャートである。
【図６】複数個の画素をまとめて第１のブロックを設定している様子を示す説明図である。
【図７】色変換のために参照される色変換テーブルを概念的に示した説明図である。
【図８】ブロック内で所定画素間の階調差を算出することによりエッジの有無を検出する様子を概念的に示した説明図である。
【図９】エッジの有無に応じてブロック内の画像データを圧縮し、メモリに記憶する様子を概念的に示した説明図である。
【図１０】ブロック単位で行うハーフトーン処理の流れを示すフローチャートである。
【図１１】ブロック単位で行うハーフトーン処理において設定される第２のブロックを例示した説明図である。
【図１２】ハーフトーン処理において処理したブロックで発生した誤差を周辺の画素に拡散する様子を概念的に示した説明図である。
【図１３】ブロック全体で生じた階調誤差を周辺の画素に拡散する際の拡散比率を例示した説明図である。
【図１４】ブロック単位で行うハーフトーン処理中でブロック内の各画素について２値化を行う処理の流れを示したフローチャートである。
【図１５】ブロック単位で行うハーフトーン処理中でブロック内の各画素について２値化を行う様子を概念的に示した説明図である。
【図１６】第２実施例の色変換・圧縮処理の流れを示すフローチャートである。
【図１７】第３実施例の色変換・圧縮処理の流れを示すフローチャートである。
【図１８】ブロック内でエッジを検出しながら圧縮を行う変形例を概念的に示した説明図である。
【図１９】エッジの状態に応じてブロックをサブブロックに分割しながら画像データを圧縮する変形例について示した説明図である。
【符号の説明】
１０…コンピュータ
１２…プリンタドライバ
２０…カラープリンタ
１００…コンピュータ
１０２…ＣＰＵ
１０４…ＲＯＭ
１０６…ＲＡＭ
１０８…周辺機器インターフェースＰ−Ｉ／Ｆ
１０９…ディスクコントローラＤＤＣ
１１０…ネットワークインターフェースカードＮＩＣ
１１２…ビデオインターフェースＶ−Ｉ／Ｆ
１１４…ＣＲＴ
１１６…バス
１１８…ハードディスク
１２０…デジタルカメラ
１２２…カラースキャナ
１２４…フレキシブルディスク
１２６…コンパクトディスク
２００…カラープリンタ
２３０…キャリッジモータ
２３５…紙送りモータ
２３６…プラテン
２４０…キャリッジ
２４１…印字ヘッド
２４２…インクカートリッジ
２４３…インクカートリッジ
２４４…インク吐出用ヘッド
２６０…制御回路
２６１…ＣＰＵ
２６２…ＲＯＭ
２６３…ＲＡＭ
３００…通信回線
３１０…記憶装置
【図１】
2004289274.tif 000003
【図２】
2004289274.tif 000004
【図３】
2004289274.tif 000005
【図４】
2004289274.tif 000006
【図５】
2004289274.tif 000007
【図６】
2004289274.tif 000008
【図７】
2004289274.tif 000009
【図８】
2004289274.tif 000010
【図９】
2004289274.tif 000011
【図１０】
2004289274.tif 000012
【図１１】
2004289274.tif 000013
【図１２】
2004289274.tif 000014
【図１３】
2004289274.tif 000015
【図１４】
2004289274.tif 000016
【図１５】
2004289274.tif 000017
【図１６】
2004289274.tif 000018
【図１７】
2004289274.tif 000019
【図１８】
2004289274.tif 000020
【図１９】
2004289274.tif 000021