まず、実施形態の説明に先立って本明細書で用いる言葉の定義を行う。
「オリジナル文字」とは、スキャン画像中の文字のことである。
「認識文字」とは、オリジナル文字を文字認識することで得られた文字コード、又は、編集ウィンドウに表示される、その文字コードに対応する文字のことである。この認識文字は、編集ウィンドウ用文字サイズ(編集ウィンドウ用文字サイズとは、編集ウィンドウ用に設定された文字サイズという意味である)で編集ウィンドウ上に表示される。
「文字の編集」は、ユーザが、編集ウィンドウから認識文字を削除して、代わりの文字を編集ウィンドウに入力する行為を示す。編集後の文字とは、入力された代わりの文字、又は、その文字に対応する文字コードのことである。この編集後の文字は、編集ウィンドウ上に表示される場合には、編集ウィンドウ用文字サイズで表示されるが、スキャン画像上に表示される場合には、スキャン画像用文字サイズで表示される。もちろん、一部の認識文字を削除して変わりの文字を入力することも「文字の編集」に含まれる。また、単に認識文字を削除する行為や、認識文字を削除することなくユーザが追加の文字を編集ウィンドウに入力する行為も「文字の編集」に含まれる。
なお、スキャン画像用文字サイズも編集ウィンドウ用文字サイズも共にそのデフォルト値は、予め保存部302に保存されているものとする。
以下、本発明を実施するための形態について図面を用いて説明する。
<第1の実施形態>
<複写機の構成と情報処理装置の構成>
図2に本実施形態における複写機200の構成を示す。複写機200は、スキャナ201、送受信部202、プリンタ203を有する。
図3に本実施形態における情報処理装置300の構成を示す。情報処理装置300は、送受信部301、保存部302、制御部303、表示部304、及び受付部305を有する。また、情報処理装置300は、不図示のCPUとROMとRAMとを内部に有する。CPUはROMから情報処理装置300のプログラムをロードし、一次保存領域としてRAMを利用して情報処理装置300のプログラムを実行する。以上の動作により、図3に示す各部の処理が実行される。なお、受付部305は、キーボードとマウスとを含む形態が一般的であるが、この形態に限られない。また、受付部305と表示部304とは一体であっても良い。その場合、受付部305と表示部304をまとめてタッチパネルと呼ぶことになり、実施形態中のクリックなる記載は、タッチと読み替えて以下の実施形態を解釈することになる。
<スキャンから領域分割、文字認識まで>
次に、本実施形態で行なう処理を説明する。複写機200のスキャナが文書をスキャンすると、スキャン画像(スキャン画像データとも言う)が生成される。生成されたスキャン画像を送受信部202が情報処理装置300に送信する。すると、情報処理装置300の送受信部301がこれを受信し、保存部302にそのスキャン画像を保存する。
ユーザが受付部305を介して、保存部302に保存されている複数のスキャン画像の中から、一つのスキャン画像を選択する。すると、制御部303は、そのスキャン画像を表示部304に表示する。
ユーザが受付部305を介して、表示部304に表示されたスキャン画像の解析を指示する。すると、制御部303は、後述する領域分割と、文字認識と、認識セル枠表示との三つの処理を実行し、実行結果を表示部304に表示する。
<領域分割(1)−(5)、文字認識(6)、認識セル枠表示(7)の説明>
次に、前述の領域分割処理と文字認識処理と認識セル枠表示処理の詳細について説明する。領域分割処理は、以下の(1)から(5)の処理で行なわれる。図1のスキャン画像に対して以下で説明する領域分割処理を行なうことで、図4の太線や点線で示すような領域が抽出されることになる。
(1)二値化
制御部303は、スキャン画像に対して2値化を行うことにより、2値画像を得る。この2値化により、例えばスキャン画像の画素のうち、閾値より濃い色の画素は黒画素、その閾値以下の薄い色の画素は白画素となった2値画像が得られる。なお、以下では、スキャン画像が100DPIであるものとして説明を行うが、スキャン画像がこの解像度に限られないのは言うまでもない。
(2)黒画素塊検出
制御部303は、2値画像に対して8連結で繋がる黒画素の輪郭を追跡することにより、8方向の何れかの方向で連続して存在する黒画素の塊(黒画素塊)を検出する。8連結とは、左上、左、左下、下、右下、右、右上、上の8つの方向の何れかで、同じ色(今回のケースでは黒)の画素が連続しているという意味である。なお、4連結とは、左、下、右、上の4つの方向の何れかで同じ色の画素が連続しているという意味である。この黒画素塊検出処理では、8方向に存在する8つの隣接画素の何れもが黒画素ではない単独の黒画素は検出されない。一方、8方向に存在する8つの隣接画素の何れか1つにでも黒画素が存在する黒画素は、その隣接する黒画素と共に、黒画素塊として検出されることになる。図5は、制御部303が検出した黒画素塊501の一例を含む図である。また制御部303は、検出した黒画素塊の外接矩形の位置情報を算出する。外接矩形の位置情報とは、外接矩形の四頂点のX, Y座標情報のことである。なお、X軸は右方向に伸び、Y軸は下方向に伸びているものとする。幅は、X軸方向の長さ、高さは、Y軸方向の長さを指す。図5は、黒画素塊501の外接矩形502を含んでいる。なお、本明細書で矩形と表現した時には、斜め向きの矩形は含まれず、四辺の全てがX座標軸,Y,座標軸の何れかと平行な矩形を表すものとする。
(3)表領域検出
制御部303は検出した黒画素塊が所定の条件に該当するか判定し、表領域を検出する。例えば、制御部303は以下の全てに該当する黒画素塊を、表の枠線を構成する黒画素塊であると判定する。
(a)黒画素塊の外接矩形の幅及び高さが閾値以上(たとえば、100画素(0.25cm)以上)である。
(b)外接矩形の内部における黒画素塊の充填率が閾値以下である(たとえば、黒画素塊が外接矩形に占める割合が20%以下)。
(c)黒画素塊の最大幅及び高さと、その外接矩形の幅及び高さとの差が何れも小さい(たとえば、黒画素塊の最大幅及び高さと、その外接矩形の幅及び高さの画素の差がともに10画素以下)。
制御部303は、表の枠線を構成すると判定した黒画素塊の外接矩形の位置情報を保存部302に保存する。以下では、そのように保存された位置情報を持つ外接矩形を表領域と呼ぶ。ここでは、図5の黒画素塊501は上記の(a)から(c)の判定処理の結果、表の枠線を構成すると判定されたものとする。それに伴い、外接矩形502は、表領域と呼ばれることになる。なお、図5においては数字「123」や「57」も黒画素塊として検出されているものの、上記の所定の条件に該当しないので、これらの黒画素塊の外接矩形は表領域として検出されていないものとする。
(4)認識セルの特定
制御部303は、検出した表領域内部のセル(以下、認識セルという)を特定する。認識セルを特定するためには、表領域内部の白画素の輪郭を追跡することにより、白画素塊を検出する必要がある。その上で、その白画素塊が所定の条件に合致する場合に、その白画素塊の外接矩形は、認識セルとして特定される。前述の図5は、外接矩形502(すなわち、表領域)内部の認識セル503及び504を含んでいる。制御部303は、特定された認識セルの位置情報を保存部302に保存する。
なお、例えば、所定の条件に合致するとは、以下の三つの条件の全てに合致することを指す。
(a)白画素塊の外接矩形の幅、高さが閾値以上(たとえば、20画素)である。
(b)外接矩形の内部における黒画素塊の充填率が閾値以下である(たとえば、黒画素塊が外接矩形に占める割合が20%以下)。
(c)白画素塊の最大幅及び高さと、その外接矩形の幅及び高さとの差が何れも小さい(たとえば、白画素塊の最大幅及び高さと、その外接矩形の幅及び高さとの画素の差がともに5画素以下)。
(5)認識セル内の文字領域の特定
制御部303は、各認識セルの内部に、その各認識セルに内接する白画素塊によって囲まれた黒画素塊があるか判定する。そして、黒画素塊があると判定した場合、あると判定された全ての黒画素塊に外接矩形を設定する。
さらに、制御部303は、一つの認識セルの中に複数の外接矩形を設定した場合には、外接矩形同士の距離が閾値(例えば20画素・・・0.5cm)以内であるか判定する。具体的には、制御部303は、外接矩形を一つ一つ選択し、選択された外接矩形からの距離が閾値以内である外接矩形を検出する。
さらに、制御部303は、選択された外接矩形からの距離が閾値以内である外接矩形を検出した場合、検出した外接矩形と、選択された外接矩形とを統合する。即ち、制御部303は、両方の外接矩形に外接する新たな外接矩形を設定し、その代わり、選択された外接矩形と、検出された外接矩形とを削除する。
新たな外接矩形の設定及び二つの外接矩形の削除が完了した後、制御部303は、その認識セル内の外接矩形をまた初めから一つ一つ選択し、互いの間の距離が閾値以内である外接矩形同士を統合していく。以上の処理を、互いの間の距離が閾値以内である外接矩形が無くなるまで繰り返して、外接矩形同士の統合を行なう。
以上の通り、この認識セル内の文字領域の特定処理においては、一つの認識セルの内部に存在する外接矩形同士の統合を行うが、認識セルをまたぐ外接矩形同士の統合を行わない。
以上の処理が終わって依然として設定されている、認識セル内部の黒画素塊の外接矩形は、文字領域と呼ばれる。以上の処理を認識セル内の文字領域の特定と呼ぶ。制御部303は、認識セルの内部に存在する文字領域の位置情報を、当該認識セルに関連付けて保存部302に保存する。
図5は文字領域505,506を含んでいる図である。すなわち、認識セル503には、文字領域505が、認識セル504には文字領域506が関連付けられ、保存部302に保存される。
前述の通り図1のスキャン画像に対して行われた領域分割の結果が図4に示されている。図4では、特定された認識セルを示す外接矩形に太線枠を付け、文字領域を示す外接矩形に点線枠を付けている。図4の例では、認識セル401、402、403、404、406、407と、文字領域405を含んでいる。なお、図4の例では、符号を付していない他の矩形も認識セルや文字領域であるが、ここでは一部の認識セルや文字領域のみに符号を付している。
この図4では、認識セル403内部の罫線が掠れてしまっているため、本来は、複数のセルからなる認識セル403が1つの認識セルとして特定されている。また、認識セル406、407は、本来は、単一のセルであるにも関わらず、ノイズの関係で、別々の認識セルとして特定されている。このように本来の認識すべき認識セルと異なるセルを認識セルとして特定する場合の対応方法については、後述する。
(6)文字認識
制御部303は、各文字領域に対して文字認識を行うことによって、各文字領域に対応する認識文字を得る。認識文字は、対応する文字領域に関連付けて保存部302に保存する。認識文字が対応する文字領域と関連付けらるということは、認識文字は、文字領域と予め関連付けられている認識セルとも関連付けられることになる。文字認識を行わない場合、もしくは文字認識に失敗した場合は、文字領域に関連付けられる認識文字はない。
上記の(1)から(6)までの処理、すなわち領域分割処理と文字認識処理とを行なった結果保存部302に保存される情報は図5では以下のとおりになる。認識セル503には、文字領域505と、認識文字「123」とが関連付けられて保存部302に保存される。また、認識セル504には文字領域506と、認識文字「57」とが関連付けられ、保存部302に保存される。
(7)認識セル枠表示
制御部303は、各認識セルを強調表示した画面を表示部304に表示する。すなわち、制御部303は、各認識セルの四辺(即ち、前述の白画素塊の外接矩形の四辺)に太線枠を付けてスキャン画像を表示部304に表示する。図1のスキャン画像を解析した結果、各認識セルの四辺に太線枠をつけて表示部304に表示した画面は図6である。すなわち、図6は、図1のスキャン画像に対して、前述の領域分割と、文字認識と、認識セル枠表示との三つの処理を実行した後に表示部304に表示される画面である。なお、枠の形態は、太線でなくても実線でなくても良く、黒でなくても良いのは言うまでも無いが、これ以降は、太線であるものとして説明を続ける。また、この(7)認識セル枠表示の処理で太線枠と共に表示されるスキャン画像は、(1)−(6)の処理が行われる前のスキャン画像であり、即ち、2値化前のスキャン画像である。
以上の処理が、ユーザがスキャン画像の解析を指示した際に行なわれる処理であり、図1のスキャン画像の解析の結果、図6のような画面が表示部304に表示されている。
<表領域内の編集処理の説明>
次に、図6のような画面が表示部304に表示された後に、ユーザが認識セルを指定して表領域内を編集する処理について説明する。
図7は、表領域内の編集処理のフローチャートを示す図である。ステップS701において受付部305は、ユーザからの認識セルの選択を受け付ける。例えば、ユーザは、受付部305を介して、表示部304に表示されている図6における任意の箇所をクリックする。なお、本明細書においてクリックとは、マウスの左ボタンを押して、すぐに(押してから一定時間内に)離す行為のことである。クリックされた箇所が認識セルの外接矩形の内側の場合に、制御部303は、その認識セルが選択されたと判定する。
次に、ステップS702において制御部303は、ステップS701で選択を受け付けた認識セルの編集ウィンドウと、認識セル位置を変更するためのハンドルとを表示する。編集ウィンドウと認識セル位置変更ハンドルについては図面を元に説明する。
図8に、認識セル802が選択された際に表示される表示画面を示す。ここでは、ユーザによってマウスポインタ801で認識セル802が選択されたことを受付部305が受け付けたものとして以下説明を続ける。
認識セルの選択が受付部305で受け付けられると、制御部303は、編集ウィンドウ804とハンドル803とを表示部304に追加表示する。編集ウィンドウ804は、選択された認識セルの内部のオリジナル文字を編集するためのウィンドウである。ハンドル803は、選択された認識セル802の位置や大きさを変更するためのハンドルである。このハンドル803(認識セル位置変更ハンドルと呼ばれる)は、選択された認識セル802の太線枠の四頂点に追加表示される。図8の例では、ハンドル803は認識セルの四頂点に塗りつぶし矩形として表示される。編集ウィンドウ804は選択された認識セルと重複しない任意の位置の最上面に表示される。
なお、ステップS702の表示処理においては、図8に示すように、選択された認識セル(選択状態の認識セル)が他の認識セルと区別つくようにするのも好ましい。例えば、選択状態の認識セルの枠をより太くするのも好ましい(極太線枠とするのも好ましい)。もちろん他の認識セルと区別つくのであれば他の方法を取っても良い。例えば、選択状態の認識セルの枠を他の色にしたり、点線とするような方法も考えられる。ただし、本明細書では、選択された認識セルを他の認識セルと区別つけるための方法として極太線枠を用いる方法を採用した場合を例に以下説明を続ける。なお、認識セルに対する選択状態が解除された場合には、そうした極太線枠状態から元の状態に戻ることになる(即ち、他の認識セルと同じ太線枠状態に戻ることになる)。
図8の編集ウィンドウ804には、文字入力欄805と、OKボタン806と、Applyボタン807と、Cancelボタン808とが表示されている。編集ウィンドウ804における文字入力欄805には、選択された認識セルに関連付けられている認識文字が編集ウィンドウ用文字サイズで表示される。すなわち、選択された認識セルに関連付けられている文字領域に関連付けられている認識文字が表示される。(表示の詳細処理は図21で説明する)。ユーザはこの文字入力欄805から認識文字を削除し、代わりに、他の文字を入力することができる。そうすることにより、認識文字の編集ができる(編集の詳細処理は図9で説明する)。なお、選択された認識セルと関連付けられている認識文字が無い場合がある。例えば、選択された認識セル内部から文字領域が検出されなかった、もしくは文字領域は検出されたが文字認識が失敗して認識文字が存在しないような場合には、文字入力欄805は空欄となる。
ここで、OKボタン806は、文字の編集を確定する場合にクリックされるボタンである。Applyボタン807は、編集後の文字をスキャン画像上に表示して文字の表示位置を確認したい場合にクリックされるボタンである。OKボタン806とApplyボタン807とのどちらをクリックした場合も編集後の文字はスキャン画像上に表示されることになる。なお、OKボタンとApplyボタンとをクリックした際の基本的な違いは、OKボタンをクリックした場合は認識セルの選択が解除されるのに対して、Applyボタンをクリックした場合は認識セルの選択が解除されないことである。なお、この図8においてApplyボタン807をクリックした場合は、認識セル中に表示する編集後の文字の位置を変更するハンドルが表示される。詳細については後述する。Cancelボタン808は、文字の編集をキャンセルしたい場合にクリックされるボタンである。
以上がステップS702の編集ウィンドウと認識セル位置変更ハンドルとの表示処理である。ステップS702の処理の結果、図8のような画面が表示部304に表示された後、ユーザは受付部305に対して新たな操作を行う。ステップS703において制御部303は、受付部305で受け付けた新たな操作が文字編集かハンドル操作かを判定する。すなわち、受付部305で受け付けた操作が文字編集指示か認識セル位置変更指示かを判定する。ステップS703において受付部305が受け付けた操作が編集ウィンドウ804上での文字編集であると判定した場合、制御部303は、ステップS704の文字編集処理に処理を進める。ユーザが受付部305に対して行った操作が認識セル位置変更ハンドルに対する操作であると判定した場合、制御部303は、ステップS705の認識セル位置変更処理に処理を進める。なお、受け付けた操作が文字編集処理か認識セル位置変更処理かの判定は、例えば次のように行なわれる。ユーザが編集ウィンドウ804上でクリックをするなどして編集ウィンドウ804をアクティブにしたり、認識文字の編集処理を行なっていること(文字の削除や文字の入力)を受け付けた場合などに、制御部303は、文字編集処理を受け付けたと判定する。また、認識セル位置変更ハンドル803に対する操作がなされたことを受け付けた場合、制御部303は認識セル位置変更処理を受け付けたと判定する。
<文字編集処理の説明>
次に、図7のステップS704の文字編集処理の詳細について図9のフローチャートを元に説明する。図9は、文字編集処理のフローチャートを示す図である。
ステップS901で制御部303は、図8に示す画面で表示部304に表示されている、選択された認識セルの認識セル位置変更ハンドル803を非表示にする。
次に、ステップS902で制御部303は、図8に示す画面の編集ウィンドウ804上で編集された後の文字を、編集ウィンドウ用文字サイズで編集ウィンドウ804に表示する。すなわち、ステップS902は、ユーザが認識文字を削除して代わりの文字を入力した後の処理である。
ステップS903で制御部303は、文字編集後にユーザが受付部305に対して行った操作が、別の認識セルの選択か、Applyボタンのクリックか、OKボタンのクリックか、Cancelボタンのクリックかを判定する。Cancelボタンのクリックであると判定した場合には、制御部303は、選択されている認識セルの選択状態を解除して図9の処理を終了する。つまり、ステップS902で編集ウィンドウに表示されている編集後の文字はスキャン画像には反映されない。なお、これ以降では説明を省略するが、選択状態が解除された認識セルは、上述の通り、極太線枠状態から、他の認識セルと同じ太線枠状態に戻ることになる。
ステップS903においてCencelボタンのクリック以外であると判定した場合には、ステップS904において制御部303は、選択されている認識セル内部(即ち、スキャン画像におけるその認識セルの内部)の色を全て削除する。すなわち、認識セルの元となる、白画素塊の外接矩形の内部の色を全て削除する。例えば図5の例で説明すると、認識セル503内部の色を全て削除するということは、認識セル内の文字領域505はもちろんのこと、白画素塊と、さらには一部の黒画素塊も削除することになる。なお、ここで、色を削除するとは、認識セル内の画素の色情報を既定の色情報に置換するという意味である。本実施形態では、規定の色情報が白であるものとして説明を続けるが、白に限るものではない。このステップS904における具体的な処理は、図22−図24を用いて後述する。
次に、ステップS905において制御部303は、編集後の文字を、内部の色を全て削除したその認識セル内部にスキャン画像用文字サイズで配置する。そして、ステップS906において制御部303は、編集後のスキャン画像(即ち、認識セル内部の削除、及び、編集後の文字の配置が完了した画像)を保存部302に保存する。また、表示部304で表示されているスキャン画像をこの編集後のスキャン画像を置き換える。そうすることにより、この編集後のスキャン画像は、各認識セルの外接矩形に太線枠が付けられた状態で表示されることになる。このステップS904からステップS906の処理は、ユーザの操作が別の認識セルの選択か、Applyボタンのクリックか、OKボタンのクリックのいずれの場合でも共通の処理である。なお、現在選択されている認識セルの外接矩形については極太線枠状態で表示されたままとなる。
次に、各操作の個別の処理を説明する。ステップS907では、ユーザの操作を判定する。ステップS903で判定した操作がOKボタンのクリックであれば、制御部303は、選択されている認識セルの選択状態を解除した上で図9の処理を終了する。つまり、編集後のスキャン画像に置き換えた画面上で、極太線枠状態となっている認識セルを、太線枠が付けられた状態に戻して図9の処理を終了する。また、ステップS903で判定した操作が別の認識セルの選択であれば、制御部303は、選択されている認識セルの選択状態を解除した上で図7のステップS702に処理を進める。つまり別の認識セルが選択された場合には、図7のステップS702でその別の認識セルの編集ウィンドウと、その別の認識セルに対して認識セル位置変更ハンドルとが表示されることになる。
また、ステップS903で判定した操作がApplyボタンのクリックであれば、ステップS908において制御部303は、ステップS905で配置された編集後の文字の外接矩形の四頂点に文字位置変更ハンドルを表示する。文字位置変更ハンドルは、認識セル位置変更ハンドルと同様に、文字位置を変更する際に用いられるハンドルである。図10は、図8の編集ウィンドウ804の文字を編集した後に、Applyボタン807をクリックした際に表示される画面を示している。認識セル1002の文字は、編集後の文字1001と同じ文字となっている。そして、図10は図8と異なり、認識セル1002ではなく認識文字(すなわち、文字領域)が極太線枠表示となっており、文字領域の四頂点に文字位置変更ハンドル1003が表示されている。
ユーザがもし編集後の文字の位置を変更したい場合には、この文字位置変更ハンドル1003の位置を動かす操作を受付部305に対して行うことになる。ステップS909において受付部305が文字位置の変更を受け付けると、その操作に応じた文字位置変更を制御部303は行い、さらに、その文字位置変更後の画像を、保存部302で保存されている編集後のスキャン画像と置き換える。さらに、表示中の編集後のスキャン画像とも置き換える。そうすることにより、文字位置変更後の画像が、編集後のスキャン画像として保存、表示されることになる。文字位置を変更するとは、保存部302に保存されている文字領域の位置情報を変更することを意味する。一方、文字位置を変更する必要が無い場合には、文字位置変更ハンドルに対する操作は行われない。その場合、ステップS909では何も行われず、ステップS909の処理はスキップされることになる。
その後、ユーザは、別の認識セルを選択するか、OKボタンをクリックするか、Cancelボタンをクリックすることになる。ステップS910で制御部303は、受付部305が受け付けたユーザの操作に応じた処理を行なう。もし別の認識セルの選択がされたことを受付部305が受付けると、制御部303は、選択されている認識セルの選択状態を解除してステップS702に処理を進める。OKボタンがクリックされたことを受付部305が受付けると、制御部303は、選択されている認識セルの選択状態を解除して図9の処理を終了する。また、もしCancelボタンがクリックされたことを受付部305が受付けると、ステップS910において制御部303は、選択されている認識セルの内部を元の状態に戻す(即ち、ステップS904の黒画素塊の削除前の状態に戻す)。その上で制御部303は、選択されている認識セルの選択状態を解除して図9の処理を終了する。なお、ステップS910において受付部305が受け付けたユーザの操作がApplyボタンのクリックである場合、ステップS908に処理を戻すことになるが、この処理は図9では省略する。
図9の処理が終了した後は、ユーザからの他の認識セルの選択を待つ状態となる。また、ユーザから受付部305に対して別の装置への編集後のスキャン画像の送信が指示された場合には、制御部303は、その選択待ち状態を解除する。その上で、制御部303は、保存部302に保存されている編集後のスキャン画像を送受信部301に別の装置へ送信させる。その別の装置が仮に複写機200だったとすると、複写機200は、編集後のスキャン画像を送受信部202により受信し、ユーザからの指示によっては編集後のスキャン画像をプリンタ203により印刷することになる。
以上の処理を行った場合、別の装置に送信される編集後のスキャン画像は、(選択されていた)認識セル内部の削除、及び、編集後の文字の配置が完了した画像となる。しかし、送信される画像は、必ずしもこれに限られるものではない。例えば、元のスキャン画像(2値化前のスキャン画像)と、認識セル内部の削除命令と、編集後の文字の配置命令とを含むファイルであっても良い。そのようなファイルを別の装置が受信した場合には、その別の装置の側で元のスキャン画像から認識セル内部の削除、及び、編集後の文字の配置が行われることになる。もちろん、認識セルを特定する位置情報が含まれても良いし、スキャン画像自体の解析処理を別の装置が行なう構成でもよい。
<編集後の文字の配置処理の説明>
次に、図11を用いて、ステップS905の編集後の文字を認識セル内部に配置する処理の詳細を説明する。
ステップS1101で制御部303は、選択されている認識セルの位置情報、および当該認識セルに関連付けられた文字領域の位置情報を保存部302から取得する。
次にステップS1102で制御部303はステップS1101で取得した位置情報を用いて基準線の設定を行う。基準線とは、文字を配置する際の基準とする線のことであり、例えば基準線を文字領域の右側に設定すれば編集後の文字は文字領域の右寄りに配置されることになる。
認識セルの左上座標を(X1, Y1)、右下座標を(X2, Y2)、文字領域の左上座標を(x1, y1)、右下座標を(x2, y2)とする。制御部303は、基準線の設定を行うために、まず、選択されている認識セルにおける文字領域の左右の余白を以下のように計算する。なお、先に説明したように、X軸は右方向に伸び、Y軸は下方向に伸びているものとする。つまり、x 座標は右に行くほど大きくなり、y 座標は下に行くほど大きくなるものとする。
左側の余白 x1 - X1
右側の余白 X2 - x2
そして、(左側の余白)≧(右側の余白)ならば、基準線は文字領域の右辺、すなわち、(x2,y1), (x2, y2)を結ぶ直線に設定される。逆に、(左側の余白)<(右側の余白)ならば、基準線は文字領域の左辺、すなわち、(x1, y1), (x1, y2)を結ぶ直線に設定される。
ステップS1103で制御部303は、選択されている認識セル内部の設定されている基準線に合わせて、編集後の文字を配置する。この時、配置される文字のサイズとして、スキャン画像用文字サイズのデフォルト値が用いられるものとするが、下記のようにして決定されたサイズを用いても良い。たとえば、選択されている認識セル内部に存在していたオリジナル文字の幅が4文字で100ドットだった場合に、1文字あたりのサイズは、25ドットと推定される。この認識セル内部に編集後の文字を違和感なく配置するためには、編集後の文字も1文字あたり25ドット程度であるのが好ましい。このことから、標準的な文字のサイズが25ドットとなるようなポイント数を計算し、そのポイント数を、配置される文字のサイズとして用いることも可能である。また、そのように決定された文字サイズをユーザが手動で変更できるような構成としても良い。さらには、配置される文字の色やフォント、スタイル(標準、斜体、太字)をユーザが手動で変更できるような構成としても良い。
ここで、編集後の文字の外接矩形の高さがH、幅がWだったとする。また、保存部302に保存されている文字領域の左上座標が(x1, y1)、右下座標が(x2, y2)であり、ステップS1102で求めた基準線が文字領域の右辺だったとする。
この場合、編集後の文字の外接矩形を配置する座標は、
左上座標(x2- W, y2-H)
右下座標(x2, y2)
となる。
もし、基準線が左辺の場合には、編集後の文字の外接矩形の左辺を基準線(文字領域の左辺)に合わせるため、編集後の文字を配置する座標は、
左上座標(x1, y2-H)
右下座標(x1+W, y2)
となる。
なお、これらの例では、編集後の文字の高さ方向(Y方向)の位置は、オリジナル文字の配置されていた文字領域の下辺の位置を基準とした。しかしながら、この位置ではなく、編集後の文字の高さ方向の中心と、オリジナル文字の配置されていた文字領域の高さ方向の中心が揃うように編集後の文字の位置を決めても構わない。
<認識セル位置変更処理の説明>
次に、図7に戻り、今度はステップS705の認識セル位置変更処理の詳細について説明する。上述の通り、ステップS703においてユーザが受付部305に対して行った操作が認識セル位置変更ハンドル803に対する操作であれば、制御部303は、ステップS705に処理を進める。
ステップS705で制御部303は、その操作に合わせて、認識セルの位置を変更し、変更後の位置の認識セルの四辺を極太線枠状態にして表示部304に表示する。この際、変更前の位置の認識セルの四辺の極太線枠状態は解除され、通常の状態(太線枠も極太線枠も付いていない状態)に戻ることになる。また、認識セル位置変更ハンドル803も同様に、変更前の位置の認識セルの四頂点からは解除され、変更後の位置の認識セルの四頂点に表示されることになる。なお、認識セルの位置を変更するとは、保存部302に保存されている認識セルの位置情報を変更することを意味する。
その後、制御部303は、編集ウィンドウ804を介した文字編集が行われるまで待機し、文字編集が行われると制御部303は、ステップS704の文字編集処理、すなわち、前述の図9のステップS901に処理を進める。
このように、文字編集が行われる前に認識セルの位置を変更可能とすることによって、文字編集処理におけるステップS904で内部が削除される対象となる認識セルの位置を変更することができる。これにより、削除されるべき部位が削除され、かつ、削除されるべきでない部位が削除されずにすむこととなる。
<認識セルの結合と分割処理の説明>
ステップS705の認識セル位置変更処理によって認識セルが結合されたり分割されたりする場合がある。以下では、この認識セルの結合と分割処理の詳細を説明する。
前述の図4において、認識セル406と認識セル407とは、本来は単一のセルであるにも関わらず、ノイズの関係で別々の認識セルとして特定されている。認識セル406と認識セル407とを結合して、単一の認識セルとする処理について、図12を用いて説明する。なお図12は、図7のステップS705の認識セル位置変更処理の詳細を示す図である。
まず、ステップS1201において、受付部305は、認識セル位置変更ハンドルをドラッグすることによる認識セルの位置の変更を受け付ける。すなわち、ユーザが受付部305を介して、認識セル位置変更ハンドルをドラッグして、選択中の認識セルの位置を変更したことを検知する。
ステップS1202で制御部303は、ステップS1201で受付部305を介して検知した変更した位置が、選択中の認識セルの縮小にあたるか、拡大にあたるか、またはどちらにもあたらないかを判定する。具体的な判定方法を以下に述べる。位置を変更する前の認識セルの幅をW1、高さをH1とし、位置を変更した後の認識セルの幅をW2、高さをH2とする。W1<W2かつH1<H2の場合は、制御部303が認識セルの拡大と判定する。W1>W2かつH1>H2の場合は、制御部303が認識セルの縮小と判定する。それ以外の場合は、制御部303が、どちらにもあたらないと判定する。どちらにもあたらないと判定された場合は、制御部303は保存部302に保存されている、対象の認識セルの位置情報を変更して認識セル位置変更処理を終了する。その後は、図7のステップS705に進む。
認識セルの拡大と判定した場合、ステップS1203において制御部303は、拡大後の認識セルが、別の認識セルを包含するかどうかを判定する。別の認識セルを包含しないと判定した場合は、制御部303は認識セルの結合は行わず、保存部302に保存されている、対象の認識セルの位置情報を変更して処理を終了する。
一方、ステップS1203で別の認識セルを包含すると判定した場合は、ステップS11204において制御部303は、拡大後の認識セルと、この拡大後の認識セルが包含した当該別の認識セルとを結合する。
ステップS1204の認識セルの結合ステップで制御部303は、結合する前の各々の認識セルの座標を元に、両方の認識セルを含む最小の矩形を結合後の認識セルと設定する。そして、その設定した結合後の認識セルの位置情報を保存部302に保存する。例えば、結合する2つの認識セルの左上座標をそれぞれ(Xa, Ya)、(Xb, Yb)とし、仮にXa>Xb、Ya<Ybとすると、結合後の認識セルの左上座標は(Xb、Ya)になる。左下、右上、右下座標についても同様の考え方で決定する。また、結合する認識セルが3個以上の場合でも同様である。なお、結合後の認識セルの位置情報は、複数存在する結合前の認識セルの位置情報(認識セル位置変更ハンドルを操作する前の、認識セル位置変更ハンドルを操作した認識セルの位置情報と上記別の認識セルの位置情報)と関連付けて保存される。結合後の認識セルは、認識セルの結合処理後、結合していない通常の認識セルと同様に操作される。なお、結合前の認識セルの位置情報を、結合後の認識セルと関連付けて保存する理由は、その後の文字編集処理が行なわれる際に、前述のステップS904の認識セルの内部の削除の際に使用されることがあるからである。
次に、ステップS1205において制御部303は、各々の認識セルに含まれる文字領域を結合する。具体的には、制御部303が、結合後の認識セルに含まれている文字領域を検出する。ここで検出される文字領域とは、拡大前の認識セルに含まれている文字領域と、上記別の認識セルに含まれている文字領域である。その上で、検出した文字領域同士を結合する。結合後の文字領域は、結合前の全ての文字領域を包含する最小の矩形となる。この最小の矩形の位置情報を結合後の文字領域の位置情報として、結合後の認識セルと関連付けて保存部302に保存する。そして、その代わりに、拡大前の認識セルに含まれていた文字領域の位置情報と、上記別の認識セルに含まれていた文字領域の位置情報を保存部302から削除する。このとき、結合前の文字領域については前述のステップS904の認識セル内部の削除の際に使用されないので、ここで削除する。
次にステップS1206において制御部303は、認識文字を結合する。具体的には、制御部303は結合後の文字領域に含まれる複数の認識文字を結合することにより、1つの認識文字を新規に作成する。代わりに、元の複数の認識文字は削除する。新規に作成した認識文字は、制御部303が結合後の文字領域に関連付ける。なお、認識文字の結合では、単純に複数の認識文字を繋げるだけでもよいし、認識文字の間にスペースを挿入してもよい。
次にステップS1207において制御部303は、結合前の認識セルの四頂点から認識セル位置変更ハンドルを削除して、結合後の認識セルの四頂点に認識セル位置変更ハンドルを表示する。つまり、結合後の認識セルが選択された状態にする。また、ステップS1208において制御部303は、結合後の認識文字を、編集ウィンドウ804における文字入力欄805に表示する。このように、ステップS1208の処理が終ると、結合後の認識セルが選択され、結合後の認識文字が編集ウィンドウに表示されることになる。つまり、図7のステップS702の処理が終っている状態と同じ状態となっている。その後の処理は、図7のステップS703の判定によって前述したような処理が行なわれることになる。
以上の認識セルの結合処理について、図13から図16を用いて、具体例を示す。図13はノイズにより別々の認識セルとして特定された認識セル406と認識セル407のうち、認識セル406がユーザにより選択された際の表示画面である。認識セル406と認識セル407は別々の認識セルとして特定されているため、文字入力欄1301には認識文字として「Gym Bag」ではなく「Gym」が表示されている。
認識セル406と認識セル407とを結合したい場合、まずユーザは認識セル406の認識セル位置変更ハンドル803をドラッグして、認識セル407を全て含むまで拡大する(S1201)。図14は、ユーザが認識セル位置変更ハンドル803をマウスポインタ801を用いて右方向にドラッグして認識セル407を全て含むまで拡大した様子を示している。なお、認識セルをドラッグして拡大する際には、認識セルを拡大している最中であることが分かるよう、認識セルの枠の表示を変更するのが好ましい。例えば点線1401のように、認識セルを拡大している間は、認識セルの枠を点線で表示する。
ユーザが認識セル位置変更ハンドル803のドラッグを完了すると、制御部303は認識セル406と認識セル407とを結合して、図15に示すように結合後の認識セル1501を表示部304に表示する。また、文字領域の結合も行う。さらに、認識文字の結合を行い、結合後の認識文字「Gym Bag」を認識文字として編集ウィンドウの文字入力欄1502に表示する(S1203からS1208)。
ところで、結合後の認識セル1501のように、ノイズにより別々の認識セルとして特定された認識セルを結合した場合は、文字編集処理のステップS904の認識セルの内部の削除において、結合後の認識セル内部を削除するのが望ましい。なぜならば、結合前の認識セル内部をそれぞれ削除すると、ノイズが削除されず残ってしまうからである。
一方で、結合後の認識セル内部を削除するのではなく、結合前の認識セル内部を削除した方が望ましい場合もある。図16は、結合前の認識セル内部を削除した方が好ましい例を示している。図16は、6つの別々の認識セルとして特定された認識セル(認識文字が「¥」「8」「1」「5」「0」「0」である6つのセル)を1つの認識セルに結合した後の認識セル1601を示している。6つの認識セルは、数字の桁を区切るための罫線により、別々の認識セルとして特定される。この場合、認識セルの結合は認識文字の編集を容易にするために行ったものである。罫線は「数字の桁を区切る」という意味があるものなので、文字編集処理のステップS904の認識セルの内部の削除を行った際も、桁を区切る罫線を維持するのが望ましい。ステップS904の認識セルの内部の削除において、結合後の認識セル内部を削除すると、桁を区切る罫線も消去されてしまうからである。従って、図16のような場合、桁を区切る罫線を維持するために、結合前の認識セル内部を削除するのが望ましい。
このように、削除対象の認識セルとして、結合後の認識セル内部を削除するのが望ましい場合と、結合前の認識セルの内部を削除するのが望ましい場合とがある。この2つの場合に対応するため、例えば図15や図16に示すように、どちらを削除対象の認識セルとするかをユーザに選択させるUIを表示する。すなわち、認識セルの結合を行った場合、ステップS1208の結合後の認識文字を表示する際に、編集ウィンドウに「結合後の認識セル内部を削除する」「結合前の認識セル内部を削除する」のどちらかをユーザが選択できるUI1503を表示する。UI1503はどちらか一方が選択状態の場合に、もう一方が非選択状態になるラジオボタンである。初期状態は、「結合後の認識セル内部を削除する」を選択状態とする。「結合後の認識セル内部を削除する」「結合前の認識セル内部を削除する」のどちらが選択されているかの情報は保存部302に認識セルと関連付けて保存され、ステップS904の認識セルの内部の削除の際に取得される。なお、ステップS1208の表示処理が行なわれると、認識セル位置変更処理は終了となる。その後は、図7のステップS706に進む。ここで、例えば、編集ウィンドウ1502の認識文字の編集が行なわれると処理は図7のS706からS703を経てS704の文字編集処理に移行する。また、UI1503のOKボタン、Applyボタン、またはCancelボタンが押された場合も同様に、S704の文字編集処理に移行する。その後の文字編集処理は図9で説明したものと同様の処理が行なわれる。なお、図9のステップS901やS902は編集ウィンドウ1502での編集が行なわれていない場合にはスキップしてもよい。
例えば、図15の状態で、OKボタンがクリックされるとする。すると、ステップS903からステップS904に進み、このステップS904での処理では、結合後の認識セル内部が削除されることになる。なお、図15の状態でApplyボタンがクリックされた場合も同様に、結合後の認識セル内部が削除される。なお、前述のようにApplyボタンをクリックした場合とOKボタンをクリックした場合の違いとしては、認識セルが選択状態のままであるか否かということである。
次に、認識セルの分割について説明する。図17において、認識セル403は、本来は「Description」、「Quantity」、「Unit Price」、「Amount」の認識文字を含む4つの認識セルとなるべきである。しかし、スキャン画像の罫線が掠れているため、1つの認識セルとして特定されている。また、編集ウィンドウにおいてもこれらの4つの認識文字が文字入力欄1701に表示されている。認識セル403を分割して、複数の認識セルとする処理について、図12のステップS1211−S1216を用いて説明する。
ステップS1202で、制御部303が認識セルの縮小と判断した場合、ステップS1211において制御部303は、選択中の認識セルに含まれていた文字領域の全てが、縮小後の認識セル内でも含まれているかどうかを判定する。全て含まれていると判定した場合は、制御部303は選択中の認識セルの分割は行わず、保存部302に保存されている、対象の認識セルの位置情報を変更して処理を終了する。
一方、S1211で縮小後の認識セルに含まれない文字領域があると判定した場合は、ステップS1212で制御部303は、縮小前の認識セルを分割する。即ち、縮小前の認識セルに含まれていた文字領域の一部又は全てが、縮小後の認識セル内に含まれていない場合には、縮小前の認識セルを分割する。縮小前の認識セルの分割とは、具体的には、制御部303は、縮小後の認識セルとは別に、新規に認識セルを作成することを意味する。
縮小後の認識セルと、上記新規に作成する認識セルの位置情報は、縮小後の認識セルの位置情報と縮小前の認識セルの位置情報とを元に制御部303が決定する。例えば、縮小前の認識セルが、左上座標(Xa1,Ya1)、右下座標(Xa2,Ya2)とする。ユーザが右下の認識セル位置変更ハンドルをドラッグして認識セルを左方向に縮小して、その結果右下座標が(Xa2 - W ,Ya2)になったとする(Wは縮小幅)。この場合、制御部303は「X座標= Xa2 - W」の位置で縮小前の認識セルを分割すると判断する。分割した結果、縮小後の認識セルの座標は、左上座標(Xa1,Ya1)右下座標(Xa2 - W ,Ya2)となり、新規に作成した認識セルの座標は、左上座標(Xa2 - W ,Ya1)右下座標(Xa2,Ya2)となる。
次にステップS1213において制御部303は、文字領域の分割を行う。具体的には、まず縮小後の認識セル内に包含されていない文字領域と、縮小後の認識セルとの関連付けを解除し、代わりに、その文字領域を、新規に作成した認識セルに新たに関連付ける。また、認識セルを分割した位置の上に文字領域が重なっている場合は、その分割した位置で文字領域も分割する。例えば、左上座標(Xa3,Ya3)、右下座標(Xa4,Ya4)の文字領域を、X座標がXa5の位置で分割するとする。この場合は、左上座標(Xa3,Ya3)、右下座標(Xa5,Ya4)の文字領域と、左上座標(Xa5,Ya3)、右下座標(Xa4,Ya4)の文字領域の、2つの文字領域を作成する。そして、元の文字領域は制御部303によって削除される。その後、制御部303は、新規に作成した2つの文字領域を、文字領域を包含している認識セルにそれぞれ関連付ける。
次にステップS1214において制御部303は、認識文字の分割を行う。上記分割された文字領域に含まれるように認識文字を分割して、各文字領域に関連付ける。
次にステップS1215において制御部303は、分割後の認識セルのうち、もっとも左上側にある認識セルの四頂点に対して認識セル位置変更ハンドルを表示部304に表示する。つまり、分割後に生成された複数の認識セルのうち、最も左上側に位置する認識セルを選択状態にする。また、ステップS1216において制御部303は、ステップS1215で選択状態にされた分割後の認識セルに関連付けられている認識文字を、編集ウィンドウにおける文字入力欄に表示する。
以上の認識セルの分割手段について、図17、図18、図19を用いて、具体例を示す。図17では認識セル403が選択されている状態の表示画面である。認識セル403は本来は複数の認識セルとなるべきだが、スキャン画像の罫線が掠れているため、単一の認識セルとして特定されている。単一の認識セルとして特定されているため、文字入力欄1701には、認識セル403内の認識文字が全て結合されて表示されている。
認識セル403を分割したい場合、図18に示すように、まずユーザは認識セル403の認識セル位置変更ハンドル803をドラッグして、認識セルを分割したい位置まで認識セルを縮小する。なお、認識セルをドラッグして縮小する際には、認識セルを縮小している最中であることが分かるよう、認識セルの枠の表示を変更するのが好ましい。例えば点線1801のように、認識セルを縮小している間は、認識セルの枠を点線で表示する。図18の縮小後の認識セルの中には、認識文字「Description」の文字領域のみが含まれていて、「Quantity」、「Unit Price」、「Amount」は含まれていない。そのため前述のステップS1511で制御部303は、縮小後の認識セルに包含していない文字領域があると判定し、認識セルの分割をおこなう。
認識セルを分割した後、制御部303は、分割された各々の認識セルのうち、もっとも左上に位置する認識セル1902を選択状態にする。図19は、左上に位置する認識セルを選択状態にした例を示している。また、制御部303は、分割後の認識セルに含まれる認識文字「Description」を文字入力欄1901に表示する。この図19の状態は、前述の図7のステップS702の処理が行なわれた後と同様に編集ウィンドウと認識セル位置変更ハンドルの表示が行われている例である。従って、その後の処理は、図7のステップS703以降の処理に従って処理が行なわれる。なお、図19の例では、認識セル1902の残りの認識セル(すなわち、分割に伴い新規に作成された認識セル)は、本来複数の認識セルとなるべきものが一つの認識セルとなっている状態である。そこで、ユーザは同様の処理を繰り返して、残りの認識セルについても同様に分割をすることができる。
<編集ウィンドウに表示する認識文字の選択>
次に、図7のステップS702において制御部303が行う編集ウィンドウに表示する認識文字の選択処理について説明する。領域解析の文字領域検出の結果、1つの認識セル内に複数の文字領域が存在する場合がある。具体的には、図4の認識セル401、402のようなケースである。このような場合、認識セルに関連付けられたすべての認識文字を編集ウィンドウに表示するとユーザの利便性を損なうことがある。したがって、認識セル内の文字領域の位置関係により、編集ウィンドウ表示する認識文字を選択する必要がある。
図20(a)は、認識セルの枠を表示する表示画面である図5の一部を示す図である。なお、理解を容易にするために、図4の認識セル401を符号として付している。マウスポインタ801が図20(a)の位置にあった時にユーザがクリックすることで制御部303が実行する処理、すなわち図7のステップS702の詳細を図21のフローチャートに示す。また、この処理の実行後の表示部304の状態を図20(b)に示す。
図21のフローチャートに基づいて詳細な処理を説明する。ステップS2101において制御部303は、認識セル位置変更ハンドルを表示する。図20(b)では認識セル位置変更ハンドル803に相当する。
次にステップS2102において制御部303は、認識セルに関連付けられた文字領域の位置情報を保存部302から取得する。次に、ステップS2103において制御部303は、ステップS2102で取得した文字領域が複数あるかを判定する。取得した文字領域が1つであれば、ステップS2109で制御部303はその文字領域の認識文字をそのまま編集ウィンドウに表示する。一方、取得した文字領域が2つ以上あれば、ステップ2104からステップS2107の処理を経てどの文字領域とその認識文字を表示するかを判定する。
まず、ステップS2104において制御部303は文字領域の外接矩形の位置情報により、文字領域の外接矩形を統合するか否かを判定する。比較対象の文字領域の外接矩形Aの右上座標を(L_a,T_a)、左下座標を(R_a,B_a)、外接矩形Bの右上座標を(L_b,T_b)、左下座標を(R_b,B_b)とし、統合判定条件は以下のとおりである。
2つの外接矩形A、Bが行方向となる横方向で重ならない場合、すなわち、B_a<T_bの場合は結合しない。
そうでなければ(B_a≧T_b)、2つの外接矩形が十分離れている場合、すなわち、L_b−R_a が閾値以上の場合、(例えば20画素・・・1cm)は結合しない。
次に、ステップS2105において制御部303は、統合すると判定した文字領域の外接矩形を結合し、さらにステップS2106において制御部303は認識文字も統合する。
ステップS2104〜S2106の処理の具体例を示す。認識セル401内の文字領域は、
SOLD TO −−(1)
Kawasaki BlackBlue −−(2)
Co.,Ltd.−−(3)
53, Imai Kamicho,−−(4)
Nakahara−ku Kawasaki−shi,−−(5)
Kanagawa, 〒211−8511−−(6)
Tel−−(7)
044−987−6543−−(8)
Fax−−(9)
044−98706544−−(10)
の10個存在する。
これらの文字領域の位置情報を入力された制御部303は、「Kawasaki BlackBlue」と「Co.,Ltd.」との2つの文字領域は統合すると判定し文字領域の外接矩形および認識文字を統合する。
次に、ステップS2107において制御部303は、編集ウィンドウ804に表示する文字領域を選択する。選択条件は以下のとおりである。
マウスポインタ801の位置が、ある文字領域の内側であれば、その文字領域とする。
さらに、マウスポインタ801の位置が、どの文字領域の内側でもなければ、マウスポイント801の位置と最も距離が近い文字領域を選択する。
次に、ステップS2108において制御部303は、表示部304に統合した文字領域の外接矩形の枠を表示する。これは、認識セル内の複数の文字領域のうち、どの文字領域が選択可能かをユーザへ明確に提示するために実施する。もし、統合処理後の文字領域の数が1であれば、文字領域は1つに確定するため、枠表示処理はスキップしてもよい。
また、ステップS2107にて制御部303が選択した文字領域とそれ以外の文字領域を区別するために枠の表示方法を変える。本実施形態では、図20(b)のように選択された文字領域2502に太線、他の文字領域2503に細線枠を用いたが、両者を区別できる表示であれば方法は問わない。
ステップS2109において制御部303は選択した文字領域に関連付けられた認識文字を編集ウィンドウに表示する。図25(b)では、文字領域2502が選択された文字領域を示しており、文字領域2502に関連付けられた認識文字”Kawasaki BlackBlue Co.,Ltd.”を編集ウィンドウに表示している。
<認識セル内部の削除の詳細>
次に、図9のステップS904における選択されている認識セル内部の削除処理の詳細について説明する。
スキャン画像には、認識セルに対して、対応する実際のセルが1つ存在する。以降、スキャン画像の実際のセルを単にセルと呼ぶ。図5で説明したように、保存部302で保存されている認識セルの位置情報は、外接矩形の座標情報である。スキャン画像の傾きや歪みにより、認識セル503、504の外接矩形の座標情報とセルの罫線(黒画素塊501)の位置とは、図5に示すように完全には一致しない。認識セルの外接矩形の内側にセルの罫線の一部が含まれていた場合、認識セル内部をすべて削除すると、セルの罫線の一部を削除してしまう場合がある。セルの罫線を削除することなく、認識セル内部のセルの罫線以外を削除するステップを以下に説明する。
図22は、セルに内接する直線を検出する例を示す図である。図22は、スキャン画像の実際のセル2214を示している。図22(a)は、セル2214が、四頂点2210−2213を繋ぐ四本の罫線からなる領域であることを示している。図22(b)はセル2214に対応する認識セル2201を示している。図22(c)は、セル2214に内接する直線2202−2205を示している。セルに内接する直線のことをセル内接直線と呼ぶ。セル内接直線は1つのセルに対して、上下左右の四本存在する。
認識セルに対応するセルのセル内接直線を検出するための領域を、セル内接直線検出領域と呼ぶ。図22(d)及び図22(e)はセル内接直線検出領域を示す図である。1つの認識セル2201に対して、それぞれ点線の矩形で示す4つのセル内接直線検出領域2206−2209が存在する。
本実施形態では、認識セル内部の色を削除する際に、認識セルに対応する外接矩形内の画素を削除するのではなく、認識セルに対応するセル(実際のセル)のセル内接直線を検出し、検出したセル内接直線に基づいて削除する領域を決定する。以下、具体的な処理について説明する。
図23は、図9のステップS904の認識セル内部の削除の詳細な処理を示すフローチャートである。ステップS2300で制御部303は、削除範囲の判定を行う。削除範囲は、文字領域、結合前の認識セル、認識セルのいずれかであり、制御部303はどの範囲を削除するかを判定する。具体的には、選択された認識セルに、関連付けられた文字領域が複数ある場合、制御部303は、削除範囲は文字領域と判定し、ステップS2307に処理を進める。ステップS2307において制御部303は、編集対象の文字領域の位置情報を保存部302から取得し、文字領域内部の色情報を削除する。具体的には、領域内部の画素の色情報を白に置換する。図20に示すように、認識セルに関連付けられた文字領域が複数ある場合は、認識セル内部をすべて削除してしまうと、編集処理をしていない文字領域も合わせて削除してしまう可能性がある。従って、この削除範囲の判定処理により、編集対象の文字領域のみ削除することが可能となる。なお、文字領域のみを削除する場合、認識セル内部の削除と比べてとセルの罫線が消える可能性が小さい。そこで、認識セル内部を削除する全ての処理の際に文字領域のみを削除することで罫線の消失を防止することも考えられる。しかしながら、そもそもセルを編集したいというユーザの要望は、例えばノイズなどが原因でセルを誤認識してしまったり文字を誤認識してしまうことに対する対処のためである。文字領域のみを削除することでは、このようなユーザの要望には十分に応えられない可能性がある。従って、本実施例では、基本的に(結合前または結合後の)認識セル内部を削除しており、例外的な処理として、文字領域のみを削除する例を示している。
ステップS2300において制御部303は、選択された認識セルが結合後の認識セルであり、かつ、図15のラジオボタン1503において、「結合前の認識セル内部を削除する」が選択されている場合、削除範囲は結合前の認識セルと判定する。そして、制御部303は、ステップS2206において、結合前の認識セル座標を取得するの処理を行う。すなわち、制御部303は、選択されている結合後の認識セルと関連付けて保存されている複数の結合前の認識セルの位置情報を保存部302から取得する。この場合、後述するステップS2302からS2306における認識セルとは、結合前の認識セルそれぞれのこととする。つまり、制御部303は、複数の結合前の認識セルに対して、それぞれ後述するS2302からS2305の処理を行い、それぞれの結合前の認識セル内部を削除する。
ステップS2300において、削除範囲が文字領域でも結合前の認識セルでもない場合は、制御部303は、削除範囲は認識セルと判定する。これには、認識セルが結合後の認識セルであり、かつ、図15のラジオボタン1503において、「結合後の認識セル内部を削除する」が選択されている場合も含まれている。この場合、ステップS2301からS2305の処理における認識セルは結合後の認識セルのこととする。ステップS2301で、制御部303は、選択されている認識セル2201の位置情報を保存部302から取得する。
次に、認識セル内部の処理を説明する。ステップS2302で制御部303は、認識セル2201の上下左右計4つのセル内接直線検出領域2206−2209を設定する。上部のセル内接直線検出領域2206は、認識セル2201の上部の辺を基準として、上下にあらかじめ決められた値分(例えば20画素・・・0.50cm)広げた領域である。下部のセル内接直線検出領域2207は、上部と同様の方法で設定される。左部のセル内接直線検出領域2208は、認識セルの左部の辺を基準として、左右にあらかじめ決められた値分広げた領域である。右部のセル内接直線検出領域2209は左部と同様の方法で設定される。
ステップS2303で制御部303は、上下左右のセル内接直線検出領域2206−2209に対して、直線検出を行う。直線検出は例えばハフ変換を用いて行なわれる。
上部のセル内接直線検出領域2006に対するハフ変換による直線検出の方法を具体的に説明する。まず、制御部303は、上部のセル内接直線検出領域2206に対して、エッジ検出を行う。エッジ検出により、上下左右の画素との濃度の差が閾値以上のエッジ画素と、それ以外の非エッジ画素とに分類される。図24はセル内直線を検出する例を示す図である。図24は、エッジ画像2401を示している。このエッジ画像2401は上部のセル内接直線検出領域2206に対してエッジ検出を行い、エッジ画素を黒画素として表示した画像である。画素2402は上部のセル内接直線検出領域2206内のエッジ画素の1つであり、その座標を(Xb1,Yb1)と表す。 (Xb1,Yb1)を通る直線は式1で表現される。ρは原点から直線に垂線を引いた時の長さであり、θはx軸とのなす角度である。また、ρの小数点第一位を四捨五入し、整数化したものをρiとする。
ρ= Xb1 cosθ+ Yb1 sinθ・・・式1
この式1が表す直線を図25に図示する。制御部303は、θを一定の変化量(たとえば、1度ごと)で0度から360度まで変化させ、それぞれのθに対するρの値を計算することで、(Xb1,Yb1)を通る直線の(ρ, θ)の組み合わせを360個求める。制御部303は、上部のセル内接直線検出領域内2206で、この処理をエッジ画素の全てに対して行うことにより、エッジ画素数×360個の(ρ, θ)の組み合わせを求める。仮にエッジ画素数が100個あるとすると、3万6000個の(ρ, θ)の組み合わせが求まるわけである。その中には、もちろん重複があり、例えば(ρ1, θ1)の組み合わせは20回あった、(ρ2, θ2)の組み合わせは30回あったというふうに重複回数が求まる。つまり、(ρi, θi)の組み合わせの出現頻度が求まることになる。この出現頻度を閾値と比較し、その閾値を超えた(ρi, θi)の組み合わせを直線を表す数式とみなす。
この閾値は、上部もしくは下部のセル内接直線検出領域の場合、セル内接直線検出領域の幅にあらかじめ定められた定数(例えば、0.7)を掛けた値とする。左部もしくは右部のセル内接直線検出領域の場合、セル内接直線検出領域の高さにあらかじめ定められた定数を掛けた値とする。その結果、図24の例では、エッジ画像2401に対して直線検出を行った結果、直線2403と直線2404との二本の直線が検出される。直線2403と直線2404は検出された直線を黒画素で示した線である。制御部303は、下部、左部、右部に関しても同様の方法でそれぞれ直線検出を行う。
ステップS2304で、制御部303は、ステップS2303における直線検出結果を基にセル内接直線を特定する。例えば、上部のセル内接直線検出領域の場合、上部のセル内接直線検出領域2206から2本の直線が検出されている。この2本の直線の中から、認識セルを基準として最も内側、すなわち最下部の直線を上部のセル内接直線として検出する。
数学的には、図24においては、上部のセル内接直線検出領域2206の中央のx座標2405における、検出された各直線2403、2414のy座標の値を算出し、y座標の値が最も大きい直線をセル内接直線として特定することになる。図24の例では、y座標の値が最も大きい直線2404がセル内接直線として特定される。
また、制御部303は上部のセル内接直線検出領域に1つも直線が検出されなかった場合、認識セルの上部の辺をセル内接直線として特定する。もちろん、1本のみ直線が検出された場合、その直線をセル内接直線として特定する。制御部303は、下部、左部、右部に関しても同様にそれぞれ最も内側の直線をセル内接直線として検出する。
ステップS2305で制御部303は、スキャン画像に対して上下左右の四本のセル内接直線に囲まれた領域内部の色情報を削除する。具体的には、領域内部の画素の色情報を白に置換する。
また、上下左右の四本のセル内接直線に囲まれた領域内部の色情報を削除する際、処理の簡易化のために、例えば図22(f)において点線で示す四本のセル内接直線に囲まれた領域内部の矩形2221の色情報を削除してもよい。矩形2221を特定する具体的な方法を以下に説明する。セル内接直線の左上の交点2215を座標(Xc1, Yc1)、左下の交点2216を座標(Xc2, Yc2)、右下の交点2217を座標(Xc3, Yc3)、右上の交点を座標(Xc4, Yc4)とする。また、AとBの小さいほうの値をmin(A, B)と表現し、AとBの大きいほうの値をmax(A, B)と表現する。矩形2221は、左上座標2219が(max(Xc1, Xc2), max(Yc1, Yc4))で、右下座標2220が(min(Xc3, Xc4), min(Yc2, Yc3))の矩形として表現される。この矩形内部の色情報を削除することで、四本のセル内接直線に囲まれた領域内部の矩形2221の色情報を削除することができる。
ステップS2300からS2307の処理により、スキャン画像のセルの罫線を削除することなく、認識セル内部の罫線以外の色を削除することができる。
<その他の実施形態>
上記の例では、スキャナで読み取ったスキャン画像を編集する例を説明した。このスキャン画像は各種のスキャナで読み取った画像であればよく、また、カメラスキャナのように撮像装置で撮像して得られた画像であってもよい。
本発明の目的は、以下の処理を実行することによっても達成される。即ち、前記実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)が記憶媒体に格納されたプログラムコードを読み出す処理である。
この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコード及び該プログラムコードを記憶した記憶媒体は本発明を構成することになる。