JP2007202170A - 画像処理装置、画像処理方法、印刷制御装置、および記録媒体 - Google Patents

画像処理装置、画像処理方法、印刷制御装置、および記録媒体 Download PDF

Info

Publication number
JP2007202170A
JP2007202170A JP2007042424A JP2007042424A JP2007202170A JP 2007202170 A JP2007202170 A JP 2007202170A JP 2007042424 A JP2007042424 A JP 2007042424A JP 2007042424 A JP2007042424 A JP 2007042424A JP 2007202170 A JP2007202170 A JP 2007202170A
Authority
JP
Japan
Prior art keywords
pixel
error
gradation
determined
dot formation
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.)
Pending
Application number
JP2007042424A
Other languages
English (en)
Inventor
Shigeaki Sumiya
繁明 角谷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Seiko Epson Corp
Original Assignee
Seiko Epson Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Seiko Epson Corp filed Critical Seiko Epson Corp
Priority to JP2007042424A priority Critical patent/JP2007202170A/ja
Publication of JP2007202170A publication Critical patent/JP2007202170A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Image Processing (AREA)
  • Facsimile Image Signal Circuits (AREA)
  • Color, Gradation (AREA)

Abstract

【課題】画質の悪化を招くことなく、画像データを、ドット形成の有無によって表現された印刷データに迅速に変換する。
【解決手段】ドット形成有無の判断により該判断画素で発生する階調誤差を、一旦、中間バッファに保持する。所定数の複数画素の判断を行った後、周辺の未判断画素に拡散される拡散誤差を、中間バッファに保持した階調誤差から算出して誤差バッファに拡散させる。こうすれば、階調誤差が発生する度に誤差バッファに拡散する場合に比べて、所定画素数分の階調誤差がまとめて拡散される分だけ、階調誤差を迅速に拡散することが可能となる。平均誤差最小法と数学的に同等な処理を、かかる方法を利用して実現することもできる。
【選択図】図1

Description

