A.実施例:
A-1.複合機200の構成
次に、実施の形態を実施例に基づき説明する。図1は、画像処理装置の一例である複合機200の構成を示すブロック図である。複合機200は、画像処理装置を制御するプロセッサであるCPU210と、DRAMなどの揮発性記憶装置220と、フラッシュメモリやハードディスクドライブなどの不揮発性記憶装置230と、液晶ディスプレイなどの表示部240と、液晶ディスプレイと重畳されたタッチパネルやボタンを含む操作部250と、ユーザの端末装置100などの外部装置と通信を行うためのインタフェース(通信IF)270と、印刷実行部280と、読取実行部290と、を備えている。
読取実行部290は、CPU210の制御に従って、イメージセンサを用いて原稿を光学的に読み取ることによってスキャンデータを生成する。印刷実行部280は、CPU210の制御に従って、複数種類のトナー、具体的には、シアン(C)、マゼンタ(M)、イエロ(Y)、ブラック(K)のトナーを、色材として用いて、レーザ方式で用紙などの印刷媒体に画像を印刷する。具体的には、印刷実行部280は、感光ドラムを露光して静電潜像を形成し、該静電潜像にトナーを付着させてトナー像を形成する。印刷実行部280は、感光ドラム上に形成されたトナー像を用紙に転写する。なお、変形例では、印刷実行部280は、色材としてのインクを吐出して、用紙上に画像を形成するインクジェット方式の印刷実行部であっても良い。
揮発性記憶装置220は、CPU210が処理を行う際に生成される種々の中間データを一時的に格納するバッファ領域を提供する。不揮発性記憶装置230には、コンピュータプログラムPGが格納されている。コンピュータプログラムPGは、CPU210に複合機200の制御を実現させる制御プログラムである。本実施例では、コンピュータプログラムPGは、複合機200の製造時に、不揮発性記憶装置230に予め格納される形態で提供される。これに代えて、コンピュータプログラムPGは、サーバからダウンロードされる形態で提供されても良く、DVD-ROMなどに格納される形態で提供されてもよい。CPU210は、コンピュータプログラムPGを実行することにより、後述する画像処理を実行することができる。
A-2.画像処理
図2は、画像処理のフローチャートである。この画像処理は、例えば、ユーザが、読取実行部290(イメージセンサの一例)の原稿台に、原稿を載置して、コピーの実行指示を入力した場合に実行される。この画像処理は、原稿を読み取ることによって生成されるスキャンデータを取得し、該スキャンデータ(対象画像データの一例)を用いて原稿を示す印刷データを生成することで、いわゆる原稿のコピーを実現する処理である。
S10では、CPU210は、ユーザが原稿台に設置した原稿を、読取実行部290を用いて読み取ることによって、対象画像データとしてのスキャンデータを生成する。原稿は、例えば、複合機200、あるいは、図示しないプリンタによって画像が印刷された印刷物である。生成されたスキャンデータは、揮発性記憶装置220のバッファ領域(図1)に格納される。スキャンデータは、複数個の画素の値を含み、複数個の画素の値のそれぞれは、画素の色をRGB値で表す。すなわち、スキャンデータは、RGB画像データである。RGB値は、RGB表色系の色値であり、1個の画素のRGB値は、例えば、赤(R)と緑(G)と青(B)との3個の成分値(以下、R値、G値、B値とも呼ぶ)を含んでいる。本実施例では、各成分値の階調数は、256階調である。
図3は、画像処理で用いられる画像の一例を示す第1の図である。図3(A)には、スキャンデータによって表されるスキャン画像SIの一例が示されている。スキャン画像SIは、複数個の画素を含む。該複数個の画素は、第1方向D1と、第1方向D1と直交する第2方向D2と、に沿って、マトリクス状に配置されている。
図3(A)のスキャン画像SIは、原稿の用紙の地色を示す白色の背景Bg1と、複数個の文字とは異なるオブジェクトOb1~Ob3と、複数個の文字Ob4~Ob9と、文字Ob4、Ob5の背景Bg2と、文字Ob8、Ob9の背景Bg3と、を含んでいる。文字とは異なるオブジェクトは、例えば、写真や描画である。背景Bg2、背景Bg3は、白色とは異なる色を有する均一な画像である。
文字Ob6、Ob7は、白い背景Bg1上の文字であり、白背景文字とも呼ぶ。白背景文字Ob6、Ob7は、黒に加えて、赤、青などの様々な色を取り得る。白背景文字は、背景Bg1が最も明るい色(白)を有するので、黒とは異なる様々な色であっても読みやすいためである。本実施例では、白背景文字Ob6、Ob7は、黒とは異なる比較的暗い色(例えば、青)を有するものとする。
背景Bg2は、白とは異なる比較的明るい色、例えば、背景Bg3よりも明るい色を有する。白とは異なる背景Bg2上の文字Ob4、Ob5は、背景Bg2よりも暗い色を有する文字であり、色背景文字とも呼ぶ。色背景文字Ob4、Ob5は、比較的暗い色、例えば、黒や黒に近い色を有する場合が多い。背景Bg2が白と比較して暗い色を有するので、色背景文字が比較的明るい色を有すると読みづらくなる可能性があるためである。本実施例では、色背景文字Ob4、Ob5は、黒を有するものとする。
背景Bg3は、例えば、紺、濃い赤や緑などの黒とは異なる比較的暗い色を有する。背景Bg3上の文字Ob8、Ob9は、白色を有する文字であり、白文字とも呼ぶ。
S20では、CPU210は、スキャンデータに対して、画素分類処理を実行する。画素分類処理は、スキャン画像SI内の複数個の画素を、エッジを構成する複数個のエッジ画素と、エッジを構成しない複数個の非エッジ画素と、に分類する処理である。画素分類処理が候補特定部により実行される処理の一例であり、ここで分類されたエッジ画素が文字候補画素の一例である。
画素分類処理によって、例えば、エッジ画素の値が「1」とされ、非エッジ画素の値が「0」とされた二値画像データが生成される。図3(B)には、二値画像データによって示される二値画像BIの一例が示されている。この二値画像BIには、スキャン画像SI内のオブジェクトOb1~Ob9のエッジを構成する複数個のエッジ画素Eg1~Eg9と、背景Bg1と背景Bg2との境界および背景Bg1と背景Bg3との境界のエッジを構成する複数個のエッジ画素Eg10、Eg11と、が特定されている。このように、エッジ画素は、例えば、主として文字を構成するエッジ画素を含む。なお、比較的大きな文字については、文字のエッジを構成する画素がエッジ画素として特定され、比較的小さな文字については、文字を構成する画素の全体がエッジ画素として特定される。また、エッジ画素は、文字とは異なるオブジェクト(例えば、描画や写真)に含まれる細線などを構成するエッジ画素を含む。二値画像データは、画素分類処理による分類結果を示すデータであるので、分類データとも呼ぶ。画素分類処理の詳細は、後述する。
S25では、CPU210は、白文字特定処理を実行する。白文字特定処理は、後述するS45の白文字強調処理の対象となる白文字エッジ画素を特定する処理である。白文字特定処理によって、白文字エッジ画素の値が「1」とされ、白文字エッジ画素とは異なる画素の値が「0」とされた二値画像データ(白文字特定データとも呼ぶ)が生成される。図3(C)には、白文字特定データによって示される二値画像である白文字特定画像WIの一例が示されている。この白文字特定画像WIには、スキャン画像SI内の白文字Ob8、Ob9のエッジを構成する白文字エッジ画素Ob8w、Ob9wが特定されている。
S30では、CPU210は、スキャンデータに対して、網点平滑化処理(平滑化処理の一例)を実行して、平滑化画像を示す平滑化画像データを生成する。具体的には、CPU210は、スキャンデータに含まれる複数個の非エッジ画素の値のそれぞれに対して、ガウスフィルタGF(後述)などの平滑化フィルタを用いた平滑化処理を実行して、平滑化処理済みの複数個の非エッジ画素の値を算出する。平滑化処理の対象となる非エッジ画素の値は、S20の分類処理によって生成された分類データを参照して特定される。CPU210は、スキャンデータに含まれる複数個のエッジ画素の値と、平滑化処理済みの複数個の非エッジ画素の値と、を含む平滑化画像データを生成する。
S40では、CPU210は、平滑化画像データに対して、エッジ鮮鋭化処理(鮮鋭化処理の一例)を実行して、鮮鋭化画像データを生成する。具体的には、CPU210は、平滑化画像データに含まれる複数個のエッジ画素の値のそれぞれに対して、アンシャープマスク処理や、鮮鋭化フィルタを適用する処理などの鮮鋭化処理を実行して、鮮鋭化処理済みの複数個のエッジ画素の値を算出する。鮮鋭化処理の対象となるエッジ画素の値は、S20の分類処理によって生成された分類データを参照して特定される。CPU210は、平滑化画像データに含まれる複数個の非エッジ画素の値(平滑化処理済みの複数個の非エッジ画素の値)と、鮮鋭化処理済みの複数個のエッジ画素の値と、を含む鮮鋭化画像データを生成する。平滑化画像データに含まれる複数個のエッジ画素の値は、平滑化処理の対象ではないので、スキャンデータに含まれる複数個のエッジ画素の値と同じである。したがって、本ステップのエッジ鮮鋭化処理は、スキャンデータに含まれる複数個のエッジ画素の値に対して実行される、とも言うことができる。
S45では、CPU210は、鮮鋭化画像データに対して白文字強調処理(置換処理の一例)を実行して、処理済み画像データを生成する。具体的には、CPU210は、鮮鋭化画像データに含まれる複数個の白文字エッジ画素の値を、白色を示す値に置換する。白色を示す値は、例えば、画素の値がRGB値である場合に(R、G、B)=(255、255、255)である。白文字強調処理の対象となる白文字エッジ画素の値は、S25の白文字特定処理によって生成された白文字特定データを参照して特定される。
図3(D)には、処理済み画像データによって示される処理済み画像FIが示されている。処理済み画像FIは、背景Bg1f、Bg2f、Bg3fと、スキャン画像SI内のオブジェクトOb1~Ob9に対応するオブジェクトOb1f~Ob9fと、を含んでいる。鮮鋭化処理によって、これらのオブジェクトOb1f~Ob9f、背景Bg2f、Bg3fのエッジは、スキャン画像SI内のオブジェクトOb1~Ob9、背景Bg2、Bg3のエッジと比較して、鮮鋭化されている。また、平滑化処理によって、これらのオブジェクトOb1f~Ob9f、背景Bg2f、Bg3fのエッジ以外の部分(非エッジ部分とも呼ぶ)は、スキャン画像SI内のオブジェクトOb1~Ob9、背景Bg2、Bg3と比較して、平滑化されている。
さらに、処理済み画像FIでは、白文字強調処理によって、白文字Ob8f、Ob9fのエッジは、例えば、白色にされている。スキャン画像SIでは、例えば、白文字Ob8f、Ob9fと、背景Bg3と、の境界近傍にて、背景の色とも文字の色とも異なる色が現れる不具合が発生しやすい。例えば、白文字Ob8f、Ob9fに原稿にはない色が付く不具合(色付きとも呼ぶ)が発生する場合がある。例えば、読取実行部290による読み取りは、イメージセンサの副走査を行いつつ、赤色、緑色、青色のLEDを順次に点灯制御して行われる。これら3色のLEDの1回ずつの点灯で、主走査方向に沿った1ライン分の画像の読み取りが行われる。上述した色付きなどの不具合は、例えば、このようなLEDの順次点灯によるRGBの成分間の読み取り位置のずれに起因して発生する。白文字強調処理によって、色付きなどによって現れた色を白色に置換できるので、白文字Ob8f、Ob9fのエッジが強調され、白文字Ob8f、Ob9fが読みやすくなる。
S50では、CPU210は、処理済み画像データを用いて印刷データを生成する印刷データ生成処理を実行する。具体的には、RGB画像データである処理済み画像データに対して色変換処理が実行されて、印刷に用いられる色材に対応する色成分(C、M、Y、Kの成分)を有する色値であるCMYK値で画素ごとの色を示すCMYK画像データが生成される。色変換処理は、例えば、公知のルックアップテーブルを参照して実行される。CMYK値画像データに対して、ハーフトーン処理が実行されて、印刷に用いられる色材ごと、かつ、画素ごとに、ドットの形成状態を示すドットデータを生成する。ドットの形成状態は、例えば、ドット有、ドット無の2種類の状態や、大ドット、中ドット、小ドット、ドット無の4種類の状態を取り得る。ハーフトーン処理は、例えば、ディザ法や、誤差拡散法に従って実行される。該ドットデータは、印刷時に用いられる順に並べ替えられ、該ドットデータに、印刷コマンドが付加されることによって、印刷データが生成される。
S60では、CPU210は、印刷処理を実行して、画像処理を終了する。具体的には、CPU210は、印刷データを印刷実行部280に供給して、印刷実行部280に処理済み画像を印刷させる。
以上説明した画像処理によれば、スキャンデータのうち、特定済みの複数個のエッジ画素の値に対して第1の画像処理(具体的には、鮮鋭化処理)が実行され(S40)、複数個の非エッジ画素の値に対して第1の画像処理とは異なる第2の画像処理(具体的には、平滑化処理)が実行され(S30)、さらには、白色エッジ画素の値に対して第3の画像処理(具体的には、白文字強調処理)が実行されて(S45)、処理済み画像データが生成される。この結果、画素の種類に応じて適切な種類の画像処理が実行されるので、スキャンデータに対する適切な画像処理を実現できる。したがって、見栄えの良い処理済み画像FIを示す処理済み画像データを生成することができる。なお、エッジ鮮鋭化処理、網点平滑化処理、白文字強調処理の処理順序は、変更可能であり、例えば、白文字強調処理が最初に実行され、その後に、エッジ鮮鋭化処理、網点平滑化処理が順次に実行されても良い。
例えば、画像処理は、複数個の文字を構成する画素を含む複数個のエッジ画素に対して実行される鮮鋭化処理と、文字を構成する画素とは異なる複数個の画素(例えば、描画や写真を構成する画素)に対して実行される平滑化処理と、を含む。この結果、文字や文字とは異なるオブジェクトを含む処理済み画像FIの見栄えを向上できる。
例えば、処理済み画像FIでは、上述したように、白文字強調処理によって、白文字Ob8f、Ob9fにおいて、色付きなどによって現れた色が白色に置換されているので、印刷される処理済み画像FIにおいて、白文字Ob8f、Ob9fの読みやすさや見栄えを向上することができる。
また、処理済み画像データでは、オブジェクトなどのエッジを構成するエッジ画素の値には、鮮鋭化処理済みの値が用いられている。この結果、処理済み画像FIのエッジがシャープに見えるので、例えば、印刷される処理済み画像FIの見栄えを向上することができる。
さらに、処理済み画像データでは、処理済み画像FI内の背景Bg2などの均一な部分や、オブジェクトのエッジとは異なる部分を構成する非エッジ画素の値には、平滑化処理済みの値が用いられている。この結果、処理済み画像FIのエッジとは異なる部分に、例えば、モアレの原因となる周期成分が表れることを抑制できるので、印刷される処理済み画像FIにモアレなどの不具合が発生することを抑制できる。この結果、印刷される処理済み画像FIの見栄えを向上することができる。
例えば、スキャンデータの生成に用いられた原稿は、画像が印刷された画像である。このため、例えば、原稿内の白とは異なる色を有する背景Bg2などの均一な部分は、画像を形成するドットレベルでみると、網点を形成している。網点は、複数個のドットと、ドットが配置されていない部分(原稿の地色を示す部分)と、を含む。このために、スキャン画像SI内の背景Bg2を示す領域には、画素レベルでみると、網点が示されている。網点内のドットは、原稿の印刷時に用いられるディザマトリクスなどの影響によって、周期性を持って並んでいる。このためにスキャンデータを用いて印刷を行うと、ハーフトーン処理前の元画像(スキャン画像SI)内に存在している網点のドットの周期成分と、印刷画像を構成する網点のドットの周期成分と、が干渉して、モアレが表れやすい。本実施例の処理済み画像FIでは、平滑化処理によって、元画像(スキャン画像SI)内のエッジとは異なる部分のドットの周期成分が低減される。この結果、処理済み画像データを用いて、処理済み画像FIを印刷する場合に、例えば、印刷される処理済み画像FIにモアレが発生することを抑制できる。
A-3.画素分類処理
図2のS20の画素分類処理について説明する。図4は、画素分類処理のフローチャートである。S200では、CPU210は、スキャンデータを用いて、最小成分データを生成する。具体的には、CPU210は、スキャンデータに含まれる複数個の画素の値(RGB値)のそれぞれから、最小成分値Vminを取得する。最小成分値Vminは、RGB値に含まれる複数個の成分値(R値、G値、B値)のうちの最小値である。CPU210は、これらの最小成分値Vminを複数個の画素の値とする画像データを、最小成分データとして生成する。最小成分データは、スキャン画像SIと同じサイズの画像を示す画像データである。最小成分データに含まれる複数個の画素の値のそれぞれは、スキャンデータの対応する画素の値(RGB値)の最小成分値Vminである。
図5は、スキャンデータの最小成分値と最大成分値の説明図である。図5(A)~図5(E)には、RGB値の一例として、シアン(C)、マゼンタ(M)、イエロ(Y)、黒(K)、白(W)のRGB値が、棒グラフで図示されている。図5に示すように、C、M、Y、K、WのRGB値(R、G、B)は、それぞれ、(0、255、255)、(255、0、255)(255、255、0)、(0、0、0)、(255、255、255)である。
これらのRGB値の輝度Yは、例えば、Y=0.299×R+0.587×G+0.114×Bの式を用いて算出できる。C、M、Y、K、Wの輝度(0~255の値で表す)は、約186、113、226、0、255であり、それぞれに異なる値となる(図5)。これに対して、C、M、Y、K、Wの輝度の最小成分値Vminは、図5に示すように、0、0、0、0、255となり、白(W)を除いて同じ値となる。
図6は、画像処理に用いられる画像の一例を示す第2の図である。図6(A)は、スキャン画像SIのうち、上述した網点を含む領域の拡大図である。例えば、図6(A)の例では、スキャン画像SI内の網点領域は、複数個のMドットMDと、複数個のYドットYDと、を含んでいる。ここでは、説明のために、MドットMDを示す画像は、マゼンタの原色を有する均一な画像であり、YドットYDを示す画像は、イエロの原色を有する均一な画像であるとする。
図6(B)には、最小成分データによって示される最小成分画像MNIの一例が示されている。この最小成分画像MNIは、図6(A)のスキャン画像SIに対応している。最小成分画像MNIでは、スキャン画像SIのYドットMDに対応する領域MDb内の画素の値と、YドットYDに対応する領域YDb内の画素の値と、は互いに同じとなる。図6(D)には、比較例として、各画素の輝度を示す輝度画像データによって示される輝度画像YIが示されている。この輝度画像YIは、図6(A)のスキャン画像SIに対応している。輝度画像YIでは、最小成分画像MNIとは異なり、スキャン画像SIのMドットMDに対応する領域MDd内の画素の値と、YドットYDに対応する領域YDd内の画素の値と、は互いに異なる。
以上の説明から解るように、最小成分画像MNIでは、スキャン画像SIにおいて、原稿内のC、M、Y、Kドットが形成された部分に対応する複数個の画素の値の間の差が、輝度画像YIよりも小さくなる。そして、最小成分画像MNIでは、スキャン画像SIにおいて、原稿内の地色(用紙の白色)を示す領域に対応する地色領域の画素の値が、ドットが形成された部分に対応する画素の値よりも大きくなる。
S210では、CPU210は、生成された最小成分データに対して、該最小成分データによって示される最小成分画像MNIを平滑化する平滑化処理を実行して、平滑化済みの最小成分データを生成する。具体的には、CPU210は、最小成分データの各画素の値に、所定の平滑化フィルタ、本実施例では、図4に示すガウスフィルタGFを適用することによって、平滑化済みの各画素の値を算出する。ガウスフィルタGFは、所定のフィルタ範囲、具体的には、縦3画素×横3画素の9個の画素のそれぞれに対応する係数を規定している。換言すれば、ガウスフィルタGFには、注目画素TPに対応する1個の係数と、注目画素TPの上下左右に隣接する4個の画素を含む8個の周辺画素に対応する係数と、が規定されている。注目画素TPに対応する係数は(4/16)である。8個の周辺画素のうち、注目画素TPの上下左右に隣接する4個の画素に対応する係数は、(2/16)であり、注目画素TPの右下、左下、右上、左下に位置する4個の画素に対応する係数は、(1/16)である。CPU210は、注目画素TPと周辺画素とを含むフィルタ範囲内の9個の画素の値に、それぞれ、ガウスフィルタGFに規定される対応する係数を乗じて、9個の修正値を算出する。CPU210は、該9個の修正値の和を、平滑化済みの注目画素の値として算出する。
S220では、CPU210は、平滑化済みの最小成分データに対して、当該平滑化済みの最小成分データによって示される平滑化済みの最小成分画像MNI内のエッジを抽出するエッジ抽出処理を実行して、エッジ抽出データを生成する。具体的には、CPU210は、平滑化済みの最小成分データの各画素の値に、いわゆるソーベルフィルタ(Sobel filter)を適用して、エッジ強度Seを算出する。CPU210は、これらのエッジ強度Seを、複数個の画素の値とするエッジ抽出データを生成する。
以下に、エッジ強度の算出式(1)を示す。式(1)の階調値P(x,y)は、スキャン画像SI内の特定の画素位置(x,y)の階調値を表している。位置xは、第1方向D1の画素位置を示し、位置yは、第2方向D2の画素位置を示している。スキャン画像SI内の画素位置(x,y)におけるエッジ強度Se(x,y)は、その画素位置(x,y)を中心とし隣り合う3行3列の9つの画素の値を用いて算出される。算出式の第1項および第2項は、9つの位置の画素の階調値に、対応する係数をそれぞれ乗じた値の和の絶対値である。第1項は、第1方向D1の階調値の微分(すなわち、横方向の微分)であり、第2項は、第2方向D2の階調値の微分(すなわち、縦方向の微分)である。算出されるエッジ強度Se(x,y)は、0~255の範囲の256階調の値に正規化される。
生成されるエッジ抽出データによって示されるエッジ抽出画像では、スキャン画像SIにおけるエッジに対応する位置、すなわち、図3(B)の二値画像BIにおけるエッジ画素Eg1~Eg8に対応する画素の値が、他の位置の画素の値と比較して大きくなる。
S230では、CPU210は、エッジ抽出データに対して、レベル補正処理を実行して、補正処理済みのエッジ抽出データを生成する。レベル補正処理は、エッジ抽出データの画素の値が取り得る階調値の範囲(本実施例では、0~255の範囲)内の所定範囲を拡大する補正処理である。
図7は、本実施例で用いられるトーンカーブの一例を示す図である。図7(A)には、本ステップのレベル補正処理のためのトーンカーブの一例が示されている。具体的には、CPU210は、エッジ抽出データの各画素の値に対して、図7(A)のトーンカーブを適用する。この結果、閾値Vb(例えば、245)以上の値は、全て最大値(255)に変換されるとともに、閾値Va(例えば、10)以下の値は、全て最小値(0)に変換される。そして、閾値Vaより大きく、かつ、閾値Vb未満の範囲は、0から255の範囲に拡大される。
S240では、CPU210は、補正処理済みのエッジ抽出データに対して、二値化処理を実行して、二値画像データを生成する。例えば、CPU210は、エッジ画像データにおいて、画素の値(すなわち、エッジ強度)が閾値(例えば、128)以上である画素を、エッジ画素に分類し、画素の値が閾値未満である画素を、非エッジ画素に分類する。二値画像データでは、上述したように、エッジ画素の値は、「1」とされ、非エッジ画素の値は、「0」とされる。
S250では、CPU210は、二値画像データに対して、孤立したエッジ画素を除去するとともに、孤立した非エッジ画素を除去する孤立画素除去処理を実行して、孤立画素除去済みの二値画像データを生成する。
図8は、孤立画素除去処理の説明図である。具体的には、CPU210は、二値画像データ内の複数個の画素を注目画素TPとして、該注目画素TPを中心とする所定の範囲内の画素の値が、図8(A)~(D)の左側に示す特定パターンを有するか否かを判断する。図8(A)~(D)おいて、値が「1」の画素は、エッジ画素であることを示し、値が「0」の画素は、非エッジ画素であることを示し、値が「any」の画素は、エッジ画素と非エッジ画素のいずれでも良いことを示す。
図8(A)のパターンは、注目画素TPが非エッジ画素であり、注目画素TPに対して上下に隣接する2個の画素がエッジ画素であるパターンである。図8(B)のパターンは、注目画素TPが非エッジ画素であり、注目画素TPに対して左右に隣接する2個の画素がエッジ画素であるパターンである。図8(A)または図8(B)のパターンを有する場合には、CPU210は、図8(A)または図8(B)の右側に示すように、注目画素TPを、非エッジ画素から、エッジ画素に変更する。
図8(C)のパターンは、注目画素TPがエッジ画素であり、注目画素TPに対して上下左右に隣接する4個の画素が非エッジ画素であるパターンである。図8(C)のパターンを有する場合には、CPU210は、図8(C)の右側に示すように、注目画素TPを、エッジ画素から、非エッジ画素に変更する。
図8(D)のパターンは、注目画素TPを中心とする縦3画素×横3画素の9画素の範囲の外側に隣接し、該9画素の範囲の周囲を囲む16個の画素の全てが非エッジ画素であるパターンである。図8(D)のパターンを有する場合には、CPU210は、図8(D)の右側に示すように、注目画素TPを中心とする縦3画素×横3画素の9画素の全てを、非エッジ画素に設定する。
S250にて生成される孤立画素除去済みの二値画像データが、画素分類処理にて生成される最終的な分類データ、すなわち、図2のS30、S40にて、エッジ画素と非エッジ画素とを特定するために参照される二値画像データである。
以上説明した画素分類処理によれば、CPU210は、スキャンデータに含まれる複数個の画素の値に対応する複数個の対応値を含む最小成分データを生成する(図4のS200)。該最小成分データに含まれる複数個の対応値のそれぞれは、最小成分値Vminである。そして、CPU210は、最小成分データに対してエッジ抽出処理を実行して、エッジ抽出データを生成する(図4のS220)。CPU210は、該エッジ抽出データを二値化する処理(図4のS240)を含むエッジ画素特定処理を実行することによって、スキャン画像SIの複数個のエッジ画素を特定する(図4のS240、S250)。最小成分データでは、特定すべきエッジ画素を含まない部分、例えば、マクロな視点では均一な画像を示す網点領域において、画素間の値の差を抑制できる(図6参照)。この結果、その後のエッジ抽出処理(S220)およびエッジ画素特定処理(S240、S250)を行って、エッジ画素を特定する際に、エッジ画素とは異なる画素が誤ってエッジ画素として特定されることを抑制できる。したがって、スキャン画像SI内のエッジ画素の特定精度を向上できる。
特に、対象画像データが、上記実施例のスキャンデータのように、スキャン画像SI内に網点領域を含む場合には、図6を参照して説明したように、網点領域に含まれるC、M、Y、Kの各ドットを示す複数個の画素の間の値の差を抑制できる。すなわち、網点領域を構成する要素は、C、M、Y、Kの各ドットと、用紙の地色(白)と、の5種類である。本実施例では、これらの要素のうち、4種類の要素を示す画素の間の値の差を抑制できる。例えば、画素レベルの視点(網点を認識できる程度のミクロの視点)でみれば、網点領域であり、かつ、観察者の視点(網点を認識できない程度のマクロの視点)でみれば、均一な領域では、当該領域内において、エッジ画素が検出されるべきではない。本実施例では、例えば、このような領域内において、エッジ画素が誤って特定されることを抑制できる。例えば、スキャン画像SI内の背景Bg2などの均一な部分や、オブジェクトのエッジとは異なる部分において、エッジ画素が誤って特定されることを抑制できる。
一方で、文字の色と、背景の色と、は、一方が、濃い色を有し、他方が薄い色を有する場合が多い。このために、文字と背景のうち、一方は、用紙の地色(白)を示す部分を比較的多く含み、他方は、C、M、Y、Kのドットを示す部分を比較的多く含む場合が多い。図6に示すように、最小成分データでは、C、M、Y、Kのドットを示す部分の画素の値と、用紙の地色(白)を示す部分の画素の値と、の間で、大きな差がある。このために、最小成分データを用いて、エッジ画素を特定すると、文字のエッジを構成するエッジ画素は、適切に特定できる可能性が高い。特に、イエロ(Y)は、C、M、Kと比較して濃度が低い(輝度が高い)。このために、用紙の地色(白)の背景に、イエロの文字がある場合には、仮に輝度画像YIを二値化すると、該イエロの文字のエッジを構成するエッジ画素を、適切に特定できない場合がある。本実施例では、このような場合でも該イエロの文字のエッジを構成するエッジ画素を、適切に特定できる。このために、本実施例によれば、文字のエッジを構成するエッジ画素を適切に特定しつつ、均一な部分やエッジとは異なる部分において、エッジ画素が誤って特定されることを抑制できる。したがって、スキャン画像SI内のエッジ画素の特定精度を向上できる。
さらに、上記画素分類処理によれば、CPU210は、最小成分データに対して、平滑化処理を実行して、平滑化済みの最小成分データを生成する(図4のS210)。CPU210は、平滑化済みの最小成分データに対して、エッジ抽出処理を実行して、エッジ抽出データを生成する(図4のS220)。この結果、平滑化処理によって、最小成分画像MNI内の特定すべきエッジ画素を含まない部分(均一な部分やエッジとは異なる部分)において、画素間の値の差を、さらに抑制できる。例えば、スキャン画像SI内の網点領域において、C、M、Y、Kのドットの重なりや、読取実行部290での読取時のぼけなどによって、ドットを示す部分は、必ずしもC、M、Y、Kの原色を有している訳ではない。このために、最小成分画像MNI内では、C、M、Y、Kの各ドットを示す複数個の画素の間の値が、小さくなってはいるものの、ゼロではない。平滑化処理によって、該画素の間の値の差をさらに小さくすることができる。この結果、エッジ画素とは異なる画素が誤ってエッジ画素として特定されることを、さらに抑制できる。
さらに、上記画素分類処理によれば、CPU210は、エッジ抽出データに対して、レベル補正処理を実行して、補正処理済みのエッジ抽出データを生成する(図4のS230)。CPU210は、補正処理済みのエッジ抽出データを二値化する処理を含むエッジ画素特定処理を実行する(S240、S250)。このように、二値化閾値を含む範囲(図7の閾値Vaより大きく、かつ、閾値Vb未満の範囲)を拡大してから、二値化処理を行うので、二値化の精度を向上できる。したがって、スキャン画像SI内のエッジ画素の特定精度を向上できる。
さらに、上記画素分類処理によれば、CPU210は、図4のS240にて、エッジ抽出データを二値化する処理を実行し、S250にて、得られた二値画像データに対して、孤立したエッジ画素を除去する処理(図8(C)、(D))を含む孤立画素除去処理を実行する。換言すれば、S240にて、複数個のエッジ画素の候補となる複数個の候補画素が特定される。そして、S250では、これらの複数個の候補画素から、孤立した候補画素を除去することで、最終的なエッジ画素が特定される。図6に示すように、最小成分画像MNIでは、C、M、Y、Kのドットを示す画素の値と、地色の白を示す画素の値と、の差が大きい。このために、比較的濃い色の均一な色を示す網点領域内に、地色の白を示す画素が、エッジ画素として誤って検出され得る。あるいは、均一な薄い色の部分において、ドットに対応する画素が、エッジ画素として誤って検出され得る。このような場合には、該誤って検出されるエッジ画素は、孤立している場合が多い。また、孤立したエッジ画素は、実際には、エッジを構成していない可能性が高い。このために、孤立画素除去処理によって、誤って検出されるエッジ画素を適切に除去できる。この結果、さらに、エッジ画素の特定精度を向上できる。
さらに、上記画素分類処理では、孤立画素除去処理は、孤立したエッジ画素を除去する処理に加えて、孤立した非エッジ画素を除去する処理(図8(A)、(B))を含む。このために、文字などのエッジを構成する部分には、非エッジ画素が混在して、文字などのエッジが途切れることを抑制することができる。
さらに、本実施例では、スキャンデータの各画素の値は、RGB表色系の色値(RGB値)である。RGB値では、図6に示すように、C、M、Y、Kの色を示す値の最小成分値Vminが、原理的に等しい値になる。この結果、C、M、Y、Kのドットを示す複数個の画素間の値の差を、適切に抑制することができる。
A-4.白文字特定処理
図2のS25の白文字特定処理について説明する。図9は、白文字特定処理のフローチャートである。S300では、CPU210は、スキャンデータを用いて、白背景文字特定処理を実行する。白背景文字特定処理は、スキャン画像SI内の白背景文字Ob6、Ob7を特定する処理である。図10は、白背景文字特定処理のフローチャートである。
図10のS400では、CPU210は、スキャンデータを用いて輝度データを生成する。具体的には、スキャン画像SIの各画素の色値(RGB値)を、所定の変換式を用いて輝度Yに変換することによって、スキャン画像SIの画素ごとの輝度を表す輝度データが生成される。輝度Yは、RGB値(R、G、B)を用いて、例えば、輝度Y=((0.298912×R)+(0.586611×G)+(0.114478×B))という式で算出される。この例では、RGB値の各成分値および輝度Yは、0~255の256階調の階調値である。
S410では、CPU210は、輝度データを、第1の閾値TH1を用いて二値化する。具体的には、CPU210は、第1の閾値TH1よりも低い輝度を有する画素を、オブジェクト画素に決定し、第1の閾値TH1以上の輝度を有する画素を、白背景画素に決定する。CPU210は、オブジェクト画素の値が「1」とされ、白背景画素の値が「0」とされた白背景オブジェクトデータを生成する。第1の閾値TH1は、例えば、226である。オブジェクト画素は、第1の閾値TH1に対応する明るさより暗い画素と言うことができる。なお、S410で実行される処理が第1の画素特定部により実行される処理の一例であり、S410で特定されるオブジェクト画素が第1の画素の一例である。
図11は、白文字特定処理で用いられる画像の一例を示す図である。図11(A)には、白背景オブジェクトデータによって示される白背景オブジェクト画像KoIの一例が示されている。この白背景オブジェクト画像KoIでは、白い背景Bg1に対応する画素は、全て白背景画素として特定され、背景Bg1とは異なる部分に対応する画素は、全てオブジェクト画素として特定される。図11(A)の例では、スキャン画像SI内のオブジェクトOb1~Ob3、Ob6、Ob7に対応する複数個のオブジェクト画素Ob1k~Ob3k、Ob6k、Ob7kと、背景Bg2と2個の色背景文字Ob4、Ob5に対応する複数個のオブジェクト画素Bg2kと、背景Bg3と2個の白文字Ob8、Ob9に対応する複数個のオブジェクト画素Bg3kと、が特定される。なお、図11(A)に示すように、白背景オブジェクト画像KoIでは、背景Bg2と2個の色背景文字Ob4、Ob5とは分離できておらず、背景Bg3と2個の白文字Ob8、Ob9とも分離できていない。2個の白文字Ob8、Ob9に色付きが発生していない場合には、背景Bg3と白文字Ob8、Ob9とが分離できる場合もあるが、白背景オブジェクト画像KoIでは分離できなくても良い。
S420では、CPU210は、白背景オブジェクトデータに対して、白背景オブジェクト画像KoI内のオブジェクト領域を特定する領域特定処理を実行する。具体的には、白背景オブジェクトデータに対してラベリング処理が実行される。例えば、CPU210は、連続する一つながりの複数個のオブジェクト画素を含む画素群に、1個の識別子を割り当て、互いに離れた複数個のオブジェクト画素をそれぞれ含む複数個の画素群に、互いに異なる識別子を割り当てる。1個の識別子が割り当てられた画素群は、1個のオブジェクト領域として特定される。図11(A)の例では、白背景オブジェクト画像KoIにおいて、7個の符号Ob1k、Ob2k、Ob3k、Ob6k、Ob7k、Bg2k、Bg3kに対応する7個のオブジェクト領域が特定される。例えば、文字は、1文字ずつ離れているので、文字ごとに異なるオブジェクト領域が特定される。写真は、一塊の矩形のオブジェクト領域として特定される。
S430では、CPU210は、特定された複数個のオブジェクト領域の中から、1個の注目領域を選択する。S440では、CPU210は、注目領域の面積は、特定範囲内であるか否かを判断する。注目領域の面積は、該注目領域を構成するオブジェクト画素の個数で表される。このために、例えば、注目領域を構成するオブジェクト画素の個数が、特定範囲であるか否かが判断される。1個の文字は、細線で構成されており、描画や写真よりも小さなサイズであることが一般的である。特定範囲は、文字の面積(画素数)として想定される範囲に予め定められている。特定範囲の上限より大きな面積を有する領域は、描画や写真に対応すると考えられ、特定範囲の下限よりも小さな面積を有する領域は、例えば、ノイズなどの微細な点に対応すると考えられる。特定範囲の上限および下限は、例えば、描画、写真、文字、ノイズを含むサンプル画像を解析して経験的に決定される。このために、例えば、注目領域が文字に対応する領域(例えば、図11(A)のOb6k、Ob7k)である場合には、注目領域の面積は特定範囲内であると判断され、注目領域が描画や写真や背景(例えば、図11(A)のOb1k、Bg2k)である場合には、注目領域の面積は特定範囲外であると判断される。
注目領域の面積が特定範囲内である場合には(S440:YES)、S450にて、CPU210は、注目領域を白背景文字領域に決定する。具体的には、CPU210は、注目領域を構成する画素の値を「1」に維持する。
注目領域の面積が特定範囲外である場合には(S440:NO)、S460にて、CPU210は、注目領域を白背景文字領域とは異なる領域に決定する。具体的には、CPU210は、注目領域を構成する画素の値を「1」から「0」に変更する。
S470では、CPU210は、全てのオブジェクト領域を注目領域として処理したか否かを判断する。未処理のオブジェクト領域がある場合には(S470:NO)、CPU210は、S430に処理を戻す。全てのオブジェクト領域が処理された場合には(S470:YES)、CPU210は、白背景文字特定処理を終了する。
図11(B)には、白背景文字特定処理によって生成された白背景文字データによって示される白背景文字画像KIが示されている。図11(B)の白背景文字画像KIでは、スキャン画像SI内の白文字Ob8、Ob9に対応する複数個のオブジェクト画素Ob6k、Ob6k(白背景文字画素とも呼ぶ)が特定されている。白背景文字画像KIでは、図11(A)の白背景オブジェクト画像KoIでは特定されていた描画や写真や背景に対応するオブジェクト画素Ob1k、Ob2k、Ob3k、Bg2k、Bg3kは、特定されていない。なお、S420からS470で実行される処理が第1の画素群特定部により特定される処理であり、白背景文字領域に決定される各画素である白背景文字画素が第1の文字画素の一例である。
白背景文字特定処理が終了すると、図9のS310では、CPU210は、暗部背景特定処理を実行する。暗部背景特定処理は、スキャン画像SI内の白文字Ob8、Ob9の暗い背景Bg3(暗部背景とも呼ぶ)を特定する処理である。図12は、暗部背景特定処理のフローチャートである。
図12のS500では、CPU210は、図10のS400と同様に、スキャンデータを用いて輝度データを生成する。S400にて生成したスキャンデータが保存されている場合には、輝度データの生成は省略されても良い。
S510では、CPU210は、輝度データを、第2の閾値TH2を用いて二値化する。具体的には、CPU210は、第2の閾値TH2よりも低い輝度を有する画素を、暗部背景の候補である暗部画素に決定し、第2の閾値TH2以上の輝度を有する画素を、暗部画素とは異なる明部画素に決定する。CPU210は、暗部画素の値が「0」とされ、明部画素の値が「1」とされた二値画像データを暗部白抜データとして生成する。第2の閾値TH2は、上述した第1の閾値TH1より小さな値であり、例えば、65である。第2の閾値TH2に対応する明るさは、第1の閾値TH1に対応する明るさよりも暗い、と言うことができる。S510で実行される処理が、第2の画素特定部で実行される処理の一例であり、S510により決定された暗部画素が第2の画素の一例である。
図11(C)には、暗部白抜データによって示される暗部白抜画像OIの一例が示されている。この暗部白抜画像OIでは、スキャン画像SI内の白文字Ob8、Ob9の暗い背景Bg3に対応する複数個の画素が暗部画素Bg3oとして特定され、白文字Ob8、Ob9に対応する画素Ob8d、Ob9dが明部画素として特定されている。すなわち、暗部白抜画像OIでは、白文字Ob8、Ob9に対応する明部画素Ob8d、Ob9dが、その暗い背景Bg3に対応する暗部画素Bg3oとは、分離されて特定されている。
また、暗部白抜画像OIでは、スキャン画像SI内の色背景文字Ob4、Ob5に対応する複数個の画素が暗部画素Ob4o、Ob5oとして特定され、白背景文字Ob6、Ob7に対応する複数個の画素が暗部画素Ob6o、Ob7oとして特定されている。さらに、暗部白抜画像OIでは、スキャン画像SI内の文字とは異なるオブジェクトOb3の暗い部分に対応する画素が暗部画素Ob3oとして特定されている。
S520では、CPU210は、暗部白抜データに、図9のS300にて生成された白背景文字データを合成して、暗部背景データを生成する。具体的には、CPU210は、暗部白抜データと、白背景文字データと、の論理和を取る。
図11(D)には、暗部背景データによって示される暗部背景画像DIの一例が示されている。暗部背景画像DIでは、暗部白抜画像OIでは特定されていた暗部画素Ob3o~Ob7o、Bg3oのうち、スキャン画像SI内の白背景文字Ob6、Ob7に対応する暗部画素Ob6o、Ob7oが除かれ、暗部画素Ob3o~Ob5o、Bg3oが残されている。
暗部背景特定処理が終了すると、図9のS320では、CPU210は、白文字抽出処理Aを実行する。白文字抽出処理Aは、暗部背景データを用いて、スキャン画像SI内の白文字Ob8、Ob9に対応する領域の候補である白文字抽出領域を決定する処理である。図13は、白文字抽出処理Aのフローチャートである。
図13のS600では、CPU210は、スキャンデータに対して、黒飛ばし処理を実行する。図7(B)には、本ステップの黒飛ばし処理のためのトーンカーブの一例が示されている。具体的には、CPU210は、スキャンデータの各画素のR、G、Bの各成分値に対して、図7(B)のトーンカーブを適用する。この結果、閾値Vk以下の成分値は、全て最小値(0)に変換される。また、閾値Vkより大きな成分値は、成分値に応じて、0から255の範囲の値に変換される。閾値Vkを第3の閾値Vkとも呼ぶ。
S605では、CPU210は、黒飛ばし処理後のスキャンデータを用いて、黒色画素を抽出して、黒色データを生成する。具体的には、CPU210は、黒飛ばし処理後のスキャンデータにおいて、画素の値(RGB値)が(R、G、B)=(0、0、0)である画素を黒色画素として決定する。CPU210は、黒色画素の値を「1」とし、黒色画素とは異なる画素(非黒色画素とも呼ぶ)の値を「0」とした二値画像データを黒色データとして生成する。以上の説明から解るように、黒色画素は、黒もしくは黒に近似した色を有する画素であり、黒飛ばし処理がなされる前のスキャンデータのうち、画素のRGB値(R、G、B)が、R≦Vk、かつ、G≦Vk、かつ、B≦Vkを満たす画素である、と言うこともできる。
図14は、白文字特定処理で用いられる画像の一例を示す図である。図14(A)には、黒色データによって示される黒色画像TIの一例が示されている。この黒色画像TIでは、スキャン画像SI内の色背景文字Ob4、Ob5に対応する複数個の画素が黒色画素Ob4t、Ob5tとして特定されている。黒色画像TIでは、他のオブジェクトの黒色の部分に対応する画素も黒色画素として特定され得る。図14(A)の例では、黒色画像TIにおいて、スキャン画像SIのオブジェクトOb3の一部に対応する黒色画素Ob3tが特定されている。
S610では、CPU210は、生成された黒色データに対して、膨張・収縮処理を実行して、膨張・収縮処理済みの黒色画像データを生成する。膨張・収縮処理は、黒色画像TI内において、特定済みの複数個の黒色画素によって構成される黒色オブジェクトを膨張させる膨張処理と、膨張処理済みの該黒色オブジェクトを収縮させる収縮処理と、を含む。なお、本実施例では、1回の膨張処理の後に、2回の収縮処理が実行される。
図15は、膨張処理と収縮処理とを説明する図である。図15(A)には、黒色画像TI(図14(A))の部分画像PI1が示されている。部分画像PI1は、膨張処理前の黒色オブジェクトPtA、PtBを含んでいる。2個の黒色オブジェクトPtA、PtBは、隙間NTによって分離されている。また、黒色オブジェクトPtAには、欠けCRが生じており、黒色オブジェクトPtBには、孤立した非黒色画素IPが含まれている。特定すべきターゲットである文字は細線で構成されるために文字に対応する黒色オブジェクトは、このような隙間NT、欠けCR、孤立した非黒色画素IPを含みやすい。文字に対応する黒色オブジェクトを精度良く特定するためには、これらを除去することが好ましい。膨張・収縮処理は、これらの隙間NT、欠けCR、孤立した非黒色画素IPを除去するために、実行される。
膨張処理は、例えば、所定サイズのフィルタ、図15(A)の例では、縦3画素×横3画素のサイズのフィルタFI1を用いて、黒色データに対して実行される。具体的には、CPU210は、フィルタFI1を、黒色データに対して適用して、膨張処理済みの黒色データを生成する。すなわち、CPU210は、注目画素に、フィルタFI1の中心位置CC1(図15(A)参照)が重なるように、フィルタFI1を、部分画像PI1を含む黒色画像TI上に配置する。CPU210は、フィルタFI1の範囲内に、黒色画素が1個でも存在する場合には、注目画素に対応する膨張処理済み画像(図示省略)内の画素を黒色画素に設定する。CPU210は、フィルタFI1の範囲内に、黒色画素が1つもない場合、すなわち、フィルタFI1の範囲内の9個の画素が、非黒色画素である場合には、注目画素に対応する膨張処理済み画像内の画素を非黒色画素に設定する。CPU210は、黒色画像TIの全ての画素を注目画素として、膨張処理済み画像内の対応する画素を、黒色画素および非黒色画素のいずれかに設定することによって、膨張処理済み画像を示す二値画像データを生成する。
図15(B)には、膨張処理済み画像のうちの、図15(A)の部分画像PI1に対応する部分画像PI2が示されている。部分画像PI2では、上述の隙間NT、欠けCR、孤立した非黒色画素IPが除去されていることが解る。また、部分画像PI2では、図15(A)の部分画像PI1の黒色オブジェクトPtA、PtBに対応する1個の黒色オブジェクトPtCは、黒色オブジェクトPtA、PtBと比較して、太くなっている(膨張している)。
収縮処理は、例えば、所定サイズのフィルタ、図15(B)の例では、縦3画素×横3画素のサイズのフィルタFI2を用いて、膨張処理済み画像を示す二値画像データに対して実行される。具体的には、CPU210は、フィルタFI2を、膨張処理済み画像を示す二値画像データに対して適用して、収縮処理済み画像を示す二値画像データを生成する。すなわち、CPU210は、注目画素に、フィルタFI2の中心位置CC2(図15(B)参照)が重なるように、フィルタFI2を膨張処理済み画像上に配置する。CPU210は、フィルタFI2の範囲内に、非黒色画素が1個でも存在する場合には、注目画素に対応する収縮処理済み画像内の画素を非黒色画素に設定する。そして、CPU210は、フィルタFI2の範囲内に、非黒色画素が1つもない場合、すなわち、フィルタFI2の範囲内の9個の画素が、全て黒色画素である場合には、注目画素に対応する収縮済み画像内の画素を黒色画素に設定する。CPU210は、膨張処理済み画像の全ての画素を注目画素として、収縮処理済み画像内の対応する画素を、非黒色画素および黒色画素のいずれかに設定することによって、収縮処理済み画像を示す二値画像データを生成する。
図15(C)には、収縮処理済み画像のうちの、図15(A)の部分画像PI1に対応する部分画像PI3が示されている。部分画像PI3には、上述の隙間NT、欠けCR、孤立した非黒色画素IPは、現れていない。そして、図15(A)の部分画像PI1の黒色オブジェクトPtA、PtBに対応する1個の黒色オブジェクトPtDは、図15(B)の部分画像PI2内の黒色オブジェクトPtCよりも収縮している。
なお、上述したフィルタFI1、FI2のサイズ、すなわち、膨張処理による膨張の程度、および、収縮処理による収縮の程度は、一例である。例えば、フィルタFI1、FI2は、例えば、縦5画素×横5画素のフィルタであっても良いし、縦7画素×横7画素のフィルタであっても良い。
S615では、CPU210は、図9のS310にて生成された暗部背景データに、膨張・収縮処理済みの黒色データを合成する。具体的には、CPU210は、暗部背景データと、黒色データと、の論理和を取る。
図14(B)には、黒色データ合成後の暗部背景データによって示される暗部背景画像DkIの一例が示されている。黒色データ合成後の暗部背景画像DkIでは、黒色データが合成される前の暗部背景画像DI(図11(D))では特定されていた暗部画素Ob3o~Ob5o、Bg3oのうち、スキャン画像SI内の色背景文字Ob4、Ob5に対応する暗部画素Ob4o、Ob5oが除かれ、暗部画素Ob3o、Bg3oが残されている。図14(B)に示すように、黒色データ合成後の暗部背景画像DkIでは、依然として、スキャン画像SI内の白文字Ob8、Ob9の背景Bg3に対応する暗部画素Bg3oが、白文字Ob8、Ob9に対応する明部画素Ob8d、Ob9dと分離して特定されている。
S620では、CPU210は、黒色データ合成後の暗部背景データに対して、収縮処理を実行する。本ステップでは、暗部画素によって構成される領域を収縮するように2回の収縮処理が実行される。1回の収縮処理では、CPU210は、各画素に図15(B)のフィルタFI2を適用し、フィルタFI2の範囲内に明部画素が1個でも存在する場合には、注目画素に対応する収縮処理済み画像内の画素を明部画素に設定する。そして、CPU210は、フィルタFI2の範囲内に明部画素が1つもない場合、すなわち、フィルタFI2の範囲内の9個の画素が全て暗部画素である場合には、注目画素に対応する収縮済み画像内の画素を暗部画素に設定する。これによって、暗部画素で構成される領域は収縮され、明部画素で構成される領域は膨張される。
S625では、CPU210は、以下では、収縮処理済みの暗部背景データに対して、暗部背景画像DkI内の明部領域を特定する領域特定処理を実行する。明部領域は、複数個の明部画素によって構成される領域である。具体的には、以下では、収縮処理済みの暗部背景データに対してラベリング処理が実行される。ラベリング処理は、図10のS420にて説明した処理と同様である。これによって、暗部背景画像DkIにおける黒い部分が明部領域として特定される。図14(B)の例では、暗部背景画像DkIにおいて、スキャン画像SI内の白文字Ob8、Ob9に対応する明部画素Ob8d、Ob9dと、暗部画素Ob3oに囲まれた明部画素Ob3dと、スキャン画像SIの白い背景Bg1を含む大部分に対応する明部画素Bgdと、に対応する4個の明部領域がそれぞれ特定される。
S630では、CPU210は、特定された複数個の明部領域の中から、1個の注目領域を選択する。S635では、CPU210は、注目領域の面積は、特定範囲内であるか否かを判断する。ここで、用いられる特定範囲は、図10のS440にて用いられた特定範囲と同じであり、文字の面積(画素数)として想定される面積(画素数)の範囲である(例えば、50個以上10000個以下)。このために、例えば、注目領域が文字に対応する領域(例えば、図14(B)のOb8d、Ob9d)である場合には、注目領域の面積は特定範囲内であると判断され、注目領域が描画や写真や背景(例えば、図14(B)のOb3d、Bgd)である場合には、注目領域の面積は特定範囲外であると判断される。
注目領域の面積が特定範囲内である場合には(S635:YES)、S640にて、CPU210は、注目領域を白文字抽出領域に決定する。具体的には、CPU210は、注目領域を構成する画素の値を「1」に維持する。
注目領域の面積が特定範囲外である場合には(S635:NO)、S645にて、CPU210は、注目領域を白文字抽出領域とは異なる領域に決定する。具体的には、CPU210は、注目領域を構成する画素の値を「1」から「0」に変更する。
S650では、CPU210は、全ての明部領域を注目領域として処理したか否かを判断する。未処理の明部領域がある場合には(S650:NO)、CPU210は、S630に処理を戻す。全ての明部領域が処理された場合には(S650:YES)、CPU210は、白文字抽出処理Aを終了する。この時点で、決定された白文字抽出領域を構成する画素を示す二値画像データが生成されている。この二値画像データを白文字抽出データとも呼び、該白文字抽出データによって特定される画素を抽出画素とも呼ぶ。
図14(C)には、白文字抽出データによって示される白文字抽出画像CIが示されている。図14(C)の白文字抽出画像CIでは、スキャン画像SI内の白文字Ob8、Ob9に対応する複数個の抽出画素Ob8c、Ob9cが特定されている。
白文字抽出処理Aが終了すると、図9のS330では、CPU210は、白文字抽出処理Bを実行する。白文字抽出処理Bは、白文字抽出画像CIにて特定済みの抽出画素の色が白色であるか否かを確認する処理である。図16は、白文字抽出処理Bのフローチャートである。
図16のS700では、CPU210は、スキャンデータに対して、白飛ばし処理を実行する。図7(C)には、本ステップの白飛ばし処理のためのトーンカーブの一例が示されている。具体的には、CPU210は、スキャンデータの各画素のR、G、Bの各成分値に対して、図7(C)のトーンカーブを適用する。この結果、閾値Vw以上の成分値は、全て最大値(255)に変換される。また、閾値Vw未満の成分値は、成分値に応じて、0から255の範囲の値に変換される。
S710では、CPU210は、白文字抽出処理Aにて生成された白文字抽出データを参照して、白文字抽出画像CI内の複数個の抽出画素(図14(C))の中から、1個の注目画素を選択する。
S720では、CPU210は、白飛ばし処理後のスキャンデータを参照して、注目画素に対応する白飛ばし処理後のスキャン画像SI内の画素の値が、白色範囲内であるか否かを判断する。白色範囲は、特定すべき白文字の色の範囲(白および白に近似した色の範囲)である。白色範囲は、例えば、輝度が所定の閾値以上であり、かつ、彩度が所定の閾値以下である範囲である。輝度の閾値は、例えば、輝度が0~255の値を取る場合に230である。彩度は、例えば、0~255の値を取るRGBの成分値のうちの最大値MAX(RGB)と最小値MIN(RGB)との差分で表される。その場合に彩度の閾値は、例えば、20である。白色範囲を規定する閾値を第4の閾値とも呼ぶ。
注目画素の値が白色範囲内である場合には(S720:YES)、S730にて、CPU210は、注目画素を抽出画素に維持する。具体的には、CPU210は、白文字抽出データにおいて、注目画素の値を「1」に維持する。
注目画素の値が白色範囲外である場合には(S720:NO)、S740にて、CPU210は、注目画素を抽出画素とは異なる画素に決定する。具体的には、CPU210は、白文字抽出データにおいて、注目画素の値を「1」から「0」に変更する。
S750では、CPU210は、全ての抽出画素を注目画素として処理したか否かを判断する。未処理の抽出画素がある場合には(S750:NO)、CPU210は、S710に処理を戻す。全ての抽出画素が処理された場合には(S750:YES)、CPU210は、白文字抽出処理Bを終了する。これによって、白色を有すると確認された抽出画素だけが特定された最終的な白文字抽出データが生成される。例えば、白文字抽出処理Aが終了した時点では、図13のS620の暗部領域を収縮する収縮処理によって明部領域が膨張されているので、抽出画素は、実際に白文字を構成する画素に加えて、白文字の周囲に位置する画素を含み得る。白文字抽出処理Bによって、実際に白文字を構成する画素が精度良く抽出画素として特定できる。
白文字抽出処理Bが終了すると、図9のS340では、CPU210は、図2のS20の画素分類処理によって生成された分類データ(図3(B)参照)と、白文字抽出処理Bによって生成された白文字抽出データと、の論理積を取ることによって、白文字特定データを生成する。白文字特定データによって示される白文字特定画像WI(図3(C))は、上述したように、図2のS45の白文字強調処理の対象とすべき白文字エッジ画素を特定するデータである。なお、図9のS310の暗部背景特定処理におけるS520から、図9のS340までの一連の処理が文字画素特定部により実行される処理の一例である。
なお、上述した各二値画像BI、WI、KoI、KI、OI、DkI、DI、TI、CIの各画素は、スキャン画像SIの画素と対応しているので、これらの二値画像を示す二値画像データにおいて特定の画素(例えば、オブジェクト画素や抽出画素)を特定することは、スキャン画像SIにおいて、該特定の画素に対応する画素を特定することに等しい。
以上説明した本実施例によれば、スキャンデータと、第1の閾値TH1と、を用いて、スキャン画像SI内の複数個の画素の中から複数個のオブジェクト画素Ob1k~Ob3k、Ob6k、Ob7k、Bg2k、Bg3kが特定される(図11(A)、図10のS410)。これらの複数個のオブジェクト画素の中から、スキャン画像SI内の白背景文字Ob6、Ob7を構成する白背景文字画素Ob6k、Ob6kを含む画素群が特定される(図11(B)、図10のS440~S470)。白背景文字Ob6、Ob7は、第1の閾値TH1に対応する第1の明るさ以上の明るさを有する背景(本実施例では、白い背景Bg1)上に位置し、該第1の明るさより暗い文字である、と言うことができる。さらに、スキャンデータと、第1の明るさよりも暗い第2の明るさに対応する第2の閾値TH2と、を用いて、スキャン画像SI内の複数個の画素の中から該第2の明るさよりも暗い複数個の暗部画素Ob3o~Ob7o、Bg3oが特定される(図11(C)、図12のS510)。そして、これらの特定結果を用いて、スキャン画像SI内の白文字Ob8、Ob9に対応する複数個の白文字エッジ画素Ob8w、Ob9wが特定される(図3(C)、図12のS520、図9のS320~340)。白文字Ob8、Ob9は、第2の閾値TH2に対応する第2の明るさよりも暗い背景(例えば、背景Bg3)上に位置し、第2の明るさ以上の明るさを有する文字である。そして、特定された白文字エッジ画素に対して、白文字強調処理が実行される(図2のS45)。
この結果、第1の閾値TH1と第2の閾値TH2とを用いて、比較的暗い背景(例えば、背景Bg3)上に位置する比較的明るい文字(例えば、白文字Ob8、Ob9)を精度良く特定することができる。この結果、比較的暗い背景上に位置する比較的明るい文字に対して適切に画像処理(例えば、白文字強調処理)を実行することができる。
さらに、上記実施例によれば、CPU210は、スキャンデータを用いて、複数個の白文字エッジ画素Ob8w、Ob9wの候補となる複数個のエッジ画素Eg1~Eg11(図13(B))を特定する(図2のS20、図4)。複数個のエッジ画素を特定する分類処理(図4)は、スキャン画像SI内のエッジを抽出するエッジ抽出処理(図4のS210)を含む。CPU210は、複数個のエッジ画素Eg1~Eg11の中から、複数個の白文字エッジ画素Ob8w、Ob9wを特定する(図9のS340)。この結果、エッジ抽出処理を含む分類処理にて特定されたエッジ画素の中から、白文字エッジ画素Ob8w、Ob9wが特定されるので、白文字エッジ画素Ob8w、Ob9wがさらに精度良く特定される。
さらに、上記実施例によれば、スキャンデータは、RGB表色系の色値で各画素の色を示すRGB画像データであり、エッジ抽出処理は、RGB画像データを用いて実行される。この結果、RGB画像データを用いて白文字エッジ画素の候補となるエッジ画素を精度良く特定することができる。例えば、本実施例では、上述したようにRGB画像データを用いて生成される最小成分データを用いて、エッジ画素を精度良く特定することができる。
さらに、上記実施例によれば、CPU210は、第3の閾値Vkよりも黒に近い色を有する複数個の黒色画素を特定する(図13のS600~S610)。これらの黒色画素を特定する黒色データが、暗部背景データに合成されることによって(図13のS615)、黒色画素は、白文字エッジ画素の候補から除かれる。すなわち、特定される複数個の白文字エッジ画素は、複数個の黒色画素を含まない。この結果、例えば、有色の背景上に位置する黒色の色背景文字Ob4、Ob5を構成する画素を含まないように、適切に白文字エッジ画素が特定される。
さらに、上記実施例によれば、特定される白文字エッジ画素Ob8w、Ob9wは、図14(B)、(C)、図3(C)から解るように、複数個の暗部画素Bg3oに囲まれた領域内の画素であって、暗部画素とは異なる画素を含む。このように、比較的暗い背景上に位置する比較的明るい文字を構成する画素が、白文字エッジ画素Ob8w、Ob9wとして適切に特定できる。
さらに、上記実施例によれば、CPU210は、複数個の暗部画素Ob3o、Bg3oとは異なる複数個の明部画素Ob8d、Ob9d、Ob3d、Bgd(図14(B))を特定し、これらの明部画素が連続する領域である2以上の明部領域を特定する(図13のS625)。そして、これらの明部領域のうちの特定範囲内の面積を有する領域内の2以上の画素を、白文字エッジ画素Ob8w、Ob9wの候補である抽出画素Ob8c、Ob9cとして特定する(図13のS630~S650)。この結果、特定範囲内の面積を有するか否かに基づいて、白文字エッジ画素Ob8w、Ob9wの候補である抽出画素Ob8c、Ob9cを適切に特定することができる。
さらに、上記実施例によれば、CPU210は、特定範囲内の面積を有する領域内の複数個の抽出画素Ob8c、Ob9cのうちの所定の白色範囲内の色を有する2以上の画素を、白文字エッジ画素Ob8w、Ob9wの候補である抽出画素として最終的に特定する(図9のS330、図16)。この結果、白色に近い色を有する白文字Ob8、Ob9を構成する画素を白文字エッジ画素Ob8w、Ob9wとして適切に特定できる。
以上の説明から解るように、本実施例の図10のS410にて第1の閾値TH1を用いて特定される複数個のオブジェクト画素Ob1k~Ob3k、Ob6k、Ob7k、Bg2k、Bg3k(図11(A))は、第1の画素の例である。また、図12のS510にて第2の閾値TH2を用いて特定される複数個の暗部画素Ob3o~Ob7o、Bg3o(図11(C))は、第2の画素の例である。図13のS625にてラベリングされる複数個の明部画素Ob8d、Ob9d、Ob3d、Bgd(図14(B))は、第3の画素の例である。図10の白背景文字特定処理にて特定される白背景文字領域を構成する複数個の白背景文字画素Ob6k、Ob7k(図11(A))は、第1の文字画素の例である。図9の白文字特定処理によって特定される複数個の白文字エッジ画素Ob8w、Ob9w(図3(C))は、第2の文字画素の例である。図4の画素分類処理によって特定される複数個のエッジ画素Eg1~Eg11(図3(B))は、文字候補画素の例である。
C.変形例:
(1)図10の白背景文字特定処理では、複数個のオブジェクト画素Ob1k~Ob3k、Ob6k、Ob7k、Bg2k、Bg3kにラベリングし、ラベリングされたオブジェクト領域の面積(画素数)に基づいて、複数個のオブジェクト画素の中から白背景文字画素Ob6k、Ob7kを特定している。これに限らず、他の手法を用いて複数個のオブジェクト画素の中から白背景文字画素を特定しても良い。例えば、オブジェクト領域に外接する外接矩形の面積に対するオブジェクト領域の面積の比率が所定範囲内である場合に、該オブジェクト領域内の画素を白背景文字画素として特定しても良い。あるいは、オブジェクト領域内の画素の値のヒストグラムが、所定の文字の特徴(例えば、写真よりも色数が少ない)を示す場合に、該オブジェクト領域内の画素を白背景文字画素として特定しても良い。
(2)図13の白文字抽出処理Aでは、複数個の明部画素Ob8d、Ob9d、Ob3d、Obdにラベリングし、ラベリングされた明部領域の面積(画素数)に基づいて、複数個の明部画素の中から抽出画素Ob8c、Ob9cを特定している。これに限らず、変形例(1)と同様に、他の手法を用いて複数個の明部画素の中から抽出画素を特定しても良い。
(3)上記実施例では、抽出画素Ob8c、Ob9cを示す白文字抽出データと、エッジ画素を示す分類データと、の論理積を取って、白文字強調処理の対象とする画素(白文字エッジ画素)を決定している。これに代えて、抽出画素Ob8c、Ob9cを白文字強調処理の対象とする画素としても良い。
(4)上記実施例の白文字特定処理(図9)は、適宜に変更可能である。例えば、S320の白文字抽出処理A(図13)において、S600~S620を省略しても良い。この場合には、例えば、黒色データが合成されない暗部白抜データ(図11)に対してラベリングが行われても良い。また、白文字抽出処理Aにおいて、S610とS620とが省略されても良い。白文字抽出処理Bの全体が省略されても良い。
(5)上記各実施例では、スキャンデータの各画素の値は、RGB値であるが、他の表色系の色値であっても良い。例えば、スキャンデータの各画素の値は、C、M、Yの3個の成分値を含むCMY表色系の色値であっても良い。
(6)上記各実施例では、エッジ画素に対して、エッジ鮮鋭化処理が実行され(図2のS40)、非エッジ画素に対して、網点平滑化処理が実行される(図2のS30)。これに代えて、エッジ画素に対しては、文字の見栄えを向上するためのアンチエイリアス処理が実行されても良い。また、非エッジ画素に対しては、例えば、印刷時の色材の使用量を減らすために、色を飛ばす処理(白に変換する処理)が実行されても良い。一般的には、エッジ画素と、エッジ画素と、に互いに異なる画像処理が実行されることが好ましい。あるいは、エッジ画素と非エッジ画素のいずれか一方に対して、特定の画像処理が実行され、他方に対して、該特定の画像処理が実行されなくても良い。
(7)上記実施例では、白文字強調処理では、白文字エッジ画素Ob8w、Ob9wの値が、予め定められた白色を示す値に変換される。これに代えて、白文字エッジ画素Ob8wの値は、図14(C)の複数個の抽出画素Ob8cのRGB値の平均値に変換され、白文字エッジ画素Ob9wの値は、複数個の抽出画素Ob9cのRGB値の平均値に変換されても良い。
(8)上記実施例では、図4のエッジ抽出処理において、ソーベルフィルタ(Sobel filter)が用いられている。これに代えて、エッジ抽出処理では、ロバーツフィルタや、ラプラシアンフィルタなどの他のエッジ抽出フィルタが用いられても良い。
(9)上記実施例では、対象画像データは、スキャンデータであるが、これに限られない。対象画像データは、原稿をデジタルカメラによって撮影して生成される撮像画像データであっても良い。
(10)上記実施例では、図2のS50では、処理済み画像データを用いて印刷データが生成される。これに代えて、処理済み画像データを用いて、保存用の画像データ(例えば、PDFファイル)が生成されても良い。
(11)図2の画像処理を実現する画像処理装置は、複合機200に限らず、種々の装置であってよい。例えば、スキャナやデジタルカメラが、自身で生成された対象画像データを用いて、プリンタに供給するための印刷データを生成するために、図2の画像処理を実行しても良い。また、例えば、スキャナやプリンタと通信可能な接続される端末装置(例えば、端末装置100)やサーバ(図示省略)が、スキャナから取得したスキャンデータを用いて、図2の画像処理を実行して、印刷データを生成し、該印刷データをプリンタに供給しても良い。また、ネットワークを介して互いに通信可能な複数個のコンピュータ(例えば、クラウドサーバ)が、画像処理に要する機能を一部ずつ分担して、全体として、画像処理を実行してもよい。この場合、複数個のコンピュータの全体が、画像処理装置の例である。
(12)上記各実施例において、ハードウェアによって実現されていた構成の一部をソフトウェアに置き換えるようにしてもよく、逆に、ソフトウェアによって実現されていた構成の一部あるいは全部をハードウェアに置き換えるようにしてもよい。例えば、図2の画像処理の一部の処理(例えば、白飛ばし処理や黒飛ばし処理)は、ASICなどの専用のハードウェアによって、実行されても良い。
以上、実施例、変形例に基づき本発明について説明してきたが、上記した発明の実施の形態は、本発明の理解を容易にするためのものであり、本発明を限定するものではない。本発明は、その趣旨並びに特許請求の範囲を逸脱することなく、変更、改良され得ると共に、本発明にはその等価物が含まれる。