A.第1実施例:
A−1:画像処理システム1000の構成
図1は、第1実施例における画像処理システムの構成を示すブロック図である。画像処理システム1000は、画像処理装置としてのサーバ400と、複合機200と、を備えている。サーバ400は、インターネット70に接続されており、複合機200は、LAN(Local Area Network)50を介して、インターネット70に接続されている。この結果、サーバ400と複合機200は、LAN50とインターネット70とを介して、通信可能である。また、LAN50には、複合機200の利用者のパーソナルコンピュータ500が接続されていても良い。
サーバ400は、CPU410と、DRAMなどの揮発性記憶装置420と、ハードディスクドライブやフラッシュメモリなどの不揮発性記憶装置430と、インターネット70などのネットワークに接続するためのインタフェースを含む通信部480と、を備えている。揮発性記憶装置420には、CPU410が処理を行う際に生成される種々の中間データを一時的に格納するバッファ領域421が設けられている。不揮発性記憶装置430には、後述する画像処理をCPU410に実現させるコンピュータプログラム431が格納されている。コンピュータプログラム431は、DVD−ROMなどに記録された形態で提供され得る。
CPU410は、コンピュータプログラム431を実行することにより、画像処理部300として機能する。画像処理部300は、処理対象の画像データ(対象画像データとも呼ぶ)を取得する画像データ取得部310と、対象画像データによって表される対象画像内の赤色のオブジェクトを特定する第1のオブジェクト特定部320と、オブジェクトが所定の判定条件を満たす場合に、オブジェクトは囲み線であると判定するオブジェクト判定部330と、特定のオブジェクトが囲み線に内包されているか(囲まれているか)否かを判定する内包関係判定部350と、囲み線に内包された特定のオブジェクトを除去する処理を実行する除去処理部360と、を備えている。ここで、囲み線は、後述するように、対象画像内の一部の領域、例えば、他のオブジェクトを示す領域や、オブジェクトが含まれない背景領域を囲む線である。例えば、囲み線は、赤色のペンなどにより原稿上に形成され、この原稿を読み取ることによって得られる画像データ(スキャンデータ)によって表される画像上に現れる。
内包関係判定部350は、内包関係を判定するための機能部として、第2のオブジェクト特定部351と、交点数判断部352と、条件判断部354と、を備えている。第2のオブジェクト特定部351は、囲み線であると判定されたオブジェクトと、囲み線との内包関係を判定すべきオブジェクトと、を特定する。交点数判断部352は、特定のオブジェクト内の画素を基点とする複数の判定線のそれぞれと、囲み線と、の交点の個数が偶数であるか奇数であるかを、判定線ごとに判断する。交点数判断部352は、判定線と囲み線との共有点(交点または接点)を検出する検出部353を備えている。ここで、共有点は、2本の線が共有する点を意味する。交点は、2本の線が交差している点を意味し、接点は、2本の線が接している(交差はしていない)点を意味する。共有点は、交点と接点とを含む上位概念である。条件判断部354は、囲み線との交点の個数が奇数である判定線の個数に基づいて、特定のオブジェクトが囲み線に内包されているか否かを判断する。これらの各機能部が行う具体的な画像処理については、後述する。
複合機200は、CPU210と、DRAMなどの揮発性記憶装置220と、フラッシュメモリやハードディスクドライブなどの不揮発性記憶装置230と、プリンタ部240と、スキャナ部250と、タッチパネルやボタンなどの操作部260と、液晶ディスプレイなどの表示部270と、LAN50などのネットワークに接続するためのインタフェースを含む通信部280と、を備えている。
揮発性記憶装置220には、CPU210が処理を行う際に生成される種々のデータを一時的に格納するバッファ領域221が設けられている。不揮発性記憶装置230には、制御プログラム231が格納されている。
プリンタ部240は、インクジェット方式やレーザー方式などの印刷方式を用いて印刷を実行する。スキャナ部250は、光電変換素子(例えば、CCD、CMOS)を用いて原稿を読み取ることによってスキャンデータを生成する取得する。スキャンデータは、RGB画素データによって構成されたビットマップデータ(RGB画像データ)である。RGB画素データは、レッド(R)、グリーン(G)、ブルー(B)の3つの色成分の色成分値(本実施例の各色成分値は、256階調の階調値)を含む画素データである。以下では、色成分のうち、レッド成分をR成分とも呼び、グリーン成分をG成分とも呼び、ブルー成分をB成分とも呼ぶ。
CPU210は、制御プログラム231を実行することにより、通信制御部110と、装置制御部120と、として機能する。装置制御部120は、例えば、プリンタ部240やスキャナ部250を制御して、コピー処理、印刷処理、スキャン処理などを実行する。通信制御部110は、外部機器との通信を制御する機能部であり、具体的には、後述する画像処理において、サーバ400との間で、画像データの送受信を行う画像データ送受信部115を備えている。
A−1:画像処理システム1000の動作
サーバ400の画像処理部300は、処理対象の画像データ(対象画像データとも呼ぶ)に対して画像処理を実行して、処理済みの画像データを生成する。この画像処理を含む画像処理システム1000の動作について説明する。
図2は、画像処理システム1000の動作を示すフローチャートである。このフローチャートの処理は、複合機200が、特定の動作モードの指定と、原稿SCの読取指示を、利用者から受け付けた場合に実行される。この特定の動作モードは、原稿SCから、囲み線に囲まれた特定のオブジェクトを除いた画像を表す画像データを生成するモードであり、特定オブジェクト除去モードとも呼ぶ。
処理が開始されると、ステップS105では、複合機200の装置制御部120(図1)は、スキャナ部250を用いて原稿SCを読み取ることによって、スキャンデータを生成する。
図3は、原稿および画像の一例を示す図である。図3(A)には、スキャンデータによって表されるスキャン画像60の一例が示されている。スキャン画像60は、原稿SCを表す画像であるから、図3(A)は、原稿SCの一例を示す図と言うこともできる。
スキャン画像60(原稿SC)は、オブジェクトとして、4個の文字61〜64と、2個の描画65、67と、1個の写真68と、囲み線66と、を含んでいる。描画は、例えば、イラスト、表、グラフ、線図、ベクトルグラフィックス、模様などを表すオブジェクトである。囲み線66は、オブジェクト除去モードで使用すべき囲み線の色として予め指定された色(本実施例では、赤)のペンを用いて、利用者によって原稿SCに手書きされたオブジェクトである。利用者は、除去対象のオブジェクトを囲む囲み線を原稿SCに手書きする。図3(A)の例では、囲み線66は、描画65を囲んでいる。なお、3個の文字61〜63は、赤色の文字であり、1個の文字64は、赤色ではない文字である。描画65は、赤色の部分を含んでおらず、描画67と写真68は、赤色の部分を含んでいる。
続いて、ステップS110では、サーバ400の画像データ送受信部115は、スキャンデータを、サーバ400に対して送信する。例えば、スキャンデータは、JPEG圧縮されて、サーバ400に送信される。この結果、サーバ400の画像処理部300の画像データ取得部310は、対象画像データとして、複合機200からスキャンデータを取得する。
スキャンデータが取得されると、画像処理部300は、スキャン画像60内の囲み線を特定するための一連の処理を実行する(ステップS120〜S145)。
先ず、ステップS120では、第1のオブジェクト特定部320は、囲み線の候補となるオブジェクトを特定するために、スキャンデータに対して二値化処理を実行して、二値画像データを生成する。具体的には、スキャンデータは、スキャン囲み線の色である赤色を表す色値を有する画素(赤色オブジェクト画素)と、赤色以外の色を表す色値を有する画素(非赤色画素)と、に二値化される。例えば、R成分値が基準値Rth以上、かつ、G成分値が基準値Gth以下、かつ、B成分値が基準値Bth以下である画素は、赤色オブジェクト画素に分類される。そして、R成分値が基準値Rthより大きい、または、G成分値が基準値Gth未満、または、B成分値が基準値Bth未満である画素は、非赤色画素に分類される。なお、本実施例では、囲み線の色として赤色が想定されているので、本ステップにおいて、赤色オブジェクトが特定されているが、他の色が想定されている場合には、本ステップにおいて、当該他の色を含む範囲の色を有するオブジェクトが特定される。
図3(B)は、二値画像データによって表される二値画像60Aの一例を示す図である。二値画像60Aには、赤色オブジェクト画素によって構成される赤色オブジェクトとして、3個の文字61A〜63Aと、囲み線66Aと、描画67および写真68(図3(A))の一部分である部分オブジェクト67A、68Aと、が含まれている。なお、文字64および描画65(図3(A))は、赤色ではないので、二値画像60Aにおいて、赤色オブジェクトとして現れていない。
ステップS125では、第1のオブジェクト特定部320は、赤色オブジェクトを収縮させる収縮処理と、赤色オブジェクトを膨張させる膨張処理とを、二値画像データに対してそれぞれ実行する。本実施例では、収縮処理が先に実行され、収縮処理済みの二値画像データ(収縮二値画像データ)に対して膨張処理が実行される。
図4は、収縮処理と膨張処理を説明する図である。図4(A)には、二値画像60A(図3(B))の部分画像PI1が示されている。部分画像PI1は、収縮処理前の赤色オブジェクトの例としての囲み線66Aの一部と、ノイズ画素DTを含んでいる。ノイズ画素DTは、孤立した画素である。この孤立したノイズ画素DTは、スキャン画像60内のノイズによって二値画像60Aに現れた赤色オブジェクト画素であり、特定すべき赤色オブジェクトを構成していない。また、囲み線66Aは、断線した部分(断線部)NTを含む場合がある。例えば、スキャン画像60内の囲み線66に、比較的色が薄い部分がある場合や、比較的線の幅が狭い部分がある場合などに、二値画像60A内の囲み線66Aに、断線部NTが表れる場合がある。
収縮処理は、例えば、所定サイズのフィルタ、図4(A)の例では、縦3画素×横3画素のサイズのフィルタFI1を用いて実行される。具体的には、第1のオブジェクト特定部320は、フィルタFI1を、二値画像60Aを表す二値画像データに対して適用して、収縮二値画像データを生成する。すなわち、第1のオブジェクト特定部320は、注目画素に、フィルタFI1の中心位置CC1(図4(A)参照)が重なるように、フィルタFI1を二値画像60A上に配置する。第1のオブジェクト特定部320は、フィルタFI1の範囲内に、非赤色画素が1個でも存在する場合には、注目画素に対応する収縮二値画像内の画素を非赤色画素に設定する。そして、第1のオブジェクト特定部320は、フィルタFI1の範囲内に、非赤色画素がない場合、すなわち、フィルタFI1の範囲内の9個の画素が、全て赤色オブジェクト画素であるには、注目画素に対応する収縮二値画内の画素を赤色オブジェクト画素に設定する。第1のオブジェクト特定部320は、二値画像60Aの全ての画素を注目画素として、収縮二値画像内の対応する画素を、非赤色画素および赤色オブジェクト画素のいずれかに設定することによって、収縮二値画像を表す収縮二値画像データを生成する。この説明から解るように、赤色オブジェクトを収縮させる収縮処理は、非赤色オブジェクトによって構成される領域(主として背景領域)を膨張させる処理と言うこともできる。
図4(B)には、収縮二値画像のうちの、図4(A)の部分画像PI1に対応する収縮部分画像PI2が示されている。収縮部分画像PI2には、ノイズ画素DTが現れていないことから解るように、収縮処理によって、ノイズ画素DTのような孤立した赤色オブジェクト画素を消去することができる。また、収縮部分画像PI2では、赤色オブジェクト、例えば、囲み線66Aが、部分画像PI1の囲み線66Aと比較して、細くなっている(収縮している)。また、収縮部分画像PI2では、囲み線66Aの断線部NTが、部分画像PI1の囲み線66Aの断線部NTと比較して、大きくなっている。
続く膨張処理は、例えば、所定サイズのフィルタ、図4(B)の例では、縦5画素×横5画素のサイズのフィルタFI2を用いて実行される。具体的には、第1のオブジェクト特定部320は、フィルタFI2を、収縮二値画像を表す収縮二値画像データに対して適用して、膨張二値画像データを生成する。すなわち、第1のオブジェクト特定部320は、注目画素に、フィルタFI2の中心位置CC2(図4(B)参照)が重なるように、フィルタFI2を収縮二値画像上に配置する。第1のオブジェクト特定部320は、フィルタFI2の範囲内に、赤色オブジェクト画素が1個でも存在する場合には、注目画素に対応する膨張二値画像内の画素を赤色オブジェクト画素に設定する。そして、第1のオブジェクト特定部320は、フィルタFI2の範囲内に、赤色オブジェクト画素がない場合、すなわち、フィルタFI2の範囲内の25個の画素が、全て非赤色画素であるには、注目画素に対応する膨張二値画内の画素を非赤色画素に設定する。第1のオブジェクト特定部320は、収縮二値画像の全ての画素を注目画素として、膨張二値画像内の対応する画素を、非赤色画素および赤色オブジェクト画素のいずれかに設定することによって、膨張二値画像を表す膨張二値画像データを生成する。
図4(C)には、膨張二値画像のうちの、図4(A)、(B)の部分画像PI1、PI2に対応する膨張部分画像PI3が示されている。膨張部分画像PI3の囲み線66Aには、断線部NTが現れていないことから解るように、膨張処理によって、囲み線66Aに現れ得る断線部NTを接続することができる。膨張部分画像PI3では、赤色オブジェクト、例えば、囲み線66Aが、部分画像PI1の囲み線66Aと比較して、太くなっている(膨張している)。
なお、上述したフィルタFI1、FI2のサイズ、すなわち、収縮処理による収縮の程度、および、膨張処理による膨張の程度は、一例である。ただし、収縮処理を先に実行し、膨張処理を後に実行する場合には、膨張処理による膨張の程度(フィルタFI2のサイズに対応する)は、収縮処理による収縮の程度(フィルタFI1のサイズに対応する)より大きいことが好ましい。こうすれば、断線部NTの接続を適切に実現することができる。仮に、収縮処理を先に実行し、膨張処理を後に実行する場合に、膨張処理による膨張の程度が、収縮処理による収縮の程度以下であると、収縮処理によって拡大した断線部NTが膨張処理によって接続されない可能性がある。
また、上記実施例とは逆に、膨張処理を先に実行し、収縮処理を後に実行する場合には、膨張処理による膨張の程度は、収縮処理による収縮の程度より小さいことが好ましい。こうすれば、ノイズ画素DTを適切に除去することができる。仮に、膨張処理を先に実行し、収縮処理を後に実行する場合に、膨張処理による膨張の程度が、収縮処理による収縮の程度以上であると、膨張処理によって拡大したノイズ画素DTが収縮処理によって消去されない可能性がある。
以上説明した収縮・膨張処理(図2のステップS125)によって、ノイズ画素DTの消去や、断線部NTの接続を実現できるので、後に実行するオブジェクト判定処理において、囲み線の判定の精度を向上できる。また、無駄な処理(例えば、ノイズ画素DTを判定対象のオブジェクトとする処理)を低減することにより、処理負荷を低減することができる。
続くステップS130(図2)では、第1のオブジェクト特定部320は、収縮・膨張処理後の二値画像データを利用して、赤色オブジェクトを特定して、特定された赤色オブジェクトに識別子を付すラベリングを実行する。ラベリングの結果、例えば、赤色オブジェクトと、識別子とを、対応付けたラベルデータが生成される。
具体的には、第1のオブジェクト特定部320は、連続する(互いに隣接する)1個以上の赤色オブジェクト画素で構成される1個の領域を、1個の赤色オブジェクトとして特定する。図3(B)の例では、3個の文字61A〜63Aと、囲み線66Aと、描画67および写真68(図3(A))の一部分である部分オブジェクト67A、68Aと、が特定され、これらの赤色オブジェクトのそれぞれに、互いに異なる識別子が付される。
赤色オブジェクトが特定されると、ステップS145では、画像処理部300は、オブジェクト判定処理を実行する。オブジェクト判定処理は、特定された複数個の赤色オブジェクト61A〜63A、66A〜68Aのそれぞれが、囲み線であるか否かを、赤色オブジェクトごとに判定する処理である。
図5は、オブジェクト判定処理のフローチャートである。ステップS205では、画像処理部300は、処理対象の赤色オブジェクトを選択する。図3(B)の例では、3個の文字61A〜63Aと、囲み線66Aと、描画67および写真68の一部分である部分オブジェクト67A、68Aの中から、1個の赤色オブジェクトが処理対象として選択される。
ステップS210では、オブジェクト判定部330は、処理対象の赤色オブジェクトが単色であるか否かを判定する単色判定処理を実行する。具体的には、オブジェクト判定部330は、赤色オブジェクトの平均成分値(Rave1、Gave1、Bave1)を算出する。平均成分値(Rave1、Gave1、Bave1)は、処理対象の赤色オブジェクトを構成する全ての赤色オブジェクト画素の値の平均値を、色成分ごとに算出することによって得られる。次に、オブジェクト判定部330は、平均成分値に近い成分値を有する赤色オブジェクト画素の割合(RT_R、RT_G、RT_B)を、以下の式(1)〜(3)を用いて、色成分ごとに算出する。
RT_R=(PN_Rave1/PNtotal) ...(1)
RT_G=(PN_Gave1/PNtotal) ...(2)
RT_B=(PN_Bave1/PNtotal) ...(3)
ここで、PNtotalは、処理対象の赤色オブジェクトを構成する赤色オブジェクト画素の全体の個数である。PN_Rave1、PN_Gave1、PN_Bave1は、平均成分値(Rave1、Gave1、Bave1)に近い成分値を有する赤色オブジェクト画素の個数であり、色成分ごとに算出される。なお、本実施例では、R成分値が、(Rave1−ΔV1)≦R≦(Rave1+ΔV1)の範囲内である場合に、当該画素は、平均成分値に近いR成分値を有する画素であると判断される。同様に、G成分値が、(Gave1−ΔV1)≦G≦(Gave1+ΔV1)の範囲内である場合に、当該画素は、平均成分値に近いG成分値を有する画素であると判断される。B成分値が、(Bave1−ΔV1)≦B≦(Bave1+ΔV1)の範囲内である場合に、当該画素は、平均成分値に近いG成分値を有する画素であると判断される。なお、例えば、ΔV1は、256階調の成分値に対して、例えば、70に設定される。
そして、オブジェクト判定部330は、成分ごとに算出された割合(RT_R、RT_G、RT_B)がそれぞれ基準値TH1以上である場合、すなわち、RT_R≧TH1、かつ、RT_G≧TH1、かつ、RT_B≧TH1である場合に、処理対象の赤色オブジェクトは単色であると判断する。また、オブジェクト判定部330は、割合(RT_R、RT_G、RT_B)の少なくとも1つが基準値TH1未満である場合、すなわち、RT_R<TH1、または、RT_G<TH1、または、RT_B<TH1である場合に、処理対象の赤色オブジェクトは単色でないと判断する。基準値TH1は、実験的に設定される設計値であり、例えば、0.6に設定される。囲み線は、薄い赤色のペンで記入される場合もあれば、濃い赤色のペンで記入される場合もあるので、ステップS120(図2)では、薄い赤、濃い赤などを含む比較的広い範囲内の色を有する画素を赤色オブジェクト画素として抽出している。このために、本ステップでは、赤色オブジェクトが単色であるか否かを比較的厳密に判定している。
単色判定処理によって、処理対象の赤色オブジェクトが単色でないと判定された場合には(ステップS215:NO)、画像処理部300は、処理対象の赤色オブジェクトは囲み線ではないと判断する(ステップS245)。1個の囲み線は、記入の途中でペンを代えることなく、一筆書きで記入されるのが一般的であるので、囲み線は単色であると考えられる。例えば、濃い赤色のペンを用いて、記入された囲み線は、濃い赤色の単色であり、薄い赤色のペンを用いて、記入された囲み線は、薄い赤色の単色であると考えられる。このために、本実施例では、単色であることを、赤色オブジェクトが囲み線であると判定するための必要条件として採用している。この結果、赤色オブジェクトが囲み線であるか否かを適切に判定することができる。例えば、図3(B)の囲み線66Aは、単色であると判定される。また、例えば、図3(B)の部分オブジェクト67Aが、薄い赤色や濃い赤色などを含む多数の色を含んでいる場合には、部分オブジェクト67Aは、単色ではないと判定される。
処理対象の赤色オブジェクトが単色であると判定された場合には(ステップS215:YES)、オブジェクト判定部330は、処理対象の赤色オブジェクトが線であるか否かを判定する線判定処理を実行する(ステップS220)。線判定処理は、赤色オブジェクトを含む処理領域内の所定の方向に延びる複数の直線上において、赤色オブジェクト画素の分布を解析する処理を用いて実行される。
図6は、線判定処理の説明図である。図6(A)に示すように、二値画像60A内の囲み線66A(図3(B))が処理対象の赤色オブジェクトである場合を例に説明する。オブジェクト判定部330は、囲み線66Aに外接する矩形領域SI1を処理領域として特定する。オブジェクト判定部330は、矩形領域SI1内のY方向(図6の縦方向)に沿った線L1(p)に沿って、連続する赤色オブジェクト画素の個数(連続画素数)を算出する。pは、X方向の線の位置を示す値であり、例えば、1≦p≦Wの範囲内の値である(Wは、矩形領域SI1のX方向の長さ(画素数))。図6(A)の例では、2つの連続画素数Lh1、Lh2が算出される。この場合には、線L1(p)に対応する連続画素数LN1(p)として、2つの連続画素数Lh1、Lh2の平均値((Lh1+Lh2)/2)を算出する。第1のオブジェクト特定部320は、1≦p≦Wの範囲内のW本の線L1(p)の全てについて、それぞれ連続画素数LN1(p)を算出する。
さらに、オブジェクト判定部330は、矩形領域SI1内のX方向(図6の横方向)に沿った線L2(q)に沿って、同様に、赤色オブジェクト画素の連続画素数を算出する。qは、線のY方向の線の位置(Y座標)を示す値であり、例えば、1≦q≦Hの範囲内の値である(Hは、矩形領域SI1のY方向の長さ(画素数))。図6(A)の例では、2つの連続画素数Lw1、Lw2が算出される。この場合には、線L2(q)に対応する連続画素数LN2(q)として、2つの連続画素数LW1、LW2の平均値を算出する。第1のオブジェクト特定部320は、1≦q≦Hの範囲内のH本の線L2(q)の全てについて、それぞれ連続画素数LN2(q)を算出する。
このように、X方向とY方向に延びる複数の直線上において、赤色オブジェクト画素が連続する個数を算出することによって、オブジェクトの幅(線幅LW)を特定するので、オブジェクトの幅を適切に特定することができる。
オブジェクト判定部330は、W本の線L1(p)について算出されたW個の連続画素数LN1(p)と、H本の線L2(q)について算出されたH個の連続画素数LN2(q)と、の全ての平均値を、赤色オブジェクトの平均連続画素数LNaveとして算出する。平均連続画素数LNaveは、赤色オブジェクトが線である場合の線の幅を示している。オブジェクト判定部330は、平均連続画素数LNaveが基準値TH2以下である場合に、赤色オブジェクトは、線であると判定し、平均連続画素数LNaveが基準値TH2未満である場合に、赤色オブジェクトは、線でないと判定する。基準値TH2は、例えば、想定されるペンの太さの最大値よりわずかに大きな値に設定され、具体的には、600dpiのスキャンデータを対象画像データにする場合に、120程度に設定される。この結果、例えば、図3(B)の囲み線66Aは、線であると判定される。
図6(B)には、二値画像60A内の部分オブジェクト68A(図3(B))が処理対象の赤色オブジェクトである場合を例に説明する。このような赤色オブジェクトが線でない場合には、図6(B)に示すように、Y方向の線L1(p)についての連続画素数Lh3や、X方向の線L2(q)についての連続画素数Lw3は、比較的大きくなる。この結果、部分オブジェクト68Aは、線判定処理において、線ではないと判定される。
線判定処理によって、処理対象の赤色オブジェクトが線でないと判定された場合には(ステップS225:NO)、画像処理部300は、処理対象の赤色オブジェクトは囲み線ではないと判定する(ステップS245)。1個の囲み線は、赤色のペンで一筆書きされた一本の線であることが想定されるので、線であることを、赤色オブジェクトが囲み線であると判定するための必要条件として採用している。この結果、赤色オブジェクトが囲み線であるか否かを適切に判定することができる。
処理対象の赤色オブジェクトが線であると判定された場合には(ステップS225:YES)、オブジェクト判定部330は、処理対象の赤色オブジェクトが、スキャン画像60内の一部の領域を囲む囲み形状を有しているか否かを判定する形状判定処理を実行する。
図7は、形状判定処理のフローチャートである。図8は、形状判定処理の第1の説明図である。図9は、形状判定処理の第2の説明図である。ステップS305では、オブジェクト判定部330は、赤色オブジェクトを構成する1個の赤色オブジェクト画素を注目画素として選択する。具体的には、オブジェクト判定部330は、矩形領域SI1(図8(A))内を、X方向の複数本の線Lxを、Y方向の負方向側から(図8の上方から)順次に走査して、検出される順番に1個ずつ赤色オブジェクト画素を選択する。
ステップS310では、オブジェクト判定部330は、選択された注目画素に対応する枠領域FLを設定する。図8(B)には、注目画素NPに対して設定される枠領域FLの一例が示されている。図8(B)に示すように、枠領域FLは、正方形の枠状の領域であり、枠の太さは、1画素分である。枠領域FLのX方向およびY方向の幅(画素数)FWは、図8(C)に示す式で表される。この式から解るように、枠領域FLの幅FWは、スキャン画像60の読み取り解像度RS(単位はdpi(dot per inch))と、赤色オブジェクトの線幅LW(単位は、画素)と、赤色オブジェクトのサイズOBS(単位は、画素)と、に応じて決定される。線幅LWには、例えば、線判定処理(図5のステップS220)にて算出された平均連続画素数LNaveが用いられる。オブジェクトサイズOBSには、例えば、矩形領域SI1の横幅Wと縦幅Hの平均値((H+W)/2)が用いられる。枠領域FLは、本実施例では、注目画素NPが中心に位置するように、設定される。
続くステップS315では、オブジェクト判定部330は、枠領域内のオブジェクト部分領域の個数Mvを算出する。オブジェクト部分領域は、枠領域FL内に、赤色オブジェクト画素が連続して並ぶ領域である。図8(B)の例では、2個のオブジェクト部分領域OA1、OA2が存在するので、個数Mvの値は「2」である。ここで、個数Mvを算出するのは、赤色オブジェクトと、枠領域FLとが、交差する数を認識するためである。図8(B)に示すように、個数Mvは、処理対象の赤色オブジェクトが枠領域FLと交差する数を示していることが解る。このために個数Mvを交差数Mvとも呼ぶ。交差数Mvが2である場合には、赤色オブジェクトは、枠領域FLが配置された矩形(枠配置矩形)内において、注目画素NPの位置(本実施例では、枠配置矩形の中心)を通り、枠配置矩形を横断する一本の線を成していると推定することができる。なお、枠領域FL内に位置すると言う場合には、1画素の太さの枠の内部に位置することを意味する。すなわち、枠領域FL内に位置する画素は、枠領域FLを構成する画素と言い換えることができる。例えば、図8(B)において、オブジェクト部分領域OA1、OB2は、枠領域FL内に位置しているが、注目画素NPや、オブジェクト部分領域OA1とオブジェクト部分領域OB2との間の複数個の赤色オブジェクト画素は、枠領域FL内には位置していない。また、枠配置矩形内に位置すると言う場合には、枠領域FL内または枠領域FLの内側の領域に位置していることを意味する。例えば、図8(B)において、オブジェクト部分領域OA1、OB2、注目画素NP、オブジェクト部分領域OA1とオブジェクト部分領域OB2との間の複数個の赤色オブジェクト画素は、全て枠配置矩形内に位置している。
例えば、図8(A)に示す枠領域FL2は、交差数Mvが2である例を示しているが、赤色オブジェクトは、枠配置矩形内において、枠配置矩形の中心を通り、枠配置矩形を横断する一本の線を成していることが解る。一方、図8(A)に示す枠領域FL1は、交差数Mvが1である例を示しているが、赤色オブジェクトは、枠配置矩形内で終端を形成しているので、中心を通る一本の線ではあるが、枠配置矩形を横断してはいない。
図7のステップS320では、オブジェクト判定部330は、全ての赤色オブジェクト画素が注目画素として選択されたか否かを判断する。未選択の赤色オブジェクト画素がある場合には(ステップS320:NO)、オブジェクト判定部330は、ステップS305に戻って、未選択の赤色オブジェクト画素を選択して、上述したステップS305〜S320までの処理を繰り返す。全ての赤色オブジェクト画素が選択された場合には(ステップS320:YES)、オブジェクト判定部330は、ステップS325に処理を進める。ステップS325に移行して時点で、処理対象の赤色オブジェクトを構成する全ての赤色オブジェクト画素に対応する枠領域FLについて、交差数Mvが算出されている。以下では、交差数Mvが「A(Aは、0以上の整数)」である枠領域FLに対応する赤色オブジェクト画素を、単に、交差数Mvが「A」の赤色オブジェクト画素と言う。また、赤色オブジェクト画素に対応する枠領域FLと赤色オブジェクトとの交差数Mvが「A」であることを、単に、赤色オブジェクト画素の交差数Mvが「A」である、と言う。
ステップS325では、全ての赤色オブジェクト画素に対する、交差数Mvが2である赤色オブジェクト画素の割合RT2を算出する。交差数Mvが2である赤色オブジェクト画素を、第1の特定画素とも呼ぶ。ステップS330では、オブジェクト判定部330は、割合RT2が、基準値THa以上であるか否かを判断する。オブジェクト判定部330は、割合RT2が、基準値THa以上である場合には(ステップS330:YES)、赤色オブジェクトは、囲み形状であると判定する(ステップS370)。赤色オブジェクトが囲み形状である場合は、図8(A)に示す枠領域FL2のように、大部分の赤色オブジェクト画素(注目画素)の交差数Mvが2になると考えられる。例外的に、図8(A)に示す枠領域FL1のように、一筆書きされた囲み線の端部近傍の赤色オブジェクト画素の交差数Mvは、2にならない場合がある。また、ノイズなどによって、一部の赤色オブジェクト画素の交差数Mvが2にならない可能性がある。このような事情を考慮して、基準値THaを適切に規定することによって、赤色オブジェクトが囲み形状であるか否かを適切に判定することができる。本実施例では、基準値THaは、0.85に設定されている。
図9を参照してさらに説明する。図9(A)には、赤色オブジェクトが、文字63A(図3(B))である例を示している。図9(A)に示す枠領域FL4は、交差数Mvが3である例を示しているが、赤色オブジェクトは、枠配置矩形内において、3つに分岐した形状を有していることが解る。また、図9(A)に示す枠領域FL5のように、文字の端部近傍の赤色オブジェクト画素は、交差数Mvが1になる可能性が高い。このように、赤色オブジェクトが文字である場合には、3つ以上に分岐した部分や、3個以上の端部を有する場合が多いので、交差数Mvが2ではない赤色オブジェクト画素の割合が、赤色オブジェクトが囲み形状である場合と比較して高くなる。赤色の文字は、単色判定処理(図5:ステップS210)において、単色であると判定され、線判定処理(図5:ステップS220)において、線であると判定される可能性が比較的高い。しかしながら、形状判定処理では、赤色の文字は、囲み形状ではないと判断される。したがって、形状判定処理では、割合RT2を用いて判断することによって、囲み線ではない赤色オブジェクト(例えば、文字)は囲み形状ではないと判断し、囲み線である赤色オブジェクトは囲み形状であると、適切に判断することができる。
ここで、図8(C)の式に示すように、枠領域FLの幅FWは、解像度RSが大きいほど大きく、赤色オブジェクトの線幅LWが大きいほど大きく、オブジェクトサイズOBSが大きいほど大きく、設定されている。この理由を説明する。枠領域FLの幅FWが、線幅LWに対して過度に小さい場合には、例えば、極端な例では、枠領域FLの枠配置矩形内の全体が、赤色オブジェクト画素で埋まり、分岐の数を示す交差数Mvを適切に算出できない可能性がある。また、枠領域FLの幅FWが、オブジェクトサイズOBSや線幅LWに対して過度に大きい場合には、枠領域FLの枠配置矩形内に、1個の赤色オブジェクトの互いに離れた複数の部分が配置される可能性が比較的高くなる。例えば、枠領域FLの枠配置矩形内に、複数の線が配置される可能性が比較的高くなる。この結果、注目画素NPを通る1個の部分の分岐の数を示す交差数Mvを適切に算出できない可能性がある。なお、解像度RSが高いほど、1画素に対応する原稿上の寸法(例えば、300dpiである場合には、(1/300)インチ)が小さくなるので、画素数で示される枠領域FLの幅FWの値は、解像度RSが高いほど大きくされる。この結果、原稿上において想定される囲み線のサイズに応じた適切な枠領域FLの幅FW(画素数)を決定することができる。
オブジェクト判定部330は、交差数Mvが2である赤色オブジェクト画素の割合RT2が、基準値THa未満である場合には(ステップS330:NO)、ステップS340に処理を進める。ここで、交差数Mvが2である赤色オブジェクト画素の割合RT2が、基準値THa未満である場合に、直ちに、赤色オブジェクトは、囲み形状でないと判定しない。これは、交差数Mvが2である赤色オブジェクト画素の割合RT2が、比較的少ない場合であっても、所定の条件を満たす場合には、赤色オブジェクトが囲み線である可能性があるからである。
例えば、図8(A)に示す囲み線66Aでは、上述したように、交差数Mvが1である赤色オブジェクト画素が、一筆書きの囲み線66Aの開始端と、終了端の近傍に存在している。具体的には、一筆書きの囲み線の両端(開始端と終了端)が、完全に一致していない場合、例えば、両端が離れている場合(図8(A))、両端の一方の端部が、囲み線の他方の端部とは異なる位置に接している場合(図9(B))、両端の近傍で、囲み線が交差している場合(図9(C))には、交差数Mvが1である赤色オブジェクト画素が存在し得る。
また、図9(B)に示すように、両端の一方の端部が、囲み線の他方の端部とは異なる位置に接している囲み線66Bでは、交差数Mvが3である赤色オブジェクト画素(図9(B)の枠領域FL7参照)が存在し得る。さらに、図9(C)に示すように、両端の近傍で交差している囲み線66Cでは、交差数Mvが4である赤色オブジェクト画素(図9(B)の枠領域FL9参照)が存在し得る。さらに、ノイズの影響がある場合を除いて、赤色オブジェクトが、一筆書きの囲み線である場合には、交差数Mvが5以上である赤色オブジェクト画素は、存在しない。ここで、交差数Mvが、「1、3、4」のうちのいずれかである赤色オブジェクト画素を、第2の特定画素とも呼ぶ。また、交差数Mvが、「5」以上である赤色オブジェクト画素を、第3の特定画素とも呼ぶ。以上の説明から解るように、第1の特定画素の割合RT2が基準値THa未満であっても、第2の特定画素や第3の特定画素の分布状況が、上記の囲み線の特徴を備えていれば、赤色オブジェクトが囲み線である可能性は比較的高いと言うことができる。このことを考慮して、ステップS340以降の処理が実行される。
ステップS340では、オブジェクト判定部330は、全ての赤色オブジェクト画素に対する、交差数Mvが5以上である赤色オブジェクト画素(第3の特定画素)の割合RT5を算出する。ステップS350では、オブジェクト判定部330は、第3の特定画素の割合RT5が、基準値THb以下であるか否かを判断する。オブジェクト判定部330は、第3の特定画素の割合RT5が、基準値THbより大きい場合には(ステップS350:NO)、赤色オブジェクトは、囲み形状でないと判定する(ステップS375)。上述したように、赤色オブジェクトが、一筆書きの囲み線である場合には、第3の特定画素は、ノイズなどの例外的な要因で第3の特定画素であると判断される場合を除いて、基本的に存在しないからである。基準値THbは、例えば、赤色オブジェクトが囲み線である場合に、ノイズによって発生し得る第3の特定画素の個数の上限値より僅かに大きな値に設定される。具体的には、本実施例では、基準値THbは、0.1に設定されている。形状判定処理では、割合RT5を用いて判断することによって、囲み線でない赤色オブジェクトを、判定対象から適切に除外することができる。
第3の特定画素の割合RT5が、基準値THb以下である場合には(ステップS350:YES)、オブジェクト判定部330は、後述する判定に用いる特定領域ESを設定する(ステップS355)。図10は、特定領域ESを用いる判定について説明する図である。オブジェクト判定部330は、交差数Mvが、「1、3、4」のうちのいずれかである複数個の赤色オブジェクト画素(第2の特定画素)の位置(座標)に基づいて、複数個の第2の特定画素の重心GCを算出する。上述したように、赤色オブジェクトが囲み線である場合には、第2の特定画素は、一筆書きの囲み線の両端の近傍に集中して存在する(図8(A)、図9(B)(C))。したがって、図10(A)に示すように、赤色オブジェクトが囲み線である場合には、重心GCは、一筆書きの囲み線の両端の近傍に位置する。
オブジェクト判定部330は、重心GCを中心として、正方形の特定領域ESを設定する。特定領域ESのX方向およびY方向の幅(画素数)EWは、図10(B)に示す式で表される。この式から解るように、特定領域ESの幅EWは、枠領域FLの幅FW(図8(C))と同様に、スキャン画像60の読み取り解像度RSと、赤色オブジェクトの線幅LWと、画素)と、赤色オブジェクトのサイズOBSと、に応じて決定される。
続くステップS360では、オブジェクト判定部330は、全ての第2の特定画素に対する、特定領域ES内に位置する第2の特定画素の割合RTCを算出する。ステップS365では、オブジェクト判定部330は、第2の特定画素の割合RTCが、基準値THc以上であるか否かを判断する。オブジェクト判定部330は、第2の特定画素の割合RTCが、基準値THcより小さい場合には(ステップS365:NO)、赤色オブジェクトは、囲み形状でないと判定する(ステップS375)。上述したように、赤色オブジェクトが、一筆書きの囲み線である場合には、第2の特定画素は、赤色オブジェクトの一部分に集中する、すなわち、一筆書きの囲み線の両端近傍(すなわち、特定領域ES内)に集中する。一方、文字を構成する線の端部は、文字内の複数の箇所に分散して存在する。例えば、文字「Y」(図9(A)参照)の端部は、文字「Y」の下側の中央部分に1箇所、文字の右上部分と左上部分にそれぞれ1箇所ずつ存在する。また、文字を構成する線は、文字内で様々な数に分岐し得る。例えば、文字「Y」(図9(A)参照)は、中央部分で3つに分岐している。したがって、赤色オブジェクトが文字である場合には、第2の特定画素は、赤色オブジェクトの一部分に集中することなく、分散する可能性が高い。形状判定処理では、割合RTCを用いて判断することによって、囲み線でない赤色オブジェクト(例えば、文字)は囲み形状ではないと判断し、囲み線を示す赤色オブジェクトは囲み形状であると、適切に判断することができる。基準値THcは、例えば、実験的に設定される設計値であり、本実施例では、0.5に設定されている。
第2の特定画素の割合RTcが、基準値THc以上である場合には(ステップS365:YES)、オブジェクト判定部330は、赤色オブジェクトは、囲み形状であると判定する(ステップS370)。
ここで、図10(B)の式に示すように、特定領域ESの幅EWは、枠領域FLの幅FW(図8(C))と同様に、解像度RSが大きいほど大きく、赤色オブジェクトの線幅LWが大きいほど大きく、オブジェクトサイズOBSが大きいほど大きく、設定されている。特定領域ESの幅EWが、オブジェクトサイズOBSに対して過度に大きい場合には、第2の特定画素が比較的広い範囲に広がって分布している場合であっても、割合RTCが基準値THc以上になる可能性がある。また、特定領域ESの幅EWが、オブジェクトサイズOBSに対して過度に小さい場合には、第2の特定画素が比較的狭い範囲に集中している場合であっても、割合RTCが基準値THc未満になる可能性がある。このため、特定領域ESは、オブジェクトサイズOBSに対して適切なサイズに設定されることが好ましい。赤色オブジェクトの線幅LWは、オブジェクトのサイズと相関があり、赤色オブジェクトが囲み線である場合に、オブジェクトのサイズが大きいほど、線幅LWが太くなる可能性が高いと考えられる。また、解像度RSが高いほど、1画素に対応する原稿上の寸法(例えば、300dpiである場合には、(1/300)インチ)が小さくなるので、画素数で示される特定領域ESの幅EWの値は、解像度RSが高いほど大きくされる。この結果、原稿上において想定される囲み線のサイズに応じた適切な特定領域ESの幅FW(画素数)を決定することができる。
ステップS370またはステップS375において、処理対象の赤色オブジェクトが囲み形状であるか否かが判定されると、形状判定処理は終了される。以上説明した形状判定処理において、処理対象の赤色オブジェクトが囲み形状であると判定するための条件は、以下の3つである。
(1)第1の特定画素の割合RT2が基準値THa以上であること(ステップS330)
(2)第3の特定画素の割合RT5が基準値THb未満であること(ステップS350)
(3)第2の特定画素の割合RTCが基準値THc以上であること(ステップS365)
上記実施例では、条件(1)が満たされる場合には、他の条件とは無関係に、赤色オブジェクトは囲み形状である、と判定される。また、条件(2)と条件(3)は、両方が満たされる場合に限り、条件(1)が満たされない場合であっても、赤色オブジェクトは囲み形状であると、判定される。このような条件(1)〜(3)の使い方は一例であり、これに限られない。例えば、基準値THa、THb、THcを大きめに設定するか小さめに設定するかなどに応じて、これらの条件(1)〜(3)の使い方は、変化し得る。例えば、条件(1)と条件(2)が満たされる場合と、条件(2)と条件(3)が満たされる場合と、の2つの場合には、赤色オブジェクトは囲み形状である、と判定され、それ以外の場合には、赤色オブジェクトは囲み形状でない、と判定されても良い。また、条件(1)〜(3)の全部が満たされる場合のみに、赤色オブジェクトは囲み形状である、と判定されても良い。また、条件(2)および(3)の一方または両方は、判定されなくても良く、条件(1)が満たされた場合に、赤色オブジェクトは囲み形状であると判定され、条件(1)が満たされない場合に、赤色オブジェクトは囲み形状でないと判定されても良い。
図5に戻って説明を続ける。形状判定処理によって、処理対象の赤色オブジェクトが囲み形状でないと判定された場合には(ステップS235:NO)、画像処理部300は、処理対象の赤色オブジェクトは囲み線ではないと判断する(ステップS245)。一方、形状判定処理によって、処理対象の赤色オブジェクトが囲み形状であると判定された場合には(ステップS235:YES)、画像処理部300は、処理対象の赤色オブジェクトは囲み線であると判断する(ステップS240)。すなわち、赤色オブジェクトが、単色であり(ステップS215:YES)、かつ、線であり(ステップS225:YES)、かつ、囲み形状である(ステップS235:YES)場合に、当該赤色オブジェクトは、囲み線であると判定される。そして、赤色オブジェクトが、単色でない(ステップS215:NO)、または、線でない(ステップS225:NO)、または、囲み形状でない(ステップS235:NO)場合に、当該赤色オブジェクトは、囲み線でないと判定される。図3(B)の例では、囲み線66Aのみが囲み線であると判定され、文字61A〜63A、部分オブジェクト67A、68Aは囲み線でないと判定される。
ステップS250では、画像処理部300は、全ての赤色オブジェクトが選択済みであるか否かを判断する。未選択の赤色オブジェクトがある場合には(ステップS250:NO)、画像処理部300は、ステップS205に戻って、未選択の赤色オブジェクトを選択して、上述したステップS205〜S250までの処理を繰り返す。全ての赤色オブジェクトが選択された場合には(ステップS250:YES)、画像処理部300は、オブジェクト判定処理を終了する。
オブジェクト判定処理が終了すると、続くステップS150(図2)では、特定された囲み線(囲み線であると判定された赤色オブジェクト)の中から、1個の囲み線を処理対象として選択する。図3の例では、1個の囲み線66A(図3(B))のみが特定されているので、当該囲み線66Aが選択される。
ステップS155では、内包関係判定部350の第2のオブジェクト特定部351は、除去対象のオブジェクトを含む部分画像データを生成する。具体的には、第2のオブジェクト特定部351は、二値画像60Aにおいて、処理対象の囲み線66に外接する外接矩形OS1(図3(B))を特定する。第2のオブジェクト特定部351は、当該外接矩形OS1に対応する部分画像PSI(図3(A))を、スキャン画像60から切り出すことによって、部分画像PSIを表す部分画像データを生成する。
図11は、部分画像PSIの一例(図11(A))と、部分二値画像の一例(図11(B)(C))を示す図である。図11に示すように、部分画像PSIは、囲み線66と、描画65を、オブジェクトとして含んでいる。
ステップS160では、第2のオブジェクト特定部351は、部分画像PSI内のオブジェクトを特定するために、部分画像データに対して二値化処理を実行して、部分二値画像データを生成する。具体的には、部分画像データは、背景を構成する背景画素と、オブジェクトを構成するオブジェクト画素と、に二値化される。例えば、第2のオブジェクト特定部351は、例えば、囲み線66の近傍に位置する複数個の画素、例えば、囲み線66の外側に位置する複数個の画素であって、囲み線66に沿って配置された複数個の画素の値の平均値(Rave2、Gave2、Bave2)を、二値化のための基準の色として算出する。あるいは、第2のオブジェクト特定部351は、スキャン画像60において、部分画像PSIの外側に位置する複数個の画素であって、部分画像PSIの外縁に沿って配置された複数個の画素の値の平均値(Rave2、Gave2、Bave2)を二値化のための基準の色として算出する。そして、第2のオブジェクト特定部351は、(Rave2−ΔV2)≦R≦(Rave2+ΔV2)、かつ、(Gave2−ΔV2)≦G≦(Gave2+ΔV2)、かつ、(Bave2−ΔV2)≦B≦(Bave2+ΔV2)を満たす画素値(RGB値)を有する画素を背景画素に分類し、背景画素と決定すべき画素以外の画素をオブジェクト画素に分類する。第2のオブジェクト特定部351は、部分画像PSIに含まれる全ての画素を、背景画素とオブジェクト画素とのいずれかに分類することによって、部分二値画像データを生成する。
ステップS165では、第2のオブジェクト特定部351は、生成された部分二値画像データを用いて、オブジェクトを特定して、特定されたオブジェクトに識別子を付すラベリングを実行する。ラベリングの結果、例えば、オブジェクトと、識別子とを、対応付けたラベルデータが生成される。
具体的には、第2のオブジェクト特定部351は、連続する(互いに隣接する)1個以上のオブジェクト画素で構成される1個の領域を、1個のオブジェクトとして特定する。図11(B)の例では、部分二値画像PBI1において、オブジェクト画素によって構成されるオブジェクトとして、囲み線66Dと、描画65Dとが、が特定され、これらのオブジェクトのそれぞれに、互いに異なる識別子が付される。なお、部分二値画像PBI内に特定されるオブジェクトには、ステップS150で選択された処理対象の囲み線が含まれる。囲み線を表すオブジェクトには、例えば、囲み線であることが認識できるように、他のオブジェクトとは異なる特別な識別子が付される。
オブジェクトが特定されると、続くステップS170では、内包関係判定部350は、部分二値画像PBIに含まれる囲み線以外のオブジェクトが、囲み線に内包されているか否かを判定する内包関係判定処理を実行する。
図12は、内包関係判定処理のフローチャートである。ステップS405では、内包関係判定部350は、部分二値画像PBI1内に特定されたオブジェクトの中から囲み線以外のオブジェクトを処理対象として選択する。図11(B)の例では、描画65Dが、処理対象のオブジェクト(対象オブジェクト)として選択される。ここで、内包関係判定処理を説明するために、図3(A)に示すスキャン画像60とは、無関係の別の部分二値画像PBI2(図11(C))を、部分二値画像PBI1(図11(B))とともに、説明のための例として参照する。以下、図11(B)の部分二値画像PBI1を第1の二値画像PBI1とも呼び、図11(C)の部分二値画像PBIを第2の二値画像PBI2とも呼ぶ。第2の二値画像PBI2は、波状に曲がった比較的太い線状の形状を有する描画OBと、オブジェクトOBに沿って、オブジェクトOBを囲む囲み線SL1とが、オブジェクトとして含んでいる。第2の二値画像PBI2の例では、描画OBが対象オブジェクトとして選択される。
ステップS410では、内包関係判定部350の交点数判断部352は、処理対象のオブジェクトの重心CCを算出する。重心CCのX座標は、対象オブジェクトを構成する全てのオブジェクト画素のX座標の平均値であり、重心CCのY座標は、対象オブジェクトを構成する全てのオブジェクト画素のY座標の平均値である。図11(B)、図11(C)には、それぞれ、第1の二値画像PBI1の対象オブジェクト(描画65D)の重心CC1と、第2の二値画像PBI2の対象オブジェクト(描画OB)の重心CC2とが図示されている。
ステップS415では、交点数判断部352は、算出された重心CCの位置に対象オブジェクトを構成するオブジェクト画素が存在するか否かを判断する。対象オブジェクトの形状によって、重心CCにオブジェクト画素が存在する場合と存在しない場合がある。図11(B)の例では、第1の二値画像PBI1の対象オブジェクトの重心CC1は、対象オブジェクトである描画65D内に位置しており、当該重心CC1には、オブジェクト画素が存在していることが解る。一方、図11(C)の例では、第2の二値画像PBI2のの対象オブジェクトの重心CC2は、対象オブジェクトである描画OB内に位置しておらず、当該重心CC2には、オブジェクト画素が存在しないことが解る。
対象オブジェクトの重心CCにオブジェクト画素が存在する場合には(ステップS415:YES)、交点数判断部352は、対象オブジェクトの重心CCに位置するオブジェクト画素(重心画素とも呼ぶ)を、後述する判定線を設定するための基点に設定する(ステップS425)。この場合には、設定される基点の個数は、1個である。図11(B)の例では、第1の二値画像PBI1の対象オブジェクトの重心CC1に位置する重心画素が基点に設定される。
対象オブジェクトの重心CCにオブジェクト画素が存在しない場合には(ステップS415:NO)、交点数判断部352は、対象オブジェクトの上端に位置するオブジェクト画素(上端画素とも呼ぶ)と、下端に位置するオブジェクト画素(下端画素とも呼ぶ)と、を基点に設定する(ステップS420)。この場合には、設定される基点の個数は、2個である。例えば、図11(C)に示すように、処理対象の部分二値画像の上端から下端に向かう方向を+Y方向とする座標系が採用されている場合には、上端画素は、対象オブジェクトを構成する全ての画素のうち、Y座標が最小の画素であり、下端画素は、Y座標が最大の画素である。図11(C)の例では、第2の二値画像PBI2において、基点に設定される上端画素の位置UPと、下端画素の位置BPと、が図示されている。なお、上端画素と下端画素に代えて、右端画素と左端画素とが採用されても良い。例えば、右端画素は、X座標が最大の画素であり、左端画素は、X座標が最小の画素である。
基点が設定されると、ステップS430では、交点数判断部352は、処理対象の基点を選択する。図11(B)の例では、重心画素が、処理対象の基点として選択され、図11(C)の例では、上端画素と下端画素のうちの1つの画素が、処理対象の基点として選択される。
ステップS440では、交点数判断部352は、交点数特定処理を実行する。交点数特定処理は、処理対象の基点を用いて、選択された画素を基点とする4本の判定線のそれぞれと、囲み線と、の交点の個数(交点数Mxと呼ぶ)を、判定線ごとに特定(算出)する処理である。
図13は、交点数特定処理のフローチャートである。図14は、交点数特定処理の説明図である。図13のステップS505では、交点数判断部352は、4個の検出方向の中から1個の検出方向を選択する。4個の検出方向は、上方向(−Y方向)、下方向(+Y方向)、左方向(−X方向)、右方向(+X方向)である。これらの4個の検出方向から1個の検出方向が、本ステップにて1個ずつ選択される。
ステップS510では、交点数判断部352は、カウント値Cvを初期化する(ゼロにする)。ステップS515では、交点数判断部352の検出部353は、選択された検出方向の判定線と、囲み線との共有点を検出する。具体的に説明すると、図12のステップS430にて選択される処理対象の1個の基点と、ステップS505で選択される1個の検出方向とによって、1本の判定線が定義できる。したがって、図11(B)の例では、第1の二値画像PBI1の対象オブジェクトの重心画素(重心CC1)と、4個の検出方向と、によって、重心CC1から4個の検出方向にそれぞれ延びる4本の半直線A1〜A4が、判定線として定義できる。また、図11(C)の例では、上端画素(位置UPの画素)から4個の検出方向にそれぞれ延びる4本の半直線A11〜A14と、下端画素(位置BPの画素)から4個の検出方向にそれぞれ延びる4本の半直線A21〜A24と、が判定線として定義できる。換言すれば、4本の判定線を1組とすると、1個の基点毎に1組の判定線が定義できる。
ここで、ステップS515の処理について、図11(B)において、重心CC1から右方向に伸びる判定線A4と、囲み線66Dと、の共有点を検出する場合を例に、説明する。図14(A)には、判定線A4と、囲み線66Dと、の交点CP4の近傍の拡大図が示されている。検出部353は、重心CC1の画素から右方向に向かって第1の二値画像PBI1の外縁の画素に至るまで、判定線A4上の複数個の画素を1個ずつ走査していく。検出部353は、走査の途中に、判定線A4上にオブジェクト画素を検出すると、検出されたオブジェクト画素を含み、判定線A4上に連続する1個以上のオブジェクト画素を、1個の共有点として検出する。例えば、図14(A)の例では、判定線A4と、囲み線66Dと、の交点CP4が、共有点として検出される。なお、判定線とオブジェクトとは、共有点において交差する場合(すなわち、交点を有する場合)と、共有点において接する場合(すなわち、接点を有する場合)と、を含む。この時点では、検出された共有点が、交点であるか接点であるかは検出されていない。検出部353は、判定線A4の例では、1個の共有点のみを検出するが、判定線上に複数個の共有点を検出する場合もあれば、1個の共有点も検出しない場合もある。
続くステップS520では、交点数判断部352は、直前のステップS515にて1個以上の共有点が検出されたか否かを判断する。1個の共有点も検出されていない場合には(ステップS520:NO)、交点数判断部352は、ステップS560に処理を移行する。1個以上の共有点が検出された場合には(ステップS520:YES)、交点数判断部352は、検出された1個以上の共有点の中から、処理対象の1個の共有点を選択する(ステップS525)。
ステップS530では、検出部353は、処理対象の共有点を中心とする判定領域JAを設定する(図14(A))。具体的には、検出部353は、判定領域JAの幅JW(単位は、画素)を、処理対象の共有点を含む囲み線の線幅LWに基づいて決定する。具体的には、判定領域JAの幅JWは、下記の式(4)を用いて決定される。
JW=(LW×5)+1 ...(4)
囲み線の線幅LWには、共有点を含む囲み線について実行された線判定処理(図5のステップS220、図6)において算出された値が用いられる。ここで、囲み線の線幅LWとして、処理対象の共有点を構成するオブジェクト画素が判定線上に連続する画素数、例えば、図14(A)の例では、判定線A4と囲み線66Dとの共有点(交点)CP4の画素数が用いられても良い。
ステップS535では、検出部353は、判定領域JAの外縁と、共有点を含む囲み線と、の交点を検出する。ここで、判定領域JAの外縁は、判定線によって分断された2個の外縁部に区分することができる。例えば、図14(A)に示す判定線A4のように、横方向(X方向)と平行な判定線の場合には、判定領域JAの外縁は、上側外縁部UAと、下側外縁部BAと、に区分できる。検出部353は、判定領域JAの外縁と、共有点を含む囲み線と、の交点が、上側外縁部UAと下側外縁部BAとのうちのどちらの外縁部との交点であるかを、併せて検出する。囲み線は、一筆書きされた1本の線であるので、判定領域JAの外縁と、共有点を含む囲み線と、の間には、2個の交点が検出される。本ステップで検出される2個の交点を、第1交点XP1と第2交点XP2とする(図14(A))。
ここで、上記式(4)に示すように、判定領域JAの幅JWが、囲み線の線幅LWに応じて決定されている、具体的には、線幅LWが大きいほど、大きな値に設定される。この理由を説明する。判定領域JAの幅JWが、線幅LWに対して過度に小さい場合には、例えば、極端な例では、判定領域JA内の全体が、囲み線を構成するオブジェクト画素で埋まる場合がある。この場合には、第1交点XP1や第2交点XP2を分離して検出できな可能性や、第1交点XP1や第2交点XP2が、上側外縁部UAと下側外縁部BAとのうちのどちらの外縁部と交差する点であるかを特定できない可能性がある。また、判定領域JAの幅JWが、線幅LWに対して過度に大きい場合には、判定領域JA内を囲み線が複数回に亘って横切る可能性や、囲み線が、判定領域JA内において判定線を複数回に亘って横切る可能性がある。いずれの場合も特定の共有点が交点であるか接点であるかを適切に判定できない可能性が高くなる。本実施例例では、上記式(4)に示すように、判定領域JAの幅JWを、囲み線の線幅LWに応じた適切な値に決定することにより、共有点が交点であるか接点であるかを適切に判定することができる。
ステップS545では、検出部353は、交差条件が満たされるか否かを判断する。交差条件は、図14(A)に示すように、第1交点XP1と第2交点XP2とのうちの一方の交点が、上側外縁部UAとの交点であり、かつ、第1交点XP1と第2交点XP2とのうちの他方の交点が、下側外縁部BAとの交点であることである。図14(A)に示す例では、囲み線66Dと判定線A4とは、共有点CP4において交差しているので、共有点CP4は、交点である。図14(A)の例では、第1交点XP1が上側外縁部UAとの交点であり、第2交点XP2が下側外縁部BAとの交点であるので、上述した交差条件が満たされていることが解る。
一方、第1交点XP1と第2交点XP2との両方が、下側外縁部BAとの交点である場合、または、第1交点XP1と第2交点XP2との両方が、上側外縁部UAとの交点である場合には、交差条件は満たされない。図14(B)を参照して、交差条件が満たされない場合について説明する。図14(B)に示すように、仮に、判定線A4が、図14(B)に示す囲み線OBaとの間に、共有点CPaを有しているとする。図14(B)に示す例では、囲み線OBaと判定線A4とは、共有点CPaにおいて接しているので、共有点CP4は、接点である。図14(B)の例では、第1交点XP1と第2交点XP2との両方が、下側外縁部BAとの交点であるので、上述した交差条件が満たされていないことが解る。
ここで、判定線が、縦方向(Y方向)と平行である場合について、簡単に説明する。図14(C)には、縦方向と平行である判定線A1(図11(B))と、囲み線66Dと、の交点CP1の近傍の拡大図が示されている。この場合は、判定領域JAの外縁は、判定線A1によって分断された左側外縁部LAと、右側外縁部RAと、に区分できる。そして、交差条件は、図14(C)に示すように、第1交点XP1と第2交点XP2とのうちの一方の交点が、左側外縁部LAとの交点であり、かつ、第1交点XP1と第2交点XP2とのうちの他方の交点が、右側外縁部RAとの交点であることである。
以上説明した交差条件を用いて、処理対象の共有点が交点であるか接点であるかを適切に判断することができる。
交差条件が満たされる場合には(ステップS540:YES)、すなわち、処理対象の共有点が交点であると判断される場合には、交点数判断部352は、カウント値Cvに1を加算する(ステップS545)。一方、交差条件が満たされない場合には(ステップS540:NO)、すなわち、処理対象の共有点が接点であると判断される場合には、交点数判断部352は、カウント値Cvに2を加算する(ステップS550)。ここで、共有点が接点であると判断される場合には、カウント値Cvに2を加算する理由については、具体例を示しながら後述する。
カウント値Cvが加算されると、ステップS555では、交点数判断部352は、検出された全ての共有点が処理対象として選択済みであるか否かを判断する。未選択の共有点がある場合には(ステップS555:NO)、交点数判断部352は、ステップS525に戻って、未選択の共有点を選択して、上述したステップS525〜S555までの処理を繰り返す。全ての共有点が選択された場合には(ステップS555:YES)、交点数判断部352は、カウント値Cvを、処理対象の判定線の交点数Mxとして記憶する(ステップS560)。
ステップS565では、交点数判断部352は、ステップS505にて4個の検出方向の全てが選択済みであるか否かを判断する。未選択の検出方向がある場合には(ステップS565:NO)、交点数判断部352は、ステップS505に戻って、未選択の検出方向を選択して、上述したステップS505〜S565までの処理を繰り返す。全ての検出方向が選択された場合には(ステップS565:YES)、交点数判断部352は、交点数特定処理を終了する。1回の交点数特定処理によって、1個の基点に基づく1組の判定線(4本の判定線)について、それぞれ、交点数が特定される。
図11(B)の例では、重心CC1に位置する重心画素を基点とする4本の判定線A1〜A4のそれぞれと、囲み線66Dとは、1個ずつの交点CP1〜CP4を有するので、4本の判定線A1〜A4の交点数Mxは、それぞれ、「1」に特定される。また、図11(C)の例であって、処理対象の基点として、図12のステップS430で、位置UPの上端画素が選択された場合には、上端画素を基点とする4本の判定線A11〜A14のそれぞれと、囲み線SL1とは、1個ずつの交点CP11〜CP14を有するので、4本の判定線A11〜A14の交点数Mxは、それぞれ、「1」に特定される。また、図11(C)の例では、位置BPの下端画素を基点とする4本の判定線A21〜A24のうち、3本の判定線A21、A22、A24のそれぞれと、囲み線SL1とは、1個ずつの交点CP21、CP22、CP25を有し、1本の判定線A23と、囲み線SL1とは、2個の交点CP23、CP24を有する。したがって、図12のステップS430で、下端画素が選択された場合には、3本の判定線A21、A22、A24のそれぞれの交点数Mxは、それぞれ、「1」に特定され、判定線A23の交点数Mxは、「2」に特定される。
交点数特定処理が終了すると、図12のステップS445では、交点数判断部352は、交点数Mxが奇数であるか否かを判定線ごとに判断し、1組の判定線(4本の判定線)のうち、交点数Mxが奇数である判定線(以下、奇数判定線と呼ぶ)の数LInを特定する。図11(B)の例では、4本の判定線A1〜A4の交点数Mxは、全て「1」であるので、奇数判定線の数LInは「4」である。同様に、図11(C)の例であって、処理対象の基点として、図12のステップS430で、位置UPの上端画素が選択された場合には、奇数判定線の数LInは「4」である。そして、処理対象の基点として、図12のステップS430で、位置BPの下端画素が選択された場合には、奇数判定線の数LInは「3」である。なお、4本の判定線の交点数MxをそれぞれMx(1)〜Mx(2)とすると、LInは、以下の式を用いて算出することができる。
LIn={Mx(1)%2}+{Mx(2)%2}+{Mx(3)%2}+{Mx(4)%2}
ここで、{Mx(n)%2}(nは1以上4以下の整数)は、Mx(n)を2で除した場合の余りを示している。
ステップS450では、内包関係判定部350の条件判断部354は、奇数判定線の数LInが3以上であるか否かを判断する。奇数判定線の数LInが3以上である場合には(ステップS450:YES)、条件判断部354は、対象オブジェクトは、囲み線に内包されていると判定する(ステップS460)。上述した図11(B)、(C)の例では、いずれも奇数判定線の数LInは3以上であるので、対象オブジェクトは、囲み線に内包されていると判定される。
奇数判定線の数LInが3未満である場合には(ステップS450:NO)、内包関係判定部350は、全ての基点をステップS430で選択済みであるか否かを判断する(ステップS455)。未選択の基点がある場合には(ステップS455:NO)、内包関係判定部350は、ステップS430に戻って、未選択の基点を選択して、上述した処理を繰り返す。全ての基点が選択済みである場合(ステップS455:YES)、条件判断部354は、対象オブジェクトは、囲み線に内包されていないと判定する(ステップS465)。
対象オブジェクトの重心CCにオブジェクト画素が存在する場合には、設定される基点は1個である(ステップS415)ので、奇数判定線の数LInが3未満である場合には(ステップS450:NO)、必ずステップS465に処理が移行される。また、対象オブジェクトの重心CCにオブジェクト画素が存在する場合には、設定される基点は2個である。したがって、最初に選択された基点に基づく処理において、奇数判定線の数LInが3未満である場合には(ステップS450:NO)、ステップS430に戻って、もう1個の基点に基づく処理が実行される。そして、2個目の基点に基づく処理において、再び奇数判定線の数LInが3未満である場合には(ステップS450:NO)、ステップS465に処理が移行される。
対象オブジェクトが囲み線に内包されているか否かが判定されると、続くステップS470では、内包関係判定部350は、囲み線以外の全てのオブジェクトが対象オブジェクトとして選択済みであるか否かを判断する。未選択の対象オブジェクトがある場合には(ステップS470:NO)、内包関係判定部350は、ステップS405に戻って、未選択のオブジェクトを選択して、上述した処理を繰り返す。全てのオブジェクトが選択済みである場合(ステップS470:YES)、内包関係判定部350は、内包関係判定処理を終了する。図11(B)(C)の例では、囲み線以外のオブジェクトは1個であるが、後述する具体例のように、囲み線以外のオブジェクトが複数個存在する場合には、それぞれのオブジェクトと囲み線との内包関係が判定される。
内包関係判定処理が終了すると、続くステップS175(図2)では、除去処理部360は、囲み線66と、囲み線66に内包されていると判定されたオブジェクトとを、スキャン画像60(図3(A))から除去するオブジェクト除去処理を実行する。除去処理部360は、部分二値画像PBI(図11(B))に基づいて、スキャン画像60上において、囲み線66と、囲み線66に内包されているオブジェクト(描画65)と、を構成する複数個の画素を特定する。除去処理部360は、特定された複数個の画素の画素値を、スキャン画像60の背景の色を表す画素値に変更する。背景の色を表す画素値は、例えば、原稿の用紙の色(例えば、白)を表す画素値であり、ステップS160(図2)にて算出された二値化のための基準の色を表す画素値(Rave2、Gave2、Bave2)が用いられる。これによって、スキャン画像60から、囲み線66と描画65とが除去された処理済み画像60C(図3(C))を表す処理済みの画像データが生成される。
ステップS180では、画像処理部300は、全ての囲み線が選択済みであるか否かを判断する。未選択の囲み線がある場合には(ステップS180:NO)、画像処理部300は、ステップS150に戻って、未選択の囲み線を選択して、上述したステップS150〜S180までの処理を繰り返す。全ての囲み線が選択された場合には(ステップS180:YES)、画像処理部300は、処理済みの画像データを、スキャンデータ(対象画像データ)の送信元である複合機200に対して送信して(ステップS185)、処理を終了する。
複合機200の画像データ送受信部115は、サーバ400から処理済みの画像データを受信すると、例えば、当該画像データを、不揮発性記憶装置230に格納して処理を終了する。この処理済みの画像データは、例えば、プリンタ部240を用いて、処理済みの画像データによって表される画像を用紙に印刷するために用いられる。
以上説明した本実施例の画像処理によれば、利用者は、所望のオブジェクトを赤色のペンで記入した囲み線で囲んだ原稿を、複合機200のスキャナ部250に読み取らせることによって、原稿から所望のオブジェクトが除去された画像を表す画像データを取得することができる。なお、囲み線は、除去すべきオブジェクトの指定以外にも用いられ得る。例えば、画像処理部300は、オブジェクト除去処理(ステップS175)に代えて、囲み線で囲まれたオブジェクトを表す画像だけ含み、囲み線で囲まれていないオブジェクトを除去した画像を表す画像データを生成する処理を実行しても良い。一般的に言えば、囲み線によって囲まれたオブジェクトを特定し、特定されたオブジェクトを含む部分画像を表す部分画像データを用いて、所定の画像処理を実行するために、囲み線は用いられ得る。
以上説明した本実施例の内包関係判定処理によれば、1組の判定線、すなわち、4本の判定線のうち、囲み線との交点が奇数である線の数(奇数判定線の数LIn)が、3以上あるか否かに基づいて、対象オブジェクトが囲み線に内包されているか否かを適切に判断することができる。
図11(B)の第1の二値画像PBI1を例に、先ず、判定線と囲み線との交点が偶数か奇数かに基づいて、対象オブジェクトと囲み線との内包関係が判定できる理由を説明する。囲み線66Dが閉曲線であり、判定線の終点(例えば、部分二値画像PBIの画像の端)は、閉曲線の外側にあると仮定する。判定線の基点から終点に向かって走査する場合に、囲み線66Dとの交点を通過する度に、判定線上の注目画素(走査位置)の内外関係が変化する。内外関係が変化するとは、注目画素の位置が、囲み線66Dの内側から外側に変化する、あるいは、囲み線66Dの外側から内側に変化することを意味する。したがって、判定線の基点が囲み線66Dの内側に位置する場合には、判定線の基点から終点までの間の交点数Mxは、終点が必ず囲み線66Dの外側に位置することを考慮すると、奇数になることが解る。
逆に、判定線の基点が囲み線66Dの外側に位置する場合には、判定線の基点から終点までの間の交点数Mxは、偶数になることが解る。例えば、仮に、囲み線66Dの外側に位置するサンプル点SP1(図11(B))から上下左右方向にそれぞれ延びる4本の判定線A5〜A8を考える。2本の判定線A5、A7は、それぞれ囲み線66Dとの間に、2個の交点を有する(図11(B)のCP5〜CP8)。一方、他の2本の判定線A6、A8は、いずれも囲み線66Dとの間に交点を有さない(0個の交点を有する)。このように、囲み線66Dの外側に位置するサンプル点SP1を基点とする判定線の基点から終点までの間の交点数Mxは、偶数(この例では、0または2)である。
このように、処理オブジェクト上を基点とする判定線を設定すれば、判定線と囲み線との交点数Mxに基づいて、処理対象のオブジェクトが、囲み線に内包されている(囲み線の内側にある)か否かを、判定することができる。ここで、4本の判定線A1〜A4を設定し、交点数Mxが奇数である判定線が3以上である場合に、処理対象のオブジェクトが囲み線に内包されていると判断している理由を説明する。これは、例外的に、処理対象のオブジェクトが囲み線に内包されている場合でも、交点数Mxが偶数になる場合があり得るからである。例えば、囲み線66Dは、手書きで記入されることを想定しているので、図11(B)に示すように、一筆書きの両端部の近傍に隙間BTが生じる場合がある。仮に、図11(B)の下方向の判定線A2が、隙間BTを通ると、判定線A2の交点数Mxは、0(偶数)になってしまうことが解る。このような場合に、例えば、1本の判定線に基づいて判定を行うとすれば、誤った判定結果となり得ることは明らかである。本実施例では、4本の判定線のうちの奇数判定線の数LInが、3以上であるか否かに基づいているので、例外的に、1本の判定線の交点数Mxが偶数になった場合であっても適切に内包関係を判定することができる。
ここで、本実施例の内包関係処理の処理対象となる二値画像は、上述した第1の二値画像PBI1(図11(B))や第2の二値画像PBI2(図11(C))のような比較的シンプルな画像に限られない。例えば、対象オブジェクトの個数は、複数個である場合があり、その形状や配置が複雑である場合がある。また、複数個の対象オブジェクトの一部の2個以上のオブジェクトが囲み線に内包され、残りの2個以上のオブジェクトが囲み線に内包されないように、囲み線が記入されている場合などには、囲み線の形状が複雑になる場合もある。
図15は、本実施例の効果を説明するためのサンプル画像としての二値画像BI2を示す図である。この二値画像BI2内には、7個のオブジェクトOB3〜OB9が、分散して配置されている。そして、囲み線SL2は、5個のオブジェクトOB4、OB6〜OB9を内包し、2個のオブジェクトOB3、OB5を内包しないように、記入された線を表している。このために、囲み線SL2は、比較的、複雑な形状を有している。この例で、オブジェクトOB3を対象オブジェクトとして、内包関係判定処理が実行される場合を考える。オブジェクトOB3の重心CC3を基点とする4本の判定線A31〜A34のうちの1本の判定線A34と、囲み線SL2と、の間には、3個の共有点CP31〜CP33が存在する。ここで、共有点CP31〜CP33が、接点であるか交点であるかを検出することなく、交点数Mxを特定すると、オブジェクトOB3は、囲み線SLに内包されていないにも拘わらずに、判定線A34の交点数Mxは、奇数(3個)となってしまう。
同様に、オブジェクトOB4の重心CC4を基点とする4本の判定線A41〜A44のうちの1本の判定線A43と、囲み線SL2と、の間には、4個の共有点CP41〜CP44が存在する。共有点CP41〜CP44が、接点であるか交点であるかを検出することなく、交点数Mxを特定すると、オブジェクトOB4は、囲み線SLに内包されているにも拘わらずに、判定線A43の交点数Mxは、偶数(4個)となってしまう。もし、このように、接点を有する判定線が、1組の判定線の中に2本以上ある場合には、内包関係が誤って判定されることになる。
本実施例の内包関係特定処理によれば、検出部353は、判定線と囲み線との接点を検出し、交点数判断部352は、交点数Mxを判断する場合に、検出された接点を、2個の交点としてカウントする(図13:ステップS540〜S550)。例えば、上述した囲み線SLに内包されていないオブジェクトOB3の判定線A34の交点数Mxは、共有点CP31が2個の交点としてカウントされるので、偶数(4個)であると特定される。また、上述した囲み線SLに内包されているオブジェクトOB4の判定線A43の交点数Mxは、共有点CP41が2個の交点としてカウントされるので、奇数(5個)であると特定される。したがって、対象オブジェクトが囲み線に内包されているか否かをさらに適切に判断することができる。なお、検出された接点は、2個の交点に限らず、任意の偶数の交点としてカウントされて良い。こうすれば、本実施例と同様に、対象オブジェクトが囲み線に内包されているか否かをさらに適切に判断することができる。任意の偶数は、「0」を含み、検出された接点が0個の交点としてカウントされるとは、接点が検出された場合には、カウント値Cvがカウントアップされないことを意味する。
さらに、本実施例の内包関係特定処理では、重心CCにオブジェクト画素が存在することを条件に、基点を重心画素に設定する。したがって、対象オブジェクトが囲み線に内包されているか否かをさらに適切に判断することができる。すなわち、基点が対象オブジェクト内の偏った位置に設定された結果、判定線が偏った位置に配置される場合と比較して、正しい内包関係を判定できる可能性が高い。
さらに、本実施例の内包関係特定処理では、複数組のそれぞれの4本の判定線について、対象オブジェクトと囲み線との交点の個数が偶数であるか奇数であるかを判断する場合がある。そして、複数組の4本の判定線のうち少なくとも1組が、判定条件を満たす場合に、対象オブジェクトが囲み線に内包されていると判断している。具体的には、対象オブジェクトの重心CCに、オブジェクト画素が存在しない場合に、上端画素を基点とする第1組の4本の判定線と、第2組の4本の判定線と、を用いて、内包関係を判定している(図12:ステップS415〜S420など)。すなわち、図11(C)に示すように、重心にオブジェクト画素が存在しない場合には、対象オブジェクトが囲み線に内包されているにも拘わらずに、重心の位置は、囲み線の外側に位置する可能性がある。逆に、対象オブジェクトが囲み線に内包されていないにも拘わらずに、重心の位置は、囲み線の内側に位置する可能性がある。このために、この場合には、重心の位置とは異なる位置であって、オブジェクト画素が存在する位置に基点を設定している。さらに、基点の位置が対象オブジェクト内の偏った位置に設定され得ることで、内包関係の判定精度が低下する可能性を低減するために、複数組の4本の判定線を用いて内包関係を判定している。この結果、対象オブジェクトが囲み線に内包されているか否かをさらに適切に判断することができる。
さらに、本実施例では、4本の判定線は、90度ずつの角度を成すように設定されている。すなわち、例えば、図11(B)の判定線A1の方向を0度の方向とし、右回りを正方向とすると、判定線A4は、90度の方向に設定され、判定線A2は、180度の方向に設定され、判定線A3は、270度の方向に設定されている。この結果、複数本の判定線の交点の位置が、互いに過度に近くなることを抑制できる。この結果、内包関係をより適切に判断することができる。
B.第2実施例:
図16は、第2実施例の内包関係特定処理のフローチャートである。図16のフローチャートにおいて、第1実施例の内包関係特定処理(図12)と異なるステップについては、符号の末尾に「A」を付し、同一のステップについては、図12のフローチャートと同じ符号を付した。
本実施例の内包関係特定処理によれば、検出部353は、判定線と囲み線との接点を検出し、交点数判断部352は、交点数Mxを判断する場合に、検出された接点を、2個の交点としてカウントする(図13:ステップS540〜S550)。例えば、上述した囲み線SLに内包されていないオブジェクトOB3の判定線A34の交点数Mxは、偶数(4個)であると特定する。また、上述した囲み線SLに内包されているオブジェクトOB4の判定線A43の交点数Mxは、奇数(5個)であると特定する。したがって、対象オブジェクトが囲み線に内包されているか否かをさらに適切に判断することができる。
第2実施例の内包関係特定処理では、ステップS415にて、対象オブジェクトの重心CCにオブジェクト画素が存在すると判断された場合には(ステップS415:YES)、第1実施例と同様に、重心画素を、判定線を設定するための基点に設定する(ステップS425)。一方、対象オブジェクトの重心CCにオブジェクト画素が存在しないと判断された場合には(ステップS415:NO)、第1実施例と異なり、交点数判断部352は、対象オブジェクトを構成する複数個のオブジェクト画素の中から、ランダムに選択された1個のオブジェクト画素を、判定線を設定するための基点に設定する(ステップS420A)。例えば、交点数判断部352は、乱数値を取得し、当該乱数値に基づいて1個のオブジェクト画素を選択する。
基点の設定に続いて、第1実施例と同様に、交点数特定処理(ステップS440)と、奇数判定線の数LInの特定(ステップS445)が実行される。そして、奇数判定線の数LInが3以上である場合には(ステップS450:YES)、第1実施例と同様に、対象オブジェクトは、囲み線に内包されていると判定される(ステップS460)。
一方、奇数判定線の数LInが3未満である場合には(ステップS450:NO)、第1実施例とは異なり、交点数判断部352の条件判断部354は、奇数判定線の数LInが2であるか否かを判断する(ステップS455A)。奇数判定線の数LInが2未満である場合には(ステップS455A:NO)、交点数判断部352は、対象オブジェクトは、囲み線に内包されていないと判定する(ステップS465)。
一方、奇数判定線の数LInが2である場合には(ステップS455A:YES)、交点数判断部352は、規定回数の判定が実行されたか否かを判断する(ステップS457A)。すなわち、交点数判断部352は、ステップS440〜S455Aの処理が実行された回数が規定回数に達したか否かを判断する(ステップS457A)。規定回数は、例えば、2〜3程度に設定される。
規定回数の判定が実行されていない場合には(ステップS457A:NO)、交点数判断部352は、上述したステップS420に移行して、ランダムでオブジェクト画素を選択して、ステップS440以降の処理を繰り返す。規定回数の判定が実行された場合には(ステップS457A:YES)、交点数判断部352は、交点数判断部352は、対象オブジェクトは、囲み線に内包されていないと判定する(ステップS465)。
図17は、第2実施例を説明するためのサンプル画像としての二値画像BI3を示す図である。図17の二値画像BI3を例に、第2実施例の効果について説明する。図17の二値画像BI3は、3個のオブジェクトOB10〜OB12が分散して配置されている。そして、囲み線SL3は、2個のオブジェクトOB11、OB12を内包し、1個のオブジェクトOB10を内包しないように、記入された線を表している。囲み線SL3は、二値画像BI2の右端付近において、囲み線SL3の一部と、囲み線SL3の他の一部と、が接触してくびれた形状を有している。
この例で、オブジェクトOB12を対象オブジェクトとして、第2実施例の内包関係判定処理が実行される場合を考える。オブジェクトOB12の重心CC12を基点とする4本の判定線A51〜A54のうちの1本の判定線A53と、囲み線SL2と、の間には、2個の交点CP53、CP54が存在する。ここで、交点CP54は、囲み線SL3の一部と、囲み線SL3の他の一部と、が接触している部分に位置している。この結果、本来は、異なる交点として特定される2個の交点が1個の交点として特定されている。このために、オブジェクトOB12は、囲み線SL3に内包されているにも拘わらずに、判定線A54の交点数Mxは、偶数(2個)となってしまう。さらに、判定線A51は、囲み線SLの隙間BTを通っているために、オブジェクトOB12は、囲み線SL3に内包されているにも拘わらずに、判定線A51の交点数Mxは、偶数(0個)となってしまう。そして、他の2本の判定線A52、53はの交点数Mxは、奇数(1個)となる。この結果、重心CC12の画素を基点とする第1組の4本の判定線を用いた場合には、奇数判定線の数LInは、「2」になる。すなわち、交点数Mxが奇数である判定線の数と、交点数Mxが偶数である判定線の数が等しくなり、内包関係を正しく判定することが困難になる。
このようなケースが生じる可能性は、偶然が重なった場合であり、比較的低いと考えられるので、基点の位置をずらして、再び判定を実行すれば、正しい内包関係を判定できると考えられる。そこで、第2実施例では、奇数判定線の数LInは、「2」である場合には(ステップS455A:YES)、規定回数を超えないことを条件に、例えば、乱数値を取得することによってランダムに選択されたオブジェクト画素を新たな基点として選択して、内包関係の判定を再び実行している。この結果、第1のオブジェクトが第2のオブジェクトに内包されているか否かの判定精度を向上することができる。図17の例では、重心CC12とは異なる位置RPのオブジェクト画素を基点とする第2組の4本の判定線A61〜A65を用いた場合には、奇数判定線の数LInは「4」となる。すなわち、ランダムに選択されたオブジェクト画素が、例えば、位置RPのオブジェクト画素のように、重心CC12からずれた位置に設定された場合には、内包関係を正しく判定できることが解る。すなわち、第2実施例によれば、第1組の4本の判定線を用いて適切な判断を行うことが困難な場合に、第2組の4本の判定線を用いて、適切な判断を行うことができる
また、第2実施例では、第1実施例と同様に、重心CCにオブジェクト画素が存在することを条件に、最初の基点を重心画素に設定する。この結果、重心画素を基点とする4本の判定線を用いる判定を優先的に行うので、内包関係をより適切に判断することができる。
B.変形例
(1)上記各実施例の内包関係特定処理では、対象オブジェクトが囲み線に内包されているか否かを判定しているが、対象オブジェクトが、線とは言えない程度の太さや形状を有するオブジェクトに、内包されているか否かが判定しても良い。また、1組あたりの判定線の数は、4本に限らず、2本、3本、5本などの任意の数に設定され得る。また、対象オブジェクトが囲み線に内包されているかを判断するためのしきい値となる本数は、3本に限らず、1組あたりの判定線の数などに応じて適宜に設定され得る。また、1組の判定線の基点の数は、1個に限らず、例えば、2個の基点から2本ずつの判定線を規定することにより、合計4本の判定線を、1組の判定線として規定しても良い。また、4個の基点から1本ずつの判定線を規定しても良い。一般的に言えば、交点数判断部352は、第1のオブジェクト内の1個以上の画素を基点とするM本の判定線(Mは、2以上の整数)のそれぞれと、第2のオブジェクトと、の交点の個数が偶数であるか奇数であるかを、判定線ごとに判断することが好ましい。そして、条件判断部354は、M本の判定線のうち、交点の個数が奇数である線がN以上(Nは、N<Mの整数)であることを含む判定条件が満たされた場合に、第1のオブジェクトが第2のオブジェクトに内包されていると判断することが好ましい。
(2)また、上記各実施例では、1組の判定線に含まれる4本の判定線は、90度ずつの角度を成すように設定されているが、これに限られず、任意の角度を成すように設定されて良い。しかしながら、複数本の判定線の交点の位置が、互いに過度に近くなることを抑制する観点から、1組の判定線に含まれるM本の判定線のうちの第1の線が延びる方向と、第2の線が延びる方向と、が為す2個の角度のうちの小さい角度は、略90度以上であることが好ましい。この結果、内包関係をより適切に判断することができる。
(3)上記第2実施例では、第1組の4本の判定線が判定条件(LIn≧3)を満たさない場合であって、LIn=2である場合に、第2組の4本の判定線に基づく判定が実行されている。第2組の4本の判定線に基づく判定が実行される条件は、LIn=2であることに限られない。例えば、一組あたりの判定線の本数が、6本である場合には、例えば、判定条件をLIn≧5とし、第2組の4本の判定線に基づく判定が実行される条件は、L2≦LIn≦4であることとしても良い。
(4)上記各実施例において、判定線の基点として用いられている対象オブジェクトの重心CCに代えて、対象オブジェクトの中央部の位置である他の位置が用いられても良い。例えば、対象オブジェクトの外接矩形の重心を用いられてもよい。また、対象オブジェクトを構成する全てのオブジェクト画素のX座標の分布と、Y座標の分布を取った場合における、X座標の中央値(メジアン)や最頻値と、X座標の中央値(メジアン)や最頻値と、によって規定される位置が用いられても良い。あるいは、これらの中央部の位置の候補のうち、オブジェクト画素が存在する位置を用いても良い。
(5)上記各実施例では、互いに異なる基点を用いることによって、第1組の判定線と、第2の判定線と、を規定している。これに代えて、互いに異なる検出方向を用いることによって、第1組の判定線と、第2の判定線と、を規定しても良い。例えば、第1組の判定線と、第2の判定線とは、同一の基点を有し、かつ、検出方向が45度ずつずれていても良い。
(6)上記各実施例では、基点から二値画像の外側に向かって、判定線上を走査することによって、交点数Mxを特定しているが、これに代えて、二値画像の端部の画素から基点となるオブジェクト画素に向かって、判定線上を走査することによって、交点数Mxを特定してもよい。あるいは、基点を通り、二値画像の一端から他端に至る直線を設定して、当該直線の一端から他端までを走査し、基点に到達した時点で、交点数Mxを初期化することで、一本の直線上の走査で、2本の判定線の交点数Mxを特定しても良い。すなわち、判定線を含む直線は、特定の画素を基点とする半直線に限られず、基点となるべき画素を含む直線であってもよい。
(7)複数組の判定線を用いる判定の方法は、上記実施例に限られない。例えば、内包関係判定部350は、N組(Nは、奇数であることが好ましい)の判定線に基づく、N回の判定を実行して、対象オブジェクトが囲み線に内包されているかについて、N個の判定結果を取得しても良い。そして、内包関係判定部350は、N個の判定結果に基づく、多数決によって、最終的な判定結果を決定しても良い。
(8)なお、本実施例の対象画像データは、スキャナによって読み取られたスキャンデータが採用されているが、例えば、デジタルカメラなどで撮影された撮影画像データであっても良いし、文書や描画などを作成するためのアプリケーションプログラムを用いて生成された画像データであっても良い。また、囲み線は、例えば、ペンを用いて記入された囲み線に限られず、上記アプリケーションプログラムを用いて、画像内に描画された囲み線であっても良い。
(9)上記実施例においてサーバ400の画像処理部300によって実行される画像処理は、サーバ400とは異なる装置、例えば、複合機200と接続されたパーソナルコンピュータ500(図1)によって実行されても良い。この場合には、この画像処理は、例えば、複合機200のスキャナ部250や、単体のスキャナ(図示せず)を、制御するためにパーソナルコンピュータ500にインストールされたスキャナドライバキャナによって実行されても良い。また、この画像処理は、複合機200のCPU210や、単体のスキャナのCPUによって実行されても良い。また、サーバ400は、1つの筐体の装置に限らず、複数の計算機を含む計算システム(例えば、いわゆるクラウドコンピューティングを実現する分散型の計算システム)によって構成されていても良い。
(10)上記実施例において、ハードウェアによって実現されていた構成の一部をソフトウェアに置き換えるようにしてもよく、逆に、ソフトウェアによって実現されていた構成の一部をハードウェアに置き換えるようにしてもよい。