JP2005269577A - 画像処理装置、印刷装置、画像処理方法およびプログラム - Google Patents

画像処理装置、印刷装置、画像処理方法およびプログラム Download PDF

Info

Publication number
JP2005269577A
JP2005269577A JP2004083236A JP2004083236A JP2005269577A JP 2005269577 A JP2005269577 A JP 2005269577A JP 2004083236 A JP2004083236 A JP 2004083236A JP 2004083236 A JP2004083236 A JP 2004083236A JP 2005269577 A JP2005269577 A JP 2005269577A
Authority
JP
Japan
Prior art keywords
block
error
pixel
memory
pixels
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
JP2004083236A
Other languages
English (en)
Inventor
Masami Shigesawa
正実 繁澤
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 JP2004083236A priority Critical patent/JP2005269577A/ja
Publication of JP2005269577A publication Critical patent/JP2005269577A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

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

Abstract

【課題】良好な画質を好適に維持しつつ、誤差拡散処理を効率良く行うことのできる画像処理装置、印刷装置、画像処理方法およびプログラムを提供する。
【解決手段】2値化処理部は、複数の画素をまとめて形成した着目ブロックBL内の画素毎にドット形成の有無を判断し、この判断によって画素に生じた階調表現の誤差を該着目ブロックBL内の周辺の未判断画素に拡散させる。次いで、2値化処理部は、該着目ブロックBL内の各画素についてドット形成の有無を判断したことにより生じた該着目ブロックBL全体の階調表現の誤差Ebを該着目ブロックBL外の周辺の未判断画素に拡散させる。この際、2値化処理部は、該着目ブロックBL外の周辺の未判断画素に拡散させる前記誤差を、各々独立したバスを通じて個別にアクセス可能な第1のメモリ(内部RAM21c)と第2のメモリ(内部RAM21d)とに分けて格納する。
【選択図】 図7

Description

