<画像処理システム10の概要>
以下、本発明の一実施形態について、図面を参照して説明する。図1を参照し、画像処理システム10について説明する。画像処理システム10は、画像読取装置1、及びPC2を備える。画像読取装置1及びPC2は、通信ケーブル3を介して接続される。画像読取装置1は、内蔵されたイメージセンサによって、原稿1Aから画像を読み取る。具体的に、イメージセンサは、原稿1Aに光を射出し、原稿1Aからの反射光を検出することで、原稿1Aから画像を読み取る。画像読取装置1は、読み取った画像をデータ化し、画像データを生成する。以下、画像読取装置1によって読み取られた原稿1Aの画像を、「元画像」といい、データ化された元画像を、「元画像データ」という。画像読取装置1は、通信ケーブル3を介して元画像データをPC2に出力する。本実施形態において、画像読取装置1は周知のシートフィードスキャナである。本実施形態において、元画像データはBMP形式のデータである。PC2は、画像読取装置1から出力された元画像データを、通信ケーブル3を介して受信する。PC2は、パンチなどによって原稿1Aに形成されたパンチ穴に対応する画像(以下、「パンチ穴画像」という。)4Aを、受信した元画像データによって示される元画像4から検出する。
なお、原稿1Aに形成されたパンチ穴が画像読取装置1によって読み取られる場合、イメージセンサは、パンチ穴を介して、イメージセンサと対向する位置に設けられた部材(以下、「背景部材」という。)を読み取る。原稿がイメージセンサによって読み取られる場合、原稿1Aとイメージセンサとの間にギャップが形成されるため、イメージセンサから射出された光によって、パンチ穴の枠に沿って影が形成される。イメージセンサは、パンチ穴の周辺に形成される影も読み取る。このため、PC2は、パンチ穴の枠に沿った影に対応する輪郭線、及び、輪郭線で囲まれた背景部材を、パンチ穴画像4Aとして検出することになる。このため、パンチ穴画像4Aに対応する色は、輪郭線に対応する色と、背景部材に対応する色との両方を含む。なお、原稿1Aの地色と、背景部材の色とが同一または類似の場合、読み取られた画像には、パンチ穴自体は明確に表れず、影に対応する輪郭線のみが表れる場合もある。
PC2は、検出したパンチ穴画像4Aに対応する画素の色を変更し、目立たなくする。以下、パンチ穴画像を目立たなくすることを、「パンチ穴画像を除去する」ともいう。本実施形態において、パンチ穴の形状は円形又は四角形が例示される。
なお、画像読取装置1はシートフィードスキャナに限定されず、フラットベッドスキャナなど、他の周知のイメージスキャナでもよい。元画像データはBMP形式に限定されず、JPG,GIF,PNGなど、他の形式のデータでもよい。パンチ穴の数は特に限定されず、例えば、1、2、3、4、6、22、26、30穴等が含まれる。パンチ穴の形状は、円形又は四角形に限定されず、他の形状であってもよい。パンチ穴は、ユーザによって原稿1Aに形成された穴に限定されず、原稿1Aに元々形成されていた穴であってもよい。例えば、パンチ穴は、原稿1Aをファイルに綴じるために予め形成された穴(例えば、ルーズリーフの穴等)であってもよい。
<電気的構成>
PC2の電気的構成について説明する。PC2は、PC2の制御を司るCPU21を備える。CPU21は、ROM22、RAM23、記憶部24、ドライブ装置25、第1通信インタフェース(I/F)26、第2通信I/F27、入力部28、及び、表示部29と電気的に接続する。ROM22には、ブートプログラム、Basic Input/Output System(BIOS)等が記憶される。RAM23には、一時的なデータが記憶される。記憶部24は、コンピュータが読み取り可能な非一時的な記憶媒体、例えば、ハードディスク等で構成される。記憶部24には、CPU21に処理を実行させるためのアプリケーションプログラム(以下、単に「プログラム」という。)、及びOSが記憶される。記憶部24にはテーブル241〜248が記憶される。
ドライブ装置25は、記憶媒体25Aに記憶された情報を読み出すことができる。CPU21は、光学メディアなどの記憶媒体25Aに記憶されたプログラムをドライブ装置25によって読み出し、記憶部24に記憶できる。第1通信I/F26は、PC2が通信ケーブル3を介して画像読取装置1と接続するためのインタフェース素子である。第2通信I/F27は、PC2が図示外のネットワークを介して他の機器と接続するためのインタフェース素子である。入力部28は、例えば、ボタン、キーボード、マウス等を含む。表示部29はLiquid Crystal Display(LCD)である。
なお、記憶部24は、例えば、ハードディスクドライブ(HDD)、フラッシュメモリ及び/又はROM等の、非一時的な記憶媒体で構成されてもよい。非一時的な記憶媒体は、情報を記憶する期間に関わらず、情報を留めておくことが可能な記憶媒体であればよい。非一時的な記憶媒体は、一時的な記憶媒体(例えば、伝送される信号)を含まなくてもよい。CPU21として、汎用的なプロセッサーが用いられてもよい。CPU21によって実行される処理の一部は、他の電子部品(例えば、ASIC)によって実行されてもよい。CPU21によって実行される処理は、複数の電子機器(つまり、複数のCPU)によって分散処理されてもよい。プログラムは、例えば、図示外のネットワークに接続されたサーバからダウンロードされて(即ち、伝送信号として送信され)、記憶部24に記憶されてもよい。この場合、プログラムは、サーバに備えられたHDDなどの非一時的な記憶媒体に保存されていることとなる。
<属性情報、設定情報、処理範囲情報>
図2〜図4を参照し、記憶部24に記憶されたテーブル241、242、243について説明する。なお、テーブル244〜248については後述する。図2に示すように、テーブル241には、画像読取装置1から元画像データと同時に出力される属性情報が格納される。属性情報は、例えば、元画像データのヘッダ部分に含まれたり、元画像データと別のメタデータとして出力されたりしてよい。属性情報は、元画像高さ、元画像幅、解像度、色を含む。元画像高さ、及び、元画像幅は、それぞれ、図1に示すように、元画像4の上下方向の長さ(Img(H))、及び、左右方向の長さ(Img(W))を、pixel単位で示す。解像度は、元画像4の解像度をdpi単位で示す。色は、元画像がグレースケール画像又はカラー画像の何れであるかを示す。
図3に示すように、テーブル242には、入力部28を介して入力された設定情報が格納される。設定情報は、範囲、穴サイズ、背景、塗り潰しを含む。範囲は、左設定範囲、右設定範囲、上設定範囲、及び、下側設定範囲を含む。穴サイズは、穴サイズ上限、及び、穴サイズ下限を含む。背景は、背景色、背景輝度上限、及び、背景輝度下限を含む。塗り潰しは、塗り潰し形状、塗り潰し色を含む。
範囲は、図1に示すように、元画像4の4辺の内側に、それぞれの辺に沿って形成される領域を規定する。範囲は、パンチ穴画像4AをPC2に検出させる領域として、ユーザによって設定される。左設定範囲(Str(left))、右設定範囲(Str(right))、上設定範囲(Str(upper))、及び、下設定範囲(Str(lower))は、それぞれ、元画像4の左端、右端、上端、及び、下端のそれぞれからの内側方向の長さを、mm単位で示す。左設定範囲は、元画像4の左辺に沿って延び、且つ、左右方向の長さがStr(left)である領域を規定する。右設定範囲は、元画像4の右辺に沿って延び、且つ、左右方向の長さがStr(right)である領域を規定する。上設定範囲は、元画像4の上辺に沿って延び、且つ、上下方向の長さがStr(upper)である領域を規定する。下設定範囲は、元画像4の下辺に沿って延び、且つ、上下方向の長さがStr(lower)である領域を規定する。
以下、左設定範囲、右設定範囲、上設定範囲、下設定範囲によって示される領域を、それぞれ、「左設定領域」「右設定領域」「上設定領域」「下設定領域」という。「左設定領域」「右設定領域」「上設定領域」「下設定領域」を総称して、「設定領域」という。なお、PC2は、設定領域内にパンチ穴画像4Aが半分以上収まっている場合、このパンチ穴画像4Aを除去の対象とする。一方、PC2は、設定範囲内に収まるパンチ穴画像4Aが半分未満の場合、このパンチ穴画像4Aを除去の対象としない。
図3に示すように、穴サイズは、パンチ穴のサイズの範囲を規定する。穴サイズ上限は、パンチ穴のサイズの上限値を、mm単位で示す。穴サイズ下限は、パンチ穴のサイズの下限値を、mm単位で示す。パンチ穴が円形の場合、穴サイズ上限及び穴サイズ下限は、それぞれ、直径の上限及び下限を示す。パンチ穴が四角形の場合、穴サイズ上限及び穴サイズ下限は、それぞれ、長辺及び短辺の長さの上限及び下限を示す。なお、パンチ穴が四角形の場合、長辺に対応する穴サイズ上限及び穴サイズ下限と、短辺に対応する穴サイズ上限及び穴サイズ下限が別々に設定されてもよい。
背景は、画像読取装置1において、原稿がない状態でイメージセンサによって読み取られる画像(以下、「背景画像」という。)を規定する。背景色は、背景画像の色がグレー色又は白色の何れであるかを示す。背景輝度上限は、背景画像の輝度の上限値を示す。背景輝度下限は、背景色の輝度の下限値を示す。なお、背景画像は、画像読取装置1のイメージセンサが背景部材を読み取ることによって得られる画像に対応する。このため、背景情報は、背景部材の色や材質等に応じて設定される。
なお、本実施形態では、背景画像の色としてグレー色又は白色が設定されることを想定しているが、背景画像の色として取り得る情報は、背景部材に応じて変更可能である。例えば、背景部材の色が黒色の場合、背景画像の色として黒色が設定されてもよい。
塗り潰しは、パンチ穴画像の画素の色の変更方法を規定する。塗り潰し形状は、パンチ穴画像の画素の色を変更するときの領域が、パンチ穴画像の形状(円形又は四角形)に応じて決定されるか、又は、パンチ穴画像の形状に関わらず矩形状として決定されるかの何れかを示す。塗り潰し色は、パンチ穴画像の画素を変更するときの色として、白色が設定されるか、又は、パンチ穴画像の周辺の色に応じて決定されるかの何れかを示す。
図4に示すように、テーブル243には、設定情報(図3参照)に基づいて決定される処理範囲情報が格納される。処理範囲情報は、パンチ穴画像を検出する処理がCPU21によって実行される場合において処理対象となる領域を示す。処理範囲情報は、設定情報(図3参照)の範囲と同様、元画像の4辺の内側に沿って形成される領域を規定する。処理範囲情報は、左処理範囲、左拡張範囲、右処理範囲、右拡張範囲、上処理範囲、上拡張範囲、上幅範囲(左)、上幅範囲(右)、上幅拡張範囲(左)、上幅拡張範囲(右)、下処理範囲、下拡張範囲、下幅範囲(左)、下幅範囲(右)、下幅拡張範囲(左)、下幅拡張範囲(右)を含む。
以下、左処理範囲、右処理範囲、左拡張範囲、右拡張範囲によって示される領域を、それぞれ、「左処理領域」、「右処理領域」、「左拡張領域」、「右拡張領域」という。上処理範囲、上幅範囲(左)、上幅範囲(右)によって示される領域を、「上処理領域」という。下処理範囲、下幅範囲(左)、下幅範囲(右)によって示される領域を、「下処理領域」という。上拡張範囲、上幅拡張範囲(左)、上幅拡張範囲(右)によって示される領域を、「上拡張領域」という。下拡張範囲、下幅拡張範囲(左)、下幅拡張範囲(右)によって示される領域を、「下拡張領域」という。左処理領域、右処理領域、上処理領域、下処理領域を総称して、「処理領域」という。左拡張領域、右拡張領域、上拡張領域、下拡張領域を総称して、「拡張領域」という。
左処理範囲、右処理範囲、上処理範囲、下処理範囲、及び、左拡張範囲、右拡張範囲、上拡張範囲、下拡張範囲は、それぞれ、元画像の左端、右端、上端、及び、下端のそれぞれからの内側方向の長さを、mm単位で示す。左拡張範囲、右拡張範囲、上拡張範囲、下拡張範囲は、それぞれ、左処理範囲、右処理範囲、上処理範囲、下処理範囲によって示される領域が内側に所定距離だけ広げられた領域を規定する。このため、左拡張範囲、右拡張範囲、上拡張範囲、下拡張範囲は、それぞれ、左処理範囲、右処理範囲、上処理範囲、下処理範囲よりも長い。
上幅範囲(左)は、元画像の左端から上処理領域の左端までの長さを示す。上幅範囲(右)は、元画像の右端から上処理領域の右端までの長さを示す。下幅範囲(左)は、元画像の左端から下処理領域の左端までの長さを示す。下幅範囲(右)は、元画像の右端から下処理領域の右端までの長さを示す。上幅拡張範囲(左)は、元画像の左端から上拡張領域の左端までの長さを示す。上幅拡張範囲(右)は、元画像の右端から上拡張領域の右端までの長さを示す。下幅拡張範囲(左)は、元画像の左端から下拡張領域の左端までの長さを示す。下幅拡張範囲(右)は、元画像の右端から下拡張領域の右端までの長さを示す。
<CPU21による処理の概要>
PC2のCPU21によって実行される、パンチ穴画像を除去するための処理(メイン処理)の概要について、図5を参照して説明する。工程B1(S1〜S7)では、元画像のうち、パンチ穴画像の検出処理の対象とする少なくとも1つの処理領域が特定される。元画像は、特定された少なくとも1つの処理領域のそれぞれに対応する拡張領域単位で区分され、少なくとも1つの部分画像が生成される。工程B2(S9〜S23)では、生成された少なくとも1つの部分画像のそれぞれに基づいて、2つの画像(第1画像及び第2画像)が生成される。そして、2つの画像のそれぞれについて、パンチ穴画像の候補となる領域が抽出される。工程B3(S25)では、B2によって2つの画像から抽出された、パンチ穴画像の候補となる領域に基づいて、パンチ穴画像が決定される。工程B4(S27〜S33)では、B3によって決定されたパンチ穴画像に対応する画素を変更するための塗り潰し色が決定される。そして、決定された塗り潰し色によって、パンチ穴画像に対応する画素の色が変更され、パンチ穴が除去される。
図6は、記憶部24に記憶されたテーブル244を示す。工程B1が実行される過程で、元画像データ、部分画像データがテーブル244に格納される。工程B2が実行される過程で、第1中間データ、第2中間データ、第1画像データ、第2画像データ、矩形領域データ、穴方向、形状、候補領域データ、第2中央領域データがテーブル244に格納される。工程B4が実行される過程で、塗り潰し色、ばらつき量、塗り潰し領域が格納される。テーブル244に格納されるそれぞれのデータの詳細は後述する。
<CPU21による処理の詳細>
PC2のCPU21によって実行されるメイン処理の詳細について説明する。なお、メイン処理が開始される前に、CPU21は、入力部28を介して設定情報が入力されたことに応じて、入力された設定情報をテーブル242(図3参照)に格納しているものとする。CPU21は、画像読取装置1から出力された元画像データを、通信ケーブル3を介して受信した場合、記憶部24に記憶されたプログラムを実行することによって、メイン処理を開始する。CPU21は、受信した元画像データを、テーブル244(図6参照)に格納する。CPU21は、元画像データと同時に受信した属性情報を、テーブル241(図2参照)に格納する。
<工程B1:第1取得処理、第2取得処理>
図5に示すように、CPU21は、テーブル244から元画像データを取得する(S1)。CPU21は、テーブル241から属性情報を取得する(S1)。CPU21は、テーブル242から設定情報を取得する(S1)。CPU21は、第1取得処理(図7参照)を実行する(S3)。なお、以下の説明において、属性情報、及び、設定情報とは、S1の処理によって取得された属性情報、及び、設定情報を示すものとする。
図7を参照し、第1取得処理について説明する。CPU21は、設定情報の左設定範囲及び右設定範囲を加算した値が、属性情報の元画像幅をmm単位に換算した値よりも大きいか判定する(S41)。CPU21は、左設定範囲及び右設定範囲を加算した値が、元画像幅をmm単位に換算した値よりも大きいと判定した場合(S41:YES)、テーブル243(図4参照)の左処理範囲として、元画像幅をmm単位に換算した値を格納する(S43)。CPU21は、テーブル243の右処理範囲、上処理範囲、及び、下処理範囲として、「0」を格納する(S43)。CPU21は処理をS49に進める。CPU21は、左設定範囲及び右設定範囲を加算した値が、元画像幅をmm単位に換算した値以下と判定した場合(S41:NO)、テーブル243の左処理範囲として、左設定範囲を格納する(S44)。CPU21は、テーブル243の右処理範囲として、右設定範囲を格納する(S44)。CPU21は処理をS45に進める。
S41〜S44の処理について、具体例を挙げて説明する。図8(A)において、左設定領域41Aは、元画像4のうち、左端から右側に左設定範囲(Str(left))離隔した位置を上下に延びる一点鎖線411に対して左側の領域として定義される。右設定領域41Bは、元画像4のうち、右端から左側に左設定範囲(Str(right))離隔した位置を上下に延びる一点鎖線412に対して右側の領域として定義される。図8(A)に示すように、左設定領域41Aの右側部分と、右設定領域41Bの左側部分とが重複する場合、設定情報の左設定範囲(Str(left))と右設定範囲(Str(right))とを加算した値は、属性情報の元画像幅(Img(W))をmm単位に換算した値よりも大きくなる(S41:YES)。この場合、それぞれの設定領域に基づいて元画像4から部分画像が生成された場合、それぞれの部分画像の重複部分に対する処理が重複する場合がある。このため、図8(B)に示すように、CPU21は、テーブル243の左処理範囲(Prg(left))として、元画像幅(Img(W))をmm単位に換算した値を格納する(S43)。又、CPU21は、テーブル243の右処理範囲(Prg(right))、上処理範囲(Prg(upper))、下処理範囲(Prg(lower))として、「0」を格納する(S43)。この場合、左処理領域41Cのみが有効となり、右処理領域、上処理領域、及び、下処理領域は無効となる。このため、それぞれの設定領域に基づいて部分画像が生成された場合に、部分画像どうしは重複しない。
図7に示すように、CPU21は、設定情報の上設定範囲及び下設定範囲を加算した値が、属性情報の元画像高さをmm単位に換算した値よりも大きいか判定する(S45)。CPU21は、上設定範囲及び下設定範囲を加算した値が元画像高さをmm単位に換算した値よりも大きいと判定した場合(S45:YES)、テーブル243の上処理範囲として、元画像高さをmm単位に換算した値を格納する(S47)。CPU21は、テーブル243の左処理範囲、右処理範囲、及び、下処理範囲として、「0」を格納する(S47)。CPU21は処理をS49に進める。CPU21は、上設定範囲及び下設定範囲を加算した値が、元画像高さをmm単位に換算した値以下と判定した場合(S45:NO)、テーブル243の上処理範囲として、上設定範囲を格納する(S48)。CPU21は、下処理範囲として、下設定範囲を格納する(S48)。CPU21は処理をS49に進める。
S45〜S48の処理について、具体例を挙げて説明する。図9(A)において、上設定領域42Aは、元画像4のうち、上端から下側に上設定範囲(Str(upper))離隔した位置を左右に延びる一点鎖線413に対して上側の領域として定義される。下設定領域42Bは、元画像4のうち、下端から上側に下設定範囲(Str(lower))離隔した位置を左右に延びる一点鎖線414に対して下側の領域として定義される。
図9(A)に示すように、上設定領域42Aの下側の部分と、下設定領域42Bの上側の部分とが重複する場合、設定情報の上設定範囲(Str(upper))と下設定範囲(Str(lower))とを加算した値は、属性情報の元画像高さ(Img(H))をmm単位に換算した値よりも大きくなる(S45:YES)。この場合、それぞれの設定領域に基づいて元画像4から部分画像が生成された場合、それぞれの部分画像の重複部分に対する処理が重複する場合がある。このため、図9(B)に示すように、CPU21は、テーブル243の上処理範囲(Prg(upper))として、元画像幅(Img(H))をmm単位に換算した値を格納する(S47)。又、CPU21は、テーブル243の左処理範囲(Prg(left))、右処理範囲(Prg(right))、下処理範囲(Prg(lower))として「0」を格納する(S47)。この場合、上処理領域42Cのみが有効となり、左処理領域、右処理領域、及び、下処理領域は無効となる。このため、それぞれの設定領域に基づいて部分画像が生成された場合に、部分画像どうしは重複しない。
図7に示すように、CPU21は、S41〜S48の処理によってテーブル243に格納された左処理領域、右処理領域、上処理領域、下処理領域について、重複する部分がなくなるように、テーブル243の上幅範囲(左)、上幅範囲(右)、下幅範囲(左)、下幅範囲(右)を調整する(S49)。具体的には、CPU21は、テーブル243の左処理範囲を、テーブル243の上幅範囲(左)に格納し、右処理範囲を、テーブル243の上幅範囲(右)に格納する。
S49の処理について、具体例を挙げて説明する。図10(A)において、左処理領域43Aは、元画像4のうち、左端から右側に左処理範囲(Prg(left))離隔した位置を上下に延びる一点鎖線415に対して左側の領域として定義される。右処理領域43Bは、元画像4のうち、右端から左側に左処理範囲(Prg(right))離隔した位置を上下に延びる一点鎖線416に対して右側の領域として定義される。上処理領域43Cは、元画像4のうち、上端から下側に上処理範囲(Prg(upper))離隔した位置を左右に延びる一点鎖線417に対して上側の領域として定義される。下処理領域43Dは、元画像4のうち、下端から上側に下処理範囲(Prg(lower))離隔した位置を左右に延びる一点鎖線418に対して下側の領域として定義される。
図10(A)の場合、処理範囲情報の左処理範囲(Prg(left))と右処理範囲(Prg(right))とを加算した値は、元画像幅(Img(W))をmm単位に換算した値よりも小さく(S41:NO)、且つ、処理範囲情報の上処理範囲(Prg(upper))と下処理範囲(Prg(lower))とを加算した値は、元画像高さ(Img(H))をmm単位に換算した値よりも小さい(S45:NO)。この場合、左処理領域43Aの上側部分と上処理領域43Cの左側部分、右処理領域43Bの上側部分と、上処理領域43Cの右側部分、左処理領域43Aの下側部分と、下処理領域43Dの左側部分、右処理領域43Bの下側部分と、下処理領域43Dの右側部分は、それぞれ重複する。この場合、それぞれの設定領域に基づいて元画像4から部分画像が生成された場合、それぞれの部分画像の重複部分に対する処理が重複する場合がある。
このため、CPU21は、テーブル243の上幅範囲(左)として、設定情報の左処理範囲(Prg(left))を格納する。CPU21は、テーブル243の上幅範囲(右)として、設定情報の右処理範囲(Prg(right))を格納する。CPU21は、テーブル243の下幅範囲(左)として、設定情報の左処理範囲(Prg(left))を格納する。CPU21は、テーブル243の下幅範囲(右)として、設定情報の右処理範囲(Prg(right))を格納する(S49)。これによって、図10(B)に示すように、上処理領域43E、及び、下処理領域43Fは、何れも、左処理領域43A及び右処理領域43Bの間に配置される。このため、それぞれの設定領域どうしは重複しない。
図7に示すように、S49の処理の終了後、CPU21は、テーブル243の左処理範囲、右処理範囲、上処理範囲、及び、下処理範囲のそれぞれについて、設定情報の穴サイズ下限(図3参照)を2で除算した値(穴サイズ下限/2)よりも小さいか判定する(S51)。理由は、処理領域が「穴サイズ下限/2」よりも小さい場合、パンチ穴画像の半分以上が処理領域に収まっているかを判定できないためである。CPU21は、テーブル243の4つの処理範囲のうち、「穴サイズ下限/2」よりも小さいと判定した処理範囲について(S51:YES)、「0」を格納する(S53)。CPU21は処理をS55に進める。CPU21は、テーブル243の4つの処理範囲のうち、「穴サイズ下限/2」より小さくないと判定した処理範囲については(S51:NO)、「0」を格納しない。CPU21は処理をS55に進める。
CPU21は、テーブル243の上幅範囲(左)と上幅範囲(右)とを加算した値を、属性情報の元原稿幅(図2参照)をmm単位に換算した値から減算した値、及び、テーブル243の下幅範囲(左)と下幅範囲(右)とを加算した値を、属性情報の元原稿(図2参照)をmm単位に換算した値から減算した値が、「穴サイズ下限/2」よりも小さいか判定する(S55)。CPU21は、「穴サイズ下限/2」よりも小さいと判定した場合(S55:YES)、テーブル243のうち、「穴サイズ下限/2」よりも小さいと判定された上幅範囲(左)、上幅範囲(右)、下幅範囲(左)、下幅範囲(右)として、「0」を格納する。又、CPU21は、テーブル243の上処理範囲及び下処理範囲として、「0」を格納する(S57)。理由は、上処理領域及び下処理領域の幅が、「穴サイズ下限/2」よりも小さい場合、パンチ穴画像の半分が処理領域に収まっているかを判定できないためである。CPU21は、第1取得処理を終了させ、処理をメイン処理(図5参照)に戻す。CPU21は、算出結果が「穴サイズ下限/2」より小さくないと判定した場合(S55:NO)、第1取得処理を終了させ、処理をメイン処理(図5参照)に戻す。
以上の処理が実行された場合、4つの処理領域(左処理領域、右処理領域、上処理領域、及び、下処理領域)の上下方向及び左右方向の長さは、「穴サイズ下限/2」以上となる。これによって、CPU21は、処理領域に収まる部分の大きさが半分以上のパンチ穴画像を、除去の対象として特定できる。
図5に示すように、CPU21は、第1取得処理(S3)の終了後、第2取得処理(図11参照)を実行する(S5)。図11を参照し、第2取得処理について説明する。CPU21は、テーブル243の左処理範囲が有効であるかを、左処理範囲に「0」以外の値が格納されているかに応じて判定する(S61)。CPU21は、左処理範囲に「0」以外の値が格納されている場合、左処理範囲が有効と判定する(S61:YES)。CPU21は、左側処理範囲に、設定情報の穴サイズ上限を2で除算した値(穴サイズ上限/2)を加算し、左拡張範囲としてテーブル243に格納する(S63)。これによって、左処理領域が右側に拡張された左拡張領域が、左拡張範囲によって特定される。CPU21は処理をS65に進める。一方、CPU21は、左処理範囲に「0」が格納されている場合(S61:NO)、処理をS65に進める。
CPU21は、テーブル243の右処理範囲が有効であるかを、右処理範囲に「0」以外の値が格納されているかに応じて判定する(S65)。CPU21は、右処理範囲に「0」以外の値が格納されている場合、右処理範囲が有効と判定する(S65:YES)。CPU21は、右側処理範囲に、「穴サイズ上限/2」を加算し、右拡張範囲としてテーブル243に格納する(S67)。これによって、右処理領域が左側に拡張された右拡張領域が、右拡張範囲によって特定される。CPU21は処理をS69に進める。一方、CPU21は、右処理範囲に「0」が格納されている場合(S65:NO)、処理をS69に進める。
CPU21は、テーブル243の上処理範囲が有効であるかを、上処理範囲に「0」以外の値が格納されているかに応じて判定する(S69)。CPU21は、上処理範囲に「0」以外の値が格納されている場合、上処理範囲は有効と判定する(S69:YES)。CPU21は、上処理範囲に、「穴サイズ上限/2」を加算し、上拡張範囲としてテーブル243に格納する(S71)。CPU21は、上幅範囲(左)から、「穴サイズ上限/2」を減算し、上幅拡張範囲(左)としてテーブル243に格納する(S71)。CPU21は、上幅範囲(右)から、「穴サイズ上限/2」を減算し、上幅拡張範囲(右)としてテーブル243に格納する(S71)。これによって、上処理領域が下側及び左右両側に拡張された上拡張領域が、上拡張範囲、上幅拡張範囲(左)、上幅拡張範囲(右)によって特定される。CPU21は処理をS73に進める。CPU21は、上処理範囲に「0」が格納されている場合(S69:NO)、処理をS73に進める。
CPU21は、テーブル243の下処理範囲が有効であるかを、下処理範囲に「0」以外の値が格納されているかに応じて判定する(S73)。CPU21は、下処理範囲に「0」以外の値が格納されている場合、下処理範囲は有効と判定する(S73:YES)。CPU21は、下処理範囲に、「穴サイズ上限/2」を加算し、下拡張範囲としてテーブル243に格納する(S75)。CPU21は、下幅範囲(左)から、「穴サイズ上限/2」を減算し、下幅拡張範囲(左)としてテーブル243に格納する(S75)。CPU21は、下幅範囲(右)から、「穴サイズ上限/2」を減算し、下幅拡張範囲(右)としてテーブル243に格納する(S75)。これによって、下処理領域が上側及び左右両側に拡張された下拡張領域が、下拡張範囲、下幅拡張範囲(左)、下幅拡張範囲(右)によって特定される。CPU21は第2取得処理を終了させ、処理をメイン処理(図5参照)に戻す。CPU21は、下処理範囲に「0」が格納されていると判断した場合(S73:NO)、第2取得処理を終了させ、処理をメイン処理(図5参照)に戻す。
第2取得処理について、具体例を挙げて説明する。図10(B)に示すように、左処理領域43A、右処理領域43B、上処理領域43E、及び、下処理領域43Fが設定された場合において、「穴サイズ上限/2」が左処理範囲に加算された場合(S63)、左処理領域43Aの右端の境界は、「穴サイズ上限/2」分右側の位置に変更される。これによって、図10(C)に示すように、左処理領域43Aが右側に拡張された左拡張領域43Gが設定される。又、「穴サイズ上限/2」が、右処理範囲に加算された場合(S67)、右処理領域43Bの左端の境界は、「穴サイズ上限/2」分左側の位置に変更される。これによって、右処理領域43Bが左側に拡張された右拡張領域43Hが設定される。つまり、左処理領域43A、及び、右処理領域43Bのうち、元画像4の4辺に対応する端部よりも内側の境界が、それぞれ内側に変更され、左拡張領域43G、及び、右拡張領域43Hが設定される。
「穴サイズ上限/2」が、上処理範囲に加算され、且つ、「穴サイズ上限/2」が、上幅処理範囲(左)、及び、上幅処理範囲(右)から減算された場合(S71)、上処理領域43Eの下端の境界は、「穴サイズ上限/2」分下側に変更される。上処理領域43Eの左端の境界は、「穴サイズ上限/2」分左側の位置に変更される。上処理領域43Eの右端の境界は、「穴サイズ上限/2」分右側の位置に変更される。これによって、上処理領域43Eが下側及び左右両側に拡張された上拡張領域43Iが設定される。「穴サイズ上限/2」が、下処理範囲に加算され、且つ、「穴サイズ上限/2」が、下幅処理範囲(左)及び、下幅処理範囲(右)から減算されることによって(S75)、下処理領域43Fの上端の境界は、「穴サイズ上限/2」分上側の位置に変更される。下処理領域43Fの左端の境界は、「穴サイズ上限/2」分左側の位置に変更される。下処理領域43Fの右端の境界は、「穴サイズ上限/2」分右側の位置に変更される。これによって、下処理領域43Fが上側及び左右両側に拡張された下拡張領域43Jが設定される。つまり、上処理領域43E、及び、下処理領域43Fのうち、元画像4の4辺に対応する端部よりも内側の境界が、それぞれ内側に変更され、上拡張領域43I、及び、下拡張領域43Jが設定される。
図5に示すように、第2取得処理(S5)の終了後、CPU21は、処理範囲情報(図4参照)に基づき、元画像データによって示される元画像(図6参照)から、拡張領域毎に部分画像を切り出し、それぞれを示す部分画像データを抽出(即ち、生成)する(S7)。CPU21は、元画像から抽出した部分画像の部分画像データを、テーブル244(図6参照)に格納する。
具体例を挙げて説明する。図10(C)に示すように、左拡張領域43G、右拡張領域43H、上拡張領域43I、及び、下拡張領域43Jが設定された場合を例に挙げる。図10(C)において、左拡張領域43Gは、元画像4のうち、左端から右側に左拡張範囲(Prg(ex−left))離隔した位置を上下に延びる一点鎖線421に対して左側の領域として定義される。右拡張領域43Hは、元画像4のうち、右端から左側に左拡張範囲(Prg(ex−right))離隔した位置を上下に延びる一点鎖線422に対して右側の領域として定義される。上拡張領域43Iは、元画像4のうち、上端から下側に上拡張範囲(Pre(ex−upper))離隔した位置を左右に延びる一点鎖線423に対して上側、左端から右側に上幅拡張範囲(左)(Prg(ex−wupper)(l))離隔した位置を上下に延びる一点鎖線424に対して右側、及び、右端から左側に上幅拡張範囲(右)(Prg(ex−wupper)(r))離隔した位置を上下に延びる一点鎖線425に対して左側の領域として定義される。下拡張領域43Jは、元画像4のうち、下端から上側に下設定範囲(Prg(lower))離隔した位置を左右に延びる一点鎖線426に対して下側、左端から右側に下幅拡張範囲(左)(Prg(ex−wlower)(l))離隔した位置を上下に延びる一点鎖線427に対して右側、及び、右端から左側に下幅拡張範囲(右)(Prg(ex−wlower)(r))離隔した位置を上下に延びる一点鎖線428に対して左側の領域として定義される。
CPU21は、テーブル243の左拡張範囲に基づき、元画像のうち左拡張領域43G内の画像のデータを、部分画像データとして抽出する。CPU21は、テーブル243の右拡張領域43Hに基づき、元画像のうち右拡張領域内の画像のデータを、部分画像データとして抽出する。CPU21は、テーブル243の上拡張範囲、及び、上幅拡張範囲に基づき、元画像のうち上拡張領域43I内の画像のデータを、部分画像データとして抽出する。CPU21は、テーブル243の下拡張範囲、及び、下幅拡張範囲に基づき、元画像のうち下拡張領域43J内の画像のデータを、部分画像データとして抽出する。
第2取得手段(図11参照)によって処理領域を拡張し、拡張領域を設定する理由について、図12を参照して説明する。図12(A)に示すように、元画像4のうち、左処理領域43Aに対応する部分画像431Aに基づいて、元画像4に描かれた横長の模様44に対する処理が実行される場合を例に挙げる。この場合、模様44のうち部分画像431Aに含まれる部分(矢印45の部分)の形状は、パンチ穴画像と類似するので、模様44がパンチ穴画像として誤って判定される可能性がある。これに対し、図12(B)に示すように、元画像4のうち、左拡張領域43Gに対応する部分画像431Gに基づいて、元画像4に描かれた模様44に対する処理が実行される場合、模様44のうち部分画像431Gに含まれる部分(矢印46の部分)の形状は、パンチ穴画像よりも幅方向に大きくなる。このため、CPU21は、模様44がパンチ穴画像でないと適切に判定できる。
<工程B2:分離処理>
図5に示すように、S7の処理の終了後、CPU21は、テーブル244(図6参照)に格納された複数の部分画像データのうち1つを選択する(S9)。以下、選択された部分画像データを、「選択部分画像データ」といい、選択部分画像データによって示される部分画像を、「選択部分画像」という。CPU21は、選択部分画像データに基づいて分離処理(図13、図14参照)を実行する(S11)。
図13を参照し、分離処理について説明する。CPU21は、元画像の解像度が100dpiよりも大きいかを、属性情報の解像度(図2参照)に基づいて判定する(S81)。CPU21は、解像度が100dpiよりも大きいと判定した場合(S81:YES)、選択部分画像の解像度を100dpiに変換する(S83)。なお、選択部分画像の解像度を100dpiに変換する理由は、以降の処理負荷を軽減させるためである。CPU21は処理をS85に進める。CPU21は、選択部分画像の解像度が100dpi以下と判定した場合(S81:NO)、処理をS85に進める。
CPU21は、元画像がカラー画像であるかを、属性情報の色(図2参照)に基づいて判定する(S85)。CPU21は、元画像がカラー画像であると判定した場合(S85:YES)、選択部分画像をグレースケール画像に変換する(S87)。具体的には、CPU21は、選択部分画像の1画素毎のR値、G値、B値について、以下の式(1)を適用することによって、Y値(輝度)を算出する。なお、「>>10」は、10ビットの右シフトであり、2−10(=1/1024)を乗算することを示す。
Y(輝度)=(306×R+601×G+117×B)>>10 (1)
CPU21は、Y値を算出した画素の画素値として、R値、G値、B値のそれぞれの代わりに、算出したY値を設定(即ち、画素値の置換)する。これによって、CPU21は、選択部分画像をグレースケール画像に変換する。即ち、例えば、元画像の各画素が、R値、G値、B値それぞれ8ビットの計24ビットのデータ量を有していた場合、グレースケール画像に変換された選択部分画像の各画素は、Y値8ビットのデータ量に削減されている。以下、S87の処理によって変更された選択部分画像データを、「第1中間画像データ」といい、第1中間画像データに対応する画像を、「第1中間画像」という。CPU21は、第1中間画像データを、選択部分画像データに関連付けて、テーブル244(図6参照)に格納する(S87)。CPU21は処理をS91に進める。
一方、CPU21は、元画像がグレースケール画像であると判定した場合(S85:NO)、選択部分画像データを、第1中間画像データとして、選択部分画像データに関連付けてテーブル244に格納する(S89)。この場合、第1中間画像データは、部分画像データの複製によって生成されることとなる。CPU21は処理をS91に進める。
CPU21は、設定情報の背景色(図3参照)がグレー色であるか判定する(S91)。CPU21は、背景色がグレー色であると判定した場合(S91:YES)、選択部分画像の1画素毎のR値、G値、B値について、以下の式(2)(3)を適用することによって、Cb値、Cr値を算出する。
Cb=(−174×R−338×G+512×B)>>10 (2)
Cr=(512×R−430×G−82×B)>>10 (3)
次に、CPU21は、算出したCb値、Cr値に基づき、以下の式(4)を適用することによって、彩度を算出する。
彩度=√(Cb値2+Cr値2) (4)
CPU21は、選択部分画像の複数の画素のうち、算出した彩度が「16」以上の画素を抽出する。CPU21は、抽出した画素のR値、G値、B値のそれぞれに「255」を設定する(S93)。これによって、CPU21は、彩度が「16」以上の画素を、パンチ穴画像の検出処理の対象から除外する。以下、画素のR値、G値、B値のそれぞれの「255」を設定することを、「画素を除去する」ともいう。なお、彩度が「16」以上の画素を除去する理由は、選択部分画像のうちパンチ穴画像として検出される背景部材の色は、無彩色(グレー色)であるためである。このため、彩度が「16」以上の画素は、背景部材の画像に該当しないので、パンチ穴画像の検出処理の対象から排除できる。
なお、上記では、YCbCr系の色空間に基づく算出式の具体例として、式(1)〜(4)が挙げられている。これに対し、本発明は、別の色空間、例えば、RGB系の色空間に基づいてパラメータが算出されてもよい。この場合、上記と異なる式が用いられることになる。彩度の閾値「16」についても、適用される色空間によって別の値が用いられることは言うまでもない。
次にCPU21は、S93の処理が実行された選択部分画像を、グレースケール画像に変換する(S94)。グレースケール画像への変換方法は、S87の処理の場合と同一である。CPU21は、S94の処理が実行された選択部分画像の複数の画素のうち、設定情報の背景輝度上限(図3参照)以上のY値(輝度)を有する画素を抽出する。CPU21は、抽出した画素のY値(輝度)として、「255」を設定し、この画素を除去する(S95)。なお、輝度が背景輝度上限以上の画素を除去する理由は、選択部分画像のうちパンチ穴画像として検出される背景部材の輝度の範囲は、背景輝度上限よりも小さいためである。このため、輝度が背景輝度上限以上の画素は、背景部材の画像に該当しないので、パンチ穴画像の検出処理の対象から排除できる。
CPU21は、S95の処理が実行された選択部分画像の複数の画素のうち、設定情報の背景輝度下限(図3参照)以下のY値(輝度)を有する画素を抽出する。CPU21は、抽出した画素のY値(輝度)として、「255」を設定し、この画素を除去する(S97)。なお、輝度が背景輝度下限以下の画素を除去する理由は、選択部分画像のうちパンチ穴画像として検出される背景部材の輝度の範囲は、背景輝度下限よりも大きいためである。このため、輝度が背景輝度下限以下の画素は、背景部材の画像に該当しないので、パンチ穴画像の検出処理の対象から排除できる。
以下、S93〜S97の処理によって変更された部分画像を、「第2中間画像」という。第2中間画像のデータを、「第2中間画像データ」という。換言すれば、S93〜S97の処理によって、部分画像データから、第2中間画像データが生成される。CPU21は、第2中間画像データを、選択部分画像データに関連付けて、テーブル244(図6参照)に格納する(S99)。CPU21は処理をS107に進める。
一方、CPU21は、背景色が白色であると判定した場合(S91:NO)、選択部分画像の1画素毎のR値、G値、B値について、上記の式(2)(3)を適用することによって、Cb値、Cr値を算出する。次に、CPU21は、算出したCb値、Cr値に基づき、上記の式(4)を適用することによって、彩度を算出する。CPU21は、選択部分画像の複数の画素のうち、算出した彩度が「16」以上の画素を抽出する。CPU21は、抽出した画素のR値、G値、B値のそれぞれに「255」を設定し、この画素を除去する(S101)。なお、彩度が「16」以上の画素を除去する理由は、背景色がグレー色の場合と同一である。
次にCPU21は、S101の処理が実行された部分画像を、グレースケール画像に変更する(S102)。グレースケール画像への変換方法は、S87の処理の場合と同一である。CPU21は、S102の処理が実行された選択部分画像の複数の画素のうち、設定情報の背景輝度上限(図3参照)以上のY値(輝度)を有する画素を抽出する。CPU21は、抽出した画素のY値(輝度)として、「255」を設定し、この画素を除去する(S103)。なお、輝度が背景輝度上限以上の画素を除去する理由は、背景色がグレー色の場合と同一である。以下、S101〜S103の処理が実行された選択部分画像を、第2中間画像といい、第2中間画像のデータを、第2中間画像データという。CPU21は、第2中間画像データを、選択部分画像データに関連付けて、テーブル244(図6参照)に格納する(S105)。CPU21は処理をS107に進める。
なお、背景色がグレー色の場合と異なり、輝度が背景輝度下限以下の画素を除去しない理由は、次の通りである。背景色が白色であり、且つ、元画像の地色も白色の場合、パンチ穴画像は、対応するパンチ穴の枠に沿った影を示す輪郭線によってのみ検出可能となるためである。このため、輪郭線を示す画素が除去されないように、輝度が背景輝度下限以下の画素を除去しないこととしている。一方、背景色がグレー色であり、且つ、元画像の地色が白色の場合、パンチ穴画像は、背景色のグレー色と、地色の白色との境界部分に基づいて検出できる。このため、輝度が背景輝度下限以下の画素を除去しても問題とならない。
CPU21は、選択部分画像データに関連付けてテーブル244に格納された第1中間画像データ及び第2中間画像データに基づき、第1中間画像及び第2中間画像に対して周知の中央値フィルタを用いてフィルタリング処理を実行する(S107)。なお、中央値フィルタにおいて、中央値を算出する画素の選択パターンは特に限定されず、注目画素を中心としたn×n(nは任意の整数で、例えば「3」)の画素領域であればよい。中央値フィルタを用いたフィルタリングが実行されることによって、第1画像及び第2画像中のノイズが除去される。
CPU21は、S107の処理が実行された第1中間画像及び第2中間画像に対し、周知のSobelフィルタを用いてフィルタリング処理を実行する(S109)。なお、Sobelフィルタの係数行列は特に限定されず、周知の様々な係数行列を用いることが可能である。本実施形態では、一例として、x方向のエッジを検出可能なオペレータを含む3×3のSobelフィルタと、y方向のエッジを検出可能なオペレータを含む3×3のSobelフィルタとが、それぞれ適用される。それぞれのSobelフィルタによって算出されたエッジ強度の自乗和平方根を算出することで、S109のフィルタリング処理が行われる。
なお、Sobelフィルタを用いたフィルタリング処理は、画像のエッジを強調するエッジ強調処理の一例である。Sobelフィルタ以外の、エッジを抽出(又は強調)することが可能な他の周知なフィルタ(例えば、ラプラシアンフィルタ)が、S109の処理においてSobelフィルタの代わりに用いられても良い。Sobelフィルタを用いたフィルタリングが実行されることによって、第1中間画像及び第2中間画像のエッジが強調される。
CPU21は、S109の処理が実行された第1中間画像及び第2中間画像のそれぞれを白黒反転させる(S110)。CPU21は処理をS121(図14参照)に進める。
図14に示すように、CPU21は、S110(図13参照)の処理が実行された第1中間画像及び第2中間画像のそれぞれについて、輝度「128」を第1閾値として2値化処理を実行する(S121)。第1閾値である輝度「128」は、最小輝度「0」と最大輝度「255」との中央値を示す。なお、第1中間画像及び第2中間画像は、S110(図13参照)の処理によって白黒反転されているので、2値化後の最小輝度「0」は、パンチ穴画像の輪郭線に対応する色(以下、「第1色」という。)の輝度を示す。2値化後の最大輝度「255」は、パンチ穴画像の輪郭線に対応しない色(以下、「第2色」という。)の輝度を示す。
なお、2値化時の輝度の範囲は、「0〜255」に限定されず、他の値であってもよい。このため、2値化後において、第1色に対応する最小輝度は「0」に限定されず、他の値であって良い。又、第2色に対応する最大輝度は「255」に限定されず、他の値であってもよい。又、輝度を「0」(第1色に対応)又は「1」(第2色に対応)の2値に対応させてもよい。
CPU21は、S121の処理によって2値化された第1中間画像及び第2中間画像に対し、周知の中央値フィルタを用いてフィルタリング処理を実行する(S123)。CPU21は、S123の処理によってフィルタリングされた第1中間画像に対し、周知の膨張処理を実行し、次いで、周知の収縮処理を実行する(S125)。即ち、第1中間画像に対して周知のクロージング処理が行われる。CPU21は、S123の処理によってフィルタリングされた第2中間画像に対し、周知の膨張処理を実行する(S127)。つまり、第2中間画像に対しては、第1中間画像に対する処理と異なり、収縮処理が実行されない。なお、S121〜S127の処理の結果は、一時的な画像データとして新たに生成されるため、第1中間画像データ及び第2中間画像データ自体には影響を及ぼさない。
CPU121は、S125の処理が実行された第1中間画像、及び、S127の処理が実行された第2中間画像を論理積し、第1画像を生成する(S129)。具体的には、CPU21は、第1中間画像及び第2中間画像について、同一位置に配置された画素の輝度を比較する。CPU21は、双方の輝度が何れも「0」の場合、第1画像のうち、対応する位置の画素の輝度を「0」に設定する。CPU21は、何れかの輝度が「255」の場合、第1画像のうち、対応する位置の画素の輝度を「255」に設定する。CPU21は、生成した第1画像を示す第1画像データを、選択部分画像データに関連付けて、テーブル244(図6参照)に格納する。CPU21は、処理をS131に進める。
CPU21は、S110(図13参照)の処理が実行された第1中間画像及び第2中間画像のそれぞれについて、輝度「208」を第2閾値として2値化処理を実行する(S131)。第2閾値である輝度「208」は、最小輝度「0」と最大輝度「255」との中央値「128」よりも、最小輝度「0」から遠い。なお、第1中間画像及び第2中間画像は、S110の処理によって白黒反転されているので、輝度「208」は、パンチ穴画像の輪郭線に対応する第1色(輝度「0」)に対応する輝度からより遠い値ということになる。
CPU21は、S131の処理によって2値化された第1中間画像及び第2中間画像に対し、周知の中央値フィルタを用いてフィルタリング処理を実行する(S133)。CPU21は、S133の処理によってフィルタリングされた第1中間画像に対し、周知の膨張処理を実行し、次いで、周知の収縮処理を実行する(S135)。CPU21は、S133の処理によってフィルタリングされた第2中間画像に対し、周知の膨張処理を実行する(S137)。つまり、第2中間画像に対しては、輝度128を閾値として用いることによって2値化が実行された場合と同様、収縮処理が実行されない。なお、S131〜S137の処理の結果も、一時的な画像データとして新たに生成されるため、第1中間画像データ及び第2中間画像データ自体には影響を及ぼさない。
CPU121は、S135の処理が実行された第1中間画像、及び、S137の処理が実行された第2中間画像を論理積し、第2画像を生成する(S139)。CPU21は、生成した第2画像を示す第2画像データを、選択部分画像データに関連付けて、テーブル244(図6参照)に格納する。CPU21は、分離処理を終了し、処理をメイン処理(図5参照)に戻す。
なお、第2画像は、第1画像が生成されるときの2値化の閾値「128」に対し、パンチ穴画像の色である第1色に対応する輝度にから遠い閾値「208」で2値化され、生成される。このため、第2画像には、第1画像と比べて、元画像において明るい色(即ち、コントラストの弱い)のパンチ穴画像が表れやすくなる。又、第2画像には、パンチ穴画像以外の部分の画像(ノイズ)が現れやすくなる。
分離処理について、具体例を挙げて説明する。なお、以下では、第1画像が生成される工程(S121〜S129)について説明し、第2画像が生成される工程(S131〜S139)については省略する。又、理解を容易とする為、特段の限定がない限り、S110(図13参照)の反転処理がされない場合を例に挙げて説明する。
図15(A)に示すように、地色が白色の部分画像51において、パンチ穴画像50に、
(a)彩度が「16」よりも大きい
(b)輝度が背景色輝度上限以上
(c)輝度が背景色輝度下限以下
の何れかの条件を満たす色の直線状の模様56が重なっている場合を例に挙げる。この場合、S87又はS89(図13参照)の処理によって生成される第1中間画像には、グレースケール化された模様56が含まれる。フィルタリング(S107、S109参照)、及び、2値化(S121)によって、第1中間画像51Aが生成される。Sobelフィルタを用いたフィルタリングによってエッジ部分が抽出されるので、第1中間画像51Aには、パンチ穴画像50の輪郭線501Aが含まれる。又、模様56と白地との境界を示す2つの境界線56Aが含まれる場合がある。第1中間画像51Aに対して、フィルタリング(S123参照)及び膨張、収縮処理(S125参照)が実行され、第1中間画像51Bが生成される。境界線56Aの間が1画素分離隔する場合、境界線56Aの間の白色の画素は、膨張、収縮処理によって黒色に変換される。このため、第1中間画像51Bには、パンチ穴画像に対応する輪郭線501Bに、1本の横線56Bが重なって示される。
一方、第2中間画像が生成される場合、S93、S101(図13参照)によって、彩度「16」以上の画素は除去される。又、S95、S103(図13参照)の処理によって、背景色輝度上限以上の輝度の画素は除去される。又、S97(図13参照)の処理によって、背景色輝度下限以下の輝度の画素は除去される。このため、上記(a)〜(c)の何れかの条件を満たす色の模様56は、第2中間画像から除去される。フィルタリング(S107、S109参照)、及び、2値化(S121)によって生成される第2中間画像51Cには、パンチ穴画像50の輪郭線501Cのみが含まれ、模様56に対応する画像は含まれない。
第2中間画像51Cに対して、フィルタリング(S123参照)及び膨張処理(S127参照)が実行され、第2中間画像51Dが生成される。なお、第1中間画像51Bと異なり、収縮処理は実行されないので、第2中間画像51Dにおける輪郭線501Dは、第1中間画像51Bにおける輪郭線501Bよりも太さが所定サイズ(例えば1画素)太くなる。
次に、第1中間画像51Bと第2中間画像51Dとが論理積され、第1画像51Eが生成される(S129)。これによって、第1中間画像51Bにおける横線56Bは、第1画像51Eから除去される。第1画像51Eにおける輪郭線501Eの幅は、第1中間画像51Bにおける輪郭線501Bに揃えられる。以上のように、部分画像51のパンチ穴画像50に模様56が重なっている場合でも、パンチ穴画像50に対応する輪郭線501Eを含む第1画像51Eが、分離処理によって生成される。
図15(B)に示すように、上記(a)〜(c)の何れかの条件を満たす地色57を有する部分画像52を例に挙げる。この場合、フィルタリング(S107、S109参照)、及び、2値化(S121)によって、第1中間画像52Aが生成される。Sobelフィルタを用いたフィルタリングによって抽出されるエッジは、パンチ穴画像50の輪郭部分のみであるので、第1中間画像52Aには、パンチ穴画像50の輪郭線502Aのみが含まれる。又、第1中間画像52Aに対して、フィルタリング(S123参照)、及び、膨張、収縮処理(S125参照)が実行され、第1中間画像52Bが生成される。第1中間画像52Bには輪郭線502Bが含まれている。
一方、第2中間画像が生成される場合、S93、S101(図13参照)によって、彩度「16」以上の画素は除去される。又、S95、S103(図13参照)の処理によって、背景色輝度上限以上の輝度の画素は除去される。又、S97(図13参照)の処理によって、背景色輝度下限以下の輝度の画素は除去される。このため、上記(a)〜(c)の何れかの条件を満たす地色57は除去される。又、S93、S101(図13参照)によって、彩度「16」以上の画素が除去されるときに、パンチ穴画像の輪郭線が僅かに小さくなる場合がある。理由は、パンチ穴画像50と地色57との境界部分で、例えば色ずれが原因で、双方の色が僅かに混在するためである。このため、フィルタリング(S107、S109参照)、及び、2値化(S121)によって生成される第2中間画像52Cには、第1中間画像52Aにおける輪郭線502Aよりも幅の細い輪郭線502Cが含まれる場合がある。
第2中間画像52Cに対して、フィルタリング(S123参照)、及び、膨張処理(S127参照)が実行され、第2中間画像52Dが生成される。ここで、第1中間画像52Bの場合と異なり、収縮処理は実行されないので、第2中間画像52Dにおける輪郭線502Dは、第2中間画像52Cにおける輪郭線502Cよりも太さが太くなる。結果、輪郭線502Dは、第1中間画像52Bの輪郭線502Bと略同じ太さになる。
次に、第1中間画像52Bと第2中間画像52Dとが論理積され、第1画像52Eが生成される(S129)。第1画像52Eには、輪郭線502B、502Dと略同一形状の輪郭線502Eが含まれる。以上のように、部分画像52が地色57を有する場合でも、パンチ穴画像50の輪郭線502Eを含む第1画像52Eが、分離処理によって生成される。
図15(C)に示すように、
(d)彩度が「16」に近い値を有する
(e)輝度が、背景色輝度下限、又は、背景色輝度上限に近い値を有する
の何れかの条件を満たす地色58を有する部分画像53を例に挙げる。この場合、フィルタリング(S107、S109参照)、及び、2値化(S121)によって、第1中間画像53Aが生成される。Sobelフィルタを用いたフィルタリングによって抽出されるエッジは、パンチ穴画像50の輪郭部分のみであるので、第1中間画像53Aには、パンチ穴画像50の輪郭線503Aのみが含まれる。又、第1中間画像53Aに対して、フィルタリング(S123参照)、及び、膨張、収縮処理(S125参照)が実行され、第1中間画像53Bが生成される。第1中間画像53Bには輪郭線503Bが含まれている。
一方、第2中間画像が生成される場合、彩度が「16」よりも小さい地色58の画素については、S93、S101(図13参照)の処理が実行された場合でも除去されず、画素が断片的に除去されず残る場合がある。又、輝度が背景色輝度上限よりも小さい地色58の画素は、S95、S103(図13参照)の処理が実行された場合でも除去されず、画素が断片的に除去されず残る場合がある。又、輝度が背景色輝度下限よりも大きい地色58の画素は、S97(図13参照)の処理が実行された場合でも除去されず、画素が断片的に除去されず残る場合がある。このため、フィルタリング(S107、S109参照)、及び、2値化(S121)によって生成される第2中間画像53Cには、輪郭線503Cと、地色58に基づくノイズ5031とが含まれる場合がある。又、図15(B)の場合と同様、輪郭線503Cの幅も細くなる場合がある。第2中間画像53Cに対して、フィルタリング(S123参照)、及び、膨張処理(S127参照)が実行され、第2中間画像53Dが生成される。第1中間画像53Bの場合と異なり、収縮処理は実行されないので、第2中間画像53Dにおける輪郭線503Dは、第1中間画像53Bの輪郭線503Bと略同じ太さになる。又、第2中間画像53Cのノイズ5031に対応するノイズ5032が、第2中間画像53Dに含まれる。
次に、第1中間画像53Bと第2中間画像53Dとが論理積され、第1画像53Eが生成される(S129)。第2中間画像53Dにおけるノイズ5032は、第1画像53Eから除外される。第1画像53Eには、輪郭線503B、503Dと略同一形状の輪郭線503Eが含まれる。以上のように、部分画像53が地色58を有している場合でも、パンチ穴画像50の輪郭線503Eを含む第1画像53Eが、分離処理によって生成される。
図15(D)に示すように、白色の地色59Aと、上記(a)〜(c)の何れかの条件を満たす地色59とを有し、且つ、地色59A、59Bの境界部分がパンチ穴画像50に重なる部分画像54を例に挙げる。この場合、フィルタリング(S107、S109参照)、及び、2値化(S121)によって、第1中間画像54Aが生成される。Sobelフィルタを用いたフィルタリングによってエッジ部分が抽出されるので、第1中間画像54Aには、パンチ穴画像50の輪郭線504Aが含まれる。又、地色59A、59Bの境界を示す横線59Cが含まれる場合がある。第1中間画像54Aに対して、フィルタリング(S123参照)、及び、膨張、収縮処理(S125参照)が実行され、第1中間画像54Bが生成される。第1中間画像54Bには、輪郭線504Bに、一本の横線59Dが含まれる。
一方、第2中間画像が生成される場合、S93、S95、S97、S101、S103(図13参照)の処理によって、上記(a)〜(c)の何れかの条件を満たす地色59Bは除去される。このため、フィルタリング(S107、S109参照)、及び、2値化(S121)によって生成される第2中間画像54Cには、図15(B)(C)の場合と同様、幅の細い輪郭線504Cのみが含まれる。第2中間画像54Cに対して、フィルタリング(S123参照)、及び、膨張処理(S127参照)が実行され、第2中間画像54Dが生成される。なお、第1中間画像54Bと異なり、収縮処理は実行されないので、第2中間画像54Dにおける輪郭線504Dは、第1中間画像54Bにおける輪郭線504Bよりも太さが所定サイズ(例えば1画素)太くなる。
次に、第1中間画像54Bと第2中間画像54Dとが論理積され、第1画像54Eが生成される(S129)。第1画像54Eには、輪郭線504Bと略同一形状の輪郭線504Eが含まれる。以上のように、部分画像54において、地色59A、59Bの境界部分がパンチ穴画像50に重なる場合でも、パンチ穴画像50の輪郭線504Eを含む第1画像54Eが、分離処理によって生成される。
<工程B2:抽出処理>
図5に示すように、CPU21は、分離処理(S11)の終了後、テーブル244(図6参照)のうち、S9の処理によって選択された選択部分画像データに関連付けられた第1画像データに対して、抽出処理(図16参照)を実行する(S13)。図16を参照し、抽出処理について説明する。CPU21は、第1画像の画素に対して、例えばラベル伝播法や同等ラベル解析法など、周知のラベリング処理を実行する(S171)。ラベリング処理では、2値化処理(S121、図14参照)によって2値化された画素のうち、パンチ穴画像の輪郭線に対応する第1色の画素が連続する集合体が抽出される。以下、抽出される集合体のそれぞれの領域を、「孤立領域」という。
CPU21は、抽出された孤立領域について、外接する矩形状の枠を特定し、矩形状の枠の内部の領域を特定する(S173)。以下、選択された矩形状の領域を、「矩形領域」という。孤立領域が複数抽出された場合、複数の孤立領域のそれぞれについて矩形領域が特定されるので、複数の孤立領域が特定されることになる。CPU21は、特定した少なくとも1つの矩形領域のそれぞれを示す矩形領域データを、第1画像データに関連付けてテーブル244(図6参照)に格納する。CPU21は、特定した少なくとも1つの矩形領域のうち何れかを、テーブル244から選択する(S175)。以下、選択された矩形領域を、「選択矩形領域」といい、選択矩形領域を示すデータを、「選択矩形領域データ」という。
CPU21は、選択矩形領域の高さ又は幅が、設定情報の穴サイズ下限(図3参照)を2で除算した値(穴サイズ下限/2)よりも小さいか判定する。CPU21は、選択矩形領域の高さ又は幅が、「穴サイズ下限/2」よりも小さいと判定した場合、選択矩形領域データを、テーブル244から削除する(S177)。理由は、「穴サイズ下限/2」よりも小さい矩形領域によって囲まれた画像は、パンチ穴画像である可能性が低いためである。なお、判断基準を「穴サイズ下限/2」とした理由は、パンチ穴画像に対応する全て部分のうち半分の領域が欠けている場合でも、パンチ穴画像に対応する画像として検出するためである。
CPU21は、S177の処理によってテーブル244から選択矩形領域データが削除されていない場合、選択矩形領域の高さ又は幅が、設定情報の穴サイズ上限(図3参照)よりも大きいか判定する。CPU21は、選択矩形領域の高さ又は幅が、穴サイズ上限よりも大きいと判定した場合、選択矩形領域データを、テーブル244から削除する(S179)。理由は、穴サイズ上限よりも大きい矩形領域によって囲まれた画像は、パンチ穴画像である可能性が低いためである。
CPU21は、S179までの処理によってテーブル244から選択矩形領域データが削除されていない場合、選択矩形領域の高さと幅との比「高さ/幅」「幅/高さ」の何れかが、「2.67」よりも大きいか判定する。「2.67」は、一般的に普及しているパンチ穴の高さと幅との比の最大値(高さ8mm、幅3mm)を示す。CPU21は、選択矩形領域の高さと幅との比「高さ/幅」「幅/高さ」の何れかが、2.67よりも大きいと判定した場合、選択矩形領域データを、テーブル244から削除する(S181)。理由は、パンチ穴として一般的に普及している高さ及び幅の比「2.67」の最大値よりも大きい画像は、パンチ穴画像である可能性が低いためである。
CPU21は、S181までの処理によってテーブル244から選択矩形領域データが削除されていない場合、選択矩形領域を、高さ方向及び幅方向にそれぞれ3等分することによって、9つ(3×3)の領域に分割する(S183)。CPU21は、分割された9つの領域(以下、「格子領域」という。)のうち、第1色の画素が1つ以上含まれている格子領域を「第1格子領域」として特定し、第1色の画素が含まれていない格子領域を「第2格子領域」として特定する。CPU21は、第1格子領域と第2格子領域とから、パンチ穴の輪郭の向く方向を示す穴方向を特定する(S185)。CPU21は、特定した穴方向を、選択矩形領域データに関連付けてテーブル244(図6参照)に格納する。
S183、S185の処理について、図18を参照し、具体例を挙げて説明する。なお、図18、図20(後述)では、矩形領域62A〜62I(図18参照)、67A〜67I(図20参照)が全て正方形の場合について示されている。しかしながら、実際の矩形領域の形状は、輪郭線の形状に応じて長方形となる場合もある。
図18(A)に示すように、円形のパンチ穴に対応する輪郭線61Aが、第1画像に含まれている場合を例に挙げる。この場合、CPU21は、S173の処理によって、輪郭線61Aに外接する正方形の矩形領域62Aを特定する。CPU21は、S183の処理によって、矩形領域62Aを9つの格子領域631〜639に分割する。CPU21は、格子領域631〜639のうち第1色の画素が含まれる第1格子領域として、格子領域631、632、633、634、636、637、638、639を特定する。CPU21は、第1色が含まれない第2格子領域として、格子領域635を特定する。
CPU21は、テーブル245(図19参照)を参照する。図19に示すように、テーブル245では、第1格子領域(図19において黒色で塗りつぶされた格子領域)、及び、第2格子領域(図19において白色で塗りつぶされた格子領域)の配置パターンと、穴方向とが関連付けられている。図18(A)に示す第1格子領域及び第2格子領域の配置パターンが、輪郭線61Aに基づいて特定された場合、CPU21は、S185の処理によって、テーブル245のNo.1の「中央」を、輪郭線61Aの向きを示す穴方向として特定する。
円形のパンチ穴に対応する輪郭線として、図18(B)〜(I)に示すように、円形の一部が欠けた輪郭線61B〜61Iが、第1画像に含まれる場合もある。画像読取装置1(図1参照)のイメージセンサは、パンチ穴の枠に沿って形成される影を読み取り、データ化して元画像データを生成するので、影の発生する状況に応じて、元画像に含まれる輪郭線の一部が欠ける場合は発生し得る。このような場合、CPU21は、S173の処理によって、輪郭線61B〜61Iに外接する正方形の矩形領域62B〜62Iを特定する。CPU21は、S183の処理によって、矩形領域62B〜62Iのそれぞれを、9つの格子領域に分割する。CPU21は、図18(B)〜(I)に示すように、第1格子領域及び第2格子領域を特定する。CPU21は、S185の処理によって、テーブル245のNo.2〜9の「右」「右上」「上」「左上」「左」「左下」「下」「右下」を、それぞれの輪郭線61B〜61Iの向きを示す穴方向として特定する。
なお、上記のようにして特定される、円形の輪郭線の穴方向とは、例えば、輪郭線に沿って2つの端部から等距離にある点における輪郭線の法線の延びる方向のうち、矩形領域の外側に向けて延びる方向を、「右」「右上」「上」「左上」「左」「左下」「下」「右下」の何れかの方向に近似した方向であるともいえる。又、穴方向とは、例えば、輪郭線を2等分する点に向けて、格子領域の中心から延びる方向を、「右」「右上」「上」「左上」「左」「左下」「下」「右下」の何れかの方向に近似した方向であるともいえる。なお、輪郭線の端部が存在しない場合には、穴方向は「中央」ということになる。又、穴方向とは、例えば、輪郭線を2等分する点から、輪郭線の2つの端部の間の中点に向けて延びる方向(輪郭線が空いている方向)の逆方向であるともいえる。
一方、図18(J)に示すように、例えば、パンチ穴に対応しない線分61Jが第1画像に含まれている場合を例に挙げる。この場合、CPU21は、S173の処理によって、線分61Jに外接する正方形の矩形領域62Jを特定する。CPU21は、S183の処理によって、矩形領域62Jを9つの格子領域に分割する。CPU21は、図18(J)に示すように第1格子領域及び第2格子領域を特定する。CPU21は、S185の処理によって、テーブル245のNo.10に対応する「その他」を、穴方向として特定する。なお、後述する図20(J)の場合も同様である。
図20(A)に示すように、四角形のパンチ穴に対応する輪郭線66Aが、第1画像に含まれている場合を例に挙げる。この場合の処理も、円形のパンチ穴に対応する輪郭線61Aが第1画像に含まれている図18(A)の場合と同様である。CPU21は、S173の処理によって、輪郭線61Aに外接する正方形の矩形領域67Aを特定する。CPU21は、S183の処理によって、矩形領域67Aを9つの格子領域681〜689に分割する。CPU21は、第1格子領域として、格子領域681、682、683、684、686、687、688、689を特定し、第2格子領域として、格子領域685を特定する。CPU21は、S185の処理によって、テーブル245(図19参照)のNo.1の「中央」を、輪郭線66Aの向きを示す穴方向として特定する。又、四角形のパンチ穴に対応する輪郭線として、図20(B)〜(I)に示すように、四角形の一部が欠けた輪郭線66B〜66Iが、第1画像に含まれる場合もある。これらの場合の処理も、円形のパンチ穴に対応する輪郭線61B〜61Iが第1画像に含まれる図18(B)〜(I)の場合と同様である。
なお、上記のようにして特定される、四角形の輪郭線の穴方向とは、輪郭線に沿って2つの端部から等距離にある点に向けて、格子領域の中心から延びる方向を、「右」「右上」「上」「左上」「左」「左下」「下」「右下」の何れかの方向に近似した方向であるともいえる。なお、輪郭線の端部が存在しない場合には、穴方向は「中央」ということになる。
図16に示すように、S185の処理によって穴方向を特定した後、CPU21は、選択矩形領域のうち4隅の特定の領域(以下、それぞれを「隅領域」という。)、及び、選択矩形領域のうち中央の特定の領域(以下、「第1中央領域」という。)を特定する。4つの隅領域及び第1中央領域は、それぞれ矩形状を有する。4つの隅領域及び第1中央領域のそれぞれの幅は、選択矩形領域の幅の1/10である。4つの隅領域及び第1中央領域のそれぞれの高さは、選択矩形領域の高さの1/10である。CPU21は、4つの隅領域に含まれる画素を抽出する(S187)。CPU21は、第1中央領域に含まれる画素を抽出する(S189)。
CPU21は選択矩形領域の4辺のうち、S185の処理によって特定された穴方向に対応する辺又は頂点を特定する。具体的には、穴方向が「左」「右」「上」「下」の何れかの場合、選択矩形領域の対応する辺として、「左辺」「右辺」「上辺」「下辺」が特定される。又、穴方向が「左上」「左下」「右上」「右下」の何れかの場合、選択矩形領域の対応する頂点として、「左上」「左下」「右上」「右下」が特定される。又、穴方向が「中央」の場合、選択矩形領域の対応する辺として、4辺の全てが特定される。
CPU21は、特定した辺の両端、又は、頂点に位置する隅領域に、第1色の画素が含まれているか判定する。例えば、穴方向「左」「右」「上」「下」に対応する選択矩形領域の辺である、「左辺」「右辺」「上辺」「下辺」が特定された場合、それぞれの辺の両端に位置する2つの隅領域に、第1色の画素が含まれているかが判定される。又、例えば、穴方向「左上」に対応する頂点「左上」が特定された場合左上の隅領域に第1色の画素が含まれているかが判定される。穴方向が「左下」「右上」「右下」の場合、それぞれ、「左下」「右上」「右下」の頂点の隅領域に第1色の画素が含まれているかが判定される。又、例えば、穴方向「中央」に対応する選択矩形領域の4辺が全て特定された場合、4つの隅領域に第1色の画素が含まれているかが判定される。以下、判定対象となる隅領域を、「判定隅領域」という。
CPU21は、判定隅領域に第1色の画素が含まれていない場合、選択矩形領域に含まれる輪郭線に対応するパンチ穴の形状を、円形として特定する(S191)。CPU21は、判定隅領域に第1色の画素が含まれている場合、選択矩形領域に含まれる輪郭線に対応するパンチ穴の形状を、四角形として特定する(S191)。CPU21は、特定した形状を、対応する選択矩形領域データに関連付けてテーブル244(図6参照)に格納する。このように判定する理由は、パンチ穴の形状が円形の場合、輪郭線は湾曲するので、判定隅領域に輪郭線が重畳しない可能性が高いためである。一方、パンチ穴の形状が四角形の場合、輪郭線は直角に曲折するので、判定隅領域に輪郭線が重畳する可能性が高いためである。
S187〜S191の処理について、具体例を挙げて説明する。図18(A)に示すように、円形のパンチ穴に対応する輪郭線61Aに基づいて、穴方向「中央」が特定された(S185)とする。CPU21は、矩形領域62Aのうち隅領域641〜644、及び、第1中央領域645を特定する。隅領域641、642、643、644は、それぞれ、矩形領域62Aの左上隅、右上隅、左下隅、及び、右下隅のそれぞれの隅領域に対応する。CPU21は、隅領域641〜644に含まれる画素を抽出する(S187)。CPU21は、第1中央領域645に含まれる画素を抽出する(S189)。図18(A)で示されるように、円形のパンチ穴に対応する輪郭線61Aの場合、隅領域641〜644、及び、第1中央領域645の何れにも、第1色の画素は含まれない。ここで、矩形領域62Aの4辺のうち穴方向「中央」に対応する辺は、4つの辺の全てと定義される。この場合、隅領域641〜644に、第1色の画素が含まれているかに応じて、輪郭線61Aに対応するパンチ穴の形状が特定されることになる。
CPU21は、テーブル246(図21参照)を参照する。図21に示すように、テーブル246には、穴方向、第1色の画素の有無、及び、形状が関連付けられている。ここで、CPU21は、S185の処理によって穴方向を「中央」と特定し、S187、S189の処理に基づいて、4つの隅領域641〜644、及び、第1中央領域645の何れにも第1色の画素が含まれていないと判定している。このため、テーブル246のNo.1の穴方向、及び、第1色の画素の有無の条件に合致する。CPU21は、「円形」を、輪郭線61Aに対応するパンチ穴の形状として特定する(S191)。
図18(B)に示すように、一部が欠けた円形のパンチ穴に対応する輪郭線61Bに基づいて、穴方向「右」が特定された(S185)とする。CPU21は、4つの隅領域、及び、第1中央領域に含まれる画素を抽出する(S187、S189)。図18(B)で示されるように、穴方向が「右」の円形のパンチ穴に対応する輪郭線61Bの場合、左上隅及び左下隅の隅領域に第1色の画素が含まれ、それ以外の領域に第1色の画素は含まれない。CPU21は、テーブル246(図21参照)を参照し、No.2の穴方向、及び、第1色の画素の有無の条件に合致すると判定する。CPU21は、「円形」を、輪郭線61Bに対応するパンチ穴の形状として特定する(S191)。
図18(C)に示すように、一部が欠けた円形のパンチ穴に対応する輪郭線61Cに基づいて、穴方向「右上」が特定された(S185)とする。CPU21は、4つの隅領域、及び、第1中央領域に含まれる画素を抽出する(S187、S189)。図18(C)で示されるように、穴方向が「右上」の円形のパンチ穴に対応する輪郭線61Cの場合、4つの隅領域、及び、第1中央領域の何れにも、第1色の画素が含まれない。CPU21は、テーブル246(図21参照)を参照し、No.6の穴方向、及び、第1色の画素の有無の条件に合致すると判定する。CPU21は、「円形」を、輪郭線61Cに対応するパンチ穴の形状として特定する(S191)。
図20(A)に示すように、四角形のパンチ穴に対応する輪郭線66Aに基づいて、穴方向「中央」が特定された(S185)とする。CPU21は、矩形領域67Aのうち隅領域691〜694、及び、第1中央領域695を特定する。隅領域691、692、693、694は、それぞれ、矩形領域67Aの左上隅、右上隅、左下隅、及び、右下隅のそれぞれの隅領域に対応する。CPU21は、隅領域691〜694に含まれる画素を抽出する(S187)。CPU21は、第1中央領域695に含まれる画素を抽出する(S189)。図20(A)で示されるように、四角形のパンチ穴に対応する輪郭線66Aの場合、隅領域691〜694に第1色の画素が含まれ、第1中央領域645に第1色の画素は含まれない。この場合、隅領域691〜694に、第1色の画素が含まれているかに応じて、輪郭線66Aに対応するパンチ穴の形状が特定されることになる。
CPU21は、テーブル246(図21参照)を参照する。CPU21は、S185の処理によって穴方向を「中央」と特定し、S187、S189の処理に基づいて、隅領域691〜694に第1色の画素が含まれ、第1中央領域695に第1色の画素が含まれていないと判定している。このため、テーブル246のNo.10の穴方向、及び、第1色の画素の有無の条件に合致する。CPU21は、「四角形」を、輪郭線66Aに対応するパンチ穴の形状として特定する(S191)。
図20(B)に示すように、一部が欠けた四角形のパンチ穴に対応する輪郭線66Bに基づいて、穴方向「右」が特定された(S185)とする。CPU21は、4つの隅領域、及び、第1中央領域に含まれる画素を抽出する(S187、S189)。図20(B)で示されるように、穴方向が「右」の四角形のパンチ穴に対応する輪郭線66Bの場合、4つの隅領域の全てに、第1色の画素が含まれ、第1中央領域には、第1色の画素が含まれない。CPU21は、テーブル246(図21参照)を参照し、No.10の穴方向、及び、第1色の画素の有無の条件に合致すると判定する。CPU21は、「四角形」を、輪郭線66Aに対応するパンチ穴の形状として特定する(S191)。
図20(C)に示すように、一部が欠けた四角形のパンチ穴に対応する輪郭線66Cに基づいて、穴方向「右上」が特定された(S185)とする。CPU21は、4つの隅領域、及び、第1中央領域に含まれる画素を抽出する(S187、S189)。図20(C)で示されるように、穴方向が「右上」の四角形のパンチ穴に対応する輪郭線66Cの場合、左上隅、右上隅、及び、右下隅の隅領域に、第1色の画素が含まれ、第1中央領域に第1色の画素が含まれない。CPU21は、テーブル246(図21参照)を参照し、No.10の穴方向、及び、第1色の画素の有無の条件に合致すると判定する。CPU21は、「四角形」を、輪郭線66Cに対応するパンチ穴の形状として特定する(S191)。
図18(J)に示すように、パンチ穴に対応しない線分61Jに基づいて、穴方向「その他」が特定された(S185)とする。CPU21は、4つの隅領域、及び、第1中央領域に含まれる画素を抽出する(S187、S189)。図18(J)で示されるように、穴方向が「その他」の線分61Jの場合、左上隅、及び、右下隅の隅領域、及び、第1中央領域に、第1色の画素が含まれ、右上隅、及び、右下隅の隅領域に第1色の画素が含まれない。CPU21は、テーブル246(図21参照)を参照し、No.10の穴方向、及び、第1色の画素の有無の条件に合致すると判定する。CPU21は、「四角形」を、輪郭線66Aに対応するパンチ穴の形状として特定する(S191)。
図20(J)に示すように、パンチ穴に対応しない線分66Jに基づいて、穴方向「その他」が特定された(S185)とする。CPU21は、4つの隅領域、及び、第1中央領域に含まれる画素を抽出する(S187、S189)。図20(J)で示されるように、穴方向が「その他」の線分66Jの場合、左上隅、及び、右下隅の隅領域に、第1色の画素が含まれ、右上隅、及び、右下隅の隅領域、及び、第1中央領域に、第1色の画素が含まれない。CPU21は、テーブル246(図21参照)を参照し、No.10の穴方向、及び、第1色の画素の有無の条件に合致すると判定する。CPU21は、「四角形」を、線分66Jに対応する形状として特定する(S191)。
図16に示すように、CPU21は、第1中央領域に第1色の画素が含まれているか判定する。CPU21は、第1中央領域に第1色の画素が含まれていると判定した場合、選択矩形領データを、テーブル244(図6参照)から削除する(S192)。理由は、第1中央領域に第1色の画素が含まれている場合、輪郭線の中央にノイズが含まれている可能性があるためである。ここで、輪郭線がパンチ穴に対応する場合、輪郭線の中央部分は背景画像に対応し、ノイズは含まれない。従って、第1中央領域に第1色の画素が含まれている場合、輪郭線に対応する画像はパンチ穴画像である可能性が低いため、テーブル244から削除される。これによって、パンチ穴画像に対応する輪郭線の形状と類似する、パンチ穴画像以外の画像に対応する選択矩形領域データを、テーブル244から削除できる。
例えば、図18(J)に示すように、第1中央領域に、第1色の画素が含まれると判定された場合、CPU21は、選択矩形領域データを、テーブル244から削除する。
図17に示すように、S192(図16参照)の処理の終了後、CPU21は、S192までの処理によってテーブル244から選択矩形領域データが削除されていない場合、選択矩形領域を拡張した候補領域を特定する(S193)。候補領域は、選択矩形領域の辺に沿った方向であって、S185(図16参照)の処理によって特定された穴方向と反対方向とのなす角度がもっとも小さい方向(以下、「伸長方向」という。)に、選択矩形領域を伸長することによって特定される。
なお、選択矩形領域の伸長は、S9(図5参照)の処理によって選択された選択部分画像の領域内で実行され、選択部分画像の領域外まで拡張されない。従って、選択矩形領域が、後述するテーブル247に基づいて特定される長さ分伸長されたときに、選択部分画像の領域から外部にはみ出てしまう場合、選択矩形領域は、部分画像の端部に接するまで伸長され、それ以上は伸長されない。
CPU21は、テーブル247(図22参照)に基づいて、候補領域の特定方法を決定し、決定した特定方法に基づいて選択矩形領域を拡張することによって、候補領域を特定する。CPUは、特定した候補領域を示す候補領域データを、選択矩形領域データに関連付けてテーブル244(図6参照)に格納する。
図22を参照し、テーブル247について説明する。テーブル247では、輪郭線に対応するパンチ穴の形状、及び、穴方向に、候補領域の特定方法が関連付けられている。特定方法は、候補領域及び伸長方向を含む。なお、図22において、候補領域として格納されている「(XX,YY)」は、候補領域の高さPhをXXとし、候補領域の幅方向の長さPwをYYとすることを示している。以下、選択矩形領域の高さ及び幅を、それぞれ、Ch、Cw(図18、図20参照)と表記する。
テーブル237の特定方法(候補領域及び伸長方向)は、形状及び穴方向に応じて次のように規定されている。図22、図23を参照して説明する。形状が「円形」、且つ、穴方向が「中央」の場合、選択矩形領域は、そのまま候補領域として特定される。このため、図22のNo.1で示されるように、候補領域(Ph,Pw)として、(Ch,Cw)が設定されている。従って、図23のNo.1で示されるように、候補領域73の高さPhは、輪郭線71に外接する選択矩形領域72の高さChに設定され、候補領域73の幅Pwは、選択矩形領域72の幅Cwに設定される。
形状が「円形」、且つ、穴方向が「右」の場合、選択矩形領域を、穴方向の反対側である左方向に伸長することによって、候補領域が特定される。候補領域の伸長方向の長さは、選択矩形領域の長辺である高さChに揃えられる。このため、図22のNo.2で示されるように、候補領域(Ph,Pw)として、(Ch,Ch)が設定され、伸長方向として「左方向」が設定されている。従って、図23のNo.2で示されるように、候補領域73の高さPh及び幅Pwは、何れも、選択矩形領域72の高さChに設定される。なお、図22及び図23のNo.3については、伸長方向として「右方向」が設定されることを除き、No.2と同様である。
No.2、3の場合において、選択矩形領域を幅方向に伸長する理由は、次の通りである。穴方向が左右何れかの方向を向いているので、円形の輪郭線のうち穴方向と反対側の部分が欠けている可能性がある。このため、穴方向と反対側、即ち、輪郭線のうち欠けている側に選択矩形領域を伸長することによって、元の円形の輪郭線に外接する矩形状の領域として候補領域が特定される。なお、パンチ穴の形状は真円である場合が多いので、元の円形の輪郭線に外接する候補領域の形状は正方形であることが好ましい。このため、候補領域の対向する2辺の長さを同一とするために、選択矩形領域の短辺の長さが長辺の長さに揃えられ、候補領域が特定される。
形状が「円形」、且つ、穴方向が「上」の場合、選択矩形領域を、穴方向の反対側である下方向に伸長することによって、候補領域が特定される。候補領域の伸長方向の長さは、選択矩形領域の長辺である幅Cwに揃えられる。このため、図22のNo.4で示されるように、候補領域(Ph,Pw)として、(Cw,Cw)が設定され、伸長方向として「下方向」が設定されている。従って、図23のNo.4で示されるように、候補領域73の高さPh及び幅Pwは、何れも、選択矩形領域72の幅Cwに設定される。なお、図22及び図23のNo.5については、伸長方向として「上方向」が設定されることを除き、No.4と同様である。又、選択矩形領域を上下方向に伸長する理由については、No.2、3の場合と同様である。
形状が「円形」、且つ、穴方向が「右上」の場合、穴方向の反対方向は「左下」となる。ここで、選択矩形領域の辺に沿った方向である左右両方向及び上下両方向のうち、「左」及び「下」と、反対方向である「左下」とのなす角度は、同一となり、且つ、何れも、他の方向の場合と比べて角度が最も小さくなる。この場合、選択矩形領域を左方向及び下方向に伸長することによって、候補領域が特定される。候補領域の伸長方向の長さは、選択矩形領域の長辺である幅Cwに「1.2」を乗算した値「Cw×1.2」に揃えられる。このため、図22のNo.6で示されるように、候補領域(Ph,Pw)として、(1.2Cw,1.2Cw)が設定され、伸長方向として「左」「下」が設定されている。従って、図23のNo.6で示されるように、候補領域73の高さPh及び幅Pwは、何れも、「Cw×1.2」に設定される。なお、図22及び図23のNo.7〜No.9については、伸長方向として「右下方向」「右上方向」「左上方向」が設定されることを除き、No.6と同様である。
No.6〜9の場合において、選択矩形領域を2方向に伸長する理由は、次の通りである。穴方向が「右上」「右下」「右上」「左上」方向を向いているので、円形の輪郭線のうち穴方向と反対側の部分が欠けている可能性がある。このため、穴方向と反対側、即ち、輪郭線のうち欠けている側に選択矩形領域を伸長することによって、元の円形の輪郭線に外接する矩形状の領域として候補領域を特定する。なお、パンチ穴の形状は真円である場合が多いので、元の円形の輪郭線に外接する候補領域の形状は正方形であることが好ましい。そこで、輪郭線が円周の半分の円弧を有し、且つ、円弧の2つの端部間を結ぶ直線(直径)が、垂直方向及び水平方向に対して45度の角度で傾いていることを想定し、候補領域のそれぞれの辺の長さは、選択矩形領域の長辺に1.2を乗算した長さに揃えられ、候補領域が特定される。
形状が「四角形」、且つ、穴方向が「中央」の場合、選択矩形領域がそのまま候補領域として特定される。このため、図22のNo.11で示されるように、候補領域(Ph,Pw)として、(Ch,Cw)が設定されている。従って、図23、No.11で示されるように、候補領域73の高さPhは、選択矩形領域72の高さChとなり、候補領域73の幅Pwは、選択矩形領域72の高さCwに設定される。
形状が「四角形」、且つ、穴方向が「右」の場合、選択矩形領域を、穴方向の反対側である左方向に伸長することによって、候補領域が特定される。選択矩形領域の幅Cwが、選択矩形領域の長辺に対応する高さCh又は幅Cwに揃えられる。このため、図22のNo.12で示されるように、候補領域(Ph,Pw)として、(Ch,(Ch、Cwのうち長い方))が設定され、伸長方向として「左方向」が設定されている。なお、選択矩形領域の幅Cwが短辺の場合、選択矩形領域は伸長され、選択矩形領域の幅Cwが長辺の場合、選択矩形領域は伸長されない。このため、図23、No.12で示されるように、候補領域73の幅Pwは、選択矩形領域72の長辺(高さCh又は幅Cw)に設定される。選択矩形領域72の幅Cwが長辺に対応する場合、選択矩形領域72がそのまま候補領域73として設定される。なお、図22及び図23のNo.13については、伸長方向として「右方向」が設定されることを除き、No.12と同様である。
No.11、12の場合において、選択矩形領域を幅方向に伸長する理由は、次の通りである。穴方向が左右何れかの方向を向いているので、選択矩形領域の幅方向の辺が短辺に対応する場合、四角形の輪郭線のうち穴方向と反対側の部分が欠けている可能性がある。このため、穴方向と反対側、即ち、輪郭線のうち欠けている側に選択矩形領域を伸長することによって、元の四角形の輪郭線に外接する矩形状の領域として候補領域が特定される。なお、パンチ穴の形状は正方形である場合が多いので、元の正方形の輪郭線に外接する候補領域の形状も正方形であることが好ましい。このため、候補領域の対向する2辺の長さを同一とするために、選択矩形領域の短辺の長さが長辺の長さに揃えられ、候補領域が特定される。一方、選択矩形領域の幅方向の辺が長辺に対応する場合、選択矩形領域を幅方向に伸長すると、長辺が更に伸長されることになる。この場合、伸長後の選択矩形領域の形状は、パンチ穴の規格上、適切でない可能性が高い。このため、四角形の輪郭線のうち穴方向と反対側の辺のみが消えているとして、選択矩形領域は伸長されない。
形状が「四角形」、且つ、穴方向が「上」の場合、選択矩形領域を、穴方向の反対側である下方向に伸長することによって、候補領域が特定される。選択矩形領域の高さChが、選択矩形領域の長辺に対応する高さCh又は幅Cwに揃えられる。このため、図22のNo.14で示されるように、候補領域(Ph,Pw)として、((Ch、Cwのうち長い方),Cw)が設定され、伸長方向として「下方向」が設定されている。なお、選択矩形領域の高さChが短辺の場合、選択矩形領域は伸長され、選択矩形領域の高さChが長辺の場合、選択矩形領域は伸長されない。このため、図23、No.14で示されるように、候補領域73の高さPhは、選択矩形領域72の長辺(高さCh又は幅Cw)となる。選択矩形領域72の高さChが長辺に対応する場合、選択矩形領域72がそのまま候補領域73として設定される。なお、図22及び図23のNo.15については、伸長方向として「下方向」が設定されることを除き、No.14と同様である。又、選択矩形領域を上下方向に伸長する理由については、No.12、13の場合と同様である。
形状が「四角形」、且つ、穴方向が「右上」の場合、穴方向の反対方向は「左下」となる。この場合、選択矩形領域を左方向及び下方向に伸長することによって、候補領域が特定される。選択矩形領域の高さChが長辺の場合、選択矩形領域を左方向に伸長することによって、候補領域が特定される。候補領域の幅Pwは、選択矩形領域の高さChに揃えられる。一方、選択矩形領域の幅Cwが長辺の場合、選択矩形領域を下方向に伸長することによって、候補領域が特定される。候補領域の高さPhは、選択矩形領域の幅Cwに揃えられる。このため、図22のNo.16で示されるように、候補領域(Ph,Pw)として、((Ch、Cwのうち長い方),(Ch、Cwのうち長い方))が設定され、伸長方向として「左方向」が設定されている。従って、図23、No.16に示すように、候補領域73の高さPh及び幅Pwは、何れも、選択矩形領域72の長辺に対応する高さCh又は幅Cwに設定される。なお、図22及び図23のNo.17〜No.19については、伸長方向として「右下方向」「右上方向」「左上方向」が設定されることを除き、No.16と同様である。
上記のように選択矩形領域を伸長する理由は、パンチ穴の形状は正方形である場合が多いので、元の正方形の輪郭線に外接する候補領域の形状も正方形であることが好ましいためである。このため、候補領域の対向する2辺の長さを同一とするために、選択矩形領域の短辺の長さが長辺の長さに揃えられ、候補領域が特定される。
図17に示すように、CPU21は、S193の処理の後、選択部分画像の4つの端部の何れかに候補領域が接するか判定する(S194)。具体的には、CPU21は、テーブル244に格納された選択部分画像データ及び候補領域データに基づき、それぞれの端部の位置が一致するかを判定することによって、選択部分画像の4つの端部の何れかに候補領域が接するかを判定する。
具体例を挙げて説明する。図24に示すように、部分画像74に輪郭線75A〜75Eが含まれており、それぞれについて候補領域76A〜76Eが特定された場合を例に挙げる。CPU21は、S194の処理を実行することによって、候補領域76A、76Bが、部分画像74の左端に接していると判定する。CPU21は、候補領域76Cが部分画像74の上端に接していると判定する。CPU21は、候補領域76Dが部分画像74の右端に接していると判定する。CPU21は、候補領域76Eが部分画像74の4つの端部の何れにも接していないと判定する。
図17に示すように、CPU21は、S194の処理による判定結果に基づき、S193の処理によって特定された候補領域の大きさを判定するための最小判定サイズ、及び、最大判定サイズを、テーブル248(図25参照)に基づいて特定する(S195)。図25を参照し、テーブル248について説明する。テーブル248では、端部位置及び穴方向に、最小判定サイズ及び最大判定サイズが関連付けられている。端部位置は、選択部分画像の4つの端部のうち、候補領域が接する端部の位置を示す。穴方向は、S185(図16参照)の処理によって特定された穴方向を示す。最小判定サイズは、候補領域の大きさの判定基準となる最小のサイズを示す。最大判定サイズは、候補領域の大きさの判定基準となる最大のサイズを示す。
テーブル248では、選択部分画像の端部に接しない候補領域に対応する最小判定サイズ、及び、最大判定サイズとして、設定情報の穴サイズ下限(図3参照)、及び、穴サイズ上限(図3参照)がそのまま設定されている(No.17)。一方、選択部分画像の端部に接する候補領域に対応する最小判定サイズ、及び、最大判定サイズは、設定情報の穴サイズ下限、及び、穴サイズ上限より小さくなるように設定されている(No.1〜16)。又、候補領域に含まれる輪郭線の穴方向に応じて、穴サイズ下限に基づく最小判定サイズの特定方法、及び、穴サイズ上限に基づく最大判定サイズの特定方法は異なっている。
具体例を挙げて説明する。例えば、図24に示すように、CPU21は、S194の処理によって、候補領域76Eが部分画像74に接していないと判定する。又、CPU21は、S185によって、輪郭線75Eの穴方向を「中央」と判定する。このため、CPU21は、図25に示すテーブル248のうち「接しない」に対応する判定最小サイズ「穴サイズ下限」(Hsz(min))、及び、判定最大サイズ「穴サイズ上限」(Hsz(max))を特定する(No.17)。
このように、候補領域76Eが部分画像74に接しない場合、最小判定サイズとして、設定情報の穴サイズ下限(図3参照)が特定され、最大判定サイズとして、設定情報の穴サイズ上限(図3参照)が特定される。この理由は、次の通りである。候補領域に含まれる輪郭線は全て選択部分の内側に収まっているので、輪郭線は部分的に欠けていない可能性が高い。このため、設定情報の穴サイズ上限及び穴サイズ下限(図3参照)が、そのまま、判定最小サイズ及び判定最大サイズとして用いられる。
例えば、図24に示すように、CPU21は、S194の処理によって、候補領域76Aが部分画像74の左端に接していると判定する。又、CPU21は、S185によって、輪郭線75Aの穴方向を「右」と判定する。このため、CPU21は、図25に示すテーブル248のうち「左端」「右」に対応する判定最小サイズ「穴サイズ下限/2」(Hsz(min)/2)、及び、判定最大サイズ「穴サイズ上限−1」(Hsz(max)−1)を特定する(No.1)。
このように、候補領域76Aに対応する穴方向「右」が、部分画像74のうち候補領域76Aが接する左端側と反対側(右)を向いている場合、最小判定サイズとして、設定情報の穴サイズ下限(図3参照)を2で除算した「穴サイズ下限/2」が特定され、最大判定サイズとして、設定情報の穴サイズ上限(図3参照)から1減算した「穴サイズ上限−1(画素分の長さ)」が特定される。なお、テーブル248のうちNo.2、3、5〜7、9〜11、13〜15についても同様、最小判定サイズとして「穴サイズ下限/2」が特定され、最大判定サイズとして「穴サイズ上限−1(画素分の長さ)」が特定される。候補領域76Dについても同様である。
テーブル248において、上記の場合に対応する最小判定サイズとして「穴サイズ下限/2」が設定される理由は、次の通りである。例えば、候補領域76Aに含まれる輪郭線75Aは、パンチ穴に対応する輪郭線全体のうち、穴方向「右」の一部であり、穴方向と反対側である左側部分が、部分画像74の端部で分断されている可能性がある。これに対し、穴サイズ下限の半分(Hsz(min)/2、図24参照)が最小判定サイズに設定されることによって、候補領域76Aの半分以上が部分画像74に含まれている場合に、この領域に含まれるパンチ穴画像を除去の対象とすることができる。
テーブル248において、上記の場合に対応する最大判定サイズとして、「穴サイズ上限−1」が設定される理由は、次の通りである。S109(図13参照)の処理によってSobelフィルタを用いたフィルタリングが実行される場合、輪郭線が1画素分拡大する可能性がある。但し、輪郭線が部分画像の端部に接している場合、Sobelフィルタを用いたフィルタリングが実行された場合でも、輪郭線は、部分画像の外側に拡大しない。このように、輪郭線が部分画像の端部に接している場合と接していない場合とで、フィルタリング後の輪郭線の大きさが1画素分相違する可能性がある。このため、候補領域が部分画像の端部に接している場合の最大判定サイズは、穴サイズ上限から1画素分の長さを減算した「穴サイズ上限−1」され、候補領域が部分画像の端部に接しない場合の最大判定サイズである「穴サイズ上限」と区別される。
又、例えば、図24に示すように、CPU21は、S194の処理によって、候補領域76Cが部分画像74の上端に接していると判定する。又、CPU21は、S185によって、輪郭線75Cの穴方向を「上」と判定する。このため、CPU21は、図25に示すテーブル248のうち「上端」「その他」に対応する判定最小サイズ「穴サイズ下限−1」(Hsz(min)−1)、及び、判定最大サイズ「穴サイズ上限−1」(Hsz(max)−1)を特定する(No.12)。
このように、候補領域76Cに対応する穴方向「上」が、部分画像74のうち候補領域76Cが接する上端側と同一側(上)を向いている場合、最小判定サイズとして、設定情報の穴サイズ下限(図3参照)から1減算した「穴サイズ下限−1(画素分の長さ)」が設定され、最大判定サイズとして、設定情報の穴サイズ上限(図3参照)から1減算した「穴サイズ上限−1(画素分の長さ)」が設定される。なお、候補領域76Cは、矩形領域が下側に拡張されて生成されている。このため、最小判定サイズとして、穴サイズ下限を2で除算する演算は不要となる。なお、テーブル248のうちNo.4、8、16についても同様、最小判定サイズとして「穴サイズ下限−1」が設定され、最大判定サイズとして「穴サイズ上限−1」が設定される。
テーブル248において、上記の場合に対応する最小判定サイズとして、「穴サイズ下限−1」が設定される理由は、次の通りである。例えば、候補領域76Cに含まれる輪郭線75Cは、パンチ穴に対応する輪郭線全体のうち、穴方向「上」の一部である可能性がある。しかし、候補領域76Cに対応する穴方向は、候補領域76Aの場合と異なり、部分画像74のうち候補領域76Cが接する上端と同じ「上」である。このため、輪郭線75Cは、部分画像74の端部で分断されていない可能性が高い。
一方、S109(図13参照)の処理によってSobelフィルタを用いたフィルタリングが実行される場合、輪郭線が1画素分拡大する可能性がある。但し、輪郭線が部分画像の端部に接している場合、Sobelフィルタを用いたフィルタリングが実行された場合でも、輪郭線は、部分画像の外側に拡大しない。このように、輪郭線が部分画像の端部に接している場合といない場合とで、フィルタリング後の輪郭線の大きさが1画素分相違する可能性がある。このため、CPU21は、候補領域が部分画像の端部に接している場合の最小判定サイズは、穴サイズ下限から1画素分の長さを減算した「穴サイズ下限−1」とされ、候補領域が部分画像の端部に接しない場合の最小判定サイズである「穴サイズ下限」と区別される。なお、最大判定サイズとして「穴サイズ上限−1」が設定される理由についても同様である。
又、例えば、図24に示すように、CPU21は、S194の処理によって、候補領域76Bが部分画像74の左端に接していると判定する。又、CPU21は、S185によって、輪郭線75Bの穴方向を「中央」と判定する。このため、CPU21は、図25に示すテーブル248のうち「左端」「その他」に対応する判定最小サイズ「穴サイズ下限−1」、及び、判定最大サイズ「穴サイズ上限−1」を特定する(No.4)。このように、候補領域76Cに対応する穴方向が「中央」の場合、最小判定サイズとして、穴サイズ下限から1減算した「穴サイズ下限−1(画素分の長さ)」が設定され、最大判定サイズとして「穴サイズ上限−1(画素分の長さ)」が設定される。なお、「穴サイズ下限−1」「穴サイズ上限−1」が設定される理由については、上記の候補領域76Cの場合と同様である。
図17に示すように、CPU21は、S195の処理によって最小判定サイズ及び最大判定サイズを特定した後、S192までの処理によってテーブル244から選択矩形領域データが削除されていない場合、候補領域の高さ及び幅と、最小判定サイズとを比較する。CPU21は、候補領域の高さ及び幅の少なくとも一方が、最小判定サイズよりも小さい場合、候補領域データ、及び、選択矩形領域データを、テーブル244(図6参照)から削除する(S197)。CPU21は、候補領域の高さ及び幅と、最大判定サイズとを比較する。CPU21は、候補領域の高さ及び幅の少なくとも一方が、最大判定サイズよりも大きい場合、候補領域データ、及び、選択矩形領域データを、テーブル244から削除する(S199)。
CPU21は、S199までの処理によってテーブル244から選択矩形領域データが削除されていない場合、中央の特定の領域(以下、「第2中央領域」という。)を特定する(S200)。第2中央領域の形状は、候補領域に含まれる輪郭線に基づきS191(図16参照)の処理によって特定された形状に応じて異なる。詳細は後述する。CPU21は、特定した第2中央領域を示す第2中央領域データを、対応する選択矩形領域データ、及び、候補領域データに関連付けて、テーブル244に格納する。
図26を参照し、第2中央領域の詳細について説明する。図26(A)に示すように、候補領域77Bに含まれる輪郭線77Aの形状が円形と特定された場合を例に挙げる。この場合、CPU21は、候補領域77Bの高さ方向及び幅方向のそれぞれを3等分し、9つの分割領域を特定する。CPU21は、9つの分割領域のうち、中心の分割領域771を抽出する。CPU21は、分割領域771の高さ方向及び幅方向のそれぞれを3等分し、9つの分割領域を特定する。CPU21は、9つの分割領域のうち、左上、右上、左下、及び、右下の分割領域を除く十字型の分割領域を、第2中央領域77Cとして特定する。又、CPU21は、円形の一部が欠けている輪郭線の場合も、完全な円形の輪郭線77Aと同じ方法で、第2中央領域77Cを特定する。なお、特定される第2中央領域77Cは、第1中央領域645(図18参照)よりも大きくなる。その理由は、第1中央領域は矩形領域に対して設定されるのに対し、第2中央領域は、矩形領域が伸長された候補領域に対して設定されるためである。
図26(B)に示すように、候補領域78Bに含まれる輪郭線78Aの形状が四角形と特定された場合を例に挙げる。なお、輪郭線78Aに基づいて特定される候補領域には、正方形、幅方向に長い長方形、及び、高さ方向に長い長方形の3つの場合がある。これらの場合、CPU21は、候補領域78Bの高さ方向及び幅方向のそれぞれを3等分し、9つの分割領域を特定する。CPU21は、9つの分割領域のうち中心の矩形状の分割領域を、第2中央領域78Cとして特定する。なお、CPU21は、四角形の一部が欠けている輪郭線の場合も、完全な四角形の輪郭線78Aと同じ方法で、第2中央領域78Cを特定する。又、特定される第2中央領域78Cは、第1中央領域695(図20参照)よりも大きくなる。なお、図26(A)の第2中央領域78Cは、図26(B)の第2中央領域78Cの四隅を矩形状に切り取った形状を有している。
例えば、図27に示すように、図24の場合と同じ輪郭線75A〜75Eが部分画像74に含まれ、それぞれについて候補領域76A〜76Eが特定された場合を例に挙げる。この場合、それぞれの候補領域内に、第2中央領域771C、772C、773C、775C、784Cが特定される。
なお、候補領域76Aについては、対応する輪郭線75Aは円形であるが、部分画像74の端部に候補領域76Aが接しており、候補領域76Aは、正方形でなく長方形となっている。この場合、図26(A)に示す第2中央領域77Cの幅方向の長さが縮小された第2中央領域771Cが特定される(S200)。なお、候補領域76Aの幅に対する第2中央領域771Cの幅の比率は、候補領域が正方形における1/3と異なり、1/4となる。パンチ穴の影の影響によって、輪郭線は、影が無い場合と比較して、太くなっている場合がある。また、部分画像の端部に輪郭線が接することに応じて輪郭線の一部が欠けた場合、第2中央領域771Cのサイズは、欠けた輪郭線を含む長方形の候補領域76Aに基づいて決定される。このため、第2中央領域771Cと輪郭線との距離は、輪郭線が欠けていない場合と比較して近くなる可能性がある。CPU21は、影に対応する画像が第2中央領域に重複することを回避するため、第2中央領域を小さくしている。候補領域76Dと第2中央領域784Cとの関係についても同一である。
図17に示すように、CPU21は、特定した第2中央領域に、第1色の画素が含まれているか判定する。CPU21は、第1色の画素が含まれていると判定した場合、候補領域データ、及び、選択矩形領域データを、テーブル244から削除する(S201)。理由は、第2中央領域に第1画素の画素が含まれている場合、輪郭線の形状が周回状でないか、又は、中央にノイズが含まれている可能性があるためである。この場合、輪郭線に対応する画像はパンチ穴画像である可能性が低いため、テーブル244から削除される。
例えば、図20(J)に示すように、第1中央領域に、第1色の画素が含まれず、S192の処理によって選択矩形領域データがテーブル244から削除されない場合がある。この場合でも、第2中央領域に第1色の画素が含まれると判断されることによって、S201の処理によって、候補領域データ及び選択矩形領域データがテーブル244から削除される。
なお、S192(図16参照)の処理によって、第1中央領域に第1色の画素が含まれている場合に選択矩形領域データを削除する処理が実行されている。これに対し、第2中央領域は第1領域と比べて面積が大きい。このため、パンチ穴画像に対応する輪郭線の形状と類似する、パンチ穴画像以外の画像に対応する選択矩形領域データを、テーブル244から高い精度で削除できる。
CPU21は、S201までの処理によってテーブル244から選択矩形領域データが削除されていない場合、除外処理(図28参照)を実行する(S203)。図28を参照し、除外処理について説明する。CPU21は、CPU21は、候補領域のうち処理領域に含まれる部分(以下、「領域内部分」という。)を特定する。CPU21は、拡張領域に含まれ、且つ、処理領域に含まれない部分(以下、「領域外部分」という。)を特定する。CPU21は、候補領域のうち領域外部分の幅方向の長さを特定する(S441)。以下、候補領域のうち領域外部分の幅方向の長さを、「幅はみ出し量」という。
CPU21は、候補領域全体の幅方向の長さに対する、幅はみ出し量の割合が、50%以上か判定する(S443)。CPU21は、幅はみ出し量の割合が50%以上と判定した場合(S443:YES)、候補領域データ、及び、選択矩形領域データを、テーブル244から削除する(S451)。CPU21は、除外処理を終了し、処理を抽出処理(図17参照)に戻す。一方、CPU21は、幅はみ出し量の割合が50%よりも小さいと判定した場合(S443:NO)、処理をS445に進める。
具体例を挙げて説明する。図29に示すように、第2取得処理(S63、図11参照)によって、左処理領域43Aが幅方向に拡張され、左拡張領域43Gが設定された場合を例に挙げる。元画像4には、輪郭線に基づいて特定された候補領域81A〜81Fが含まれている。これらのうち、左拡張領域43Gに対応する部分画像には、候補領域81A〜81Eが含まれている。
候補領域81Aは、左処理領域43Aの外側に配置されている。この場合、全ての部分が領域外部分として特定されるので、幅はみ出し量の割合として100%が算出される。候補領域81Dは、左処理領域43Aの内側に配置されている。この場合、全ての領域が領域内部分として特定されるので、幅はみ出し量の割合として0%が算出される。候補領域81B、81C、81Eは、左側の一部分が左処理領域43Aの内側に配置され、残りの部分が左処理領域43Aの外側に配置されている。この場合、候補領域全体の幅方向の長さに対する、左処理領域43Aよりも左側に配置された部分の幅方向の長さの割合が、幅はみ出し量の割合として算出される。ここで、候補領域81Bの幅はみ出し量の割合は、50%よりも大きく、候補領域81C、81Eの幅はみ出し量の割合は、50%よりも小さいとする。
以上の場合、CPU21は、S443の処理によって、候補領域81A、81Bに対応する幅はみ出し量の割合が、50%以上であると判定する(S443:YES)。CPU21は、候補領域81A、81Bに対応する候補領域データ、及び、選択矩形領域データを、テーブル244から削除する(S451)。一方、CPU21は、候補領域81C、81D、81Eに対応する幅はみ出し量の割合が、50%よりも小さくなると判定する(S443:NO)。この場合、CPU21は、候補領域データ及び選択矩形領域データを、テーブル244から削除しない。
又、図30に示すように、第2取得処理(S63、図11参照)によって、上処理領域43Eが幅方向及び高さ方向に拡張され、上拡張領域43Iが設定された場合を例に挙げる。上拡張領域43Iに対応する部分画像には、候補領域81E、81Fが含まれている。候補領域81Eは、右上の一部分が上処理領域43Eの内側に配置され、残りの部分が上処理領域43Eの外側に配置されている。候補領域81Fは、左上の一部分が上処理領域43Eの内側に配置され、残りの部分が上処理領域43Eの外側に配置されている。この場合、候補領域全体の幅方向の長さに対する、上処理領域43Eよりも左側又は右側に配置された部分の幅方向の長さの割合が、幅はみ出し量の割合として算出される。なお、候補領域81Eの幅方向のはみ出し量の割合は、50%よりも大きく、候補領域81Fの幅方向のはみ出し量の割合は、50%よりも小さいとする。
以上の場合、CPU21は、S443の処理によって、候補領域81Eに対応する幅はみ出し量の割合が、50%以上であると判定する(S443:YES)。CPU21は、候補領域81Eに対応する候補領域データ、及び、選択矩形領域データを、テーブル244から削除する(S451)。一方、CPU21は、候補領域81Fに対応する幅はみ出し量の割合が、50%よりも小さくなると判定する。この場合、CPU21は、候補領域データ及び選択矩形領域データを、テーブル244から削除しない。
図28に示すように、CPU21は、次に、選択部分画像が、上拡張領域又は下拡張領域に対応する部分画像の場合(例えば、図30参照)、S445、S447の処理を実行する。なお、選択部分画像が、左拡張領域又は右拡張領域に対応する部分画像の場合(例えば、図29参照)、それぞれの上側又は下側に候補領域がはみ出ないため、除外処理を終了し、処理を抽出処理(図17参照)に戻す。
CPU21は、候補領域のうち領域外部分の高さ方向の長さを特定する(S445)。以下、候補領域のうち領域外部分の高さ方向の長さを、「高さはみ出し量」という。CPU21は、候補領域全体の高さ方向の長さに対する、高さはみ出し量の割合が、50%以上か判定する(S447)。CPU21は、高さはみ出し量の割合が50%以上と判定した場合(S447:YES)、候補領域データ、及び、選択矩形領域データを、テーブル244から削除する(S451)。CPU21は、除外処理を終了し、処理を抽出処理(図17参照)に戻す。一方、CPU21は、高さはみ出し量の割合が50%よりも小さいと判定した場合(S447:NO)、除外処理を終了し、処理を抽出処理(図17参照)に戻す。
具体例を挙げて説明する。図30に示すように、第2取得処理(S63、図11参照)によって、上処理領域43Eが幅方向及び高さ方向に拡張され、上拡張領域43Iが設定された場合を例に挙げる。上拡張領域43Iに対応する部分画像には、候補領域81E、81Fが含まれている。なお、S443(図28参照)の処理によって幅はみ出し量の割合が50%よりも小さくなると判定された候補領域81Fについて、候補領域81Fの高さ方向のはみ出し量の割合は、50%以上であるとする。この場合、CPU21は、S447の処理によって、候補領域81Fに対応する高さはみ出し量の割合が、50%以上であると判定する(S447:YES)。CPU21は、候補領域81Fに対応する候補領域データ、及び、選択矩形領域データを、テーブル244から削除する(S451)。
つまり、左拡張領域43Gに対応する部分画像に基づいて幅方向の判定(S443)が実行された場合、候補領域81C、81D、81Eに対応する候補領域データ及び選択矩形領域データがテーブル244(図29参照)に残る。なお、左拡張領域43Gに対応する部分画像に基づいて高さ方向の判定(S447)は実行されない。一方、上拡張領域43Iに対応する部分画像に基づいて幅方向の判定(S443)が実行された場合、候補領域81Fに対応する候補領域データ及び選択矩形領域データがテーブル244に残るが、高さ方向の判定(S447)が実行された場合、テーブル244に候補領域81Fは残らず、全て削除される。
図17に示すように、CPU21は、除外処理(S203)の終了後、S83(図13参照)の処理によって、選択部分画像の解像度が100dpiに縮小されている場合、候補領域内の解像度が属性情報の解像度(図2参照)となるように、選択部分画像のうち候補領域内のデータを変換する(S205)。CPU21は、S175(図16参照)の処理によって、テーブル244(図6参照)に格納された少なくとも1つの矩形領域データの全てを選択したか判定する(S207)。CPU21は、選択されていない矩形情報データがテーブル244に残っていると判定した場合(S207:NO)、処理をS175(図16参照)に戻す。CPU21は、選択されていない矩形情報データのうち1つをテーブル244から選択し(S175)、これを選択矩形領域データとして、S177(図16参照)〜S205の処理を繰り返す。CPU21は、テーブル244に格納された少なくとも1つの矩形領域データの全てを、S175の処理によって選択したと判定した場合(S207:YES)、抽出処理を終了し、処理をメイン処理(図5参照)に戻す。
図5に示すように、CPU21は、テーブル244(図4参照)に格納された第1画像データに対して抽出処理(S13)を実行した後、テーブル244(図6参照)に格納された第2画像データに対して抽出処理を実行する(S15)。第2画像データに対して実行される抽出処理は、第1データに対して実行される抽出処理と同一であるので、説明を省略する。S13、S15の処理によって抽出処理が実行されることによって、第1画像に対応する矩形領域データ及び候補領域データと、第2画像に対応する矩形領域データ及び候補領域データが、テーブル244格納された状態になる。CPU21は、第1画像に対応する矩形領域データ及び候補領域データに基づいて、穴判定処理(図31参照)を実行する(S17)。
<工程B2:穴判定処理>
図31を参照し、穴判定処理について説明する。CPU21は、テーブル244(図6参照)に記憶された候補領域データのうち1つを選択する(S211)。以下、選択された候補領域データを、「選択候補領域データ」といい、選択候補領域データに対応する候補領域を、「選択候補領域」という。選択候補領域データに対応する矩形領域データを、「選択矩形領域データ」という。選択矩形領域データに対応する矩形領域を、「選択矩形領域」という。
CPU21は、テーブル244のうち、選択候補領域データに関連付けられた第2中央領域データを抽出する。CPU21は、第2中央領域データによって示される第2中央領域を特定する(S213)。なお、テーブル244の第2中央領域データは、S200(図17参照)の処理によって、形状(円形又は四角形)に応じた領域(図26参照)を示すデータとして格納されている。具体的には、図26(A)に示すように、形状が円形の場合の第2中央領域77Cは、十字状の領域として特定されている。この十字状の領域は、中心の分割領域771を9つに分割した分割領域のうち、左上、右上、左下、及び、右下の分割領域を除く領域として定義される。中心の分割領域771は、候補領域77Bの高さ方向及び幅方向のそれぞれが3等分された9つの分割領域のうち、中心に位置する分割領域である。一方、図26(B)に示すように、形状が四角形の第2中央領域78Cは、候補領域78Bの高さ方向及び幅方向のそれぞれが3等分された9つの分割領域のうち中心の領域であって、矩形状の領域として特定されている。
CPU21は、テーブル244に基づいて第2中央領域を特定した後、第1判定処理(図32参照)を実行する(S219)。図32を参照し、第1判定処理について説明する。CPU21は、選択部分画像のうち、S213の処理によって特定された第2中央領域内の複数の画素のそれぞれの輝度を、上記(1)式に基づいて算出する。CPU21は、算出した複数の輝度の中央値を特定する(S241)。CPU21は、算出した中央値から「3」減算した下限値と、算出した中央値に「3」加算した上限値とを算出する。CPU21は、第2中央領域内の複数の画素のうち、下限値と上限値との間の何れかの輝度を示す画素の数を計数する(S243)。CPU21は、第2中央領域内の複数の画素の数に対する、計数した画素の数の割合を算出する。CPU21は、算出した割合が90%以上であるか判定する(S245)。
CPU21は、算出した割合が90%以上と判定した場合(S245:YES)、RAM23に記憶されたフラグに、ばらつきが小さいことを示す「1」を設定する(S247)。CPU21は第1判定処理を終了させ、処理を穴判定処理(図31参照)に戻す。CPU21は、算出した割合が90%よりも小さいと判定した場合(S245:NO)、RAM23に記憶されたフラグに、ばらつきが大きいことを示す「0」を設定する(S249)。CPU21は第1判定処理を終了させ、処理を穴判定処理(図31参照)に戻す。
図31に示すように、CPU21は、第1判定処理(S219)の終了後、RAM23に記憶されたフラグに設定された値に基づいて、選択部分画像における第2中央領域内の画素の輝度のばらつきが小さいかを判定する(S221)。CPU21は、フラグに「1」が設定されている場合、輝度のばらつきが小さいと判定する(S221:YES)。この場合、CPU21は処理をS223に進める。一方、CPU21は、フラグに「0」が設定されている場合、輝度のばらつきが大きいと判定する(S221:NO)。この場合、CPU21は、選択候補領域データ及び選択矩形領域データを、テーブル244(図6参照)から削除する(S233)。CPU21は処理をS235に進める。
上記において、輝度のばらつきが大きい場合に選択候補領域データ及び矩形領域データをテーブル244から削除する理由は、次の通りである。第2中央領域内の画像は、原稿に形成されたパンチ穴を介して、画像読取装置1のイメージスキャナが読み取った背景部材に対応する。ここで、背景部材の輝度は均一であり、ばらつきは小さい。このため、第2中央領域内の画素の輝度のばらつきが大きい場合、背景部材に対応せず、パンチ穴画像でない可能性が高い。この場合、候補領域は、パンチ穴画像と異なる別の画像に基づいて特定された領域である可能性が高いので、対応する選択候補領域データ及び選択矩形領域データが、テーブル244から削除される。
CPU21は、第2判定処理(図33参照)を実行する(S223)。図33を参照し、第2判定処理について説明する。CPU21は、選択部分画像のうち第2中央領域内の複数の画素のそれぞれの彩度を、上記(4)式に基づいて算出する(S261)。CPU21は、算出した複数の彩度の最大値を特定する。CPU21は、特定した彩度の最大値が16以上か判定する(S263)。CPU21は、彩度の最大値が「16」よりも小さいと判定した場合、(S263:NO)、RAM23に記憶されたフラグに、無彩色に近い色であることを示す「1」を設定する(S265)。CPU21は第2判定処理を終了させ、処理を穴判定処理(図31参照)に戻す。CPU21は、彩度の最大値が「16」以上と判定した場合(S263:YES)、RAM23に記憶されたフラグに、有彩色に近い色であることを示す「0」を設定する(S267)。CPU21は第2判定処理を終了させ、処理を穴判定処理(図31参照)に戻す。
図31に示すように、CPU21は、第2判定処理(S223)の終了後、RAM23に記憶されたフラグに設定された値に基づいて、選択部分画像における第2中央領域内の画素の色が、無彩色に近い色であるかを判定する(S225)。CPU21は、フラグに「1」が設定されている場合、無彩色に近い色であると判定する(S225:YES)。この場合、CPU21は処理をS227に進める。一方、CPU21は、フラグに「0」が設定されている場合、有彩色に近い色であると判定する(S225:NO)。この場合、CPU21は、選択候補領域データ及び選択矩形領域データを、テーブル244(図6参照)から削除する(S233)。CPU21は処理をS235に進める。
上記において、有彩色に近い場合に選択候補領域データ及び矩形領域データをテーブル244から削除する理由は、次の通りである。背景部材の色は、グレー色又は白色であり、何れも無彩色である。このため、第2中央領域内の画素の色が有彩色に近い場合、背景部材に対応せず、パンチ穴画像でない可能性が高い。この場合、候補領域は、パンチ穴画像と異なる別の画像に基づいて特定された領域である可能性が高いので、対応する選択候補領域データ及び選択矩形領域データが、テーブル244から削除される。
CPU21は、第3判定処理(図34参照)を実行する(S227)。図34を参照し、第3判定処理について説明する。CPU21は、S241(図32参照)の処理によって、第2中央領域内の複数の画素のそれぞれについて算出された輝度の中央値を取得する(S281)。CPU21は、輝度の中央値が「112〜144」の範囲内であるか判定する(S283)。CPU21は、輝度の中央値が「112〜144」の範囲内であると判定した場合、(S283:YES)、RAM23に記憶されたフラグに、輝度の中央値が所定範囲内であることを示す「1」を設定する(S285)。CPU21は第3判定処理を終了させ、処理を穴判定処理(図31参照)に戻す。CPU21は、輝度の中央値が112〜144の範囲外であると判定した場合(S283:NO)、RAM23に記憶されたフラグに、輝度の中央値が所定範囲外であることを示す「0」を設定する(S287)。CPU21は第3判定処理を終了させ、処理を穴判定処理(図31参照)に戻す。
図31に示すように、CPU21は、第3判定処理(S223)の終了後、RAM23に記憶されたフラグに設定された値に基づいて、選択部分画像における第2中央領域内の画素の輝度の中央値が、所定範囲内かを判定する(S229)。CPU21は、フラグに「1」が設定されている場合、輝度の中央値が所定範囲内であると判定する(S229:YES)。この場合、CPU21は処理をS235に進める。一方、CPU21は、フラグに「0」が設定されている場合、輝度の中央値が所定範囲外であると判定する(S229:NO)。この場合、CPU21は、選択候補領域データ及び選択矩形領域データを、テーブル244(図6参照)から削除する(S233)。CPU21は処理をS235に進める。
上記において、輝度の中央値が「112〜144」の範囲外の場合に選択候補領域データ及び矩形領域データをテーブル244から削除する理由は、次の通りである。背景部材は、輝度が「112〜144」の間の値となるように色が調整されている。このため、第2中央領域内の複数の画素の輝度の中央値が「112〜144」の範囲外の場合、背景部材の色から離れていることになるので、背景部材に対応せず、パンチ穴画像でない可能性が高い。この場合、候補領域は、パンチ穴画像と異なる別の画像に基づいて特定された領域である可能性が高いので、対応する選択候補領域データ及び選択矩形領域データが、テーブル244から削除される。
図31に示すように、CPU21は、S211の処理によって、テーブル244に格納された候補領域データを全て選択したか判定する(S235)。CPU21は、S211の処理によって選択されていない候補領域データがテーブル244に残っていると判定した場合(S235:NO)、処理をS211に戻す。CPU21は、テーブル244に格納された候補領域データのうち、選択されていない候補領域データの1つを選択し(S211)、これを選択候補領域データとして、S213〜S233の処理を繰り返す。CPU21は、テーブル244に格納された候補領域データを全て選択したと判定した場合(S235:YES)、穴判定処理を終了させ、処をメイン処理(図5参照)に戻す。
図5に示すように、CPU21は、S17の処理によって、第1画像を対象とした穴判定処理を実行した後、第2画像を対象として穴判定処理を実行する(S21)。第2画像を対象とした穴判定処理は、第1画像を対象とした穴判定処理と同一であるので、説明を省略する。CPU21は、S21の処理によって、第2画像を対象とした穴判定処理を実行した後、S9の処理によって、テーブル244に格納された部分画像を全て選択したか判定する(S23)。CPU21は、テーブル244に格納された部分画像のうち、選択されていない部分画像が残っていると判定した場合(S23:NO)、処理をS9に戻す。CPU21は、選択されていない部分画像の1つを、テーブル244から選択し(S9)、これを選択部分画像データとして、S11〜S21の処理を繰り返す。CPU21は、テーブル244に格納された部分画像を、S9の処理によって全て選択したと判定した場合(S23:YES)、処理をS25に進める。CPU21は、決定処理(図35参照)を実行する(S25)。
<工程B3:決定処理>
図35を参照し、決定処理について説明する。CPU21は、テーブル244(図6参照)に格納された部分画像データのうち何れかを、選択部分画像データとして選択する(S310)。CPU21は、選択部分画像データに関連付けられている第1画像データ及び第2画像データを抽出し、抽出した第1画像データ及び第2画像データのそれぞれに関連付けられた矩形領域データを更に抽出する。CPU21は、抽出した矩形領域データに基づいて、矩形領域の位置を特定する。
CPU21は、第1画像から特定された矩形領域(以下、「第1矩形領域」という。)と、第2画像から特定された矩形領域(以下、「第2矩形領域」という。)との互いの位置の相違量を算出する。具体的には、CPU21は、第1矩形領域及び第2矩形領域のそれぞれの左端の位置の相違量、右端の位置の相違量、上端の位置の相違量、及び、下端の位置の相違量の平均値を、位置の相違量として算出する。CPU21は、算出した位置の相違量が所定閾値よりも小さい場合、第1矩形領域及び第2矩形領域は近傍に配置されていると判定する。CPU21は、近傍に配置されている第1矩形領域及び第2矩形領域の組み合わせを抽出する(S311)。
CPU21は、S311の処理によって、近傍に配置されると判定した第1矩形領域及び第2矩形領域の組み合わせを、1つ以上抽出したか判定する(S313)。CPU21は、近傍に配置されると判定した第1矩形領域及び第2矩形領域の組み合わせを抽出しない場合(S313:NO)、処理をS325に進める。
CPU21は、近傍に配置されると判定した第1矩形領域及び第2矩形領域の組み合わせを1つ以上抽出した場合(S313:YES)、抽出した1以上の組み合わせのうち1つを選択する(S315)。CPU21は、選択した組合せに対応する第1矩形領域及び第2矩形領域のサイズの相違量を算出する(S317)。具体的には、CPU21は、第1矩形領域及び第2矩形領域のそれぞれの幅の相違量、及び、高さの相違量の平均値を、サイズの相違量として、組合せ毎に算出する。
CPU21は、算出したサイズの相違量を所定閾値と比較する(S319)。CPU21は、算出したサイズの相違量が所定閾値よりも大きい場合(S319:NO)、処理をS323に進める。
一方、CPU21は、算出したサイズの相違量が所定閾値以下と判定した場合(S319:YES)、第2矩形領域に対応する矩形領域データ及び候補領域データを削除する(S321)。第2矩形領域に対応する矩形領域データ及び候補領域データを削除する理由は、互いに近傍に配置され、且つ、サイズが相対的に小さい矩形領域に含まれる画像は、パンチ穴画像である可能性が高いためである。ここで、両方の矩形領域データに基づいてパンチ穴画像を除去する処理が実行された場合、類似する領域に対してパンチ穴を除去する処理が重複して実行されることになる。このため、第2矩形領域に対応する矩形領域データ及び候補領域データを削除し、処理が重複することを回避している。CPU21は処理をS323に進める。
CPU21は、近傍に配置されると判定した第1矩形領域及び第2矩形領域の組み合わせの全てを、S315の処理によって選択したか判定する(S323)。CPU21は、選択していない組み合わせが残っていると判定した場合(S323:YES)、処理をS315に戻す。CPU21は、近傍に配置されると判定した組合せのうち選択されていない組み合わせの1つを選択し(S315)、S317〜S321の処理を繰り返す。CPU21は、近傍に配置されると判定した第1矩形領域及び第2矩形領域の組み合わせの全てを選択したと判定した場合(S323:NO)、処理をS325に進める。
CPU21は、S310の処理によって、テーブル244に格納された部分画像データの全てを選択したか判定する(S325)。CPU21は、選択されていない部分画像データがテーブル244に残っていると判定した場合(S325:YES)、処理をS310に戻す。CPU21は、選択されていない部分画像データのうち1つを選択し(S310)、これを選択部分データとして、画像S311〜S323の処理を繰り返す。CPU21は、テーブル244に格納された部分画像データの全てを選択したと判定した場合(S325:NO)、決定処理を終了させ、処理をメイン処理(図5参照)に戻す。
図5に示すように、CPU21は、決定処理(S25)の終了後、テーブル244に格納された矩形領域データのうち1つを、選択矩形データとして選択する(S27)。CPU21は、選択矩形領域データに基づいて色判定処理(図36参照)を実行する(S29)。
<工程B4:色判定処理>
図36を参照し、色判定処理について説明する。CPU21は、第1外周領域を特定する。第1外周領域は、選択矩形領域の外周を囲む領域である。第1外周領域の内周と、第1外周領域の外周との間の幅は、第1幅である。図38(A)に示すように、輪郭線83に外接する矩形領域83Aが選択された場合を例に挙げる。この場合、図38(B)に示すように、第1外周領域84は、矩形領域83Aの外周を囲む領域であって、内周と外周との間の幅が第1幅W1の領域に対応する。第1幅W1の具体的な値は、例えば1mmである。
図36に示すように、CPU21は、元画像のうち、特定した第1外周領域内の複数の画素のそれぞれのR値、G値、B値の3次元ヒストグラムを算出する(S331)。なお、3次元ヒストグラムを算出するときのR値、G値、B値のそれぞれのビンの数は、「256」(階調)よりも小さく設定される。例えば、G値、B値のそれぞれのビンの数は、「16」に設定される。この理由は、ビンの数が多くなる程、3次元ヒストグラムを算出するまでに要する時間が長くなるためである。3次元ヒストグラムでは、R値、G値、B値の組み合わせ毎に度数が算出される。CPU21は、算出した3次元ヒストグラムに基づき、最も度数の大きいR値、G値、B値の組み合わせを特定する(S332)。CPU21は、特定したR値、G値、B値の組み合わせの頻度を、第1最頻値として取得する(S333)。CPU21は、取得した第1最頻値が所定の第1閾値以上か判定する(S335)。CPU21は、第1最頻値が第1閾値以上と判定した場合(S335:YES)、S333の処理によって特定した、最も度数の大きいR値、G値、B値の組み合わせによって特定される色を、256階調となるように平均化し、候補色として設定する(S337)。CPU21は処理をS345に進める。
上記のように候補色を決定する理由は、次の通りである。パンチ穴画像に対応する矩形領域の外側の第1外周領域内の色のばらつきの程度が相対的に小さいとき、第1外周領域内の色は、原稿の地色と類似する場合がある。この場合、第1外周領域内の色は、パンチ穴画像を除去するときに画素を塗り潰す塗り潰し色として適切である可能性が高い。このため、CPU21は、第1最頻値が第1閾値以上の場合、第1外周領域内の画素に基づいて算出した色を、塗り潰し色の候補となる候補色として設定する。
一方、CPU21は、取得した第1最頻値が第1閾値よりも小さいと判定した場合(S335:NO)、第2外周領域を特定する。第2外周領域は、選択矩形領域の外周を囲む領域である。第2外周領域の内周と、第2外周領域の外周との間の幅は、第1幅よりも大きい第2幅である。第2幅は、第2外周領域の面積が第1外周領域の面積の約2倍となるように設定される。図38(C)に示すように、第2外周領域85は、矩形領域83Aの外周を囲む領域であって、内周と外周との間の幅が第2幅W2の領域に対応する。第2幅W2は、第1外周領域84の第1幅W1よりも大きい。第2幅W2の具体的な値は、例えば1.4mmである。
図36に示すように、CPU21は、元画像のうち、特定した第2外周領域内の複数の画素のそれぞれのR値、G値、B値の3次元ヒストグラムを算出する(S339)。CPU21は、算出した3次元ヒストグラムに基づき、最も度数の大きいR値、G値、B値の組み合わせを特定する(S340)。CPU21は、特定したR値、G値、B値の頻度を、第2最頻値として取得する(S341)。CPU21は、特定したR値、G値、B値の組み合わせによって特定される色を、256階調となるように平均化し、候補色として設定する(S343)。CPU21は処理をS345に進める。
上記のように候補色を決定する理由は、次の通りである。図39に示すように、感圧紙にパンチ穴が形成された場合を例に挙げる。このような場合、パンチ穴の周辺に圧力が加わることに応じて、パンチ穴の周辺に色が付着する場合がある。このため、図39(A)に示すように、パンチ穴画像88に対応する矩形領域83Aの外側の第1外周領域84は、原稿の地色と相違する。この場合、第1外周領域内の色は塗り潰し色として適切でない可能性が高い。このため、CPU21は、第1最頻値が第1閾値よりも小さい場合、図39(B)に示すように、第1外周領域84よりも外側の領域を含む第2外周領域85内の画素に基づいて算出した色を、塗り潰し色の候補となる候補色として設定する。
図36に示すように、CPU21は、第3外周領域を特定する。第3外周領域は、選択矩形領域の外周を囲む領域である。第3外周領域の内周と、第3外周領域の外周との間の幅は、1画素分の長さを有する(S345)。図38(D)に示すように、第3外周領域861は、矩形領域83Aの外周を囲む領域であって、内周と外周との間の幅が第3幅W3の領域に対応する。第3幅W3は1画素分の長さを有する。具体的な値は、例えば約0.08mmである。
図36に示すように、CPU21は、元画像のうち、特定した第3外周領域内の複数の画素のR値、G値、B値のそれぞれの平均値(以下、「第1平均値」という。)を算出する(S346)。CPU21は、S337又はS343の処理によって算出した候補色と、第1平均値との相違量(以下、「第1相違量」という。)を、以下の式(5)によって算出する(S347)。候補色のR値、G値、B値を、それぞれR(0)、G(0)、B(0)と表記し、第n平均値(nは、1以上の自然数)のR値、G値、B値を、それぞれR(n)、G(n)、B(n)と表記する。
第n相違量 =
|R(0)−R(n)|+|G(0)−G(n)|+|B(0)−B(n)| (5)
CPU21は、第4外周領域を特定する。第4外周領域は、第3外周領域の外周を囲む領域である。第4外周領域の内周と、第4外周領域の外周との間の幅は、1画素分の長さを有する(S349)。図38(E)に示すように、第4外周領域862は、第3外周領域861の外周を囲む領域であって、内周と外周との間の幅が第3幅W3の領域に対応する。
図36に示すように、CPU21は、元画像のうち、特定した第4外周領域内の複数の画素のR値、G値、B値の平均値(以下、「第2平均値」という。)を算出する(S350)。CPU21は、S337又はS343の処理によって算出した候補色と、第2平均値との相違量(以下、「第2相違量」という。)を、上記の式(5)によって算出する(S351)。
図37に示すように、CPU21は、S347(図36参照)の処理によって算出した第1相違量と、S351(図36参照)の処理によって算出した第2相違量とを比較する(S353)。CPU21は、第1相違量が第2相違量以下と判定した場合(S353:NO)、S337又はS343の処理によって算出した候補色を示すR値、G値、B値を、塗り潰し色として、選択矩形領域データに関連付けてテーブル244(図6参照)に格納する(S355)。
上記のように候補色を決定する理由は、次の通りである。図40に示すように、感圧紙にパンチ穴が形成された場合を例に挙げる。このような場合、パンチ穴に近い程、地色と異なる色の付着の程度(例えば、単位面積あたりにおける、異なる色の割合)は強く、パンチ穴から遠ざかるに従って、地色と異なる色の付着の程度は弱くなる。このため、CPU21は、図40(A)(B)に示すように、パンチ穴画像88に対応する矩形領域83Aの外側の第3外周領域861と、第3外周領域861の外側の第4外周領域862とのそれぞれで平均値を算出し、候補色との相違量を算出する。ここで図40に示すように、パンチ穴に近い程、地色と異なる色の付着の程度が強い場合、内側の第3外周領域861に対応する第1相違量は、外側の第4外周領域862に対応する第2相違量よりも大きくなる。このような場合、CPU21は、後述する処理(S361〜S381)によって、S337、S343(図36参照)の処理によって設定した候補色を変更し、塗り潰し色として設定する。一方、図40の場合と異なり、パンチ穴の周辺の色が地色と類似する場合、第3外周領域861に対応する第1相違量は、上記のように、外側の第4外周領域862に対応する第2相違量以下になる(S353:NO)。この場合、CPU21は、S337、S343の処理によって特定した候補色を、塗り潰し色として設定する(S355)。
図37に示すように、CPU21は、S355の処理の後、塗り潰し色を算出したときの領域に含まれる画素の色を、256階調となるように平均化する。CPU21は、以下の式(6)〜(8)によって、R値、G値、B値のそれぞれに対応する平均Rm、Gm、Bmを算出する。領域内に含まれる画素の数を、Tと表記する。i(i=1〜T)番目の画素のR値、G値、B値を、それぞれ、Ri、Gi、Biと表記する。
CPU21は、算出した平均Rm、Gm、Bmに基づき、以下の式(9)〜(11)によって、R値、G値、B値のそれぞれに対応する分散σ(r)2、σ(g)2、σ(b)2を算出する(S357)。
更に、CPU21は、算出した分散σ(r)2、σ(g)2、σ(b)2のそれぞれの平方根を算出することによって、標準偏差σ(r)、σ(g)、σ(b)を算出する。CPU21は、算出した標準偏差σ(r)、σ(g)、σ(b)を、色のばらつきを示す値(以下、「ばらつき量」という。)として、塗り潰し色に関連付けてテーブル244(図6参照)に格納する(S359)。CPU21は、色判定処理を終了し、処理をメイン処理(図5参照)に戻す。
一方、CPU21は、第1相違量が第2相違量よりも大きいと判定した場合(S353:YES)、変数N(Nは自然数)を5に設定し、第N外周領域を特定する(S361)。第N外周領域は、第(N−1)外周領域の外周を囲む領域である。第N外周領域の内周と、第N外周領域の外周との間の幅は、1画素分の長さを有する。例えば、図38(F)に示すように、Nが5の場合の第N外周領域である第5外周領域863は、第(N−1)外周領域である第4外周領域864の外周を囲む領域であって、内周と外周との間の幅が第3幅W3の領域に対応する。
図36に示すように、CPU21は、元画像のうち、特定した第N外周領域内の複数の画素のR値、G値、B値の平均値を算出する(S362)。以下、変数Nの場合に算出される平均値を、「第M平均値」(Mは、「M=N−2」の関係を満たす値)という。CPU21は、S337又はS343の処理によって算出した候補色と第M平均値との相違量(以下、「第M相違量」という。)を、上記の式(5)によって算出する(S363)。
CPU21は、第(M−1)相違量と第M相違量とを比較する(S365)。CPU21は、第(M−1)相違量よりも第M相違量の方が小さいと判定した場合(S365:YES)、処理をS367に進める。第(M−1)相違量よりも第M相違量の方が小さくなる場合とは、具体的には、図40に示すように、第N外周領域がパンチ穴画像88から遠ざかる((A)→(B)→(C)→(D))ことによって、地色と異なる色の付着の程度が弱くなり、第N外周領域内に地色と異なる色が付着していない状態となったことを示している。
CPU21は、第M相違量と所定の第2閾値とを比較する(S367)。CPU21は、第M相違量が第2閾値以上と判定した場合(S367:NO)、Nが所定値以上であるか判定する(S369)。CPU21は、Nが所定値よりも小さいと判定した場合(S369:NO)、Nに1を加算して更新する(S370)。CPU21は、処理をS361に戻す。CPU21は、更新したNに基づき、第N外周領域を特定し(S361)、S361〜S367の処理を繰り返す。CPU21は、S367の処理によって第M相違量が第2閾値よりも小さいと判定した場合(S367:YES)、処理をS371に進める。この場合、第N外周領域内の複数の画素に基づいて塗り潰し色を設定することによって、地色に近い色を塗り潰し色に設定できる。又、CPU21は、S369の処理によってNが所定値以上であると判定した場合も(S369:YES)、処理をS371に進める。
CPU21は、元画像のうち、最後の(即ち、第N)外周領域内の複数の画素のそれぞれのR値、G値、B値の3次元ヒストグラムを算出する(S371)。CPU21は、算出した3次元ヒストグラムに基づき、最も度数の大きいR値、G値、B値の組み合わせを特定する(S373)。CPU21は、特定したR値、G値、B値の組み合わせによって特定される色を、256階調となるように平均化し、塗り潰し色として、テーブル244(図6参照)に格納する(S375)。CPU21は処理をS357に進める。CPU21は、第N外周領域に含まれる画素の色に基づいて、分散を算出する(S357)。CPU21は、第N外周領域に含まれる画素の色のばらつき量として、分散に基づいて標準偏差を算出する(S359)。CPU21は、算出したばらつき量を、S375の処理によって格納された塗り潰し色に関連付けて、テーブル244(図6参照)に格納する。CPU21は、色判定処理を終了し、処理をメイン処理(図5参照)に戻す。
一方、CPU21は、第M相違量が第(M−1)相違量以上と判定した場合(S365:NO)、処理をS377に進める。CPU21は、元画像のうち、一つ前の(即ち、第(N−1))外周領域内の複数の画素のそれぞれのR値、G値、B値の3次元ヒストグラムを算出する(S377)。CPU21は、算出した3次元ヒストグラムに基づき、最も度数の大きいR値、G値、B値の組み合わせを特定する(S379)。CPU21は、特定したR値、G値、B値の組み合わせによって特定される色を、256階調となるように平均化し、塗り潰し色として、テーブル244(図6参照)に格納する(S381)。CPU21は処理をS357に進める。CPU21は、第(N−1)外周領域に含まれる画素の色に基づいて、分散を算出する(S357)。CPU21は、第(N−1)外周領域に含まれる画素の色のばらつき量として、分散に基づいて標準偏差を算出する(S359)。CPU21は、算出したばらつき量を、S381の処理によって格納された塗り潰し色に関連付けて、テーブル244(図6参照)に格納する。CPU21は、色判定処理を終了し、処理をメイン処理(図5参照)に戻す。
図5に示すように、CPU21は、色判定処理(S29)の終了後、色判定処理によってテーブル244(図6参照)に格納された塗り潰し色、及び、ばらつき量に基づいて、選択矩形領域データに対応するパンチ穴画像を除去するために、除去処理(図41参照)を実行する(S31)。
<工程B5:除去処理>
図41を参照し、除去処理について説明する。CPU21は、設定情報の塗り潰し色(図3参照)として、白色が設定されているか判定する(S391)。CPU21は、白色が設定されていると判定した場合(S391:YES)、テーブル244(図6参照)のうち、選択矩形領域データに関連付けられた塗り潰し色を、白色に設定する(S393)。CPU21は、テーブル244のうち、選択矩形領域データに関連付けられたばらつき量を「0」に設定する(S393)。CPU21は処理をS395に進める。CPU21は、設定情報の塗り潰し色として、白色が設定されていないと判定した場合(S391:NO)、テーブル244の塗り潰し色及びばらつき量を変更せず、処理をS395に進める。
CPU21は、設定情報の塗り潰し形状(図3参照)が矩形状に決定されているか判定する(S395)。CPU21は、矩形状に決定されている場合、(S395:YES)、テーブル244(図6参照)の選択矩形領域データを、塗り潰し領域として格納する(S397)。CPU21は処理をS415に進める。CPU21は、設定情報の塗り潰し形状として、パンチ穴画像の形状に応じて決定される旨が示されている場合(S395:NO)、テーブル244のうち選択矩形領域データに関連付けられた形状を、塗り潰し領域として格納する(S399)。CPU21は処理をS415に進める。
CPU21は、テーブル244の塗り潰し領域によって示される領域内の複数の画素のうち1つを選択する(S415)。CPU21は、周知のアルゴリズムに基づいて乱数を算出する。CPU21は、テーブル244に格納されたばらつき量に基づき、以下の式(12)〜(14)によって、R値、G値、B値毎にノイズ量を算出する(S417)。以下、R値、G値、B値に対応するノイズ量を、それぞれ、Pr、Pg、Pbと表記する。算出した乱数をSと表記する。算出される乱数のうち最大値を、Smaxと表記する。
Pr = σ(r)×(S−Smax/2)/(Smax/2) (12)
Pg = σ(g)×(S−Smax/2)/(Smax/2) (13)
Pb = σ(b)×(S−Smax/2)/(Smax/2) (14)
CPU21は、テーブル244のうち、選択矩形領域データに関連付けられた塗り潰し色のR値に、Prを加算する。CPU21は、テーブル244のうち選択矩形領域データに関連付けられた塗り潰し色のG値に、Pgを加算する。CPU21は、テーブル244のうち選択矩形領域データに関連付けられた塗り潰し色のB値に、Pbを加算する(S419)。これによって、ノイズが加算された塗り潰し色が生成される。CPU21は、S415の処理によって選択された画素の色を、ノイズが加算された塗り潰し色に設定(即ち、画素値の置換)する(S421)。
CPU21は、塗り潰し領域内の複数の画素の全てが、S415の処理によって選択されたか判定する(S423)。CPU21は、塗り潰し領域内の全ての画素が選択されていないと判定した場合(S423:NO)、処理をS415に戻す。CPU21は、塗り潰し領域内の画素のうち、選択されていない画素の1つを選択し(S415)、S417〜S421の処理を繰り返す。CPU21は、塗り潰し領域内の複数の画素の全てが、S415の処理によって選択されたと判定した場合(S423:YES)、処理をS431(図42参照)に進める。
図42に示すように、CPU21は、追加領域を特定する。追加領域は、塗り潰し領域の外周を囲む領域である。追加領域の内周と、追加領域の外周との間の幅は、1画素分の長さを有する(S431)。CPU21は、元画像のうち、特定した追加領域に含まれる複数の画素のそれぞれのR値、G値、B値から、テーブル244に格納された塗り潰し色のR値、G値、B値を減算した値の絶対値を、複数の画素毎に算出する。CPU21は、算出したR値、G値、B値それぞれの差分の平均値を更に算出する(S433)。CPU21は、算出したR値、G値、B値それぞれの差分の平均値が、所定閾値よりも大きいか判定する(S435)。CPU21は、R値、G値、B値それぞれの差分の平均値の少なくとも何れかが、所定閾値よりも大きいと判定した場合(S435:YES)、追加領域に含まれる複数の画素の色を、塗り潰し色によって変更する(S437)。CPU21は処理をS439に進める。CPU21は、R値、G値、B値それぞれの差分の平均値の全てが所定閾値以下と判定した場合(S435:NO)、処理をS439に進める。
S431〜S437の処理が実行されることによって、色判定処理(図36、図37参照)で判定に利用された第N(3以上)外周領域に対して、塗り潰し色への変更の要否が判断される。変更が必要と判定された場合、第N外周領域内の画素の色は、塗り潰し色に変更される。これによって、例えば図39、図40に示すように、パンチ穴画像の周辺に地色と異なる色が付着している場合に、CPU21は、パンチ穴画像の画素だけでなく、パンチ穴画像の周辺の画素も、塗り潰し色に変更される。
CPU21は、S353(図37参照)の処理によって、第1相違量が第2相違量以下と判定している場合(S353:NO)、追加領域の少なくとも一部が、第4外周領域の外部に配置されているか判定する(S439)。又、CPU21は、S353(図37参照)の処理によって、第1相違量が第2相違量よりも大きいと判定している場合(S353:YES)、追加領域の少なくとも一部が、第N外周領域の外部に配置されているか判定する(S439)。CPU21は、第4外周領域又は第N外周領域の内側に、追加領域の全てが配置されていると判定した場合(S439:NO)、処理をS431に戻す。CPU21は、追加領域の外周を囲む領域であって、内周と外周との間の幅が第1画素の長さを有する領域を、新たに追加領域として特定する(S431)。CPU21は、S433〜S437の処理を繰り返す。CPU21は、第4外周領域又は第N外周領域の外側に、追加領域の少なくとも一部が配置されていると判定した場合(S439:YES)、除去処理を終了させ、処理をメイン処理(図5参照)に戻す。
図5に示すように、CPU21は、除去処理(S31)の処理の終了後、S27の処理によって、テーブル244に格納された全ての矩形領域データを選択したか判定する(S31)。CPU21は、S27の処理によって選択されていない矩形領域データが、テーブル244に残っていると判定した場合(S33:NO)、処理をS27に戻す。CPU21は、テーブル244に格納された矩形領域データのうち選択していない矩形領域データの1つを選択し(S27)、S29、S31の処理を繰り返す。CPU21は、テーブル244に格納された矩形領域データを全て選択したと判定した場合(S33:YES)、メイン処理を終了させる。
<本実施形態の主たる作用、効果>
以上説明したように、PC2のCPU21は、矩形領域の外周を囲む第1幅の第1外周領域内の画素値の第1最頻値を特定する(S333)。CPU21は、算出した第1最頻値を第1閾値と比較する(S335)。第1最頻値が第1閾値以上の場合(S335:YES)、元画像のうち第1外周領域内の色は、原稿の地色に近い可能性がある。このため、CPU21は、第1最頻値に応じた候補色を特定する(S337)。一方、第1最頻値が第1閾値以上でない場合(S335:NO)、第1外周領域内の色は、地色と異なる色の影響を受けている可能性がある。このため、CPU21は、第1外周領域よりも幅が大きい第2外周領域内の画素値の第2最頻値を特定する(S341)。CPU21は、第2最頻値に応じた候補色を特定する(S343)。これによって、CPU21は、原稿の地色により近い候補色を特定できる。従って、CPU21は、パンチ穴の周辺に地色と異なる色が付着した原稿の画像を処理する場合に、地色により近い色を、候補色に基づいて塗り潰し色として特定できる。従って、CPU21は、パンチ穴に対応する画像の周辺の領域に、地色と異なる色が混ざっている場合でも、パンチ穴に対応する画像を目立たなくできる。
CPU21は、第3外周領域に基づいて算出される第1平均値と候補色との相違量である第1相違量を算出する(S347)。CPU21は、第4外周領域に基づいて算出される第2平均値と候補色との相違量である第2相違量を算出する(S351)。ここで、第1相違量が第2相違量よりも大きい場合、原稿にパンチ穴が形成されたときに、地色と異なる色が、パンチ穴の周辺に付着した可能性がある。又、カーボン汚れの場合、パンチ穴周辺で異なる色の濃度は濃く、パンチ穴から遠ざかるに従い薄くなる場合がある。このため、CPU21は、第1相違量が第2相違量よりも大きいと判定した場合(S353:YES)、第3外周領域よりも外側の領域(第4外周領域、第5外周領域、・・・)内の画素に基づいた色を、候補色の代わりに塗り潰し色とする(S375、S381)。これによって、CPU21は、原稿にパンチ穴が形成されたことに応じて、パンチ穴の周辺に地色と異なる色が付着した場合でも、地色に近い色を塗り潰し色として決定し、パンチ穴に対応する画像を除去できる。
CPU21は、第N外周領域に基づいて算出された第M平均値と、S337又はS343の処理によって設定された候補色との相違量である第M相違量を決定する(S363)。ここで、第M相違量が第2閾値よりも小さい場合、原稿にパンチ穴が形成されたときに付着する色が、第M外周領域に対して及ぼす影響は小さい可能性がある。このため、CPU21は、第M相違量が第2閾値よりも小さい場合(S367:YES)、候補色の代わりに、第N外周領域内の画素の画素値の最頻値に応じた色を塗り潰し色とする(S375)。このため、コンピュータは、第N外周領域内の画素の画素値の最頻値に応じた色を塗り潰し色として決定することによって、地色により近い色を塗り潰し色として決定できる。
第M相違量が第(M−1)相違量以上の場合、パンチ穴に対応する画像と異なるオブジェクトが第N外周領域内に含まれた可能性がある。このため、CPU21は、第M相違量が第(M−1)相違量以上の場合(S365:NO)、第(N−1)外周領域内の画素の画素値の最頻値に応じた色を塗り潰し色とする(S377)。これによって、CPU21は、パンチ穴以外のオブジェクトが塗り潰し色に影響を及ぼすことを抑制できる。
CPU21は、塗り潰し領域の外周を囲む追加領域に含まれる複数の画素の色と、塗り潰し色との差分の平均値が、所定閾値よりも大きいと判定した場合(S435:YES)、追加領域に含まれる複数の画素の色を、塗り潰し色によって変更する(S437)。この場合、コンピュータは、パンチ穴に対応する画像だけでなく、原稿にパンチ穴が形成されるときに周辺に付着した色の画像も除去できる。
原稿にパンチ穴が形成されるとき、パンチ穴に対して幅1mmの外周領域に地色と異なる色が付着しやすい場合がある。従って、CPU21は、第1幅を1mmに設定し、第2幅を1.4mmに設定する。このとき、第1外周領域と第2外周領域との面積比は、1:2となる。第2外周領域の面積を、第1外周領域の面積の2倍とすることによって、地色と異なる色の影響を小さくできる。従って、CPU21は、パンチ穴の周辺に地色と異なる色が付着した原稿の画像を処理する場合に、地色により近い色を、塗り潰し色として特定できる。
CPU21は、領域内の複数の画素のそれぞれのR値、G値、B値の3次元ヒストグラムを算出する(S331、S339、S371、S377)。CPU21は、算出した3次元ヒストグラムに基づき、最も度数の大きいR値、G値、B値の組み合わせを特定し、その頻度を、最頻値として取得する(S333、S341、S373、S379)。CPU21は、取得した最頻値に対応するR値、G値、B値の組み合わせによって特定される色を、256階調となるように平均化し、候補色、又は、塗り潰し色として設定する(S337、S343、S375、S381)。例えば、図43(A)(C)に示すように、異なる複数の地色91、92の境界部分がパンチ穴93に重複する場合であって、1次元色空間における頻度分布に基づいた値が最頻値とされた場合、図43(B)に示すように、複数の地色91、92の何れとも異なる色94が塗り潰し色として決定される可能性がある。これに対し、CPU21は、上記のように、3次元色空間における頻度分布に基づいた値を最頻値とすることによって、図43(D)に示すように、複数の地色91、92の何れか(地色92)を塗り潰し色として決定できる。
CPU21は、上記の式(6)〜(11)に基づいて算出した分散から求められる標準偏差を、ばらつき量として算出する(S359)。CPU21は、算出したばらつき量に基づいてノイズ量を算出し(S417)、算出したノイズ量を塗り潰し色に加算する(S419)。CPU21は、ノイズが加算された塗り潰し色によって、塗り潰し領域の画素の色を変更する(S437)。この場合、CPU21は、地色の画素の画素値のばらつきを考慮した塗り潰し色で、パンチ穴に対応する画像の画素を変更できる。従って、コンピュータは、パンチ穴に対応する画像が除去された場合に、地色に対して除去部分をより目立たなくすることができる。
<変形例>
本発明は上記実施形態に限定されず、種々の変形が可能である。上記において、塗り潰し色によって画素の色が変更される画像は、パンチ穴画像に限定されない。例えば、CPU21は、元画像に含まれる汚れ等の画像を、塗り潰し色によって変更することによって、汚れ等を除去してもよい。
上記において、CPU21は、第1相違量が第2相違量よりも大きいと判定した場合(S353:YES)、第3外周領域よりも外側の領域(第4外周領域〜)内の画素に基づいて、候補色を変更し、塗り潰し色とした(S375、S381)。これに対し、CPU21は、第1相違量が第2相違量よりも大きいと判定した場合(S353:YES)、予め規定された所定色を、候補色の代わりに塗り潰し色としてもよい。所定色は、例えば、原稿の地色として設定されてもよい。
CPU21は、第1相違量が第2相違量よりも大きいと判定した場合(S353:YES)、S337又はS343の処理によって設定された候補色の代わりに、第(N−1)外周領域よりも外側の領域の画素の画素値の最頻値に応じた色を塗り潰し色とした(S375、S381)。これに対し、CPU21は、S353の判定を行う場合、第1相違量が第2相違量より所定量以上大きい場合に(S353:Yes)、第(N−1)外周領域よりも外側の領域の画素の画素値の最頻値に応じた色を塗り潰し色としてもよい(S375、S381)。即ち、CPU21は、第1相違量が第2相違量よりも大きいかの判断を、ある程度の許容量を持った判断として行ってもよい。又、CPU21は、第(N−1)外周領域よりも外側の領域の画素の画素値の平均値や中央値に応じた色を塗り潰し色としてもよい。
CPU21は、第N外周領域に基づいて算出された第M平均値と、S337又はS343の処理によって設定された候補色との相違量である第M相違量を決定した(S363)。CPU21は、第M相違量が第2閾値よりも小さい場合(S367:YES)、候補色の代わりに、第N外周領域内の画素の画素値の最頻値に応じた色を塗り潰し色とした(S375)。これに対し、CPU21は、第(M−1)相違量よりも第M相違量の方が小さい場合(S365:YES)には、第M相違量が第2閾値よりも小さい場合(S367:YES)でも、Nを更新して処理をS361に戻し、更に外側の外周領域に基づいて処理を繰り返してもよい。即ち、CPU21は、第(M−1)相違量よりも第M相違量の方が小さくなるまで、外周領域を外側に更新しながら処理を繰り返してもよい。
CPU21は、第N外周領域内の画素の画素値の平均値である第M平均値と、S337又はS343の処理によって設定された候補色との相違量である第M相違量を決定した(S363)。CPU21は、第M相違量が第(M−1)相違量以上の場合(S365:NO)、第(N−1)外周領域内の画素の画素値の最頻値に応じた色を塗り潰し色とした(S377)。これに対し、CPU21は、第M相違量が第(M−1)相違量よりも所定以上大きい場合に、第(N−1)外周領域内の画素に基づく色を塗り潰し色としてもよい。又、CPU21は、第M相違量と第(M−1)相違量とが所定以上相違する場合に、第(N−1)外周領域内の画素に基づく色を塗り潰し色としてもよい。
CPU21は、塗り潰し領域の外周を囲む追加領域に含まれる複数の画素の色と、塗り潰し色との差分の平均値が、所定閾値よりも大きいと判定した場合(S435:YES)、追加領域に含まれる複数の画素の色を、塗り潰し色によって変更した(S437)。これに対し、CPU21は、塗り潰し領域の外周を囲む所定の大きさの領域の画素を、塗り潰し色によって変更してもよい。CPU21は、塗り潰し領域内の画素の色のみ、塗り潰し色によって変更し、塗り潰し領域外の画素の色は変更しなくてもよい。
上記において、第1外周領域の第1幅を1mmとし、第2外周領域の第2幅を1.4mmとした。第1幅及び第2幅の具体値は、上記の具体例に限定されず、他の値であってもよい。
上記において、CPU21は、領域内の複数の画素のそれぞれのR値、G値、B値の3次元ヒストグラムに基づき、最頻値を取得した。CPU21は、取得した最頻値に対応するR値、G値、B値の組み合わせによって特定される色を、256階調となるように平均化し、候補色、又は、塗り潰し色として設定した。これに対し、CPU21は、領域内の複数の画素のR値、G値、B値の平均値によって特定される色を、候補色、又は、塗り潰し色として設定してもよい。
CPU21は、上記の式(6)〜(11)に基づいて算出した分散から求められる標準偏差を、ばらつき量として算出した(S359)。ばらつき量の算出方法は、上記の例に限定されず、他の方法によって算出されてもよい。CPU21は、算出したばらつき量に基づいてノイズ量を算出し(S417)、算出したノイズ量を塗り潰し色に加算した(S419)。CPU21は、ノイズが加算された塗り潰し色によって、塗り潰し領域の画素の色を変更した(S437)。これに対し、CPU21は、塗り潰し領域の画素の色を、ノイズが加算されない塗り潰し色で変更することによって、パンチ穴画像を除去してもよい。
<その他>
S1の処理は本発明の「取得ステップ」の一例である。S173の処理は本発明の「第1特定ステップ」の一例である。S335の処理は本発明の「第1判定ステップ」の一例である。S337、S343の処理は本発明の「設定ステップ」の一例である。S31の処理は本発明の「変更ステップ」の一例である。S347の処理は本発明の「第1決定ステップ」の一例である。S351の処理は本発明の「第2決定ステップ」の一例である。S353の処理は本発明の「第2判定ステップ」の一例である。S355、S375、S381の処理は本発明の「変更ステップ」の一例である。S363の処理は本発明の「第3決定ステップ」の一例である。S359の処理は本発明の「第4決定ステップ」の一例である。S1の処理を行うCPU21は本発明の「取得手段」の一例である。S173の処理を行うCPU21は本発明の「第1特定手段」の一例である。S335の処理を行うCPU21は本発明の「第1判定手段」の一例である。S337、S343の処理を行うCPU21は本発明の「設定手段」の一例である。S31の処理を行うCPU21は本発明の「変更手段」の一例である。