A.第1実施例:
A−1:画像処理装置の構成
次に、実施の形態を実施例に基づき説明する。図1は、実施例における画像処理装置としての計算機200と、複合機100の構成を示すブロック図である。
計算機200は、例えば、パーソナルコンピュータであり、計算機200のコントローラとしてのプロセッサであるCPU210と、ハードディスクドライブなどの不揮発性記憶装置220と、RAMなどの揮発性記憶装置230と、マウスやキーボードなどの操作部260と、液晶ディスプレイなどの表示部270と、通信部280と、を備えている。計算機200は、通信部280を介して、複合機100などの外部装置と通信可能に接続される。
揮発性記憶装置230は、CPU210が処理を行う際に生成される種々の中間データを一時的に格納するバッファ領域231を提供する。不揮発性記憶装置220には、コンピュータプログラムCPが格納されている。コンピュータプログラムCPは、本実施例では、複合機100の後述するプリンタ部130を制御するためのプリンタドライバプログラムであり、サーバからダウンロードされる形態で提供される。これに代えて、コンピュータプログラムCPは、DVD−ROMなどに格納される形態で提供されてもよい。CPU210は、コンピュータプログラムCPを実行することにより、後述する印刷処理を実行する。
複合機100は、イメージセンサを用いて原稿を光学的に読み取ることによってスキャンデータを生成するスキャナ部120と、所定の方式(例えば、インクジェット、レーザー)によって用紙などの印刷媒体に画像を印刷するプリンタ部130と、スキャナ部120やプリンタ部130を制御するCPUとメモリとを含む制御部110と、を備えている。
A−2:印刷処理
図2は、印刷処理のフローチャートである。この印刷処理は、例えば、計算機200において、コンピュータプログラムCPが実行されて、プリンタドライバが起動されているときに、ユーザの開始指示に基づいて開始される。
S10、S20では、CPU210は、元画像データを取得する。先ず、S10では、印刷すべき画像を表す画像データを取得する。この画像データは、例えば、不揮発性記憶装置220に格納された複数個の画像データの中から、ユーザの指定に基づいて選択された1個の画像データである。S20では、CPU210は、取得された画像データに対してラスタライズ処理を実行して、元画像データを生成する。元画像データは、複数個の画素を含むビットマップデータであり、具体的には、RGB値によって画素ごとの色を表すRGB画像データである。RGB値は、3個の色成分の階調値(以下、成分値とも呼ぶ)、すなわち、R値、G値、B値を含むRGB表色系の色値である。R値、G値、B値は、例えば、256階調の階調値である。
図3は、元画像データによって表される元画像OIの一例を示す図である。図3の元画像OIは、3個のオブジェクトOb1〜Ob3と、背景BGと、を含んでいる。オブジェクトOb1は、人物HNを含む写真を表している。オブジェクトOb2は、文字TXを含む表を表している。オブジェクトOb3は、描画、具体的には、円グラフを表している。
S30では、CPU210は、S40のアンシャープマスク処理で用いるマスクデータを生成するマスクデータ生成処理を実行する。マスクデータ生成処理では、元画像OIに含まれる複数個の画素のそれぞれについて、対応するマスクデータが生成される。マスクデータは、元画像OI内の対応する画素の後述する周辺範囲CA内の(M×N)個(M、Nは、2以上の整数)の画素の値の平均値である。マスクデータ生成処理の詳細は、後述する。
S40では、CPU210は、鮮鋭化処理を実行する。鮮鋭化処理は、元画像OIに含まれる複数個の画素のそれぞれに対して、対応するマスクデータを用いてアンシャープマスク処理を実行することによって、処理済画像データを生成する処理である。処理済画像データによって表される処理済画像は、元画像OIと比較して鮮鋭度が高くなり、特に元画像OI内の写真を示すオブジェクトOb1の画質が向上する。処理済画像データは、元画像データと同様にRGB画像データである。鮮鋭化処理の詳細は、後述する。
S50では、CPU210は、処理済画像データに対して色変換処理を実行する。これによって、処理済画像データの各画素のRGB値は、印刷用の複数個の色材に対応する複数個の成分値を含む色値に変換される。本実施例では、RGB値は、C(シアン)、M(マゼンタ)、Y(イエロ)、K(ブラック)の4個の成分値を含むCMYK値に変換される。色変換処理は、不揮発性記憶装置220に予め格納された色変換プロファイル(図示省略)を参照して実行される。色変換プロファイルは、RGB値とCMYK値との対応関係を規定する情報であり、具体的には、ルックアップテーブルである。
S60では、CPU210は、色変換処理後の処理済画像データに対してハーフトーン処理を実行して、ドットの形成状態を画素ごと、かつ、色材ごとに表すドットデータを生成する。ドットデータに含まれる各画素の値は、例えば、「大ドット」、「中ドット」、「小ドット」、「ドット無し」の4つのドットの形成状態のいずれかを示す。これに代えて、ドットデータに含まれる各画素の値は、「ドット有り」、「ドット無し」の2つのドットの形成状態のいずれかを示しても良い。
S70では、CPU210は、ドットデータを用いて印刷ジョブを生成する。例えば、CPU210は、ドットデータを、プリンタ部130を用いて印刷を行う際に用いられる順番に並べ替える処理と、ドットデータにプリンタ制御コードやデータ識別コードを付加する処理と、を実行する。この結果、複合機100によって解釈可能な印刷ジョブが生成される。S80では、CPU210は、生成された印刷ジョブを、複合機100に出力する。複合機100のプリンタ部130は、計算機200から出力された印刷ジョブに基づいて画像を印刷する。
A−3:マスクデータ生成処理
図2のS30のマスクデータ生成処理について説明する。マスクデータ生成処理は、上述したように、元画像OI内の複数個の画素のそれぞれについて、その画素の周辺範囲CA内の複数個の画素の値を用いてマスクデータを生成する処理である。
図5は、元画像OIの左上の頂点近傍の拡大図である。図5の格子状に並ぶ複数個の矩形のそれぞれは、元画像OI内の画素を示す。図5に示すように、元画像OIの左側から右に向かう方向を+X方向と呼び、+X方向の反対方向を−X方向と呼ぶ。また、元画像OIの上側から下に向かう方向を+Y方向と呼び、+Y方向の反対方向を−Y方向と呼ぶ。元画像OIの−X方向の端(図5の左端)から+X方向に向かって、各画素にX座標を付す。また、−Y方向の端(図5の上端)から+Y方向に向かって、各画素にY座標を付す。X座標が「a」であり、Y座標が「b」である画素を、P(a、b)と表す(a、bは、0以上の整数)。例えば、元画像OIの左上の頂点の画素は、P(0、0)と表される。同様に、元画像OIの複数個の画素から設定される1個の画素である注目画素を、該注目画素の座標(a、b)を用いて、注目画素TP(a、b)と表す。
ここで、画素P(a、b)の周辺範囲CA(a、b)について説明する。図5に示すように、1個の画素P(a、b)の周辺範囲CA(a、b)は、画素P(a、b)を含む予め定められたサイズの範囲である。具体的には、画素P(a、b)の周辺範囲CA(a、b)は、画素P(a、b)を中心とする(11×11)個、すなわち、121個の画素を含む矩形の範囲である。本実施例の周辺範囲CAの+X方向の画素数は、11個であり、周辺範囲CAのY方向の画素数は、11個である。画素P(a、b)の周辺範囲CA(a、b)内の121個の画素の値の合計値を、画素P(a、b)の周辺合計値TM(a、b)と呼ぶ。
図5に示すように、周辺範囲CA(a、b)は、X座標が(a−5)〜(a+5)である11個の列C(a−5)〜C(a+5)を含んでいる。11個の列C(a−5)〜C(a+5)のそれぞれは、+Y方向に沿って並ぶ11個の画素を含んでいる。11個の列C(a−5)〜C(a+5)のそれぞれに含まれる11個の画素の値の合計値をTV(a−5)〜TV(a+5)とする。
図4は、第1実施例のマスクデータ生成処理のフローチャートである。このフローチャートは、RGB値の1個の成分値についてのマスクデータ生成処理を示している。実際には、マスクデータ生成処理が、RBG値の各成分について実行されることで、RGBの各成分のマスクデータMDr、MDg、MDbが、画素ごとに生成される。以下では、画素のRGB値のうち、処理対象の成分値を、単に、画素の値とも呼ぶ。また、処理対象の成分のマスクデータを、単に、マスクデータMDとも呼ぶ。
S105では、CPU210は、注目画素TP(a、b)を、元画像OIの左上の画素P(0、0)に設定する。
S110では、CPU210は、注目画素TP(0、0)の周辺範囲CA(0、0)内の11個の列C(−5)〜C(+5)について、各列の合計値TV(−5)〜TV(+5)を算出する。ここで、注目画素TP(0、0)は、元画像OIの左上の画素であるので、周辺範囲CA(0、0)のうち、注目画素TP(0、0)より−X方向(図5の左側)、および、注目画素TP(0、0)より−Y方向(図5の上側)には、画素が存在しない。このように、周辺範囲CA内に、画素が存在しない領域が含まれる場合には、当該領域内には、特定値を有する画素が存在すると仮定して、処理が進められる。本ステップの各列の合計値TV(−5)〜TV(+5)の算出も、この仮定の元で実行される。本実施例では、特定値として、「255」が、用いられる。すなわち、元画像OIの周囲には、白色の画素があると仮定して、マスクデータ生成処理が行われている。これに代えて、特定値には、元画像OIの背景を示す値、例えば、元画像OIの外縁に沿う複数個の画素の平均値が用いられても良い。
S115では、CPU210は、各列の合計値TV(−5)〜TV(+5)を加算することによって、注目画素TP(0、0)の周辺合計値TM(0、0)を算出する。各列の合計値TV(−5)〜TV(+5)は、周辺合計値TM(0、0)が算出された後も、バッファ領域231から消去されることなく、保持される。これらの10個の値は、後述するS135でバッファ領域231から取得されて、後述するS145での2個目以降の注目画素TP(a、b)の周辺合計値TM(a、b)の算出に用いられるからである。
以下のS120〜S145の処理は、注目画素TPを変更しながら、繰り返し実行されるので、注目画素TP(a、b)についての処理として、一般的に説明する。初回のS120〜S145の処理では、注目画素TP(a、b)は、画素P(0、0)である。
S120では、周辺合計値TM(a、b)を用いて、注目画素TP(a、b)のマスクデータMD(a、b)を算出する。具体的には、CPU210は、周辺合計値TM(a、b)を、周辺範囲内(a、b)に含まれる画素の個数PN(本実施例では、121)で除することによって、マスクデータMD(a、b)を算出する(MD(a、b)=TM(a、b)/PN)。初回のS120で用いられる周辺合計値TM(a、b)、すなわち、周辺合計値TM(0、0)は、S115で算出される値である。2回目以降のS120で用いられる周辺合計値TM(a、b)は、後述するS145、あるいは、S175にて算出される値である。なお、マスクデータMD(a、b)の算出に用いられた周辺合計値TM(a、b)は、後述のS145にて、次の注目画素TP(a+1、b)の周辺合計値TM(a+1、b)の算出に用いられるので、バッファ領域231に保持される。
S125では、CPU210は、注目画素TP(a、b)は、+X方向の最終画素、すなわち、処理中の+X方向に沿うライン(以下、単に、ラインとも呼ぶ)の+X方向の端に位置する画素であるか否かを判断する。注目画素TP(a、b)が、+X方向の最終画素でない場合には(S125:NO)、S130に処理が進められ、注目画素TP(a、b)が、+X方向の最終画素である場合には(S125:YES)、S150に処理が進められる。
S130では、CPU210は、注目画素TP(a、b)を+X方向に1個分移動する。すなわち、注目画素TP(a、b)の+X方向に隣接する画素P(a+1、b)が新たな注目画素TP(a、b)に設定される(a=a+1)。
S135では、CPU210は、前回の注目画素TP(a−1、b)の周辺範囲CA(a−1、b)の−X方向の端に位置する列C(a−6)に含まれる11個の画素の値の合計値TV(a−6)を、取得する。以下では、周辺範囲CA内の1個の列に含まれる11個の画素の値の合計値を単に、「当該列の合計値」と表現する。列C(a−6)は、図5にてシングルハッチングされた部分である。この合計値TV(a−6)は、この時点までに処理済の注目画素TPの周辺合計値TMを算出するために算出されている。具体的には、この時点までに実行済のS140(後述)、または、上述のS115で算出されて、バッファ領域231に保持されている。例えば、現在の注目画素TP(a、b)が画素P(1、0)である場合には、取得される合計値TV(a−6)は、S115にて算出され合計値TV(−5)である。また、現在の注目画素TP(a、b)が画素P(30、0)である場合には、取得される合計値TV(a−6)は、注目画素(a、b)が画素P(19、0)であるときに、S140にて算出される合計値TV(24)である。
なお、変形例としては、本ステップにて、CPU210は、列C(a−6)内の11個の画素の値を用いて合計値TV(a−6)を算出することによって、合計値TV(a−6)を取得しても良い。この場合には、計算量は、本実施例より増加するが、S115やS140で算出される合計値TVを、本ステップで取得されるまで保持しておく必要がないので、必要なメモリ量(例えば、バッファ領域231の容量)を低減することができる。
S140では、CPU210は、現在の注目画素TP(a、b)の周辺範囲CA(a、b)の+X方向の端の列C(a+5)の合計値TV(a+5)を算出する。この列C(a+5)は、図5にてダブルハッチングされた部分である。列C(a+5)は、前回の注目画素TP(a−1、b)の周辺範囲CA(a−1、b)の+X方向の端に隣接する列、とも言うことができる。
S145では、CPU210は、現在の注目画素TP(a、b)の周辺合計値TM(a、b)を算出する。具体的には、前回の注目画素TP(a−1、b)の周辺合計値TM(a−1、b)に対して、S135で取得された合計値TV(a−6)が減算され、S140で算出された合計値TV(a+5)が加算されることによって、周辺合計値TM(a、b)が算出される。すなわち、周辺合計値TM(a、b)の算出式は、以下の式(1)で示される。
TM(a、b)=TM(a−1、b)−TV(a−6)+TV(a+5)...(1)
なお、周辺合計値TM(a、b)の算出後には、前回の注目画素TP(a−1、b)の周辺合計値TM(a−1、b)と、S135で取得された合計値TV(a−6)は、不要となるので、バッファ領域231から消去される。
S145にて、周辺合計値TM(a、b)が算出されると、CPU210は、S120に処理を戻す。
注目画素TP(a、b)が、+X方向の最終画素である場合には(S125:YES)、S150にて、CPU210は、現在の注目画素TP(a、b)は、+Y方向の最終画素、すなわち、処理すべき最後の画素であるか否かを判断する。現在の注目画素TP(a、b)が+Y方向の最終画素である場合には(S150:YES)、CPU210は、マスクデータ生成処理を終了する。
注目画素TP(a、b)が+Y方向の最終画素でない場合には(S150:NO)、S155にて、CPU210は、注目画素TP(a、b)を+Y方向に1個分移動した画素であって、かつ、X方向の先頭(−X方向の端)の画素に移動する(a=0、b=b+1)。すなわち、注目画素TP(a、b)が位置するラインの+Y方向に隣接するラインの−X方向の端の画素Pを新たな注目画素TPに設定する。ラインの先頭に位置する(すなわち、a=0である)新たに設定された注目画素TPを、注目画素TP(0、b)と表現する。
図6は、注目画素TP(0、b)、すなわち、画素P(0、b)の近傍の拡大図である。S160では、CPU210は、画素P(0、b−1)の周辺範囲CA(0、b−1)の−Y方向の端に位置する行R(b−6)に含まれる11個の画素の値の合計値TH(b−6)を算出する。周辺範囲CA内の1個の行に含まれる11個の画素の値の合計値を単に、「当該行の合計値」と表現する。
画素P(0、b−1)は、図6に示すように、注目画素TP(0、b)(すなわち、図6の画素P(0、b))の−Y方向に隣接する画素である。画素P(0、b−1)は、注目画素TPとして既に処理済の画素の1つである。行R(b−6)は、図6にてシングルハッチングされた部分である。
S165では、S140では、CPU210は、現在の注目画素TP(0、b)の周辺範囲CA(0、b)の+Y方向の端の行R(a+5)の合計値TH(b+5)を算出する。この行R(b+5)は、図6にてダブルハッチングされた部分である。行R(b+5)は、画素P(0、b−1)の周辺範囲CA(0、b−1)の+Y方向の端に隣接する行とも言うことができる。
S170では、CPU210は、注目画素TP(0、b)の−Y方向に隣接する画素P(0、b−1)について算出済のマスクデータMD(0、b−1)を用いて、画素P(0、b−1)の周辺合計値TM(0、b−1)を、再度、算出する。この周辺合計値TM(0、b−1)は、注目画素TPが、画素P(0、b−1)であるときのS175にて、既に算出済であるが、直後のS120にて、当該周辺合計値TM(0、b−1)を用いて、マスクデータMD(0、b−1)が算出された後に、バッファ領域231から消去されているからである。具体的には、マスクデータMD(0、b−1)に対して、周辺範囲内(0、b−1)に含まれる画素の個数PN(本実施例では、121)を乗ずることによって、マスクデータMD(0、b−1)が算出される。
なお、変形例としては、ラインの先頭の画素(a=0である画素)の周辺合計値TMは、+Y方向に隣接する画素Pについて、マスクデータMDが算出されるまで、バッファ領域231に、保持されても良い。この場合には、S170にて、周辺合計値TM(0、b−1)を、再度、算出する処理を省略することができる。
S175では、CPU210は、現在の注目画素TP(0、b)の周辺合計値TM(0、b)を算出する。具体的には、S170にて算出された周辺合計値TM(0、b−1)に対して、S160で算出された合計値TH(b−6)が減算され、S165で算出された合計値TH(b+5)が加算されることによって、周辺合計値TM(0、b)が算出される。すなわち、周辺合計値TM(0、b)の算出式は、以下の式(2)で示される。
TM(0、b)=TM(0、b−1)−TH(b−6)+TH(b+5)...(2)
S175にて、現在の注目画素TP(0、b)の周辺合計値TM(0、b)が算出されると、CPU210は、S120に処理を戻す。
以上説明したマスクデータ生成処理が、RGBの3個の成分についてそれぞれ実行されると、RGBの3個の成分に対応する3個のマスクデータMDr、MDg、MDbが、元画像OIに含まれる複数個の画素のそれぞれについて生成される。
A−4:鮮鋭化処理
図2のS40の鮮鋭化処理について説明する。鮮鋭化処理は、上述したように、元画像OIに含まれる複数個の画素のそれぞれに対して、対応するマスクデータを用いてアンシャープマスク処理を実行することによって、処理済画像データを生成する処理である。
図7は、鮮鋭化処理のフローチャートである。S180では、CPU210は、元画像OIに含まれる複数個の画素から1個の注目画素を選択する。
S185では、CPU210は、図4のマスクデータ生成処理にて生成された複数個のマスクデータのうち、注目画素に対応するマスクデータを用いて、注目画素に対するアンシャープマスク処理を実行する。
具体的には、注目画素の処理前のRGB値を(Rin、Gin、Bin)とし、注目画素に対応するマスクデータを(MDr、MDg、MDb)とすると、処理後のRGB値(Rout、Gout、Bout)は、以下の式(3)〜(5)で表される。
Rout=Rin+(Rin−MDr)×K ...(3)
Gout=Gin+(Gin−MDg)×K ...(4)
Bout=Bin+(Bin−MDb)×K ...(5)
ここで、Kはシャープネスを強調するレベルを示す所定の係数であり、本実施例では、K=1である。
S190では、CPU210は、元画像OI内の全ての画素を注目画素として処理したか否かを判断する。未処理の画素がある場合には(S190:NO)、CPU210は、S180に戻って、未処理の画素を注目画素として選択する。全ての画素が処理された場合には(S190:YES)、CPU210は、鮮鋭化処理を終了する。この時点で処理済画像を表す処理済画像データが生成されている。
以上説明した第1実施例によれば、図5の画素P(a−1、b)の周辺範囲(a−1、b)内の(11×11)個の画素の値の合計である周辺合計値TM(a−1、b)を用いて、画素P(a−1、b)に対応するマスクデータMD(a−1、b)が算出される(図4のS120)。この時点で、周辺範囲(a−1、b)内の(11×11)個の画素のうち、−X方向の端に位置し、+Y方向に沿って並ぶ11個の画素(すなわち、図5の列C(a−6)内の11個の画素)の値の合計値TV(a−6)が算出されて、バッファ領域231に保持されている。そして、周辺範囲CA(a−1、b)に対して+X方向に隣接し、Y方向に沿って並ぶ11個の画素(すなわち、図5の列C(a+5)内の11個の画素)の値の合計値TV(a+5)が算出される(S140)。そして、算出済の周辺合計値TM(a−1、b)に対して、合計値TV(a−6)が減算され、合計値TV(a+5)が加算されることによって、図5の画素P(a−1、b)の+X方向に隣接する画素P(a、b)の周辺範囲CA(a、b)内の(11×11)個の画素の値の合計である周辺合計値TM(a、b)が算出される(S145)。そして、周辺合計値TM(a、b)を用いて、画素P(a、b)に対応するマスクデータMD(a、b)が算出される(S120)。この結果、周辺範囲CA(a、b)内の(11×11)個の画素の値を1個ずつ加算することによって周辺合計値TM(a、b)を算出するよりも算出時間を低減できる。したがって、マスクデータを生成するための処理時間を低減することができる。
さらに、図6の画素P(0、b−1)の周辺範囲CA(0、b−1)内の(11×11)個の画素のうち、−Y方向の端に位置し、+X方向に沿って並ぶ11個の画素(すなわち、図6の行R(b−6))の値の合計値TH(b−6)が算出される(S160)。そして、周辺範囲CA(0、b−1)に対して+Y方向に隣接し、+X方向に沿って並ぶ11個の画素(すなわち、図6の行R(b+5))内の11個の画素)の値の合計値TH(b+5)が算出される(S165)。そして、S170にて算出済の画素P(0、b−1)の周辺合計値TM(0、b−1)に対して、合計値TH(b−6)を減算し、合計値TH(b+5)を加算することによって、画素P(0、b−1)の+Y方向に隣接する画素P(0、b)の周辺範囲CA(0、b)内の(11×11)個の画素の値の合計である周辺合計値TM(0、b)が算出される(S175)。そして、周辺合計値TM(0、b)を用いて、画素P(0、b)に対応するマスクデータMD(0、b)が算出される(S120)。この結果、周辺範囲CA(0、b)内の(11×11)個の画素の値を1個ずつ加算することによって周辺合計値TM(0、b)を算出するよりも算出時間を低減できる。したがって、したがって、マスクデータを生成するための処理時間をさらに低減することができる。
より具体的には、本実施例によるマスクデータを生成するための処理時間は、各画素について周辺範囲CA内の全ての画素の値を1個ずつ加算することによって周辺合計値TMを算出する場合の処理時間と比較して、約1/9.3となる。
ここで、元画像OIの+X方向の画素数L(Lは、M以上の整数)として、+X方向に沿う特定のラスタライン、すなわち、+X方向に沿って並ぶL個の画素に着目する。図4のS110、および、S140から解るように、これらのL個の画素を1個ずつ含むL個の列C(0)〜C(L)の合計値TV(0)〜TV(L)がそれぞれ算出されている。そして、そして、S115、および、S145から解るように、これらのL個の合計値TV(0)〜TV(L)を用いた加算処理と減算処理とによって、これらのL個の画素に対応するL個のマスクデータMDが算出されている。この結果、L個の合計値TV(0)〜TV(L)を用いて効率良く、マスクデータを算出することができる。なお、L個の列C(0)〜C(L)は、L個の画素のL個の周辺範囲CAのいずれかに含まれるL個の画素群であって、+Yに沿って並ぶ11個の画素をそれぞれ含むL個の画素群である、と言うことができる。
さらに、S145で、画素P(1、b−1)のマスクデータMD(1、b−1)が算出された後に、算出に用いられた画素P(0、b−1)の周辺合計値TM(0、b−1)は、メモリ(具体的には、揮発性記憶装置230)から消去される。そして、その後に、画素P(0、b)のマスクデータMD(0、b)を算出する際に、その算出に用いられる周辺合計値TM(0、b−1)は、マスクデータMD(0、b−1)を、(11×11)倍、すなわち、121倍することによって、算出される(S170)。この結果、マスクデータMD(0、b)が算出されるまで周辺合計値TM(0、b−1)をバッファ領域231に保持しておく必要がないので、揮発性記憶装置230の使用量を低減できる。
以上の説明から解るように、対応関係の一例を説明する。+X方向は、第1方向の例であり、+Y方向は、第2方向の例である。
また、図5の例では、画素P(a−1、b)は、第1画素の例であり、画素P(a、b)は、第2画素の例であり、周辺範囲CA(a−1、b)は、第1範囲の例であり、周辺範囲CA(a、b)は、第2範囲の例である。マスクデータMD(a−1、b)は、第1のマスクデータの例であり、マスクデータMD(a、b)は、第2のマスクデータの例である。周辺合計値TM(a−1、b)は、第1値の例であり、合計値TV(a−6)は、第2値の例であり、合計値TV(a+5)は、第3値の例であり、周辺合計値TM(a、b)は、第4値の例である。
また、図6の例では、画素P(0、b−1)は、第1画素の例であり、画素P(0、b)は、第3画素の例であり、周辺範囲CA(0、b−1)は、第1範囲の例であり、周辺範囲CA(0、b)は、第3範囲の例である。マスクデータMD(0、b−1)は、第1のマスクデータの例であり、マスクデータMD(0、b)は、第3のマスクデータの例である。周辺合計値TM(0、b−1)は、第1値の例であり、合計値TH(b−6)は、第5値の例であり、合計値TH(b+5)は、第6値の例であり、周辺合計値TM(0、b)は、第7値の例である。
B.第2実施例
第2実施例は、マスクデータ生成処理が、図4の第1実施例のマスクデータ生成処理と異なる。他の処理は、第1実施例と同じである。
図8は、第2実施例のマスクデータ生成処理のフローチャートである。S205では、CPU210は、注目画素TP(a、b)を、元画像OIの左上の画素P(0、0)に設定する。
S210〜S220は、+X方向に沿う各ラスタラインの先頭(−X方向の端)の画素(a=0の画素)が、注目画素TPである場合に実行される処理であるので、注目画素TP(0、b)についての処理として、説明する。初回のS210〜S220の処理では、注目画素TP(0、b)は、画素P(0、0)である。
S210では、CPU210は、注目画素TP(0、b)の周辺範囲CA(0、b)の11個の列C(−5)〜C(+5)の合計値TV(−5)〜TV(+5)を算出する。
S215では、CPU210は、11個の合計値TV(−5)〜TV(+5)を加算することによって、周辺範囲CA(0、b)内の周辺合計値TM(0、b)を算出する。第1実施例と同様に、各列の合計値TV(−5)〜TV(+5)は、周辺合計値TM(0、b)が算出された後も、バッファ領域231から消去されることなく、保持される。
S220では、CPU210は、11個の列C(a−5)〜C(a+5)について、各列に含まれる11個の画素のRGB値を用いて、11個の画素のそれぞれの輝度値を算出して、算出された11個の輝度値のうちの最大輝度値と最小輝度値とをバッファ領域231に特定する。特定された最大輝度値と最小輝度値は、バッファ領域231に保持される。11個の列C(−5)〜C(+5)の最大輝度値をYVmx(−5)〜YVmx(+5)とし、11個の列C(−5)〜C(+5)の最小輝度値をYVmn(−5)〜YVmn(+5)とする。
S225〜S260の処理は、注目画素TPを変更しながら、繰り返し実行されるので、注目画素TP(a、b)についての処理として、一般的に説明する。
S225では、CPU210は、注目画素TP(a、b)の周辺範囲CA(a、b)内の121個の画素の輝度値のうちの最大輝度値Ymxと、最小輝度値Ymnを特定する。この時点で、周辺範囲CA(a、b)内の11個の列C(a−5)〜C(a+5)の最大輝度値YVmx(a−5)〜YVmx(a+5)が、上述のS220または後述のS255にて特定されて、バッファ領域231に保持されている。CPU210は、11個の最大輝度値YVmx(a−5)〜YVmx(a+5)の最大値を、周辺範囲CA(a、b)の最大輝度値Ymxとして特定する。同様に、この時点で、周辺範囲CA(a、b)内の11個の列C(a−5)〜C(a+5)の最小輝度値YVmn(a−5)〜YVmn(a+5)が特定されて、バッファ領域231に保持されている。CPU210は、11個の最小輝度値YVmn(a−5)〜YVmn(a+5)の最小値を、周辺範囲CA(a、b)の最小輝度値Ymnとして特定する。
S230では、CPU210は、S225にて特定された最大輝度値Ymxと最小輝度値YVmnとの差分ΔYを算出する(ΔY=Ymx−Ymn)。輝度値の差分ΔYは、周辺範囲CA内の画像のコントラストの高さを示す値であるので、コントラストΔYとも呼ぶ。
S235では、CPU210は、コントラストΔYは、特定範囲SR内であるか否かを判断する。特定範囲SRは、コントラストΔYが下側閾値TH1未満であること、および、コントラストΔYが上側閾値TH2より大きいこと、のいずれかを満たす範囲である(ΔY<TH1、または、ΔY>TH2、(ただし、TH1<TH2))。例えば、下側閾値TH1は、コントラストΔYが取り得る範囲の下限から15%の値、上側閾値TH2は、ントラストΔYが取り得る範囲の下限から70%の値に設定される。例えば、画素の輝度値が、0〜255までの値で表される場合、コントラストΔYが取り得る範囲は、0〜255である。この場合には、例えば、TH1=38、TH2=192に設定される。
コントラストΔYが特定範囲SR内である場合には(S235:YES)、S240にて、CPU210は、注目画素TP(a、b)の値を、そのまま、マスクデータMDとして決定する。そして、コントラストΔYが特定範囲SR内でない場合には(S235:NO)、S245にて、CPU210は、図4のS120と同様に、周辺合計値TM(a、b)を用いて、注目画素TP(a、b)のマスクデータMD(a、b)を算出する。具体的には、CPU210は、周辺合計値TM(a、b)を、周辺範囲内(a、b)に含まれる画素の個数PN(本実施例では、121)で除することによって、マスクデータMD(a、b)を算出する(MD(a、b)=TM(a、b)/PN)。
S250では、CPU210は、注目画素TP(a、b)は、+X方向の最終画素であるか否かを判断する。注目画素TP(a、b)が、+X方向の最終画素でない場合には(S250:NO)、S255に処理が進められ、注目画素TP(a、b)が、+X方向の最終画素である場合には(S250:YES)、S270に処理が進められる。
S255では、CPU210は、注目画素TP(a、b)を+X方向に1個分移動する。すなわち、注目画素TP(a、b)の+X方向に隣接する画素P(a+1、b)が新たな注目画素TP(a、b)に設定する(a=a+1)。
S260では、CPU210は、新たな注目画素TP(a、b)の+X方向の端に位置する列C(a+5)に含まれる11個の画素の輝度値をそれぞれ算出して、これらの11個の輝度値のうちの、最大輝度値YVmx(a+5)と最小輝度値YVmn(a+5)とを、特定する。
S265では、CPU210は、上述した図4のS135〜S145の処理を実行する。S265の後に、CPU210は、S225に処理を戻す。
注目画素TP(a、b)が、+X方向の最終画素である場合には(S250:YES)、S270にて、CPU210は、現在の注目画素TP(a、b)は、+Y方向の最終画素、すなわち、処理すべき最後の画素であるか否かを判断する。現在の注目画素TP(a、b)が+Y方向の最終画素でない場合には(S270:NO)、S275にて、CPU210は、注目画素TP(a、b)を+Y方向に1個分移動した画素であって、かつ、X方向の先頭(−X方向の端)の画素に移動する(a=0、b=b+1)。S275の後に、CPU210は、S210に処理を戻す。現在の注目画素TP(a、b)が+Y方向の最終画素である場合には(S270:YES)、CPU210は、マスクデータ生成処理を終了する。
S245において、マスクデータMD(a、b)が、対応する画素P(a、b)の値そのものに決定された場合には、その画素P(a、b)に対するアンシャープマスク処理(図7のS185)において、画素P(a、b)の値は、変更されない。その理由を説明する。上記式(3)〜(5)に従って、図7のS185にて、処理済画像の画素の値が算出されるとする。この場合に、元の画素の値(Rin、Gin、Bin)と、マスクデータの値(MDr、MDg、MDb)とが同じになるので、上記式(3)〜(5)の右辺の第2項が0となり、元の画素の値は、同じ値に維持される。この結果、S245において、マスクデータMDが、対応する画素Pの値そのものに決定された場合には、その画素Pに対して、実質的にアンシャープマスク処理が行われないことになる。
以上説明した第2実施例によれば、元画像OI内の複数個の画素P(a、b)のうち、周辺範囲CA(a、b)のコントラストΔYが特定範囲SR内である画素について、鮮鋭化処理にて、画素の値が変更されない。この結果、アンシャープマスク処理によって画質が低下する不都合を低減し得る。
より詳しく説明する。図9は、元画像OI内の文字TXを含むオブジェクトOb2の一部分を示す図である。アンシャープマスク処理を実行すると、特に写真などの画像の鮮鋭度が高くなり、画質が向上する。一方で、仮に、全ての画素に対してアンシャープマスク処理を実行すると、処理済画像において、コントラストが比較的に高い部分、具体的には、比較的薄い地色の領域のうち、当該領域内に配置された濃い色の文字の近傍領域が過度に明るくなる不具合が発生しやすい。例えば、図9の黒色の文字TXの近傍領域SAと、近傍領域SAの外側領域OAとは、元画像OIにおいては、同じ色であるとする。仮に、全ての画素に対してアンシャープマスク処理を実行すると、処理済画像において、近傍領域SAが、過度に明るくされることで白っぽい色に変更され、外側領域OAとは異なる色になる不具合が発生する。
この理由を説明する。近傍領域SA内の画素の周辺範囲CAには、文字を構成する濃い色の画素が含まれるが、外側領域OA内の画素の周辺範囲CAには、濃い色が含まれない。このために、近傍領域SA内の画素のマスクデータ(すなわち、その画素の周辺範囲CAの平均色値(MDr、MDg、MDb))の各値は、外側領域OA内の画素のマスクデータの各値より暗い色を示す値(すなわち、小さな値)となる。この結果、アンシャープマスク処理を行う際に、近傍領域SA内の画素では、上述した式(3)〜(5)の右辺の第2項の(Rin−MDr)、(Gin−MDg)、(Bin−MDb)の値が、外側領域OA内の画素よりも大きな値となる。したがって、仮に、近傍領域SA内の画素に対して、通常通りにアンシャープマスク処理が実行されると、処理後のRGB値(Rout、Gout、Bout)の各成分値が過度に大きな値に変更されて、近傍領域SA内の画素の色は、過度に明るく白っぽい色となる。
上記第2実施例では、画素P(a、b)の周辺範囲CA(a、b)内のコントラストΔYが過度に高い場合には(すなわち、ΔV>TH2である場合には)、コントラストΔYが特定範囲SR内であると判断されるので、当該画素P(a、b)に対してはアンシャープマスク処理が実質的に実行されない。したがって、図9の近傍領域SA内の画素に対しては、アンシャープマスク処理が実質的に実行されないので、上記の不具合の発生を抑制することができる。この結果、画像の鮮鋭度を高めつつ、アンシャープマスク処理に起因する画質の低下、具体的には、濃い色の文字の周囲が過度に明るくなる不具合を抑制できる。
さらに、例えば、図2の元画像OI内の人物HNの肌の部分などは、コントラストΔYが比較的低くなる。このような部分に、アンシャープマスク処理を実行すると、たとえば、肌に存在するしわが強調されるなどの不都合が発生して、元画像OIの画質が低下する場合がある。上記第2実施例では、画素P(a、b)の周辺範囲CA(a、b)内のコントラストΔYが過度に低い場合には(すなわち、ΔV<TH1である場合には)、コントラストΔYが特定範囲SR内であると判断されるので、当該画素P(a、b)に対してはアンシャープマスク処理が実質的に実行されない。したがって、人物HNの肌の部分に対しては、アンシャープマスク処理が実質的に実行されないので、上記の不具合の発生を抑制することができる。この結果、画像の鮮鋭度を高めつつ、アンシャープマスク処理に起因する画質の低下、具体的には、人物HNの肌のしわが強調される不具合を抑制できる。
さらに、上記第2実施例では、元画像OIに含まれる複数個の画素Pのそれぞれについて、マスクデータMDを算出する際に、マスクデータMDに対応する画素について、コントラストΔYが特定範囲SR内であるか否かが判断される(S235)。そして、コントラストΔYが特定範囲SR内でない画素に対応するマスクデータMDは、その画素の周辺範囲内の画素の値の平均値に決定される(S245)。そして、コントラストΔYが特定範囲SR内である画素に対応するマスクデータMDは、その画素の値に決定される(S240)。こうすれば、コントラストΔYが特定範囲SR内である画素のマスクデータMDを、当該画素の値に決定することによって、図7のS185において、当該画素に対してアンシャープマスク処理を行っても、当該画素の値が、アンシャープマスク処理によって変更されないようにすることができる。
さらに、上記第2実施例では、図5の周辺範囲CA(a−1、b)内の11個の列C(a−6)〜列(a+4)のそれぞれについて特定済の11個の最大輝度値YVmx(a−6)〜YVmx(a+4)と、11個の最小輝度値YVmn(a−6)〜YVmn(a+4)と、を用いて、周辺範囲CA(a−1、b)内の最大輝度値Ymxおよび最小輝度値Ymnとが特定される(S225)。そして、周辺範囲CA(a−1、b)内の最大輝度値Ymxおよび最小輝度値Ymnを用いて、画素P(a−1、b)について、コントラストΔYが特定範囲SR内であるか否かが判断される(S235)。そして、図5の周辺範囲CA(a−1、b)に対して+X方向に隣接し、+Y方向に沿って並ぶ11個の画素を含む列C(a+5)の最大輝度値YVmx(a+5)と最小輝度値YVmn(a+5)とが特定される(S260)。図5の周辺範囲CA(a、b)内の11個の列C(a−5)〜列(a+5)のそれぞれについて特定済の11個の最大輝度値YVmx(a−5)〜YVmx(a+5)と、11個の最小輝度値YVmn(a−5)〜YVmn(a+5)と、を用いて、周辺範囲CA(a、b)内の最大輝度値Ymxおよび最小輝度値Ymnとが特定される(S225)。11個の最大輝度値YVmx(a−5)〜YVmx(a+5)は、前回のS225で用いられた11個の最大輝度値YVmx(a−6)〜YVmx(a+4)のうち、周辺範囲CA(a−1、b)内の−X方向の端に位置する1個の列C(a−6)の値を除く、10個の最大輝度値YVmx(a−5)〜YVmx(a+4)と、その後のS260にて特定された1個の最大輝度値YVmx(a+5)である。11個の最小輝度値YVmn(a−5)〜YVmn(a+5)は、前回のS225で用いられた11個の最小輝度値YVmn(a−6)〜YVmn(a+4)のうち、周辺範囲CA(a−1、b)内の−X方向の端に位置する1個の列C(a−6)の値を除く、10個の最小輝度値YVmn(a−5)〜YVmn(a+4)と、その後のS260にて特定された1個の最小輝度値YVmn(a+5)である。そして、これらの値YVmn(a−5)〜YVmn(a+5)、YVmn(a−5)〜YVmn(a+5)を用いて、周辺範囲CA(a、b)内の最大輝度値Ymxおよび最小輝度値Ymnが特定される(S225)。そして、特定された周辺範囲CA(a、b)内の最大輝度値Ymxおよび最小輝度値Ymnを用いて、画素P(a、b)について、コントラストΔYが特定範囲SR内であるか否かが判断される(S235)。この結果、マスクデータが生成される際に、元画像OI内の複数個の画素のそれぞれについて、コントラストΔYが特定範囲SR内であるか否かの判断の処理時間を短縮できる。
さらに、上述したように、特定範囲SRは、コントラストΔYが下側閾値TH1より小さい範囲(ΔY<TH1)と、コントラストΔYが上側閾値TH2より大きい範囲(ΔY>TH2)である。この結果、上述したアンシャープマスク処理に起因する画質の低下を抑制できる。変形例としては、特定範囲SRは、ΔY<TH1の範囲のみであっても良く、ΔY>TH2の範囲のみであっても良い。換言すれば、特定範囲SRは、ΔY<TH1の範囲と、ΔY>TH2の範囲と、の少なくとも一方の範囲であることが好ましい。
C.変形例:
(1)上記各実施例では、周辺範囲CA(a、b)は、(11×11)個の画素の含む正方形の範囲であるが、これに限られない。一般的には、周辺範囲CA(a、b)は、(M×N)個(M、Nは、2以上の整数)の画素を含む矩形の範囲であって、+X方向の画素数がM個であり、+Y方向の画素数がN個である、矩形の範囲であることが好ましい。例えば、周辺範囲CAは、(9×9)個の画素を含む正方形の範囲であっても良く、(5×7)個の画素を含む長方形の範囲であっても良い。
ここで、本実施例によるマスクデータを生成するための処理時間を、各画素について周辺範囲CA内の全ての画素の値を1個ずつ加算することによって周辺合計値TMを算出する比較例と比較した結果を示す。周辺範囲CA(a、b)が、(Q×Q)個の正方形(Qは、2以上12以下の整数)である場合について、処理時間を調査した結果、比較例に対する本実施例の処理時間は、Q=2〜12である場合に、それぞれ、おおよそ1、1/1.8、1/2.7、1/3.6、1/4.5、1/5.4、1/6.4、1/7.4、1/8.3、1/9.3、1/10.3であった。この結果から、周辺範囲CA(a、b)のサイズ(M×N)について、Mは、3以上の整数であり、Nは、3以上の整数であることが好ましい。この場合に、効果的に処理時間を短縮できる。また、M、Nが大きくなるほど、処理時間を短縮できる度合いが大きくなることが解った。
(2)上記各実施例のマスクデータ生成処理では、+X方向に沿う1本のラインについて、−X方向の端から+X方向に向かって、順次に注目画素TP(a、b)が選択され、当該ラスタラインの+X方向の最終画素について処理が終了した後に、当該ラインの+Y方向に隣接するライン上の画素について処理を行っている。これに代えて、+Y方向に沿う1本のラインについて、−Y方向の端から+Y方向に向かって、順次に注目画素TP(a、b)が選択され、当該ラインの+Y方向の最終画素について処理が終了した後に、当該ラインの+X方向に隣接するライン上の画素について処理を行っても良い。
(3)上記第2実施例では、元画像OI内の各画素について、コントラストΔYが特定範囲SR内であるか否かの判断を、マスクデータ生成処理にてマスクデータを生成する際に行っている。これに代えて、図7の鮮鋭化処理において、各画素について、コントラストΔYが特定範囲SR内であるか否かの判断を実行し、コントラストΔYが特定範囲SR内であると判断された画素に対してアンシャープマスク処理を実行せず、コントラストΔYが特定範囲SR内でないと判断された画素に対してアンシャープマスク処理を実行しても良い。
(4)上記各実施例では、図2のS40にて生成された処理済画像データの出力は、該処理済画像データを用いて複合機100を制御して(すなわち、印刷ジョブを生成して該印刷ジョブを複合機100に送信して)、処理済画像を複合機100に印刷させる形態で実現される。これに代えて、S40にて生成された処理済画像データの出力は、該処理済画像データを不揮発性記憶装置220に出力して、該処理済画像データを不揮発性記憶装置220に保存することであっても良いし、該処理済画像データを他の装置、例えば、保存サーバや他の端末装置に送信することであっても良い。
(5)アンシャープマスク処理で調整される色成分は、RGBの3個の色成分に代えて、他の種々の色成分を採用可能である。例えば、輝度成分を採用してもよい。CPU210は、例えば、元画像データとして、YCbCr色空間の色値を表す画像データを生成し、当該画像データの各画素のY成分の色値(すなわち、輝度値)についてマスクデータを生成しても良い。そして、CPU210は、そして、当該画像データのY成分の色値(すなわち、輝度値)をアンシャープマスク処理で調整してもよい。
(6)図2の印刷処理を実行する画像処理装置としての計算機200は、パーソナルコンピュータとは異なる種類の装置、例えば、複合機100、デジタルカメラ、スキャナ、スマートフォンであってもよい。複合機100が図2の印刷処理を実行する場合には、処理済画像データを用いる印刷は、例えば、複合機100のプリンタ部130を用いて実行される。また、図2の印刷処理を実行する画像処理装置は、例えば、ユーザの端末や複合機100から元画像データを取得して画像処理を実行するサーバであっても良い。このようなサーバは、ネットワークを介して互いに通信可能な複数個の計算機が、画像処理装置としての機能を一部ずつ分担して、全体として、一の画像処理の機能を実現してもよい。この場合には、ネットワークを介して互いに通信可能な複数個の計算機の全体が、画像処理装置に対応する。
(7)上記各実施例において、ハードウェアによって実現されていた構成の一部をソフトウェアに置き換えるようにしてもよく、逆に、ソフトウェアによって実現されていた構成の一部あるいは全部をハードウェアに置き換えるようにしてもよい。例えば、図1の計算機200のCPU210が実行している処理の一部は、専用のハードウェア回路によって実現されてもよい。
以上、実施例、変形例に基づき本発明について説明してきたが、上記した発明の実施の形態は、本発明の理解を容易にするためのものであり、本発明を限定するものではない。本発明は、その趣旨並びに特許請求の範囲を逸脱することなく、変更、改良され得ると共に、本発明にはその等価物が含まれる。