この発明は、画像処理装置、印刷装置、画像処理方法およびプログラムにかかり、詳しくは、多階調で表現された画像データをドット形成の有無により表現された画像データに変換する技術に関するものである。
従来、記録紙等の印刷媒体上に画像を印刷する印刷装置の一つとして、例えばインクジェットプリンタが知られている。インクジェットプリンタは、局所的にはドットを形成するか否かのいずれかの状態しか表現し得ないが、画像の階調値に応じてドットの形成密度を適切に制御することによって、階調が連続的に変化する多階調の画像を表現することが可能となっている。かかるプリンタにおいて、画像の階調値に応じた適切なドットの形成密度が得られるように、各画素についてのドットの形成有無を判断するための手法としては、誤差拡散法と呼ばれる手法が広く使用されている。
誤差拡散法は、画素にドットを形成したこと、あるいはドットを形成しなかったことによって生じる階調表現の誤差を周辺の未判断画素に拡散し、該未判断画素についてドット形成の有無を判断するにあたっては、周辺画素から拡散されてきた誤差を解消するようにドット形成の有無を判断する手法である。誤差拡散法では、このように階調表現の誤差を解消するようにドット形成の有無を判断するので、多階調画像とそれを2値化して得られる2値化画像との間に生じる誤差を平均的に最小にすることができ、優れた画質の画像を形成することができる。このような誤差拡散法に関連する先行技術は、例えば特許文献1に開示されている。
特開2002−185790号公報
誤差拡散法では、上記したようにドット形成の有無を1画素ごとに判断し、該判断によって生じた階調表現の誤差を周辺の未判断画素に広範囲にわたり拡散させて該階調表現の誤差を最小とするよう調整することで、優れた画質の画像を得ることができる。しかしながら、ドット形成の有無を判断する度に誤差を周辺に拡散しなければならないので、画像を構成する画素数が多くなると処理を効率良く行うことができないという問題があった。
この発明は、こうした従来の実情に鑑みてなされたものであり、その目的は、良好な画質を好適に維持しつつ、誤差拡散処理を効率良く行うことのできる画像処理装置、印刷装置、画像処理方法およびプログラムを提供することにある。
上記目的を達成するため、本発明の第1の態様は、画素の階調値により表現された画像データをドット形成の有無により表現された画像データに変換する2値化処理部を備える画像処理装置において、前記2値化処理部は、複数の画素をまとめてブロックを形成するブロック形成部と、ドット形成の有無を判断しようとする画素を含む着目ブロックについて、該着目ブロックを構成する画素毎にドット形成の有無を判断し、該判断によって画素に生じた階調表現の誤差を該着目ブロック内の周辺の未判断画素に拡散させるブロック内誤差拡散部と、前記着目ブロック内の各画素についてドット形成の有無を判断したことで生じた該着目ブロック全体の階調表現の誤差を該着目ブロック外の周辺の未判断画素に拡散させるブロック外誤差拡散部と、を備えており、前記ブロック外誤差拡散部によって拡散させる前記誤差を、各々独立したバスを通じて個別にアクセス可能な第1のメモリと第2のメモリとに分けて格納する、ことをその要旨としている。
この構成によれば、2値化処理部は、複数の画素をまとめて処理対象の着目ブロックを形成し、この着目ブロックを構成する画素毎に該着目ブロック内で誤差拡散を実施した後に、該着目ブロック全体の誤差を周辺の未判断画素に拡散させる、といった誤差拡散処理を行う。このような誤差拡散処理では、拡散範囲は狭い範囲となるも着目ブロック内での誤差拡散を画素毎に行う処理と、該着目ブロック全体の誤差を該着目ブロック外へ拡散させる処理とを併用して、画素の階調値に応じた適切な密度でのドットの形成を行って良好な画質を好適に維持しつつ、誤差拡散を1画素ずつ行うことによる処理の非効率化を改善して全体として誤差拡散処理を高速に行うことができる。また本構成では、上記着目ブロック全体の誤差を着目ブロック外へ拡散させる際には、この拡散させる誤差を各々独立したバスを通じて個別にアクセス可能な第1のメモリと第2のメモリとにそれぞれ分けて格納することとしている。こうした構成では、先の着目ブロック内での誤差拡散処理を行うにあたって、各画素についてのドット形成の有無を判断するに必要な周辺からの拡散誤差を各々独立したバスを通じてそれら各メモリから個別に読み出すことができるようになるため、メモリアクセスのためのウェイトが生ずることを抑制することができる。したがって、誤差拡散処理を高速に行うことが可能となる。
上述した画像処理装置において、前記2値化処理部は、前記第1のメモリおよび前記第2のメモリをアクセス可能な制御部を有しており、前記制御部は、前記第1のメモリからのデータの読み出しに必要なアドレスを生成する第1アドレス生成部と、前記第2のメモリからのデータの読み出しに必要なアドレスを生成する第2アドレス生成部と、前記第1のメモリへのデータの書き込みおよび前記第2のメモリへのデータの書き込みに必要なアドレスを生成する第3アドレス生成部と、前記第1のメモリへのアクセスに使用する第1のバスと、前記第2のメモリへのアクセスに使用する第2のバスと、を含む、ことを要旨としている。
これによれば、第1のメモリに格納されている誤差の読み出しは、第1アドレス生成部によって生成されたアドレスをもとに、それに対応するデータを第1のバスを通じて第1のメモリから読み出すことによってなされる。また、第2のメモリに格納されている誤差の読み出しは、第2アドレス生成部によって生成されたアドレスをもとに、それに対応するデータを第2のバスを通じて第2のメモリから読み出すことによってなされる。このように各々独立したバスを通じて各メモリを個別にアクセス可能としたことで、上述したウェイトを極力抑えて処理を高速に進めることができるようになる。
ここで、上記制御部がアクセス可能な第1および第2のメモリの構成としては例えば、
上述した画像処理装置において、前記第1のメモリおよび前記第2のメモリのうちいずれか一方を前記制御部の内部に設け、他方を前記制御部の外部バスを通じて同制御部の外部に設ける、といった構成を採用することや、或いは、
上述した画像処理装置において、前記第1のメモリおよび前記第2のメモリを前記制御部の内部にそれぞれ設ける、といった構成を採用することができる。
誤差を読み書きする第1および第2のメモリをそれぞれ制御部の内部に設ける構成とすれば、メモリアクセスを高速化し、したがって処理を高速に進めることが可能となる。また、第1および第2のメモリのうちいずれか一方のみを制御部の内部に設ける構成とした場合には、他方を外部メモリを利用して構成するようにすればコスト上昇も抑えられるので好適である。
上述した画像処理装置において、前記ブロック形成部は、画素の列たるラスタのうち、隣接する2つのラスタに含まれる縦横2列に並んだ4つの画素をまとめてブロックを形成するものであり、前記第1のメモリは、前記ブロックの形成時に該ブロック内で上位列側のラスタに含まれることとなる画素に拡散させる前記誤差を格納するメモリであり、前記第2のメモリは、前記ブロックの形成時に該ブロック内で下位列側のラスタに含まれることとなる画素に拡散させる前記誤差を格納するメモリである、ことを要旨としている。
このように、縦横2列に並んだ4つの画素をまとめて形成したブロック(着目ブロック)を処理の対象として、先のブロック内誤差拡散部による処理と、ブロック外誤差拡散部による処理とを行えば、処理を効率良く進めることができるので好適である。また、このようにブロックを形成する場合は、該ブロックの形成に用いる2つのラスタの位置にそれぞれ第1のメモリと第2のメモリとを対応させて誤差の格納を行うようにすれば、それら誤差の読み出しを効率的に行うことができるので好適である。
本発明の第2の態様は、上述した画像処理装置の2値化処理部を印刷装置に搭載したことをその要旨としている。
こうすれば、良好な画質を好適に維持しつつ、且つ、効率良く誤差拡散処理を行うことのできる2値化処理部を搭載した印刷装置を提供することができる。
本発明の第3の態様は、画素の階調値により表現された画像データをドット形成の有無により表現された画像データに変換する画像処理方法において、複数の画素をまとめてブロックを形成する第1のステップと、ドット形成の有無を判断しようとする画素を含む着目ブロックについて、該着目ブロックを構成する画素毎にドット形成の有無を判断し、該判断によって画素に生じた階調表現の誤差を該着目ブロック内の周辺の未判断画素に拡散させる第2のステップと、前記着目ブロック内の各画素についてドット形成の有無を判断したことで生じた該着目ブロック全体の階調表現の誤差を該着目ブロック外の周辺の未判断画素に拡散させる第3のステップと、前記着目ブロック外の周辺の未判断画素に拡散させる前記誤差を、各々独立したバスを通じて個別にアクセス可能な第1のメモリと第2のメモリとに分けて格納する第4のステップと、を備えることをその要旨としている。
この方法によれば、拡散範囲は狭い範囲となるも着目ブロック内での誤差拡散を画素毎に行う処理と、該着目ブロック全体の誤差を該着目ブロック外へ拡散させる処理とを併用して、画素の階調値に応じた適切な密度でのドット形成を行い、良好な画質を好適に維持しつつ、誤差拡散を1画素ずつ行うことによる処理の非効率化を改善して全体として誤差拡散処理を高速に行うことができる。また、本方法では、各画素に拡散させる誤差を各々独立したバスを通じて個別にアクセス可能な第1のメモリと第2のメモリとにそれぞれ分けて格納することとしたため、誤差をそれら各メモリから読み出す際に、該読み出し処理に起因して次の処理の実行にウェイトが生ずることを抑制して誤差拡散処理を高速に行うことが可能となる。
上述した画像処理方法において、前記第1のステップは、画素の列たるラスタのうち、隣接する2つのラスタに含まれる縦横2列に並んだ4つの画素をまとめてブロックを形成するものであり、前記第4のステップは、前記ブロックの形成時に該ブロック内で上位列側のラスタに含まれることとなる画素に拡散させる前記誤差を前記第1のメモリに格納するステップと、前記ブロックの形成時に該ブロック内で下位列側のラスタに含まれることとなる画素に拡散させる前記誤差を前記第2のメモリに格納するステップと、を含む、ことを要旨としている。
このように、縦横2列に並んだ4つの画素をまとめて形成したブロック(着目ブロック)を処理の対象として、先のブロック内誤差拡散部による処理と、ブロック外誤差拡散部による処理とを行えば、処理を効率良く進めることができるので好適である。また、このようにブロックを形成する場合には、該ブロックの形成に用いる2つのラスタの位置にそれぞれ第1のメモリと第2のメモリとを対応させて誤差の格納を行うようにすれば、それら誤差の読み出しを効率的に行うことができるので好適である。
本発明の第4の態様は、画素の階調値により表現された画像データをドット形成の有無により表現された画像データに変換する処理を制御部が実行するためのプログラムであって、前記制御部が、複数の画素をまとめてブロックを形成する処理と、ドット形成の有無を判断しようとする画素を含む着目ブロックについて、該着目ブロックを構成する画素毎にドット形成の有無を判断し、該判断によって画素に生じた階調表現の誤差を該着目ブロック内の周辺の未判断画素に拡散させる処理と、前記着目ブロック内の各画素についてドット形成の有無を判断したことで生じた該着目ブロック全体の階調表現の誤差を該着目ブロック外の周辺の未判断画素に拡散させる処理と、前記着目ブロック外の周辺の未判断画素に拡散させる前記誤差を、各々独立したバスを通じて個別にアクセス可能な第1のメモリと第2のメモリとに分けて格納する処理と、を実行するためのプログラムであることをその要旨としている。
こうしたプログラムとすれば、良好な画質を好適に維持しながら、誤差拡散処理を効率良く行うことが可能となる。
以下、この発明を具体化した一実施の形態を図1〜図7に従って説明する。
図1は、本実施の形態にかかる印刷システムを説明するための説明図である。
この印刷システムは、画像処理装置としてのコンピュータ1と、印刷装置としてのプリンタ2とを備えている。コンピュータ1には、ビデオドライバ用プログラムおよびプリンタドライバ用プログラムがインストールされており、これら各プログラムと制御部としてのCPUとにより同コンピュータ1内にはビデオドライバ3およびプリンタドライバ4が構築されている。また、コンピュータ1には、画像処理用のアプリケーションプログラム(以下「アプリケーション」という)5がインストールされており、このアプリケーション5はCPUにより実行されることで画像データを取り扱う各種の処理を行う。例えば、アプリケーション5は、図示しないデジタルカメラや携帯電話機等から画像データを取り込む処理や、画像データの加工等をする処理、画像データをビデオドライバ3に送ってコンピュータ1の図示しない表示装置(LCD等)に画像を表示させる処理、プリンタ2で印刷を行うために画像データをプリンタドライバ4に送り出す処理などを司る。
印刷指令等の操作はコンピュータ1の図示しない入力装置(キーボードやマウス等)を用いて行われる。アプリケーション5は、この入力装置を用いて印刷指令の操作がなされると、図示しないビデオバッファ等に格納されている画像データをプリンタドライバ4に送る。そして、この画像データをプリンタ2が印刷可能な各色ドットの形成有無により表現された印刷データに変換して該印刷データをプリンタ2に転送する。
プリンタドライバ4には、このように画像データを印刷データに変換するための複数のモジュールとして、解像度変換処理部11、色変換処理部12、2値化処理部13およびマイクロウィーブ処理部14等が備えられている。
解像度変換処理部11は、アプリケーション5から受け取った画像データの解像度を、プリンタ2が印刷するための印刷解像度に変換する。具体的には、画像データの解像度が印刷解像度よりも低い場合は、線形補間を行うことによって画像データの隣接するラスタ間に新たなデータを生成し、逆に印刷解像度よりも高い場合は、一定の割合でデータを間引くことによって、画像データの解像度を印刷解像度に変換する。
色変換処理部12は、解像度変換処理部11から画像データを受け取って、R,G,Bの階調値の組み合わせ(RGB表色系)によって表現されている画像データを、C,M,Y,K等のプリンタ2で使用する各色の階調値の組み合わせ(CMYK表色系)によって表現された画像データに変換する色変換処理を行う。色変換処理は、図示しない色変換テーブル(ルックアップテーブルともいう)を参照して行われ、本実施の形態においては、例えば、C(シアン)、M(マゼンダ)、Y(イエロー)、K(ブラック)、LC(ライトシアン)、LM(ライトマゼンダ)、LY(ライトイエロー)の7色の多階調の画像データに変換される。
2値化処理部13は、色変換処理後のCMYK画像データを受け取って、プリンタ2が表現可能な2階調のCMYKドットデータに変換する2値化処理(ハーフトーン処理ともいう)を行う。詳述すると、色変換処理後のCMYK画像データは、各色、例えば階調値0〜255の256階調で表現されたデータであるのに対し、プリンタ2はドットを形成する、或いはドットを形成しない、のいずれかの状態しか採り得ない。したがって、こうした256階調を有する画像データをプリンタ2が表現可能な2階調で表現された画像データに変換する必要があり、この階調数の変換を行う処理が2値化処理である。
本実施の形態では、こうした2値化処理を誤差拡散法を用いて行うようになっている。誤差拡散法とは、画素にドットを形成したこと、あるいはドットを形成しなかったことによって生じる階調表現の誤差を周辺の未判断画素に拡散し、該未判断画素についてのドット形成の有無を判断するにあたっては、周辺画素から拡散されてきた誤差を解消するようにドット形成の有無を判断する手法である。
なお、詳細については後述するが、本実施の形態においては、この誤差拡散法を用いた処理の態様を、「複数の画素をまとめてブロックBLを形成し、このブロックBLを構成する画素ごとに該ブロックBL内で誤差拡散を実施した後に、該ブロックBL全体の誤差を周辺の未判断画素に拡散させる」、といった態様としている。つまり、ブロックBL内で画素ごとに誤差拡散を行った後には、ブロックBL外へも誤差拡散を行うようにしている。
マイクロウィーブ処理部14は、誤差拡散処理により各色ドット形成の有無を表す形式に変換された画像データ(ドットデータ)を2値化処理部13から受け取り、このドットデータを印刷ヘッドのノズル数やノズルピッチ等に基づいてドットの形成順序を考慮しながらプリンタ2に転送すべき順序に並べ替えるマイクロウィーブ処理を行う。マイクロウィーブ処理について詳述すると、印刷ヘッドにおいては、各ノズルが紙送り方向(副走査方向)に印刷解像度よりも低解像度のノズルピッチで配置されているため、連続する番号のラスタを1回の主走査で形成することができない。そこで、毎回の主走査ではノズルピッチ間隔で複数本のラスタを形成しながら、ラスタを形成する度に形成位置を少しずつずらして、ラスタとラスタの間を少しずつラスタで埋めていくようにし、最終的に連続したラスタを形成する処理をマイクロウィーブ処理という。このマイクロウィーブ処理を経たデータは、コマンドが付されて印刷データとしてプリンタ2に出力される。この印刷データはパケット通信によりプリンタ2に転送される。
次に、本印刷システムを構成するコンピュータ1およびプリンタ2の電気的構成について概略を説明する。
図2は、コンピュータ1の電気的構成を示す。コンピュータ1は、制御部としてのCPU21、ROM22、RAM23、ディスクコントローラ(以下「DDC」という)24、各種のインタフェース(以下「I/F」という)25,26等を備えて構成され、これらはバス27を介して相互に接続されている。
ROM22には、CPU21による処理の実行に必要な各種のプログラム(ドライバ用プログラムやアプリケーションプログラム)やデータ等が格納される。CPU21は、このROM22を利用してプログラムを実行し、上記画像処理に関連する動作等を制御するための各種演算処理を逐次実行する。RAM23は、CPU21のワーキングメモリとして利用され、例えば、CPU21による各種演算処理の実行に必要なデータ等を一時的に読み書きするバッファとして利用される。
DDC24は、図示しないCD−R等の各種ディスク(記憶媒体)やハードディスク(記憶装置)との間のデータ授受を制御する。本実施の形態にかかるドライバ用プログラムやアプリケーション(アプリケーションプログラム)等は、例えば、これらの記憶媒体や記憶装置からインストールされる。
I/F25は、コンピュータ1の入力装置から制御指令を受け取ったり、プリンタ2に印刷データ等を出力したりするほか、デジタルカメラや携帯電話機等の各種周辺機器との間のデータ授受を制御するインタフェースである。I/F26は、コンピュータ1の表示装置との間に設けられるインタフェース(ビデオインタフェース)である。
なお、このほか、バス27には、ネットワーク接続用のインタフェースカード(I/Fカード)28等を接続することもできる。このI/Fカード28を装着すれば、コンピュータ1を外部のネットワークに接続して、画像処理に必要なプログラム等を外部からダウンロードすることもできる。
図4は、CPU21の内部構成を説明するための説明図である。CPU21は、CPUコア21a、バスコントローラ21b、第1のメモリとしての内部RAM21c、第2のメモリとしての内部RAM21d等を備えて構成されている。このうち内部RAM21cは、第1のバスとしての内部バス21eを介してCPUコア21aおよびバスコントローラ21bと相互に接続されており、内部RAM21dは、第2のバスとしての内部バス21fを介してCPUコア21aおよびバスコントローラ21bと相互に接続されている。
即ち、CPU21に設けられる2つの内部RAM21c,21dには各々独立した内部バス21e,21fが接続されており、CPUコア21aは、内部RAM21cへのアクセスには内部バス21eを使用する一方、内部RAM21dへのアクセスには内部バス21fを使用するようになっている。なお、図2で説明したように、このCPU21には、バス(以下「外部バス」という)27を介してRAM(以下「外部RAM」という)23も接続されており、この外部RAM23をCPUコア21aがアクセスする際には、上記内部バス21eが使用されるようになっている。
CPUコア21aには、第1〜第3アドレス生成部21g〜21iと内部レジスタ21jとが備えられている。
第1アドレス生成部21gは、内部RAM21cや外部RAM23からのデータの読み出しに必要なアドレスADR1を生成する。CPUコア21aは、内部RAM21cや外部RAM23からデータを読み出す際には、この第1アドレス生成部21gによって生成されたアドレスADR1を内部バス21e(具体的にはそのうちのアドレスバス)を通じてバスコントローラ21bに送出する。バスコントローラ21bは、このアドレスADR1に対応するデータDTR1を内部RAM21c、あるいは外部RAM23から読み出し、それを内部バス21e(具体的にはそのうちのデータバス)を通じてCPUコア21aに送出する。CPUコア21aは、こうして読み出したデータDTR1を内部レジスタ21jに格納する。
第2アドレス生成部21hは、内部RAM21dからのデータの読み出しに必要なアドレスADR2を生成する。CPUコア21aは、内部RAM21dからデータを読み出す際には、この第2アドレス生成部21hによって生成されたアドレスADR2を内部バス21f(具体的にはそのうちのアドレスバス)を通じてバスコントローラ21bに送出する。バスコントローラ21bは、このアドレスADR2に対応するデータDTR2を内部RAM21dから読み出し、それを内部バス21f(具体的にはそのうちのデータバス)を通じてCPUコア21aに送出する。CPUコア21aは、こうして読み出したデータDTR2を内部レジスタ21jに格納する。
第3アドレス生成部21iは、本実施の形態においては、内部RAM21cや外部RAM23へのデータの書き込みに必要なアドレスADW1を生成する機能と、内部RAM21dへのデータの書き込みに必要なアドレスADW2を生成する機能とを有している。
CPUコア21aは、内部RAM21cや外部RAM23へデータを書き込む際には、該書き込みを行うデータDTW1を内部レジスタ21jから読み出し、このデータDTW1と上記第3アドレス生成部21iによって生成されたアドレスADW1とを内部バス21e(それぞれデータバスとアドレスバス)を通じてバスコントローラ21bに送出する。バスコントローラ21bは、こうして受け取ったアドレスADW1をもとに、指定されたデータDTW1を内部RAM21c、あるいは外部RAM23へ書き込む。
また、CPUコア21aは、内部RAM21dへデータを書き込む際には、該書き込みを行うデータDTW2を内部レジスタ21jから読み出し、このデータDTW2と上記第3アドレス生成部21iによって生成されたアドレスADW2とを内部バス21f(それぞれデータバスとアドレスバス)を通じてバスコントローラ21bに送出する。バスコントローラ21bは、こうして受け取ったアドレスADW2をもとに、指定されたデータDTW2を内部RAM21dへ書き込む。
CPUコア21aがアクセス可能なこれらの内部RAM21c,21dや外部RAM23は、誤差拡散処理によって生じた誤差データを読み書きするための誤差バッファとして利用することができる。なお、本実施の形態では、後述するように、これらのRAM21c,21d,23のうち、内部RAM21c,21dをそれぞれ誤差バッファとして利用している。
図3は、プリンタ2の電気的構成を示す。プリンタ2は、回路基板30上に、CPU31、ROM32、RAM33、ASIC(Application Specific IC)34、通信インタフェース35、パネル制御回路36等を備えており、これらはバス37を介して相互に接続されている。
パネル制御回路36は、電源スイッチ、印刷開始スイッチなどの複数の操作スイッチ(操作キー)や表示画面等を有する操作パネル38と電気的に接続されている。CPU31は、パネル制御回路36を介して操作パネル38からのキー操作信号を入力すると、その操作されたキーに対応した所定の処理を実行する。そして、CPU31は、ROM32に記憶された制御プログラムに従い、RAM33を作業領域として、印刷処理をはじめとする各種の処理を実行する。
ASIC34は、回路基板30上に設けられたヘッド駆動回路39およびモータ駆動回路40,41と電気的に接続されている。ASIC34は、モータ駆動回路40,41を介してそれぞれキャリッジモータ42,紙送りモータ43を駆動制御しつつ、ヘッド駆動回路39を介して印刷ヘッド44を駆動制御する。印刷ヘッド44は、各色用のノズルを多数個有しており、キャリッジモータ42の駆動に基づき主走査方向(紙送り方向と垂直方向)に往復移動しながら、各色のインク滴をそれぞれの色に対応するノズルから吐出することにより印刷媒体上に画像を形成する。ASIC34は、各種センサ45から入力した検出信号(パルス信号)から把握されるキャリッジ位置および用紙位置に応じたキャリッジ制御・紙送り制御が行われるように各モータ42,43を駆動制御する。勿論、これらの各モータ42,43を、CPU31が各モータ駆動回路40,41を介して制御する構成を採用することもできる。
通信インタフェース35は、図示しないシリアル又はパラレルの通信ケーブルを介してコンピュータ1(具体的には図2に示すI/F25)と通信可能に接続されている。上記したように、ユーザがコンピュータ1の入力装置を操作して所定の印刷ジョブの実行を指示すると、プリンタドライバ4にて生成した印刷データがプリンタ2に送信される。
プリンタ2に送信された印刷データは、通信インタフェース35およびバス37を通じてASIC34に入力される。ASIC34は、印刷データおよびCPU31からの制御信号、さらには各種センサ45からの入力信号に基づいて印刷処理を実行し、各駆動回路39〜41を介して印刷ヘッド44および各モータ42,43を駆動制御する。
次に、本実施の形態において、プリンタドライバ4の2値化処理部13により実行される誤差拡散処理について図5〜図7にしたがって説明する。
図5は、本実施の形態の誤差拡散処理を説明するための概念図である。
上記したように、2値化処理部13は、色変換処理後のCMYK画像データに誤差拡散処理を施すことによって各画素の画素データ(階調値)をプリンタ2が表現可能な各色2階調のドットデータに変換する。なお、本実施の形態のプリンタ2は、CMYKLCLMLYの各色毎に大ドット、中ドット、小ドットの3種類のドットを形成可能なプリンタであり、2値化処理部13は、各色毎に画素データを大ドット、中ドット、小ドットのドット形成有無により表現されたCMYKドットデータに変換する。
本実施の形態の誤差拡散処理は、画素を所定数ずつまとめてブロックを形成し、該ブロック内で誤差拡散を画素ごとに実行した後に、ブロック全体の誤差をブロック外の周辺の画素に拡散する。
具体的には、図5に示すように2値化処理部13は、まずブロック形成部として、CMYK画像データの隣接する2つのラスタに含まれる画素のうち、縦横2列(2×2)に並んだ4つの画素をまとめてブロックBLを形成する。なお、図5では、画素D00,D01,D10,D11を含むブロックBLを現在処理する着目ブロックとして示している。
2値化処理部13は、着目ブロックBLを形成したら、次いでブロック内誤差拡散部として、この着目ブロックBLを構成する画素D00,D01,D10,D11についての誤差拡散処理をそれら画素ごとに行う。
詳述すると、まず2値化処理部13は、画素D00の階調値と、この画素D00に周辺の判断済みブロックから拡散されてきた誤差とに基づいて、画素D00についてのドット形成の有無を判断し、この判断によって生じた誤差E00を着目ブロックBL内の未判断画素、即ち画素D01,D10,D11にそれぞれ所定の比率で拡散する。なお、判断済みブロックとは、ドット形成の有無を判断するべく、以前に複数の画素をまとめてブロックとして形成され、このブロックを対象とした一連の誤差拡散処理が既に終了しているブロックのことである。
続いて2値化処理部13は、画素D01の階調値と、この画素D01に周辺の判断済みブロックおよび画素D00から拡散されてきた誤差とに基づいて、画素D01についてのドット形成の有無を判断し、この判断によって生じた誤差E01を着目ブロックBL内の未判断画素、即ち画素D10,D11にそれぞれ所定の比率で拡散する。
続いて2値化処理部13は、画素D10の階調値と、この画素D10に周辺の判断済みブロックおよび画素D00,D01から拡散されてきた誤差とに基づいて、画素D10についてのドット形成の有無を判断し、この判断によって生じた誤差E10を着目ブロックBL内の未判断画素、即ち画素D11に所定の比率で拡散する。
続いて2値化処理部13は、画素D11の階調値と、この画素D11に周辺の判断済みブロックおよび画素D00,D01,D10から拡散されてきた誤差とに基づいて、画素D11についてのドット形成の有無を判断し、この判断によって生じた画素D11の誤差E11を算出する。なお、この誤差E11については周辺画素への拡散は行わない(この時点で、着目ブロックBL内に未判断画素はないため)。
2値化処理部13は、こうして着目ブロックBLを構成する画素D00,D01,D10,D11についての誤差拡散を行ったら、次いでブロック外誤差拡散部として、該着目ブロックBL全体の誤差Ebを算出し、この誤差Ebを該着目ブロックBL外の周辺の未判断画素(図5では、例えば14個の画素)にそれぞれ所定の比率で拡散する。ここで、着目ブロックBL全体の誤差Ebは、該着目ブロックBLをあたかも1つの大きな画素として扱い、各画素D00,D01,D10,D11にそれぞれドットを形成したこと、あるいは形成しなかったことによって生じた誤差E00,E01,E10,E11を総和することによって算出される。
2値化処理部13は、この着目ブロックBL全体の誤差Ebを周辺の未判断画素に拡散したら、該着目ブロックBLに関する一連の処理を終了し、以降は、処理対象とする着目ブロックBL(2×2の4画素)をラスタ方向(画素の処理方向)に順次変更しながら、上記と同様の処理を繰り返すことによって全ての画素について2値化を行う。
図6は、このような誤差拡散処理を実行する2値化処理部13の処理ステップを示すフローチャートである。また、図7は、誤差拡散処理の実行に用いられる誤差バッファBuf1,Buf2を示す概念図である。なお、ここでは、上記説明した図5と同一の符号を用いて説明する。
ステップ100では、2値化処理部13は、CMYK画像データに変換された2×2の4つの画素D00,D01,D10,D11について、それら各画素の画素データを入力し、処理対象とする着目ブロックBLを形成する。
ステップ110では、2値化処理部13は、画素D00,D01に周辺の判断済みブロックから拡散されてきた誤差EA*00,EA*01を誤差バッファBuf1から読み出し、それをCPU21の内部レジスタ21j(図4)に格納する。なお、誤差バッファBuf1は、内部RAM21c(図4)内の一部の領域が確保されて構成されており、この誤差バッファBuf1には、ブロックBLの形成時に上位列側のラスタに含まれることとなる画素についての誤差データが複数格納されている。こうした誤差バッファBuf1(内部RAM21c)からの誤差EA*00,EA*01の読み出しは、先の図4で説明したように、第1アドレス生成部21gによって生成されたアドレスADR1をもとに、それに対応するデータDTR1を内部バス21eを通じて内部RAM21cから読み出すことによってなされる。
ステップ120では、2値化処理部13は、画素D10,D11に周辺の判断済みブロックから拡散されてきた誤差EA*10,EA*11を誤差バッファBuf2から読み出し、それをCPU21の内部レジスタ21j(図4)に格納する。なお、誤差バッファBuf2は、内部RAM21d(図4)内の一部の領域が確保されて構成されており、この誤差バッファBuf2には、ブロックBLの形成時に下位列側のラスタに含まれることとなる画素についての誤差データが複数格納されている。こうした誤差バッファBuf2(内部RAM21d)からの誤差EA*10,EA*11の読み出しは、先の図4で説明したように、第2アドレス生成部21hによって生成されたアドレスADR2をもとに、それに対応するデータDTR2を内部バス21fを通じて内部RAM21dから読み出すことによってなされる。
ステップ130では、2値化処理部13は、上記着目ブロックBLを構成する画素D00,D01,D10,D11のうち、まず画素D00に生じる誤差E00を算出し、この誤差E00を画素D01,D10,D11に拡散する。
詳しくは、図7に示すように2値化処理部13は、画素D00に周辺の判断済みブロックから拡散されてきた誤差EA*00と、画素D00の階調値とに基づいて、まず画素D00についてのドット形成の有無を判断する。2値化処理部13は、こうしてドット形成の有無を判断したら、その判断結果に基づいて画素D00に生ずる誤差E00を求め、これを画素D01,D10,D11にそれぞれ所定の比率で拡散する。ここで、画素D00の誤差E00に基づき画素D01,D10,D11にそれぞれ分配(拡散)させる誤差E00*01,E00*10,E00*11は、具体的にはCPU21の内部レジスタ21j(図4)に一時的に格納される。なお、誤差を分配(拡散)させる比率は、あらかじめROM22等に格納されている図示しない誤差拡散マトリックスと呼ばれる数表にしたがって求められる。
ステップ140では、2値化処理部13は、続いて画素D01に生じる誤差E01を算出し、この誤差E01を画素D10,D11に拡散する。
詳しくは、図7に示すように2値化処理部13は、画素D01に周辺の判断済みブロックから拡散されてきた誤差EA*01と上記画素D00から拡散されてきた誤差E00*01とを総和して求めた誤差と、画素D01の階調値とに基づいて、まず画素D01についてのドット形成の有無を判断する。2値化処理部13は、こうしてドット形成の有無を判断したら、その判断結果に基づいて画素D01に生ずる誤差E01を求め、これを画素D10,D11にそれぞれ所定の比率で拡散する。ここで、画素D01の誤差E01に基づき画素D10,D11にそれぞれ拡散(分配)させる誤差E01*10,E01*11は、具体的にはCPU21の内部レジスタ21jに一時的に格納される。
ステップ150では、2値化処理部13は、続いて画素D10に生じる誤差E10を算出し、この誤差E10を画素D11に拡散する。
詳しくは、図7に示すように2値化処理部13は、画素D10に周辺の判断済みブロックから拡散されてきた誤差EA*10と上記画素D00,D01から拡散されてきた誤差E00*10,E01*10とを総和して求めた誤差と、画素D10の階調値とに基づいて、まず画素D01についてのドット形成の有無を判断する。2値化処理部13は、こうしてドット形成の有無を判断したら、その判断結果に基づいて画素D10に生ずる誤差E10を求め、これを画素D11に所定の比率で拡散する。ここで、画素D10の誤差E10に基づき画素D11に拡散(分配)させる誤差E10*11は、具体的にはCPU21の内部レジスタ21jに一時的に格納される。
ステップ160では、2値化処理部13は、続いて画素D11に生じる誤差E11を算出する。なお、この誤差E11のブロックBL内画素への拡散は行わない。
詳しくは、図7に示すように2値化処理部13は、画素D11に周辺の判断済みブロックから拡散されてきた誤差EA*11と上記画素D00,D01,D10から拡散されてきた誤差E00*11,E01*11,E10*11とを総和して求めた誤差と、画素D11の階調値とに基づいて、まず画素D11についてのドット形成の有無を判断する。2値化処理部13は、こうしてドット形成の有無を判断したら、その判断結果に基づいて画素D11に生ずる誤差E11を求め、この誤差E11をCPU21の内部レジスタ21jに一時的に格納する。
ステップ170では、2値化処理部13は、次いで着目ブロックBL全体に生じる誤差Ebを算出する。
詳しくは、図7に示すように2値化処理部13は、着目ブロックBLをあたかも1つの大きな画素として扱い、該着目ブロックBL内の画素D00,D01,D10,D11にそれぞれ生じた誤差E00,E01,E10,E11を総和することによって該着目ブロックBL全体に生ずる誤差Ebを算出する。
2値化処理部13は、次いで、この着目ブロックBL全体の誤差Ebを該着目ブロックBL外の周辺の未判断画素にそれぞれ所定の比率で拡散させる。
具体的には、まずステップ180において、これら周辺の未判断画素のうち、ブロックBLの形成時に該ブロックBL内で上位列側のラスタに含まれることとなる画素に拡散させる誤差を誤差バッファBuf1(内部RAM21c)に格納する。なお、本実施の形態においては、先の図5で説明したように、2値化処理部13は、着目ブロックBL全体の誤差Ebを周辺の14個の未判断画素に拡散させることとしている。このため、ステップ180では、同図5に示すこれら14個の画素のうち、画素P1を含むラスタと画素P3を含むラスタとについてそれら各ラスタに含まれる画素にそれぞれ拡散させる誤差(7画素分)を誤差バッファBuf1(内部RAM21c)に格納する。こうした誤差バッファBuf1(内部RAM21c)への誤差の書き込みは、先の図4で説明したように、第3アドレス生成部21iによって生成されたアドレスADW1をもとに、それに対応するデータDTW1を内部バス21eを通じて内部RAM21cへ書き込むことによってなされる。
続いて、ステップ190において、ブロックBLの形成時に該ブロックBL内で下位列側のラスタに含まれることとなる画素、図5においては、画素P2を含むラスタと画素P4を含むラスタとについてそれら各ラスタに含まれる画素にそれぞれ拡散させる誤差(7画素分)を誤差バッファBuf2(内部RAM21d)に格納する。こうした誤差バッファBuf2(内部RAM21d)への誤差の書き込みは、先の図4で説明したように、第3アドレス生成部21iによって生成されたアドレスADW2をもとに、それに対応するデータDTW2を内部バス21fを通じて内部RAM21dへ書き込むことによってなされる。
このように、本実施の形態では、縦横2列(2×2)の4つの画素を一つにまとめてブロックを形成し、画素毎の誤差拡散をブロック内の画素(未判断画素)を拡散範囲としながら行う一方、ブロック全体の誤差を該ブロック外へも拡散させるようにしている。このような誤差拡散処理では、拡散範囲は狭い範囲となるもブロック内での画素毎の誤差拡散と、ブロック外への誤差拡散とを併用して、画素の階調値に応じた適切な密度でのドットの形成を行って良好な画質を好適に維持しつつ、誤差拡散を画素単位(1画素ずつ)のみで行うことによる処理の非効率化を改善して全体として誤差拡散処理を高速に行うことができる。
即ち、従来のように誤差拡散を画素単位のみで行うこととすれば、極めて良好な画質の画像を形成することは可能であるが、この方法ではドット形成の有無を判断する度に誤差を周辺の画素に広範囲にわたって拡散しなければならないので、処理を高速に行うことが困難となる。本実施の形態では、この点に鑑みて、画素毎に誤差拡散を行う場合には誤差の拡散範囲をブロック内とし、1画素あたりの周辺への拡散回数を少なくすることで処理の効率化を図っている。ところが、誤差の拡散範囲を狭い範囲に限り、1画素あたりの周辺への拡散回数を少なくすると、画質の劣化が生じる懸念がある。そこで、本実施の形態では、こうした画質の劣化を極力抑えるべく、画素毎の誤差拡散をブロック内で行った後に、ブロック全体の誤差を該ブロック外の周辺の未判断画素に広範囲に渡って拡散させ、これにより画質の維持と処理の効率化との両立を図るようにしている。
なお、処理を効率化することのみを追求するのであれば、誤差拡散を画素毎に行わずにブロック単位(ブロック全体の誤差を拡散させる)のみで行ったほうがより効率良く処理することができる。しかしながら、この方法は、やはり画質の劣化を招く懸念があり好ましくない。
ちなみに、本実施の形態の誤差拡散の手法を用いて処理を行う場合、1つのブロックに関する処理で周辺の画素に誤差を拡散する回数は、
(ブロック内での誤差拡散回数:6回)+(ブロック外への誤差拡散回数:14回)
であり、1ブロックあたり(即ち、2×2の4画素あたり)20回となる。
これに対し、従来の誤差拡散の手法(画素単位(1画素ずつ)のみでの誤差拡散)を用いて処理を行う場合、本実施の形態の処理によるものと同程度以上の画質の画像を得るのに必要な1画素あたりの誤差の拡散回数はおよそ9回であり、4画素あたりに換算すれば36回となる。したがって、この例の場合には、従来の手法と比べて誤差の拡散回数は4画素あたり16回削減されることとなり、その分、誤差拡散処理を高速化することができる。
ところで、「画質の維持と処理の効率化との両立を図る」といった観点に立って考えれば、例えば、着目ブロック内の画素の階調値(例えば平均値)を求め、このブロック内の階調値に基づき、誤差拡散をブロック単位で行うか、或いは画素毎に行うかを判断して、誤差拡散処理のモードを適宜選択可能とする、といった手法も考えられる。
即ち、この手法は、ブロック内の階調値がブロック単位での誤差拡散を行った場合でも画質の劣化を生じることのない階調値であると判断できるときにはブロック単位で処理を行い、そうでないときには画素毎に処理を行うようにする、といった思想である。こうすれば、確かにブロック単位のみで処理することによる画質の劣化を抑えつつ、一方で画素単位で1画素ずつ処理することによる処理の非効率化も改善することができる。
しかしながら、こうした方法では、着目ブロックで実施する上記誤差拡散処理のモードが各色(本例ではCMYKLCLMLYの7色)の間でいずれか1つでも異なると(同一ブロックであっても当然各色ごとに階調値は異なることから、処理モードが異なる場合がある)、処理効率が低下するという問題が生じる。即ち、この方法では、同一ブロックであっても各色ごとの階調値の条件によっては処理モードが異なる可能性が多分にあるために、同一ブロックで実施する各色ごとの処理(画素単位又はブロック単位)が必ずしも同一とはならない。このため、同様な処理を繰り返し実行する、いわゆるパイプライン処理には適した方法とはならず、条件分岐が多発することによる(即ち、同一ブロックの各色間で実施する処理モードが異なることによる)処理効率の低下を招く懸念がある。
これに対し、本実施の形態では、着目ブロック内での誤差拡散を画素毎に実行した後に、該着目ブロック全体の誤差を周辺の画素に拡散する、といった一連の処理を同一ブロックの各色について、それら各色ごとの階調値の条件に依らずに実行することができる。このため、条件分岐の発生を極力抑えてパイプラインを効率的に利用して処理を進めることができる。よって、誤差拡散処理を全体として高速に行うことが可能となる。
また、本実施の形態は、こうした誤差拡散処理を進めるにあたって誤差を読み書きするための誤差バッファを各々独立したバスを通じて個別にアクセスすることのできる2つのメモリを使用して構成している点にさらに特徴を有している。即ち、本例における4画素単位のブロックBLの形成時に該ブロックBL内で上位列側のラスタに含まれることとなる画素(未判断画素)については、その画素に拡散させる誤差を内部バス21eを通じて誤差バッファBuf1(内部RAM21c)に格納する。また、同ブロックBLの形成時に該ブロックBL内で下位列側のラスタに含まれることとなる画素(未判断画素)については、その画素に拡散させる誤差を内部バス21fを通じて誤差バッファBuf2(内部RAM21d)に格納することとしている。
こうすれば、着目ブロックBL内での誤差拡散を行う際に、該着目ブロックBLを構成する画素D00,D01についての誤差拡散に必要な誤差EA*00,EA*01を誤差バッファBuf1から読み出すとほぼ同時に、画素D10,D11についての誤差拡散に必要な誤差EA*10,EA*11を誤差バッファBuf2から読み出すことができる。ここで、ほぼ同時に読み出すことができるとは、誤差バッファBuf1からのデータ読み出しと誤差バッファBuf2からのデータ読み出しとを並列して処理することができることを意味する。
即ち、誤差を読み書きするための2つの誤差バッファBuf1,Buf2を1つのメモリ(例えば内部RAM21cのみ)を使用して構成した場合、誤差バッファBuf1からの誤差の読み出しを行っている間は、この読み出しが終了するまで、次の誤差バッファBuf2からの誤差の読み出しを行うことはできない。また同様に、誤差バッファBuf2からの誤差の読み出しを行っている間は、この読み出しが終了するまで、内部RAM21cを使用した処理(誤差の格納等)を行うことはできない。
これに対し、本実施の形態では、2つの誤差バッファBuf1,Buf2を2つの内部RAM21c,21dを使用して構成し、それら各内部RAM21c,21dを各々独立した内部バス21e,21fを使用してアクセスする態様としていることから、こうした処理の待ち時間(即ちウェイト)が生じない。よって、本構成によれば、上述したパイプラインをより効率的に利用して処理を進めることができ、誤差拡散処理を全体として高速に行うことが可能となる。
以上記述したように、本実施の形態によれば、以下の効果を奏する。
(1)2値化処理部13は、CMYK画像データの隣接する2つのラスタに含まれる4つの画素D00,D01,D10,D11をまとめて処理対象の着目ブロックBLを形成し、該着目ブロックBLを構成する画素毎に、まず着目ブロックBL内で誤差拡散を実施する。そして、着目ブロックBL内で画素毎に誤差拡散を実施したら、次いで、着目ブロックBL全体の誤差Ebを周辺の未判断画素に拡散させる。このような誤差拡散処理とすれば、拡散範囲は狭い範囲となるも着目ブロックBL内での誤差拡散を画素毎に行う処理と、該着目ブロックBL全体の誤差Ebをその周辺へ拡散させる処理とを併用して、画素の階調値に応じた適切な密度でのドットの形成を行って良好な画質を好適に維持しつつ、誤差拡散処理を効率良く行うことが可能となる。
(2)2値化処理部13は、着目ブロックBL全体の誤差Ebを周辺の未判断画素に拡散させる際には、それら未判断画素に拡散させる誤差を、各々独立した内部バス21e,21fを通じて個別にアクセス可能な誤差バッファBuf1(内部RAM21c)と誤差バッファBuf2(内部RAM21d)とにそれぞれ分けて格納するようにした。こうすれば、先の着目ブロックBL内での誤差拡散処理を行うにあたって、ドット形成の有無を判断するに必要な周辺からの拡散誤差を各々独立した内部バス21e,21fを通じてそれら各誤差バッファBuf1,Buf2から個別に読み出すことができるようになるため、メモリアクセスのためのウェイトが生ずることを抑制することができる。具体的には、本例では誤差の読み出し時において、パイプライン(ベクトルパイプライン)命令を使用することによって、メモリアクセスのためのウェイトを好適に抑制することができる。これにより誤差拡散処理を高速に行うことが可能となる。
(3)2値化処理部13は、着目ブロックBL内でドット形成の有無を最初に判断する画素D00については、着目ブロックBL外の判断済みブロックから拡散されてきた誤差EA*00と、画素D00の階調値とに基づいてドット形成の有無を判断するようにした。これによれば、周辺(判断済みブロック)から拡散されてきた誤差EA*00に基づいて、画素の階調値に応じた適切な密度となるようドット形成の有無を判断することができる。
(4)2値化処理部13は、着目ブロックBL内の判断済み画素からの誤差が拡散されている画素(本例ではD01,D10,D11)については、該判断済み画素から拡散されてきた誤差と着目ブロックBL外の判断済みブロックから拡散されてきた誤差とを総和して求めた値と、画素の階調値とに基づいてドット形成の有無を判断するようにした。これによれば、画素の階調値に応じた適切な密度となるようドット形成の有無を判断することができる。
(5)2値化処理部13は、着目ブロックBL内の各画素D00,D01,D10,D11で生じた誤差E00,E01,E10,E11を総和することで該着目ブロックBL全体の誤差Ebを算出し、この誤差Ebを周辺の未判断画素に拡散させるようにした。このように、着目ブロックBL全体をあたかも1つの大きな画素として扱い、該着目ブロックBL全体で生ずる誤差Ebを周辺の未判断画素に広範囲に渡って拡散することで、良好な画質を好適に維持しつつ、誤差拡散処理を迅速に行うことが可能となる。
(6)2値化処理部13は、画素の列たるラスタのうち、隣接する2つのラスタに含まれる縦横2列に並んだ4つの画素(本例ではD00,D01,D10,D11)をまとめてブロック(着目ブロック)BLを形成するようにした。そして、ブロックBLの形成時に該ブロックBL内で上位列側のラスタに含まれることとなる画素については、その画素に拡散させる誤差を誤差バッファBuf1に格納し、これに対しブロックBL内で下位列側のラスタに含まれることとなる画素については、その画素に拡散させる誤差を誤差バッファBuf2に格納するようにした。このように、ブロックBLの形成に用いる2つのラスタの位置にそれぞれ誤差バッファBuf1と誤差バッファBuf2とを対応させて誤差の格納を行うようにすれば、それら誤差の読み出しを効率的に行うことができるので好適である。
(7)2値化処理部13は、着目ブロックBLについての誤差拡散処理を行う際には、画像データを構成する各色(本例ではCMYKLCLMLYの7色)について、着目ブロックBL内での誤差拡散を画素毎に行う処理と、着目ブロックBL全体の誤差Ebを周辺の未判断画素に拡散させる処理とをそれぞれ行うようにした。こうすれば、パイプラインを効率的に利用して誤差拡散処理を高速化することができる。
なお、上記実施の形態では、以下の態様に変更した変形例を採用してもよい。
(変形例1)上記実施の形態では、第1のメモリを内部RAM21cに代えて外部RAM23とし、誤差バッファBuf1を外部RAM23内の一部の領域を使用して構成するようにしてもよい。
(変形例2)上記実施の形態では、第3アドレス生成部21iは、内部RAM21c(あるいは外部RAM23)の書き込みアドレスADW1と、内部RAM21dの書き込みアドレスADW2とをともに生成可能な構成としたが、これらの各アドレスADW1,ADW2をそれぞれ別々のアドレス生成部によって生成するようにしてもよい。この構成とすれば、誤差バッファBuf1,Buf2からの誤差の読み出し時と、それら誤差バッファBuf1,Buf2への誤差の書き込み時とにそれぞれパイプライン(ベクトルパイプライン)命令を使用することで、メモリアクセスのためのウェイトをより好適に抑制することが可能となる。その結果、誤差拡散処理をより高速に行うことが可能となる。
(変形例3)上記実施の形態では、画像処理装置をコンピュータ1とし、このコンピュータ1の制御部たるCPU21と(ROM22に格納される)プリンタドライバ用プログラムとで2値化処理部13を含むプリンタドライバ4を構築した。これに代えて、プリンタドライバ用プログラムを印刷装置たるプリンタ2のROM32等に格納し、該プリンタ2の制御部たるCPU31とプリンタドライバ用プログラムとで上記2値化処理部13を含むプリンタドライバ4を構築するようにしてもよい。こうすれば、プリンタ2をコンピュータ1と接続しなくとも、該プリンタ2をスタンドアロン機として使用することが可能となる。つまり、RGB画像データをCMYK画像データに変換して、この画像データに2値化処理(本実施の形態の誤差拡散処理)を施してドット形成の有無による表現形式のデータに変換し、さらにマイクロウィーブ処理を施して印刷データを生成する、といった一連の画像処理をプリンタ2側で行って該プリンタ2単体で印刷処理することが可能となる。なお、この場合には、プリンタ2が画像処理装置となる。要するに、本発明にかかる画像処理装置は、コンピュータ1およびプリンタ2のいずれによっても実現可能である。
(変形例4)上記実施の形態では、2値化処理部13をプリンタドライバ4の機能として実現したが、この2値化処理部13による誤差拡散処理の機能を回路化し、ハードウェア上で実現するようにしてもよい。
(変形例5)上記実施の形態において、2値化処理部13による2値化処理の形態としては、上述した誤差拡散処理のみによるものならず、こうした誤差拡散処理とディザ法(組織的ディザ法)を用いた処理とを併用する形態としてもよい。
(変形例6)上記実施の形態では、ブロックBLを構成する複数の画素は4つの画素(D00,D01,D10,D11)に限らず、例えば、隣接する3つのラスタに含まれる縦横3列に並んだ3×3の9個の画素で構成してもよい。また、必ずしもマトリクス状に隣接する複数の画素をまとめて構成するに限らず、任意の複数の画素としてもよい。
(変形例7)上記実施の形態では、4つの画素D00,D01,D10,D11を含むブロックBL内での画素毎に行う誤差拡散の回数を計6回としたが、必ずしもこの回数には限定されない。画質を維持できる程度であれば、これより少ない回数としてもよい。
(変形例8)上記実施の形態では、4つの画素D00,D01,D10,D11を含むブロックBL全体の誤差Ebを周辺の未判断画素に拡散させる回数を14回としたが、必ずしもこの回数には限定されない。画質を維持できる程度であれば、これより少ない回数としてもよいし、また逆に、処理効率の低下が懸念される程度でなければ、これより多い回数としてもよい。
(変形例9)上記実施の形態では、ブロックBL内の各画素D00,D01,D10,D11に生じる誤差E00,E01,E10,E11を総和した値を、ブロックBL全体の誤差Ebとしたが、必ずしもこの算出方法に限定されるものではなく、他の算出方法によってブロックBL全体の誤差Ebを求めるようにしてもよい。
(変形例10)上記実施の形態では、CMYK画像データを構成する各色は、CMYKLCLMLYの7色としたが、勿論この7色に限定されるものではない。
次に、上記実施の形態および各変形例から把握できる技術的思想を以下に追記する。
(技術的思想1)
請求項1乃至5のいずれか一項記載の画像処理装置において、
前記ブロック内誤差拡散部は、前記着目ブロック内の各画素のうちドット形成の有無を最初に判断する画素については、該着目ブロック外の判断済みブロックから拡散されてきた前記誤差と、前記画素の階調値とに基づいてドット形成の有無を判断する、ことを特徴とする。これによれば、画素の階調値に応じた適切な密度となるようドット形成の有無を判断することができる。
(技術的思想2)
請求項1乃至5、上記技術的思想1のうちいずれか一に記載の画像処理装置において、
前記ブロック内誤差拡散部は、前記着目ブロック内の各画素のうち該着目ブロック内の判断済み画素からの前記誤差が拡散されている画素については、該着目ブロック内の判断済み画素から拡散されてきた前記誤差と、該着目ブロック外の判断済みブロックから拡散されてきた前記誤差と、前記画素の階調値とに基づいてドット形成の有無を判断する、ことを特徴とする。これによれば、画素の階調値に応じた適切な密度となるようドット形成の有無を判断することができる。
(技術的思想3)
請求項1乃至5、上記技術的思想1、2のうちいずれか一に記載の画像処理装置において、
前記ブロック外誤差拡散部は、前記着目ブロック内の各画素に生じた前記誤差を総和して求めた誤差を該着目ブロック全体に生じた前記誤差とする、ことを特徴とする。こうすれば、着目ブロック全体をあたかも1つの大きな画素として扱い、該着目ブロック全体で生ずる誤差を他の周囲の未判断画素に拡散することで、良好な画質を好適に維持しつつ、誤差拡散処理を迅速に行うことができるようになる。
(技術的思想4)
請求項1乃至5、上記技術的思想1乃至3のうちいずれか一に記載の画像処理装置において、
前記画素の階調値により表現された画像データは、RGB表色系の画像データが色変換処理されて生成されたCMYK表色系の画像データであり、
前記2値化処理部は、前記CMYK表色系の画像データを構成する各色について、前記ブロック内誤差拡散部による前記着目ブロック内での誤差拡散処理と前記ブロック外誤差拡散部による前記着目ブロック外への誤差拡散処理とを実施する、ことを特徴とする。このように、着目ブロックにあっては、CMYK表色系の画像データを構成する各色について、ブロック内誤差拡散部による処理とブロック外誤差拡散部による処理とをそれぞれ実施することとすれば、同様な処理を繰り返し実行する、いわゆるパイプラインを効率的に利用して誤差拡散処理を高速化することができる。
一実施の形態における印刷システムを説明するための説明図。 コンピュータの電気的構成を示す概略ブロック図。 プリンタの電気的構成を示す概略ブロック図。 CPUの内部構成を説明するための説明図。 誤差拡散処理を説明するための概念図。 2値化処理部による誤差拡散処理の流れを示すフローチャート。 誤差拡散処理における誤差バッファの使用例を示す概念図。
符号の説明
1…コンピュータ(画像処理装置)、2…プリンタ(印刷装置)、4…プリンタドライバ、5…アプリケーション、13…2値化処理部(ブロック形成部、ブロック内誤差拡散部、ブロック外誤差拡散部)、21…CPU(制御部)、21a…CPUコア、21b…バスコントローラ、21c…内部RAM(第1のメモリ)、21d…内部RAM(第2のメモリ)、21e…内部バス(第1のバス)、21f…内部バス(第2のバス)、21g…第1アドレス生成部、21h…第2アドレス生成部、21i…第3アドレス生成部、21j…内部レジスタ、22…ROM、23…RAM(外部RAM)、27…バス(外部バス)、Buf1…第1のメモリ内に構成される誤差バッファ、Buf2…第2のメモリ内に構成される誤差バッファ、31…CPU、32…ROM、33…RAM、34…ASIC、D00,D01,D10,D11…画素、BL…ブロック(着目ブロック)、P1〜P4…ブロック全体の誤差を拡散させる画素(一部のみ)、E00,E01,E10,E11…画素に生じる誤差、Eb…ブロック全体の誤差、E00*01,E00*10,E00*11,E01*10,E01*11,E10*11…判断済み画素から拡散される誤差、EA*00,EA*01,EA*10,EA*11…判断済みブロックから拡散される誤差、ADR1,ADR2,ADW1,ADW2…アドレス、DTR1,DTR2,DTW1,DTW2…データ。