この発明は、画像を構成する複数の画素の階調値で表現された画像データを変換する技術に関し、詳しくは、該画像データを各画素についてのドットの形成有無による表現形式の画像データに変換する技術に関する。
印刷媒体や液晶画面といった表示媒体上に、ドットを形成することによって画像を表現する画像表示装置は、各種画像機器の出力装置として広く使用されている。かかる画像表示装置は、局所的にはドットを形成するか否かのいずれかの状態しか表現し得ないが、画像の階調値に応じてドットの形成密度を適切に制御することによって、階調が連続的に変化する画像を表現することが可能となっている。
これら画像表示装置において、画像の階調値に応じて適切な密度でドットが形成されるように、各画素についてドット形成の有無を判断するための代表的な手法としては、誤差拡散法と呼ばれる手法あるいは、これと数学的に等価な平均誤差最小法と呼ばれる手法などがある。
誤差拡散法は、着目画素にドットを形成したこと、あるいはドットを形成しなかったことによって生じる階調表現の誤差を、着目画素周辺の未判断画素に拡散して記憶しておき、未判断画素についてのドット形成有無を判断するにあたっては、周辺画素から拡散されてきた誤差を解消するようにドット形成有無を判断する手法である。また、平均誤差最小法は、ドット形成有無の判断により生じた階調表現の誤差を周辺画素に拡散することなく着目画素に記憶しておき、その代わりに、未判断画素についてのドット形成有無を判断するに際しては、周辺画素に記憶されている誤差を読み出してこれらの誤差を打ち消すように、着目画素についてのドット形成有無を判断する手法である。これらいずれの手法においても、周辺画素で発生した階調表現の誤差を解消するようにドットの形成有無を判断しているので、画像の階調値に応じた適切な密度でドットを形成することができる。そのため、これらの手法を適用してドットの形成有無を判断すれば、高画質な画像を画像表示装置で表示することが可能となる。
しかし、誤差拡散法には、着目画素で発生した階調表現の誤差を周辺の未判断画素に拡散しながらドットの形成有無を判断しているために、これら画素に誤差を拡散して記憶させる分だけ、ドット形成有無の判断に時間がかかってしまうという問題があった。また、平均誤差最小法についても同様に、周辺画素から階調表現の誤差を読み出しながらドットの形成有無を判断しているために、周辺画素から誤差を読み出す分だけ、ドット形成有無の判断に時間がかかるという問題があった。いずれの場合にも、ドット形成有無の判断に時間がかかれば、画像を迅速に表示することは困難となる。
この発明は、従来技術における上述の課題を解決するためになされたものであり、誤差拡散法あるいは平均誤差最小法を適用した場合と同等の画質を維持しつつ、ドット形成有無の判断に要する時間を短縮化することによって、高画質の画像を迅速に表示可能な技術を提供することを目的とする。
上述の課題の少なくとも一部を解決するため、本発明の第1の画像処理装置は、次の構成を採用した。すなわち、
各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する画像処理装置であって、
前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して一時的に保持する階調誤差保持手段と、
所定数の複数画素についての前記一時的に保持された階調誤差に基づいて、該所定数の複数画素の周辺にあってドット形成有無の判断がなされていない未判断画素に拡散される拡散誤差を算出し、該算出した拡散誤差を該未判断画素に対応付けて記憶する拡散誤差記憶手段と、
前記未判断画素に対応付けて記憶された前記拡散誤差を考慮しつつ、前記画像データにおける該未判断画素の階調値に基づいて、該未判断画素についてのドット形成有無を判断するドット形成判断手段と
を備えることを要旨とする。
また、上記の第1の画像処理装置に対応する本発明の第1の画像処理方法は、
各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する画像処理方法であって、
前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して一時的に保持しておき、
所定数の複数画素についての前記一時的に保持された階調誤差に基づいて、該所定数の複数画素の周辺にあってドット形成有無の判断がなされていない未判断画素に拡散される拡散誤差を算出し、
前記算出した拡散誤差を前記未判断画素に対応付けて記憶し、
前記未判断画素に対応付けて記憶された前記拡散誤差を考慮しつつ、前記画像データにおける該未判断画素の階調値に基づいて、該未判断画素についてのドッ
ット形成有無を判断することを要旨とする。
かかる第1の画像処理装置あるいは画像処理方法においては、ドットの形成有無を判断することにより生じた前記階調誤差を一時的に保持しておき、所定数の複数画素についての階調誤差に基づいて、前記未判断画素への拡散誤差を算出してから記憶させる。こうすれば、所定数の複数画素の階調誤差を周辺の未判断画素にまとめて拡散して記憶させることができるので、各画素で生じた階調誤差を個別に拡散して記憶させる場合に比べて、迅速に記憶させることができる。その結果、ドット形成の有無の判断に要する時間が短縮化され、高画質の画像を迅速に表示させることが可能となる。
かかる第1の画像処理装置においては、前記階調誤差記憶手段は、前記拡散誤差記憶手段に対して読み書きするよりも、前記階調誤差を迅速に読み書き可能な記憶手段としてもよい。
前記所定画素数の階調誤差は、前記階調誤差記憶手段に一旦保持されてから前記拡散誤差記憶手段に記憶されるので、該階調誤差記憶手段は、該拡散誤差記憶手段と同様に頻繁に読み書きされる。従って、該階調誤差記憶手段を、該拡散誤差記憶手段に対して読み書きするよりも迅速に読み書き可能とすれば、該階調誤差が発生してから、最終的に拡散誤差として記憶されるまでの時間が短縮化され、延いては、ドット形成の有無の判断に要する時間を短縮化することができるので好適である。
かかる第1の画像処理装置あるいは変換方法においては、前記拡散誤差を各未判断画素に対応付けて記憶するに際して、次のようにしても良い。すなわち、前記階調誤差が算出される度に、未判断画素の各々に分配される分配誤差を算出して、該算出した分配誤差を各未判断画素毎に蓄積していき、前記所定数の複数画素についての前記分配誤差を全て蓄積したら、各未判断画素毎に蓄積された全ての該分配誤差を、前記拡散誤差として前記未判断画素に対応付けて蓄積することとしてもよい。
こうして階調誤差を求める度に、各未判断画素に分配誤差を蓄積しておけば、前記所定数の前記階調誤差を算出してから、前記拡散誤差を各未判断画素に対応付けて記憶させるまでの処理を迅速に行うことができる。所定数の複数画素分の階調誤差を1回拡散して記憶させただけでは、拡散すべき全ての階調誤差を記憶させることができない未判断画素についても、所定画素数分の拡散誤差を蓄積していくことにより、全ての階調誤差を拡散して記憶させることができる。従って、かかる方法を用いれば、拡散誤差を未判断画素に拡散して記憶させる処理を迅速に行うことができるので、ドット形成有無の判断に要する時間を短縮化することが可能となる。
かかる第1の画像処理装置あるいは変換方法においては、拡散誤差を各未判断画素に対応付けて記憶するに際して、上述の方法に換えて次のようにしても良い。すなわち、所定数の複数画素についての階調誤差を保持しておき、保持されている所定数の階調誤差に基づいて各未判断画素に拡散される拡散誤差を算出して、該算出した全ての拡散誤差を各未判断画素に対応付けて蓄積することとしても良い。
こうして所定数の複数の階調誤差を保持しておけば、各未判断画素へ拡散すべき拡散誤差を算出する処理が簡便となり、延いては、該所定画素数の階調誤差を周辺の未判断画素へまとめて拡散する処理が簡便となるので好適である。また、該未判断画素数に比べれば該所定画素数の方が少ないので、かかる方法を用いれば、階調誤差を算出する度に各未判断画素に分配誤差を蓄積する方法に比べて、記憶容量を節約することができて好ましい。
前述した第1の画像処理装置あるいは変換方法においては、拡散誤差を各未判断画素に対応付けて記憶するに際して、次のようにしても良い。すなわち、前記階調誤差が算出される度に、未判断画素の各々に分配される分配誤差を算出して、該算出した分配誤差を各未判断画素毎に蓄積していき、前記所定数の複数画素分の分配誤差が蓄積された各未判断画素の分配誤差を、前記拡散誤差として前記未判断画素に対応付けて記憶することとしてもよい。
このように、階調誤差を求める度に各未判断画素に分配誤差を蓄積し、所定画素数分の分配誤差が蓄積された未判断画素の分配誤差を、前記拡散誤差として記憶することとすれば、該所定画素数の拡散誤差を、各未判断画素に対応付けて記憶させる処理を迅速に行うことが可能となるので好ましい。
かかる第1の画像処理装置あるいは変換方法においては、拡散誤差を未判断画素に対応付けて記憶するに際して、上述の方法に換えて次のようにしても良い。すなわち、所定数の複数画素についての階調誤差を保持しておき、複数の該未判断画素中にあって該所定数の階調誤差が全て拡散される特定画素への拡散誤差を、該保持している階調誤差から算出して、該特定画素に対応付けて記憶することとしてもよい。
こうして所定画素数の階調誤差を保持しておき、前記特定画素への拡散誤差を算出して前記拡散誤差として記憶すれば、該拡散誤差を未判断画素へ拡散して記憶させる処理が簡便となる。その結果、該所定画素数の階調誤差を拡散して記憶する処理が迅速となり、延いては画像を表示するために要する時間を、短縮化することが可能となるので好ましい。
前述した第1の画像処理装置あるいは変換方法においては、拡散誤差を未判断画素に対応付けて記憶するに際して、次のようにしても良い。すなわち、前記所定数の複数画素周辺の第1の所定領域内にある第1の未判断画素の各々については、該所定数の複数画素についての前記階調誤差に基づき該第1の未判断画素への前記拡散誤差を算出して、該第1の未判断画素に対応付けて記憶する。また、前記所定数の複数画素の周辺にあって前記第1の所定領域内には含まれない第2の未判断画素については、前記階調誤差を算出する度に、該階調誤差から該第2の各未判断画素の各々へ拡散される前記拡散誤差を算出して、該第2の未判断画素に対応付けて記憶する。
こうすれば、前記第1の未判断画素については、所定数の複数画素から分配される分配誤差を各未判断画素にまとめて拡散することができるので、全体としてドット形成の有無を判断するために要する時間が短縮化されて好ましい。
かかる画像処理装置においては、階調誤差を算出する度に拡散誤差が算出されて拡散される前記第2の未判断画素として、前記第1の所定領域を包含した第2の所定領域内にある未判断画素に、前記拡散誤差を算出して記憶することとしても良い。
所定数の複数画素で生じた階調誤差を広い範囲に拡散させようとすれば、階調誤差の拡散範囲には、それだけ多くの未拡散画素が含まれることになるので、所定画素数の階調誤差をまとめて拡散して記憶させるための処理は複雑化する傾向にある。これに対して、階調誤差を拡散させる範囲を、前記所定数の複数画素の周辺の第1の所定領域と該第1の所定領域を包含する第2の所定領域とに分割し、該第1の所定領域にある第1の未判断画素については、所定数の複数画素についての階調誤差に基づいて各画素への拡散誤差を算出して記憶し、該第1の所定領域以外にある第2の未判断画素については階調誤差が算出される度に、該階調誤差からの拡散誤差を算出して、該第2の未判断画素の各々に対応付けて記憶させる。こうすれば、所定画素数の階調誤差をまとめて拡散すべき未判断画素数が減少するので処理を簡素化することが可能となって好適である。尚、第1の所定領域内にある第1の未判断画素に対して、所定数の複数画素についての階調誤差をまとめて拡散して記憶させるに際しては、上述した各種の方法を好適に適用することができるのはもちろんである。
かかる第1の画像処理装置あるいは変換方法においては、前記ドット形成有無の判断に関わる条件に応じて、前記階調誤差を周辺の画素に拡散させる範囲を、前記所定数の複数画素周辺の前記第1の所定領域と、該第1の所定領域を包含する第2の所定領域とに切り換えるようにしてもよい。
画質上の要請などから、ドット形成有無の判断に関わる条件に応じて、誤差を拡散させる範囲の広狭を切り換える技術が使用されることがある。このような場合に、階調誤差を拡散させる範囲を、所定数の複数画素周辺の第1の所定領域と、該第1の所定領域を包含する第2の所定領域とに切り換えるとともに、該第1の所定領域には含まれない遠方の未判断画素については階調誤差を直接拡散させることとすれば、所定画素数の階調誤差をまとめて拡散して記憶させる処理が簡素化するので好適である。
更には、前記所定数の複数画素の階調値と、該各画素についてのドット形成有無の判断結果とに基づいて、前記誤差を拡散させる範囲を、前記第1の所定領域と該第1の所定領域を包含する第2の所定領域とに切り換えることとしても良い。
例えば、表現しようとする画像データの階調値が小さな領域で、たまたまドットが形成された場合には、ドットが形成されたことによる誤差を広い範囲に拡散させれば、ドットの分散性を改善して画質を向上させることができる。あるいは、画像データの階調値が大きな領域で、たまたまドットが形成されなかった場合に、ドットが形成されなかったことによる誤差を広い範囲に拡散させれば、同様にして画質を向上させることができる。このような場合、前記第1の所定領域の未判断画素には前記所定数の複数画素からの拡散誤差をまとめて拡散するとともに、たまたまドットが形成された場合あるいは形成されなかった場合には、該第1の所定領域に含まれない遠方の未判断画素にも、階調誤差を算出する度に誤差を拡散する。こうすれば、遠方の未判断画素に誤差を拡散することは稀なので、実質的には処理速度をほとんど低下させることなく、ドット形成有無を判断する処理を簡素化することができるので好適である。
前述した第1の画像処理装置あるいは変換方法においては、前記所定数の複数画素を互いに隣接する画素として、該所定数の複数画素についての各階調誤差に基づき前記拡散誤差を算出して、前記未判断画素に対応付けて記憶することとしても良い。
階調誤差の発生した複数画素が互いに隣接している場合、互いに隣接していない場合に比べて、各画素で発生した階調誤差を拡散させる範囲の互いに重複する部分が広くなる。従って、各未判断画素への拡散誤差を、所定画素数分の階調誤差から算出して各画素に拡散した場合に、該所定数の複数画素が互いに隣接していれば、複数の階調誤差からの拡散誤差がまとめて拡散される未判断画素が多くなるので、それだけ、階調誤差を迅速に拡散して記憶させることが可能となって好適である。尚、かかる場合においても、所定画素数分の階調誤差から算出した拡散誤差を未判断画素に拡散して記憶させるに際しては、上述した各種の方法を好適に適用可能なことは言うまでもない。
所定数の隣接した複数画素の階調誤差に基づいて拡散誤差を算出する上記の第1の画像処理装置あるいは変換方法においては、未判断画素のドット形成有無を判断するに際して、既に該未判断画素に対応付けて記憶されている拡散誤差に加えて、該未判断画素に隣接する画素からの前記拡散誤差を考慮して、ドット形成有無を判断することとしてもよい。
こうすれば、隣接する画素のドット形成有無が判断された未判断画素についてのドットの形成有無を判断する場合、隣接する画素から拡散されてくる拡散誤差については、該未判断画素に拡散させて記憶させる処理を行うことなくドットの形成有無を判断することができるので、判断を迅速に行うことが可能となって好適である。
また、前述した課題の少なくとも一部を解決するため、本発明の第2の画像処理装置は、次の構成を採用した。すなわち、
各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する画像処理装置であって、
前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出し、該判断画素に対応付けて記憶する階調誤差記憶手段と、
前記ドット形成の有無を判断しようとする着目画素の周辺にあって該ドット形成有無を判断済みの既判断画素毎に対応付けて記憶されている前記階調誤差を、該既判断画素毎に保持する階調誤差保持手段と、
前記既判断画素毎に保持されている階調誤差を考慮しつつ、前記画像データにおける前記着目画素の階調値に基づいて、ドット形成有無を判断するドット形成判断手段と、
前記着目画素の次にドット形成有無を判断する次着目画素についての前記既判断画素を検出して、該検出した既判断画素の中で前記階調誤差が一時的に保持されていない既判断画素の階調誤差を前記階調誤差記憶手段から読み出し、該読み出した階調誤差で該次着目画素についての判断に使用しない該階調誤差を更新して、該次着目画素の判断に供する階調誤差更新手段と
を備えることを要旨とする。
上記の第2の画像処理装置に対応する本発明の第2の画像処理方法は、
各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する画像処理方法であって、
前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して、該判断画素に対応付けて記憶し、
前記ドット形成の有無を判断しようとする着目画素の周辺にあって該ドット形成有無を判断済みの既判断画素毎に対応付けて記憶されている前記階調誤差を、該既判断画素毎に保持しておき、
前記既判断画素毎に保持されている階調誤差を考慮しつつ、前記画像データにおける前記着目画素の階調値に基づいて、ドット形成有無を判断し、
前記着目画素の次にドット形成有無を判断する次着目画素についての前記既判断画素を検出し、
前記検出した既判断画素の中で前記階調誤差が保持されていない既判断画素の階調誤差を読み出して、該読み出した階調誤差で該次着目画素についての判断に使用しない該階調誤差を更新した後、該次着目画素の判断に供することを要旨とする。
かかる第2の画像処理装置および画像処理方法においては、着目画素のドット形成判断に際しては、前記既判断画素に対応付けて記憶されている階調誤差を保持しておき、該保持されている階調誤差を考慮してドットの形成有無を判断する。次着目画素についてのドット形成有無を判断する際には、先ず初めに、該次着目画素についての既判断画素を検出し、次いで、該着目画素についての既判断画素との異同を調べる。そして、該着目画素のドット形成判断に使用しなかった既判断画素に記憶されている階調誤差を読み出し、読み出した階調誤差で、次着目画素の判断に使用しない階調誤差を更新した後、該次着目画素の判断に供する。
こうすれば、次着目画素のドット形成判断に際しては、該次着目画素についての判断には使用するが、着目画素についてのドット形成判断には使用しない階調誤差のみを読み出せばよい。その結果、ドット形成判断のために読み出さなければならない階調誤差数を減少させることができ、ドットの形成有無を判断するために要する時間を短縮化することが可能となる。
かかる第2の画像処理装置あるいは変換方法においては、前記着目画素で発生した階調誤差を一時保持しておき、該保持した階調誤差で、前記次着目画素についての判断に使用しない前記階調誤差を更新するようにしてもよい。
こうすれば、着目画素に対応付けて記憶されている階調誤差を読み出すことなく、次着目画素のドット形成判断を行うことができるので、迅速にドットの形成有無を判断することが可能となる。
また、印刷媒体上にインクドットを形成して画像を印刷する印刷部に対して、インクドットの形成を制御するための印刷データを出力することで、該印刷部を制御する印刷制御装置においては、本発明の上述した第1の画像処理装置あるいは第2の画像処理装置を好適に利用することができる。すなわち、上述した第1の画像処理装置あるいは第2の画像処理装置においては、各画素の階調値を示す画像データを受け取り、該画像データをドットの形成有無による画像データに迅速に変換することができる。このため、かかる第1の画像処理装置あるいは第2の画像処理装置を、前記印刷制御装置に適用すれば、画像データを印刷データに迅速に変換することができる。こうして得られた印刷データを、前記印刷部に出力すれば、該印刷部では高画質な画像を迅速に印刷することが可能となるので好適である。
また、本発明は、上述した第1の画像処理方法、あるいは第2の画像処理方法を実現するプログラムをコンピュータに読み込ませ、コンピュータを用いて実現することも可能である。従って、本発明は次のような記録媒体としての態様も含んでいる。すなわち、上述の第1の画像処理方法に対応する記録媒体は、
各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する方法を実現するプログラムを、コンピュータで読み取り可能に記録した記録媒体であって、
前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して一時的に保持しておく機能と、
所定数の複数画素についての前記一時的に保持された階調誤差に基づいて、該所定数の複数画素の周辺にあってドット形成有無の判断がなされていない未判断画素に拡散される拡散誤差を算出する機能と、
前記算出した拡散誤差を前記未判断画素に対応付けて記憶する機能と、
前記未判断画素に対応付けて記憶された前記拡散誤差を考慮しつつ、前記画像データにおける該未判断画素の階調値に基づいて、該未判断画素についてのドット形成有無を判断する機能と
を実現するプログラムを記録していることを要旨とする。
また、上述の第2の画像処理方法に対応する記録媒体は、
各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する方法を実現するプログラムを、コンピュータで読み取り可能に記録した記録媒体であって、
前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して、該判断画素に対応付けて記憶する機能と、
前記ドット形成の有無を判断しようとする着目画素の周辺にあって該ドット形成有無を判断済みの既判断画素毎に対応付けて記憶されている前記階調誤差を、該既判断画素毎に保持しておく機能と、
前記既判断画素毎に保持されている階調誤差を考慮しつつ、前記画像データに示された前記着目画素の階調値に基づいて、ドット形成有無を判断する機能と、
前記着目画素の次にドット形成有無を判断する次着目画素についての前記既判断画素を検出する機能と、
前記検出した既判断画素の中で前記階調誤差が保持されていない既判断画素の階調誤差を読み出して、該読み出した階調誤差で該次着目画素についての判断に使用しない該階調誤差を更新した後、該次着目画素の判断に供する機能と
を実現するプログラムを記録していることを要旨とする。
これら記録媒体に記録されているプログラムをコンピュータに読み込ませ、該コンピュータを用いて上述の各種機能を実現すれば、画素毎の階調値を示す画像データを、ドット形成の有無による表現形式の画像データに迅速に変換することが可能となる。
本発明の作用・効果をより明確に説明するために、本発明の実施の形態を、次のような順序に従って以下に説明する。
A.実施の形態:
B.第1実施例:
B−1.装置構成:
B−2.画像データ変換処理の概要:
B−3.第1実施例の階調数変換処理:
B−4.変形例:
C.第2実施例:
C−1.第2実施例において階調数変換処理の時間を短縮化する原理:
C−2.第2実施例の階調数変換処理:
C−3.変形例:
D.第3実施例:
E.第4実施例:
E−1.第4実施例において階調数変換処理の時間を短縮化する原理:
E−2.第4実施例の階調数変換処理:
A.実施の形態:
図1を参照しながら、本発明の実施の形態について説明する。図1は、印刷システムを例にとって、本発明の実施の形態を説明するための説明図である。本印刷システムは、画像処理装置としてのコンピュータ10と、カラープリンタ20等から構成されている。コンピュータ10は、デジタルカメラやカラースキャナなどの画像機器からカラー画像の階調画像データを受け取ると、該画像データを、カラープリンタ20で印刷可能な各色ドットの形成有無により表現された印刷データに変換する。かかる画像データの変換は、プリンタドライバ12と呼ばれる専用のプログラムを用いて行われる。尚、カラー画像の階調画像データは、各種アプリケーションプログラムを用いてコンピュータ10で作成することもできる。
プリンタドライバ12は、解像度変換モジュール,色変換モジュール,階調数変換モジュール,インターレースモジュールといった複数のモジュールから構成されている。階調画像データをドットの形成有無による表現形式に変換する処理は、階調数変換モジュールで行われる。他の各モジュールで行われる処理については後述する。カラープリンタ20は、これら各モジュールで変換された印刷データに基づいて、印刷媒体上に各色インクドットを形成することによってカラー画像を印刷する。
本発明の印刷システムにおける階調数変換モジュールは、図示するように、階調誤差算出部と誤差バッファとの間に中間バッファが設けられた構成となっている。この中間バッファを活用することで、ドット形成有無の判断を迅速に行うことが可能となっている。
すなわち、一般に、階調データをドット形成の有無によって表現しようとすると、おのずから、各画素には階調表現の誤差が発生する。前述した誤差拡散法あるいは平均誤差最小法と呼ばれる手法では、発生した階調誤差を、主記憶領域の一部に用意された大容量の誤差バッファに蓄積しておき、他の画素についてのドット形成有無を判断する際には、該画素に蓄積されている誤差を誤差バッファから読み出して、読み出した誤差の値を考慮しながらドット形成の有無を判断している。このことから明らかなように、ドット形成の有無を判断するためには、誤差バッファに対して頻繁にデータの読み書きを行う必要がある。誤差バッファには大容量のバッファが使用され、データの読み書きにある程度の時間を要するので、頻繁に読み書きすればその分だけ時間がかかってしまう。
これに対して本発明の印刷システムにおける階調数変換モジュールでは、誤差バッファよりも小容量の中間バッファを活用することで、後ほど詳細に説明するように、誤差バッファに対して読み書きする頻度を減少させている。中間バッファは小容量の領域が繰り返して読み書きされるため、誤差バッファよりも高速に読み書きすることが容易である。例えば、主メモリとCPUとの間に、主メモリよりも高速に読み書き可能なキャッシュメモリを有するコンピュータシステムにおいては、中間バッファからデータを読み出そうとすると、ほとんどの場合にキャッシュから読み出されると期待され、特別な配慮をしなくとも自然に中間バッファは誤差バッファよりも高速に読み書きすることが可能である。
また、CPUのレジスタに余裕がある場合は、中間バッファの少なくとも一部を、キャッシュメモリよりも更に高速で読み書きが可能なレジスタに割り当てることが可能であり、更に高速化を図ることができる。中間バッファの一部をCPUのレジスタに割り当てるには、例えばC言語ではregister宣言を用いることで、処理ソフトウェアのソースコードで明示的に指定することが可能である。更に、最適化能力の高いコンパイラの中には、余っているレジスタを使用頻度の高い変数に自動的に割り当てる機能を有するものがあり、このようなコンパイラを用いた場合には、明示的に指定せずとも、中間バッファの一部がCPUのレジスタに割り当てられることになる。
このように、繰り返し読み書きされる小容量の中間バッファは、通常のコンピュータシステムにおいては、特別な配慮を行わなくても高速に読み書き可能となっている。もちろん、ソフトウェアではなくハードウェアなどで処理する場合にも、小容量の中間バッファを用いた方が、高速に読み書き可能な構成を容易に実現することができる。
データの読み書きにある程度の時間を要する誤差バッファへの読み書き頻度が減少すれば、その分だけドット形成有無の判断を迅速に行うことが可能となる。もちろん、中間バッファを用いていても、論理的には誤差拡散法あるいは平均誤差最小法と同等の処理を行うので、これら方法と同等の画質を維持することができる。誤差バッファへ読み書きする頻度を減少させるために中間バッファを活用する具体的な方法には、種々の態様が存在しており、これら各種の態様について、各種実施例を用いて以下に説明する。
B.第1実施例:
B−1.装置構成:
図2は、第1実施例の画像処理装置としてのコンピュータ100の構成を示す説明図である。コンピュータ100は、CPU102を中心に、ROM104やRAM106などを、バス116で互いに接続して構成された周知のコンピュータである。CPU102は実際に処理を行う演算器と、処理中のデータを一時保持する複数のレジスタとから構成されている。レジスタに保持されているデータは、RAM106に記憶されているデータよりも遙かに高速に処理することが可能である。もちろん、レジスタの代わりに、キャッシュメモリと呼ばれる特殊な記憶素子を活用しても良い。キャッシュメモリは、レジスタほどではないが、RAM106よりも高速にデータを読み書きすることができる。また、キャッシュメモリを活用すれば、レジスタを使用する場合よりも多量のデータを扱うことが容易となる。
コンピュータ100には、フレキシブルディスク124やコンパクトディスク126のデータを読み込むためのディスクコントローラDDC109や、周辺機器とデータの授受を行うための周辺機器インターフェースP・I/F108、CRT114を駆動するためのビデオインターフェースV・I/F112等が接続されている。P・I/F108には、後述するカラープリンタ200や、ハードディスク118等が接続されている。また、デジタルカメラ120や、カラースキャナ122等をP・I/F108に接続すれば、デジタルカメラ120やカラースキャナ122で取り込んだ画像を印刷することも可能である。また、ネットワークインターフェースカードNIC110を装着すれば、コンピュータ100を通信回線300に接続して、通信回線に接続された記憶装置310に記憶されているデータを取得することもできる。
図3は、第1実施例のカラープリンタ200の概略構成を示す説明図である。カラープリンタ200はシアン,マゼンタ,イエロ,ブラックの4色インクのドットを形成可能なインクジェットプリンタである。もちろん、これら4色のインクに加えて、染料濃度の低いシアン(淡シアン)インクと染料濃度の低いマゼンタ(淡マゼンタ)インクとを含めた合計6色のインクドットを形成可能なインクジェットプリンタを用いることもできる。尚、以下では場合によって、シアンインク,マゼンタインク,イエロインク,ブラックインクのそれぞれを、Cインク,Mインク,Yインク,Kインクと略称するものとする。
カラープリンタ200は、図示するように、キャリッジ240に搭載された印字ヘッド241を駆動してインクの吐出およびドット形成を行う機構と、このキャリッジ240をキャリッジモータ230によってプラテン236の軸方向に往復動させる機構と、紙送りモータ235によって印刷用紙Pを搬送する機構と、ドットの形成やキャリッジ240の移動および印刷用紙の搬送を制御する制御回路260とから構成されている。
キャリッジ240には、Kインクを収納するインクカートリッジ242と、Cインク,Mインク,Yインクの各種インクを収納するインクカートリッジ243とが装着されている。キャリッジ240にインクカートリッジ242,243を装着すると、カートリッジ内の各インクは図示しない導入管を通じて、印字ヘッド241の下面に設けられた各色毎のインク吐出用ヘッド244ないし247に供給される。各色毎のインク吐出用ヘッド244ないし247には、48個のノズルNz が一定のノズルピッチkで配列されたノズル列が1組ずつ設けられている。
制御回路260は、CPU261とROM262とRAM263等から構成されており、キャリッジモータ230と紙送りモータ235の動作を制御することによってキャリッジ240の主走査と副走査とを制御するとともに、コンピュータ100から供給される印刷データに基づいて、各ノズルから適切なタイミングでインク滴を吐出する。こうして、制御回路260の制御の下、印刷媒体上の適切な位置に各色のインクドットを形成することによって、カラープリンタ200はカラー画像を印刷することができる。
尚、各色のインク吐出ヘッドからインク滴を吐出する方法には、種々の方法を適用することができる。すなわち、ピエゾ素子を用いてインクを吐出する方式や、インク通路に配置したヒータでインク通路内に泡(バブル)を発生させてインク滴を吐出する方法などを用いることができる。更には、インクを吐出する代わりに、熱転写などの現象を利用して印刷用紙上にインクドットを形成する方式や、静電気を利用して各色のトナー粉を印刷媒体上に付着させる方式のプリンタであっても構わない。
また、インク吐出ヘッドから吐出するインク滴の大きさを制御したり、あるいは微細なインク滴を一度に複数吐出して、吐出するインク滴の数を制御するといった方法を用いて、印刷用紙上に形成されるインクドットの大きさを制御な可能なプリンタ、いわゆるバリアブルドットプリンタを用いることも可能である。
B−2.画像データ変換処理の概要:
図4は、第1実施例の画像処理装置としてのコンピュータ100が、受け取った画像データに所定の画像処理を加えることにより、該画像データを印刷データに変換する処理の流れを示すフローチャートである。かかる処理は、コンピュータ100のオペレーティングシステムがプリンタドライバを起動することによって開始される。以下、図4に従って、第1実施例の画像データ変換処理について簡単に説明する。
プリンタドライバは、画像データ変換処理を開始すると、先ず初めに、変換すべきRGBカラー画像データの読み込みを開始する(ステップS100)。次いで、取り込んだ画像データの解像度を、カラープリンタ200が印刷するための解像度に変換する(ステップS102)。カラー画像データの解像度が印刷解像度よりも低い場合は、線形補間を行うことで隣接画像データ間に新たなデータを生成し、逆に印刷解像度よりも高い場合は、一定の割合でデータを間引くことによって画像データの解像度を印刷解像度に変換する。
こうして解像度を変換すると、カラー画像データの色変換処理を行う(ステップS104)。色変換処理とは、R,G,Bの階調値の組み合わせによって表現されているカラー画像データを、C,M,Y,Kなどのカラープリンタ200で使用する各色の階調値の組み合わせによって表現された画像データに変換する処理である。色変換処理は、色変換テーブル(LUT)と呼ばれる3次元の数表を参照することで迅速に行うことができる。
色変換処理に続いて、階調数変換処理を開始する(ステップS106)。階調数変換処理とは次のような処理である。色変換処理によって変換された階調データは、各色毎に256階調幅を持つデータとして表現されている。これに対し、本実施例のカラープリンタ200では、「ドットを形成する」,「ドットを形成しない」のいずれかの状態しか採り得ない。すなわち、本実施例のカラープリンタ200は局所的には2階調しか表現し得ない。そこで、256階調を有する画像データを、カラープリンタ200が表現可能な2階調で表現された画像データに変換する必要がある。このような階調数の変換を行う処理が階調数変換処理である。前述したように、本実施例においては中間バッファを活用することにより、ドットの形成有無の判断を迅速に行うことが可能となっている。階調数変換処理については、後ほど詳細に説明する。
こうして階調数変換処理を終了したら、プリンタドライバはインターレース処理を開始する(ステップS108)。インターレース処理は、ドットの形成有無を表す形式に変換された画像データを、ドットの形成順序を考慮しながらカラープリンタ200に転送すべき順序に並べ替える処理である。プリンタドライバは、インターレース処理を行って最終的に得られた画像データを、印刷データとしてカラープリンタ200に出力する(ステップS110)。カラープリンタ200は、印刷データに従って、各色のインクドットを印刷媒体上に形成する。その結果、画像データに対応したカラー画像が印刷媒体上に印刷される。
以下では、第1実施例の階調数変換処理において、中間バッファを活用することにより、ドットの形成有無の判断を迅速に行う処理について説明する。
B−3.第1実施例の階調数変換処理:
中間バッファを活用してドット形成有無の判断に要する時間を短縮化する原理を説明するための準備として、いわゆる誤差拡散法においてドットの形成有無の判断を行う方法について簡単に説明する。
図5は、誤差拡散法において、ドットの形成有無を判断した画素で発生した階調誤差を、周辺画素に拡散させながら、ドットの形成有無を判断していく様子を概念的に示した説明図である。尚、以下では、ドットの形成有無を判断しようと着目した画素を着目画素と呼ぶ。図5(a)に示すように、P00と符合した画素(着目画素)でドット形成有無を判断した結果として、該着目画素の画像データにおける階調値との間に階調誤差E00が発生したものとする。図中に斜線を施した部分はドット形成有無を判断済みの画素を示している。誤差拡散法では、階調誤差E00に所定の重み係数(誤差拡散係数)を乗算し、得られた値を、着目画素周辺の未判断画素に拡散する。尚、以下で使用する添え字は次の内容を意味するものとする。例えば、添え字「00」は着目画素を示し、添え字「01」は着目画素の右隣の画素を、添え字「0 -1」は左隣の画素を示す。添え字「10」は着目画素の真下の画素を、添え字「-1 0」は着目画素の真上の画素を示す。また、添え字「11」は添え字「10」と「01」とが組み合わされたものと考えて、着目画素の右斜め下の画素を示しているものとする。
図6は、階調誤差を拡散する際に使用する誤差拡散係数の設定例を示す説明図である。尚、図6で斜線が付されている画素位置は着目画素の位置を示している。このような、着目画素から周辺画素への誤差拡散係数を表示したマトリックスは、誤差拡散マトリックスと呼ばれる。例えば、図6(a)の誤差拡散マトリックスでは、着目画素の右隣には誤差拡散係数K01の値として「1/4」が設定されている。従って、このような誤差拡散マトリックスを使用すると、着目画素で発生した階調誤差の1/4の誤差が右隣の画素に配分されることになる。同様に、着目画素の左下,真下,右下の各画素にも、着目画素で生じた階調誤差の1/4の誤差が配分される。誤差拡散マトリックスは図6に例示するものに限られず、誤差を拡散する範囲や誤差拡散係数などは種々の値を設定することが可能であり、実際の誤差拡散法では良好な画質が得られるように、適宜、適切な誤差拡散マトリックスが使用される。尚、説明の煩雑化を避けるために、以下の説明では、例示した誤差拡散マトリックスの中では最も拡散範囲の狭いマトリックス、すなわち、図6(a)の誤差拡散マトリックスを使用するものとして説明する。
誤差拡散マトリックスとして図6(a)のマトリックスを使用するものとすれば、図5(a)に示すように着目画素P00で生じた階調誤差E00は、右隣の画素P01,左下の画素P1-1 ,真下の画素P10,右下の画素P11の合計4つの画素に、それぞれ階調誤差E00の1/4ずつ配分される。こうして着目画素周辺のそれぞれの画素に拡散された誤差(拡散誤差)は、画素毎に分離された状態で記憶しておく必要がある。そのため拡散誤差は、多数の画素についての拡散誤差を記憶することの可能な、大容量のRAM106(図2参照)に記憶される。
画素P00についての階調誤差を周辺画素に拡散したら、今度は右隣の画素P01について、ドット形成有無の判断を開始する。図5(b)は着目画素P01についてのドット形成有無を判断する様子を概念的に示す説明図である。ドット形成判断に際しては、先ず、周辺画素から着目画素P01に配分されて蓄積されている拡散誤差を読み出し、読み出した拡散誤差で着目画素P01の画像データを補正する。図5(b)に示すように、着目画素P01には、ドット形成判断済みの周辺画素、すなわち画素P-10 ,画素P-11 ,画素P-12 ,画素P00の4つの画素から、前述の誤差拡散マトリックスに従って拡散されてきた誤差が蓄積されている。この拡散誤差をRAM106から読み出して、着目画素P01の画像データを補正し、得られた補正値を所定の閾値と比較することでドットの形成有無を判断する。判断の詳細については後述する。こうして着目画素P01についてドットの形成有無を判断すると、画素P01には新たな階調誤差E01が発生するので、この階調誤差を誤差拡散マトリックスに従って周辺画素に拡散する。このように誤差拡散法では、着目画素で階調誤差が発生する度に、その都度周辺にある複数の画素に拡散しながらドット形成有無を判断している。このため、RAM106に対してデータを頻繁に読み書きする必要があるので、その分だけ、ドット形成有無の判断に要する時間も長くなる。
これに対して本実施例の階調数変換処理においては、中間バッファを活用することにより、ドット形成有無の判断に要する時間を短縮化する。図7は、中間バッファを活用して、判断に要する時間を短縮化する原理を示す説明図である。本実施例では、CPU102に内蔵されているレジスタを中間バッファとして使用する。前述したように、レジスタはRAM106に比べて高速に処理することが可能である。もちろん、レジスタではなく、キャッシュメモリを用いて実質的に同等の処理を行っても構わない。以下、図7を参照しながら、第1実施例においてドット形成有無の判断に要する時間を短縮化する原理について説明する。
図7(a)は、着目画素P00についてドット形成有無を判断した様子を示している。該判断を行った結果として、着目画素には階調誤差E00が発生している。図7(a)の右側に表示した6つの矩形は、中間バッファとして使用される6つのレジスタを模式的に表示したものである。説明の便宜上、以下では、各レジスタにR01,R02,R1-1 ,R10,R11,R12と符合を付して区別する。第1実施例の階調数変換処理においては、着目画素P00で発生した階調誤差E00を、直接RAM106に拡散するのではなく、一旦レジスタに蓄える。すなわち、レジスタR01の値を、着目画素の右隣の画素P01に配分すべき誤差で更新する。画素P01に配分すべき誤差は、誤差拡散マトリックスに従って、K01・E00で求めることができる。同様に、レジスタR1-1 の値を、着目画素P00の左下の画素P1-1 に配分すべき誤差で更新し、レジスタR10の値を真下の画素P10に配分すべき誤差で、レジスタR11の値を右下の画素P11に配分すべき誤差で、それぞれ更新する。それぞれの誤差は誤差拡散マトリックスに従って、K1-1 ・E00,K10・E00,K11・E00で求めることができる。
こうして周辺の4つの画素に配分すべきそれぞれの拡散誤差で、対応する4つのレジスタの値を更新したら、今度は画素P00の右隣の画素P01について、ドットの形成有無を判断する。画素P01の判断に際しては、新たな着目画素P01の拡散誤差をRAM106から読み出して、読み出した誤差とレジスタR01に記憶されている誤差とを加算した値で、着目画素P01の階調データを補正する。このように、着目画素P01の拡散誤差とレジスタR01の誤差とを加算した値で補正すれば、通常の誤差拡散法と、実質的にはまったく同じ処理を行うことができる。すなわち、通常の誤差拡散法では、図5を用いて説明したように、階調誤差が発生する度にこれを周辺の画素に拡散しておき、右隣の画素P01のドット形成有無を判断する際には、画素P01に配分されている拡散誤差を読み出して画素P01の階調データを補正し、補正した値に基づいてドットの形成有無を判断している。これに対して、本実施例においては、図7(a)に示すように、画素P01に配分される誤差がレジスタR01に記憶されているので、画素P01の拡散誤差とレジスタR01に記憶された誤差とを加算した値で、階調データを補正することで、通常の誤差拡散法と実質的に全く同等の処理を行うことができるのである。こうして新たな着目画素P01についてドットの形成有無を判断すると、着目画素P01には、新たな階調誤差E01が発生する(図7(b)参照)。
画素P01に発生した階調誤差E01も、画素P00の階調誤差E00と同様に、誤差拡散マトリックスに設定された割合で、それぞれのレジスタに拡散させる。図7(b)を参照しながら具体的に説明する。先ず、画素P02は着目画素P01の右隣の画素であるから、対応するレジスタR02の値を、誤差拡散マトリックスに設定された誤差拡散係数K01と階調誤差E01とを乗算した値で更新する。画素P10は、着目画素P02の左下の画素であるから、対応するレジスタR10の値 には、誤差拡散係数K1-1 と階調誤差E01とを乗算した値K1-1 ・E01を加算する。ここで、図7(b)に示すように、レジスタR10には、既に画素P00から拡散されてきた誤差K10・E00が記憶されているので、既に拡散されている誤差と新たに拡散されてきた誤差とをレジスタR02上で加算するのである。この結果、レジスタR02の値は、2つの画素から拡散されてきた誤差の和(K10・E00+K1-1 ・E01)に更新される。以下、画素P11および画素P12についても同様に、対応するレジスタR11の値は拡散誤差(K11・E00+K10・E01)で更新され、レジスタR12の値はK11・E01で更新される。
以上のような処理を行うことにより、画素P00で発生した階調誤差E00と画素P01での階調誤差E01とが、それぞれのレジスタに拡散されたことになる。そこで、図7(c)に示すように、各レジスタに記憶されている誤差を周辺画素に対応する誤差バッファ(具体的にはRAM106)に書き込んでいく。すなわち、画素P02の誤差バッファにはレジスタR02に記憶されている値K01・E01を加算し、画素P1-1 の誤差バッファにはレジスタR1-1 に記憶されている値K1-1 ・E00を、画素P10にはレジスタR10の値(K10・E00+K1-1 ・E01)を、画素P11にはレジスタR11の値K11・E00+K10・E01を、画素P12にはレジスタR12の値K11・E01を、それぞれ加算していく。こうすることにより、通常の誤差拡散法において画素P00および画素P01での誤差を拡散した状態(図5(c)参照)と同様の誤差が、周辺の5つの画素の各誤差バッファに拡散されることになる。尚、画素P01については既にドット形成有無の判断を終了しているため、レジスタR01の値をRAM106に加算する必要はない。このように本実施例の方法では、2画素分のドット形成有無を判断して、5画素分の誤差バッファに誤差を拡散しているので、1画素分の判断をする度に2.5画素の割合で誤差バッファへの誤差拡散を行っていることになる。
尚、以上では説明の便宜上、2値化を行った画素周辺の5つの画素に拡散される全ての誤差を、一旦レジスタに記憶し、2つの画素から拡散されてくる誤差をレジスタ上で加算してから誤差バッファに拡散するものとして説明した。もちろん、レジスタ上で誤差の加算を行わない画素、例えば画素P1-1 ,画素P02,画素P12については、誤差バッファに直接、誤差を拡散しても構わない。
図5に示した通常の誤差拡散法では、1画素のドット形成判断を行う度に周辺の4画素に誤差を拡散していた。これに対して、本実施例の方法においては、未だ2値化していない同一の画素に、複数の画素から拡散される誤差を一旦レジスタ上で加算してからまとめて拡散することにより、1画素分の判断をする度に2.5画素分の誤差バッファに誤差を拡散するだけでよい。もちろん、通常の誤差拡散法に対して、誤差をレジスタへ配分する工程が追加されているが、レジスタの値の更新あるいはレジスタ上での加算といった処理はRAMへ誤差を拡散させる処理に比べて遙かに高速に行うことができるので、全体としてドット形成有無の判断に要する時間を短縮化することが可能となる。尚、ここではレジスタに記憶するものとして説明するが、必ずしもレジスタに限られず、誤差バッファとして使用されている記憶手段よりも高速に読み書き可能な記憶手段でありさえすればよい。また、例えば、CPUとRAMとのデータのやり取りを高速で行うために設けられているキャッシュメモリを活用することにより、実質的に同等な処理を行うものであっても構わない。本実施例で用いる中間バッファは、小容量のメモリ領域を各画素の処理に繰り返して使用するため、通常は設計者が明示的に指定しなくとも、コンパイラやCPU自体の機能によって自動的にレジスタやキャッシュメモリに割り当てられ、高速に読み書きすることが可能となる。
尚、以上の説明では、2つの画素から拡散されてくる誤差をレジスタ上で直接、加算するものとしたが、それぞれの誤差を別々のレジスタに一旦記憶した後、別のレジスタ上で加算しても構わない。例えば、図7(b)の画素P10に拡散される誤差を例にとって説明すると、先ずレジスタR10の値を画素P00からの誤差K10・E00で更新し、次いでレジスタR10上で、画素P01からの誤差K1-1 ・E01を加算している。このような処理に換えて、画素P00からの誤差と画素P01〜の誤差とをそれぞれレジスタRa とレジスタRb とに記憶しておき、2つのレジスタの値をレジスタR10上で加算しても構わないのはもちろんである。
図8は、以上に説明した本実施例の階調数変換処理の流れを示すフローチャートである。この処理はコンピュータ100のCPU102によって行われる。尚、前述したように、本実施例のカラープリンタは、C,M,Y,Kの4色のインクドットを形成可能なプリンタであり、図8に示す階調数変換処理も各色毎に行っているが、以下では説明の煩雑化を避けるために、インクドットの色を特定せずに説明する。尚、上記の4色に加えて、LCインク,LMインクを加えて6色プリンタを使用してもよいのはもちろんである。
また、前述したように本実施例のカラープリンタは、各色毎に大きさの異なるドットを形成可能なバリアブルドットプリンタとすることも可能である。バリアブルドットプリンタを使用する場合、例えば、大ドット,中ドット,小ドットの各種ドットを形成可能なバリアブルドットプリンタを用いる場合には、以下に説明する階調数変換処理は、各種大きさのドット毎に行われる。
このように、使用するインクの色が増加したり、種々の大きさのドットが形成可能となるにつれて階調数変換処理を行う回数が増加するので、それだけ処理に要する時間も長くなる傾向がある。以下に説明する本実施例の階調数変換処理は迅速な処理が可能であるために、このような場合にも好適に適用することができる。
本実施例の階調数変換処理を開始すると、先ず初めに、ドット形成有無を判断しようとしている2画素分の画像データCd1,Cd2を読み込む(ステップS200)。尚、ここでは便宜上、左側の画素を第1画素と呼び、右側の画素を第2画素と呼ぶことにする。画像データは、コンピュータ100に内蔵されているRAM106に記憶されている。次いで、第1画素および第2画素のそれぞれに拡散されて蓄積されている拡散誤差Ed1,Ed2を誤差バッファから読み出す(ステップS202)。誤差バッファもRAM106上に設けられている。
続いて、第1画素の画像データCd1と第1画素の拡散誤差Ed1とを加算することにより、第1画素の補正データCx1を算出する(ステップS204)。こうして得られた補正データCx1と所定の閾値th とを比較して(ステップS206)、補正データの方が大きければ第1画素にドットを形成すると判断して、第1画素についての判断結果を示す変数Cr1にドットを形成することを意味する値「1」書き込む(ステップS208)。そうでなければ第1画素にはドットを形成しないと判断して、変数Cr1にドットの形成しないことを意味する値「0」を書き込む(ステップS210)。
こうして第1画素についてのドット形成有無を判断したら、該判断に伴って第1画素に発生する階調誤差を算出する(ステップS212)。第1画素で発生する階調誤差E1 は、第1画素の補正データCx1から、ドットを形成することにより、あるいはドットを形成しないことにより第1画素で表現される階調値(以下では、このような階調値を結果値という)を減算することで求めることができる。
次いで、第1画素で発生した階調誤差E1 を中間バッファに拡散する(ステップS214)。この処理は、図7(a)を用いて説明した処理に相当する処理である。すなわち、第1画素の階調誤差E1 に誤差拡散マトリックスに設定された誤差拡散係数を乗算して、周辺画素に拡散すべき拡散誤差を算出し、得られた拡散誤差をそれぞれの中間バッファに記憶しておく。
第1画素で発生した誤差を中間バッファに拡散したら、第2画素についてのドット形成有無の判断を開始する。第2画素についての判断を行うためには、第2画素の補正データを算出する必要がある。そこで、予め読み出しておいた第2画素の画像データCd2と、第2画素の拡散誤差Ed2と、第1画素から第2画素に配分されてきた誤差とを加算して、第2画素の補正データCx2を算出する(ステップS216)。図7を用いて説明したように、第1画素から第2画素に拡散されてきた誤差は、予め定められた中間バッファに記憶されている。尚、図8に示す実施例では、第1画素の画像データおよび拡散誤差を読み出すと同時に、第2画素の画像データおよび拡散誤差も予め読み出しておくものとしたが、もちろん、第2画素については、補正データの算出に必要になってから、画像データと拡散誤差とを読み出すものとしても良い。第1画素および第2画素についての画像データと拡散誤差とを一度に読み出す場合には、メモリ上で連続した位置から読み出すといった方法を採用することによって、これらデータを迅速に読み出すことが可能になる。
尚、第2画素の画像データおよび拡散誤差については、ステップS200およびS202ではなく、ステップS216の直前で読み出すようにしても構わない。こうすれば、CPU102のレジスタ数に限りがある場合に、第2画素の画像データおよび拡散画素を読み出すまでの間は、レジスタを他の目的に使用することが可能となるので好適である。
ステップS216で第2画素についての補正データCd2を算出したら、第1画素の場合と同様に、所定の閾値th と比較することによってドットの形成有無を判断する(ステップS218)。補正データCd2の方が大きければ第2画素にドットを形成すると判断して、ドットを形成することを意味する値「1」を書き込み(ステップS220)、そうでなければドットを形成しないことを意味する値「0」を書き込む(ステップS222)。次いで、第2画素の階調誤差E2 を算出する(ステップS224)。第2画素で発生する階調誤差E2 も第1画素の階調誤差E1 と同様にして、第2画素の補正データCx2から、第2画素についての結果値(画素についてのドットの形成有無を判断したことにより、その画素に表現される階調値)を減算することで求めることができる。
続いて、第2画素の階調誤差を中間バッファに拡散する処理を行う(ステップS226)。この処理は、図7(b)を用いて説明した処理に相当する処理である。すなわち、第2画素の階調誤差E2 に誤差拡散マトリックスに設定された各画素の誤差拡散係数を乗算して、周辺画素に拡散すべき拡散誤差を算出し、得られた拡散誤差をそれぞれの中間バッファに記憶させる。ここで、中間バッファに第1画素から配分されてきた誤差が既に記憶されている場合には、既に記憶されている誤差に新たに配分した誤差を加算して記憶する。図7(b)に示した例では、レジスタR10およびレジスタR11の2つのレジスタについては既に配分されている誤差が存在するので、これに新たに配分した誤差を加算して記憶させる。この結果、5つのレジスタには第1画素および第2画素から、周辺の各画素に拡散すべき誤差が蓄積されることになる。そこで、続くステップS228の処理では、中間バッファに画素毎に記憶されている誤差を、RAM上の誤差バッファに加算し(図7(c)参照)、加算し終わったら中間バッファをリセットしておく。
次いで、全画素についてドット形成有無を判断したか否かを判断し(ステップS230)、未判断の画素が残っていればステップS200に戻って続く一連の処理を行う。こうして全画素について、ドット形成有無の判断を終了するまで、階調誤差を周辺画素に拡散しながら、2画素ずつドットの形成有無を判断し、全画素について判断を終了したら、本実施例の階調数変換処理を終了して、図4の画像データ変換処理に復帰する。
以上に説明した本実施例の階調数変換処理においては、2画素分のドット形成有無を判断する度に、5画素分の誤差バッファに誤差を拡散すればよい。通常の誤差拡散法を用いて同様の処理を行うためには、1画素の判断を行う度に4画素分の誤差バッファに誤差を拡散しなければならないことと比較すれば、本実施例の階調数変換処理を採用することで、誤差バッファへの誤差の拡散に要する時間を大きく短縮することができる。特に、階調数変換処理では、画像を構成する多数の画素についてドット形成有無を判断するとともに、発生した階調誤差を周辺画素に拡散していかなければならないので、誤差バッファへの誤差の拡散に要する時間は階調数変換処理に要する時間の中で比較的大きな割合を占めている。このことから、本実施例の階調数変換処理を採用して誤差の拡散に要する時間を短縮化すれば、階調数変換処理を含めた画像処理全体を迅速に行うことができ、延いては画像を迅速に印刷することが可能となる。
以上の説明では、説明の便宜上、2画素ずつドットの形成有無を判断するものとして説明した。すなわち、2つの画素で生じる階調誤差を中間バッファに蓄えておき、2つの画素から拡散されてきた誤差を中間バッファ上で加算し、まとめて誤差バッファに拡散する。もちろん、より多くの画素についてドット形成有無を判断し、発生した誤差を中間バッファ上で加算するようにしても良い。例えば、3画素ずつドットの形成有無を判断することとした場合は、図9(a)に示すように、ドット形成有無を判断する画素(図中で斜線を付して表示)の周辺にある6つの画素の誤差バッファに誤差を拡散すればよい。すなわち、判断を行う画素1つあたり、2画素分の誤差バッファに誤差を拡散すれば足りる。更に、6画素ずつドットの形成有無を判断した場合は、図9(b)に示すように、9画素分の誤差バッファに誤差を拡散すればよいので、判断画素1つあたりでは1.5画素分の誤差バッファに誤差を拡散すればよい。このように、一度にドット形成有無を判断する画素数を多くするほど、判断画素1画素あたりに拡散する誤差バッファの画素数が減少するので、階調数変換処理に要する時間を短縮化させることが可能になる。
B−4.変形例:
また、以上に説明した第1実施例の階調数変換方法においては、第1画素および第2画素から周辺画素に拡散される拡散誤差を各階調誤差に基づいて算出し、周辺画素毎に蓄積しておくものとして説明したが、次のようにしても良い。すなわち、第1画素および第2画素で発生した階調誤差そのものを中間バッファに記憶しておき、これら記憶している階調誤差から周辺画素に拡散すべき拡散誤差を算出し、各画素に対応する誤差バッファに記憶させるようにしても良い。かかる方法は、中間バッファに記憶される値が蓄積中の拡散誤差であるか、階調誤差であるかの違いがあるものの、誤差バッファには同じ誤差が記憶されることから実質的に同等の処理を行うことができる。以下、このような第1実施例の変形例について説明する。
図10は、第1実施例の変形例における階調数変換方法の流れを示すフローチャートである。以下、図8に示した第1実施例の階調数変換処理と異なる部分を中心に、変形例の階調数変換方法について、図10を参照しながら簡単に説明する。
変形例においても第1実施例の階調数変換処理と同様に、処理を開始すると先ず初めに第1画素と第2画素の画像データCd1,Cd2を読み込む(ステップS300)。ここで、第1画素とはドット形成有無を判断しようとしている2つの画素の中の左側の画素を言い、第2画素とは右側の画素を言う。次いで、第1画素および第2画素のそれぞれに拡散されている拡散誤差Ed1,Ed2を誤差バッファから読み出す(ステップS302)。誤差バッファは第1実施例の場合と同様にRAM106上に設けられている。次いで、第1画素の画像データと拡散誤差とを加算して、第1画素の補正データCx1を算出する(ステップS304)。続いて、補正データCx1と所定の閾値thとを比較し(ステップS306)、補正データの方が大きければ第1画素にドットを形成すると判断して、第1画素についての判断結果を示す変数Cr1に、ドットを形成することを意味する値「1」を書き込む(ステップS308)。そうでなければ、第1画素にはドットを形成しないと判断して、ドット形成しないことを意味する値「0」を変数Cr1に書き込む(ステップS310)。こうして第1画素についてのドット形成の有無を判断したら、該判断に伴って第1画素に発生する階調誤差を算出する(ステップS312)。階調誤差は、第1実施例の場合と同様に、補正データCx1から結果値を減算することにより求めることができる。
第1実施例の変形例においては、こうして算出した第1画素の階調誤差E1 を中間バッファに記憶する(ステップS314)。すなわち、第1実施例の階調数変換処理においては階調誤差を中間バッファに拡散させたが、変形例の階調数変換処理においては階調誤差を拡散させることなく、そのまま中間バッファに記憶するのである。
第1画素の階調誤差E1 を中間バッファに記憶したら、第2画素についてのドット形成有無を判断するために、第2画素の補正データCx2を算出する(ステップS316)。すなわち、予め読み出しておいた第2画素の画像データCd2と拡散誤差Ed2と、第1画素から拡散されてくる誤差とを加算する。第1画素からの誤差は、中間バッファに記憶されている第1画素の階調誤差E1 と誤差拡散係数とを乗算することで求められる。第1実施例の場合と同様に、誤差拡散係数の値は誤差拡散マトリックスに設定されている。こうして算出した第2画素の補正データCx2と所定の閾値thとを比較して(ステップS318)、補正データCx2の方が大きければドットを形成すると判断し、第2画素についての判断結果を示す変数Cr2にドットを形成することを意味する値「1」を書き込む(ステップS320)。そうでなければ、ドットは形成しないと判断して、変数Cr2にドットを形成しないことを意味する値「0」を書き込む(ステップS322)。次いで、第2画素についての階調誤差E2 を算出し(ステップS324)、算出した階調誤差E2 は、周辺画素に拡散させることなく、そのまま中間バッファに一旦記憶する(ステップS326)。このとき、第2画素の階調誤差E2 は先に記憶しておいた第1画素の階調誤差E1 とは別個に記憶しておく。第2画素の階調誤差E2 は、第1画素の階調誤差E1 と同様に、第2画素の補正データCx2から結果値を減算して求めることができる。
こうして、第1画素の階調誤差E1 と第2画素の階調誤差E2 とをそれぞれの中間バッファに記憶したら、2つの階調誤差をまとめて誤差バッファに拡散させる。この処理を、図7を利用して説明する。図7では、画素P00が第1画素に対応し、画素P01が第2画素に対応している。前述したように、第1画素および第2画素で発生した階調誤差は、これら画素の周辺にある5つの画素に所定の割合で拡散される。例えば、第1画素の左下にある画素P1-1 には画素P00からの誤差K1-1 ・E00が拡散される。ここで、K1-1 は、階調誤差を左下の画素へ拡散させる際に使用する誤差拡散係数であり、誤差拡散係数の値は誤差拡散マトリックスに設定されている。また、画素P10には、第1画素からの誤差K10・E00と、第2画素からの誤差K1-1 ・E01とを加算した誤差K10・E00+K1-1 ・E01が拡散される。他の3つの画素についても同様に、画素P11にはK11・E00+K10・E01が、画素P12にはK11・E01が、画素P02にはK01・E01の値が、それぞれ拡散される。このように、周辺の各画素に拡散される誤差の値は、階調誤差E1 および階調誤差E2 が決まれば誤差拡散係数に基づいて算出することができる。そこで、ステップS328においては、中間バッファに記憶されている第1画素の階調誤差E1 と第2画素の階調誤差E2 とを用いて、第1画素と第2画素の周辺の各画素に拡散する誤差を算出し、各画素に対応する誤差バッファに加算していくのである。こうした処理が終了したら、次の画素の処理に使用するために、階調誤差E1 ,E2 を記憶している中間バッファをリセットしておく。
次いで、全画素についてドット形成有無を判断した否かを判断し(ステップS330)、未判断の画素が残っていたらステップS300に戻って続く一連の処理を行う。こうして全画素についてドット形成の有無を判断したら、第1実施例の変形例の階調数変換処理を終了して、図4の画像データ変換処理に復帰する。
以上に説明した変形例の方法によっても、第1実施例の階調数変換処理と実質的に同等の処理を行うことができる。かかる変形例の方法によれば、第1実施例の方法よりも中間バッファの容量を節約することができる。
C.第2実施例:
C−1.第2実施例において階調数変換処理の時間を短縮化する原理:
以上に説明した第1実施例の階調数変換処理においては、ドット形成有無を判断して発生した階調誤差を、高速に読み書き可能なレジスタなどの中間バッファに拡散しておき、所定画素数のドット形成有無の判断を終了する度に、中間バッファに拡散されている全ての誤差を誤差バッファに加算していく。これに対して、以下に説明する第2実施例の階調数変換処理においては、ドット形成有無を判断する度に、1画素分ずつ誤差バッファに加算して行く。後述するように、第2実施例の方法によれば、第1実施例の方法よりも少ないレジスタ数で階調数変換処理を実現することができ、更に、レジスタなどの中間バッファから誤差バッファへの書き込み頻度も少なくすることができる。以下、かかる第2実施例について説明する。
初めに第2実施例の処理原理、すなわち、1画素のドット形成有無を判断する度に1画素分の拡散誤差を誤差バッファに加算して行くことによって通常の誤差拡散法と実質的に同等の処理を行う原理を、図11を参照しながら説明する。図11の斜線を付した部分は、ドット形成判断を行った画素の領域を示している。尚、以下でも、説明の便宜のために、第1実施例の場合と同様に誤差拡散マトリックスは図6(a)に示したマトリックスを使用するものとする。図11(a)は、画素P00についてのドット形成有無の判断を行い、生じた階調誤差E00を周辺画素に拡散している様子を示している。
ここで、太い破線で囲って示した画素P11に着目すると、画素P11には、画素P00で生じた誤差E00に加えて、画素P00の右隣の画素P01で生じた誤差E01と、その更に右隣の画素P02で生じた誤差E02とが配分されている(図11(b),(c)参照)。つまり1つの画素には、連続する3つの画素から続けて誤差が配分されていることになる。尚、連続する3つの画素から誤差が配分されるのは、図6(a)あるいは図6(e)に示す誤差拡散マトリックスを用いた場合で、他のマトリックス、例えば図6(b)や図6(f)のマトリックスを用いた場合は連続する5つの画素からの誤差が、図6(c)のマトリックスを用いた場合は連続する7つの画素からの誤差が、それぞれ続けて配分されることになる。このように、各画素には連続する画素から続けて誤差が配分されてくるので、配分されてくる誤差を画素毎に中間バッファ上で蓄積し、所定画素数の誤差を蓄積し終わったら、その画素についてはひとまず誤差の拡散が終了したと考えて、中間バッファに蓄積した誤差を誤差バッファに書き込んでいく。こうして、ひとまず誤差の蓄積が終了したと考えられる中間バッファの誤差を、対応する画素の誤差バッファに書き込んでいけば、同じ画素の誤差バッファに何度も誤差を書き込む必要がなくなるので、誤差バッファへ読み書きする頻度を減らすことができる。
図12は、上述した原理を、中間バッファを活用して実現している様子を概念的に示した説明図である。図12(a)は、画素P00でドット形成有無を判断した状態を示している。図12(a)の右側に示した4つの矩形は、それぞれ中間バッファとしてのレジスタを模式的に示したものである。以下では、各レジスタにR1 ,R2 ,R3 ,R4 と符号を付して識別する。着目画素P00で発生した階調誤差E00は、誤差拡散マトリックスに設定された誤差拡散係数が乗算されて、各レジスタに拡散される。尚、図示が煩雑化することを避けるため、図12では、画素P00から左下の画素に拡散される誤差をE00_LDと略して表示する。誤差E00_LDの値は、画素P00の階調誤差E00に誤差拡散係数K1-1 を乗算することによって求めることができる。同様に、画素P00から真下の画素に拡散される誤差をE00_D と略して表示し、画素P00から右下の画素に拡散される誤差をE00_RDと、画素P00から右横の画素に拡散される誤差をE00_R と略して表示することとする。他の画素で発生した階調誤差についても同様に、例えば、画素P01から左下の画素に拡散される誤差はE01_LDと略して表示し、画素P01から真下の画素に拡散される誤差はE01_D と、右下の画素に拡散される誤差はE01_RDと、右横の画素に拡散される誤差はE01_R とそれぞれ略して表示する。また、各レジスタの右側に付した星印は、所定画素数の誤差を蓄積し終わったレジスタを示している。星印の意味する内容については後述する。
図12(a)を参照して、着目画素P00で生じた階調誤差E00がレジスタR1 ないしレジスタR4 の4つのレジスタに蓄積される様子を説明する。4つのレジスタの中、レジスタR1 は、着目画素から右横の画素に拡散される誤差が上書きされるレジスタである。他の3つのレジスタとは異なり、常に着目画素の右横の画素への誤差が上書きされる。図12(a)ではレジスタR1 には、着目画素P00から右横の画素P01に拡散される誤差E00_R の値が上書きされている。他の3つのレジスタには、着目画素から左下、真下、右下の各画素に拡散されるそれぞれの誤差が加算される。いずれのレジスタにいずれの誤差が加算されるかは、以下に説明するように着目画素の移動に伴って順番に切り替わっていく。
先ず、着目画素が画素P00にある場合(図12(a)参照)には、レジスタR2 には着目画素から画素P10への誤差(着目画素から真下の画素に拡散される誤差)が加算される。レジスタR3 には着目画素から画素P1-1 への誤差(着目画素から左下の画素に拡散される誤差)が加算される。レジスタR4 には着目画素から画素P11への誤差(着目画素から右下の画素に拡散される誤差)が加算される。
次に、着目画素が画素P01に移動した場合を考える(図12(b)参照)。着目画素が移動しても、レジスタR2 には依然として画素P10への誤差が加算される。着目画素の移動後は、画素P10は着目画素の左下の画素となっているから、着目画素との位置関係で言えば、レジスタR2 には着目画素から左下の画素への誤差が加算されることになる。換言すれば、着目画素が画素P00にある時には、レジスタR2 には着目画素から真下の画素への誤差が加算されたのに対して、着目画素が画素P01に移動すると、着目画素から左下の画素への誤差が加算されることになる。
同様に、レジスタR4 には画素P11への誤差が加算されるので、着目画素が画素P00にあるときには着目画素から右下の画素への誤差が加算されるが、着目画素が画素P01に移動すると、着目画素から真下の画素への誤差が加算されることになる。
レジスタR3 については、着目画素が画素P00にあるときには着目画素の左下の画素P1-1 への誤差を加算したが、着目画素が画素P01に移動した後は、もはや画素P1-1 への誤差の拡散は不要である。そこで、レジスタR3 には新たな着目画素P02から画素P12への誤差を加算する。結局レジスタR3 についても他のレジスタと同様に、着目画素が移動すると、着目画素から見て異なる方向への誤差が加算されることになる。すなわち、着目画素が画素P00にある時には、レジスタR3 には着目画素から左下の画素への誤差が加算されるが、着目画素が画素P01に移動すると、着目画素から右下の画素への誤差が加算されることになる。
更に進んで、着目画素が画素P01から画素P02に移動した場合にも同様に、レジスタR2 ないしレジスタR4 の3つのレジスタには、着目画素の移動に伴って、着目画素から見て異なる方向にある画素への誤差が加算されることになる。図12(c)は、着目画素が画素P02に移動した時に、着目画素P02から各レジスタに誤差が拡散されている様子を示している。前述の図12(b)と図12(c)とを比較すれば明らかなように、着目画素が画素P01にある時には、レジスタR2 ,レジスタR3 ,レジスタR4 の各レジスタには着目画素から左下の画素,右下の画素,真下の画素への誤差が加算されるが、着目画素が画素P02から画素P03に移動すると、各レジスタにはそれぞれ着目画素から右下の画素,真下の画素,左下の画素への誤差が加算されることになる。
このように、第2実施例の階調数変換処理においては、着目画素から右下の画素,真下の画素,左下の画素への誤差が、レジスタR2 ないしレジスタR4 の3つのレジスタに加算されるが、それぞれの誤差がいずれのレジスタに加算されるかは、着目画素の移動に伴って順番に切り替わっていく。こうして着目画素を移動させながら、各レジスタをそれぞれ適切なタイミングでリセットしつつ、順番に誤差を加算していけば、以下に説明するように、連続する3つの着目画素からの誤差が、各レジスタに順番に蓄積されることになる。以下、レジスタR4 を例にとって具体的に説明する。
着目画素が画素P00にある場合には、図12(a)に示すようにレジスタR4 には着目画素P00から右下の画素への誤差E00_RDが加算される。後述するように、誤差E00_RDを加算する時点では、レジスタR4 は既にリセットされているので、記憶されている誤差はない。着目画素が画素P01に移動すると、図12(b)に示すように、レジスタR4 には着目画素P01から真下の画素への誤差E01_D が加算される。レジスタR4 には、先の着目画素P00からの誤差E00_RDが既に加算されているから、この誤差に加えて、着目画素P01からの誤差E01_D が加算されることになる。着目画素が画素P02に移動すると、図12(c)に示すように、レジスタR4 には着目画素P02から左下の画素への誤差E02_LDが加算される。レジスタR4 には、先の着目画素P00およびP01からの、それぞれの誤差E00_RDおよび誤差E01_D が既に加算されているから、これらの誤差に加えて着目画素P02からの誤差E02_LDが加算されることになる。その結果、着目画素P02からの誤差を加算した時点でレジスタR4 には、着目画素P00ないし着目画素P02の連続する3つの着目画素からの誤差が蓄積されることになる。図12(c)において、レジスタR4 の右横に示された星印は、連続する3つの着目画素の中の最後の着目画素からの誤差が、レジスタR4 に蓄積されることを示している。こうして、連続する3つの画素からの誤差をレジスタR4 に蓄積し終わったら、蓄積した値を誤差バッファに書き込む。
上述の説明から明らかなように、レジスタR4 には画素P11に拡散される誤差が蓄積されているから、レジスタR4 に蓄積された値は、画素P11に対応する誤差バッファに書き込まれる。図12(c)において、レジスタR4 から誤差バッファに向かう白抜きの矢印は、レジスタR4 に蓄積した誤差を誤差バッファに書き込む様子を模式的に示したものである。また、誤差バッファと画素P11との結ぶ破線の矢印は、画素P11に対応する誤差バッファであることを模式的に示したものである。蓄積した値を誤差バッファに書き込んだ後は、レジスタR4 の値をリセットする。図12(a)の説明において、着目画素P00からの誤差を加算する時点では、レジスタR4 が既にリセットされていたのは、直前の着目画素P0-1 からの誤差を加算した時点でレジスタR4 に連続する3つの画素からの誤差が蓄積され、レジスタR4 がリセットされたからである。
次に、レジスタR3 に着目して説明する。図12(a)に示すように、着目画素P00からの誤差を加算した時点で、レジスタR3 には連続する3つの着目画素P0-2 ,P0-1 ,P00からの誤差が蓄積されている。レジスタR3 の右横に示された星印は、着目画素P00からの誤差を蓄積すれば、連続する3つの着目画素からの誤差が蓄積されることを示している。そこで、着目画素P00からの誤差を加算した後に、レジスタR3 に蓄積された値を誤差バッファに書き込む。レジスタR3 に蓄積された誤差は画素P1-1 への誤差であるので、蓄積された誤差は、画素P1-1 に対応する誤差バッファに書き込む。こうして、蓄積した誤差を誤差バッファに書き込んだら、レジスタR3 の値をリセットしておく。
ここで、レジスタR3 がリセットされるタイミングと、前述のレジスタR4 がリセットされるタイミングとを比較すると、レジスタR4 は着目画素P00からの誤差が加算される前、すなわち着目画素P0-1 からの誤差を加算した後にリセットされるが、レジスタR3 は着目画素P00からの誤差を加算した後にリセットされる。従って、レジスタR3 はレジスタR4 に対して、着目画素1つ分だけ遅れてリセットされることになる。
図12(b)に示すように、着目画素が画素P00から画素P01に移動すると、レジスタR3 には、それまでの画素P1-1 に代えて新たな画素P12が割り振られる。画素P12は着目画素P01に対して右下に位置する画素であるから、レジスタR3 には、着目画素から右下の画素へ拡散される誤差E01_RDが加算されることになる。レジスタR3 の値は先にリセットされているので、着目画素P01からの誤差が加算される時点では、レジスタR3 には加算されている誤差はない。着目画素が画素P02に移動すると、図12(c)に示すように、レジスタR3 には、着目画素から真下の画素に拡散される誤差E02_D が、既に加算されている誤差E01_RDに加えて加算される。更に、着目画素が次の画素P03に移動した時点で、レジスタR3 には、画素P01ないし画素P03の連続する3つの着目画素からの誤差が蓄積されることになり、レジスタR3 に蓄積された値が誤差バッファに書き込まれることになる。前述したレジスタR4 に蓄積された誤差は、着目画素P02からの誤差を加算した後に誤差バッファに書き込まれたが、レジスタR3 については、画素1つ分だけ遅れて、着目画素P03からの誤差を加算した後に誤差バッファに書き込まれることになる。
レジスタR2 については、レジスタR3 に対して、更に着目画素1つ分だけタイミングが遅れることになる。すなわち、レジスタR3 については、図12(a)に示すように、着目画素P00からの誤差を加算した後に、レジスタに蓄積した値が誤差バッファに書き込まれてレジスタがリセットされたが、レジスタR2 については、着目画素P01からの誤差を加算した後にレジスタに蓄積された値が誤差バッファに書き込まれてレジスタがリセットされることになる。
このように、レジスタR2 ないしレジスタR4 の3つのレジスタには、着目画素が移動する度に、連続する3つの着目画素からの誤差が順番に蓄積されて、誤差バッファに順次書き込まれていく。
以上、説明したように、4つのレジスタのうち、レジスタR1 は次の画素のドット形成有無の判断に使用する誤差を記憶し、レジスタR2 ないしレジスタR4 の3つのレジスタは階調誤差を順次蓄積していくために使用すれば、1画素のドット形成有無を判断する度に、連続する3画素分の誤差の蓄積が終了した画素から、1画素分ずつ誤差バッファに書き込んでいくことができる。
C−2.第2実施例の階調数変換処理:
図13は、以上に説明した第2実施例の階調数変換処理の流れを示すフローチャートである。この処理も第1実施例の階調数変換処理と同様に、コンピュータ100のCPU102によって行われる。尚、以下の説明では、インクの色あるいはドットの大きさを特定せずに説明するが、各色毎に、あるいは各種大きさのドットについて同様の処理を行う。以下では、図13のフローチャートに従って、第1実施例の階調数変換処理との相違点を中心に、第2実施例の階調数変換処理について説明する。
第2実施例の階調数変換処理を開始すると、着目画素についての画像データCd と拡散誤差Ed とをRAM106から読み込み(ステップS400)。続いて、画像データCd と、拡散誤差Ed と、レジスタR1 に記憶されている誤差とを加算することにより、補正データCx を算出する(ステップS402)。補正データCx を算出したら、レジスタR1 はリセットしておく(ステップS404)。こうして得られた補正データCx と所定の閾値th とを比較して(ステップS406)、補正データの方が大きければドットを形成すると判断して、判断結果を示す変数Cr にドットを形成することを意味する値「1」書き込む(ステップS408)。そうでなければドットを形成しないと判断して、変数Cr にドットの形成しないことを意味する値「0」を書き込む(ステップS410)。
こうしてドット形成有無を判断したら、これに伴って発生する階調誤差Eを算出する(ステップS412)。階調誤差Eは、第1実施例と同様に、補正データCx から、着目画素での結果値(ドットを形成することにより、あるいはドットを形成しないことにより着目画素で表現される階調値)を減算することで求められる。
次いで、誤差拡散マトリックスによって画素位置毎に定まる所定の誤差拡散係数とステップS412で求めた階調誤差Eとを乗算し、画素位置毎に求められた誤差を、各レジスタに加算していく。先ず、着目画素から右隣の画素に拡散される誤差をレジスタR1 に加算する(ステップS414)。次いで、レジスタR2 ないしレジスタR4 の3つのレジスタにそれぞれの誤差を加算していく。これら3つのレジスタの中で、連続する着目画素の3つ目の画素からの誤差が加算されるレジスタ、すなわち図12の中で星印を付して示したレジスタには、予めフラグを設定しておく。こうしてフラグの設定されているレジスタには、着目画素の左下の画素に拡散する誤差を加算する(ステップS416)。図6(a)の誤差拡散マトリックスに示されるように、着目画素の左下の画素には、階調誤差Eと誤差拡散係数K1-1 とを乗算した値が配分される。誤差を加算していく3つのレジスタのうち、フラグの設定されたレジスタの1つ前のレジスタには、着目画素の直ぐ下の画素に配分すべき誤差を加算する(ステップS418)。着目画素の真下の画素に配分する誤差は、階調誤差Eと誤差拡散係数K10とを乗算して求められる。ここで、フラグの設定されたレジスタの1つ前のレジスタとは、例えば、図12(a)に示すように星印がレジスタR3 に設定されている場合はレジスタR2 、図12(b)に示すように星印がレジスタR2 に設定されている場合はレジスタR4 のレジスタを指す。3つのレジスタの中の残りのレジスタには、着目画素の右下の画素に配分すべき誤差、すなわち階調誤差Eと誤差拡散係数K11とを乗算した値を加算する(ステップS420)。
こうして階調誤差Eに所定の誤差拡散係数を乗算した値を、各レジスタに加算したら、フラグのセットされているレジスタに蓄積されている拡散誤差を、着目画素の左下の画素に対応する誤差バッファに書き込む(ステップS422)。例えば、図12(c)に示すように着目画素が画素P02にある場合は、画素P11に対応する位置の誤差バッファに誤差を書き込んでやる。フラグのセットされたレジスタR4 には画素P00と画素P01と画素P02のそれぞれの画素から配分されてきた誤差が蓄積されており、図5に示した通常の誤差拡散法と比較すれば、第2実施例の処理においても実質的に同等の処理が行われていることが分かる。こうして、蓄積した誤差を誤差バッファに書き込んだら、新たに配分されてくる誤差を蓄積するためにレジスタをリセットしておく(ステップS424)。
以上のようにして1つの着目画素についての処理を終了したら、フラグを現在のレジスタの1つ前のレジスタに移動させた後(ステップS426)、全画素について処理を終了したか否かを判断し(ステップS428)、未処理の画素が残っていればステップS400に戻って、全画素についての処理が終了するまで続く一連の処理を繰り返す。全画素についての処理が終了したら、第2実施例の階調数変換処理を抜けて、図4の画像データ変換処理に復帰する。
尚、ステップS414において、誤差をレジスタR1 に加算する代わりに、レジスタR1 に上書きすることとしてもよい。こうすれば、ステップS404においてレジスタR1 をリセットする処理を省略することができるので好ましい。同様に、ステップS420において、残りのレジスタに誤差を加算する処理を上書きする処理に変更すれば、ステップS424においてレジスタをリセットする処理を省略することが可能となるので好ましい。
以上、説明した第2実施例の階調数変換処理においては、1つの画素のドット形成有無を判断する度に、1つの画素の拡散誤差を誤差バッファに書き込むだけでよい。従って、通常の誤差拡散法に対して、誤差バッファに誤差を拡散するための時間を大きく短縮化することができる。前述したように、階調数変換処理に通常の誤差拡散法を用いた場合、誤差の拡散に要する時間は階調数変換処理に要する時間の中で比較的大きな割合を占めている。このことから、第2実施例の階調数変換処理を採用すれば処理時間が短縮化され、延いては画像を迅速に印刷することが可能となる。
尚、前述の第1実施例の階調数変換方法を用いた場合でも、誤差を拡散するために要する時間を短縮化することができるが、第2実施例の方法を採用すれば、誤差の拡散時間を更に効率よく短縮化することができる。すなわち、通常の誤差拡散法と比較した場合、前述の第1実施例の方法を使用した場合、1回のドット形成判断あたりでは2.5画素分の頻度で誤差を誤差バッファに加算するだけで足りていたが、第2実施例の方法を使用すれば、1回のドット形成判断あたりに誤差を書き込む頻度を1画素分にまで減少させることができる。また、図7に示した第1実施例の場合では、中間バッファとして6つのレジスタを使用したが、第2実施例の方法の場合は4つのレジスタを使用しているだけであり、その分だけCPU102のレジスタを他の目的に使用することが可能になる。
C−3.変形例:
上述した第2実施例の階調数変換処理においては、着目画素で発生した誤差を4つのレジスタに蓄積しているが、このうちのレジスタR1 と、他の3つのレジスタR2 ないしレジスタR4 とでは、レジスタの使い方が若干異なっている。すなわち、レジスタR1 については、着目画素の右隣の画素に配分すべき誤差が常に上書きされるが、他の3つのレジスタについては、着目画素に対する相対位置は一定ではなく、着目画素が移動する度に移動していた。
これに対して、図14に示すように、各レジスタの対応する画素位置を着目画素に対して固定することとしてもよい。すなわち、例えば、レジスタR1 には着目画素の右隣の画素に配分すべき誤差が常に上書きされ、レジスタR2 には着目画素の右下の画素に配分すべき誤差が、レジスタR3 には着目画素の真下の画素に配分すべき誤差が、レジスタR4 には着目画素の左下の画素に配分すべき画素が常に加算されるようにしてもよい。このように、各レジスタと着目画素との位置関係を固定した上で、後述するように、着目画素の移動に合わせて各レジスタに蓄積されている誤差を、順次となりのレジスタに移し替えていくのである。こうすれば、常に同じレジスタに蓄積されている誤差を誤差バッファに書き込めがよいので、レジスタから誤差バッファに拡散誤差を書き込む処理を簡素化することができる。また、各レジスタで使用される誤差拡散係数も常に同じ値となるので、着目画素で発生した階調誤差から各レジスタに加算する誤差を算出する処理も、簡素化することが可能となる。
以下、このような第2実施例の変形例としての階調数変換処理について、図15を参照しながら簡単に説明する。図15(a)は、着目画素P00についてのドット形成有無を判断した状態を示している。図の右側に示されている4つの矩形は、各レジスタを模式的に示したものである。レジスタR1 には、常に着目画素の右側の画素に配分すべき誤差が上書きされる。また、レジスタR2 には、常に着目画素の右下の画素に配分すべき誤差が加算され、レジスタR3 には着目画素の真下の画素に配分すべき誤差が、レジスタR4 には着目画素の左下の画素に配分すべき誤差が加算される。
このように、各レジスタには、着目画素に対して常に同じ位置の画素に配分すべき誤差が加算されるので、それぞれの誤差拡散係数は常に同じ値となる。すなわち、レジスタR1 の誤差拡散係数は、常に着目画素の右側の画素への誤差拡散係数K01であり、レジスタR2 の誤差拡散係数は、常に着目画素の右下の画素への誤差拡散係数K11である(図6参照)。同様に、レジスタR3 の誤差拡散係数は常にK10であり、レジスタR4 の誤差拡散係数は常にK1-1 となる。こうして、各レジスタの誤差拡散係数が常に同じ値となるので、着目画素で発生した階調誤差から、各レジスタに加算すべき誤差の算出を容易に行うことができる。
着目画素で発生した階調誤差E00を各レジスタに加算したら、レジスタR4 に蓄積されている誤差の値を誤差バッファに書き込む処理を行うと同時に、各レジスタに蓄積されている値を1つずつとなりのレジスタにシフトさせる。すなわち、レジスタR3 の値をレジスタR4 に移動させ、レジスタR2 の値をレジスタR3 に移動させる(図15(a)の下方を参照)。
以上の処理を終了したら、次いで、着目画素を画素P01に移して、再び同様の処理を行う。着目画素P01で発生した階調誤差E01を、所定の誤差拡散係数をかけてそれぞれのレジスタに加算したら、レジスタR4 に蓄積されている値を誤差バッファに書き込む処理を行う。先に、各レジスタに記憶されている値を1つずつシフトする処理を行っているので、図15(b)に示すように各レジスタへ誤差を加算する処理が終了した時点では、レジスタR4 には常に3つの画素からの誤差が蓄積されていることになる。従って、第2実施例の変形例においては、常に同じレジスタに蓄積されている誤差を誤差バッファに書き込んでやればよい。このため、レジスタから誤差バッファに拡散誤差を書き込む処理を簡素化することができる。尚、図15に示した処理では、各レジスタに蓄積されている誤差をとなりのレジスタにシフトさせる処理が新たに加わるが、このようなレジスタ間で値を移動させる処理はたいへん迅速に行うことができるので、そのことによる処理時間の増加は小さなものである。
上述した第2実施例の階調数変換処理あるいは第2実施例の変形例の階調数変換処理においては、説明が煩雑になるのを避けるために、いずれも誤差拡散マトリックスは誤差の拡散範囲の最も狭い図6(a)のマトリックスを使用するものとして説明した。もっとも、使用する誤差拡散マトリックスは図6(a)のマトリックスに限定されることなく、他のマトリックスを使用しても良いことはもちろんである。また、第1実施例における場合と同様に、キャッシュメモリを活用することにより、実質的に同様の処理を行っても良いことはもちろんである。
また、第2実施例の階調数変換方法においても、周辺の画素に拡散すべき中間的な拡散誤差をレジスタに加算しておくのではなく、階調誤差そのものを中間バッファに記憶しておき、新たな階調誤差を記憶する度に、誤差バッファに書き込むべき最終的な拡散誤差を算出するようにしても良い。かかる方法は、レジスタに記憶される値が蓄積中の拡散誤差であるか、階調誤差であるかの違いがあるものの、誤差バッファに書き込まれる誤差は同じ値となるので、実質的に同等の処理を行うことができる。
D.第3実施例:
以上に説明した各実施例では、常に同じ誤差拡散マトリックスを使用して誤差を拡散するものとして説明したが、現実の階調数変換処理においては、画質上の要請から、図6(a)のような拡散範囲の狭い誤差拡散マトリックスと、図6(c)のような拡散範囲の広いマトリックスとを切り替えて使用する場合がある。
すなわち、誤差拡散法では、ドットが特定の周期的なパターンで形成されることを防ぐために、複数種類の誤差拡散マトリックスをランダムに切り替えながら使用することがある。また、特開平7−226841号には、画像データの階調値が十分に小さな所定の閾値よりも小さく、かつドットを形成すると判断されている場合に、拡散範囲の広い誤差拡散マトリックスを用いて誤差を拡散させることによって、ドット密度が疎な領域での、ドットの分散性を改善する技術が開示されている。こうすることで、ドットの分散性を改善可能な理由については説明を省略するが、ここでは、特開平7−226841号に開示された技術に従って、画像データの階調値が十分に小さな所定の閾値thmよりも小さく、かつドットを形成すると判断されている場合には、図6(c)に示した誤差拡散範囲の広いマトリックスを使用し、それ以外の場合には図6(a)に示した誤差拡散範囲の狭いマトリックスを使用するものとする。このような場合に、以下に説明する第3実施例の方法を使用すれば、階調数変換処理に要する時間を効果的に短縮化することが可能となる。
図16は、2つの誤差拡散マトリックスを切り替えながら階調数変換処理を行う処理の流れを示したフローチャートである。以下、図16のフローチャートに従って、第3実施例の階調数変換処理について説明する。尚、上述した各実施例の階調数変換処理と同様、説明が煩雑化することを避けるために、ドットの色やドットの大きさを区別せずに説明するが、以下の処理は各色インク毎に、あるいは各種大きさのドット毎に行われる。
第3実施例の階調数変換処理を開始すると、先ず初めに着目画素の画像データCd と拡散誤差Ed とを読み出す(ステップS500)。画像データCd と拡散誤差Ed とはRAM106に記憶されている。レジスタR1 に記憶されている左隣の画素からの誤差と、画像データCd および拡散誤差Ed とを加算して補正データCx を算出する(ステップS502)。求めた補正データCx と所定の閾値thとを比較して(ステップS504)、補正データCx の方が大きければ着目画素にドットを形成すると判断し(ステップS504:yes)、ドット形成判断の結果を表す変数Cr にドットを形成することを意味する値「1」を書き込んだ後(ステップS506)、ドットを形成したことにより着目画素に生じる階調誤差を算出する(ステップS508)。補正データCx が所定の閾値thよりも小さければ(ステップS504:no)、変数Cr にドットを形成しないことを意味する値「0」を書き込んで(ステップS510)、そのことにより着目画素に生じる階調誤差を算出する(ステップS512)。
着目画素にドットを形成している場合には、着目画素の画像データCd と誤差拡散マトリックスを切り替えるための所定の閾値thmとを比較する(ステップS514)。画像データCd が閾値thmよりも小さい場合は(ステップS514:no)、小さな画像データの領域にたまたまドットが形成されたものと考えられるので、誤差拡散範囲の広い誤差拡散マトリックス(ここでは、図6(c)に示したマトリックス)に従って、それぞれの誤差拡散係数を設定する(ステップS516)。すなわち図6(c)に示すように、着目画素の真下の画素の誤差拡散係数K10には1/4を設定し、着目画素の右隣の画素、右下の画素、および左下の画素のそれぞれの誤差拡散係数K01、K11、K1-1 には1/8を設定する。着目画素から更に遠くにある画素の誤差拡散係数K02、K03、K12、K13、K1-2 ,K1-3 には1/16を設定する。
次いで、着目画素から遠方にある6つの画素については、階調誤差と各画素の誤差拡散係数とを乗算した値をそれぞれの誤差バッファに直接加算する(ステップS518)。これを、図17を用いて説明する。図17は着目画素P00についてドット形成有無を判断し、その結果、階調誤差E00が発生した状態を示している。この階調誤差E00は、図6(c)に示す誤差拡散マトリックスを用いて広い範囲に拡散する。すなわち、通常は図17中に太い破線で囲った4つの画素に誤差を拡散させるが、画素P00の階調誤差E00は破線の外側にある画素P02、画素P03、画素P12、画素P13、画素P1-2 、および画素P1-3 の6つの画素にも誤差を拡散させる。ステップS518の処理においては、これら6つの画素について、階調誤差E00とそれぞれの画素の誤差拡散係数とを乗算した値を、各画素の誤差バッファに直接加算するのである。
遠方の画素の誤差バッファに誤差を加算したら、破線の内側にある各画素のレジスタに誤差を拡散する(ステップS522)。すなわち、第3実施例の階調数変換処理においては、着目画素の遠方の画素については誤差バッファに直接誤差を加算するが、着目画素周辺の各画素については前述の第1実施例あるいは第2実施例と同様に中間バッファを利用して誤差を拡散するのである。以下では、第2実施例の変形例の方法に準じて誤差を拡散する場合、すなわち各レジスタには、着目画素に対して常に同じ位置関係にある画素への誤差が加算される場合を例にとって説明する。
先ず、着目画素の右側の画素への誤差拡散係数K01と階調誤差E00とを乗算した値で、レジスタR1 の値を更新する。次に、誤差拡散係数K11と階調誤差E00とを乗算した値をレジスタR2 に加算し、誤差拡散係数K01と階調誤差E00とを乗算した値をレジスタR3 に加算し、誤差拡散係数K1-1 と階調誤差E00とを乗算した値をレジスタR4 に加算する(図15(a)を参照)。ステップS522では以上の処理を行う。続いて、レジスタR4 に蓄積されている値を対応する画素の誤差バッファに加算する処理を行う(ステップS524)。図17に示すように、ここでは着目画素は画素P00であるから、画素P1-1 の誤差バッファにレジスタR4 の値を加算すればよい。誤差バッファへ加算する処理が終了したら、レジスタR3 に蓄積されている値をレジスタR4 に、レジスタR2 に蓄積されている値をレジスタR3 にシフトさせる(ステップS526)。各レジスタの値をシフトする処理を行った後、レジスタR2 の値をリセットしておく(ステップS528)。
一方、着目画素にドットを形成していない場合(ステップS504:no)、あるいは着目画素にドットを形成していても画像データCd が所定の閾値thmより大きい場合(ステップS514:yes)には、誤差拡散範囲の狭い方のマトリックス(ここでは図6(a)に示したマトリックス)に従って、それぞれの誤差拡散係数を設定する(ステップS518)。すなわち図6(a)の誤差拡散マトリックスに従って、着目画素周辺の4つの画素の誤差拡散係数に1/4を設定する。こうして設定された誤差拡散係数を用いて、上述したステップS522ないしステップS528の処理を行うことにより、レジスタR4 に蓄積された誤差が誤差バッファに加算される。
以上のようにして着目画素のドット形成有無を判断し、1画素についての拡散誤差を誤差バッファに書き込んだら、すべての画素について処理を終了したか否かを判断する(ステップS530)。未処理の画素が残っている場合は、再びステップS500に戻って、新たな着目画素についての画像データと拡散誤差とをRAM106から読み込み、これらの値とレジスタR1 に記憶されている誤差とを用いて補正データCx を算出する(ステップS502)。以降、未処理の画素がなくなるまで以上のような一連の処理を繰り返し、全画素について処理を終了したら、第3実施例の階調数変換処理を抜けて図4に示す画像データ変換処理に復帰する。
上述した第3実施例の方法を用いて階調数変換処理を行えば、拡散範囲の広い誤差拡散マトリックスと、拡散範囲の狭い誤差拡散マトリックスとを切り替えながら階調数変換処理を行う場合に、処理時間を効率よく短縮化することができる。すなわち、図6(c)に示した拡散範囲の広い誤差拡散マトリックスを使用する場合、すべての誤差をレジスタに蓄積しようとすると、多数のレジスタが必要となる。図17を参照して説明すると、破線で囲った範囲の内側にある4画素分のレジスタと、破線の外側の6画素分のレジスタとを加えた10画素分のレジスタを使用する。これらレジスタに誤差を加算するために、フラグを使用する第2実施例の方法を用いるにせよ、レジスタの値をシフトさせる第2実施例の変形例の方法を用いるにせよ、レジスタの数があまりに多くなれば、レジスタの操作に時間が必要となって、全体としての処理時間を増加させる。
これに対して、上述した第3実施例の方法を用いれば、たとえ非常に広い範囲に誤差を拡散するマトリックスを用いた場合でも、誤差を加算するレジスタの数を増加させずに階調数変換処理を行うことができるので、全体として処理が簡素化され、処理時間が増加することを回避することが可能となる。
特に、前述したように、拡散範囲の広い誤差拡散マトリックスは、画像データの階調値が十分小さく、かつドットを形成すると判断された場合に使用される。画像データの階調値が十分に小さければ、ドットを形成すると判断される確率は小さいことから、拡散範囲の広い誤差拡散マトリックスは使用頻度の低いマトリックスであると言える。従って、ごく稀に広い範囲に誤差を拡散しなければならない場合には、多少時間がかかっても誤差バッファに直接誤差を加算することとし、それほど広い範囲に拡散させる必要のない通常の場合は、中間バッファを活用して迅速に誤差を拡散させることで、全体として階調数変換処理を迅速に行うことができる。また、広い範囲に拡散する場合には、遠方の画素の誤差バッファには直接誤差を加算することとすれば、それだけ中間バッファとして使用するレジスタの数を節約することができ、浮いたレジスタを他の処理に使用することで、更に処理を効率化することが可能となる。
尚、上述の第3実施例においては、誤差拡散マトリックスを切り換えることとし、拡散範囲の広い誤差拡散マトリックスが選択されている場合にのみ、遠方の画素の直接誤差を拡散させるものとしたが、必ずしも、マトリックスの切換を行う場合に限定されるものではない。例えば、使用する誤差拡散マトリックスが拡散範囲の広いマトリックスである場合に、遠方の画素には直接誤差を拡散して記憶させ、近傍の画素には、中間バッファを活用することにより、所定画素数の階調誤差に基づき、まとめて誤差を拡散させるようにしても良い。こうすれば、まとめて誤差を拡散して記憶させるために必要な中間バッファを節約することが可能となる。
また、以上に説明した第3実施例においても、中間バッファを活用することによって、所定画素数の階調誤差から、周辺画素へ拡散誤差をまとめて拡散して記憶させるために方法には、第1実施例ないし第2実施例として説明した各種の方法を好適に適用可能であることは言うまでもない。
E.第4実施例:
上述した各種実施例の方法は、最終的には、階調誤差を周辺画素の誤差バッファに配分している。この意味からは、いわゆる誤差拡散法と呼ばれる方法に類似する手法と考えることができる。もちろん、いわゆる平均誤差最小法と呼ばれる方法のように、ドット形成有無の判断によって発生した階調誤差を着目画素に記憶しておき、未判断画素のドット形成有無の判断に際しては、周辺画素から階調誤差を読み出してドット形成判断を行う場合にも、中間バッファを活用することでドット形成判断に要する時間を短縮化することが可能である。以下では、このような方法を用いて階調数変換処理を行う第4実施例について説明する。
E−1.第4実施例において階調数変換処理の時間を短縮化する原理:
図18は、第4実施例の方法において、中間バッファを活用することによってドット形成有無の判断に要する時間を短縮化する原理を示す説明図である。図18(a)は、着目画素P00についてドットの形成有無を判断している様子を示している。第4実施例の方法を説明する準備として、いわゆる平均誤差最小法と呼ばれる方法を、図18(a)を流用して簡単に説明しておく。
平均誤差最小法では、ドット形成有無の判断によって生じた階調誤差を、その画素に対応する誤差バッファに記憶しておく。これを、図18(a)に則して説明すると、左側の図中に例えば「E0-1 」とあるのは画素P0-1 で発生した階調誤差を示しており、画素P0-1 の枠内にE0-1 と表示することによって、階調誤差E0-1 が画素P0-1 の誤差バッファに記憶されていることを模式的に示している。また、図中に斜線が付されているのは、ドット形成判断済みであることを示している。図示されているように、平均誤差最小法では、ドット形成有無の判断済みの画素にそれぞれの階調誤差が記憶されている。未判断の着目画素P00についてドット形成有無を判断する場合には、周辺の判断済みの画素からそれぞれの階調誤差を読み出して、これらの誤差を考慮しながら着目画素P00のドット形成有無を判断する。より詳細には、図19にいくつか例示されているように、周辺画素の着目画素に対する相対位置に応じて所定の重み係数が予め定められており、周辺の各画素から読み出した誤差に所定の重み係数をかけた値で、着目画素の画像データを補正することにより補正データを算出する。尚、図19では斜線が付されている画素が着目画素であり、各画素に表示されている数値がその画素に設定されている重み係数である。こうして求めた補正データと所定の閾値とを比較することによって、着目画素についてのドット形成有無を判断する。着目画素についてドット形成有無を判断したら、そのことで生じる階調誤差を算出し、算出した階調誤差を着目画素の誤差バッファに記憶する。平均誤差最小法では、以上のような処理を繰り返すことによって、画素毎にドットの形成有無の判断を行う。
上述したように、平均誤差最小法を用いてドット形成有無を判断するためには、1つの画素についての判断を行う度に、誤差バッファから複数の画素の階調誤差を読み出さなければならず、ドット形成有無の判断するためにある程度の時間が必要となる。
これに対して、以下に説明する第4実施例の階調数変換処理においては、数学的には上述の平均誤差最小法と等価な処理を行いながらも、中間バッファを活用することによって、ドット形成の有無を迅速に判断することが可能となっている。以下、図18を参照しつつ、前述の平均誤差最小法と対比することにより、第4実施例の階調数変換処理において処理時間を短縮化する原理について説明する。尚、説明の煩雑化を避けるために、以下では、図19(a)に示した重み係数の設定に従って、周辺画素の階調誤差を考慮するものとする。
図18(a)は、第4実施例の階調数変換処理において着目画素P00についてのドット形成有無を判断している様子を示す説明図である。着目画素P00についてのドット形成有無の判断には、前述した平均誤差最小法と同様に、画素P-1-1で発生した階調誤差E-1-1と、画素P-10 で発生した階調誤差E-10 と、画素P-11 で発生した階調誤差E-11 と、画素P0-1 で発生した階調誤差E0-1 とを使用する。図18(a)の右側の4つの矩形は、中間バッファとして使用される4つのレジスタを模式的に示したものである。説明の便宜から、ここでは各レジスタにR1 ,R2 ,R3 ,R4 とそれぞれ符合を付して区別することにする。
各レジスタには、着目画素に対して所定の位置関係にある画素の階調誤差が上書きされる。すなわち、レジスタR1 には、常に着目画素の右上にある画素での階調誤差が記憶され、レジスタR2 には、着目画素の真上にある画素での階調誤差が記憶され、レジスタR3 には、着目画素の左上の画素の階調誤差が、レジスタR4 には左隣の画素の階調誤差が記憶される。各レジスタにそれぞれの階調誤差を記憶する処理については後述する。
第4実施例の階調数変換処理では、これら4つのレジスタに記憶されている各画素での階調誤差と、予め画素毎に設定されている重み係数とを考慮して、着目画素での補正データを算出する。つまり、前述した平均誤差最小法では、各画素での階調誤差を誤差バッファから読み出すのに対して、ここでは各レジスタに予め記憶されているところが大きく異なっている。こうして求めた補正データと所定の閾値とを比較することにより、着目画素についてのドット形成有無を判断する。ドット形成有無を判断したら、続いて着目画素P00での階調誤差E00を算出する。階調誤差は、補正データと着目画素での結果値との差を取ることによって求めることができる。
こうして、着目画素についての階調誤差E00が求められたら、新たな着目画素についてのドット形成判断を行うために、各レジスタに対して図18(b)に示す操作を加える。先ず、レジスタR4 に記憶されている誤差を誤差バッファに書き込む。図18(a)を用いて説明したように、レジスタR4 には、常に着目画素の左隣の画素で生じた階調誤差が記憶されているので、レジスタR4 の値は着目画素の左隣の画素の誤差バッファに上書きしてやる。次いで、先程求めた画素P00についての階調誤差E00をレジスタR4 に上書きし、更にレジスタR2 の値をレジスタR3 に、レジスタR1 の値をレジスタR2 にそれぞれ移動させる。すなわち、着目画素が画素P00から右隣の画素P01に移動することに対応して、各レジスタの値を移動させるのである。これらの処理は、CPU102内部のレジスタ間でデータを移動させるだけでよいので、極めて迅速に行うことができる。最後に、新たな着目画素の右上の画素での階調誤差を誤差バッファから読み出して、レジスタR1 に記憶させる。
以上のような操作を加えることにより、各レジスタに記憶されている値は、図18(a)の右側に示した状態から図18(c)の状態となる。図18(a)と図18(c)とを比較すれば明らかなように、図18(c)の各レジスタに記憶されている値は、図18(a)において着目画素を画素P00から画素P01に変更したときの各レジスタの値となっている。従って、以上のような処理を繰り返し行えば、次々に新たな画素のドット形成判断を行うことができる。このように、第4実施例の方法では、続けて使用する階調誤差はレジスタに蓄えておくことによって、誤差バッファから階調誤差を読み出す頻度を大きく軽減させることが可能となるのである。
E−2.第4実施例の階調数変換処理:
以下、上述した第4実施例の階調数変換処理を、実際に行うための処理の流れについて簡単に説明する。図20は、第4実施例の階調数変換処理の流れを示したフローチャートである。尚、上述した各種実施例の階調数変換処理と同様に、説明の煩雑化を避けるために、以下ではインクの種類やドットの大きさを特定せずに説明するが、各色毎に、あるいは各種大きさのドット毎に同様の処理が行われる。
第4実施例の階調数変換処理を開始すると、先ず初めに着目画素の画像データCd を読み出し(ステップS600)、続いて着目画素の右上の画素の階調誤差を誤差バッファから読み出してレジスタR1 に記憶する(ステップS602)。この結果、図18を用いて説明したように、各レジスタには着目画素周辺の各画素での階調誤差が記憶される。
次いで、各レジスタに記憶されている誤差と所定の重み係数とを、レジスタ毎に乗算して、着目画素の補正データCx を算出する(ステップS604)。図19に示したように、着目画素周辺の画素には、画素毎に所定の重み係数が定められているので、これら所定の重み係数と記憶されている誤差とをレジスタ毎に乗算し、得られた各条算値と先に読み出した画像データCd とを加算することにより、着目画素の補正データCx を算出するのである。こうして求めた補正データCx と所定の閾値thとを比較する(ステップS606)。補正データCx の方が大きければ着目画素にドットを形成すると判断して、判断結果を示す変数Cr にドットを形成することを意味する値「1」を書き込み(ステップS608)、そうでなければドットを形成しないことを意味する値「0」を書き込む(ステップS610)。続いて、かかる判断結果によって着目画素に生じる階調誤差を算出する(ステップS612)。階調誤差は、前述した各種実施例と同様に、着目画素の補正データから結果値を減算することで求められる。
以上のようにして着目画素での階調誤差が求められたら、図18(b)を用いて説明したように、各レジスタに次のような一連の操作を加える。先ず、レジスタR4 に記憶されている階調誤差を、誤差バッファに書き込む(ステップS614)。次ぎに、ステップS612で求めた階調誤差を、レジスタR4 に書き込む(ステップS616)。続いて、レジスタR2 の値をレジスタR3 に移動し(ステップS618)、レジスタR1 の値をレジスタR2 に移動させる(ステップS620)。
以上のようなレジスタの操作が終了したら、全画素についてドット形成判断を終了したか否かを判断し(ステップS622)、未判断の画素が残っていたら、ステップS600に戻って、すべての画素について処理が終了するまで、続く一連の処理を繰り返す。すべての画素のドット形成有無を判断したら、第4実施例の階調数変換処理を抜けて、図4に示す画像データ変換処理に復帰する。
以上に説明した第4実施例の階調数変換処理においては、1画素のドット形成有無を判断する度に、誤差バッファから1画素分の階調誤差を読み出すだけでよい。平均誤差最小法を適用する場合には、前述したように、1画素の判断を行う度に誤差バッファから4画素分の拡散誤差を読み出す必要があることと比較して、誤差バッファに対してデータを読み書きする頻度を減らすことができ、その分、階調数変換処理を迅速に行うことができる。もちろん、第4実施例の方法と平均誤差最小法とは、数学的には全く等価な処理を行っており、第4実施例の方法を用いれば、平均誤差最小法を用いた場合と同様に、高画質の画像を得ることができる。
尚、上述した第4実施例においては、重み係数の設定として、図19(a)に例示する値が設定されているものとして説明した。実際の重み係数は、図19に例示する設定に限定されることなく、画質の要請に応じて種々の設定とすることができることは言うまでもない。また、上述の第4実施例では、図19(a)に例示した設定を用いていることに対応して、中間バッファとして4つのレジスタを使用したが、使用する重み係数の設定に応じて、より多くのレジスタが必要になる場合があることはもちろんである。
更に、上述した第4実施例においては、中間バッファとして、CPU102に内蔵されたレジスタを用いるものとして説明したが、レジスタに限らず、キャッシュメモリなどの高速に読み書き可能な記憶素子を用いても良いことはもちろんである。
以上、各種の実施例について説明してきたが、本発明は上記すべての実施例に限られるものではなく、その要旨を逸脱しない範囲において種々の態様で実施することができる。
例えば、上述の各種実施例においては、各画素の補正データと所定の閾値との大小関係に基づいてドットの形成有無を判断するものとして説明した。もちろん、ドット形成の有無を判断する方法は、前述した方法に限らず、周知の各種方法を適用することが可能である。
また、上述の各種実施例においては、説明の煩雑化を避けるために、形成されるドットの種類は1種類として、各画素にはドットが形成されるか、形成され無いかの2つの状態しか取り得ないものとして説明した。もちろん、ドットの大きさ、あるいはインク濃度の異なる複数種類のドットを形成可能としてもよい。例えば、大・小の2種類のドットを形成可能として、次のようにしてドットの形成有無を判断しても良い。すなわち、2つの閾値th1とth2(ただし、th1>th2とする)を設定しておき、画素の補正データが閾値th1より大きければ大ドットを形成すると判断し、閾値th1より小さくかつ閾値th2より大きければ小ドットを形成すると判断し、閾値th2より小さい場合はドットを形成しないと判断する。各画素で発生する階調誤差は、その画素の補正データから結果値を減算することによって算出することができる。
尚、以上の各種実施例においては、誤差バッファは論理的には各画素毎に用意されることになるが、実際上は数ラスタ分の誤差バッファのみを用意して、ドット形成有無が判断された画素の誤差バッファは、他の画素の誤差バッファとして転用される。説明の煩雑化を避ける目的で、上述の各種実施例では、あたかも全画素分の誤差バッファが用意されているかのように説明したが、数ラスタ分の誤差バッファを繰り返し使用しても構わないのはもちろんである。
また、上述の機能を実現するソフトウェアプログラム(アプリケーションプログラム)を、通信回線を介してコンピュータシステムのメインメモリまたは外部記憶装置に供給し実行するものであってもよい。もちろん、CD−ROMやフレキシブルディスクに記憶されたソフトウェアプログラムを読み込んで実行するものであっても構わない。
また、上述した各種実施例では、階調数変換処理を含む画像データ変換処理はコンピュータ内で実行されるものとして説明したが、画像データ変換処理の一部あるいは全部をプリンタ側、あるいは専用の画像処理装置を用いて実行するものであっても構わない。
更には、画像表示装置は、必ずしも印刷媒体上にインクドットを形成して画像を印刷する印刷装置に限定されるものではなく、例えば、液晶表示画面上で輝点を適切な密度で分散させることにより、階調が連続的に変化する画像を表現する液晶表示装置であっても構わない。
本実施例の印刷システムの概略構成図である。 本実施例の画像処理装置としてのコンピュータの構成を示す説明図である。 本実施例の画像表示装置としてのプリンタの概略構成図である。 本実施例の画像処理装置で行われる画像データ変換処理の流れを示すフローチャートである。 誤差拡散法を用いてドットの形成有無を判断する様子を概念的に示す説明図である。 画素毎に誤差拡散係数が設定されている様子を例示する説明図である。 第1実施例の階調数変換処理において処理時間を短縮化する原理を示す説明図である。 第1実施例の階調数変換処理の流れを示すフローチャートである。 第1実施例の階調数変換処理において1度に多数の画素の誤差を拡散する場合を示す説明図である。 第1実施例の変形例の階調数変換処理の流れを示すフローチャートである。 第2実施例の階調数変換処理において処理時間を短縮化する原理を示す説明図である。 第2実施例の階調数変換処理において中間バッファと誤差バッファとでデータを読み書きする処理の概要を示す説明図である。 第2実施例の階調数変換処理の流れを示すフローチャートである。 各レジスタの対応する画素位置が着目画素に対して一定とした場合に、各レジスタと着目画素周辺の画素とが対応している様子を例示する説明図である。 第2実施例の変形例の階調数変換処理において処理時間を短縮化する原理を示す説明図である。 第3実施例の階調数変換処理の流れを示すフローチャートである。 第3の実施例の階調数変換処理において拡散範囲の広いマトリックスを使用した場合と、拡散範囲の狭いマトリックスを使用した場合とで、階調誤差が拡散される範囲を比較して示す説明図である。 第4実施例の変形例の階調数変換処理において処理時間を短縮化する原理を示す説明図である。 第4実施例の変形例の階調数変換処理において、重み係数が画素毎に設定されている様子を例示する説明図である。 第4実施例の階調数変換処理の流れを示すフローチャートである。
符号の説明
10...コンピュータ
12...プリンタドライバ
20...カラープリンタ
100...コンピュータ
102...CPU
104...ROM
106...RAM
108...周辺機器インターフェースP・I/F
109...ディスクコントローラDDC
110...ネットワークインターフェースカードNIC
112...ビデオインターフェースV・I/F
114...CRT
116...バス
118...ハードディスク
120...デジタルカメラ
122...カラースキャナ
124...フレキシブルディスク
126...コンパクトディスク
200...カラープリンタ
230...キャリッジモータ
235...紙送りモータ
236...プラテン
240...キャリッジ
241...印字ヘッド
242,243...インクカートリッジ
244...インク吐出用ヘッド
260...制御回路
261...CPU
262...ROM
263...RAM
300...通信回線
310...記憶装置

