Browse Source

fingerDirectionDetection now only uses frst an last n slices

Alexander Hendrich 10 years ago
parent
commit
64e1123d43
2 changed files with 12 additions and 21 deletions
  1. 1 0
      bbiwarg/Constants.cs
  2. 11 21
      bbiwarg/Recognition/FingerRecognition/FingerDetector.cs

+ 1 - 0
bbiwarg/Constants.cs

@@ -42,6 +42,7 @@ namespace bbiwarg
         public static readonly int FingerMaxGapCounter = 5;
         public static readonly int FingerMaxSliceDifferencePerStep = 5;
         public static readonly int FingerMinNumSlices = 30 / FingerStepSize;
+        public static readonly int FingerNumSlicesForDirectionDetection = FingerMinNumSlices / 4;
         public static readonly int FingerMaxWidth = 30;
         public static readonly int FingerMinWidth = 5;
         public static readonly int FingerRemoveNumSlicesForCorrection = 5;

+ 11 - 21
bbiwarg/Recognition/FingerRecognition/FingerDetector.cs

@@ -226,32 +226,22 @@ namespace bbiwarg.Recognition.FingerRecognition
         
         private FingerSliceTrail orderTrailTipToHand(FingerSliceTrail trail)
         {
-            int numSlices = trail.NumSlices;
-            int numSlices_2 = numSlices/2;
-            int numAbove = 0;
-            int numBelow = 0;
-            float sumAbove = 0;
-            float sumBelow = 0;
-            for (int i = 0; i < numSlices; i++) {
-                float length = trail[i].Length;
-                if (i < numSlices_2)
-                {
-                    numBelow++;
-                    sumBelow += length;
-                }
-                else {
-                    numAbove++;
-                    sumAbove += length;
-                }
+            int numSlicesForDirectionDetection = Constants.FingerNumSlicesForDirectionDetection;
+            int maxIndex = trail.NumSlices-1;
+            float sumStart = 0;
+            float sumEnd = 0;
+
+            for (int i = 0; i < numSlicesForDirectionDetection; i++) {
+                sumStart += trail[i].Length;
+                sumEnd += trail[maxIndex - i].Length;
             }
 
-            float avergaeAbove = sumAbove / numAbove;
-            float averageBelow = sumBelow / numBelow;
 
-            Console.WriteLine(averageBelow + "\t" + avergaeAbove);
+            float avergaeStart = sumStart / numSlicesForDirectionDetection;
+            float averageEnd = sumEnd / numSlicesForDirectionDetection;
 
             //check direction
-            if (avergaeAbove < averageBelow)
+            if (avergaeStart > averageEnd)
                 trail.reverse();
 
             return trail;