web-dev-qa-db-ja.com

2D形状認識アルゴリズム-ガイダンスを探しています

ユーザーが円、三角形などの単純な図形、文字Aなどのより高度な図形から始めて、図形が正しく描画されたことを確認する機能が必要です。

正確さをリアルタイムで計算できる必要があります。たとえば、ユーザーが円を描くはずであるが長方形を描く場合、描画が行われている間にそれを検出できることを望みます。

形状認識にはいくつかの異なるアプローチがありますが、残念ながら私はそれらをすべて試して、何が機能するかを見る経験も時間もありません。

この特定のタスクにはどのアプローチをお勧めしますか?

あなたの助けに感謝します。

15
aviran

もう1つの方法は、比較するポイントからの最小距離にある各ポイントの平均を使用して、この問題で数学を使用できることです。

      function shortestDistanceSum( subject, test_subject ) {

         var sum = 0;

         operate( subject, function( shape ){

            var smallest_distance = 9999;

            operate( test_subject, function( test_shape ){
                var distance = dist( shape.x, shape.y, test_shape.x, test_shape.y );

                smallest_distance = Math.min( smallest_distance, distance );
            });

            sum += smallest_distance;

        });

            var average = sum/subject.length;

            return average;
       }

       function operate( array, callback ) {
          $.each(array, function(){
              callback( this );
          });
       }

       function dist( x, y, x1, y1 ) {
            return Math.sqrt( Math.pow( x1 - x, 2) + Math.pow( y1 - y, 2) );
        }

        var square_shape = Array; // collection of vertices in a square shape
        var triangle_shape = Array; // collection of vertices in a triangle
        var unknown_shape = Array; // collection of vertices in the shape your'e comparing from

        square_sum = shortestDistanceSum( square_shape, unknown_shape );
        triangle_sum = shortestDistanceSum( triangle_shape, unknown_shape );

最も低い合計が最も近い形状です。

0
PauAI

初期イメージとユーザー入力という2つの入力があり、ブール値の結果を探しています。

理想的には、すべての入力データを同等の形式に変換します。代わりに、両方のタイプの入力をパラメーター化し、 教師付き機械学習 アルゴリズムを使用することもできます(閉じた形状の場合、Nearest Neighborが思い浮かびます)。

秘trickは、適切なパラメーターを見つけることです。入力がフラットイメージファイルの場合、これはバイナリ変換である可能性があります。ユーザー入力がスワイプモーションまたはペンストロークである場合、これをバイナリとしてキャプチャおよびマッピングする方法があると確信していますが、元の入力に最も近いデータを使用した場合、アルゴリズムはおそらくより堅牢になります。

0
freekvd