Claims (22)

  1. 各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する画像処理装置であって、
    前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して一時的に保持する階調誤差保持手段と、
    所定数の複数画素についての前記一時的に保持された階調誤差に基づいて、該所定数の複数画素の周辺にあってドット形成有無の判断がなされていない未判断画素に拡散される拡散誤差を算出し、該算出した拡散誤差を該未判断画素に対応付けて記憶する拡散誤差記憶手段と、
    前記未判断画素に対応付けて記憶された前記拡散誤差を考慮しつつ、前記画像データにおける該未判断画素の階調値に基づいて、該未判断画素についてのドット形成有無を判断するドット形成判断手段と
    を備える画像処理装置。
  2. 前記階調誤差保持手段は、前記拡散誤差記憶手段に対して読み書きするよりも、前記階調誤差を迅速に読み書き可能な手段である請求項1記載の画像処理装置。
  3. 請求項1記載の画像処理装置であって、
    前記拡散誤差記憶手段は、
    前記一時的に保持された階調誤差が前記未判断画素の各々に分配される分配誤差を、該階調誤差毎に算出して該各未判断画素に蓄積する分配誤差蓄積手段と、
    前記所定数の複数画素についての前記分配誤差を全て蓄積する度に、前記蓄積されている全ての該分配誤差を、前記拡散誤差として前記未判断画素に対応付けて蓄積する拡散誤差蓄積手段と
    を備える画像処理装置。
  4. 請求項1記載の画像処理装置であって、
    前記階調誤差保持手段は、前記所定数の複数画素についての前記階調誤差を保持する手段であり、
    前記拡散誤差記憶手段は、前記未判断画素の各々に拡散される前記拡散誤差を、前記保持されている所定数の階調誤差に基づいて算出し、該算出した全ての拡散誤差を該各未判断画素に対応付けて蓄積する手段である画像処理装置。
  5. 請求項1記載の画像処理装置であって、
    前記拡散誤差記憶手段は、
    前記一時的に保持された階調誤差が前記未判断画素の各々に分配される分配誤差を、該階調誤差毎に算出して該各未判断画素に蓄積する分配誤差蓄積手段と、
    前記所定数の複数画素分の分配誤差が蓄積された前記各未判断画素の分配誤差を、前記拡散誤差として該未判断画素に対応付けて記憶する分配誤差記憶手段と
    を備える画像処理装置。
  6. 請求項1記載の画像処理装置であって、
    前記階調誤差保持手段は、前記所定数の複数画素についての前記階調誤差を保持する手段であり、
    前記拡散誤差記憶手段は、前記複数の未判断画素中にあって前記保持されている全ての階調誤差が拡散される特定画素への拡散誤差を、該保持されている複数の階調誤差から算出して、該特定画素に対応付けて記憶する手段である画像処理装置。
  7. 請求項1記載の画像処理装置であって、
    前記拡散誤差記憶手段は、
    前記所定数の複数画素周辺の第1の所定領域内にある第1の未判断画素の各々については、該所定数の複数画素についての前記階調誤差に基づき前記拡散誤差を算出して、該第1の未判断画素に対応付けて記憶する第1の拡散誤差記憶手段と、
    前記所定数の複数画素周辺にあって前記第1の所定領域内にはない第2の未判断画素については、前記階調誤差が算出される度に、該階調誤差に基づいて、該第2の未判断画素の各々への前記拡散誤差を算出して、該第2の未判断画素に対応付けて記憶する第2の拡散誤差記憶手段と、
    を備える画像処理装置。
  8. 請求項7記載の画像処理装置であって、
    前記第2の拡散誤差記憶手段は、前記第1の所定領域を包含する第2の所定領域内の前記第2の未判断画素について、前記拡散誤差を算出して記憶する手段である画像処理装置。
  9. 請求項8記載の画像処理装置であって、
    前記ドット形成有無の判断に関わる条件に応じて、前記階調誤差を前記未判断画素に拡散させる範囲を、前記所定数の複数画素周辺の前記第1の所定領域と、前記第2の所定領域とに切り換える拡散範囲切換手段を備える画像処理装置。
  10. 請求項9記載の画像処理装置であって、
    前記拡散範囲切換手段は、前記ドット形成有無の判断にかかわる条件として、前記所定数の複数画素の階調値と、該各画素についてのドット形成有無の判断結果とに基づいて、前記階調誤差を拡散させる範囲を切り換える手段である画像処理装置。
  11. 請求項1記載の画像処理装置であって、
    前記拡散誤差記憶手段は、前記所定数の複数画素の階調誤差として、互いに隣接する画素の階調誤差に基づき前記拡散誤差を算出して、前記未判断画素に対応付けて記憶する手段である画像処理装置。
  12. 請求項11記載の画像処理装置であって、
    前記ドット形成判断手段は、前記未判断画素に対応付けて記憶された前記拡散誤差と、該未判断画素に隣接する画素からの前記拡散誤差とを考慮して、該未判断画素についてのドット形成有無を判断する手段である画像処理装置。
  13. 各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する画像処理装置であって、
    前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出し、該判断画素に対応付けて記憶する階調誤差記憶手段と、
    前記ドット形成の有無を判断しようとする着目画素の周辺にあって該ドット形成有無を判断済みの既判断画素毎に対応付けて記憶されている前記階調誤差を、該既判断画素毎に保持する階調誤差保持手段と、
    前記既判断画素毎に保持されている階調誤差を考慮しつつ、前記画像データにおける前記着目画素の階調値に基づいて、ドット形成有無を判断するドット形成判断手段と、
    前記着目画素の次にドット形成有無を判断する次着目画素についての前記既判断画素を検出して、該検出した既判断画素の中で前記階調誤差が一時的に保持されていない既判断画素の階調誤差を前記階調誤差記憶手段から読み出し、該読み出した階調誤差で該次着目画素についての判断に使用しない該階調誤差を更新して、該次着目画素の判断に供する階調誤差更新手段と
    を備える画像処理装置。
  14. 請求項13記載の画像処理装置であって、
    前記着目画素で生じた階調誤差を一時保持する一時保持手段を備え、
    前記階調誤差更新手段は、前記一時保持されている階調誤差で、前記次着目画素についての判断に使用しない前記階調誤差を更新する手段である画像処理装置。
  15. 各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する画像処理方法であって、
    前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して一時的に保持しておき、
    所定数の複数画素についての前記一時的に保持された階調誤差に基づいて、該所定数の複数画素の周辺にあってドット形成有無の判断がなされていない未判断画素に拡散される拡散誤差を算出し、
    前記算出した拡散誤差を前記未判断画素に対応付けて記憶し、
    前記未判断画素に対応付けて記憶された前記拡散誤差を考慮しつつ、前記画像データにおける該未判断画素の階調値に基づいて、該未判断画素についてのドット形成有無を判断する画像処理方法。
  16. 各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する画像処理方法であって、
    前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して、該判断画素に対応付けて記憶し、
    前記ドット形成の有無を判断しようとする着目画素の周辺にあって該ドット形成有無を判断済みの既判断画素毎に対応付けて記憶されている前記階調誤差を、該既判断画素毎に保持しておき、
    前記既判断画素毎に保持されている階調誤差を考慮しつつ、前記画像データにおける前記着目画素の階調値に基づいて、ドット形成有無を判断し、
    前記着目画素の次にドット形成有無を判断する次着目画素についての前記既判断画素を検出し、
    前記検出した既判断画素の中で前記階調誤差が保持されていない既判断画素の階調誤差を読み出して、該読み出した階調誤差で該次着目画素についての判断に使用しない該階調誤差を更新した後、該次着目画素の判断に供する画像処理方法。
  17. 各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の印刷データに変換し、印刷媒体上にインクドットを形成して画像を印刷する印刷部に対して、該印刷データを出力することで、該印刷部を制御する印刷制御装置であって、
    前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して一時的に保持する階調誤差保持手段と、
    所定数の画素についての前記一時的に保持された階調誤差に基づいて、該所定数の複数画素の周辺にあってドット形成有無の判断がなされていない未判断画素に拡散される拡散誤差を算出し、該算出した拡散誤差を該未判断画素に対応付けて記憶する拡散誤差記憶手段と、
    前記未判断画素に対応付けて記憶された前記拡散誤差を考慮しつつ、前記画像データにおける該未判断画素の階調値に基づいて、該未判断画素についてのドット形成有無を判断するドット形成判断手段と、
    前記ドット形成有無の判断結果に基づいて前記画像データを前記印刷データに変換し、前記印刷部に出力する印刷データ出力手段と
    を備える印刷制御装置。
  18. 各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の印刷データに変換し、印刷媒体上にインクドットを形成して画像を印刷する印刷部に対して、該印刷データを出力することで、該印刷部を制御する印刷制御装置であって、
    前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出し、該判断画素に対応付けて記憶する階調誤差記憶手段と、
    前記ドット形成の有無を判断しようとする着目画素の周辺にあって該ドット形成有無を判断済みの既判断画素毎に対応付けて記憶されている前記階調誤差を、該既判断画素毎に保持する階調誤差保持手段と、
    前記既判断画素毎に保持されている階調誤差を考慮しつつ、前記画像データにおける前記着目画素の階調値に基づいて、ドット形成有無を判断するドット形成判断手段と、
    前記着目画素の次にドット形成有無を判断する次着目画素についての前記既判断画素を検出して、該検出した既判断画素の中で前記階調誤差が保持されていない既判断画素の階調誤差を前記階調誤差記憶手段から読み出し、該読み出した階調誤差で該次着目画素についての判断に使用しない該階調誤差を更新して、該次着目画素の判断に供する階調誤差更新手段と
    前記ドット形成有無の判断結果に基づいて前記画像データを前記印刷データに変換し、前記印刷部に出力する印刷データ出力手段と
    を備える印刷制御装置。
  19. 各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する方法を実現するプログラムを、コンピュータで読み取り可能に記録した記録媒体であって、
    前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して一時的に保持しておく機能と、
    所定数の複数画素についての前記一時的に保持された階調誤差に基づいて、該所定数の複数画素の周辺にあってドット形成有無の判断がなされていない未判断画素に拡散される拡散誤差を算出する機能と、
    前記算出した拡散誤差を前記未判断画素に対応付けて記憶する機能と、
    前記未判断画素に対応付けて記憶された前記拡散誤差を考慮しつつ、前記画像データにおける該未判断画素の階調値に基づいて、該未判断画素についてのドット形成有無を判断する機能と
    を実現するプログラムを記録した記録媒体。
  20. 各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する方法を実現するプログラムを、コンピュータで読み取り可能に記録した記録媒体であって、
    前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して、該判断画素に対応付けて記憶する機能と、
    前記ドット形成の有無を判断しようとする着目画素の周辺にあって該ドット形成有無を判断済みの既判断画素毎に対応付けて記憶されている前記階調誤差を、該既判断画素毎に保持しておく機能と、
    前記既判断画素毎に保持されている階調誤差を考慮しつつ、前記画像データに示された前記着目画素の階調値に基づいて、ドット形成有無を判断する機能と、
    前記着目画素の次にドット形成有無を判断する次着目画素についての前記既判断画素を検出する機能と、
    前記検出した既判断画素の中で前記階調誤差が保持されていない既判断画素の階調誤差を読み出して、該読み出した階調誤差で該次着目画素についての判断に使用しない該階調誤差を更新した後、該次着目画素の判断に供する機能と
    を実現するプログラムを記録した記録媒体。
  21. 各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する方法を、コンピュータを用いて実現するためのプログラムであって、
    前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して一時的に保持しておく機能と、
    所定数の複数画素についての前記一時的に保持された階調誤差に基づいて、該所定数の複数画素の周辺にあってドット形成有無の判断がなされていない未判断画素に拡散される拡散誤差を算出する機能と、
    前記算出した拡散誤差を前記未判断画素に対応付けて記憶する機能と、
    前記未判断画素に対応付けて記憶された前記拡散誤差を考慮しつつ、前記画像データにおける該未判断画素の階調値に基づいて、該未判断画素についてのドット形成有無を判断する機能と
    を実現するためのプログラム。
  22. 各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する方法を、コンピュータを用いて実現するためのプログラムであって、
    前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して、該判断画素に対応付けて記憶する機能と、
    前記ドット形成の有無を判断しようとする着目画素の周辺にあって該ドット形成有無を判断済みの既判断画素毎に対応付けて記憶されている前記階調誤差を、該既判断画素毎に保持しておく機能と、
    前記既判断画素毎に保持されている階調誤差を考慮しつつ、前記画像データに示された前記着目画素の階調値に基づいて、ドット形成有無を判断する機能と、
    前記着目画素の次にドット形成有無を判断する次着目画素についての前記既判断画素を検出する機能と、
    前記検出した既判断画素の中で前記階調誤差が保持されていない既判断画素の階調誤差を読み出して、該読み出した階調誤差で該次着目画素についての判断に使用しない該階調誤差を更新した後、該次着目画素の判断に供する機能と
    を実現するためのプログラム。