Claims (9)

  1. 画素の階調値により表現された画像データをドット形成の有無により表現された画像データに変換する2値化処理部を備える画像処理装置において、
    前記2値化処理部は、
    複数の画素をまとめてブロックを形成するブロック形成部と、
    ドット形成の有無を判断しようとする画素を含む着目ブロックについて、該着目ブロックを構成する画素毎にドット形成の有無を判断し、該判断によって画素に生じた階調表現の誤差を該着目ブロック内の周辺の未判断画素に拡散させるブロック内誤差拡散部と、
    前記着目ブロック内の各画素についてドット形成の有無を判断したことで生じた該着目ブロック全体の階調表現の誤差を該着目ブロック外の周辺の未判断画素に拡散させるブロック外誤差拡散部と、を備えており、
    前記ブロック外誤差拡散部によって拡散させる前記誤差を、各々独立したバスを通じて個別にアクセス可能な第1のメモリと第2のメモリとに分けて格納する、
    ことを特徴とする画像処理装置。
  2. 前記2値化処理部は、前記第1のメモリおよび前記第2のメモリをアクセス可能な制御部を有しており、
    前記制御部は、
    前記第1のメモリからのデータの読み出しに必要なアドレスを生成する第1アドレス生成部と、
    前記第2のメモリからのデータの読み出しに必要なアドレスを生成する第2アドレス生成部と、
    前記第1のメモリへのデータの書き込みおよび前記第2のメモリへのデータの書き込みに必要なアドレスを生成する第3アドレス生成部と、
    前記第1のメモリへのアクセスに使用する第1のバスと、
    前記第2のメモリへのアクセスに使用する第2のバスと、
    を含む、
    請求項1記載の画像処理装置。
  3. 前記第1のメモリおよび前記第2のメモリのうちいずれか一方は、前記制御部の内部に設けられるメモリであり、他方は、前記制御部の外部バスを通じて同制御部の外部に設けられるメモリである、
    請求項2記載の画像処理装置。
  4. 前記第1のメモリおよび前記第2のメモリは、前記制御部の内部にそれぞれ設けられるメモリである、
    請求項2記載の画像処理装置。
  5. 前記ブロック形成部は、画素の列たるラスタのうち、隣接する2つのラスタに含まれる縦横2列に並んだ4つの画素をまとめてブロックを形成するものであり、
    前記第1のメモリは、前記ブロックの形成時に該ブロック内で上位列側のラスタに含まれることとなる画素に拡散させる前記誤差を格納するメモリであり、
    前記第2のメモリは、前記ブロックの形成時に該ブロック内で下位列側のラスタに含まれることとなる画素に拡散させる前記誤差を格納するメモリである、
    請求項1乃至4のいずれか一項記載の画像処理装置。
  6. 請求項1乃至5のいずれか一項記載の2値化処理部を搭載した印刷装置。
  7. 画素の階調値により表現された画像データをドット形成の有無により表現された画像データに変換する画像処理方法において、
    複数の画素をまとめてブロックを形成する第1のステップと、
    ドット形成の有無を判断しようとする画素を含む着目ブロックについて、該着目ブロックを構成する画素毎にドット形成の有無を判断し、該判断によって画素に生じた階調表現の誤差を該着目ブロック内の周辺の未判断画素に拡散させる第2のステップと、
    前記着目ブロック内の各画素についてドット形成の有無を判断したことで生じた該着目ブロック全体の階調表現の誤差を該着目ブロック外の周辺の未判断画素に拡散させる第3のステップと、
    前記着目ブロック外の周辺の未判断画素に拡散させる前記誤差を、各々独立したバスを通じて個別にアクセス可能な第1のメモリと第2のメモリとに分けて格納する第4のステップと、
    を備える画像処理方法。
  8. 前記第1のステップは、画素の列たるラスタのうち、隣接する2つのラスタに含まれる縦横2列に並んだ4つの画素をまとめてブロックを形成するものであり、
    前記第4のステップは、
    前記ブロックの形成時に該ブロック内で上位列側のラスタに含まれることとなる画素に拡散させる前記誤差を前記第1のメモリに格納するステップと、
    前記ブロックの形成時に該ブロック内で下位列側のラスタに含まれることとなる画素に拡散させる前記誤差を前記第2のメモリに格納するステップと、
    を含む、
    請求項7記載の画像処理方法。
  9. 画素の階調値により表現された画像データをドット形成の有無により表現された画像データに変換する処理を制御部が実行するためのプログラムであって、
    前記制御部が、
    複数の画素をまとめてブロックを形成する処理と、
    ドット形成の有無を判断しようとする画素を含む着目ブロックについて、該着目ブロックを構成する画素毎にドット形成の有無を判断し、該判断によって画素に生じた階調表現の誤差を該着目ブロック内の周辺の未判断画素に拡散させる処理と、
    前記着目ブロック内の各画素についてドット形成の有無を判断したことで生じた該着目ブロック全体の階調表現の誤差を該着目ブロック外の周辺の未判断画素に拡散させる処理と、
    前記着目ブロック外の周辺の未判断画素に拡散させる前記誤差を、各々独立したバスを通じて個別にアクセス可能な第1のメモリと第2のメモリとに分けて格納する処理と、
    を実行するためのプログラム。
