これは活発な研究分野であり、この投稿で説明されているアルゴリズムと方法は基本的なものであり、完全にヒューリスティックであるか、これらの基本的な方法に基づいた、より優れた/より具体的なソリューションがあることを認識していると思います.
私が以前に使用し、同様の状況で良い結果を得たいくつかの方法を説明しようとします (電気グリッドの論理グラフを見つけるために単純な CAD 図面に取り組みました)。
セル内のテキストを含む赤い四角形の識別 (OCR)。
ドキュメントは高品質であり、現在の無料のOCRエンジン(Tesseractなど)を目的に合わせて簡単に適応させることができるため、これはソリューションにとって簡単です.90度、180度、...度、Tesseractのようなエンジンが検出それら (エンジンを構成する必要があり、場合によっては、検出された境界を抽出して OCR エンジンに個別に渡す必要があります) を最大限に高めるには、トレーニングと微調整が必要な場合があります。
コンポーネントのテンプレート マッチング。
ほとんどのテンプレート マッチング アルゴリズムは縮尺の影響を受けやすく、縮尺不変のアルゴリズムは非常に複雑であるため、ドキュメントの縮尺とサイズが異なる場合、単純なテンプレート マッチング アルゴリズムを使用しても正確な結果が得られるとは思えません。
SIFT や SURF などのアルゴリズムから優れた結果と独自の機能を得るために、形状の機能は非常に類似しておりまばらです。
輪郭を使用することをお勧めします。形状は単純で、コンポーネントはこれらの単純な形状を組み合わせて作成されます。輪郭を使用すると、これらの単純な形状 (長方形や三角形など) を見つけて、コンポーネントの形状に基づいて以前に収集したものと比較して輪郭を確認できます。 、たとえば、コンポーネントの 1 つが 4 つの長方形を組み合わせて作成されるため、相対的な輪郭を一緒に保持し、後で検出段階でドキュメントと照合することができます。
ネット上には輪郭分析に関する記事がたくさんあります。これらを参照することをお勧めします。輪郭を使用して単純な形状と複雑な形状を検出する方法の手がかりが得られます。
http://www.emgu.com/wiki/index.php/Shape_%28Triangle,_Rectangle,_Circle,_Line%29_Detection_in_CSharp
http://www.codeproject.com/Articles/196168/Contour-Analysis-for-Image-Recognition-in-C
http://opencv-code.com/tutorials/detecting-simple-shapes-in-an-image/
http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_imgproc/py_contours/py_contours_begin/py_contours_begin.html
ちなみに、EmguCV を使用してコードを c# に移植するのは簡単なので、心配する必要はありません。
方向と終点の注釈を含む矢印の識別。できれば線種。
線分を見つけるにはいくつかの方法があります (ハフ変換など)。この部分の主な問題は、他のコンポーネントも通常は線として検出されるため、最初にコンポーネントを見つけてドキュメントから削除すると、線を検出するのが大変になります。より簡単に、誤検出がはるかに少なくなります。
アプローチ
1- さまざまな色に基づいてドキュメントをレイヤー化し、必要なレイヤーごとに次のフェーズを実行します。
2- OCR を使用してテキストを検出および抽出し、テキスト領域を削除して、テキストなしでドキュメントを再作成します。
3-輪郭分析と収集されたコンポーネントデータベースに基づいてコンポーネントを検出し、検出されたコンポーネントを削除します (未知の形状は次のフェーズで誤検出を増加させるため、既知と未知のタイプの両方)。線のみが必要な検出
4-検出ライン
5-この時点で、検出された位置に基づいて、抽出されたコンポーネント、ライン、およびタグから論理グラフを作成できます
お役に立てれば