Browse Source

improved trackers

Alexander Hendrich 11 years ago
parent
commit
bc4e36cf8b

+ 12 - 9
bbiwarg/Detectors/Fingers/Finger.cs

@@ -81,26 +81,29 @@ namespace bbiwarg.Detectors.Fingers
         }
 
         public float getSimilarity(Finger compareFinger) {
-            /*//startDistance
+            //startDistance
             float maxStartDistance = 100;
-            float xDiffStart = lineEndPoint1.X - compareFinger.getLineEndPoint1().X;
-            float yDiffStart = lineEndPoint1.X - compareFinger.getLineEndPoint1().Y;
+            float xDiffStart = lineEndPoint1.x - compareFinger.getLineEndPoint1().x;
+            float yDiffStart = lineEndPoint1.y - compareFinger.getLineEndPoint1().y;
             float startDistance = (float)Math.Sqrt(xDiffStart * xDiffStart + yDiffStart * yDiffStart);
             float startSimilarity = Math.Max(1 - (startDistance / maxStartDistance), 0);
 
             //endDistance
-            float maxEndDistance = 50;
-            float xDiffEnd = lineEndPoint2.X - compareFinger.getLineEndPoint2().X;
-            float yDiffEnd = lineEndPoint2.X - compareFinger.getLineEndPoint2().Y;
+            float maxEndDistance = 100;
+            float xDiffEnd = lineEndPoint2.x - compareFinger.getLineEndPoint2().x;
+            float yDiffEnd = lineEndPoint2.y - compareFinger.getLineEndPoint2().y;
             float endDistance = (float)Math.Sqrt(xDiffEnd * xDiffEnd + yDiffEnd * yDiffEnd);
             float endSimilarity = Math.Max(1 - (endDistance / maxEndDistance), 0);
 
             //direction
+            float scalaProduct = direction * compareFinger.getDirection();
+            float lengthDirection = direction.norm();
+            float lengthCompareDirection = compareFinger.getDirection().norm();
+            float directionSimilarity = Math.Abs(scalaProduct / (lengthDirection * lengthCompareDirection));
 
+            //Console.WriteLine(Math.Round(directionSimilarity, 2) + "###" + Math.Round(startSimilarity, 2) + "###" + Math.Round(endSimilarity, 2));
 
-
-            return (0.2f*startSimilarity + 0.8f*endSimilarity)*/;
-            return 1.0f;
+            return (startSimilarity + endSimilarity + directionSimilarity) / 3;
             
         }
 

+ 1 - 1
bbiwarg/Detectors/Fingers/FingerTracker.cs

@@ -44,7 +44,7 @@ namespace bbiwarg.Detectors.Fingers
 
         private void findTrackedFingers()
         {
-            float minSimilarity = 0.6f;
+            float minSimilarity = 0.75f;
             trackedFingers = new List<Finger>();
 
             foreach (Finger finger in detectedFingers[0])

+ 2 - 2
bbiwarg/Detectors/Touch/TouchTracker.cs

@@ -15,7 +15,7 @@ namespace bbiwarg.Detectors.Touch
         private int framesUntilTracked;
 
         public TouchTracker() {
-            framesUntilTracked = 3;
+            framesUntilTracked = 2;
             detectedTouchEvents = new List<TouchEvent>[framesUntilTracked];
 
             for (int i = 0; i < framesUntilTracked; i++) {
@@ -51,7 +51,7 @@ namespace bbiwarg.Detectors.Touch
                 {
                     touchImage.setTouchAt(te.getX(), te.getY(), TouchImageState.touchTracked);
                     trackedTouchEvents.Add(te);
-                    Console.WriteLine("touch tracked at x:" + te.getX() + " y:" + te.getY() + " [floodValue:" + te.getFloodValue() + "]");
+                    //Console.WriteLine("touch tracked at x:" + te.getX() + " y:" + te.getY() + " [floodValue:" + te.getFloodValue() + "]");
                 }
             }
         }

+ 1 - 1
bbiwarg/MainBBWIWARG.cs

@@ -12,7 +12,7 @@ namespace bbiwarg
     {
         static void Main(string[] args)
         {
-            IInputProvider inputProvider = new IisuInputProvider("..\\..\\videos\\touch\\4.skv");
+            IInputProvider inputProvider = new IisuInputProvider();//"..\\..\\videos\\touch\\4.skv");
             VideoHandle videoHandle = new VideoHandle(inputProvider);
             videoHandle.start();
 

+ 2 - 2
bbiwarg/VideoHandle.cs

@@ -125,8 +125,8 @@ namespace bbiwarg
             fingerTracker.setDetectedTouchEventsThisFrame(fingerDetector.getFingers(), fingerImage);
 
             //detect+track touchEvents
-            //touchDetector = new TouchDetector(fingerTracker.getFingers(), depthImage, touchImage);
-            touchDetector = new TouchDetector(fingerDetector.getFingers(), depthImage, touchImage);
+            touchDetector = new TouchDetector(fingerTracker.getFingers(), depthImage, touchImage);
+            //touchDetector = new TouchDetector(fingerDetector.getFingers(), depthImage, touchImage);
             touchTracker.setDetectedTouchEventsThisFrame(touchDetector.getTouchEvents(), touchImage);
 
             palmImage = new PalmImage(edgeImage);