JP2004083236A 2004-03-22 2004-03-22 画像処理装置、印刷装置、画像処理方法およびプログラム Pending JP2005269577A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004083236A JP2005269577A (ja) 2004-03-22 2004-03-22 画像処理装置、印刷装置、画像処理方法およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004083236A JP2005269577A (ja) 2004-03-22 2004-03-22 画像処理装置、印刷装置、画像処理方法およびプログラム

Publications (1)

Publication Number Publication Date
JP2005269577A true JP2005269577A (ja) 2005-09-29

Family

ID=35093586

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004083236A Pending JP2005269577A (ja) 2004-03-22 2004-03-22 画像処理装置、印刷装置、画像処理方法およびプログラム

Country Status (1)

Country Link
JP (1) JP2005269577A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010516173A (ja) * 2007-01-16 2010-05-13 トムソン ライセンシング 画像におけるアーティファクトを低減するシステム及び方法
JP2014209801A (ja) * 2014-08-11 2014-11-06 キヤノン株式会社 情報処理装置、情報処理方法、制御装置および制御方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010516173A (ja) * 2007-01-16 2010-05-13 トムソン ライセンシング 画像におけるアーティファクトを低減するシステム及び方法
US8600184B2 (en) 2007-01-16 2013-12-03 Thomson Licensing System and method for reducing artifacts in images
JP2014209801A (ja) * 2014-08-11 2014-11-06 キヤノン株式会社 情報処理装置、情報処理方法、制御装置および制御方法

