以下、本発明の実施形態について、図面を参照して説明する。なお、以下の実施形態は、本発明を限定するものではなく、各実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。その他、本発明の要旨を逸脱しない範囲の様々な形態も本発明に含まれ、また、以下の各実施形態の一部を適宜組み合わせることもできる。
(プリンタの構成)
図1は、各実施形態において想定する画像記録装置としての、インクジェットプリンタの模式図である。プリンタ10は、その筐体内に記録ヘッド100を備える。記録ヘッド100は、所謂フルラインタイプの記録ヘッドであり、ブラック、シアン、マゼンタ、イエローの各インク色に対応した4つのノズル列を有する。各ノズル列にはインクを吐出するノズルが、一定の間隔でX方向に配列されている。例えば、長さが15インチで600dpiのノズル列の場合は、約9000個のノズルがX方向に並んでいることになる。
記録媒体としての用紙106は、搬送ローラ105(および他の不図示のローラ)がモータ(不図示)の駆動力によって回転することにより、Y方向に搬送される。そして、用紙106が搬送される間に、ノズル列101~104それぞれの各ノズルが記録用データに応じてインクを吐出することで紙面上に画像が形成される。以下の説明において、用紙搬送方向の記録解像度は600dpiとする。
また、記録ヘッド100よりも下流の位置には、インラインセンサ107が備えられている。インラインセンサ107は、X方向に一定の間隔で配列した光学読取素子によって、プリント物上の画像の色を光学的に読み取り、色をRGB色空間で表現したスキャン画像を出力する。以下の説明において、用紙搬送方向の読取解像度は600dpiとする。
なお、各実施形態を適用可能な画像記録装置は、フルラインタイプのインクジェットプリンタに限られない。例えば、記録ヘッドを用紙の搬送方向と交差する方向に走査して画像を形成する所謂シリアルタイプのインクジェットプリンタでもよい。また、ノズル列におけるノズルの間隔および用紙搬送方向の記録解像度は600dpiに限定されない。同様に、インラインセンサ107の光学読取素子の間隔および、用紙搬送方向の読取解像度も600dpiに限定されない。また、画像記録を行う方式もインクジェット方式に限定されるものではなく、記録素子としてLEDや発熱体を使用するプリンタにも適用可能である。具体的には、露光のための光源としてLEDアレイを用いた電子写真プリンタや、固形インクを気化させるための熱源として微小な発熱体が並んだサーマルヘッドを用いた昇華型プリンタにも適用可能である。
(画像形成システムの構成)
図2は、上述のプリンタ10を含む画像形成システムのハードウェア構成の一例を示すブロック図である。この画像形成システムは、図1に示したプリンタ10と、そのホスト装置としてのパーソナルコンピュータ(PC)20を有する。
ホストPC20は、CPU201、RAM202、HDD203、データ転送I/F204、キーボード・マウスI/F205、ディスプレイI/F206を有する。CPU201は、RAM202やHDD203に保持されているプログラムに従って所定の処理を実行する。RAM202は、揮発性の記憶装置であり、プログラムやデータを一時的に保持する。HDD203は、不揮発性の記憶装置であり、同じくプログラムやデータを保持する。データ転送I/F204は、プリンタ10との間におけるデータの送受信を制御するインタフェースである。このデータ送受信の接続方式としては、USBやLANが用いられる。キーボード・マウスI/F205は、キーボードやマウス等のHID(Human Interface Device)を制御する。ディスプレイI/F206は、液晶モニタなどのディスプレイ(不図示)の表示を制御するインタフェースである。
プリンタ10は、CPU211、RAM212、ROM213、データ転送I/F214、ヘッドコントローラ215、プリント処理回路216、センサコントローラ217を有する。CPU211は、RAM212やROM213に保持されているプログラムに従って所定の処理を実行する。RAM212は、揮発性の記憶装置であり、プログラムやデータを一時的に保持する。ROM213は、不揮発性の記憶装置であり、同じくプログラムやデータを保持する。データ転送I/F214は、ホストPC20との間におけるデータの送受信を制御するインタフェースである。ヘッドコントローラ215は、RAM212に格納された例えば二値に量子化されたハーフトーン画像に基づいて、記録ヘッド100の各ノズル列におけるインク吐出動作を制御する。プリント処理回路216は、画像処理に特化したデジタル回路であり、シェーディング補正や量子化処理といったプリント関連の画像処理を実行する。センサコントローラ217は、インラインセンサ107の個々の光学読取素子を制御する。
後述の各実施形態において、記録素子毎(ここではノズル毎)の階調再現関数の導出処理はホストPC20にて行い、シェーディング補正や量子化といったプリント関連の画像処理はプリンタ10のプリント処理回路216にて行なうものとする。ただし、プリント関連の画像処理の全部又は一部を、ホストPC20側で行なってもよいし、或いはプリンタ10のCPU211で実行しても構わない。
(プリント処理回路の構成)
図3は、プリンタ10が有するプリント処理回路216の内部構成を示す機能ブロック図である。プリント処理回路216は、色変換部301、色分解部302、ヘッドシェーディング部303、ガンマ補正部304、量子化部305を有する。以下、各部について説明する。
色変換部301は、ホストPC20から入力された印刷対象のRGB色空間で表現された画像(入力RGB画像)を、三次元ルックアップテーブル(3D-LUT)を用いて、プリンタ10の色再現域に対応したRGB画像に変換し、色分解部302に出力する。なお、プリント処理回路216で扱われる画像の解像度は全て、プリンタ10に搭載されている記録ヘッド100のノズル解像度と同じ600dpiである。また、入力RGB画像や色変換後のRGB画像を含め、以降、プリント処理回路216で扱われる画像の各色成分のビット深度は、量子化部305が出力するハーフトーン画像を除き、全て16ビットであるものとする。
色分解部302は、色変換後のRGB画像を、3DLUTを用いて、プリンタ10で使用される各インク色に対応したインク値画像に変換し、ヘッドシェーディング部303に出力する。プリンタ10が、シアン、マゼンタ、イエロー、ブラックの4色のインクを使用する場合、色分解部302に入力されたRGB画像は、シアン、マゼンタ、イエロー、ブラックの4チャンネルから成るインク値画像に変換される。
ヘッドシェーディング部303は、色分解部302が出力する色版毎のインク値画像に対して、各ノズルの吐出特性に応じた補正(以下、「シェーディング補正」と呼ぶ。)を行い、ガンマ補正部304に出力する。ヘッドシェーディング部303におけるシェーディング補正処理の詳細は後述する。
ガンマ補正部304は、ヘッドシェーディング部303が出力するインク値画像に対し、色版毎に、一次元ルックアップテーブル(1D-LUT)を用いて、紙面上に形成されることになるドットの数を調整する。具体的には、各ノズルが吐出するインク滴によって形成されるドットの数と、当該数のドットによって実現される明度との関係が略線形になるように、シェーディング補正後のインク値画像の画素値を変更する。ガンマ補正後のインク値画像は量子化部305に出力される。
量子化部305は、ガンマ補正部304が出力するガンマ補正後のインク値画像に対し、色版毎に、ディザ法や誤差拡散法といった公知の量子化処理を適用して、ドットのオン又はオフを二値で表したハーフトーン画像を生成する。生成されたハーフトーン画像のデータはRAM212に一旦格納された後、ヘッドコントローラ215によって読み出される。なお、各ノズルが吐出するインク滴のサイズ(ドットサイズ)を制御可能なプリンタの場合は、ドットサイズの種類に対応した階調数(ビット深度)に量子化する処理を行ってハーフトーン画像を生成すればよい。この場合、ヘッドコントローラ215は、4値や16値といった多値のハーフトーン画像に基づいて各ノズルのインク吐出動作を制御することになる。
(シェーディング補正)
続いて、ヘッドシェーディング部303におけるシェーディング補正について説明する。このシェーディング補正は、色版毎のインク値画像それぞれに対して同様に適用される。以下では、ブラックのインク値画像に適用する場合を例に説明を行い、他の色版については省略するものとする。
ここで、ノズル列方向の座標をx、ノズル列方向に直交する用紙搬送方向の座標をyで表すこととする。このとき、シェーディング補正前のインク値画像における座標(x,y)で表される位置の階調値をDpre_K(x,y)、シェーディング補正後のインク値画像における座標(x,y)で表される位置の階調値をDaft_K(x,y)のように表すこととする。この補正後の階調値Daft_K(x,y)は、補正前の階調値Dpre_K(x,y)に対し、ノズル位置毎(すなわちxの値毎)に、異なる1D-LUTを適用することで生成する。xの値が同じ場合、y方向の各画素には、同一の1D-LUTが適用されることになる。1D-LUTを用いるシェーディング補正は、前述の特許文献1にも記載されている公知の手法である。ここで、あるノズル位置x(以下、単に「位置x」と表記)における一次元ルックアップテーブルを、1D-LUT_K_xとしたとき、シェーディング補正後の階調値Daft_K(x,y)は、以下の式(1)によって表される。
Daft_K(x,y)=1D-LUT_K_x(Dpre_K(x,y))・・・式(1)
図4(a)は、位置x=513のノズルに適用する1D-LUT_K_513の一例、同(b)は位置x=517のノズルに適用する1D-LUT_K_517の一例である。図4(a)及び(b)に示すグラフの横軸は、シェーディング補正を行う前後の階調値を示しており、グラフの縦軸は、プリント物上の画像を光学的に読み取って得られた輝度値を示している。なお、グラフの縦軸は、輝度値に代えて濃度値であっても構わない。グラフの横軸における「紙白」はインク量が最小となるときの階調値である。また、グラフの横軸における「ベタ」はインク量が最大となるときの階調値である。
図4(a)及び(b)のグラフにおいて共通の直線401は、入力階調値に対応する目標輝度値を示す関数(以下、「目標輝度関数」と表記)I_T(d)を示している。この場合おいて、dは階調値を表す。いま、I_T(d)は、「紙白」の輝度値と「ベタ」の輝度値を直線で結んだ一次関数であるが、プリンタの階調再現特性を決める設計パラメータとして任意の関数を設定できる。なお、この目標輝度関数I_T(d)は、全てのノズルで同じものを用いる。そして、図4(a)のグラフにおける曲線402及び図4(b)のグラフにおける曲線403は、それぞれ異なるノズル位置xに対応するノズルの階調再現関数I_x(d)を表している。いま、曲線402は位置x=513のノズルの階調再現関数であり、曲線403は位置x=517のノズルの階調再現関数である。このノズル毎の階調再現関数I_x(d)は、位置xのノズルで階調値dの画像を、シェーディング補正をOFFにして記録したときの、紙面上において対応する位置の輝度値を示す関数である。なお、シェーディング補正をOFFにして記録を行う際は、色分解部302から出力されるインク値画像を、ヘッドシェーディング部303を通さずに、ガンマ補正部304に入力すればよい。
例えば、位置x=513における、シェーディング補正後の階調値Daft_K(x,y)を求める場合は、以下のような手順となる。まず、目標輝度関数I_T(d)により、シェーディング補正前の階調値Dpre_K(513,y)に対応する目標輝度値I_T(Dpre_C(513、y))を求める。そして、位置x=513のノズルに対応する紙面上の位置において目標輝度値I_T(Dpre_K(513,y))を正確に再現するための、シェーディング補正後の階調値Daft_K(513,y)=I_513(I_T(Dpre_K(513,y)))-1 を求める。すなわち、位置x=513における1D-LUT_K_513は、階調再現関数I_513(d)の逆関数I_513-1と、目標輝度関数I_T(d)を合成した関数により実現される。他の位置xのノズルの1D-LUTについても同様である。なお、こうして作成された1D-LUTに存在しない値が引数として入力された場合は、公知の補間処理により出力値を算出すればよい。また、シェーディング補正で用いるノズル毎の1D-LUT_K_xは、階調再現関数の逆関数I_x-1と、目標輝度関数I_T(d)とを組み合わせて実現する。もしくは、階調再現関数の逆関数I_x-1と、目標輝度関数I_T(d)とを用いて事前に算出しておいた値を、単独のテーブルとして保持することにより実現する。
図4(a)のグラフにおいて、曲線402が示す階調再現関数I_513(d)は、直線401が示す目標輝度関数I_T(d)を常に下回っている。これは、シェーディング補正がOFFの場合、位置x=513のノズルに対応する紙面上の位置に黒スジが発生していることを示している。しかし、シェーディング補正をONにすると、補正前の階調値Dpre_K(513,y)はDaft_K(513,y)へと補正され、紙面上に吐出されるインク量が少なくなるため、黒スジが低減することになる。一方、図4(b)のグラフにおいて、曲線403の階調再現関数I_517(d)は、直線401が示す目標輝度関数I_T(d)を常に上回っている。これは、シェーディング補正がOFFの場合、位置x=517のノズルに対応する紙面上の位置に白スジが発生していることを示している。しかし、シェーディング補正をONにすると、補正前の階調値Dpre_K(517、y)はDaft_K(517、y)へと補正され、紙面上に吐出されるインク量が多くなるため、白スジが低減することになる。
(本発明の課題の確認)
各実施形態の説明に入る前に、本発明の課題について確認しておく。まず、従来手法によるノズル毎の階調再現関数の導出について説明する。ノズル毎の階調再現関数は、記録ヘッド100が有するノズル列毎に導出される。導出方法は各ノズル列で共通なので、ここではブラックのノズル列101を例として説明を行う。
まず、図5に示すような、同一階調の均一パッチが複数(ここでは9個)配置されたテスト画像501を、シェーディング補正をOFFにした条件下で、ブラックのノズル列101のみを用いて用紙に出力する。そして、出力結果(プリント物上の画像)をインラインセンサ107で読取り、色をRGB色空間で表現した光学読取画像(スキャン画像)をホストPC20に転送する。ホストPC20は、受け取ったスキャン画像に対し、その画素値(RGB値)の重み和を画素毎に求める輝度変換処理を行う。そして、この輝度変換後のスキャン画像において、各均一パッチの画素値を、各ノズルが画像記録を行う経路、すなわち、インク滴を吐出してドット形成を行う経路(以下、「記録経路」と呼ぶ。)に沿って積分することで、ノズル毎の階調再現関数I_x(d)の値を求める。
例えば、位置x=513のノズルの階調再現関数I_513(d)を求める際、矢印502~510で示す経路に沿って、各パッチの画素値を積分する。これにより、位置x=513のノズルの階調再現関数として、I_513(d=0)~I_513(d=65535)の9個の値が得られる。他の位置xのノズルについても同様である。このようにして導出したノズル毎の階調再現関数I_x(d)を用いて、前述のヘッドシェーディング部303におけるシェーディング補正が実行可能となる。
しかしながら、用紙の伸縮や、インラインセンサ107の光学収差などにより、スキャン画像が局所的に歪むことがある。また、用紙搬送時の誤差により、スキャン画像の位置が上下左右にズレたり、傾いてしまうことがある。そのため、スキャン画像において、各ノズルの記録経路を、固定したパラメータとして設定すると、階調再現関数I_x(d)として、不適切な値を生成してしまうことがある。例えば、位置x=513のノズルの記録経路として矢印502~510で示す位置を、スキャン画像における固定した座標として設定したとする。この場合、スキャン画像の歪みやズレにより、例えば位置x=517のノズルの記録経路に相当する位置の画素値を積分してしまうことがある。この場合、位置x=513のノズルの階調再現関数I_513(d)として、本来は図4(a)に示す曲線402が得られるはずが、図4(b)に示す曲線403が得られてしまう。その結果、位置x=513の位置において黒スジが発生しているにもかかわらず、シェーディング補正を行う際には、当該位置において、位置x=517のノズルの階調再現関数I_517(d)が用いられることになる。これにより、インク値画像の階調値がインク量を増やす方向に補正され、位置x=513における黒スジがさらに悪化してしまう。このように、スキャン画像の歪みやズレにより、スキャン画像の画素値を所定のノズルに正確に対応付けることができず、シェーディング補正によって却ってスジムラが悪化することがあった。
この点、前述の特許文献1では、テスト画像中に同一階調の均一パッチのユニットを複数配置し、スキャン画像の歪み補正をユニット毎に行うことで、各ユニットの光学読取値を所定のノズルに対応付けている。しかしながら、隣接するユニット同士の境界が互いに接しておらず、歪み補正で用いる座標変換パラメータは、ユニット毎に独立して設定される。そのため、座標変換パラメータの切換えに伴って誤差の発生が避けられない。そのような誤差を含むノズル毎の階調再現関数をシェーディング補正で用いると、ユニットの端部において画素値の段差が発生してしまう。ここで、具体例を、図6(a)及び(b)を参照して説明する。いま、座標変換前において、互いに隣接する2つのノズルの記録経路がそれぞれ矢印601、602であったとする(図6(a))。双方の記録経路601及び602は、互いに離れた領域(点603~606で囲まれる領域と、点607~610で囲まれる領域)にそれぞれ含まれている。そして、座標変換後の領域が、点603~606で囲まれる領域は点613~616で囲まれる領域へと変化し、点607~610で囲まれる領域は点617~620で囲まれる領域へと変化したとする。このとき、記録経路601と602は、それぞれ記録経路611と612に変換される。いま、2つの局所領域は共通の境界を持たず、座標変換パラメータに関連性を持たせることができないため、座標変換後の記録経路611と612は一般的に平行とはならない。そのため、スキャン画像の画素値を、記録経路611及び612に沿って積分して得られたそれぞれの値の間には、座標変換に起因する意図しない段差が発生してしまう。このような方法で導出したノズル毎の階調再現関数をシェーディング補正に用いると、各ユニットの端部に対応する領域にスジムラが残ってしまうという問題があった。
以下の各実施形態では、用紙の伸縮や光学収差等でスキャン画像が局所的に歪んでいても、上述のような座標変換パラメータの切換えに伴う段差を発生させずに、ノズル毎の階調再現関数I_x(d)を、好適に導出する方法を示す。
[実施形態1]
図7は、本実施形態に係る、ノズル毎の階調再現関数I_x(d)の導出処理を実現する、ホストPC20の機能ブロック図である。そして、図8は、本実施形態に係る、ノズル毎の階調再現関数I_x(d)の導出処理の流れを示すフローチャートである。従来技術と同様、ノズル毎の階調再現関数I_x(d)の導出は、各ノズル列で共通なので、以下では、ブラックのノズル列101を例として説明するものとする。なお、以下の説明において「S」はステップを意味する。
S801では、テスト画像生成部702が、テスト画像パラメータ記憶部701に記憶されているテスト画像パラメータに基づいて、テスト画像を生成する。テスト画像パラメータについては後述する。図9(a)に、テスト画像の一例を示す。テスト画像901は、単独のノズル列を用いて出力(画像記録)することを想定しているため、ブラック1色の色成分を持つグレイ16ビット画像である。ここで、印刷出力に用いる用紙サイズとしてSRA3を想定し、ノズル列方向のサイズを6731画素、用紙搬送方向のサイズを10063画素とする。画像解像度は、各ノズル列のノズル解像度および、用紙搬送方向の記録解像度と同じ600dpiである。テスト画像901の各画素列は常に同じノズルで記録されるため、テスト画像901の座標が分かれば、当該座標の位置にてインクを吐出するノズルを特定できる。なお、本明細書において、上述の図9(a)を含むテスト画像に関する図では、説明の便宜上、実際のテスト画像と寸法や要素の数を変えていることに留意されたい。テスト画像が用意できると、次に、シェーディング補正をOFFにした条件下で、ブラックのノズル列101のみを用いて、テスト画像が印刷出力される。そして、得られたプリント物上の画像をインラインセンサ107で読み取り、読み取った画像(スキャン画像)のRGB値の重み和を画素毎に求める輝度変換処理を行なう。図9(b)に、輝度変換後のスキャン画像の一例を示す。いま、スキャン画像911のノズル列方向のサイズは6967画素、用紙搬送方向のサイズは10328画素である。画像解像度は、光学読取素子の解像度および、用紙搬送方向の記録解像度と同じ600dpiである。図9(b)において、斜めの矩形の枠912は、テスト画像901に対応する領域を示している。前述の通り、用紙搬送時の誤差、用紙の伸縮、インラインセンサ107の光学収差などにより、スキャン画像911における領域912は、通常の場合はテスト画像901と一致しない。そのため、一般的には、ノズル列方向の各位置をどのノズルが画像記録を行うのかをスキャン画像911の座標から特定することは困難である。以降に示す図では、この事実を示すために、領域912に傾きを与えている。
また、スキャン画像における座標と、当該座標の位置にインクを吐出するノズルとの対応関係を求めるために、テスト画像の各均一パッチの周辺には、ノズル列方向の位置の基準を示す図形パターン(以下、「基準パターン」と呼ぶ。)が付加される。実施形態6までの各実施形態においては、所定形状の複数のマーカーを等間隔でノズル列方向に並べたものを基準パターンとして用いる。そして、本実施形態では、図9(a)に示す通り、各均一パッチ904の周囲に、十字形のマーカー(以下、「メインマーカー」と呼ぶ)903を等間隔で並べている。なお、メインマーカーの間隔は等間隔でなくてもよい。テスト画像には、さらに、基準パターンの検出精度を向上させるための、所定形状の複数のマークからなる補助パターンも付加されている。本実施形態では、矩形のマーク(以下、「サブマーカー」と呼ぶ)902を、テスト画像の四隅に配置している。そして、スキャン画像911から各メインマーカー913を検出することで、テスト画像901の座標と、スキャン画像911における座標との対応関係を求める。前述の通り、テスト画像901の座標が分かれば、当該座標の位置でインクを吐出するノズルを特定できるため、スキャン画像911における均一パッチ領域914の画素値を、所定のノズルに正確に対応付けることができる。
以下の説明では、テスト画像901の座標系と、スキャン画像911の座標系とが異なることを明示するために、前者を大文字で表記し、後者を小文字で表記するものとする。すなわち、テスト画像901におけるノズル列方向の座標を“X”、用紙搬送方向の座標を“Y”と表記し、スキャン画像911におけるノズル列方向の座標を“x”、用紙搬送方向の座標を“y”と表記する。
<テスト画像パラメータ>
ここで、前述の「テスト画像パラメータ」について説明する。本実施形態のテスト画像パラメータは、メインマーカーの配置情報、メインマーカーの形状情報、サブマーカーの配置情報、サブマーカーの形状情報、均一パッチの配置情報から構成される(図7を参照)。メインマーカーの配置情報は、各メインマーカー903の位置を、テスト画像901の座標系で設定した数値データである。本実施形態では、メインマーカー903を均等間隔で、X方向には85個、Y方向には18個を配置する。配置を開始する位置はX=42、Y=742とし、X方向の配置間隔は79画素、Y方向の配置間隔は504画素とする。メインマーカーの形状情報は、メインマーカー903の形状を示す画像データである。本実施形態では、11画素四方の白背景の上に1画素幅の黒の縦線と横線が直交する十字が描かれた画像データを用いる。テスト画像生成部702は、この11画素四方の形状画像を、前述のメインマーカーの配置情報に基づいて、生成過程のテスト画像に描画する。サブマーカーの配置情報は、各サブマーカー902の位置を、テスト画像901の座標系で設定した数値データである。本実施形態では、サブマーカー902を四隅に配置する。配置を開始する位置はX=47、Y=79とし、X方向の配置間隔は6512画素、Y方向の配置間隔は9780画素とする。サブマーカーの形状情報は、サブマーカー902の形状を示す画像データである。本実施形態では、全面が黒ベタの125画素四方の正方形の画像データを用いる。テスト画像生成部702は、この125画素四方の形状画像を、前述のサブマーカーの配置情報に基づいて、生成過程のテスト画像に描画する。均一パッチの配置情報は、各均一パッチ904の位置を、テスト画像901の座標系で設定した数値データである。本実施形態では、均一パッチ904をY方向に均等間隔で17個配置する。配置を開始するX位置は47画素目、Y位置は787画素目とし、Y方向の配置間隔は504画素とする。均一パッチの配置情報には、均一パッチ904のサイズ情報も含んでおり、いま、X方向のサイズは6637画素、Y方向のサイズは425画素とする。また、均一パッチの配置情報には、各均一パッチ904の階調情報も含まれる。本実施形態では、濃度の高い順に以下の17種類(全17階調)の均一パッチを描画する。すなわち、階調値dが上から順に、65535、61440、57344、53248、49152、45056、40960、36864、32768、28672、24576、20480、16384、12288、8192、4096、0の17通りである。テスト画像生成部702は、均一パッチの配置情報に基づいて、生成過程のテスト画像に各階調の均一パッチを描画する。なお、メインマーカー903、サブマーカー902、均一パッチ904は、不等間隔で配置しても構わない。また、配置する個数は、上記のものに限定されない。また、メインマーカー903の形状として十字形は一例であり他の形状でもよい。また、サブマーカー902も基準パターンの検出枠を設定することができればよく、その形状は矩形に限定されない。例えば、メインマーカーの形状を菱形にし、サブマーカーの形状を円形にしても構わない。図8のフローチャートの説明に戻る。
S802では、サブマーカー検出部703が、スキャン画像上に存在するすべてのサブマーカーを検出する。この検出には、例えば公知のテンプレートマッチング手法を用いる。例えば左上隅に配置されたサブマーカー915を検出する場合は、これを囲む破線で示す領域919内の画素毎に、サブマーカーの画像(黒ベタの125画素四方の正方形の画像)との類似度を求める。そして、求めた類似度が最大となる画素位置を、サブマーカー915の中心位置として特定する。このときに用いるサブマーカーの画像データ(形状情報)はテスト画像パラメータ記憶部701から取得する。類似度の尺度としては、例えばZNCC(Zero Means Normalized Cross Correlation)などを適用すればよい。残りのサブマーカー916~918を検出する場合は、それぞれ、領域920~922において同じ処理を実行することになる。
S803では、メインマーカー検出部705が、メインマーカーを検出するための枠をスキャン画像上に設定する。図10は、メインマーカーの検出枠が設定された状態を示す図である。図10において、メインマーカー913を囲む破線の枠1001が、設定された検出枠を示している。検出枠を設定する際には、まず、座標変換部704にて、S802で求めたサブマーカーの中心位置と、メインマーカーの配置情報に基づいて、メインマーカーの理想位置を求める。メインマーカーの理想位置は、スキャン画像911において、メインマーカーの中心が存在することが見込まれる座標である。ここで、図11の(a)及び(b)を参照して、メインマーカーの理想位置を求める方法を説明する。図11(a)にはテスト画像901の座標が示され、図11(b)にはスキャン画像911の座標が示されている。なお、図11(b)は説明のため極端な歪みが生じた状態としている。図11(a)において、4つの黒丸1101~1104は、テスト画像901における、四隅のサブマーカー902それぞれの中心位置を示している。サブマーカーの中心位置は、サブマーカーの配置情報と形状情報とに基づいて算出される。図11(a)において、×印1105は、理想位置を算出する対象の注目するメインマーカーの中心位置を示している。メインマーカーの中心位置は、メインマーカーの配置情報と形状情報とに基づいて算出される。図11(a)における“αX”と“αY”は、4つの黒丸1101~1104で囲まれる矩形内において、×印で示すメインマーカーの中心位置1105を、X方向とY方向のそれぞれについて0~1の比率で表現した値である。一方、図11(b)における4つの黒丸1106~1109は、S802で検出したサブマーカーの中心位置を示している。ここで、4つの黒丸を表すベクトルva~vdを、図11(b)に示す通り定義する。この場合において、ベクトルvaの起点はスキャン画像の左隅である。そして、図11(b)において、×印1110は、図11(a)における×印1105に対応する位置である。このとき、×印1110の位置を表すベクトルvoutは、以下の式(2)で表される。
vout=va+αXvb+αYvc+αXαYvd ・・・式(2)
上記式(2)を用いることで、テスト画像901の座標を、スキャン画像911の座標に変換することができる。この変換は、疑似アフィン変換、もしくは共一次変換と呼ばれる。座標変換部704は、この変換処理を全てのメインマーカーに対して行って、各メインマーカーの理想位置を求める。そして、メインマーカー検出部705は、上述のようにして求められた各メインマーカーの理想位置を中心として、メインマーカーの形状情報で特定される各メインマーカーを囲む検出枠を設定する。図8のフローチャートの説明に戻る。
S804では、メインマーカー検出部705が、スキャン画像上に存在するすべてのメインマーカーを検出する。具体的には、S803で設定した各検出枠について、その領域内における画素値の重心位置を求める。例えば、前述の図10において、メインマーカー913の中心位置は、検出枠1001の領域内における画素値の重心位置とする。なお、図9(b)に示す輝度変換後のスキャン画像911では、暗い領域ほど画素値が小さくなる。そこで、重心位置を求める際は、画素値を反転した画像を用いるのが望ましい。なお、メインマーカーの中心位置は、S802におけるサブマーカーの検出と同様、公知のテンプレートマッチング手法を用いて検出しても構わない。
S805では、17種類(すなわち、17階調)の均一パッチそれぞれに対して以下のS806~S813の処理を適用するべく、注目する均一パッチが決定される。そして、S806では、ブラックのノズル列101が有する全てのノズルそれぞれに対して以下のS807~S812の処理を適用するべく、注目するノズルが決定される。本実施形態では、均一パッチのX方向のサイズを6637画素とした。そのため、S807~S812の処理が、6637個のノズルに対して順に適用されることになる。
S807では、経路設定部706が、S804で検出したメインマーカーの位置に基づいて、スキャン画像911の画素値を積分する経路を設定する。この経路は、各ノズルの記録経路でもある。積分によって得られた累積加算後の画素値を要素数で割った値は、各ノズルの記録経路における平均的な輝度値である。この輝度値を各ノズルに対応付けることにより、ノズル毎の階調再現関数が得られる。ここで、図12及び図13(a)~(d)を参照して、どのようにして経路設定を行うのかを具体的に説明する。図12に示す輝度変換後のスキャン画像911において、テスト画像901に対応する領域912内の矢印1201~1217は、ある同一ノズルの記録経路上に位置し、画素値を積分する経路を示す。なお、均一パッチの上端と下端は、紙白との境界に近く、画素値の信頼度が低いため、積分の対象とはしない。図12において、「+」マーク1218~1226はS804で検出した各メインマーカーの位置を表し、検出した各メインマーカーの位置の間が点線で結ばれている。以降、この点線で囲まれる1つ1つの領域を「局所領域」と呼ぶこととする。本実施形態では、輝度変換後のスキャン画像911を、図12に示すように複数の局所領域に分割し、局所領域毎に異なる座標変換パラメータを設定する。これにより、用紙の伸縮や光学収差などで、スキャン画像911におけるテスト画像901に対応する領域912が、テスト画像901に対して局所的に歪んでいても、スキャン画像911の画素値(輝度値)を所定のノズルに正確に対応付けることを可能にする。
図13(a)はテスト画像901における座標を示しており、図13(b)はスキャン画像911における対応する座標を示している。そして、図13(b)における9つの黒丸1218~1226は、検出した各メインマーカーの位置であり、図12における同一番号の「+」マークの位置を示している。なお、図13(b)では説明のために、スキャン画像911に極端な歪みが発生した状態としていることに留意されたい。図13(b)における実線の矢印1202は、図12における矢印1202に相当し、図12における上から2つ目の均一パッチ1230の画素値を積分する経路を示している。また、図13(b)における×印1312は、矢印1202で示す経路上の任意の点を示す。図13(a)における9つの黒丸1301~1309は、テスト画像901において、図13(b)の黒丸1218~1226に対応する位置を示す。図13(a)の実線の矢印1310は、図13(b)において矢印1202で示す経路を、テスト画像901の座標系で示したもので、各ノズルのインク吐出方向である用紙搬送方向(Y方向)と向きが同じである。図13(a)において、×印1311は、図13(b)において矢印1202で示す経路上の任意の点1312を、テスト画像901の座標系で示すものであり、矢印1310で示す経路上に位置している。
経路設定部706は、まず、図13(a)の矢印1310に示すような経路を、テスト画像901の座標系で、ノズル毎に設定する。そして、×印1311で示すような経路上の点毎に、スキャン画像911において対応する点を求める。例えば、点1311に対応するスキャン画像911上の点は、図13(b)における点1312である。このとき、点1312の座標は、以下の方法で求めることができる。
まず、座標変換前の点(ここでは、点1311)を含む局所領域を求める。これは、座標変換前の点1311の座標と、メインマーカーの配置情報とを比較することで求められる。点1311を含む局所領域は、4つの黒丸(1305、1306、1308、1309)で囲まれる矩形領域である。そして、座標変換前の点を含む局所領域内において、座標変換前の点の位置を、X方向とY方向のそれぞれについて0~1の比率で表現する。図13(a)において、αXとαYは、点1311を含む局所領域内において、点1311の位置をそれぞれ0~1の比率で表現した値である。
次に、点1311を含む局所領域に含まれる点の座標変換に用いる、座標変換パラメータを設定する。いま、図13(a)において4つの黒丸(1305、1306、1308、1309)で囲まれる局所領域は、スキャン画像911においては、同じく4つの黒丸(1222、1223、1225、1226)で囲まれる領域に対応する。このような、スキャン画像911において対応する局所領域は、S804で検出した各メインマーカーの位置に基づいて設定する。そして、4つの黒丸(1305、1306、1308、1309)で囲まれる局所領域に含まれる点の座標変換に用いる座標変換パラメータとして、図13(b)に示すベクトルva~vdを設定する。そして、点1311に対応する位置である、点1312の位置を特定するベクトルvoutを、前述の式(2)により求める。これにより、テスト画像901の座標を、スキャン画像911の座標に変換することができる。なお、座標変換前の点が、異なる局所領域に含まれる場合は、αXとαY、および座標変換パラメータは別途設定する。例えば、座標変換前の点が、図13(c)の点1313の場合、当該点は、4つの黒丸(1301、1302、1304、1305)で囲まれる局所領域に含まれる。そのため、まず、この局所領域内において、座標変換前の点の位置を、X方向とY方向のそれぞれについて0~1の比率で表現する。すなわち、図13(c)に示すようにαXとαYの値を設定する。また、この局所領域に対応する領域は、図13(d)において、4つの黒丸(1218、1219、1221、1222)で囲まれる領域である。そのため、座標変換パラメータとして、図13(d)に示すベクトルva~vdを設定する。そして、点1313に対応する点1314の位置を、前述の式(2)により求める。
このようにして経路設定部706は、テスト画像901の座標系でノズル毎に設定した経路上の全ての点(画素位置)に対して、上述の、局所領域毎に異なる座標変換パラメータを用いた座標変換処理を適用する。これにより、スキャン画像911の画素値を積分する各ノズルに対応した経路(例えば、図12における矢印1201、1202、1203、・・・1216、1217で示す経路)を求める。図8のフローチャートの説明に戻る。
S808では、画素値取得部707が、S807で設定された経路上の全ての点に対しS809とS810の処理を順次適用するべく、経路上の点のうち注目する点を決定する。そして、続くS809にて、S808で決定した注目点における画素値を取得する。この場合において、S807で設定された経路上の注目点の座標値は、一般的に、整数値にはならず、小数を含む値となる。そのため、経路上において注目点として決定された各点の画素値(サブピクセル位置の画素値)を、バイリニア補間といった補間処理によって取得する。なお、補間処理の詳細は後述する。そして、S810では、補間処理で取得した画素値を、S807で設定された経路に沿って積分(累積加算)する。
S811では、経路上の全ての点に対して画素値の取得処理が完了したか否かが判定される。未処理の点があればS808に戻って、次の点が注目点に決定されて処理が続行される。一方、経路上の全てについて画素値の取得処理が完了していれば、S812に進む。
S812では、平均化部708が、累積加算後の画素値(積分値)に対して平均化処理、具体的には、積分値を累積加算に用いた要素の数で割る処理を行う。これにより、各ノズルの記録経路における平均的な輝度値が求まる。こうして求めた値を、注目ノズルの階調再現関数の値として決定する。
S813では、ノズル列内の全てのノズルに対してS812までの処理が完了したか否かが判定される。未処理のノズルがあればS806に戻って、次のノズルが注目ノズルに決定されて処理が続行される。一方、ノズル列内の全てのノズルが処理されていれば、S814に進む。
S814では、17種類の均一パッチの全てに対してS813までの処理が完了したか否かが判定される。未処理の均一パッチがあればS805に戻って、次の均一パッチが注目パッチに決定されて処理が続行される。一方、17種類の全ての均一パッチが処理されていれば、本処理を終える。
以上が、本実施形態に係る、ノズル毎の階調再現関数I_x(d)の導出処理の内容である。なお、本実施形態では、S802にてサブマーカーを検出し、その結果に基づいて、S803にてメインマーカーの検出枠を設定したが、メインマーカーの検出枠の設定方法は、この方法に限定されない。例えば、プリンタ10の用紙搬送の精度が高く、インラインセンサ107の光学収差の影響が少ない場合は、スキャン画像911において常に固定された位置を検出枠として設定しても構わない。すなわち、前述の図8のフローのS802とS803の各処理、及び、これら処理を実行するサブマーカー検出部703、座標変換部704は省略可能である。
(補間処理)
続いて、S809における補間処理の詳細を説明する。図14(a)は、本実施形態における補間処理の方法を説明する図であり、前述の図13(b)における点1312の位置の画素値(サブピクセル位置の画素値)を求める様子を示している。図14(a)における黒丸は、スキャン画像911を構成する画素を示している。これら黒丸が表す点の座標値は整数値であるため、その画素値については補間処理を行わずに取得することができる。
本実施形態では、注目点に対応するサブピクセル位置の画素値を、バイリニア補間によって求める。なお、図14の(b)及び(c)は、後述の実施形態2における補間処理の方法を説明する図である。
図14(a)に示すとおり、点1312の位置の、サブピクセル位置の画素値をバイリニア補間で求める場合は、まず、点1312を囲む4つの点の画素値を取得する。次に、点1312の座標値の小数部分であるp_xとp_yを求める。ここで、スキャン画像911の画素値を、図14(a)に示すx、yの座標を用いてI(x,y)と表記することとする。この場合、点1312の位置の、サブピクセル位置の画素値I(x+p_x、y+p_y)は、以下の式(3)で表される。
I(x+p_x、y+p_y)=I_y0+(I_y1-I_y0)×p_y
・・・式(3)
上記式(3)において、I_y0とI_y1は計算過程で用いる変数であり、それぞれ以下の式(4)及び式(5)で表される。
I_y0=I(x,y)+(I(x+1、y)-I(x,y))×p_x
・・・式(4)
I_y1=I(x、y+1)+(I(x+1、y+1)-I(x、y+1))×p_x
・・・式(5)
このようなバイリニア補間による補間処理によって、注目点に対応するサブピクセル位置の画素値が求められる。
(本実施形態の効果の説明)
本実施形態では、テスト画像上のXYの各方向に3個以上のメインマーカーを配置するため(図9(a)を参照)、スキャン画像の歪み補正を行う局所領域の境界を、隣り合う局所領域間で共有できる(図12を参照)。そのため、座標変換パラメータに関連性を持たせ、変換前後の座標の対応関係を、隣接する局所領域間で連続的に変化させることができる。具体例を使って詳しく説明する。図15(a)は、前述の図13(a)に示す4つの局所領域のうち上段2つの局所領域を示しており、当該2つの局領領域を跨ぐ線分1501が描かれている。この線分1501に対し、前述した局所領域毎の疑似アフィン変換を適用すると、図15(b)のようになる。すなわち、変換後の線分は、2つの局所領域の境界において端部が一致した折れ線(線分1502と線分1503とからなる)のようになる。このように本実施形態によれば、変換前後の座標の対応関係を、隣接する局所領域間で連続的に変化させることができる。一方、公知の変換処理として、例えば射影変換を局所領域毎に適用した場合は、図15(c)のようになる。すなわち、変換後の線分は、2つの局所領域の境界において端部が一致せずに離間した2本の線分1504と1505のようになる。このように、変換前後の座標の対応関係が隣接する局所領域間で不連続になると、各局所領域の端部において、所定のノズルに対応する領域が切換わる際の、歪み補正後の画素値(所定のノズルに対応付ける画素値)に、意図しない段差が発生してしまう。図16(a)~(d)は、局所領域毎の疑似アフィン変換を適用することで、変換前後の座標の対応関係を隣接する領域間で連続的に変化させられることを示す図である。図16(a)と図16(c)は変換前の座標を示し、図16(b)と図16(d)は変換後の座標を示す。図16(a)及び(c)において、×印で示す点1601は、線分1501と局所領域の境界とが交わる点を示し、図16(b)及び(d)において、×印で示す点1602は、座標変換後において点1601に対応する点を示す。また、図16(a)と図16(b)は、左側の局所領域のパラメータ(αX1=1、αY1=0~1の値)を用いて座標変換を行う様子を示す。そして、図16(c)と図16(d)は、右側の局所領域のパラメータ(αX2=0、αY2=αY1)を用いて座標変換を行う様子を示す。このとき、左右のどちらの局所領域のパラメータを用いても、境界上の点(例えば点1601)は、同じ位置(点1602)に変換される。以下、詳しく説明する。
まず、図16(a)と図16(b)を参照して、左側の局所領域のパラメータ(αX1=1、αY1=0~1の値)を用いる場合の、変換後の位置vout1を求める方法を説明する。この場合、座標変換パラメータであるベクトルva1~vd1を図16(b)に示すように設定すると、変換後の位置を表すベクトルvout1は、以下の式(6)で表される。
vout1=va1+αX1vb1+αY1vc1+αX1αY1vd1
=(va1+vb1)+αY1(vc1+vd1) ・・・式(6)
次に、図16(c)と図16(d)を参照して、右側の局所領域のパラメータ(αX2=0、αY2=αY1)を用いる場合の、変換後の位置vout2を求める方法を説明する。この場合、座標変換パラメータであるベクトルva2~vd2を図16(d)に示すように設定すると、変換後の位置を表すベクトルvout2は、以下の式(7)で表される。
vout2=va2+αX2vb2+αY2vc2+αX2αY2vd2
=va2+αY2vc2 ・・・式(7)
図16(b)と図16(d)から明らかなように、式(7)の右辺第一項のva2は、式(6)の右辺第一項の(va1+vb1)と一致する。また、式(7)の右辺第二項のvc2は、式(6)の右辺第二項の(vc1+vd1)と一致する。また、図16(a)と図16(c)から明らかなように、αY2=αY1であるため、式(7)の右辺は、va2+αY2vc2=va2+αY1vc2となる。ここに前述のva2=(va1+vb1)と、vc2=(vc1+vd1)を代入すると、式(7)の右辺は、va2+αY2vc2=va2+αY1vc2=(va1+vb1)+αY1(vc1+vd1)となり、式(6)の右辺と一致する。すなわち、左右のどちらの局所領域のパラメータを用いても、境界上の点(例えば1601)は、同じ位置(1602)に変換される。
以上のとおり、本実施形態によれば、変換前後の座標の対応関係を、隣接する局所領域間で連続的に変化させることができる。そのため、局所領域の端部において、所定のノズルに対応する領域が切換わる際の、スキャン画像の歪み補正後の画素値(所定のノズルに対応付ける画素値)の変化を滑らかにすることができる。ここであらためて、図17(a)及び(b)を参照して分かりやすく説明する。図17(a)において2本の矢印1701及び1702は、変換前の隣接する2つのノズルの記録経路をそれぞれ示しており、それぞれ異なる局所領域に含まれている。本実施形態の手法によれば、これら記録経路は、図17(b)において2本の矢印1703及び1704が示すように、ほぼ平行になるように変換される。そのため、スキャン画像911の画素値を、矢印1703及び1704が示す経路に沿って積分して得られたそれぞれの値の間には、座標変換に起因する段差が発生しない。そのため、本実施形態の手法で導出したノズル毎の階調再現関数をシェーディング補正で用いることにより、プリント物上の画像に発生するスジムラを好適に低減できる。
[実施形態2]
サブピクセル位置の画素値を補間処理で求めることは、デジタル信号に標本化関数を畳み込んでアナログ信号を復元し、所望するサブピクセル位置のアナログ信号値をサンプリングすることに相当する。実施形態1では、サブピクセル位置の画素値を求める際にバイリニア補間を用いたが、このバイリニア補間で使用される標本化関数は、孤立した三角波に相当する。この場合、エイリアス成分が除去されずに残ってしまう。つまり、実施形態1の手法によって得られるノズル毎の階調再現関数には、バイリニア補間に起因するエイリアス成分が、意図しない誤差として含まれていることになる。その結果、シェーディング補正を実施して出力したプリント物上の画像にわずかなスジムラが視認されることがあった。そこで、エイリアス成分の除去に関して理想的な標本化関数であるsinc関数を用いた補間処理を行う態様を、実施形態2として説明する。
なお、画像形成システムの基本構成といった実施形態1と共通の内容については説明を省略し、以下では本実施形態の特徴であるサブピクセル位置の画素値を取得する処理(前述の図8のフローチャートのS809)を中心に説明を行うものとする。
図18は、本実施形態に係る、ノズル毎の階調再現関数I_x(d)の導出処理を実現する、ホストPC20の機能ブロック図である。実施形態1の図7の機能ブロック図と共通の処理部については、図7と同じ番号が振られている。図7との違いは、標本化関数生成部1801が追加されている点である。本実施形態の場合、画素値取得部707’は、標本化関数生成部1801で生成したsinc関数を用いて補間処理を行い、サブピクセル位置の画素値を取得する。
ここで、前述の図13(b)における点1312が示すサブピクセル位置の画素値を取得する場合について、図14(b)を参照しつつ説明する。図14(b)において黒丸は、図14(a)と同様、スキャン画像911を構成する画素を示す。前述のとおり、これら黒丸の位置の座標値は整数値であるため、その画素値は補間処理を行わずに取得可能である。
点1312が示すサブピクセル位置の画素値を取得する際は、まず、点1312を中心とした矩形領域の画素値を取得する。そして、図14(b)に示すように、点1312の座標値の小数部分であるp_xとp_yを求める。この際の矩形領域のサイズは、標本化関数のタップ数に相当する。このタップ数は、標本化関数生成部1801の入力パラメータであり、ノズル列方向のタップ数をnX、用紙搬送方向のタップ数をnYで表すこととする。図14(b)の場合、nX=9、nY=9である。いま、スキャン画像911における位置(x,y)の画素値をI(x,y)と表すと、点1312の画素値I(x+p_x、y+p_y)は、以下の方法で求められる。ここで、標本化関数としてのsinc関数を、sinc(z)=sin(πz)/(πz)とした。
まず、y-4からy+4の行毎に、スキャン画像911の画素値とsinc関数との積和演算を行い、行毎の累積値S(h)を求める。これを式で表すと、以下の式(8)のようになる。
S(h)=Σ(I(x+w、y+h)×sinc(a_x(w-p_x)))
・・・式(8)
上記式(8)において、高さを表すhの範囲は-4から+4の整数である。例えば、y-4の行の累積値はS(-4)である。また、Σは、幅を表すwについて加算することを示し、wの範囲は-4から+4の整数である。また、a_xは、ノズル列方向の帯域を制限するパラメータである。
次に、得られた各行の累積値S(h)とsinc関数との積和演算を行い、サブピクセル位置の画素値I(x+p_x、y+p_y)を求める。これを式で表すと、以下の式(9)のようになる。
I(x+p_x、y+p_y)=Σ(S(h)×sinc(a_y(h-p_y)))
・・・式(9)
上記式(9)において、Σは、高さを表すhについて加算することを示し、hの範囲は-4から+4の整数である。また、a_yは、用紙搬送方向の帯域を制限するパラメータである。
標本化関数生成部1801は、上記式(8)及び式(9)で用いるsinc関数を、注目点に対応するサブピクセル位置の画素値を求める都度算出する。標本化関数生成部1801に入力パラメータとして与えられる帯域制限パラメータa_x、a_yは、公知のサンプリング定理に基づき、エイリアス成分を完全に除去できるように設定される。具体的には、前述の図8のフローのS807で行われる座標変換により、任意の2点間の距離が縮小する場合、最も縮小の程度が大きい場所における距離の比率を、a_x、a_yとして用いる。なお、任意の2点間の距離が縮小しない場合は、a_xとa_yはそれぞれ1とする。例えば、各ノズル列の記録解像度が600dpiで、インラインセンサ107の読取解像度が1200dpiの場合、座標変換により任意の2点間の距離は0.5倍になる。この場合、a_xとa_yはそれぞれ0.5とする。また、各ノズル列の記録解像度と、インラインセンサ107の読取解像度とが同じであっても、用紙の伸縮や光学収差により、座標変換を行った際に任意の2点間の距離が縮小し得る。例えば、用紙の縮小によって用紙搬送方向における2点間の距離が0.97倍になるケースであれば、a_y=0.97とする。同様に、用紙の伸縮とインラインセンサ107の光学収差により、ノズル列方向における2点間の距離が0.95倍になるケースであれば、a_x=0.95とする。なお、a_xとa_yは、局所領域毎に異なった値を設定しても構わない。また、検出したメインマーカーの位置に基づいてa_xとa_yを動的に設定しても構わない。
(変形例1)
理想的な標本化関数であるsinc関数を用いた補間処理にてサブピクセル位置の画素値を取得する場合、座標変換後の座標値の小数部分p_x、p_yは、サブピクセル位置の画素値を求める位置によって変化する。そのため、サブピクセル位置の画素値を1つ取得する度に複数のsinc関数を算出する必要があり(上述の式(8)及び式(9)を参照)、処理負荷が大きい。そこで、サブピクセル位置の画素値を取得する際に必要な標本化関数を補間処理に先立って生成・保持しておいてもよい。以下、詳しく説明する。
本変形例では、上述の式(8)及び式(9)で使用するsinc関数を補間処理の実行前に生成しておき、生成したsinc関数をRAM202に保持しておく。具体的には、前述の図8のフローのS804(メインマーカーの検出)の完了後からS809(注目点の画素値を取得)を実行するまでの間に標本化関数生成部1801にて生成し、例えばルックアップテーブル(LUT)の形式で保持しておく。そして、補間処理を実行するタイミングで、画素値取得部707’がLUTを参照して、上述の式(8)及び式(9)を用いた演算処理を行う。LUTは式(8)及び式(9)のそれぞれについて以下のように作成する。
まず、式(8)で用いるLUTは、wとp_xの2つの軸を持つ二次元のテーブルとする。図14(b)に示したように、標本化関数のタップ数が9×9の場合、wの範囲は-4から+4の整数である。この場合、w軸の要素数は9個である。一方、p_xは0から1までの小数を含む値で、例えば0から1までの値を1000等分した値とする。よって、p_x軸の要素数は1001個とする。このようなLUTによって決定される値が、式(8)におけるsinc(a_x(w-p_x))となる。
同様に、式(9)で用いるLUTは、hとp_yの2つの軸を持つ二次元のテーブルとする。図14(b)に示したように、標本化関数のタップ数が9×9の場合、hの範囲は-4から+4の整数である。そのため、h軸の要素数は9個である。一方、p_yは0から1までの小数を含む値で、例えば0から1までの値を1000等分した値とする。よって、p_y軸の要素数は1001個である。このようなLUTによって決定される値が、式(9)におけるsinc(a_y(h-p_y))となる。
なお、両LUTを参照する際は、それぞれ引数として与えるp_xの値及びp_yの値を、それぞれLUTのp_x軸及びp_y軸が持つ最も近い値に丸めればよい。このように、補間処理を実施する前に、標本化関数を算出してLUTとしてメモリに保持しておくことで処理負荷を大幅に低減できる。
(変形例2)
理想的な標本化関数としては、上述のsinc関数に窓関数を適用したLanczos関数でもよい。この場合も、実施形態1のバイリニア補間の場合に比べて好適な結果を得ることができる。ただし、sinc関数やLanczos関数を用いた補間処理は、バイリニア補間を用いた処理に比べ、処理負荷が大きい。そこで、例えば、図14(c)に示すように、標本化関数の用紙搬送方向のタップ数nYを、ノズル列方向のタップ数nXに比べて小さくし、処理負荷を低減するようにしてもよい。タップ数を小さくすると、無限のタップ数を持つ理想的な標本化関数に対する周波数特性のズレが大きくなる。その結果、取得したノズル毎の階調再現関数の精度が低下してしまうという弊害があるが、これが実際上問題となることはない。実施形態1で説明したとおり、スキャン画像911の画素値は、用紙搬送方向に近い方向に沿って積分されるため(図12の矢印1201~1217を参照)、階調再現関数の導出精度に対し、タップ数nYを小さくすることは殆ど影響しないためである。用紙搬送方向のタップ数nYを、図14(b)の例に比べて大幅に小さくした図14(c)の例においても、ノズル列方向のタップ数nXは同じであるため、ノズル毎の階調再現関数は、ほぼ同じ値となる。
また、均一パッチの明るさに基づいてノズル列方向のタップ数nXを変化させることによって処理負荷を低減してもよい。ヴェーバー・フェヒナーの法則により、輝度の違いは、明るいパッチほど目立たなくなることが知られている。輝度変換後のスキャン画像911では、明るいパッチほど(図12において下のパッチほど)、ノズル列方向のタップ数nXを小さくしても、視覚への影響を抑制できることになる。すなわち、ノズル毎の階調再現関数を導出する際に、明るいパッチほどノズル列方向のタップ数nXを小さくすることで、シェーディング補正を実施した際のスジムラの悪化を抑制しつつ、処理負荷を低減することができる。さらには、ノズル列方向のタップ数nXだけでなく、明るさに応じて用紙搬送方向のタップ数nYを変化させても構わない。
以上のとおり、本実施形態によれば、バイリニア補間を行う実施形態1に比べ、より精度の良いノズル毎の階調再現関数を取得できる。その結果、シェーディング補正を実施して出力したプリント物上の画像においては、スジムラの発生がさらに抑制される。
[実施形態3]
実施形態1のメインマーカー検出処理(S804)では、メインマーカーの中心位置を、S803で求めた検出枠(図10の1001を参照)内の画素値の重心位置としていた。ここで、インクの飛び散りや微少なゴミなどによって用紙が汚れることがあり、このような汚れが検出枠の中に存在すると、S804で求められる重心位置に意図しない誤差が含まれてしまう。また、メインマーカーの中心位置を、公知のテンプレートマッチング手法で検出する場合であっても、検出枠の中に汚れがあると、検出結果に意図しない誤差が含まれてしまう。いずれにせよ、メインマーカーの検出結果に誤差を含んでいると、S807の経路設定処理において誤った経路が設定されてしまい、ノズル毎の階調再現関数を正しく導出できなくなる。そこで、検出枠の中に汚れがある可能性が高く、メインマーカーの検出結果に誤差を含んでいると推認される場合に検出結果を補正する態様を、実施形態3として説明する。
なお、先の実施形態と共通の内容については説明を省略し、以下では本実施形態の特徴であるメインマーカーの検出結果を補正する処理を中心に説明を行うものとする。
図19は、本実施形態に係る、ノズル毎の階調再現関数I_x(d)の導出処理を実現する、ホストPC20の機能ブロック図である。実施形態1の図7の機能ブロック図と共通の処理部については、図7と同じ番号が振られている。図7との違いは、メインマーカー位置補正部1900が追加されている点である。本実施形態の場合、メインマーカー検出部705の検出結果が、メインマーカー位置補正部1900において必要に応じて補正される。図19に示すとおり、メインマーカー位置補正部1900は、減算部1901、異常判定部1902、局所変位ベクトル補正部1903及び加算部1904を有する。以下、本実施形態における、ノズル毎の階調再現関数を導出する処理について詳しく説明する。
メインマーカーの検出結果が入力されると、まず、減算部1901において、スキャン画像911の局所的な歪み度合いを示す局所変位ベクトルを求める処理がなされる。ここで、図20の(a)~(c)を参照して、局所変位ベクトルについて説明する。図20(a)において、実線の「十字」の中心(交差する2本の線分の交点)は、座標変換部704が出力する、メインマーカーの理想位置を示す。このメインマーカーの理想位置は、前述の通り、サブマーカー検出部703にて検出されたサブマーカーの位置に基づきメインマーカーの配置情報を補正することで求められる。そのため、メインマーカーの理想位置は、スキャン画像911に局所的な歪みが発生していないと仮定したときに、メインマーカーが存在することが見込まれる位置であると言える。一方、図20(a)において、破線の「十字」の中心(交差する2本の線分の交点)は、メインマーカー検出部705にて検出されたメインマーカーの位置(検出位置)を示しており、スキャン画像911の局所的な歪みの影響が付加されている。そのため、メインマーカーの検出位置を示す位置ベクトルvr(w、h)から、メインマーカーの理想位置を示す位置ベクトルvi(w、h)を減算したベクトルve(w、h)は、スキャン画像911における局所的な歪み度合いを示すことになる。このve(w、h)を、局所変位ベクトルと呼ぶ。この場合において、wはメインマーカーのノズル列方向の位置を示すインデックスである。メインマーカーがノズル列方向に85個配置されている場合、wは0~84の整数となる。また、hはメインマーカーの用紙搬送方向の位置を示すインデックスである。メインマーカーが用紙搬送方向に18個配置されている場合、hは0~17の整数となる。なお、図20(a)では、説明の便宜上、実線の「十字」と破線の「十字」との間隔を実際よりも広めに示していることに留意されたい。求めた局所変位ベクトルve(w、h)は、異常判定部1902及び局所変位ベクトル補正部1903に入力される。
異常判定部1902は、入力された局所変位ベクトルve(w、h)に基づいて、各メインマーカーの検出結果が正常かどうか、すなわち、許容できないレベルの誤差を含んでいないかどうかを判定する。具体的には、まず、着目するメインマーカー(着目マーカー)を中心とした所定範囲を処理対象領域として設定する。そして、着目マーカーの局所変位ベクトルと、設定した処理対象領域内に存在する着目マーカー以外のメインマーカー(以下、「周辺マーカー」と呼ぶ)の局所変位ベクトルとを比較することにより、着目マーカーの検出結果が正常かどうかを判定する。この処理を、全てのメインマーカーに対して適用(すなわち、着目マーカーを順次変更し、それに応じて処理対象領域をスライド)することで、メインマーカーそれぞれの検出結果について正常かどうかが判定される。図20(b)は、図20(a)におけるメインマーカー2001に着目し、これを中心とする3×3の範囲2003を処理対象領域として設定した場合の異常判定処理の様子を示している。図20(b)において、着目マーカー2001に対応する局所変位ベクトル2011は、8つの周辺マーカーの局所変位ベクトルと、その向きと長さがほぼ同じである。この場合は、着目マーカーの検出結果は正常であると判定する。図20(c)は、図20(a)におけるメインマーカー2002に着目し、これを中心とする3×3の範囲2004を処理対象領域として設定した場合の異常判定処理の様子を示している。図20(c)において、着目マーカー2002に対応する局所変位ベクトル2012は、8つの周辺マーカーの局所変位ベクトルと、その向きが大きく異なっている。用紙の伸縮や、光学収差によるスキャン画像911の局所的な歪みの度合いは、場所によって急激に変化することがほとんど無い。したがって、この場合は、着目マーカーは、汚れなどの影響を受けている可能性が高く、許容できないレベルの誤差を含んでいると考えられるため、検出結果の信頼性が低い(正常ではない)と判定する。
異常判定処理の上記内容についてさらに詳しく説明する。いま、設定された処理対象領域内の9個の局所変位ベクトルve(w、h)を、“0~8”のインデックスiを用いてve(i)で表すこととする。この場合において、着目マーカーのインデックスを“4”とする。図20(b)及び(c)において、各矢印は局所変位ベクトルを示し、各局所変位ベクトルの右横にある括弧書きの数字はインデックスiの値を示している。また、この各局所変位ベクトルve(i)のX成分をe_X(i)、Y成分をe_Y(i)で表すこととする。このとき、e_X(i)のメジアン値e_X_Mと、e_Y(i)のメジアン値e_Y_Mをそれぞれ求め、着目マーカーの局所変位ベクトルの各成分、すなわち、e_X(4)およびe_Y(4)との差分絶対値をそれぞれ求める。そして、求めた差分絶対値が所定の閾値を超える場合は、許容できないレベルの誤差を含んでいると見做し、着目マーカーの検出結果が正常ではないと判定する。この判定手法を式で表すと、以下の式(10)と式(11)のようになる。
|e_X(4)-e_X_M| > th_X ・・・式(10)
|e_Y(4)-e_Y_M| > th_Y ・・・式(11)
上記式(10)及び式(11)のいずれか一方を満たす場合、着目マーカーの検出結果が正常ではないと判定されることになる。上記所定の閾値としてのth_Xとth_Yには、例えば1.5といった値が入る。なお、本実施形態では処理対象領域のサイズを、着目マーカーを中心とした3×3の範囲とした。しかし、処理対象領域のサイズはこれに限定されるものではない。処理対象領域の最小サイズとしては、着目マーカーとその両隣のメインマーカーを包含する3×1の範囲や、或いは、着目マーカーとその上下のメインマーカーを包含する1×3の範囲でもよい。また、用紙搬送方向に比べて、ノズル列方向の方がメインマーカーの間隔が狭いため、例えばノズル列方向のサイズを“9”、用紙搬送方向のサイズを“3”といった具合に、用紙搬送方向よりもノズル列方向の数を大きくしても構わない。
局所変位ベクトル補正部1903は、異常判定部1902にて検出結果が正常ではないと判定されたメインマーカー(以下、「異常マーカー」と呼ぶ)の局所変位ベクトルを補正する。具体的には、着目する異常マーカーを中心とした所定範囲を処理対象領域として設定し、当該処理対象領域内に存在するメインマーカーの局所変位ベクトルのX成分e_X(i)及びY成分e_Y(i)それぞれについて、異常マーカーの成分を除外して平均化する。そして、得られた両成分それぞれの平均値を、着目する異常マーカーの局所変位ベクトルの新たなX成分とY成分とする。ここでは、処理対象領域のサイズを異常判定処理と同じ3×3の範囲とする。この場合、3×3の範囲内に存在するメインマーカーのうち、異常マーカーを除いた全メインマーカーの局所変位ベクトルについて、X成分e_X(i)とY成分e_Y(i)それぞれの平均値を求める。そして、求めた平均値を、着目する異常マーカーの局所変位ベクトルの新たなX成分とY成分の値とする。なお、処理対象領域内に着目する異常マーカーとは別の異常マーカーが存在する場合もある。この場合は、着目マーカー以外の異常マーカーの局所変異ベクトルも除外して平均値を求めればよい。
なお、本実施形態では局所変位ベクトルを補正する際の処理対象領域のサイズを、異常判定処理における処理対象領域のサイズと同じ3×3の範囲としたが、異なっていても構わない。例えば、異常判定処理においては処理対象領域を9×3の範囲とし、局所変位ベクトルを補正する際の処理対象領域を3×1の範囲としても構わない。また、補正後の値として、e_X(i)やe_Y(i)のメジアン値を用いても構わない。また、本実施形態では、検出結果が正常でないと判定されたメインマーカーだけを着目マーカーとして補正処理を行うこととしているが、すべてのメインマーカーに対して適用しても構わない。すなわち、検出結果が正常と判定されたメインマーカーについても上述の補正処理の対象としても構わない。
加算部1904は、局所変位ベクトル補正部1903が出力する補正後の局所変位ベクトルを、メインマーカーの理想位置を示す位置ベクトルvi(w、h)に加算する。これにより、検出結果が正常でないと判定されたメインマーカーの検出位置が補正され、当該補正後の検出位置が経路設定部706に出力される。
以上のとおり、本実施形態によれば、メインマーカーの検出結果に含まれる誤差を打ち消すような補正を検出結果に対して行う。これにより、スキャン画像911の画素値を積分する経路として、間違った経路が設定されることを回避でき、ノズル毎の階調再現関数をより精度よく導出することができる。
[実施形態4]
実施形態3では、インクの飛び散りや微少なゴミなどの用紙汚れに起因してメインマーカーの検出結果に誤差が含まれる場合に、検出結果そのものを補正することで正しい経路が設定されるようにしていた。次に、誤差を含んでいると考えられるメインマーカーを除外して局所領域を設定することで正しい経路設定を行う態様を、実施形態4として説明する。なお、先行する実施形態と共通の内容については説明を省略し、以下では本実施形態の特徴であるメインマーカーの異常判定処理とその判定結果に基づく経路設定処理を中心に説明を行うものとする。
図21は、本実施形態に係る、ノズル毎の階調再現関数I_x(d)の導出処理を実現する、ホストPC20の機能ブロック図である。実施形態1の図7の機能ブロック図と共通の処理部については、図7と同じ番号が振られている。図7との違いは、異常判定部2101が追加され、その出力が経路設定部706’に入力されている点である。本実施形態の場合、経路設定部706’における局所領域の決定時に異常判定部2101の判定結果が考慮される。以下、詳しく説明する。
異常判定部2101は、メインマーカーの形状情報(元画像)をテスト画像パラメータ記憶部701から取得し、メインマーカーの元画像と、メインマーカーの検出枠内の画像領域とを比較することで、着目マーカーの検出結果が正常か否かを判定する。図22の(a)~(c)は、本実施形態における異常判定処理を説明する図である。図22(a)は、メインマーカーの元画像における白背景部分を拡張して、検出枠と同じサイズで表した元画像である。図22の(b)と(c)はスキャン画像911における検出枠内の画像領域であり、(b)は汚れがない状態、(c)は右下隅に汚れがある状態である。本実施形態の異常判定処理では、前述の図8のフローのサブマーカー検出処理(S802)と同様、検出枠内の画像領域の画素毎に、メインマーカーの元画像との類似度を求める。そして、類似度の最大値が、所定の閾値を下回る場合は、メインマーカーの検出結果が正常ではないと判定する。類似度の尺度として例えばZNCCを用いる場合、検出枠内の画像領域の画素毎に、元画像とのZNCCを求め、その最大値が例えば0.9を下回ると、検出結果が正常でないと判定する。図22(b)のように汚れがない場合はZNCCの最大値はほぼ1となり、検出結果は正常であると判定される。一方、図22(c)のように汚れがある場合はZNCCの最大値が0.9を下回る値となり、検出結果は正常でないと判定される。このように、本実施形態では、メインマーカーの元画像と、スキャン画像における対応する画像領域との類似度に基づいて、メインマーカーの検出結果が正常であるかどうかを判定する。
経路設定部706’は、異常判定部2101での判定結果を考慮して局所領域の範囲を設定して、局所領域毎に座標変換パラメータを設定する。例えば、前述の図12におけるメインマーカー1222の検出結果が正常でない場合は、当該メインマーカー1222を除外して局所領域を設定する。図23は、特定メインマーカーを除外して局所領域の設定を行う様子を説明する図である。本来であれば、メインマーカー1218、1220、1224、1226で囲まれる範囲には、4つの局所領域が設定される。しかし、メインマーカー1222の検出結果が正常でない場合は、図23に示す通り、メインマーカー1218、1220、1224、1226で囲まれる範囲が、1つの局所領域として設定される。なお、この際には、メインマーカー1219、1221、1223、1225の検出位置は無視し、メインマーカー1218、1220、1224、1226の検出位置が用いられる。一方、メインマーカー1224、1225、2401、2402で囲まれる局所領域に対し座標変換パラメータを設定する際は、メインマーカー1225の検出位置を使用する。同様に、メインマーカー1225、1226、2402、2403で囲まれる局所領域に対し座標変換パラメータを設定する際も、メインマーカー1225の検出位置を使用する。このように、経路設定部706’は、検出結果が正常でないと判定されたメインマーカーを除外して局所領域を設定する。後は、実施形態1と同じ方法で、座標変換パラメータを設定し、画素値を積分する経路を求める。
以上のとおり、本実施形態によれば、実施形態3と同様、スキャン画像911の画素値を積分する経路として、間違った経路が設定されることを回避でき、ノズル毎の階調再現関数をより精度よく導出することができる。
[実施形態5]
一般的に、インクジェットプリンタでは、乾燥などによるノズルの目詰まりを防止するために、人の目でほとんど視認できないノズル目詰まり防止パターンを、プリント対象の画像に重畳して印刷出力する。このノズル目詰まり防止パターンが問題となることは通常はないが、ノズル毎の階調再現関数を導出する際には、前述の実施形態3及び4で説明した紙面上の汚れと同様、メインマーカーの検出結果に誤差が含まれる原因となってしまう。そこで、メインマーカーの検出時にノズル目詰まり防止パターンの存在を考慮して誤差が含まれないようにする態様を、実施形態5として説明する。なお、先行する実施形態と共通の内容については説明を省略し、以下では本実施形態の特徴であるメインマーカーの検出処理を中心に説明を行うものとする。
図24は、本実施形態に係る、ノズル毎の階調再現関数I_x(d)の導出処理を実現する、ホストPC20の機能ブロック図である。実施形態1の図7の機能ブロック図と共通の処理部については、図7と同じ番号が振られている。図7との違いは、ノズル目詰まり防止パターン記憶部2401が追加され、メインマーカー検出部705’にノズル目詰まり防止パターンの位置情報が入力されている点である。以下、詳しく説明する。
ノズル目詰まり防止パターン記憶部2401は、ノズル目詰まり防止パターンを構成するドット(以下、「目詰まり防止ドット」と呼ぶ。)それぞれが紙面上のどの位置に出力されるのかを表す位置情報を格納する。メインマーカー検出部705’は、この位置情報に基づいて、各目詰まり防止ドットが誤差として影響しないように、メインマーカーの重心位置を求める。図25の(a)及び(b)は、目詰まり防止ドットが打たれる位置を考慮して、メインマーカーの重心位置を求める様子を説明する図である。図25(a)は、スキャン画像911の一部分を示している。破線の矩形2601は、図8のフローのS803で設定される検出枠であり、枠内の画素を用いてメインマーカー2602の重心位置が求められる。図25(a)において、白背景部分に満遍なく存在する黒点2603が、目詰まり防止ドットである。図25(a)で示されるように、目詰まり防止ドットは、検出枠の中にも打たれてしまうため、メインマーカーの重心位置に影響を与えてしまう。
そこで、本実施形態のメインマーカー検出部705’は、検出枠内に存在する目詰まり防止ドットそれぞれの周辺領域をマスクし、当該周辺領域に含まれる画素を除外して、メインマーカー枠内の重心位置を求める。ここで、周辺領域としては、例えば図25(b)に示すように、検出枠内に存在する各目詰まり防止ドットの出力位置を中心とする円で囲まれる範囲2604とする。この際の円の半径は、スキャン画像の解像度に応じて決定され、600dpiであれば例えば4画素とする。なお、目詰まり防止ドットの出力位置がメインマーカーに近い場合は、一回り小さな円の範囲2605を周辺領域として、メインマーカー2602に周辺領域が掛からないようにする。
(変形例)
メインマーカーの重心位置を求める際にノズル目詰まり防止パターンが影響を及ぼさないようにするための手法は、目詰まり防止ドットの周辺領域に対してマスクを適用する以外にもある。例えば、メインマーカーの配置情報とノズル目詰まり防止パターンの位置情報とに基づいて、メインマーカーの周辺にノズル目詰まり防止パターンを出力しないように制御しても構わない。もしくは、ノズル目詰まり防止パターンが全面に出力されてもメインマーカーの重心位置が変動しないよう、メインマーカーの中心位置に対して対称となるように目詰まり防止ドットを配置してもよい。
以上のとおり、本実施形態によれば、ノズル目詰まり防止パターンが印刷対象の画像に重畳して印刷出力される場合であっても、メインマーカーの検出結果に意図しない誤差が含まれてしまうことを回避することができる。
[実施形態6]
実施形態1で説明した通り、メインマーカーをノズル列方向に多く配置することで、座標変換パラメータを設定する局所領域を細かく設定でき、ノズル毎の階調再現関数の導出精度を高めることができる。しかし、ノズル列方向に配置するメインマーカーの数が多すぎると、隣接するメインマーカー同士が重なってしまい、メインマーカーそれぞれの重心位置を正しく検出することが困難になるという問題がある。そこで、ノズル列方向のドット位置を検出するための図形パターンを付加したテスト画像を印刷出力し、そのスキャン画像における当該図形パターンの検出結果に基づきメインマーカーを追加的に設定して局所領域の数を増やす態様を、実施形態6として説明する。なお、先行する実施形態と共通の内容については説明を省略し、以下では本実施形態の特徴である、ドット位置を検出するための図形パターンの検出結果に基づきメインマーカーを追加設定して局所領域の数を増やす方法を中心に説明を行うものとする。なお、以下の説明では、ドット位置検出パターンの検出結果に基づき追加設定される、現実にはテスト画像上に存在しないが同じ役割を果たす仮想的なメインマーカーを、「仮想メインマーカー」と呼ぶこととする。
図26は、ノズル列方向のドット位置、すなわち、各ノズルのインク滴によって紙面上に形成されたドットのX方向の位置、を検出するための図形パターン(以下、「ドット位置検出パターン」と呼ぶ。)としての縦万線を付加したテスト画像2601の一例を示す図である。このようなドット位置検出パターンを付加したテスト画像を印刷出力し、そのスキャン画像の測定結果に基づいて、S804で検出した各メインマーカーの間に仮想メインマーカーを設定して、局所領域の数を増やす。図27は、ノズル列方向における局所領域の数を、実施形態1の図12の場合に比べて3倍に増やした様子を示す図である。以下、どのようにして局所領域の数を増やすのかについて詳しく説明する。
図26に示すテスト画像2601の場合、その下部に、上述のドット位置検出パターンとして、1画素幅の複数の縦線を設けている。これらの縦線は、ノズル列方向に密集していると各位置の検出が困難になるため、複数段に分けて配置する。図26の例では2段に分けて配置しているが、例えば600dpiの間隔でノズルが並ぶノズル列の場合であれば、縦線のX方向の配置間隔を10画素、縦線のX方向の開始位置を1画素ずつスライドさせつつ10段に分けて配置する。また、1200dpiの間隔でノズルが並ぶノズル列の場合であれば、縦方向のX方向の配置間隔を20画素、縦線のX方向の開始位置を1画素ずつスライドさせつつ20段に分けて配置する。このように配置された縦線のうち一部の縦線のX位置は、メインマーカーの中心のX位置と一致させる。例えば、図26において、縦線2602のX位置は、3つのメインマーカー2610、2612、2603の中心のX位置と一致しており、縦線2604のX位置は、3つのメインマーカー2611、2613、2605の中心のX位置と一致している。このように、一部の縦線のX位置と、メインマーカーの中心のX位置とを一致させることで、縦線のX位置と、メインマーカーの中心のX位置との対応関係を求めることができる。そして、上記一部以外の縦線については、縦線2606や縦線2607のようにメインマーカー同士の間に配置する。そして、各縦線の位置の検出結果と上述の対応関係に基づいて、メインマーカーのない部分に仮想メインマーカーを設定することによって、図27に示すようにノズル列方向の局所領域の数を増やす。なお、テスト画像に付加されるドット位置検出パターンは、均一パッチを配置したテスト画像に含めず、別のテスト画像として、異なるタイミングで出力しても構わない。また、ドット位置検出パターンは、縦線に限定されず、ドット位置を特定可能なものであればどのような形状であっても構わない。例えば、メインマーカーと同じ十字形を複数配置したパターンであっても構わない。
図27には、図26のテスト画像2601を印刷出力して得たプリント物のスキャン画像2701であり、斜めの矩形の枠2702はテスト画像2601に対応する領域である。縦線2703、2713、2714、2715はそれぞれ、図26における縦線2602、2606、2607、2604に対応する。一例として、縦線2703のノズル列方向の位置を求める際は、まず、S803と同様の方法により、サブマーカーの検出位置に基づいて、検出枠2704を求める。そして、S804と同様の方法により、検出枠2704内の画素値の重心位置を求めることにより、縦線2703のノズル列方向の位置を求める。他の縦線についても同様である。
このように、それぞれの縦線のノズル列方向の位置を求めた後は、その結果に基づいて、S804で検出されたメインマーカーの間に仮想メインマーカーを設けるための補間処理を行う。ここで、図27を参照し、S804で検出された各メインマーカーのうちの4つのメインマーカー2705、2706、2707、2708で囲まれる局所領域において、仮想メインマーカーを設定する場合を例に説明する。上記4つのメインマーカー2705、2706、2707、2708で囲まれる局所領域は、図26のテスト画像2601における、メインマーカー2610、2611、2612、2613で囲まれる領域に対応している。そして、図27において、点2709、2710、2711、2712が、補間処理で求められる仮想メインマーカーの位置を示している。これら仮想メインマーカーを用いて元々の局所領域を分割して、ノズル列方向に局所領域を3倍に増やす。つまり、設定された仮想メインマーカーは、新たな局所領域の頂点となる。
ここで、図27に示すスキャン画像2701における本来的なメインマーカーの検出位置を小文字のxとyで表すこととする。例えば、メインマーカー2705の検出位置のノズル列方向の座標をx_2705と表記し、用紙搬送方向の座標をy_2705と表記する。同様に、縦線2703が検出されたノズル列方向の位置を、x_2703と表記する。このとき、補間演算によって求める、仮想メインマーカーとしての点2709のノズル列方向の座標x_2709と、用紙搬送方向の座標y_2709は、以下の式(12)及び式(13)でそれぞれ表される。
x_2709=x_2705+(x_2706-x_2705)÷(x_2715-x_2703)×(x_2713-x_2703) ・・・式(12)
y_2709=y_2705+(y_2706-y_2705)÷(x_2715-x_2703)×(x_2713-x_2703) ・・・式(13)
なお、上記式(12)では、テスト画像2601における縦線2602及び2604のX位置がそれぞれメインマーカー2610及び2611のX位置と一致していることを利用し、縦線2713に対応する点2709を補間演算により求めている。そして、他の仮想メインマーカーとしての点も、同様の補間演算で求めることができる。こうして得られた仮想メインマーカーを用いて、元々の局所領域をより小さな複数の局所領域へと分割することにより、図27に示すように、ノズル列方向における局所領域の数を3倍に増やすことができる。
なお、本実施形態で局所領域の数を増やした場合において、前述の図8のフローのS807にて経路設定を行う際は、着目する経路が属する局所領域を、テスト画像2601における縦線のX位置に基づいて決定する。例えば、図26において、メインマーカー2610、2611、2612、2613で囲まれる元々の局所領域を3つの領域に分割したとする。この場合、着目する経路のX座標が、縦線2606のX座標よりも左のときは、分割した3つの領域のうち、最も左の領域に属すると判定する。同様に、着目する経路のX座標が、縦線2607のX座標よりも右のときは、分割した3つの領域のうち、最も右の領域に属すると判定する。そして、上記以外の場合は、分割した3つの領域の中央の領域に属すると判定する。これにより、実施形態1と同様に、画素値を積分する経路を設定でき、ノズル毎の階調再現関数を導出することができる。
以上のとおり、本実施形態によれば、ドット位置検出パターンの検出結果に基づいて、メインマーカーの間に仮想メインマーカーを設定し、座標変換パラメータを設定する局所領域を細かく設定する。これにより、ノズル毎の階調再現関数の導出精度を高めることができる。
[実施形態7]
ここまで説明した各実施形態では、十字形のメインマーカーを等間隔で並べたパターンを、ノズル列方向の位置の基準を示す基準パターンとしていた。しかし、基準パターンはこれに限定されるものではなく、ノズル列方向の基準となる位置を規定可能な、階調が場所によって変化する図形パターンであればどのようなものでもよい。そこで、本実施形態では、連続性のあるランダムな図形を均一パッチの周辺に配置したパターンを基準パターンとして用いる態様を説明する。なお、先行する他の実施形態と共通の内容については説明を省略することとする。
図28(a)は本実施形態のテスト画像の一例を示す図、同(b)はそれを印刷出力して得たプリント物のスキャン画像を示す図である。図28の(a)及び(b)では、説明の便宜上、ランダムパターンの濃さを薄くして表示している。以下、これらの図を参照して、本実施形態について説明する。いま、図28(a)には、テスト画像2801内に配置された各均一パッチ2804の周辺を、連続性のあるランダムな図形2803で埋めたパターン(以下、「ランダムパターン」と呼ぶ)が示されている。このランダムパターン2803は、例えば、公知のグリーンノイズマスクから生成可能である。なお、テスト画像2801の四隅にある矩形2802はサブマーカーを示している。
図28(b)に示すスキャン画像2811からノズル毎の階調再現関数を導出する場合、まず、先の実施形態で用いたメインマーカーに対応する領域とその中心位置を表す点をテスト画像2801内に設定する。ここでは、図28(a)に示すように、十字型のメインマーカーに対応する領域2805とその中心位置を表す点2806が、各均一パッチ2804の周辺に等間隔でテスト画像2801内に設定される。そして、図28(b)に示すスキャン画像911における、テスト画像2801に対応する位置を、公知のテンプレートマッチング手法により求める。例えば、テスト画像2801における点2806に対応する位置として、スキャン画像2811内の点2816の位置を求める。
スキャン画像2811における対応位置を求める際は、まず、図8のフローのS803と同じ方法で検出枠を求める。図28(b)における矩形の枠2815は、スキャン画像2811上の対応点2816を求めるときに用いる検出枠を示している。この検出枠2815は、テスト画像2801に設定した対応領域2805を包含するように、対応領域2805よりも大きく設定する。そして、検出枠2815内の画素毎に、対応領域2805との類似度を求め、類似度が最大となる画素位置を、スキャン画像2811における対応点2816とする。なお、類似度の尺度としては例えばZNCCを用いればよい。このようにして、実施形態1等で用いた十字型のメインマーカーを等間隔で並べたパターンと同様に、テスト画像の座標と、そのプリント物のスキャン画像の座標との対応関係が求まる。そして、先の実施形態のときと同様、局所領域毎に座標変換パラメータを設定し、ノズル毎の階調再現関数を導出する。
(変形例)
メインマーカーを等間隔で並べたパターンに代えてランダムパターンを基準パターンとする例を説明したが、均一パッチ自体を、基準パターンとして用いることも可能である。例えば、図28(a)において、均一パッチ2804の上下の境界は、X方向に伸びる線分であり、Y方向の周波数成分を持っている。そのため、均一パッチ2804の上下の境界を含むように、先の実施形態で用いたメインマーカーに対応する領域を設定することで、ランダムパターンを用いることなく、Y方向の位置が検出可能である。これを応用し、X方向の位置も検出したい場合は、X方向とY方向の両方の周波数成分を持つように、例えば、均一パッチの上下の境界の形状を三角波状にすればよい。この変形例の場合、階調の異なる均一パッチを、間隔を空けずに、互いに上下の境界を共有してY方向に隣接して配置でき、テスト画像の面積を削減することができる。
なお、座標変換前後の座標同士の対応関係が隣り合う局所領域間で連続的であっても、スキャン画像の画素値を積分する経路が隣り合うノズル間で離れていると、テスト画像のプリント物における面内の濃度ムラにより、積分値の間に段差が発生しやすくなる。そのため、画素値を積分する経路は、隣接する2つのノズル間で、その始点と終点が大きく異ならないことが望ましい。具体的には、前述の図17(a)における矢印1701と矢印1702のように、テスト画像の座標系において、積分経路の始点のY座標と、積分経路の終点のY座標とが、互いに隣接する2つのノズル間で略一致していることが望ましい。これを実現するためには、同一階調の均一パッチは、ノズル列方向に対して、途切れることなく連続している必要がある。また、上記変形例のように均一パッチの上下の境界を三角波状にする場合であっても、均一パッチの高さに余裕を持たせることにより、均一パッチの内部に矩形の領域(図9の均一パッチ904を参照)を設定することもできる。この内部に設けた矩形領域内に積分経路を設定することで、積分経路の始点と終点のY座標を、全てのノズルで一致させることができる。
先の実施形態では、隣接するメインマーカー同士が重ならないように、一定間隔を持たせる必要があった。本実施形態のようなランダムパターンの場合は、各メインマーカーの中心点に対応する位置を、ノズル列方向に最多で1画素おきに設定できる。すなわち、本実施形態の手法の場合、メインマーカーを等間隔に配置した基準パターンを用いる場合に比べ、座標変換パラメータを設定する局所領域を細かく設定でき、ノズル毎の階調再現関数の導出精度を高めることができる。
[その他の実施形態]
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。