JP2007042424A 2000-10-06 2007-02-22 画像処理装置、画像処理方法、印刷制御装置、および記録媒体 Pending JP2007202170A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007042424A JP2007202170A (ja) 2000-10-06 2007-02-22 画像処理装置、画像処理方法、印刷制御装置、および記録媒体

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2000307896 2000-10-06
JP2007042424A JP2007202170A (ja) 2000-10-06 2007-02-22 画像処理装置、画像処理方法、印刷制御装置、および記録媒体

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2001238086A Division JP2002185788A (ja) 2000-10-06 2001-08-06 画像処理装置、画像処理方法、印刷制御装置、および記録媒体

Publications (1)

Publication Number Publication Date
JP2007202170A true JP2007202170A (ja) 2007-08-09

Family

ID=38456212

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007042424A Pending JP2007202170A (ja) 2000-10-06 2007-02-22 画像処理装置、画像処理方法、印刷制御装置、および記録媒体

Country Status (1)

Country Link
JP (1) JP2007202170A (ja)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0698159A (ja) * 1992-07-01 1994-04-08 Hewlett Packard Co <Hp> 2値化方法及び装置
JPH07312688A (ja) * 1994-05-18 1995-11-28 Mitsubishi Electric Corp 画像処理装置
JPH09135348A (ja) * 1995-11-07 1997-05-20 Brother Ind Ltd 多値データ変換装置
JPH09214759A (ja) * 1996-01-31 1997-08-15 Dainippon Screen Mfg Co Ltd 画像データ2値化方法及び装置
JPH10262148A (ja) * 1997-03-18 1998-09-29 Nec Corp 画像処理装置
JP2000152005A (ja) * 1998-11-17 2000-05-30 Toshiba Corp 画像処理装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0698159A (ja) * 1992-07-01 1994-04-08 Hewlett Packard Co <Hp> 2値化方法及び装置
JPH07312688A (ja) * 1994-05-18 1995-11-28 Mitsubishi Electric Corp 画像処理装置
JPH09135348A (ja) * 1995-11-07 1997-05-20 Brother Ind Ltd 多値データ変換装置
JPH09214759A (ja) * 1996-01-31 1997-08-15 Dainippon Screen Mfg Co Ltd 画像データ2値化方法及び装置
JPH10262148A (ja) * 1997-03-18 1998-09-29 Nec Corp 画像処理装置
JP2000152005A (ja) * 1998-11-17 2000-05-30 Toshiba Corp 画像処理装置