Similar Documents

Publication Publication Date Title
JP5487882B2 (ja) 画像処理装置および画像処理方法
JP2005269577A (ja) 画像処理装置、印刷装置、画像処理方法およびプログラム
JP2013207535A (ja) 閾値マトリクス生成方法、画像データ生成方法、画像データ生成装置、画像記録装置および閾値マトリクス
JP2007068202A (ja) 印刷装置、印刷プログラム、印刷方法、および画像処理装置、画像処理プログラム、画像処理方法、ならびに前記プログラムを記録した記録媒体
JP2011076156A (ja) 画像処理装置および画像処理方法
JP2005067054A (ja) 改善インクの吐出制御
JP7452309B2 (ja) 画像処理装置および画像処理方法
JP6318954B2 (ja) 画像処理装置、および、コンピュータプログラム
JP2005269576A (ja) 画像処理装置、印刷装置、画像処理方法およびプログラム
JP2012050062A (ja) 画像処理装置、画像処理方法及びプログラム
CN1214134A (zh) 节约打印材料的打印设备和方法
JP2019107810A (ja) 画像処理装置、画像処理方法およびインクジェット記録装置
JP4228814B2 (ja) 複数のラスタを並行して処理しながら画像を印刷する印刷方法
JP2010118811A (ja) 印刷装置、ディザマトリクス生成方法
JP7491070B2 (ja) 画像処理装置、印刷装置、印刷システムおよび画像処理方法
JP2020080039A (ja) インクジェット印刷システム
JP4710775B2 (ja) 高画質ハーフトーン処理
JP2005354421A (ja) 色空間変換装置、色空間変換方法および画像形成コントローラ
JP2008167468A (ja) 複数のラスタを並行して処理する画像処理装置
JP2022164045A (ja) 画像処理装置とその制御方法、及びプログラム
JP4325325B2 (ja) 複数画素単位で画像データを変換しながら画像を印刷する印刷装置
JP2005086309A (ja) 複数の処理方法を用いて行われる減色処理
JP2022180776A (ja) 画像データ処理装置
JP2015122691A (ja) 画像処理装置、画像処理方法および印刷システム
JP4325448B2 (ja) ドットの形状を考慮した画像処理