IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

<>
  • -画像処理装置および画像処理方法 図1
  • -画像処理装置および画像処理方法 図2
  • -画像処理装置および画像処理方法 図3
  • -画像処理装置および画像処理方法 図4
  • -画像処理装置および画像処理方法 図5
  • -画像処理装置および画像処理方法 図6
  • -画像処理装置および画像処理方法 図7
  • -画像処理装置および画像処理方法 図8
  • -画像処理装置および画像処理方法 図9
  • -画像処理装置および画像処理方法 図10
  • -画像処理装置および画像処理方法 図11
  • -画像処理装置および画像処理方法 図12
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-06-30
(45)【発行日】2025-07-08
(54)【発明の名称】画像処理装置および画像処理方法
(51)【国際特許分類】
   H04N 1/405 20060101AFI20250701BHJP
   H04N 1/21 20060101ALI20250701BHJP
   G06F 12/00 20060101ALI20250701BHJP
【FI】
H04N1/405 510A
H04N1/21
G06F12/00 580
【請求項の数】 6
(21)【出願番号】P 2021054804
(22)【出願日】2021-03-29
(65)【公開番号】P2022152145
(43)【公開日】2022-10-12
【審査請求日】2024-02-16
(73)【特許権者】
【識別番号】000002369
【氏名又は名称】セイコーエプソン株式会社
(74)【代理人】
【識別番号】100179475
【弁理士】
【氏名又は名称】仲井 智至
(74)【代理人】
【識別番号】100216253
【弁理士】
【氏名又は名称】松岡 宏紀
(74)【代理人】
【識別番号】100225901
【弁理士】
【氏名又は名称】今村 真之
(72)【発明者】
【氏名】荒崎 真一
【審査官】橋爪 正樹
(56)【参考文献】
【文献】特開2003-208607(JP,A)
【文献】特開平10-334231(JP,A)
【文献】特開2010-154069(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04N 1/21
H04N 1/38 - 1/409
G06T 1/00 - 5/50
G06T 9/00 - 9/40
B41J 2/01
B41J 2/165-2/215
G06F 12/00 -12/06
G06F 13/16 -13/18
(57)【特許請求の範囲】
【請求項1】
互いに交差するX軸方向およびY軸方向に2次元的に配列された複数の画素からなる画
像データを入力し、前記画像データの各々の前記画素に対応する値であって、複数の色ご
との濃度を表す階調値を、所定のしきい値と比較し、前記比較結果に基づいて複数の値
に変換する多値化を、前記複数の画素うちの1つの画素である注目画素に対して実施し
、該多値化を実施した際に生じる濃度誤差であって、前記多値化前の前記注目画素に対応
する前記複数の色ごとの階調値と、前記多値化前の前記注目画素に対応する前記複数の色
ごとの階調値が前記多値化によって変換された前記複数の値にそれぞれ予め対応付けられ
た階調値との差分を、予め決められた前記濃度誤差の拡散範囲である前記注目画素の周辺
の画素へ、予め決められた分配比率で分配する誤差拡散法により、入力した前記画像デー
タの多値化を行う場合に、多値化前の画素のうち他の画素から拡散される前記濃度誤差が
確定した複数の画素を前記注目画素とし、複数の前記注目画素について誤差拡散法による
多値化を並行して行う画像処理装置であって、
入力した前記画像データを記憶するメモリーと、
複数の前記注目画素について誤差拡散法による多値化を並行して行う複数の多値化部を
有する誤差拡散処理部と、
前記画像データの画素の配列を変換する変換部と、を備え、
前記変換部による変換前の前記画像データにおいて前記X軸方向に沿う画素の並びであ
る1つの画素行に属する画素であって、複数の前記多値化部の1つである第1多値化部が
処理対象とする前記注目画素を第1注目画素とし、前記変換部による変換前の前記画像デ
ータにおいて前記第1注目画素が属する画素行に対して前記Y軸方向に隣接する画素行に
属する画素であって、複数の前記多値化部の1つである第2多値化部が処理対象とする前
記注目画素を第2注目画素としたとき、
前記変換部は、前記第1注目画素と前記第2注目画素とが前記X軸方向において連続し
て並ぶように前記画像データの画素の配列を変換し、
前記誤差拡散処理部は、前記変換部による変換後の前記画像データにおける前記第1注
目画素に対する前記第1多値化部による多値化と、前記変換部による変換後の前記画像デ
ータにおける前記第2注目画素に対する前記第2多値化部による多値化とを並行して行う
、ことを特徴とする画像処理装置。
【請求項2】
前記変換部は、前記画像データにおいて前記Y軸方向へ順に並ぶ各画素行について、前
記Y軸方向に沿う画素の並びである各画素列に変換するとともに、前記各画素列を前記X
軸方向へ順に並べる行列入れ替え処理と、前記行列入れ替え処理後の画像データを、予め
決められた前記濃度誤差の拡散範囲に応じて算出されるずらし画素数分だけ前記Y軸方向
にずらす変形を行う第1変形処理と、により前記画像データの画素の配列を変換する、こ
とを特徴とする請求項1に記載の画像処理装置。
【請求項3】
前記変換部は、
前記行列入れ替え処理前の画像データにおいて、前記注目画素が属する画素行を1行
目画素行、前記注目画素を基準とした前記拡散範囲内で前記1行目画素行から前記Y軸方
向へ最も遠い画素行をN行目画素行、Nを2以上の整数、nを1~N-1の整数としたと
き、n行目画素行内の前記X軸方向への前記拡散範囲の画素数と、n+1行目画素行内の
前記X軸方向の逆方向への前記拡散範囲の画素数と、の和に1を足した値のうちの最大値
を、前記ずらし画素数とし、
前記第1変形処理では、前記行列入れ替え処理後の画像データの画素列を、当該画素
列に前記X軸方向の逆方向において隣接する画素列に対して、前記Y軸方向へ前記ずらし
画素数分ずらす、ことを特徴とする請求項2に記載の画像処理装置。
【請求項4】
データ出力部を有し、
前記変換部は、前記誤差拡散処理部による多値化後の前記画像データに対して前記第1
変形処理の逆の変形処理である第2変形処理を実行し、前記第2変形処理後の画像データ
に対して前記行列入れ替え処理の逆の行列入れ替え処理を実行することにより、前記画像
データの画素の配列を元に戻し、
前記データ出力部は、前記変換部により画素の配列が元に戻された前記画像データを出
力する、ことを特徴とする請求項2または請求項3に記載の画像処理装置。
【請求項5】
前記変換部は、前記第1変形処理後の画像データにおける画素列間の前記Y軸方向のず
れにより生じた領域を予め決められた階調値の画素で埋めるパディング処理を実行するこ
とにより、前記誤差拡散処理部による多値化前の前記画像データを整形する、ことを特徴
とする請求項2~請求項4のいずれかに記載の画像処理装置。
【請求項6】
互いに交差するX軸方向およびY軸方向に2次元的に配列された複数の画素からなる画
像データを入力し、前記画像データの各々の前記画素に対応する値であって、複数の色ご
との濃度を表す階調値を、所定のしきい値と比較し、前記比較結果に基づいて複数の値
に変換する多値化を、前記複数の画素うちの1つの画素である注目画素に対して実施し
、該多値化を実施した際に生じる濃度誤差であって、前記多値化前の前記注目画素に対応
する前記複数の色ごとの階調値と、前記多値化前の前記注目画素に対応する前記複数の色
ごとの階調値が前記多値化によって変換された前記複数の値にそれぞれ予め対応付けられ
た階調値との差分を、予め決められた前記濃度誤差の拡散範囲である前記注目画素の周辺
の画素へ、予め決められた分配比率で分配する誤差拡散法により、入力した前記画像デー
タの多値化を行う場合に、多値化前の画素のうち他の画素から拡散される前記濃度誤差が
確定した複数の画素を前記注目画素とし、複数の前記注目画素について誤差拡散法による
多値化を並行して行う画像処理方法であって、
入力した前記画像データをメモリーへ記憶する記憶工程と、
前記画像データの画素の配列を変換する変換工程と、
複数の多値化部を用いて複数の前記注目画素について誤差拡散法による多値化を並行し
て行う誤差拡散処理工程と、を備え、
前記変換工程前の前記画像データにおいて前記X軸方向に沿う画素の並びである1つの
画素行に属する画素であって、複数の前記多値化部の1つである第1多値化部が処理対象
とする前記注目画素を第1注目画素とし、前記変換工程前の前記画像データにおいて前記
第1注目画素が属する画素行に対して前記Y軸方向に隣接する画素行に属する画素であっ
て、複数の前記多値化部の1つである第2多値化部が処理対象とする前記注目画素を第2
注目画素としたとき、
前記変換工程では、前記第1注目画素と前記第2注目画素とが前記X軸方向において連
続して並ぶように前記画像データの画素の配列を変換し、
前記誤差拡散処理工程では、前記変換工程後の前記画像データにおける前記第1注目画
素に対する前記第1多値化部による多値化と、前記変換工程後の前記画像データにおける
前記第2注目画素に対する前記第2多値化部による多値化とを並行して行う、ことを特徴
とする画像処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、誤差拡散法により画像データの多値化を行う画像処理装置および画像処理方法に関する。
【背景技術】
【0002】
画像データの各画素が有する多階調表現された画素値は、ハーフトーン処理により、プリンターによるインクのドットの形成(ドットオン)又はドットの不形成(ドットオフ)を表す2値のデータへ変換される。また、プリンターが、例えば大ドット、中ドット、小ドットといったような複数のサイズのドットを形成可能であれば、多階調表現された画素値は、ハーフトーン処理により、大ドットオン、中ドットオン、小ドットオン、ドットオフのいずれかを表す4値のデータへ変換されることもある。このような、2値や4値といった階調数が少ないデータへの変換を、多値化と呼ぶ。
【0003】
ハーフトーン処理の方法として、誤差拡散法が知られている。また、多値化されていない未処理の画素のうち、他の画素から拡散される濃度誤差が確定した複数の画素について、誤差拡散法による多値化を並行して行う画像処理装置が開示されている(特許文献1参照)。
【先行技術文献】
【特許文献】
【0004】
【文献】特開2000‐125122号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
他の画素から拡散される濃度誤差が確定した複数の画素について、誤差拡散法による多値化を並行して行うことにより、画像データ全体に対する多値化処理の高速化が図られている。しかしながら、並列処理による高速化は、メモリーへのアクセス速度が遅い場合には、実効性が低い。つまり、メモリーに記憶された多値化の対象となる複数の画素に対して、複数の処理部が並列的にアクセスしようとしても、アクセス先の各画素が格納されているアドレスがメモリー内で不規則に点在している状況では、メモリーアクセスの効率が低下し、各処理部は、それぞれの多値化のためのデータの読み書きを迅速に行うことができない。そのため、メモリーへのアクセス効率を向上させることで、並列処理による高速化を真に実現することが求められている。
【課題を解決するための手段】
【0006】
互いに交差する第1方向および第2方向に2次元的に配列された複数の画素からなる画像データを入力し、画素を多値化した際に生じる濃度誤差を多値化前の周辺の画素へ拡散する誤差拡散法により、入力した前記画像データの多値化を行う場合に、多値化前の画素のうち他の画素から拡散される前記濃度誤差が確定した複数の画素を注目画素とし、複数の前記注目画素について誤差拡散法による多値化を並行して行う画像処理装置は、入力した前記画像データを記憶するメモリーと、複数の前記注目画素について誤差拡散法による多値化を並行して行う複数の多値化部を有する誤差拡散処理部と、前記画像データの画素の配列を変換する変換部と、を備え、前記変換部による変換前の前記画像データにおいて前記第1方向に沿う画素の並びである1つの画素行に属する画素であって、複数の前記多値化部の1つである第1多値化部が処理対象とする前記注目画素を第1注目画素とし、前記変換部による変換前の前記画像データにおいて前記第1注目画素が属する画素行に対して前記第2方向に隣接する画素行に属する画素であって、複数の前記多値化部の1つである第2多値化部が処理対象とする前記注目画素を第2注目画素としたとき、前記変換部は、前記第1注目画素と前記第2注目画素とが前記メモリーにおいて連続して並ぶアドレスに格納されるように前記画像データの画素の配列を変換し、前記誤差拡散処理部は、前記変換部による変換後の前記画像データにおける前記第1注目画素に対する前記第1多値化部による多値化と、前記変換部による変換後の前記画像データにおける前記第2注目画素に対する前記第2多値化部による多値化とを並行して行う。
【0007】
互いに交差する第1方向および第2方向に2次元的に配列された複数の画素からなる画像データを入力し、画素を多値化した際に生じる濃度誤差を多値化前の周辺の画素へ拡散する誤差拡散法により、入力した前記画像データの多値化を行う場合に、多値化前の画素のうち他の画素から拡散される前記濃度誤差が確定した複数の画素を注目画素とし、複数の前記注目画素について誤差拡散法による多値化を並行して行う画像処理方法は、入力した前記画像データをメモリーへ記憶する記憶工程と、前記画像データの画素の配列を変換する変換工程と、複数の多値化部を用いて複数の前記注目画素について誤差拡散法による多値化を並行して行う誤差拡散処理工程と、を備え、前記変換工程前の前記画像データにおいて前記第1方向に沿う画素の並びである1つの画素行に属する画素であって、複数の前記多値化部の1つである第1多値化部が処理対象とする前記注目画素を第1注目画素とし、前記変換工程前の前記画像データにおいて前記第1注目画素が属する画素行に対して前記第2方向に隣接する画素行に属する画素であって、複数の前記多値化部の1つである第2多値化部が処理対象とする前記注目画素を第2注目画素としたとき、前記変換工程では、前記第1注目画素と前記第2注目画素とが前記メモリーにおいて連続して並ぶアドレスに格納されるように前記画像データの画素の配列を変換し、前記誤差拡散処理工程では、前記変換工程後の前記画像データにおける前記第1注目画素に対する前記第1多値化部による多値化と、前記変換工程後の前記画像データにおける前記第2注目画素に対する前記第2多値化部による多値化とを並行して行う。
【図面の簡単な説明】
【0008】
図1】画像処理装置を含むシステム構成を簡易的に示すブロック図。
図2図2A図2B図2Cはそれぞれに、濃度誤差が確定した状態の複数の注目画素と濃度誤差の拡散範囲とを例示する図。
図3】マルチコアプロセッサーとメモリーコントローラーとRAMとの関係を簡易的に示す図。
図4】プロセッサーがプログラムと協働して実現する各機能を示す図。
図5図2Aの画像データについて画素配列を変換する流れを示す図。
図6】画素配列の変換の流れやパディング処理を、画像データ全体を示して表現する図。
図7】画素配列を変換する前の画像データを示す図。
図8】画素配列を変換した後の画像データを示す図。
図9図7の画像データに対する複数コアによる多値化の並列処理を説明する図。
図10図8の画像データに対する複数コアによる多値化の並列処理を説明する図。
図11】画像データの分割を伴う処理の流れの一部を示す図。
図12】画像データの分割を伴う処理の流れの図11の続きを示す図。
【発明を実施するための形態】
【0009】
以下、各図を参照しながら本発明の実施形態を説明する。なお各図は、本実施形態を説明するための例示に過ぎない。各図は例示であるため、比率や形状が正確でなかったり、互いに整合していなかったり、一部が省略されていたりする場合がある。
【0010】
1.システム構成の概略:
図1は、本実施形態にかかる画像処理装置10を含むシステム30の構成を簡易的に示している。画像処理装置10は、CPU11、ROM12、RAM13といったコンピューターにとって基本的な構成に加え、通信IF14、マルチコアプロセッサー15、その他のメモリーや記憶装置等を含んでいる。IFは、インターフェイスの略である。画像処理装置10では、プロセッサーとしてのCPU11が、ROM12やその他のメモリー等に保存された一つ以上のプログラム16に従った演算処理を、RAM13等をワークエリアとして用いて実行することにより、画像処理方法を実行する。
【0011】
通信IF14は、画像処理装置10が公知の通信規格を含む所定の通信プロトコルに準拠して有線又は無線で外部と接続するための一つまたは複数のIFの総称である。図1の例では、画像処理装置10は、通信IF14を通じてプリンター20と通信可能に接続している。画像処理装置10が接続する機器は、プリンター20に限られず、例えば、原稿を光学的に読取可能なスキャナーや、外部のサーバーと接続してもよい。言うまでもなく画像処理装置10は、ユーザーに対して視覚情報を表示するための表示部や、ユーザーからの操作を受け付けるための操作パネル等を有していてもよい。
【0012】
マルチコアプロセッサー15は、その名の通り複数のコアを有するプロセッサーであり、複数のコアを用いた並列処理に適している。マルチコアプロセッサー15は、例えば、GPU(Graphics Processing Unit)である。あるいは、CPU11自体が、複数のコアを有するマルチコアプロセッサーであってもよい。以下では、CPU11やマルチコアプロセッサー15について、これらを区別せずに単にプロセッサーと呼ぶことがある。
【0013】
プリンター20は、いわゆるインクジェットプリンターであり、インクやその他の液体のドットを、複数のノズルの夫々から吐出したり吐出しなかったりすることにより印刷媒体へ印刷を行う。プリンター20は、例えば、シアン(C)、マゼンタ(M)、イエロー(Y)、ブラック(K)といった複数の色のインクを吐出可能である。画像処理装置10は、プリンター20が印刷に用いる印刷データを生成して、プリンター20へ転送する。画像処理装置10は、印刷データを生成する過程で、誤差拡散法による画像データの多値化を行う。
【0014】
画像処理装置10とプリンター20とは、図1に示すように互いに独立した装置であってもよいし、あるいは一体化していてもよい。つまり、画像処理装置10とプリンター20とを含むシステム30が、実態として1台の印刷装置であってもよい。
あるいは、画像処理装置10は、互いに通信可能に接続された複数の装置が夫々の役割を果たすことにより実現されるとしてもよい。
【0015】
2.誤差拡散法の並列処理についての基本的説明:
次に、誤差拡散法による多値化を並列処理する場合の基本的な考えを説明する。
図2Aは、誤差拡散法による多値化の対象となる画像データ40の一部を示している。画像データ40は、互いに交差するX軸方向およびY軸方向に2次元的に配列された複数の画素からなる。X軸方向は第1方向に該当し、Y軸方向は第2方向に該当する。以下では、X軸方向を、X軸+方向とも呼び、X軸方向の逆方向を、X軸-方向とも呼ぶ。同様に、Y軸方向を、Y軸+方向とも呼び、Y軸方向の逆方向を、Y軸-方向とも呼ぶ。画像データ40を構成する各矩形が各画素を示している。
【0016】
画像データ40の各画素は、複数の色毎の階調値、ここではプリンター20が使用するインク色であるCMYK毎の濃度を表す階調値をデータとして有する。階調値は、例えば、0~255の256階調範囲の値である。CMYKの各色に対する多値化のやり方は同じであるため、以下では1つの色に対する多値化の方法を説明する。また、多値化は、上述したように4値化等であってもよいが、以下では2値化を例に採り説明を続ける。プロセッサーは、多値化の対象とする注目画素の階調値を所定のしきい値と比較し、階調値がしきい値以上であれば、ドットオンを意味する「1」を、階調値がしきい値未満であれば、ドットオフを意味する「0」を、注目画素の多値化後のデータとする。
【0017】
知られているように、誤差拡散法では、注目画素を多値化した際に生じる濃度誤差を、多値化前の周辺の画素へ拡散する。多値化の結果としてのドットオンは、上述の階調値では、最高濃度の255に相当する。また、多値化の結果としてのドットオフは、上述の階調値では、最低濃度の0に相当する。従って、ある画素に関する多値化前の階調値と、多値化の結果に相当する階調値との差分が、当該画素を多値化した際の濃度誤差である。
【0018】
図2Aでは、多値化が済んだ画素を破線で示し、多値化前の画素を実線で示している。また、多値化前の画素のうち、グレー色で塗った画素P1,P2,P3が、現在の多値化の対象となる注目画素である。ここで、画像データにおいて、X軸方向に沿う画素の並びを「画素行」と呼び、Y軸方向に沿う画素の並びを「画素列」と呼ぶ。プロセッサーは、画素行内においてX軸+方向へ1つずつ注目画素を切り替えながら多値化を順次進めることができる。
【0019】
注目画素P1,P2,P3の夫々から周辺の画素へ伸びる矢印は、濃度誤差を拡散させる拡散範囲を示している。図2Aの例によれば、1つの画素で生じた濃度誤差は、当該画素を基準にして、X軸+方向に隣接する画素と、Y軸+方向に隣接する画素と、X軸+方向とY軸+方向それぞれに1画素進んだ位置の画素と、X軸+方向に2画素、Y軸+方向に1画素進んだ位置の画素と、に分配される。これら拡散先の各画素への濃度誤差の分配比率は、均等でもよいし、重み付けした比率でもよい。
【0020】
誤差拡散法による多値化は、多値化を終えた他の画素から拡散される濃度誤差が確定した画素に対して行う。濃度誤差が確定したとは、これ以上他の画素から濃度誤差の拡散を受けないという意味である。図2Aに示す時点において、注目画素P1,P2,P3はいずれも、拡散される濃度誤差が確定した状態である。また、注目画素P1,P2,P3のそれぞれを基準にした拡散範囲は、互いに重なっていない。つまり、プロセッサーは、このような関係にある複数の注目画素P1,P2,P3それぞれの多値化を並行して行うことができる。これまでの説明から解るように、多値化のためにしきい値と比較する注目画素の階調値は、この注目画素に関して確定した濃度誤差により、この注目画素の元の階調値を補正した後の階調値である。
【0021】
図2Aによれば、注目画素P1が属する画素行に対してY軸+方向に隣接する画素行に、注目画素P2が属している。同様に、注目画素P2が属する画素行に対してY軸+方向に隣接する画素行に、注目画素P3が属している。このように、多値化を終えた他の画素から拡散される濃度誤差が同時期に確定している画素は、あるタイミングにおいて各画素行に存在すため、プロセッサーは、各画素行に属する注目画素に対して多値化を並行して行うことができる。
【0022】
図3は、画像処理装置10におけるマルチコアプロセッサー15と、メモリーコントローラー17と、RAM13との関係を簡易的に示している。図1では、メモリーコントローラー17の記載は省略している。RAM13には、多値化の対象となる画像データ40が記憶されている。RAM13は、例えば、DRAM(Dynamic Random Access Memory)である。マルチコアプロセッサー15は、複数のコアC1,C2,C3…を有する。複数のコアC1,C2,C3…は、複数の注目画素に対して誤差拡散法による多値化を並行して行う複数の「多値化部」に該当する。また、マルチコアプロセッサー15は、このような多値化部を複数有する「誤差拡散処理部」に該当する。
【0023】
ここで、マルチコアプロセッサー15が図2Aに示す注目画素P1,P2,P3について並列的に多値化を実行する場合を想定する。この場合、例えば、コアC1はメモリーコントローラー17に注目画素P1の階調値を要求し、メモリーコントローラー17は要求に応じてRAM13へアクセスして注目画素P1の階調値を読み出し、読み出した注目画素P1の階調値をコアC1へ受け渡す。コアC1は、メモリーコントローラー17を介して取得した注目画素P1の階調値としきい値との比較により2値化したデータを、再びメモリーコントローラー17を介して注目画素P1のデータとしてRAM13へ書き込む。
【0024】
同様に、コアC2はメモリーコントローラー17に注目画素P2の階調値を要求し、メモリーコントローラー17を介して取得した注目画素P2の階調値としきい値とを比較して2値化を行い、メモリーコントローラー17を介して、注目画素P2の2値化したデータをRAM13へ書き込む。同様に、コアC3はメモリーコントローラー17に注目画素P3の階調値を要求し、メモリーコントローラー17を介して取得した注目画素P3の階調値としきい値とを比較して2値化を行い、メモリーコントローラー17を介して、注目画素P3の2値化したデータをRAM13へ書き込む。
【0025】
RAM13において、画像データの各画素のデータは、画素の座標順に従って、メモリーの連続するアドレスに並んで格納されている。画素の座標順とは、X軸方向およびY軸方向のXY座標である(X,Y)が最小の(1,1)である画素を最初とし、(X,Y)が共に最大である画素を最後とする順序である。図2Aにおいて、画像データ40内の左上の画素が(X,Y)=(1,1)の画素である。画素の座標順によれば、メモリー内では、同じ画素行内の各画素はX座標の順に並んで格納され、画像行内のX座標が最大である末尾画素の次にはY座標が1つ大きい画像行内のX座標が最小である先頭画素が続く。以下では、画素を、その座標と結び付けて、画素(X,Y)と記載することがある。
【0026】
従って、画像データ40を記憶したRAM13においては、注目画素P1,P2,P3は、互いに離間して点在する各アドレスに格納されている。むろん、マルチコアプロセッサー15が並列的に多値化を実行する注目画素の数は、3つより多くてもよい。このような点在する複数のアドレスに、複数のコアがメモリーコントローラー17を介して同時にアクセスしようとすると、メモリーコントローラー17によるRAM13へのアクセス効率が低下し、各コアは、必要なデータの読み書きに待機を強いられる。つまり、複数のコアを用いて複数の注目画素に対する多値化を並列的に実行しようとしても、メモリーへのアクセス速度が低下することにより、多値化処理の高速化が十分には達成されない。
本実施形態は、このような課題に対する改善策を以下に提示する。
【0027】
3.データ入力から画素配列の変換まで:
図4は、本実施形態において画像処理装置10のプロセッサーがプログラム16と協働して実現する各機能を、データ入力部50、変換部51、誤差拡散処理部52、データ出力部53、ずらし画素数算出部54、というように分けてブロック図により示している。また、図4は各機能による処理の流れを併せて示している。
【0028】
データ入力部50は、処理対象とする画像データ40を入力し、RAM13へ記憶させる。つまり、データ入力部50は、入力した画像データをメモリーへ記憶する記憶工程を行う。データ入力部50による画像データ40の入力元は特に問わない。データ入力部50は、例えば、外部のスキャナーによる原稿の読取により生成された画像データ40を、通信IF14を介して入力する。あるいは、データ入力部50は、外部のサーバー等に保存されている画像データ40を、通信IF14を介して入力する。また、データ入力部50は、画像処理装置10の内外の記憶媒体から画像データ40を取り込んでもよい。
【0029】
なお、データ入力部50が入力した時点での画像データ40のフォーマットは、上述したようなCMYK毎の階調値を各画素が有するCMYK画像データであるとは限らない。そのため、データ入力部50は、入力した画像データに対して色変換処理等の必要な処理を適宜施して、CMYK画像データとしての画像データ40をRAM13へ記憶させる。
【0030】
次に、変換部51は、データ入力部50が入力してRAM13へ記憶させた画像データ40の画素の配列を変換する。変換部51による処理は、変換工程に該当する。本実施形態では、変換部51による変換前の画像データ40において1つの画素行に属する画素であって、複数の多値化部の1つである第1多値化部が処理対象とする注目画素を「第1注目画素」と呼ぶ。また、変換部51による変換前の画像データ40において第1注目画素が属する画素行に対してY軸+方向に隣接する画素行に属する画素であって、複数の多値化部の1つである第2多値化部が処理対象とする注目画素を「第2注目画素」と呼ぶ。つまり、第1注目画素と、第2注目画素とは、誤差拡散法による多値化が並列的に行われる関係にある。図2Aを参照すると、例えば、注目画素P1を第1注目画素と捉えたとき、注目画素P2が第2注目画素に該当する。また、例えば、注目画素P2を第1注目画素と捉えたとき、注目画素P3が第2注目画素に該当する。
【0031】
本実施形態では、変換部51は、第1注目画素と第2注目画素とが、RAM13において連続して並ぶアドレスに格納されるように、画像データ40の画素の配列を変換する。
図4に示すように、変換部51は、行列入れ替え部51aと、画像変形部51bとを含んでいる。このような変換部51による画素配列の変換処理を、図5,6を参照して詳しく説明する。
【0032】
図5は、図2Aの画像データ40について画素配列を変換する様子を示している。図2Aの画像データ40と、図5の画像データ40とに違いは無い。ただし、図5では、X軸方向、Y軸方向のそれぞれにおいて画素の位置を示す座標を併記している。また、図5では、誤差拡散法による多値化を実行する前の状況であるため、全ての画素を実線で記載している。また図5では、図2Aと同様に、ある画素を基準とした拡散範囲を画像データ40内に矢印で記載している。
【0033】
行列入れ替え部51aは、画像データ40においてY軸方向へ順に並ぶ各画素行について、回転させて各画素列に変換し、各画素列をX軸方向へ順に並べる行列入れ替え処理を行う。画像データ41は、画像データ40に行列入れ替え処理を施した後の画像データである。つまり、行列入れ替え部51aは、画像データ40のY=1の画素行を回転させて、画像データ41のX=1の画素列とする。このとき、Y=1の画素行の先頭画素である画素(1,1)が、回転後も座標を変えないように、Y=1の画素行を回転させる。また、行列入れ替え部51aは、画像データ40のY=2の画素行を回転させて画像データ41のX=2の画素列とする。このとき、Y=2の画素行の先頭画素である画素(1,2)が、回転後は(X,Y)=(2,1)へ位置するように、Y=2の画素行を回転させる。行列入れ替え部51aは、同様に、画像データ40のY=3の画素行を回転させて画像データ41のX=3の画素列とし、画像データ40のY=4の画素行を回転させて画像データ41のX=4の画素列とする。
【0034】
次に、画像変形部51bは、行列入れ替え処理後の画像データ41を予め決められた濃度誤差の拡散範囲に応じてY軸方向に変形する変形処理を行う。拡散範囲は、図2A図5に示すように、画像データ40の状態で既に定義されている。画像変形部51bが変形処理を行うために、ずらし画素数算出部54は、拡散範囲に応じてずらし画素数を算出する。ずらし画素数とは、第2注目画素を第1注目画素と同じ画素行へ属させるために必要な、Y軸方向におけるずらし量であり、図5では符号Hで示している。ずらし画素数算出部54を、変換部51の一部と解してもよい。
【0035】
図2A図5の画像データ40によれば、第1注目画素と第2注目画素、例えば注目画素P1と注目画素P2とは、X軸方向において2画素ずれている。これは、画像データ41において、第1注目画素と第2注目画素とがY軸方向において2画素ずれていることを意味する。従って、ずらし画素数算出部54は、ずらし画素数H=2と算出する。そして、画像変形部51bは、画像データ41の画素列を、この画素列にX軸-方向に隣接する画素列に対して、Y軸+方向へずらし画素数H分ずらす。
なお、ずらし画素数算出部54による、ずらし画素数Hの算出方法については、図2B図2Cの説明も含めて後に詳述する。
【0036】
図5によれば、画像変形部51bは、画像データ41のX=2の画素列を、X=1の画素列に対してY軸+方向へ2画素分ずらす。同様に、画像データ41のX=3の画素列を、X=2の画素列に対してY軸+方向へ2画素分ずらし、画像データ41のX=4の画素列を、X=3の画素列に対してY軸+方向へ2画素分ずらす。この結果、画像データ41に変形処理を施した画像データ42が得られる。つまり、画像データ40の画素配列を変換した結果が、画像データ42である。画像データ42によれば、注目画素P1,P2,P3は同じ画素行において連続している。これは、RAM13において、注目画素P1,P2,P3の各データが連続して並ぶアドレスに格納されている状態を意味する。
【0037】
画像データ40の状態で定義されている拡散範囲による、拡散元の画素と拡散先の画素との対応関係は、変換部51による画素配列の変換を経ても維持される。図5では、拡散元の画素と拡散先の画素との対応関係が、画素同士の相対位置が変わっても維持されることを、画像データ41内や画像データ42内において矢印で示している。
【0038】
例えば、図5の画像データ40における、注目画素P1である画素(5,1)と、この画素(5,1)の濃度誤差の拡散先である画素(6,1)、画素(5,2)、画素(6,2)、画素(7,2)との関係に注目する。画像データ40の画素(5,1)は、画像データ41や画像データ42の状態では、(X,Y)=(1,5)に位置する。また、画像データ40の画素(6,1)は、画像データ41や画像データ42の状態では(X,Y)=(1,6)に位置する。画像データ40の画素(5,2)は、画像データ41の状態では(X,Y)=(2,5)に位置し、画像データ42の状態では(X,Y)=(2,7)に位置する。画像データ40の画素(6,2)は、画像データ41の状態では(X,Y)=(2,6)に位置し、画像データ42の状態では(X,Y)=(2,8)に位置する。画像データ40の画素(7,2)は、画像データ41の状態では(X,Y)=(2,7)に位置し、画像データ42の状態では(X,Y)=(2,9)に位置する。従って、誤差拡散処理部52が、画像データ42の(X,Y)=(1,5)の画素を多値化した際、この画素の濃度誤差は、画像データ42の(X,Y)=(1,6)、(2,7)、(2,8)、(2,9)の各画素へ拡散させる。
【0039】
図2A図5に示す画像データは、画像データ40,41,42の一部分である。
図6は、変換部51による画素配列の変換を、画像データ全体を示して表現している。上述した通り、画像データ40は、各画素行が行列入れ替え部51aによる行列入れ替え処理を施されて画像データ41となり、画像データ41は、X=1の画素列を除く各画素列が画像変形部51bによる変形処理を施されて画像データ42となる。図6においても、注目画素P1,P2のような、第1注目画素と第2注目画素との関係に該当する1組の画素をグレー色で塗って示している。
【0040】
さらに、画像変形部51bは、変形処理後の画像データ42における画素列間のY軸方向のずれにより生じた領域を所定値の画素で埋めるパディング処理を実行する。画像データ42は、画素列毎にY軸方向へずらされている分、全体として平行四辺形のような形状である。そのため、画像データ42を、通常は矩形であることを前提としてメモリーに記憶されるビットマップ形式の画像データと比べると、図6において破線で囲った三角形状の差分領域42a,42bが生じる。
【0041】
そこで、画像変形部51bは、これら領域42a,42bを所定値、ここでは階調値=0の画素で埋めるパディング処理をする。パディング処理により、画像データ42は整形されて全体として矩形の画像データ43となる。以下では便宜上、パディング処理で追加した画素を「パディング画素」とも呼び、画像データ40や画像データ41の時点で既に在る画素を「実画素」とも呼ぶ。
【0042】
4.ずらし画素数Hの算出方法:
図2B図2Cは、図2Aと同様に画像データ40の一部を示している。図2B,2Cの見方は、図2Aの見方と同じである。図2A,2B,2Cは、拡散範囲の定義が夫々に異なる。つまり、拡散範囲の定義は、図2A,2B,2Cの例のいずれを採用してもよいし、図2A,2B,2C以外の例を採用してもよい。
【0043】
図2Bの例によれば、1つの画素で生じた濃度誤差は、当該画素を基準にして、X軸+方向に隣接する画素と、X軸+方向に2画素進んだ位置の画素と、X軸-方向、Y軸+方向それぞれに1画素進んだ位置の画素と、Y軸+方向に隣接する画素と、X軸+方向、Y軸+方向それぞれに1画素進んだ位置の画素と、X軸+方向に2画素、Y軸+方向に1画素進んだ位置の画素と、に分配される。
【0044】
図2Cの例によれば、1つの画素で生じた濃度誤差は、当該画素を基準にして、X軸+方向に隣接する画素と、X軸-方向、Y軸+方向それぞれに1画素進んだ位置の画素と、Y軸+方向に隣接する画素と、X軸+方向、Y軸+方向それぞれに1画素進んだ位置の画素と、X軸+方向に2画素、Y軸+方向に1画素進んだ位置の画素と、X軸-方向に1画素、Y軸+方向に2画素進んだ位置の画素と、に分配される。
【0045】
図2Bの例では、プロセッサーは、拡散される濃度誤差が確定した状態の注目画素P4,P5,P6それぞれの多値化を並行して行うことができる。図2Bの例では、注目画素P4,P5の関係性は、第1注目画素と第2注目画素との関係に該当し、同様に、注目画素P5,P6の関係性は、第1注目画素と第2注目画素との関係に該当する。図2Cの例では、プロセッサーは、拡散される濃度誤差が確定した状態の注目画素P7,P8,P9それぞれの多値化を並行して行うことができる。図2Cの例では、注目画素P7,P8の関係性は、第1注目画素と第2注目画素との関係に該当し、同様に、注目画素P8,P9の関係性は、第1注目画素と第2注目画素との関係に該当する。むろん、本実施形態では、プロセッサーは、図2B図2Cのような画素配列のまま多値化を実行するのではなく、変換部51により画像データ40の画素配列を変換した後の画像データに対して多値化を実行する。
【0046】
このように様々な拡散範囲の定義の例を考慮して、ずらし画素数算出部54は、行列入れ替え処理前の画像データ40において、1つの注目画素が属する画素行を1行目画素行、この注目画素を基準とした拡散範囲内で1行目画素行からY軸+方向へ最も遠い画素行をN行目画素行、Nを2以上の整数、nを1~N-1の整数、とする。そして、ずらし画素数算出部54は、注目画素を基準とした、n行目画素行内のX軸+方向への拡散範囲の画素数と、n+1行目画素行内のX軸-方向への拡散範囲の画素数と、の和に1を足した値のうちの最大値を、ずらし画素数Hとする。
【0047】
図2Aに例示した拡散範囲によれば、N=2、n=1である。そのため、1行目画素行内のX軸+方向への拡散範囲の画素数である1と、2行目画素行内のX軸-方向への拡散範囲の画素数である0と、の和に1を足した値は、1+0+1=2であり、ずらし画素数H=2となる。
【0048】
図2Bに例示した拡散範囲によれば、N=2、n=1である。そのため、1行目画素行内のX軸+方向への拡散範囲の画素数である2と、2行目画素行内のX軸-方向への拡散範囲の画素数である1と、の和に1を足した値は、2+1+1=4であり、ずらし画素数H=4となる。
【0049】
図2Cに例示した拡散範囲によれば、N=3、n=1または2である。そのため、n=1としたとき、1行目画素行内のX軸+方向への拡散範囲の画素数である1と、2行目画素行内のX軸-方向への拡散範囲の画素数である1と、の和に1を足した値が、1+1+1=3となる。また、n=2としたとき、2行目画素行内のX軸+方向への拡散範囲の画素数である2と、3行目画素行内のX軸-方向への拡散範囲の画素数である1と、の和に1を足した値が、2+1+1=4となる。従って、図2Cに例示した拡散範囲によれば、ずらし画素数算出部54は、ずらし画素数H=4とする。
【0050】
ずらし画素数算出部54は、このような算出方法でずらし画素数Hを求めることにより、それぞれを基準とした拡散範囲が重ならない位置関係の第1注目画素と第2注目画素とを、行列入れ替え処理後において、同じ画素行へ属させるために必要なずらし画素数Hを求めることができる。拡散範囲の定義によっては、Nが4以上である場合もあるが、そのような場合も同様に、nを1~N-1の範囲で変化させたときに上述の計算方法でそれぞれ算出される値のうち最大値を、ずらし画素数Hとすればよい。
【0051】
5.誤差拡散処理からデータ出力まで:
図7は、画像データ40を例示している。図7の例では、紙面の都合上、画像データ40は、9×9の81画素で構成されている。図7においても、図2A図5,6で説明した拡散範囲が採用されている。また、図7や後述の図8~10では、図2A図5,6と同様に、拡散される濃度誤差が確定しあるタイミングで同時に多値化の対象となる複数の注目画素をグレー色で塗って示している。図7では、各画素内にXY座標を記載している。これによれば、例えば、画素(1,3)の濃度誤差は、画素(2,3)、画素(1,4)、画素(2,4)および画素(3,4)へ拡散されることが容易に理解できる。
【0052】
図8は、図7の画像データ40について変換部51が画素配列を変換して生成した画像データ43を例示している。図8においては、パディング画素については、全て階調値として0を記載している。また図8では、個々のパディング画素を識別するために、一部のパディング画素について(1)、(2)、(3)…というように括弧書きで番号を付与している。以下では、パディング画素を、パディング画素0(1)というように、番号と共に記載することがある。
【0053】
また図8では、説明の便宜上、各実画素内のXY座標は、画像データ43におけるXY座標ではなく、変換部51による変換前の画像データ40であったときのXY座標を記載している。図8によれば、例えば、画素(7,2)は、画像データ40において(X,Y)=(7,2)に位置していた画素であり、画像データ43においては(X,Y)=(2,9)の位置に在る。
【0054】
図9は、図7の画像データ40に対する複数のコアを用いた多値化の並列処理を説明する図である。本実施形態では、誤差拡散処理部52は、画像データ40ではなく、画像データ43に対して多値化を行う。そのため、図9は、本実施形態との比較例として記載している。図9では、複数のコアC1,C2,C3…がそれぞれ処理対象とする画素を、コア別かつ処理順に示している。また、図9では、RAM13において連続するアドレスに、画像データ40の各画素のデータが座標順で格納されている様子を併せて示している。
【0055】
図9によれば、先ず、コアC1は、RAM13へアクセスして座標順の最初の画素である画素(1,1)のデータを2値化する。次に、コアC1は、画素(1,1)の2値化により生じた濃度誤差を拡散するために、RAM13へアクセスし、拡散先である画素(2,1)、画素(1,2)、画素(2,2)、画素(3,2)へ当該濃度誤差を順に分配する。図9では、コアC1によるRAM13の各アドレスへのアクセスの一部を、実線の矢印で示している。
【0056】
コアC1が、画素(1,1)が属する画素行の画素に対する2値化とそれに伴う誤差拡散を続けていき、画素(3,1)の2値化を実行するとき、コアC2が、画素(1,2)の2値化を開始する。また、コアC1,C2がそれぞれ2値化と誤差拡散を続けていき、コアC1が画素(5,1)を、コアC2が画素(3,2)をそれぞれ対象として2値化を実行するとき、コアC3が画素(1,3)の2値化を開始する。図9では、コアC2によるRAM13の各アドレスへのアクセスの一部を破線の矢印で示し、コアC3によるRAM13の各アドレスへのアクセスの一部を2点鎖線の矢印で示している。
【0057】
ここで、コアC1が画素(5,1)のデータへアクセスするタイミングに注目すると、同じタイミングでコアC2は画素(3,2)のデータへアクセスしようとし、コアC3は画素(1,3)のデータへアクセスしようとする。しかしながら、画素(5,1)、画素(3,2)、画素(1,3)の各データは、RAM13において互いに離間したアドレスに点在している。そのため、上述したようにメモリーコントローラー17を介したRAM13へのアクセス効率が低下し、コアC1,C2,C3はそれぞれ必要なデータを読み書きするために待機時間が長くなる。その後もコアC1,C2,C3がRAM13に点在する各アドレスへ並行して誤差拡散しようとする際にも同様にアクセス速度低下の問題が起きる。このような、アクセス速度低下の問題は、多値化を並列的に処理しようとするコア数が多いほど顕著化する。
【0058】
図10は、図8の画像データ43に対する複数のコアを用いた多値化の並列処理を説明する図である。誤差拡散処理部52は、複数の多値化部を用いて複数の注目画素について誤差拡散法による多値化を並行して行う誤差拡散処理工程を実現する。ここでは、誤差拡散処理部52としてのマルチコアプロセッサー15は、画像データ43の画素列数以上のコアを有するものとし、これら複数のコアのうち画像データ43の画素列数と同じ数のコアC1,C2,C3,C4,C5,C6,C7,C8,C9が、並列的に処理を進める。図10では、コアC1~C9がそれぞれ処理対象とする画素を、コア別かつ処理順に示している。
【0059】
また図10では、RAM13において連続するアドレスに、画像データ43の各画素のデータが画素の座標順で格納されている様子を併せて示している。図10のRAM13では、連続するアドレスに画像データ43における座標順で並ぶ各画素のうち実画素については、画像データ43におけるXY座標ではなく、図8と同様に画像データ40であったときのXY座標を記載している。
【0060】
図10によれば、先ず、コアC1~C9は、RAM13へアクセスして画像データ43の最初の画素行を構成する各画素のデータの2値化を並行して行う。つまり、コアC1は、座標順の最初の画素である画素(1,1)を2値化する。これと並行して、コアC2はパディング画素0(1)を2値化し、コアC3はパディング画素0(2)を2値化し、コアC4はパディング画素0(3)を2値化し、コアC5はパディング画素0(4)を2値化し、コアC6はパディング画素0(5)を2値化し、コアC7はパディング画素0(6)を2値化し、コアC8はパディング画素0(7)を2値化し、コアC9はパディング画素0(8)を2値化する。
【0061】
メモリーコントローラー17は、コアC1~C9による要求に応じて、RAM13に記憶されている画素(1,1)およびパディング画素0(1)~0(8)のデータへアクセスする。ここで、画素(1,1)およびパディング画素0(1)~0(8)は、RAM13において連続するアドレスに並んで記憶されているため、メモリーコントローラー17は、画素(1,1)からパディング画素0(8)までのデータを、連続するアドレスに並んで記憶されていない場合に比べて短時間で読み出して、各コアC1~C9へ、それぞれが必要とする画素のデータを受け渡すことができる。また、書き込み時においても、メモリーコントローラー17は、各コアC1~C9から受け取った画素毎のデータを、画素(1,1)からパディング画素0(8)までの連続するアドレスに対して短時間で連続的に書き込むことがきる。図10においても、各コアによるRAM13の各アドレスへのアクセスの一部を実線等の矢印で示しているが、見易さを考慮して、そのような矢印の殆どを省略している。
【0062】
次に、コアC1~C9は、画素(1,1)~パディング画素0(8)の2値化により生じた濃度誤差を拡散するために、RAM13へアクセスし、拡散先の画素へ濃度誤差を分配する。つまり、コアC1は、画素(1,1)の2値化により生じた濃度誤差を分配するために、画素(1,1)からの拡散先の1つである画素(2,1)へアクセスする。これと並行して、コアC2はパディング画素0(9)へアクセスし、コアC3はパディング画素0(10)へアクセスし、コアC4はパディング画素0(11)へアクセスし、コアC5はパディング画素0(12)へアクセスし、コアC6はパディング画素0(13)へアクセスし、コアC7はパディング画素0(14)へアクセスし、コアC8はパディング画素0(15)へアクセスし、コアC9はパディング画素0(16)へアクセスする。この場合も、画素(2,1)およびパディング画素0(9)~0(16)は、RAM13において連続するアドレスに並んで記憶されているため、メモリーコントローラー17は、コアC1~C9の要求に応じて、これら画素(2,1)~パディング画素0(16)に対して効率的にアクセスできる。
【0063】
このようにコアC1~C9は、画像データ43を構成する画素行を1まとまりとして、各画素の2値化やそれに伴う誤差拡散を互いに並行して行うことにより、図10に示すように処理を進めていく。なお、パディング画素は、画像データ40,41,42には存在しないため、画像データ40の時点で既に決まっている拡散範囲に従えば、実画素からパディング画素へは濃度誤差は拡散されない。また、パディング画素は、階調値が0であるため、多値化の結果はドットオフとなり、階調値と多値化の結果とに濃度誤差が無い。つまり、パディング画素へ濃度誤差を拡散させるのは他のパディング画素であるが、そもそもパディング画素に濃度誤差は発生しないため、誤差拡散法による多値化の結果、パディング画素には全てドットオフが決定される。また、パディング画素から実画素へ拡散される濃度誤差も、実態として0である。このため、パディング画素への多値化と誤差拡散は省略するようにプログラム16を構成してもよい。
【0064】
図10に示すように処理を進めるコアC1~C9は、あるタイミングで、画素(5,1)を含む画像データ43の画素行に対して2値化を行う。つまり、コアC1~C9は、RAM13において連続するアドレスに並んで記憶されている画素(5,1)、画素(3,2)、画素(1,3)およびパディング画素0(31)~0(36)の夫々へ並列的にアクセスして2値化を行う。むろん、画素(5,1)を第1注目画素と捉えたとき、画素(3,2)を第2注目画素と捉えることができ、画素(3,2)を第1注目画素と捉えたとき、画素(1,3)を第2注目画素と捉えることができる。
【0065】
この後、図10に示すように、コアC1は、画素(5,1)の2値化で生じた濃度誤差を拡散先の1つである画素(6,1)へアクセスして分配し、これと並行して、コアC2は画素(3,2)の2値化で生じた濃度誤差を拡散先の1つである画素(4,2)へアクセスして分配し、コアC3は画素(1,3)の2値化で生じた濃度誤差を拡散先の1つである画素(2,3)へアクセスして分配する。これら画素(6,1)、画素(4,2)、画素(2,3)もRAM13において連続するアドレスに並んで記憶されているため、効率的にアクセスできる。誤差拡散処理部52は、図8に示す画素(9,9)を末尾画素として含む最後の画素行に対する2値化を終えた場合に、画像データ43に対する誤差拡散法による多値化を終了する。
【0066】
変換部51は、誤差拡散処理部52による多値化後の画像データ43について逆変換をする。この場合、画像変形部51bが、上述の変形処理とは逆の変形処理を実行する。つまり、画像変形部51bは、多値化後の画像データ43からパディング画素を除去した上で、ずらし画素数Hに応じた画素列間のY軸方向のずれを全て無くして、画像データ41と同じ形状の画像データとする。
【0067】
さらに、行列入れ替え部51aは、画像変形部51bによる逆の変形処理後の画像データに対して、上述の行列入れ替え処理の逆の行列入れ替え処理を実行することにより、多値化後の画像データの画素配列を、画像データ40と同じ配列に戻す。つまり、行列入れ替え部51aは、画像変形部51bによる逆の変形処理後の画像データにおいて、X軸方向へ順に並ぶ各画素列について、上述の行列入れ替え処理とは逆に回転させて各画素行に変換し、各画素行をY軸方向へ順に並べる。
【0068】
そして、データ出力部53は、変換部51により画素の配列が元に戻された画像データを所定の出力先へ出力する。図1によれば所定の出力先は、画像処理装置10が通信IF14を介して接続するプリンター20である。つまり、プリンター20は、データ出力部53により出力された画像データを印刷データとして取得し、印刷データに従ってCMYKインクのドットを吐出することにより印刷媒体への印刷を実行する。ただし、データ出力部53による画像データの出力先は、プリンター20に限定されず、例えば、画像データに従って画像表示を行うモニターや、画像データを保存するサーバー等であってもよい。
【0069】
6.画像データの分割を伴う処理:
変換部51は、行列入れ替え処理後の画像データ41を、X軸方向において複数の領域に分割し、複数の領域毎に変形処理を実行し、誤差拡散処理部52は、複数の領域毎に多値化を行う、としてもよい。このような画像データの分割を伴う処理について、図11,12を参照して説明する。
【0070】
図11の例では、変換部51は、行列入れ替え処理後の画像データ41を、X軸方向において4つの領域411,412,413,414に分割している。ここでの分割は、等分あるいはほぼ等分と解してよい。むろん、分割数は4に限られない。
【0071】
次に、変換部51は、領域411,412,413,414から拡大領域415,416,417を生成する。ここで、領域411,412,413,414のうち、X軸-方向からX軸+方向に向かって2つめの領域である領域412に注目する。変換部51は、領域412と、領域412に対してX軸-方向に隣接する領域411内の領域412と繋がる一部領域411aと、を併せた領域を拡大領域415とする。つまり、変換部51は、領域411のうちの領域412との境界に沿う、X軸方向において所定幅の領域をコピーし、コピーした領域を一部領域411aとして領域412のX軸-方向側に結合することにより、拡大領域415を生成する。この結果、一部領域411aは、領域411と、拡大領域415との両方に存在することになる。
【0072】
同様に、変換部51は、領域411,412,413,414のうち、X軸-方向からX軸+方向に向かって3つめの領域である領域413と、領域413に対してX軸-方向に隣接する領域412内の領域413と繋がる一部領域412aと、を併せた領域を拡大領域416とする。同様に、変換部51は、領域411,412,413,414のうち、最もX軸+方向側に在る領域414と、領域414に対してX軸-方向に隣接する領域413内の領域414と繋がる一部領域413aと、を併せた領域を拡大領域417とする。一部領域412aは、領域412と、拡大領域416との両方に存在し、一部領域413aは、領域413と、拡大領域417との両方に存在する。
【0073】
変換部51の画像変形部51bは、領域411、拡大領域415、拡大領域416、拡大領域417のそれぞれを1つの画像データとみなして、ずらし画素数Hを用いた変形処理を行う。つまり、画像変形部51bは、領域411を、隣接する画素列同士がY軸方向においてずらし画素数H分ずれるように変形し、この変形で生じた差分領域をパディング画素で埋めて矩形の分割画像データ431を生成する。領域411を変形して分割画像データ431を生成する手順は、図6で説明した画像データ41から画像データ43を生成する手順と同じである。同様に、画像変形部51bは、拡大領域415を、隣接する画素列同士がY軸方向においてずらし画素数H分ずれるように変形し、この変形で生じた差分領域をパディング画素で埋めて矩形の分割画像データ435を生成する。同様に、画像変形部51bは、拡大領域416から分割画像データ436を生成し、拡大領域417から分割画像データ437を生成する。
【0074】
分割画像データ431,435,436,437のそれぞれに2本記載した斜めの破線は、実画素とパディング画素との境界である。なお、図6の画像データ42を参照すると、実画素とパディング画素との境界は階段状であるが、図11では実画素とパディング画素との境界を簡易的に直線で表している。
【0075】
誤差拡散処理部52は、分割画像データ431,435,436,437のそれぞれを対象として、誤差拡散法による多値化を行う。つまり、画像データ43を多値化したのと同様に、複数のコアによる並列処理で分割画像データ431を多値化する。同じく、分割画像データ435,436,437についても、それぞれを1つの画像データと見なして多値化する。図12には、分割画像データ431を多値化した分割画像データ431´と、分割画像データ435を多値化した分割画像データ435´と、分割画像データ436を多値化した分割画像データ436´と、分割画像データ437を多値化した分割画像データ437´と、を示している。
【0076】
このように画像データ41を分割した領域毎に多値化を行うことにより、多値化の対象とする画像データのサイズを大幅に小さくすることができる。ここで、ずらし画素数Hを用いた変形後の画素データのY軸方向の画素数は、変形前の1画素列を構成する画素数に、(画素列数-1)×Hを加えた画素数となる。例えば、画像データ41が、8000画素×8000画素のサイズであり、ずらし画素数H=2であるとき、図6に示したように画像データ41の全体を変形すると、画像データ42,43のY軸方向の画素数は、約24000となり、変形前の3倍となる。ずらし画素数Hが多ければ、画像データ42,43のY軸方向の画素数はさらに増える。
【0077】
一方、図11の例のように画像データ41をX軸方向へ4分割すると、1つの領域411のX軸方向の画素列数は2000となり、ずらし画素数H=2であるとき、分割画像データ431のY軸方向の画素数は、約12000となる。これは、画像データ42,43のY軸方向の画素数の半分である。拡大領域415,416,417の各々は、一部領域411a,412a,413aの影響で、領域411と比べると、X軸方向の画素列数が例えば数十列程多い。そのため、分割画像データ435,436,437各々のY軸方向の画素数も、分割画像データ431よりは多くなるが、それでも12000画素に、数十から数百画素を足した程度の数である。また、分割画像データ431,435,436,437のX軸方向の画素数の合計は、8000に、数十画素×3を加えた程度である。従って、分割画像データ431,435,436,437の画素数の合計は、画像データ43の画素数(8000×約24000)と比べて大幅に少なく、分割画像データ431,435,436,437を多値化することにより、誤差拡散処理部52の負担やメモリーの消費を抑制することができる。
【0078】
このように、画像データ41を分割しない場合と分割する場合との、多値化の対象となる画像データの画素数の違いは、ほぼパディング画素の数の違いである。画像データ41の分割数を増やすことにより、パディング画素をさらに減らすことができる。
【0079】
図12に示す分割画像データ435´は、拡大領域415のうちの領域412を構成する実画素と分割画像データ435の一部のパディング画素とを多値化したデータである領域435bと、一部領域411aを構成する実画素と分割画像データ435の一部のパディング画素とを多値化したデータである領域435aとに分けることができる。同様に、分割画像データ436´は、拡大領域416の領域413を構成する実画素と分割画像データ436の一部のパディング画素とを多値化したデータである領域436bと、一部領域412aを構成する実画素と分割画像データ436の一部のパディング画素とを多値化したデータである領域436aとに分けることができる。同様に、分割画像データ437´は、拡大領域417の領域414を構成する実画素と分割画像データ437の一部のパディング画素とを多値化したデータである領域437bと、一部領域413aを構成する実画素と分割画像データ437の一部のパディング画素とを多値化したデータである領域437aとに分けることができる。
【0080】
分割画像データ435´の領域435a、分割画像データ436´の領域436a、および、分割画像データ437´の領域437aは、分割画像データ431´の一部、分割画像データ435´の領域435bの一部、および、分割画像データ436´の領域436bの一部と重複するため、多値化の結果としては不要なデータである。従って、誤差拡散処理部52は、分割画像データ431´と、分割画像データ435´の領域435bと、分割画像データ436´の領域436bと、分割画像データ437´の領域437bとを、多値化後の画像データとして変換部51へ受け渡す。このように、誤差拡散処理部52は、複数の領域411,412,413,414の1つを注目領域としたとき、注目領域に対してX軸-方向に隣接する領域内の注目領域と繋がる一部領域と、注目領域とを併せた領域(拡大領域)を対象として多値化を行う。そして、拡大領域を対象とした多値化後のデータのうち注目領域のデータを、多値化後の画像データの一部とする。
【0081】
このように、領域412に一部領域411aを加えた拡大領域415について、分割画像データ435への変形を経つつ、誤差拡散法による多値化をすることで、領域412の一部領域411aに近い各画素に対して、一部領域411aの各画素の多値化で生じた濃度誤差を拡散することができる。そのため、分割画像データ431´と、分割画像データ435´の領域435bとを結合したとき、これらが自然に繋がり、結合部分が目立たなくなる。なお、実際の結合は、後述するように、領域411´,412´,413´,414´となったタイミングで行われる。
【0082】
同様に、拡大領域416について誤差拡散法による多値化をすることで、領域413の一部領域412aに近い各画素に対して、一部領域412aの各画素の多値化で生じた濃度誤差を拡散することができ、分割画像データ435´の領域435bと分割画像データ436´の領域436bとを結合したとき、結合部分が目立たなくなる。同様に、拡大領域417について誤差拡散法による多値化をすることで、領域414の一部領域413aに近い各画素に対して、一部領域413aの各画素の多値化で生じた濃度誤差を拡散することができ、分割画像データ436´の領域436bと分割画像データ437´の領域437bとを結合したとき、結合部分が目立たなくなる。
【0083】
誤差拡散処理部52から、分割画像データ431´と、分割画像データ435´の領域435bと、分割画像データ436´の領域436bと、分割画像データ437´の領域437bとを取得した変換部51では、画像変形部51bが、ずらし画素数Hを用いた上述の変形処理の逆の変形処理を行う。つまり、画像変形部51bは、分割画像データ431´、領域435b、領域436b、および領域437bのそれぞれについて、パディング画素を除去し、隣接する画素列同士のずらし画素数Hに応じたずれを無しにする。この結果、図12に示すように、分割画像データ431´は領域411´へ変形され、領域435bは領域412´へ変形され、領域436bは領域413´へ変形され、領域437bは領域414´へ変形される。
【0084】
領域411´、412´、413´、414´はそれぞれ、領域411、412、413、414と同じサイズの画像データである。画像変形部51bは、これら領域411´、412´、413´、414´を結合して画像データ41と同じ形状の画像データ41´とする。この画像データ41´に対して、行列入れ替え部51aが、上述の行列入れ替え処理の逆の行列入れ替え処理を実行すればよい。
【0085】
7.まとめ:
このように本実施形態によれば、画像処理装置10は、互いに交差する第1方向および第2方向に2次元的に配列された複数の画素からなる画像データを入力し、画素を多値化した際に生じる濃度誤差を多値化前の周辺の画素へ拡散する誤差拡散法により、入力した画像データの多値化を行う場合に、多値化前の画素のうち他の画素から拡散される濃度誤差が確定した複数の画素を注目画素とし、複数の注目画素について誤差拡散法による多値化を並行して行う。画像処理装置10は、入力した画像データを記憶するメモリーと、複数の注目画素について誤差拡散法による多値化を並行して行う複数の多値化部を有する誤差拡散処理部52と、画像データの画素の配列を変換する変換部51と、を備える。そして、変換部51による変換前の画像データにおいて第1方向に沿う画素の並びである1つの画素行に属する画素であって、複数の多値化部の1つである第1多値化部が処理対象とする注目画素を第1注目画素とし、変換部51による変換前の画像データにおいて第1注目画素が属する画素行に対して第2方向に隣接する画素行に属する画素であって、複数の多値化部の1つである第2多値化部が処理対象とする注目画素を第2注目画素としたとき、変換部51は、第1注目画素と第2注目画素とがメモリーにおいて連続して並ぶアドレスに格納されるように画像データの画素の配列を変換し、誤差拡散処理部52は、変換部51による変換後の画像データにおける第1注目画素に対する第1多値化部による多値化と、変換部51による変換後の画像データにおける第2注目画素に対する第2多値化部による多値化とを並行して行う。
【0086】
前記構成によれば、誤差拡散処理部52は、第1注目画素と第2注目画素とがメモリーの連続して並ぶアドレスに格納された状態の画像データを対象として、第1注目画素に対する第1多値化部による多値化と、第2注目画素に対する第2多値化部による多値化とを並行して行う。従って、メモリーに記憶されている第1注目画素と第2注目画素との関係に該当する複数の注目画素へ高速にアクセスし、複数の多値化部を使用した並列処理による複数の注目画素の多値化を、より高速化することができる。
【0087】
また本実施形態によれば、変換部51は、画像データにおいて第2方向へ順に並ぶ各画素行について、第2方向に沿う画素の並びである各画素列に変換して各画素列を第1方向へ順に並べる行列入れ替え処理と、行列入れ替え処理後の画像データを、予め決められた濃度誤差の拡散範囲に応じて第2方向に変形する変形処理と、により画像データの画素の配列を変換する。
前記構成によれば、変換部51は、行列入れ替え処理と変形処理とを実行することにより、第1注目画素と第2注目画素とがメモリーにおいて連続して並ぶアドレスに格納されるように画像データの画素配列を変換できる。
【0088】
図5図6を参照した説明によれば、変換部51は、画像データ40に行列入れ替え処理を施して画像データ41とし、画像データ41に変形処理を施して画像データ42とする。ただし、変換部51は、画像データ40の画素配列を、結果的に画像データ42の画素配列に変換できればよく、必ずしも図5図6で説明した通りの順序で画素配列を変換しなくてもよい。
【0089】
また本実施形態によれば、変換部51は、行列入れ替え処理前の画像データにおいて、注目画素が属する画素行を1行目画素行、注目画素を基準とした拡散範囲内で1行目画素行から第2方向へ最も遠い画素行をN行目画素行、Nを2以上の整数、nを1~N-1の整数としたとき、n行目画素行内の第1方向への拡散範囲の画素数と、n+1行目画素行内の第1方向の逆方向への拡散範囲の画素数と、の和に1を足した値のうちの最大値を、ずらし画素数Hとする。そして、変形処理では、行列入れ替え処理後の画像データの画素列を、当該画素列に第1方向の逆方向において隣接する画素列に対して、第2方向へずらし画素数H分ずらす。
前記構成によれば、変換部51は、第1注目画素と第2注目画素とを同じ画素行に属させる変形処理に必要なずらし画素数Hを、行列入れ替え処理前の画像データにおいて定義されている拡散範囲に基づいて適切に求めることができる。
【0090】
また本実施形態によれば、変換部52は、誤差拡散処理部52による多値化後の画像データに対して変形処理の逆の変形処理を実行し、逆の変形処理後の画像データに対して行列入れ替え処理の逆の行列入れ替え処理を実行することにより、画像データの画素の配列を元に戻す。そして、画像処理装置10は、変換部51により画素の配列が元に戻された画像データを所定の出力先へ出力する。
前記構成によれば、画像処理装置10は、多値化の並列処理を高速化するために画素配列を変換した画像データについて、多値化後に、本来の画素配列に戻した上で、プリンター20等の出力先へ出力することができる。
【0091】
また本実施形態によれば、変換部51は、変形処理後の画像データにおける画素列間の第2方向のずれにより生じた領域を所定値の画素で埋めるパディング処理を実行することにより、誤差拡散処理部52による多値化前の画像データを整形する。
前記構成によれば、変換部51は、複数の多値化部による多値化の並列処理を効率的に行う上で必要な画像データの整形を行うことができる。
【0092】
また本実施形態によれば、変換部51は、行列入れ替え処理後の画像データを第1方向において複数の領域に分割し、複数の領域毎に変形処理を実行し、誤差拡散処理部52は、複数の領域毎に多値化を行うとしてもよい。
前記構成によれば、変換部51は、誤差拡散処理部52が多値化の対象とする画像サイズを小さくすることができる。
【0093】
また、本実施形態によれば、誤差拡散処理部52は、複数の領域の1つを注目領域としたとき、注目領域に対して第1方向の逆方向に隣接する領域内の注目領域と繋がる一部領域と、注目領域とを併せた領域を対象として多値化を行い、一部領域と注目領域とを併せた領域を対象とした多値化後のデータのうち注目領域のデータを、誤差拡散処理部52による多値化後の画像データの一部とする。
前記構成によれば、誤差拡散処理部52は、一部領域と注目領域とを併せた領域を対象として多値化を行うことにより、多値化後の注目領域同士の繋がりを自然な繋がりにすることができる。
【0094】
本実施形態は、画像処理装置10やシステム30に限らず、これら装置やシステムが実行する方法や、方法をプロセッサーに実行させるプログラム16を開示する。
互いに交差する第1方向および第2方向に2次元的に配列された複数の画素からなる画像データを入力し、画素を多値化した際に生じる濃度誤差を多値化前の周辺の画素へ拡散する誤差拡散法により、入力した画像データの多値化を行う場合に、多値化前の画素のうち他の画素から拡散される濃度誤差が確定した複数の画素を注目画素とし、複数の注目画素について誤差拡散法による多値化を並行して行う画像処理方法は、入力した画像データをメモリーへ記憶する記憶工程と、画像データの画素の配列を変換する変換工程と、複数の多値化部を用いて複数の注目画素について誤差拡散法による多値化を並行して行う誤差拡散処理工程と、を備える。そして、変換工程前の画像データにおいて第1方向に沿う画素の並びである1つの画素行に属する画素であって、複数の多値化部の1つである第1多値化部が処理対象とする注目画素を第1注目画素とし、変換工程前の画像データにおいて第1注目画素が属する画素行に対して第2方向に隣接する画素行に属する画素であって、複数の多値化部の1つである第2多値化部が処理対象とする注目画素を第2注目画素としたとき、変換工程では、第1注目画素と第2注目画素とがメモリーにおいて連続して並ぶアドレスに格納されるように画像データの画素の配列を変換し、誤差拡散処理工程では、変換工程後の画像データにおける第1注目画素に対する第1多値化部による多値化と、変換工程後の画像データにおける第2注目画素に対する第2多値化部による多値化とを並行して行う。
【0095】
これまでの説明を更に補足する。図10に示す複数のコアによる並列処理において、図8の画像データ43の画素列数よりもマルチコアプロセッサー15のコア数が少ない場合を想定する。例えば、図8に示すように画像データ43の画素列数が9であり、マルチコアプロセッサー15は、コアC1~C5のみを有するとする。この場合、コアC1~C5が、最初の画素行に属する画素(1,1)およびパディング画素0(1)~0(4)の2値化と、2値化により生じた濃度誤差の拡散を図10に示す通りに実行した後、コアC1~C4が、同じ最初の画素行に属するパディング画素0(5)~0(8)の2値化と、2値化により生じた濃度誤差の拡散を実行する。同様に、コアC1~C5が、画素(2,1)が属する画素行の画素(2,1)およびパディング画素0(9)~0(12)の2値化と、2値化により生じた濃度誤差の拡散を図10に示す通りに実行した後、コアC1~C4が、同じ画素行に属するパディング画素0(13)~0(16)の2値化と、2値化により生じた濃度誤差の拡散を実行する。以降も同様に、図10においてコアC6~C9が行うものとして記載されている処理を、替わりにコアC1~C4が行う。
【符号の説明】
【0096】
10…画像処理装置、11…CPU、12…ROM、13…RAM、14…通信IF、15…マルチコアプロセッサー、16…プログラム、17…メモリーコントローラー、20…プリンター、30…システム、40,41,42,43…画像データ、42a,42b…差分領域、50…データ入力部、51…変換部、51a…行列入れ替え部、51b…画像変形部、52…誤差拡散処理部、53…データ出力部、54…ずらし画素数算出部、C1,C2,C3,C4,C5,C6,C7,C8,C9…コア
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12