これは、音声およびジェスチャ認識と同じ難しさです。言い換えれば、すべてのコーナー/ジャンクションを見つけたことを100%確信することはできません。また、見つけたものの中で、それらが正しいことを100%確信することはできません。絶対に確信が持てない理由は、あいまいさのためです。ユーザーは、直角に交わる2本の線を作成することを意図して1回のストロークを行った可能性があります。しかし、もし彼らがそれを素早くやったなら、「角」はかなり丸かったかもしれないので、それは検出されないでしょう。
したがって、誤検知を回避することはできません。あなたができる最善のことは、いくつかの可能なセグメンテーションを調査し、コンテキスト情報を使用してどれが最も可能性が高いかを判断することによって、それらを軽減することです。
スケッチのセグメンテーションに関する論文は毎年たくさんあります。これは解決すべき非常に基本的なことのように思えますが、それでも未解決のトピックです。私が使用しているのは、MergeCFと呼ばれるTexas A&Mのものです。これは、このペーパーにうまくまとめられています:http ://srlweb.cs.tamu.edu/srlng_media/content/objects/object-1246390659-1e1d2af6b25a2ba175670f9cb2e989fe/mergeCF-sbim09-fin.pdf 。
基本的に、曲率が高く(平均曲率の一部よりも大きい)、速度が遅い(タイムスタンプが必要な)領域を見つけます。曲率と速度を組み合わせると、初期フィットが大幅に向上します。これにより、ポイントのクラスターが得られ、何らかの方法で単一のポイントに縮小されます(たとえば、クラスターの中央に最も近いポイント、または曲率が最も高いポイントなど)。ただし、これはストロークの「オーバーフィット」です。アルゴリズムの次の段階は、最小のセグメントを繰り返し選択し、隣接するセグメントの1つとマージされた場合に何が起こるかを確認することです。マージしても全体的なエラーがそれほど大きくならない場合は、2つのセグメントを分離しているポイントを削除します。完了するまで、すすぎ、繰り返します。
新しいセグメンターを見てからしばらく経ちましたが、ブレークスルーはなかったと思います。
私の実装では、初期しきい値の平均ではなく曲率中央値を使用しています。これにより、より良い結果が得られるようです。私の大幅に変更された実装はここにあります。これは完全に自己完結型のものではありませんが、ある程度の洞察が得られる可能性があります。http://code.google.com/p/pen-ui/source/browse/trunk/thesis-code/src/org/six11/sf/CornerFinder.java