本発明の一実施形態を、図面を参照して説明する。図1を参照し、画像処理システム10を説明する。画像処理システム10は、画像読取装置1、及びPC2を備える。画像読取装置1及びPC2は、通信ケーブル3を介して接続される。画像読取装置1は、内蔵されたイメージセンサによって、原稿1Aから画像を読み取る。具体的に、イメージセンサは、原稿1Aに光を射出し、原稿1Aからの反射光を検出することで、原稿1Aから画像を読み取る。画像読取装置1は、読み取った画像を画像データにデータ化する。以下、画像読取装置1によって読み取られた原稿1Aの画像を、「元画像」といい、データ化された元画像を、「元画像データ」という。本実施形態の画像読取装置1は、一枚の原稿1Aから画像を読取る毎に、一ページ分の元画像データを生成する。
画像読取装置1は、通信ケーブル3を介して元画像データをPC2に出力する。本実施形態において、画像読取装置1は周知のシートフィードスキャナである。PC2は、画像読取装置1から出力された元画像データを、通信ケーブル3を介して受信する。一例として元画像データは、256階調の3原色(Red,Green,Blue)の色値を有する複数の画素によって元画像を示すBMP形式の画像データである。なお、画像読取装置1はシートフィードスキャナに限定されず、フラットベッドスキャナなど、他の周知のイメージスキャナでもよい。元画像データはBMP形式に限定されず、JPG,GIF,PNGなど、他の形式のデータでもよい。
PC2の電気的構成を説明する。PC2は、PC2の制御を司るCPU21を備える。CPU21は、ROM22、RAM23、HDD24、ドライブ装置25、第1通信インタフェース(I/F)26、第2通信I/F27、入力部28、及び表示部29と電気的に接続する。ROM22には、ブートプログラム、Basic Input/Output System(BIOS)等が記憶される。RAM23には、一時的なデータが記憶される。HDD24は、コンピュータが読取り可能な非一時的な記憶媒体、例えばハードディスク等で構成される。HDD24には、CPU21に処理を実行させるためのアプリケーションプログラム(以下、単に「プログラム」という。)、及びOSが記憶される。プログラムは、画像読取装置1に画像読取りを実行させるためのドライバプログラムを含む。HDD24には、通信ケーブル3を介して画像読取装置1から受信した元画像データが記憶されるデータバッファが設けられる。
ドライブ装置25は、光学メディアなどの記憶媒体25Aに記憶された情報を読み出すことができる。CPU21は、記憶媒体25Aに記憶されたプログラムをドライブ装置25によって読み出し、HDD24に記憶できる。第1通信I/F26は、PC2が通信ケーブル3を介して画像読取装置1と接続するためのインタフェース素子である。第2通信I/F27は、PC2が図示外のネットワークを介して他の機器と接続するためのインタフェース素子である。入力部28は、例えば、ボタン、キーボード、マウス等を含む。表示部29はLiquid Crystal Display(LCD)である。
なお、HDD24は、例えば、フラッシュメモリ及び/又はROM等の他の非一時的な記憶媒体で構成されてもよい。非一時的な記憶媒体は、情報を記憶する期間に関わらず、情報を留めておくことが可能な記憶媒体であればよい。非一時的な記憶媒体は、一時的な記憶媒体(例えば、伝送される信号)を含まなくてもよい。CPU21として、汎用的なプロセッサーが用いられてもよい。CPU21によって実行される処理の一部は、他の電子部品(例えば、ASIC)によって実行されてもよい。CPU21によって実行される処理は、複数の電子機器(つまり、複数のCPU)によって分散処理されてもよい。プログラムは、例えば、図示外のネットワークに接続されたサーバからダウンロードされて(即ち、伝送信号として送信され)、HDD24に記憶されてもよい。この場合、プログラムは、サーバに備えられたHDDなどの非一時的な記憶媒体に保存されていることとなる。
PC2のCPU21によって実行される処理を説明する。本実施形態では、ユーザは原稿1Aを画像読取装置1にセットした後、PC2を操作してドライバプログラムを起動する。CPU21は、起動されたドライバプログラムを実行して、ユーザの操作に応じて画像読取装置1に画像読取り指示を送信する。画像読取り指示を受信した画像読取装置1は、原稿1Aから画像を読取り、元画像データを生成してPC2に送信する。
本実施形態では、ユーザはドライバプログラムが提供するインタフェース画面を介して、ノイズ除去機能を実行するかを選択できる。ノイズ除去機能は、画像データにノイズ画像が含まれている場合、そのノイズ画像を除去又は低減する機能である。ノイズ画像は、例えば異物画像及び裏写り画像である。異物画像は、例えば、原稿に印刷されている画像とは異なる異物(例えば、ゴミやシミ等)の画像である。裏写り画像は、原稿の読取面とは反対面に表された画像が、原稿の読取面側に透けて現れる画像である。また、原稿の地紋が不要な場合、地紋もノイズ画像として見なされてよい。
ノイズ除去機能の実行が選択されている場合、CPU21はドライバプログラムに基づいて、PC2から受信した元画像データを対象にメイン処理(図2参照)を実行する。なおCPU21は、PC2から元画像データを受信する毎に、受信した元画像データを対象にメイン処理を自動的に実行してもよい。CPU21は、ユーザが元画像データを指定してノイズ除去機能の実行を指示した場合に、指定された元画像データを対象にメイン処理を実行してもよい。
図2に示すメイン処理において、まずCPU21はHDD24から1ページ分の元画像データを取得して、RAM23に読み出す(S1)。なおCPU21は、以下の各処理をRAM23の記憶領域上で実行する。次いでCPU21は、図3に示す地色候補取得処理を実行する(S3)。地色は、画像読取装置1で読み取られた原稿1Aの用紙色である。
図3に示すように、まずCPU21は、S1で取得した元画像データに基づいて、G値のヒストグラムであるhistGを生成する(S21)。詳細には、CPU21は、元画像データの全画素(例えば、600画素×400画素=二十四万画素)の各G値に基づいて、横軸がG値の256階調、縦軸が頻度(画素数)を示すヒストグラムを生成する。CPU21は、生成したhistGに基づいて、最頻値のG値であるbackGを取得する(S23)。最頻値は、ヒストグラム中で最も画素数が多い階調値である。
読取り画像のうち、読取られた原稿のうちで画像が印刷されていない部分を、地色画像という。通常の読取り画像では、地色画像が読取り画像中で最も大きな面積を占め、且つ、地色画像が視覚的に明るい色(例えば、輝度の高い色)で構成される。3原色(Red,Green,Blue)のうち、Greenは最も色の明るさを示す色要素(例えば、輝度)に近い特性を有する。従ってCPU21は、G値のヒストグラム(histG)に基づいて、地色画像を示す可能性が高い画素と共に、その画素の数量及びG値をより正確に特定できる。
CPU21は、取得したbackGを有する全ての画素に基づいて、R値のヒストグラムであるhistRgと、B値のヒストグラムであるhistBgとを生成する(S25)。例えばCPU21は、元画像データのうちでbackGを有する画素が十八万画素であった場合、これらの十八万画素のみでhistRg及びhistBgを生成する。histRgは、横軸が赤の256階調、縦軸が頻度(画素数)を示すヒストグラムである。histBgは、横軸が青の256階調、縦軸が頻度(画素数)を示すヒストグラムである。CPU21は、生成したhistRgに基づいて最頻値のR値であるbackRを取得し、且つ生成したhistBgに基づいて最頻値のB値であるbackBを取得する(S27)。これにより、CPU21は地色画像を示す可能性が高い画素のR値及びB値を取得する。
次いでCPU21は、取得したRGB色空間の色値(backR,backG,backB)を、YCbCr色空間の色値に変換する(S29)。これによりCPU21は、地色の候補色(backY,backCb,backCr)を取得する。CPU21は、RGB色空間の色値をYCbCr色空間の色値に変換する場合、以下の式(1)〜(3)を用いてY値(輝度)、Cb値、Cr値を算出すればよい。なお、式(1)〜(3)における「>>10」は、10ビットの右シフトであり、2−10(=1/1024)を乗算することを示す。
Y=(306×R+601×G+117×B)>>10・・・式(1)
Cb=(−174×R−338×G+512×B)>>10・・・式(2)
Cr=(512×R−430×G−82×B)>>10・・・式(3)
その後、CPU21は処理をメイン処理(図2参照)に戻す。なお、Cb値、Cr値に関しては、正の整数値とするために、上記式(2)及び式(3)で求めた値に、「128」を加算してもよい。
図2に示すメイン処理において、CPU21はS3の実行後、図4に示す背景閾値算出処理を実行する(S5)。図4に示すように、まずCPU21は、有効画素閾値(pthresh)を算出する(S31)。pthreshは、元画像のうちで有効画像領域に含まれる画素を判別するための閾値である。有効画像領域は、元画像のうちで無効な画像(例えば、ゴミやシミ等の微小な画像)を除いた領域である。換言すると、無効な画像は、元画像のうちで極めて頻度が少ない色値の画像である。本実施形態では、CPU21は元画像データの全画素数に数パーセント(一例として、2〜3%)を乗算することで、pthreshを算出する。
次いでCPU21は、S21と同様に、S1で取得した元画像データの全画素に基づいて、R値のヒストグラムであるhistR、及びB値のヒストグラムであるhistBを生成する(S33)。CPU21は、S21及びS33で生成したヒストグラム(histR/histG/histB)に基づいて、pthresh以上の画素数領域(gamR/gamG/gamB)を夫々特定する(S35)。CPU21は、取得した画素数領域(gamR/gamG/gamB)の各々について、最大階調値(Rmax,Gmax,Bmax)を取得する(S37)。CPU21は、取得した画素数領域(gamR/gamG/gamB)の各々について、最小階調値(Rmin,Gmin,Bmin)を取得する(S39)。
例えば、CPU21は元画像データの全画素(例えば、二十四万画素)に基づいて、図5に示すhistRを生成する(S33)。CPU21は、図5に示すhistRにおいて、pthresh以上の画素数領域をgamRとして特定する(S35)。CPU21は、図5に示すhistRにおいて、gamRの最大階調値「240」をRmaxとして取得し、gamRの最小階調値「90」をRminとして取得する(S37,S39)。CPU21は、図5に示す例と同様に、Gmax,Bmax,Gmin,Bminを取得すればよい。
CPU21は、最大階調値(Rmax,Gmax,Bmax)から最小階調値(Rmin,Gmin,Bmin)までの距離であるcontrastを算出する(S41)。contrastは、RGB色空間におけるユークリッド距離である。CPU21は、以下の式(4)を用いてcontrastを算出すればよい。
contrast=√((Rmax−Rmin)2+(Gmax−Gmin)2+(Bmax−Bmin)2)・・・式(4)
CPU21は、算出したcontrastから背景閾値(backth)を算出する(S43)。backthは、地色を含む背景色の色範囲に含まれる色値を有する画素を判別するための閾値である。背景色は、地色及びその近似色の総称である。例えばCPU21は、以下の式(5)を用いてbackthを算出する。
backth=((MAXTH−MINTH)×(contrast−MINCON)/(MAXCON−MINCON))+MINTH・・・式(5)
但し、MAXTHは、backthの上限値を示す定数の閾値であり、一例として「60」である。MINTHは、backthの下限値を示す定数の閾値であり、一例として「30」である。backthは、MINTHとMAXTHとの間で可変の値である。MAXCONは、contrastの上限値を示す定数であり、一例として「245」である。contrastの値がMAXCONである場合、backthはMAXTHとなる。MINCONは、contrastの下限値を示す定数であり、一例として「105」である。contrastの値がMINCONである場合、backthはMINTHとなる。
CPU21は、式(5)で算出されたbackthがMINTH以上且つMAXTH以下である場合、そのbackthを算出結果とする。但し、CPU21は、式(5)で算出されたbackthがMAXTHを超える場合、MAXTHをbackthとして算出する。CPU21は、式(5)で算出されたbackthがMINTH未満である場合、MINTHをbackthとして算出する。その後、CPU21は処理をメイン処理(図2参照)に戻す。
図2に示すメイン処理において、CPU21はS5の実行後、図6に示す画素分類処理を実行する(S7)。図6に示すように、まずCPU21は、元画像データからRGB色空間の注目画素を取得する(S51)。S51で取得される注目画素は、元画像データの全画素のうち、画素分類処理が実行されていない未処理画素の一つである。CPU21は、取得した注目画素の色値(R,G,B)を、式(1)を用いて輝度(Y値)に変換する(S53)。CPU21は、変換したY値が閾値(th1)未満であるか判断する(S55)。th1は暗色の画素を判別するための閾値であり、例えば「64」である。暗色は、例えば文字や図形などを表す輝度が小さい色(即ち、視覚的に暗い色)である。
Y値がth1未満であると判断された場合(S55:YES)、注目画素の色値は暗色の色範囲に含まれる。この場合、CPU21は注目画素を第二属性に分類する(S57)。CPU21は、注目画素の識別情報と第二属性とを対応付けて、RAM23に記憶する。第二属性は、注目画素の色値が暗色に対応することを示す、画素の属性情報である。
Y値がth1未満でないと判断された場合(S55:NO)、CPU21は地色の候補色のRGB値(backR,backG,backB)から注目画素の色値(R,G,B)までの距離であるL1を算出する(S59)。L1は、RGB色空間におけるユークリッド距離である。なおCPU21は、式(4)と同様の手法によってL1を算出すればよい。
CPU21は、算出したL1がS43で算出したbackthを超えるか判断する(S61)。L1がbackthを超えないと判断された場合(S61:NO)、注目画素の色値は背景色の色範囲に含まれる。この場合、CPU21は注目画素を第一属性に分類する(S63)。CPU21は、注目画素の識別情報と第一属性とを対応付けて、RAM23に記憶する。第一属性は、注目画素の色値が背景色に対応することを示す、画素の属性情報である。
L1がbackthを超えると判断された場合(S61:YES)、注目画素の色値は中間色の色範囲に含まれる。中間色は、背景色よりも輝度が小さく、且つ暗色よりも輝度が大きい色である。即ち中間色は、背景色よりも視覚的に暗い色であり、且つ暗色よりも視覚的に明るい色である。中間色の色範囲は、背景色の色範囲と暗色の色範囲との間にある。この場合、CPU21は注目画素を第三属性に分類する(S65)。CPU21は、注目画素の識別情報と第三属性とを対応付けて、RAM23に記憶する。第三属性は、注目画素の色値が中間色に対応することを示す、画素の属性情報である。
CPU21は、S57,S63,S65の何れかの実行後、未処理画素ありか判断する(S67)。未処理画素なしと判断された場合(S67:NO)、CPU21は処理をメイン処理(図2参照)に戻す。未処理画素ありと判断された場合(S67:YES)、CPU21は処理をS51に戻して、次の未処理画素を注目画素として取得する。以降の処理は、上述と同様である。
図2に示すメイン処理において、CPU21はS7の実行後、図7及び図8に示すテーブル作成処理を実行する(S9)。図7に示すように、まずCPU21は、元画像データの全画素の各色値(R,G,B)を、式(1)〜(3)を用いてYCbCr色空間の色値に夫々変換する(S71)。次にCPU21は、元画像データからN×N画素の注目ブロックを取得する(S73)。S73で取得される注目ブロックは、元画像データに含まれる複数の分割ブロックのうち、テーブル作成処理が実行されていない未処理ブロックの一つである。複数の分割ブロックは、元画像を格子状にN×N画素のブロック単位で分割した複数の正方形状の画像領域である。
CPU21は、取得した注目ブロックの全画素に基づいて、Y値,Cb値,Cr値の各ヒストグラム(bhistY/bhistCb/bhistCr)を生成する(S75)。bhistYは、注目ブロックの全画素の各Y値に基づいて生成された、横軸がY値の16階調、縦軸が頻度(画素数)を示すヒストグラムである。bhistCbは、注目ブロックの全画素の各Cb値に基づいて生成された、横軸がCb値の16階調、縦軸が頻度(画素数)を示すヒストグラムである。bhistCrは、注目ブロックの全画素の各Cr値に基づいて生成された、横軸がCr値の16階調、縦軸が頻度(画素数)を示すヒストグラムである。
CPU21は、取得した注目ブロックの全画素に基づいて、Y値,Cb値,Cr値の各平均値であるブロック別平均値(baveY,baveCb,baveCr)を算出する(S77)。baveYは、注目ブロックの全画素の各Y値の合計値を、注目ブロックの全画素数で除算したY平均値である。baveCbは、注目ブロックの全画素の各Cb値の合計値を、注目ブロックの全画素数で除算したCb平均値である。baveCrは、注目ブロックの全画素の各Cr値の合計値を、注目ブロックの全画素数で除算したCr平均値である。即ちブロック別平均値は、注目ブロックに含まれる複数の画素の色値を代表する代表色の色値である。
CPU21は、取得したヒストグラム(bhistY/bhistCb/bhistCr)の各々に基づいて、Y値,Cb値,Cr値の各最頻値の画素数(yY/yCb/yCr)を取得する(S79)。CPU21は、取得したヒストグラム(bhistY/bhistCb/bhistCr)の各々に基づいて、Y値,Cb値,Cr値の各最頻値の階調値(xY/xCb/xCr)を取得する(S81)。
CPU21は、取得したヒストグラム(bhistY/bhistCb/bhistCr)の各々に基づいて、取得した階調値(xY/xCb/xCr)の各々に隣り合う階調値の画素数のうち、多い方の画素数(αY/αCb/αCr)を夫々取得する(S83)。CPU21は、取得した画素数(αY/αCb/αCr)を、最頻値の画素数(yY/yCb/yCr)に夫々加算して、ばらつき量(qY/qCb/qCr)を算出する(S85)。ばらつき量(qY/qCb/qCr)は、注目ブロックに含まれる複数の画素の色値のばらつき量を示す。
図9及び図10を参照して、図7に示す処理を具体的に説明する。図9に示す元画像データ9は、1280×960画素で構成され、且つ96個の分割ブロックを含む。各分割ブロックは、4096画素(N=64)で構成された画像領域である。CPU21は、注目ブロックとして分割ブロック「B066」を取得した場合(S73)、分割ブロック「B066」に含まれる4096画素の各Y値に基づいて、図10に示すbhistYを生成し、且つbaveYを算出する(S75、S77)。
本例のbhistYは、256階調のY値を16の階調(bin数)で示すヒストグラムである。一つの階調(bin)の幅は、256階調のY値の16階調に対応する。各階調(bin)の階調値は、その階調の幅に対応するY値の中央値で表す。例えば、最小bin(1階調目)は、Y値「0」〜「15」に対応する。最小binの中央値は、Y値「7.5」である。CPU21は、bhistYに基づいて、Y値の最頻値の画素数である「2800」を、yYとして取得する(S79)。CPU21は、bhistYに基づいて、yY「2800」に対応する12階調目の中央値であるY値「183」を、xYとして取得する(S81)。
図10に示すbhistYでは、xY「183」に隣り合う階調値は、11階調目の中央値である「167」、及び13階調目の中央値である「199」である。階調値「199」の画素数「1000」は、階調値「167」の画素数よりも多い。従ってCPU21は、階調値「199」の画素数「1000」を取得して、yY「2800」に加算することで、qYは「3800」を算出する(S83、S85)。CPU21は、図9及び図10に示す例と同様に、分割ブロック「B066」についてbaveCb,baveCr,qCb,qCrを取得すればよい。
図8に示すように、CPU21はS85の実行後、取得したばらつき量(qY/qCb/qCr)の全てが、ばらつき判定閾値(bthresh)未満であるか判断する(S87)。bthreshは、注目ブロックにおける全画素の各色値のばらつきを判別するための閾値である。例えばCPU21は、注目ブロックの全画素数に「0.9」を乗算した値を、bthreshとして算出する。ばらつき量(qY/qCb/qCr)の全てがbthresh未満であると判断された場合(S87:YES)、分割ブロックにおける全画素の各色値のばらつきが相対的に大きい。この場合、CPU21は処理を後述のS91に進める。
ばらつき量(qY/qCb/qCr)の少なくとも一つがbthresh未満でないと判断された場合(S87:NO)、分割ブロックにおける全画素の各色値のばらつきが相対的に小さい。この場合、CPU21は、S77で取得したブロック別平均値(baveY,baveCb,baveCr)を、RAM23が記憶する三次元テーブル100(図11参照)に登録する(S89)。
本実施形態の三次元テーブル100には、夫々固有の色範囲を定めた記憶領域である256個の色定義領域が設けられる。これらの色定義領域によって定められる256個の色範囲は、YCbCr色空間において256階調のY値,Cb値,Cr値を夫々16階調幅で分割した、立方体状の三次元色範囲である。即ち、各色定義領域は、256階調のYCbCr色空間において、16階調幅のY値、16階調幅のCb値、及び16階調幅のCr値で表される色範囲を定める。CPU21は三次元テーブル100において、注目ブロックの識別情報及びブロック別平均値を、そのブロック別平均値を含む色範囲を定めた色定義領域に登録する。
CPU21は、S89の実行後、未処理ブロックありか判断する(S91)。未処理ブロックありと判断された場合(S91:YES)、CPU21は処理をS73に戻して、次の未処理ブロックを注目ブロックとして取得する。以降の処理は、上述と同様である。未処理ブロックなしと判断された場合(S91:NO)、元画像データに含まれる複数の分割ブロックの全てに対して上記の処理を実行済みである。三次元テーブル100には、ばらつき量の全てがbthresh以上の分割ブロックと同数のブロック別平均値が、各々対応する色定義領域に登録されている。
この場合、CPU21は、三次元テーブル100に定められた色定義領域毎に、各色定義領域に登録されたブロック別平均値(baveY,baveCb,baveCr)の平均値を、ポスタリゼーション候補色(pcY,pcCb,pcCr)として算出及び登録する(S93)。なおCPU21は、複数の色定義領域のうち、ブロック別平均値が登録されている色定義領域だけ、そのポスタリゼーション候補色を算出する。CPU21は、一つの色定義領域にブロック別平均値が一つだけ登録されている場合、そのブロック別平均値をポスタリゼーション候補色として算出する。CPU21は、算出したポスタリゼーション候補色を三次元テーブル100に登録する。その後、CPU21は処理をメイン処理(図2参照)に戻す。
図10及び図11を参照して、図8に示す処理を具体的に説明する。図10に示すbhistYでは、bthreshは4096画素に「0.9」を乗算した「3686(小数点以下は切り捨て)」である。CPU21は、qY「3800」がbthresh未満でないと判断する。CPU21は、図10に示す例と同様に、yCb及びyCrの各々がbthresh未満であるか判断する。分割ブロック「B066」のばらつき量(qY/qCb/qCr)の少なくとも一つ(本例では、qY)がbthresh以上であるため(S87:NO)、CPU21は次のようにS89を実行する。
CPU21は分割ブロック「B066」のブロック別平均値(baveY,baveCb,baveCr)を、三次元テーブル100に登録する(S89)。図11に示す三次元テーブル100では、X軸がCr値の256階調(−128〜127)、Y軸がY値の256階調(0〜255)、Z軸がCb値の256階調(−128〜127)を示す。三次元テーブル100には、256ブロックの色定義領域が設けられている。色定義領域「ds000」は、三次元テーブル100の原点位置(0,0,0)を含む色定義領域である。色定義領域「ds000」は、YCrCb色空間におけるY値「0〜15」、Cr値「0〜15」、Cb値「0〜15」の三次元色範囲を定めた記憶領域である。色定義領域「ds000」は、YCrCb色空間において最も暗い色である黒色の色範囲に相当する。
図11に示すように、分割ブロック「B066」のブロック別平均値「bave1」が(9,2,2)である場合、CPU21は分割ブロック「B066」の識別情報及びブロック別平均値「bave1」を、色定義領域「ds000」に登録する。同様に、CPU21は、元画像データ9(図9参照)に含まれる256個の分割ブロックの全てについて、各々の分割ブロックの識別情報及びブロック別平均値を、対応する色定義領域に登録する。その結果、三次元テーブル100には、96個のブロック別平均値が登録される。本例では、三つのブロック別平均値「bave1」,「bave2」,「bave3」が、色定義領域「ds000」に登録される。
次にCPU21は、三次元テーブル100の色定義領域毎に、次のようにポスタリゼーション候補色(pcY,pcCb,pcCr)を算出する(S93)。例えばCPU21は、色定義領域「ds000」のポスタリゼーション候補色「pc000」を算出する場合、「bave1」,「bave2」,「bave3」の各Y値の平均値を、pcYとして算出する。同様にCPU21は、三つのブロック別平均値に基づいて、Cb値の平均値をpcCbとして算出し、Cr値の平均値をpcCrとして算出する。CPU21は、ブロック別平均値が登録されている全ての色定義領域について、各々のポスタリゼーション候補色を算出する。従って三次元テーブル100には、少なくとも一つのブロック別平均値が登録されている色定義領域と同数のポスタリゼーション候補が登録される。
図2に示すメイン処理において、CPU21はS9の実行後、図12に示す出力画像生成処理を実行する(S11)。図12に示すように、まずCPU21は、S71で色空間を変換したYCbCr色空間の全画素から、注目画素を取得する(S101)。S101で取得される注目画素は、S71で色空間が変換された全画素のうち、出力画像生成処理が実行されていない未処理画素の一つである。CPU21は、RAM23に記憶されている注目画素の属性情報に基づいて、注目画素が第二属性であるか判断する(S103)。注目画素が第二属性であると判断された場合(S103:YES)、CPU21は、注目画素の色値(Y,Cb,Cr)をそのままRAM23に出力する(S105)。
注目画素が第二属性でないと判断された場合(S103:NO)、CPU21はRAM23に記憶されている注目画素の属性情報に基づいて、注目画素が第三属性であるか判断する(S107)。注目画素が第三属性でないと判断された場合(S107:NO)、注目画素は第一属性である。この場合、CPU21は、S29で取得した地色の候補色(backY,backCb,backCr)を、注目画素の色値としてRAM23に出力する(S109)。注目画素が第三属性であると判断された場合(S107:YES)、CPU21は後述のポスタリゼーション処理(図13参照)を実行する(S111)。
CPU21は、S105,S109,S111の何れかの実行後、未処理画素ありか判断する(S113)。未処理画素なしと判断された場合(S113:NO)、CPU21は処理をメイン処理(図2参照)に戻す。未処理画素ありと判断された場合(S113:YES)、CPU21は処理をS101に戻して、次の未処理画素を注目画素として取得する。以降の処理は、上述と同様である。
図13に示すポスタリゼーション処理では、まずCPU21は、S101で取得した注目画素を中心とするM×M画素の領域に含まれる画素の各Y値を取得する。CPU21は、取得された複数のY値における、Y最大値とY最小値との差であるdYを算出する(S121)。dYは、注目画素を含む所定範囲(M×M画素)内の複数の画素の色値のばらつき量を示す。CPU21は、算出したdYが閾値(th2)未満であるか判断する(S123)。th2は、M×M画素における輝度(Y値)のばらつきを判別するための閾値であり、一例として「60」である。dYがth2未満でないと判断された場合(S123:NO)、M×M画素における輝度のばらつきが相対的に大きい。この場合、CPU21は、注目画素の色値(Y,Cb,Cr)をそのままRAM23に出力して(S125)、処理をメイン処理(図2参照)に戻す。
dYがth2未満であると判断された場合(S123:YES)、M×M画素における輝度のばらつきが相対的に小さい。この場合、CPU21は、三次元テーブル100(図11参照)に登録されているポスタリゼーション候補色の中から、注目画素の色値に最も近い対象色を決定する(S127)。なおCPU21は、式(4)と同様の手法によって、注目画素の色値(Y,Cb,Cr)から各ポスタリゼーション候補色(pcY,pcCb,pcCr)までの距離を夫々算出する。算出した距離は、YCbCr色空間におけるユークリッド距離である。CPU21は、算出した距離が最も短いポスタリゼーション候補色を、対象色として決定すればよい。
CPU21は、決定した対象色(pcY,pcCb,pcCr)から注目画素の色値(Y,Cb,Cr)までの距離であるL2を算出する(S129)。L2は、YCbCr色空間におけるユークリッド距離である。なおCPU21は、式(4)と同様の手法によってL2を算出すればよい。CPU21は、算出したL2が閾値(th3)未満であるか判断する(S131)。th3は、対象色が注目画素の色値と近似するかを判別するための閾値であり、一例として「20」である。
L2がth3未満でないと判断された場合(S131:NO)、対象色が注目画素の色値と近似していない。この場合、CPU21はS125を実行して、注目画素の色値をそのままRAM23に出力し、処理をメイン処理(図2参照)に戻す。L2がth3未満であると判断された場合(S131:YES)、対象色が注目画素の色値と近似している。この場合、CPU21は、YCbCr色空間における白基準値(255,0,0)と注目画素の色値(Y,Cb,Cr)との輝度差であるL3を算出する(S133)。白基準値は、YCbCr色空間における白色の色値である。本実施形態では、CPU21は、白色のY値「255」から注目画素のY値を減算した値を、L3として算出する。
CPU21は、算出したL3が閾値(th4)未満であるか判断する(S135)。th4は、注目画素の色値が白色と近似するかを判別するための閾値であり、一例として「32」である。L3がth4未満でないと判断された場合(S135:NO)、注目画素の色値は白色に近似していない。この場合、CPU21は、注目画素の色値(Y,Cb,Cr)を、S127で決定された対象色(pcY,pcCb,pcCr)に置換して、RAM23に出力する(S137)。その後、CPU21は処理をメイン処理(図2参照)に戻す。
L3がth4未満であると判断された場合(S135:YES)、注目画素の色値は白色に近似している。この場合、CPU21は、YCbCr空間において、対象色が注目画素の色値よりも白基準値から離れるか判断する(S139)。換言すれば、CPU21は、対象色と白基準値との距離が、注目画素の色値と白基準値との距離よりも大きいか判断する。本実施形態では、CPU21は、対象色の輝度(pcY値)が注目画素の輝度(Y値)以上である場合、対象色が注目画素の色値よりも白基準値から離れないと判断する(S139:NO)。この場合、対象色は、注目画素の色値と視覚的に同じ明るさの色、又は注目画素よりも視覚的に明るい色である。CPU21はS137を実行して、注目画素の色値を対象色に置換してRAM23に出力し、処理をメイン処理(図2参照)に戻す。
CPU21は、対象色のpcY値が注目画素のY値未満である場合、対象色が注目画素の色値よりも白基準値から離れると判断する(S139:NO)。この場合、対象色は、注目画素の色値よりも視覚的に暗い色である。CPU21はS125を実行して、注目画素の色値をそのままRAM23に出力し、処理をメイン処理(図2参照)に戻す。
図14及び図15を参照して、図13に示す処理を具体的に説明する。図14に示すように、CPU21は、S101で取得した注目画素t1が第三属性の画素である場合(S107:YES)、注目画素t1を中心とする9画素(M=3)の領域D1からdYを取得する(S121)。領域D1では、注目画素t1を含む4画素が夫々、読み取られた文字の画像を示す。領域D1の9画素のうち、これら4画素を除いた5画素は、用紙を読み取った地色の画像を示す。
この場合、文字の画像を示す4画素の各Y値の最小値が、領域D1のY最小値である。地色の画像を示す5画素の各Y値の最大値が、領域D1のY最大値である。領域D1におけるY最小値及びY最大値の差(即ち、領域D1内の輝度差)は、相対的に大きい。注目画素t2の色値を対象色pcに置換すると、注目画素t2とその周囲の画素との色差が大きくなり、元画像の色合いを損なうおそれがある。従ってCPU21は、dYがth2未満でないため(S123:NO)、注目画素t1の色値をそのまま出力する(S125)。
一方、CPU21は、S101で取得した注目画素t2が第三属性の画素である場合(S107:YES)、注目画素t2を中心とする3×3画素の領域D2からdYを取得する(S121)。領域D2では、注目画素t2の右隣りの1画素は、例えば微小なゴミを読み取ったノイズ画像を示す。領域D2の9画素のうち、この1画素を除いた8画素は、用紙を読み取った地色の画像を示す。この場合、ノイズ画像を示す1画素のY値が、領域D2のY最小値である。地色の画像を示す8画素の各Y値の最大値が、領域D2のY最大値である。領域D2におけるY最小値及びY最大値の差(即ち、領域D2内の輝度差)は、相対的に小さい。従ってCPU21は、dYがth2未満であるため(S123:YES)、更に以下の処理を行う。
図15に示すように、CPU21は三次元テーブル100のポスタリゼーション候補色の中から、注目画素t2の色値(tY,tCb,tCr)に最も近い対象色pc(pcY,pcCb,pcCr)を決定する(S127)。CPU21は、注目画素t2の色値から対象色pcまでの距離(L2)を算出する(S129)。L2が閾値(th3)未満でない場合(S131:NO)、注目画素t2の色値と対象色pcとの色差が大きい。注目画素t2の色値を対象色pcに置換すると、元画像における注目画素t2の色合いが損なわれるおそれがある。従ってCPU21は、注目画素t2の色値をそのまま出力する(S125)。
L2が閾値(th3)未満である場合(S131:YES)、CPU21は、白色のY値「255」と注目画素t2のtY値との輝度差(L3)を算出する(S133)。tY値が「223」以下である場合、L3は閾値(th4)以上である(S135:NO)。注目画素t2は白色に近い色ではないため、CPU21は注目画素t2の色値を対象色pcに置換して出力する(S137)。この場合、仮に置換後の注目画素t2の輝度が低下しても、注目画素t2は白色に近い色ではないため、輝度の低下が視覚的に判別しにくい。従って、置換前の注目画素t2の色合いを保持できる。
tY値が「223」を超える場合、L3は閾値(th4)未満である(S135:YES)。注目画素t2は白色に近い色であるため、注目画素t2の色値を対象色pcに置換した場合に置換後の注目画素t2の輝度が低下すると、その輝度の低下が視覚的に目立ちやすい。注目画素t2の色合いが視覚的に暗くなることで、置換前の注目画素t2の色合いが損なわれるおそれがある。そこでCPU21は、対象色のpcY値が注目画素t2のtY値未満であるか判断する(S139)。
pcY値がtY値未満でない場合(S139:NO)、注目画素t2の色値を対象色pcに置換すると、置換後の注目画素t2の輝度が維持又は増加する。即ち、注目画素t2の色合いが、視覚的に明るさが変化しないか、又は視覚的に明るくなる。従ってCPU21は、注目画素t2の色値を対象色pcに置換して出力する(S137)。一方、pcY値がtY値未満である場合(S139:YES)、注目画素t2の色値を対象色pcに置換すると、置換後の注目画素t2の輝度が低下して、置換後の注目画素t2の色合いが視覚的に暗くなる。従ってCPU21は、注目画素t2の色値をそのまま出力する(S125)。
図12に示す出力画像生成処理では、未処理画素なしと判断された場合(S113:NO)、元画像データの全画素について、各々の色値(Y,Cb,Cr)がRAM23に出力されている。この場合、CPU21は、RAM23に出力された全画素の各色値を、式(1)〜(3)を用いてRGB色空間に夫々逆変換する(S115)。これにより、CPU21は、BMP形式の処理済み画像データを取得して、HDD24に保存する。その後、CPU21はメイン処理(図2参照)に戻して、メイン処理を終了する。なおCPU21は、S115を実行することなく、YCbCr色空間の処理済み画像データ(例えば、JPEG形式の画像データ)を、HDD24に保存してもよい。
処理済み画像データでは、第三属性の画素に含まれる特定画素の色値が、その色値に最も近いポスタリゼーション候補色に置換されている。特定画素は、第三属性の画素のうちで、白色に近似しない色値を有する画素、又は対象色の輝度以上の輝度を有する画素である。これにより、元画像データに含まれる特定画素の色値を、その色値に最も近いポスタリゼーション候補色に置換できるため、元画像の色合いを保持しつつ元画像データの画質を改善できる。
処理済み画像データでは、第一属性の画素の色値が地色の候補色に置換されている。即ち、背景色の色範囲に含まれる全ての画素の色値が地色の候補色に統一されているため、元画像データの画質が改善される。処理済み画像データでは、第二属性の画素の色値がそのまま保持されている。第二属性の画素の色値は暗色の範囲に含まれるため、第二属性の画素にノイズ画像が含まれていても、ユーザはそのノイズ画像を視覚的に判別困難である。従って、第二属性の画素の色値を置換しないことによって、元画像の色合いが保持される。
なお、上記実施形態は、各種変形が可能である。例えば、メイン処理(図2参照)は、画像読取装置1のCPUによって実行されてもよい。この場合、画像読取装置1のCPUは、原稿1Aから画像を読み取った後、生成した元画像データにメイン処理を実行すればよい。画像読取装置1のCPUは、メイン処理によって生成された処理済み画像データを、PC2に送信すればよい。
CPU21は、ポスタリゼーション処理(S111)において、全ての第三属性の画素にS127,S137を実行してもよい。この場合、元画像データに含まれる全ての第三属性の画素の色値を対象色に置換できる。CPU21は、S79〜S87を実行しなくてもよい。この場合、複数の分割ブロックと同数のブロック別平均値を、三次元テーブル100の各々対応する色定義領域に登録できる。
CPU21は、S121,S123を実行しなくてもよい。この場合、色値のばらつきが大きい領域内にある第三属性の画素の色値を、対象色に置換できる。CPU21は、S129,S131を実行しなくてもよい。この場合、対象色と近似しない第三属性の画素の色を、対象色に置換できる。CPU21は、S133,S135を実行しなくてもよい。この場合、白色と近似する第三属性の画素の色値を、対象色に置換できる。CPU21は、S139を実行しなくてもよい。この場合、第三属性の画素の色値を、その色値よりも暗い対象色に置換できる。
CPU21は、S133において、YCbCr色空間における白基準値(255,0,0)と注目画素の色値(Y,Cb,Cr)とのユークリッド距離を、L3として算出してもよい。この場合、注目画素の色値が白色と近似するかを、より正確に判断できる。CPU21は、S139において、対象色(pcY,pcCb,pcCr)から白基準値(255,0,0)までのユークリッド距離と、注目画素の色値(Y,Cb,Cr)から白基準値(255,0,0)までのユークリッド距離とに基づいて、対象色が注目画素の色値よりも白基準値から離れるか判断してもよい。この場合、注目画素の色値と対象色との何れが白色に近いか(即ち、視覚的に明るいか)を、より正確に判断できる。
上記実施形態のメイン処理では、元画像データの画像フォーマットがRGB色空間からYCbCr色空間に変換されている。元画像データの画像フォーマットは、RGB色空間に限定されず、他の色空間(例えば、CMYK色空間)でもよい。元画像データの画像フォーマットは、YCbCr色空間とは異なる他の色空間(例えば、YUV色空間)に変換されてもよい。
上記実施形態によれば、CPU21は元画像データに含まれる複数の画素のうちで、背景色の色範囲に含まれる色値を有する画素である第一属性の画素を特定する(S61:NO、S63)。CPU21は元画像データに含まれる複数の画素のうちで、暗色の色範囲に含まれる色値を有する画素である第二属性の画素を特定する(S55:YES、S57)。CPU21は元画像データに含まれる複数の分割ブロックの各々について、分割ブロックに含まれる複数の画素の色値を代表するブロック別平均値(baveY,baveCb,baveCr)を、ポスタリゼーション候補色(pcY,pcCb,pcCr)としてRAM23の三次元テーブル100に登録する(S89、S93)。CPU21は、元画像データに含まれる複数の画素のうち、特定された第一属性の画素及び第二属性の画素とは異なる第三属性の画素(対象画素)の色値を、その色値に最も近いポスタリゼーション候補色である対象色に置換可能である(S111)。
これによれば、元画像データに含まれる対象画素の色値を、その色値に最も近いポスタリゼーション候補色に置換可能である。従ってCPU21は、元画像の色合いを保持しつつ、元画像データの画質を改善できる。
CPU21は、元画像データに含まれる複数の分割ブロックの各々について、分割ブロックに含まれる複数の画素の色値を代表するブロック別平均値(baveY,baveCb,baveCr)を、ポスタリゼーション候補色(pcY,pcCb,pcCr)としてRAM23の三次元テーブル100に登録する(S89、S93)。CPU21は、YCbCr色空間における第三属性の画素(対象画素)の色値と白基準値との距離(L3)が、閾値(th4)未満であるか判断する(S135)。CPU21は、YCbCr色空間において対象色の色値が対象画素の色値よりも白基準値から離れるか判断する(S139)。CPU21は、L3がth4未満でないと判断された対象画素、又は対象色の色値が対象画素の色値よりも白基準値から離れないと判断された対象画素について、その色値を対象色に置換する(S137)。CPU21は、L3がth4未満であると判断され、且つ対象色の色値が対象画素の色値よりも白基準値から離れると判断された対象画素について、その色値を保持する(S125)。
これによれば、元画像データに含まれる対象画素のうち、白色の色値に近い場合は、その色値に最も近いポスタリゼーション候補色である対象色に置換しても画像の色合いが暗くならない画素について、その色値が対象色に置換可能である。従ってCPU21は、画像の色合いが暗くなることを抑制しつつ、元画像データの画質を改善できる。
CPU21は、複数の分割ブロックの各々についてばらつき量(qY/qCb/qCr)を算出する(S85)。CPU21は、特定の分割ブロックのブロック別平均値を、候補色として登録する(S87:NO、S89)。特定の分割ブロックは、算出されたばらつき量(qY/qCb/qCr)がばらつき判定閾値(bthresh)以上となる分割ブロックである。これによれば、画素の色値のばらつきが大きい分割ブロックに基づいて、ポスタリゼーション候補色が生成されることを防止できる。
CPU21は、分割ブロックに含まれる複数の画素の色値に基づいて算出された、YCbCr色空間における色値の平均値(baveY,baveCb,baveCr)を、ポスタリゼーション候補色として登録する(S93)。これによれば、CPU21は分割ブロックの代表色の色値を簡易且つ正確に登録できる。
CPU21は、YCbCr色空間における対象画素の色値と対象色との距離(L2)を算出する(S129)。CPU21は、算出されたL2が閾値(th3)未満である場合、対象画素の色値を対象色に置換する(S131:YES、S137)。CPU21は、算出されたL2がth3以上である場合、対象画素の色値を保持する(S131:NO、S125)。これによれば、対象画素の色値が、その色値と大きく異なる対象色に置換されることを防止できる。
CPU21は、元画像データのうちで対象画素を含むM×M画素の色値のばらつき量(dY)を算出する(S121)。CPU21は、算出されたdYが閾値(th2)未満である場合、対象画素の色値を対象色に置換する(S123:YES、S137)。CPU21は、算出されたdYがth2以上である場合、対象画素の色値を保持する(S123:NO、S125)。これによれば、色値のばらつきが大きい領域内にある対象画素の色値が、対象色に置換されることを防止できる。
CPU21は、元画像データに含まれる第一属性の画素の色値を、用紙の色に対応する色値の範囲に含まれる地色の候補色(backY,backCb,backCr)に置換する(S109)。CPU21は、元画像データに含まれる第二属性の画素の色値を保持する(S105)。これによれば、背景色の画素を地色の候補色に置換することで、元画像データの画質を改善できる。暗色の画素を保持することで、元画像の色合いを保持することができる。
上記実施形態において、CPU21は本発明の「コンピュータ」の一例である。S61及びS63は、本発明の「第一特定ステップ」の一例である。S55及びS57は、本発明の「第二特定ステップ」の一例である。S89及びS93は、本発明の「登録ステップ」の一例である。S111は、本発明の「第一置換ステップ」の一例である。HDD24に記憶されたドライバプログラムは、本発明の「画像処理プログラム」の一例である。S85は、本発明の「第一算出ステップ」の一例である。S129は、本発明の「第二算出ステップ」の一例である。S121は、本発明の「第三算出ステップ」の一例である。S135は、本発明の「第一判断ステップ」の一例である。S139は、本発明の「第二判断ステップ」の一例である。S105及びS109は、本発明の「第二置換ステップ」の一例である。
PC2は、本発明の「画像処理装置」の一例である。S61及びS63を実行するCPU21は、本発明の「第一特定手段」の一例である。S55及びS57を実行するCPU21は、本発明の「第二特定手段」の一例である。S89及びS93を実行するCPU21は、本発明の「登録手段」の一例である。S111を実行するCPU21は、本発明の「第一置換手段」の一例である。メイン処理(図2参照)は、本発明の「画像処理方法」の一例である。