【解決手段】画像処理のための方法は、画像からストロークのマスクを取得し、当該マスクと基準線とに基づいて、上記ストロークの複数の交差エッジを特定する。複数の交差エッジは、基準線と交差し隣り合った交差エッジのグループを含む。上記方法は、さらに、(a)グループ内の少なくとも2つの交差エッジの位置に基づいて第1のベクトルを計算し、(b)第1のベクトルに基づいて、基準線と交差せずグループに隣接する交差エッジを含むようにグループを拡張し、(c)拡張されたグループ内の交差エッジの少なくとも2つの位置に基づいて第2のベクトルを計算し、(d)第2のベクトルに基づいて、基準ラインと交差せず拡張されたグループの近傍の隣接する交差エッジの第2のグループを含むように、拡張されたグループを拡張することを含む。
前記ステップ(d)における前記拡張されたグループの近傍の隣り合った交差エッジの第2のグループは、前記第2のグループの長さおよび前記拡張されたグループの長さのうち短い方の長さだけ、前記拡張されたグループから離隔されている、請求項1に記載の方法。
前記ストロークの幅の最大許容値に基づいて表の線の交差に対応する前記拡張されたグループ内の前記交差エッジを更新するステップをさらに含む、請求項1または2に記載の方法。
前記複数の交差エッジは、隣り合った交差エッジの追加のグループをさらに含み、前記グループの各々は、前記ステップ(a)および前記ステップ(b)によって、隣り合った交差エッジの最大数を有する前記グループから開始して拡張される、請求項1〜7のいずれか1項に記載の方法。
隣り合った交差エッジの最大数を有する前記拡張されたグループと、前記ステップ(a)および(b)によって拡張されたグループのうち最も近いものとを併合するステップをさらに含む、請求項8に記載の方法。
【発明を実施するための形態】
【0013】
詳細な説明
本発明の特定の実施形態を、添付の図面を参照して詳細に説明する。様々な図における同様の要素は、一貫性のために同様の参照番号で示されている。
【0014】
本発明の実施形態の以下の詳細な説明では、本発明のより完全な理解を提供するために、多数の特定の詳細が記載されている。しかしながら、当業者には、これらの特定の詳細なしに本発明を実施することができることは明らかであろう。他の例では、説明を不必要に複雑にすることを避けるために、周知の特徴は詳細には記載されていない。
【0015】
発明の実施形態は、概して、方法、コンピュータープログラム、コンピューター読み取り可能な記録媒体、および画像処理のためのシステム、たとえば表の線を追跡するための処理を提供する。
【0016】
概して、本発明の1つ以上の実施形態は、線の「意図」に寄与する画素を特定することによって、
図32および
図33を参照して上述したような様々な不規則性を含みうる、手書きの表内のセルの内容を認識することができる。
【0017】
概して、本発明の1つ以上の実施形態によれば、ハフ線(Hough line)は、表の線を追跡するためのガイドとして使用される。ハフ線は、画像内の直線を検出または特定する既知の技術であるハフ線変換(Hough line transform)に従って描かれてもよい。ハフ線は、マスクに現れる可能性があるすべての不連続点にわたって線の存在を示す強力な証拠を提供することがある。さらに、ハフ線は、破線のストロークのギャップにまたがる。これにより、個々のダッシュを、異なるセグメントの集合ではなく、単一の線として集めることができる。
【0018】
本発明の1つ以上の実施形態では、ガイドとしてハフ線を使用することによって、表の線を、直近の画素接続性(immediate pixel connectivity)を使用して最も近い不連続点まで追跡することができる。線の追加の部分は、ハフ線との他の交差部を追跡し、これらの部分を一緒に併合することによって発見することができる。ハフ線と交差するすべての異種の部分を見つけて併合することによって、その線の意図を高い精度または信頼度で再現することができる。その時点で得られた線についての知識は、ハフ線と交差しない線の追加部分を見つけるために使用されるが、そうでなければ線の意図に適切に適合する。
【0019】
したがって、本発明の1つ以上の実施形態は、マスクの線が不連続であるか、あるいは品質が悪い場合において、単純な隣接画素検索のような従来の方法と比較して、表の線の意図を見つける可能性を向上させる。さらに、本発明の1つ以上の実施形態は、ダッシュ(dashes)の間のギャップを横切る線の意図に従うことによって、破線のストロークを有する表の線を特定することができる。様々な他の利点は、本発明の実施形態の以下の詳細からも明らかになるであろう。
【0020】
最初に、本発明の1つ以上の実施形態によれば、ライティングボード上に描画されたストロークの画像が取得される。次に、画像内のストロークのマスクが得られる。ストロークは、線、表、図表、グラフ、テキスト文字などの一部であってもよい。
【0021】
次に、ライン・トレーサー(line tracer)がストロークを追跡し、ハフ線と交差するストロークに対して複数の「交差エッジ(cross edges)」(すなわち、上記ストロークの方向に垂直な線の画素)を決定する。上記複数の交差エッジは、1つ以上の隣接するエッジのグループに分割されてもよい。1つ以上の実施形態によれば、交差エッジの画素についての情報を記録するために、クラス「クロスエッジ(CrossEdge)」が使用される。クロスエッジはまた、エッジの幅および位置(たとえば、中間点)を返す方法を実装してもよい。たとえば、
図6に示すような灰色の縦方向ストリップは、水平ラインのマスク内の1つの画素に対する単一のクロスエッジを表す。
【0022】
さらに、クラス「クロスエッジセット(CrossEdgeSet)」として、一連の交差エッジが生成されうる。1つ以上の実施形態によれば、クロスエッジセットは、セット内の全ての交差エッジに関する現在知られている追加情報(たとえば、ラインの向き、交差エッジの数、最小幅と最大幅、ストロークのすべての交差エッジの幅のヒストグラム、モード幅など)と併せて、ゼロまたは複数のクロスエッジの集合である。たとえば、
図7は、5つの交差エッジを含むクロスエッジセットを示し、
図8は、これらの交差エッジに関するいくつかの「追加情報」を示す。
【0023】
次に、クラス ローライン(RawLine)が定義される。1つ以上の実施形態によれば、ローラインは、表の線の意図を表すクロスエッジセットである。ローラインは、線の信頼度、最小および最大の幅、交差部のリストなどの追加情報を記録することができる。
【0024】
ハフ線と交差するすべての交差エッジを保持する初期クロスエッジセットが確立されると、上記初期クロスエッジセット内の隣接する交差エッジのグループは、上記線の幅に対する最大許容値および上記グループ(以下でより詳細に説明する)内の交差エッジの位置によって定義されるベクトルを使用して、ハフ線が描かれる方向に拡張され得る。この拡張は、ハフ線と交差しないグループに隣接するエッジを探す。拡張されたグループ(すなわち、一連の既存および追加の交差エッジ)がローラインに追加されうる。本発明の1つ以上の実施形態では、初期クロスエッジセット内の2つ以上の交差エッジのグループがそれぞれ拡張され、ローラインに追加されうる。
【0025】
全てのグループが拡張され、ローラインに追加されるとき、ローライン全体は、最大幅許容(maximum width tolerance)およびベクトルを使用して、いずれかの端で再び同様の方法で拡張される。この第2の拡張は、初期グループに隣接していないが、ストロークの意図を完全にする近くの交差エッジを探す。
【0026】
次に、最大幅許容値と、2つの隣接するグループの少なくとも2つの交差エッジの位置とに基づいて、ローライン内の2つの隣接するグループを分離するギャップが特定されうる。ギャップに対応する交差エッジがローラインに追加されうる。さらに、線内の穴は、最大幅許容値に基づいて特定されうる。上記穴に対応するローラインの上記交差エッジは、上記線内の上記穴に架かる橋となる、新たに特定された交差エッジに基づいて更新されてもよい。さらに、表の線の交点におけるローラインの交差エッジは、上記最大幅許容値に基づいて更新されうる。上記の手順により、1つ以上の実施形態によるローラインは、元の線の意図を反映する表の線を示す。
【0027】
次に
図1を参照する。本発明の1つ以上の実施形態によるシステム(100)は、バッファー(110)、マスキングエンジン(120)、分析エンジン(130)、および追跡エンジン(140)を含む。これらのコンポーネント(110,120,130,140)の各々は、同じコンピューティングデバイス(たとえばパーソナルコンピューター(PC)、ラップトップ、タブレットPC、スマートフォン、サーバー、メインフレーム、ケーブルボックス(cable box)、キオスクなど)、あるいは有線および/または無線セグメントを有する任意のサイズおよび任意のトポロジのネットワークによって接続された異なるコンピューティングデバイス上に配置されうる。
【0028】
本発明の1つ以上の実施形態では、システム(100)はバッファー(110)を含む。バッファー(110)は、ハードウェア(すなわち、回路)、ソフトウェア、またはそれらの任意の組み合わせで実施されうる。バッファー(110)は、任意のサイズまたはタイプ(たとえば、メモリー、ハードドライブなど)であってもよい。バッファー(110)は、画像からのストロークのマスク(112)と、交差エッジ(ストローク方向に垂直な線の画素)を記録するクロスエッジ(114)と、一群の交差エッジとしてのクロスエッジセット(116)と、線の追跡の結果としてローライン(118)とを格納する。
【0029】
画像は、ライティングボードを含むことができ、ストロークは、ライティングボード上の連続的なペンマーキングに対応しうる。マスク(112)は、ライティングボードを撮り込んでいる(capturing)画像に閾値処理を適用することによって生成された2値画像と考えることができる。閾値処理の結果として、ストロークの不規則性が捕捉されうる。ストロークは、マスク(112)内の白画素を用いて表すことができ、一方、マスク(112)内の他の全ては黒画素を用いて表すことができる。マスク(112)は、画像の全部または一部のみに対応しうる。マスク(112)は、システム内で生成されてもよいし、任意のソースから取得(たとえば、ダウンロード)されてもよい。さらに、マスク(112)は、任意のサイズおよび任意のフォーマットでありうる。
【0030】
本発明の1つ以上の実施形態において、システム(100)は、マスキングエンジン(120)を含む。マスキングエンジン(120)は、ハードウェア(すなわち、回路)、ソフトウェア、またはそれらの任意の組み合わせで実施されうる。マスキングエンジン(120)は、ライティングボードを撮り込んでいる画像を読み取り、当該画像に閾値処理を適用して、二値画像をマスク(112)として取得できる。マスクエンジン(120)は、取得されたマスク(112)をバッファー(110)に格納できる。
【0031】
本発明の1つ以上の実施形態では、システム(100)は分析エンジン(130)を含む。分析エンジン(130)は、ハードウェア(すなわち、回路)、ソフトウェア、またはそれらの任意の組み合わせで実施されうる。分析エンジン(130)は、マスク(112)の画素を読み取り、マスクにおけるオフ画素に遭遇するまでストロークの方向に垂直な正および負の方向に走査することによって、上記ストローク内の複数の交差エッジを特定することができる。本発明の1つ以上の実施形態では、分析エンジン(130)は、マスク上に描画された基準線と交差する交差エッジを特定できる。上述したように、基準線はハフ線でありうる。上述のように、クラス クロスエッジを使用して、単一の交差エッジの画素に関する情報を記録し、その幅を戻すための方法を実装することができる。クロスエッジはまた、その位置(たとえば、中間点)を返す方法を実装してもよい。
図6は、水平ラインのマスク内の1つの画素に対する単一の交差エッジを表すグレーの垂直ストリップ(vertical strip)を示す。この例では、クロスエッジは12画素を記録し、ゆえに12の幅を返す。
【0032】
分析エンジン(130)は、すべての画素を走査した後、クロスエッジ(114)に基づいてクロスエッジセット(116)を生成できる。上述のように、クロスエッジセットは、セット内の交差エッジに関する追加情報を含むことができる。
図8は、
図7に示すような5つの交差エッジを含むクロスエッジセットに関するそのような追加情報の一例を示す。「向き」は、ストロークの向き(たとえば、水平または垂直)を表す。「num_edges」は交差エッジの数を表し、「width_min」は交差エッジの最小幅を表し、「width_max」は交差エッジの最大幅を表し、「幅モード」は幅のモードを表す。「mode_count」はモード幅のカウントを表し、「width_mean」は幅の平均を表し、「ヒストグラム」は、すべての幅およびその頻度を含むデータ構造を表す。「beg」と「end」はクロスエッジセットの範囲を表す。「probable_line_width_min」および「probable_line_width_max」は交差エッジの最も可能性のある最小および最大幅を表す。
【0033】
図7に示す例では、2つの交差エッジが幅「11」および3つの交差エッジが「12」を有する。この場合、分析エンジン(130)は、
図8における「ヒストグラム」として示されるデータ構造「11[2]12[3]」を生成する。追加情報は、交差エッジがクロスエッジセット(116)に追加または削除されるたびに更新されてもよい。
【0034】
本発明の1つ以上の実施形態では、クロスエッジセットのクラスの次のメソッド、WidthTolerances()、ClosestGoodEdge()、およびTrailingMomentum()を使用することができる。
【0035】
WidthTolerances()は、クロスエッジセットに潜在的に属する交差エッジの幅に対する最小および最大許容値を設定する。上記許容は、最初に、特定された交差エッジの最小幅(probable_line_width_min)から最大幅(probable_line_width_max)までスパンを計算することによって計算される。最大許容値は、スパンの半分と最大幅の合計でありうる。最小許容値は、最小幅からスパンの半分を引いたものでありうる。
【0036】
ClosestGoodEdge()は、指定された交差エッジを入力として受け取り、クロスエッジセットのWidthTolerances()によって計算された許容値内にある入力交差エッジに最も近い交差エッジを見つける。これにより、信頼できるデータを使用して線についての判定を行うことができる。
【0037】
TrailingMomentum()は、一端部において一連の交差エッジ(またはクロスエッジセット)のモーメンタム(momentum)を特定するベクトルを取得する。上記モーメンタムは、クロスエッジセットのトレーリング交差エッジ(trailing cross edge)と終端交差エッジ(terminal cross edge)の中点間のベクトルを見つけることによって計算される。トレーリング交差エッジは、終端交差エッジからNエッジの交差エッジからClosestGoodEdge()によって「最も近い良好エッジ」を探すことによって見つけられる。終端交差エッジからClosestGoodEdge()によって最も近い良好なエッジを探すことで、終端交差エッジが見つけられる。Nはパラメータであり、たとえば20に設定されうる。
【0038】
本発明の1つ以上の実施形態において、システム(100)は、追跡エンジン(140)を含む。追跡エンジン(140)は、ハードウェア(すなわち、回路)、ソフトウェア、またはそれらの任意の組み合わせで実施されうる。追跡エンジン(140)は、ローライン(118)を作成し、分析エンジン(130)によって生成されたクロスエッジセット(116)に基づいてインスタンスを修正するように構成される。
【0039】
本発明の1つ以上の実施形態では、追跡エンジン(140)は、隣接する少なくとも2つの交差エッジの位置から計算された第1のベクトルに基づいて、クロスエッジセット(116)内の1つ以上の隣接する交差エッジを含むグループを拡張できる。この最初の拡張では、グループ内のエッジに隣接するが、基準線と交差しない交差エッジを探す。拡張されたグループは、ローライン(118)に格納される。本発明の1つ以上の実施形態では、一旦すべてのグループが拡張されてローラインに格納されると、追跡エンジン(140)は、ローライン(118)に含まれる少なくとも2つの交差エッジの位置から計算された第2のベクトルに基づいてローライン(118)を拡張しうる。この第2の拡張は、最初のグループに隣接していないが近くにあり、ストロークの意図に従うエッジを探す。
【0040】
本発明の1つ以上の実施形態では、第1のベクトルは、すくなくとも(i)最小および最大許容値の間の幅を有し、グループの端部で交差エッジに最も近接した交差エッジの位置と、(ii)最小および最大許容値との間の幅を有し、上記端部において交差エッジから所定の距離だけ離れた上記交差エッジの位置とから算出されうる。本発明の1つ以上の実施形態では、第2のベクトルは、少なくとも(i)最小および最大許容値の間の幅を有し、ローライン(118)の端部において交差エッジに最も近接した交差エッジの位置と、(ii)最小および最大許容値との間の幅を有し、ローライン(118)の上記端部において交差エッジから所定の距離だけ離れた上記交差エッジの位置とから算出できる。上で述べたように、最小と最大許容値はWidthTolerances()メソッドで取得でき、第1と第2のベクトルはTrailingMomentum()メソッドで取得できる。
【0041】
本発明の1つ以上の実施形態では、追跡エンジン(140)は、ストロークの幅の最大許容値に基づいて、表の線の交差部に対応するローライン(118)に含まれる1つ以上の交差エッジを更新できる。
【0042】
本発明の1つ以上の実施形態では、追跡エンジン(140)は、最大許容値および2つの近隣のグループの少なくとも2つの交差エッジの位置に基づいて、ローライン(118)内の上記2つの隣接するグループ間のギャップを特定できる。上記2つの隣接するグループの各々は、複数の交差エッジの隣接する交差エッジを含む。追跡エンジン(140)は、特定されたギャップに対応する任意の交差エッジをローライン(118)に追加できる。
【0043】
本発明の1つ以上の実施形態では、追跡エンジン(140)は、最大幅許容値に基づいて、ストロークの穴に対応するローライン(118)の交差エッジを特定できる。続いて、追跡エンジン(140)は、上記穴に対応する追加の交差エッジを特定し、追加の交差エッジでローライン(118)を更新できる。
【0044】
本発明の1つ以上の実施形態では、追跡エンジン(140)は、基準線と交差する1つ以上の隣接する交差エッジをそれぞれ含む1つ以上のグループを拡張できる。その場合、追跡エンジンは、最大のグループ(すなわち、連続する交差エッジの数が最も多いグループ)を特定し、最初に上記最大のグループを拡張できる。その後、追跡エンジン(140)は、上記拡張された最大グループと別の拡張グループをローライン(118)に併合できる。
【0045】
本発明の1つ以上の実施形態では、追跡エンジン(140)は、基準線(すなわち、ハフ線)が描かれる方向に交差エッジ群を拡張できる。
【0046】
図1は、4つの構成要素(110,120,130,140)を有するシステム(100)を示しているが、システム(100)は、より多くの構成要素またはより少ない構成要素を有しうる。たとえば、システム(100)は、マスク(112)が生成されるライティングボードの画像を取り込むために、デジタルカメラを備えたスキャナまたはスマートフォンを含みうる。別の例として、システム(100)は、マスク(112)上のコンテンツ(たとえば、テキスト文字)を抽出するためにマスク(112)上に追加の画像処理(たとえば、OCR)を実行する追加のエンジンを含みうる。
【0047】
図2は、本発明の1つ以上の実施形態によるフローチャートを示す。上記フローチャートは、画像処理のための処理を示す。
図2における1以上のステップは、
図1を参照して上述したシステム(100)のコンポーネント(110,120,130,140)によって実行されうる。本発明の1つ以上の実施形態では、
図2に示した1以上のステップは、省略、繰り返し、および/または
図2に示す順序とは異なる順序で実行されうる。したがって、本発明の範囲は、
図2に示されるステップの特定の配列に限定されるとみなされるべきではない。
【0048】
まず、マスキングエンジン(120)は、ライティングボードを撮影した画像を読み取る(ステップ205)。画像は、ライティングボード上の手書きの表のストロークを含みうる。画像は任意のサイズまたはフォーマットのものでありうる。画像は、システム(100)の外部から取得できる。あるいは、画像は、システム(100)のメモリーに予め記憶されていてもよい。
【0049】
ステップ210において、マスキングエンジン(120)は、上記画像からマスク(112)を取得または生成する。上記マスクは、任意のサイズまたはフォーマットのものでありうる。上記マスクは画像全体に対応してもよいし、画像の一部分にのみ対応してもよい。マスクエンジン(120)は、マスク(112)をバッファー(110)に格納できる。
【0050】
ステップ215において、分析エンジン(130)は、ストロークの方向に垂直な正および負の方向に走査することによってマスク上の複数の交差エッジを特定する。分析エンジン(130)は、上記マスク上に描画されたハフ線と交差する交差エッジを特定できる。分析エンジン(130)は、クロスエッジ(114)を使用して、幅および位置情報を含む交差エッジ画素を記録することができる。分析エンジン(130)は、クロスエッジ(114)をバッファー(110)に格納できる。
【0051】
ステップ220において、分析エンジン(130)は、上記特定された交差エッジに関する追加情報を含む、ストロークに対して見つけられた一連の全ての交差エッジを記憶する初期クロスエッジセット(116)を生成する。分析エンジン(130)は、クロスエッジセット(116)をバッファー(110)に格納できる。初期クロスエッジセット(116)は、ハフ線と交差するすべての交差エッジを特定し、隣接するエッジの1つ以上のグループに分割されうる。
【0052】
ステップ225において、追跡エンジン(140)は、上記グループ内の少なくとも2つの交差エッジの位置に基づいて、初期クロスエッジセット内の隣接エッジのグループのための第1のベクトルを計算する。上述したように、第1のベクトルは、グループの端部に含まれる交差エッジのモーメンタムを識別するベクトルでありうる。
【0053】
ステップ230において、追跡エンジン(140)は、上記第1のベクトルに基づいて、初期クロスエッジセット(116)内の隣接エッジのグループを拡張する。上記グループは、以下に説明する例に示すように、ハフ線と交差しない可能性がある、上記グループに隣接する交差エッジを含むように拡張される。追跡エンジン(140)は、各々拡張されたグループをローライン(118)に追加できる。ステップ225および230は、初期クロスエッジセット(116)内の隣接する交差エッジを含む追加のグループについて繰り返されてもよい。
【0054】
ステップ235において、追跡エンジン(140)は、ローライン(118)内の少なくとも2つの交差エッジの位置に基づいて第2のベクトルを計算する。上述したように、上記第2のベクトルは、端部においてローライン(118)の交差エッジのモーメンタムを特定するベクトルでありうる。
【0055】
ステップ240において、追跡エンジン(140)は、ローライン(118)に含まれる少なくとも2つの交差エッジの位置から計算された第2のベクトルに基づいてローライン(118)を拡張する。この拡張は、ストロークの意図を完成させる近くのエッジを探す。追跡エンジン(140)は、上記拡張されたローライン(118)をバッファー(110)に格納できる。ステップ235および240は、可能な限り多くの近隣エッジを見つけるために繰り返し実行できる。近くのエッジを見つけるアルゴリズムの詳細については後述する。
【0056】
ステップ245において、追跡エンジン(140)は、ローライン(118)における交差エッジの2つの隣接するグループ間のギャップを充填する。このステップは、
図3に示すように、複数のステップに分割されうる。ステップ305において、追跡エンジン(140)は、最大幅許容値および上記2つの隣接するグループの少なくとも2つの交差エッジの位置に基づいて、それぞれが1つ以上の隣接する交差エッジを含むローライン(118)内の上記2つの隣接するグループを分離するギャップを特定する。続いて、ステップ310において、追跡エンジン(140)は、特定されたギャップに対応する任意の交差エッジをローライン(118)に追加する。ステップ245は、他の隣接するグループ間のギャップを充填するために繰り返し実行されてもよい。
【0057】
ステップ250では、追跡エンジン(140)は、ローライン(118)内のストローク(または線)内の穴を満たす。このステップは、
図4に示すように、複数のステップに分割されうる。ステップ405において、追跡エンジン(140)は、上記線の上記穴に対応するローライン(118)の交差エッジを、最大幅許容値に基づいて特定する。ステップ410において、追跡エンジン(140)は、上記穴の反対側の追加の交差エッジを特定する。ステップ415において、追跡エンジン(140)は、上記追加の交差エッジでローライン(118)の特定された交差エッジを更新する。ステップ250は、ローライン(118)内のストロークの内側にある他の穴を充填するために繰り返し実行されうる。
【0058】
最後に、ステップ255において、追跡エンジン(140)は、上記ストロークの幅の最大許容値に基づいて、上記ストロークの交差部に対応するローライン(118)の1つ以上の交差エッジを更新する。
【0059】
図5は、本発明の1つ以上実施形態による手描きの表の線を追跡するためのアルゴリズムの例を示す。視覚的な例を示す
図5、
図9〜30を参照して、分析エンジン(130)および追跡エンジン(140)によって実行されるアルゴリズムの詳細を以下に説明する。この例では、
図9に示すマスクは、マスクエンジン(120)によって取得され、バッファー(110)に格納されている。図に示すように、入力には破損個所や亀裂などの不規則性がある。
【0060】
1つ以上の実施形態によるアルゴリズムの最初のステップでは、分析エンジン(130)は、
図10(01行)に示すように、マスク(112)上に描画されたハフ線Lに基づいて、ハフ線クロスエッジセットを構築する。具体的には、分析エンジン(130)は、ハフ線Lを基準線として交差するストロークのすべての交差エッジを特定する(
図11のグレー領域として示される)。その後、分析エンジン(130)は、特定された交差エッジに対応するクロスエッジ(114)のインスタンスを作成し、クロスエッジ(114)を含むクロスエッジセット(116)を作成する。
【0061】
02行において、追跡エンジン(140)は、ローライン(118)を、ハフ線クロスエッジセット(116)における最大の集合または接続された(隣接する)エッジ群に初期化する。上記のように、ローライン(118)は、表の線の意図を表すクロスエッジセットである。この例は、交差エッジの6つのグループ(すなわち、クロスエッジセット(116)内のグループG1〜G6)を含み、G1は、交差エッジの最大数を有する最大グループである。このようにして、ローライン(118)は、
図12に示すように、グループG1を含むように初期化される。
【0062】
03行において、追跡エンジン(140)は、TrailingMomentum()を使用して、いずれかの方向にローライン(118)のエッジを拡張する。追跡エンジン(140)は、両端において線のTrailingMomentum()を計算し、モーメンタムベクトルに沿って見つけられる追加の隣接する交差エッジを探す。追跡エンジン(140)は、現在のエッジから最大N画素離れた交差エッジを探索できる。この例では、Nは1に等しいが、他の任意の値を使用できる。最大グループG1の拡張後、拡張グループG1’を含むローライン(118)は、
図13に示すように成長する。
【0063】
04行において、追跡エンジン(140)は、ハフ線クロスエッジセット(116)からローライン(すなわち、グループG1’)の新たに拡張されたエッジを差し引く。これは、追跡エンジン(140)が残ったものにのみに集中するように、ハフ線クロスエッジセット(116)から発見された交差エッジを除去する。
図14は、残りのグループ(すなわち、ハフ線クロスエッジセット(116)内のグループG2〜G6)を示す。
【0064】
05行では、ハフ線クロスエッジセット(116)がまだ交差エッジを有するか否かが判定される。YESの場合は、06行から10行が繰り返される。ここでは、クロスエッジセット(116)内に5つのグループが残っているので、処理はループに入る。
【0065】
06行において、追跡エンジン(140)は、既存のローライン(118)へのハフ線クロスエッジセット(116)内の連続交差エッジの最も近いグループを見つける。ここで、追跡エンジン(140)は、グループG1’を含む現在のローライン(118)にクロスエッジセット(116)内の最も近いグループであるグループG2を見つけることができる。グループG2が
図15に示される。
【0066】
07行では、追跡エンジン(140)は、03行と同じ方法で最も近いグループをいずれかの方向に拡張する。その結果、グループG2は、
図16に示すようにグループG2’に拡張される。
【0067】
08行では、上記拡張された最も近いグループと上記既存のローライン(118)とを併合できるかどうかが判定される。09行において、上記拡張された最も近いグループおよび上記既存のローライン(118)が併合されうると判定された場合、追跡エンジン(140)は、上記拡張された最も近いグループを上記ローライン(118)に併合する。ここで、追跡エンジン(140)は、2つの交差エッジ(すなわち、グループG1’およびG2’)のセットを比較し、両者を併合可能であると決定できる。追跡エンジン(140)は、上記交差エッジを併合し、それらをローライン(118)として保存することができる。
図17は、併合されたローライン(118)を示す。
【0068】
10行において、追跡エンジン(140)は、上記拡張された最も近いグループをハフ線クロスエッジセット(116)から差し引く。ここで、
図18に示すように、グループG2’は、クロスエッジセット(116)から差し引かれる。
【0069】
次に、処理は05行に戻り、ハフ線クロスエッジセット(116)が空になるまでループを繰り返す。この例では、交差エッジの4つのグループG3−G6が、ハフ線クロスエッジセット(116)に依然として残っている。したがって、処理はループを繰り返す。
【0070】
図19(06行)に示すように、ここで、グループG3は、既存のローライン(118)に対して、連続するハフ線クロスエッジの最も近いグループとして位置付けられる。次に、追跡エンジン(140)は、いずれかの方向にグループG3を拡張しようとする(07行)。しかし、この場合、グループの両端における交差エッジの中央からのモーメンタムに追従しても追加の交差エッジが発見されないので、追跡エンジン(140)は追加のエッジを見つけない。続いて、追跡エンジン(140)は、最も近いグループと既存のローラインとを併合できるどうかを判定しうる(08行)が、併合が不可能であると判定する。最後に、
図20に示すように、追跡エンジン(140)は、ハフ線クロスエッジセット(116)からグループG3を差し引く(10行)。
【0071】
この処理は、ハフ線クロスエッジセットのエッジがなくなるまで、ループ内で継続する。この例では、ローライン(118)は
図21に示すように成長する。
【0072】
この時点までに構築されたローライン(118)は、ハフ線Lおよびその隣接する近傍と交差するクロスエッジに基づいているので、現在のローライン(118)のスパンが実際に線の意図に従う合理的な確実性がある。次の段階で、アルゴリズムは可能な限り両端においてローライン(118)を拡張することにより、マスク内のより多くのクロスエッジを見つけることを試みる(11行)。
【0073】
12〜13行において、追跡エンジン(140)は、メソッドClosestGoodEdge()およびTrailingMomentum()を使用して、線の端部における最も近く良好なエッジの中間点と、上記端部におけるトレーリングモーメントとを計算する。続いて、追跡エンジン(140)は、中間点がマスクの境界内にある間、15〜22行で計算を繰り返す。
【0074】
15行において、追跡エンジン(140)は、モーメンタムの方向に沿って1画素だけ中間点をインクリメントする。16行において、追跡エンジン(140)は、現在の中間点においてローライン(118)の一部ではないクロスエッジを探す。17行では、クロスエッジが見つかったかどうかが判定される。そうであれば、18行で、追跡エンジン(140)は、クロスエッジを新しいクロスエッジセットに追加し、上記の03行と同様の方法でいずれかの方向に拡張する。19行では、拡張された新しいクロスエッジセットと既存のローライン(118)が併合されうるかどうかが判定される。そうであれば、20〜22行で、追跡エンジン(140)は、拡張された最も近いグループをローライン(118)に併合し、ClosestGoodEdge()の中間点をローライン(118)の新しい端部に対して計算し、上記端部におけるTrailingMomentum()を計算する。15〜22行での計算は、中間点がマスク(112)の境界内にある間に繰り返される。
【0075】
図21に示すように、左端部E1には余裕がないが、右端部E2においてより多くのエッジを取り出すことができる。したがって、追跡エンジン(140)は、線の右端でTrailingMomentum()を計算し、その後、
図22に示すように、追加のエッジを探すWidthTolerances()の上限の幅を掃引するベクトルに従う。追跡エンジン(140)が第1のクロスエッジを見つけ出すと、追跡エンジン(140)は、これを新たなクロスエッジセットに追加し、クロスエッジセットは、セグメントのTrailingMomentum()を使用し、N画素離れたエッジを探していずれかの方向に再び拡張される。追跡エンジン(140)は、ローライン(118)と新たに発見されたクロスエッジセットとが併合可能であるかどうかを判定できる。
図23は、ローラインの右端が拡張された結果の一例を示す。
【0076】
図24および26に示すように、追跡エンジン(140)がローライン(118)のエッジを可能な限り拡張した後、追跡エンジン(140)はローライン(118)の内部に焦点を合わせ、ローライン(118)のギャップおよび穴を埋めようとする。追跡エンジン(140)は、ローライン(118)の一方の端部から他の端部(以下では可能なすべての交差エッジCと呼ぶ)へ交差エッジを走査して、ギャップまたは穴を充填するために探す(23〜34行)。
【0077】
図24に示すように、25〜30行において、追跡エンジン(140)は、ライン内のギャップを充填する。追跡エンジン(140)が線内にギャップを見つけた場合、追跡エンジン(140)は、WidthTolerances()によって計算された最大許容値に等しい高さを有し、ギャップの2つの端の中間点の間の線上にセンタリングされたウィンドウW内の交差エッジを調査する。追跡エンジン(140)は、上記ウィンドウ内で見つかったエッジをローライン(118)に追加できる。
【0078】
25行において、ローラインがCでクロスエッジを欠いているかどうかが判定される。そうであれば、26行において、追跡エンジン(140)は、空でないクロスエッジを見つけるまで探索を続ける。この操作は、1つ以上の交差エッジのギャップGを特定できる。27行では、追跡エンジン(140)は、Gの両側でClosestGoodEdge()を見つけることができる(以下、クロスエッジPおよびQと呼ぶ)。28行では、追跡エンジン(140)は、Pの中点からQの中点に向かう線Mを描画する。次に、29行で、追跡エンジン(140)は、WidthTolerances()の上限に対応する幅を有するMを中心としたウィンドウを使用し、Mから外側に漸進的に移動しつつ、Mに沿ってクロスエッジを探索する。最後に、30行において、クロスエッジが見つかったかどうかが判定され、そうであれば、追跡エンジン(140)は、ローライン(118)にクロスエッジを追加する。
図25は、この充填作業の結果を示す(25〜30行)。
【0079】
追跡エンジン(140)は、すでにエッジを有するローライン(118)の領域に対する追加のエッジを見つけることができる。
図26に示すように、これは、ライン内に穴Hがある場合に起こり得る。この領域の幅は、予想される線の幅よりも狭いので、この領域は、線を完成させる可能性のある追加のエッジについて、両側で走査される。新しいクロスエッジは、WidthTolerances()の最大許容値に等しい幅まで、ローライン(118)内の既存のエッジと併合される。
【0080】
31行では、ローライン(118)がCにおいてクロスエッジを有し、当該クロスエッジの幅がWidthTolerances()の上限よりも小さいかどうかが判定される。そうであれば、32行において、追跡エンジン(140)は、クロスエッジの幅をWidthTolerances()の最大許容値から差し引いた予想画素数Eを計算する。33行において、追跡エンジン(140)は、両端E画素からクロスエッジに沿って走査して、追加のクロスエッジを探す。34行では、追加のクロスエッジが見つけられ、2つのクロスエッジの結合の幅がWidthTolerances()の上限よりも小さいかどうかが判定される。そうであれば、追跡エンジン(140)は上記クロスエッジを上記結合に置き換える。
図27にこの交換操作の結果を示す(31〜34行)。
【0081】
図28に示すように、35〜38行において、追跡エンジン(140)は、他のラインとの交差部になっている可能性があるローライン(118)のクロスエッジを更新する。追跡エンジン(140)は、WidthTolerances()を超える、ローライン(118)内のエッジのグループを探すことによって、そのようなクロスエッジを見つけることができる。
【0082】
37行において、追跡エンジン(140)は、交差部を突き止める。上記交差部は、幅が著しく変化する線の領域であり、表の別の線が重なるローライン(118)の領域でありうる。38行では、交差部があるかどうかが判定される。そうである場合、追跡エンジン(140)は、交差部に対応する交差エッジをローライン(118)から除去し、上記交差部を通して補間された一連のクロスエッジを追加する。
図29にこの操作の結果を示す。交差部に対応するローライン(118)のクロスエッジは、隣接するクロスエッジの幅を有する新しいクロスエッジで更新される。この処理は、ローライン(118)内にあるすべての交差部について繰り返される。
図30は、処理が完了したときの結果を示す。
【0083】
本発明の実施形態は、使用されているプラットフォームにかかわらず、実際上あらゆるタイプのコンピューティングシステム上で実施できる。たとえば、コンピューティングシステムは、1つ以上のモバイルデバイス(たとえば、ラップトップコンピューター、スマートフォン、パーソナルデジタルアシスタント、タブレットコンピューター、または他のモバイルデバイス)、デスクトップコンピューター、サーバー、サーバシャーシ内のブレード、または本発明の1つ以上の実施形態を実行するために少なくとも最小処理能力、メモリー、および入力出力デバイスを含む任意の他のタイプの1つ以上のコンピューティングデバイスでありうる。たとえば、
図31に示すように、コンピューティングシステム(500)は、1つ以上のコンピュータープロセッサー(502)、関連メモリー(504)(たとえば、ランダムアクセスメモリー(RAM)、キャッシュメモリー、フラッシュメモリーなど)、1つ以上の記憶装置(506)(たとえば、ハードディスク、コンパクトディスク(CD)ドライブまたはデジタルバーサタイルディスク(DVD)ドライブ、フラッシュメモリースティックなどの光学ドライブ)および他の多数の要素および機能性を有する。コンピュータープロセッサー(502)は、命令を処理するための集積回路でありうる。たとえば、コンピュータープロセッサーは、1つ以上のコア、またはプロセッサーのマイクロコアでありうる。コンピューティングシステム(500)は、また、タッチスクリーン、キーボード、マウス、マイクロフォン、タッチパッド、電子ペン、または任意の他のタイプの入力デバイスなどの1つ以上の入力デバイス(510)を含むことができる。さらに、コンピューティングシステム(500)は、スクリーン(たとえば、液晶ディスプレイ(LCD)、プラズマディスプレイ、タッチスクリーン、陰極線管(CRT)モニター、プロジェクター、または他の表示装置)、プリンター、外部記憶装置、または任意の他の出力装置などの1つ以上の出力デバイス(508)を含むことができる。上記1つ以上の出力装置は、入力装置と同じであっても異なっていてもよい。コンピューティングシステム(500)は、ネットワークインターフェース接続(図示せず)を通じて、ネットワーク(512)(たとえば、ローカルエリアネットワーク(LAN)、インターネットなどのワイドエリアネットワーク(WAN)、モバイルネットワーク、または任意の他のタイプのネットワーク)に接続されうる。入力および出力デバイスは、局所的または遠隔的(たとえば、ネットワーク(512)を介して)にコンピュータープロセッサー(502)、メモリー(504)、および記憶装置(506)に接続されうる。多くの異なるタイプのコンピューティングシステムが存在し、前述の入力デバイスおよび出力デバイスは、他の形態をとってもよい。
【0084】
本発明の実施形態を実行するためのコンピューター読み取り可能なプログラムコードの形態のソフトウェア命令は、その全体または一部が、一時的にまたは永続的に、CD、DVD、記憶装置、ディスケット、テープ、フラッシュメモリー、物理メモリー、または任意の他のコンピューター読み取り可能な記憶媒体などのコンピューター読み取り可能な記録媒体に格納されうる。具体的には、ソフトウェア命令は、プロセッサーによって実行されるとき、本発明の実施形態を実行するように構成されたコンピューター読み取り可能なプログラムコードに対応することができる。
【0085】
さらに、前述のコンピューティングシステム(500)の1つ以上の要素は、遠隔地に配置され、ネットワーク(512)を介して他の要素に接続されうる。さらに、本発明の1つ以上の実施形態は、複数のノードを有する分散システム上で実施することができ、本発明の各部分は、分散システム内の異なるノード上に配置することができる。本発明の一実施形態では、ノードは、別個のコンピューティングデバイスに対応する。あるいは、ノードは、関連する物理メモリーを有するコンピュータープロセッサーに対応してもよい。あるいは、ノードは、コンピュータープロセッサー、もしくは共用のメモリーおよび/またはリソースを有するコンピュータープロセッサーのマイクロコアに対応してもよい。
【0086】
本発明は限られた数の実施形態に関して記載されているが、本開示の利益を有する当業者は、ここに開示された本発明の範囲から逸脱しない他の実施形態が考案され得ることを理解するであろう。したがって、本発明の範囲は、添付の特許請求の範囲によってのみ限定されるべきである。