単純な形状のセット (次の図を参照) があり、手書きの形状を認識して、おそらくセット内にある形状を把握したいと考えています。
それを行う簡単なアルゴリズムはありますか?またはオープンソースのライブラリですか?
ところで、私のタスクは単純なので、OpenCV のような複雑すぎるライブラリは使用しません。
前もって感謝します!!
単純な形状のセット (次の図を参照) があり、手書きの形状を認識して、おそらくセット内にある形状を把握したいと考えています。
それを行う簡単なアルゴリズムはありますか?またはオープンソースのライブラリですか?
ところで、私のタスクは単純なので、OpenCV のような複雑すぎるライブラリは使用しません。
前もって感謝します!!
C や C++ でそれを行う方法はわかりませんが、アルゴリズムは単純です。形状に角度が追加されるたびに成功率が低下することに注意してください。そのため、上記で指定した基本的な形状セットを認識するのには適していますが、それ以外はあまり役に立ちません。
もちろん、完全に正確なマッチングは不可能です。2 番目の例の形状が、傾いた平行四辺形なのか、傾いた正方形 (またはダイヤモンドや長方形) なのかさえわかりません。
これは基本的に線検出
です。直線を含む形状に対してのみ機能し、決して単純ではありません。
図に k 個の線分があると仮定し、k-means アルゴリズムを使用して点を線に集約します。
最初にポイントをランダムにクラスターに分割します。
これらのクラスターのそれぞれについて、点が近似している線を計算します。(点までのすべての距離の合計が最小
である線) 外れ値 (線から最も離れた点) は、より適切に適合する他のクラスターに再割り当てする必要があります。
特定のしきい値に達するまで最後の手順を繰り返し
ます。目的のしきい値に達しない場合は、別の値の K を試すことができます。
1 つに到達した場合は、これらの線の交点を計算し、不規則な形状を通常の形状に一致させるために必要な他のプロパティを抽出できます。
このように、正方形から三角形を、平行四辺形から正方形を区別できますが、非常に複雑です。
この「アルゴリズム」は、波線、点線、または線が交差しない形状に対して機能する可能性があるため、かなり堅牢です