Similar Documents

Publication Publication Date Title
KR100611236B1 (ko) 화상처리장치, 화상처리방법, 인쇄제어장치 및 기록매체
JP3912055B2 (ja) 画像処理装置、印刷制御装置、画像処理方法、および記録媒体
JP3661624B2 (ja) 画像処理装置
US7798589B2 (en) Image forming apparatus, image processing apparatus, and control method therefor
JPH11314383A (ja) プリント・ドライバ製造方法及びカラー印刷システム
JP2004235993A (ja) 画像処理方法
JP5127626B2 (ja) 画像処理装置および画像処理方法
JP3666427B2 (ja) 画像処理装置、印刷制御装置、画像処理方法、および記録媒体
JP2006115431A (ja) 中間階調処理装置、印刷装置、情報処理装置、中間階調処理方法及びプログラム
JP2007202170A (ja) 画像処理装置、画像処理方法、印刷制御装置、および記録媒体
JP2005143140A (ja) 画像処理装置、処理方法および記録媒体
JP2005303666A (ja) 所定領域内に形成されるドット個数の情報に基づいて画像を出力する画像出力システム
US7362473B2 (en) Image processing technique for tone number conversion of image data
JP4561049B2 (ja) 所定領域内に形成されるドット個数の情報に基づいて画像を印刷する印刷システム
JP3823859B2 (ja) 複数画素単位で画像データを変換する画像処理装置
JP4228814B2 (ja) 複数のラスタを並行して処理しながら画像を印刷する印刷方法
JP4013855B2 (ja) 複数画素単位で画像データを変換する画像処理装置
JP2935009B2 (ja) 画像処理装置および画像処理方法
JP2003051940A (ja) 画像処理方法及びその装置
JP3972875B2 (ja) 複数画素単位で画像データを変換する画像処理装置
JP2005295131A (ja) 画像処理装置、画像処理方法および画像処理プログラム
JP3870604B2 (ja) データ変換装置
JP2005059499A (ja) 画像形成装置及び方法、記録ヘッド、コンピュータプログラム並びに記録媒体
JP2004080480A (ja) 複数のラスタを並行して処理する画像処理装置
JP2001315387A (ja) プリンタ装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080723

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091027

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091221

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100330