Преглед изворни кода

added getPositionSimilarity in TrackedObjects

Alexander Hendrich пре 10 година
родитељ
комит
2ff5b9957b

+ 2 - 7
bbiwarg/Recognition/FingerRecognition/TrackedFinger.cs

@@ -63,13 +63,8 @@ namespace bbiwarg.Recognition.FingerRecognition
                 hand = detectedFinger.HandPoint;
             }
 
-            //tip position
-            float tipPointDistance = tip.getDistanceTo(TipPointPrediction);
-            float tipPointSimilarity = Math.Max(0, 1 - tipPointDistance / Parameters.FingerTrackerMaxTipPointMove);
-
-            //hand position
-            float handPointDistance = hand.getDistanceTo(HandPointPrediction);
-            float handPointSimilarity = Math.Max(0, 1 - handPointDistance / Parameters.FingerTrackerMaxHandPointMove);
+            float tipPointSimilarity = getPositionSimilarity(TipPointPrediction, tip, Parameters.FingerTrackerMaxTipPointMove);
+            float handPointSimilarity = getPositionSimilarity(HandPointPrediction, hand, Parameters.FingerTrackerMaxHandPointMove);
 
             return tipPointSimilarity * handPointSimilarity;
         }

+ 1 - 3
bbiwarg/Recognition/HandRecognition/TrackedHand.cs

@@ -36,9 +36,7 @@ namespace bbiwarg.Recognition.HandRecognition
 
         public override float calculateSimilarity(Hand detectedHand)
         {
-            //centroid position
-            float centroidDistance = CentroidPrediction.getDistanceTo(detectedHand.Centroid);
-            float centroidSimilarity = Math.Max(0, 1 - centroidDistance / Parameters.HandTrackerMaxCentroidMove);
+            float centroidSimilarity = getPositionSimilarity(CentroidPrediction, detectedHand.Centroid, Parameters.HandTrackerMaxCentroidMove);
 
             return centroidSimilarity;
         }

+ 4 - 17
bbiwarg/Recognition/PalmRecognition/TrackedPalm.cs

@@ -62,24 +62,11 @@ namespace bbiwarg.Recognition.PalmRecognition
 
         public override float calculateSimilarity(Palm detectedPalm)
         {
-            //hand
             float handSimilarity = (detectedPalm.Hand.TrackID == LastObject.Hand.TrackID) ? 1 : 0;
-
-            //wristUpper
-            float wristUpperDistance = WristUpperPrediction.getDistanceTo(detectedPalm.WristUpper);
-            float wristUpperSimilarity = Math.Max(0, 1 - wristUpperDistance / Parameters.PalmTrackerMaxWristUpperMove);
-
-            //wristLower
-            float wristLowerDistance = WristLowerPrediction.getDistanceTo(detectedPalm.WristLower);
-            float wristLowerSimilarity = Math.Max(0, 1 - wristLowerDistance / Parameters.PalmTrackerMaxWristLowerMove);
-
-            //fingersUpper
-            float fingersUpperDistance = FingersUpperPrediction.getDistanceTo(detectedPalm.FingersUpper);
-            float fingersUpperSimilarity = Math.Max(0, 1 - fingersUpperDistance / Parameters.PalmTrackerMaxFingersUpperMove);
-
-            //fingersLower
-            float fingersLowerDistance = FingersLowerPrediction.getDistanceTo(detectedPalm.FingersLower);
-            float fingersLowerSimilarity = Math.Max(0, 1 - fingersLowerDistance / Parameters.PalmTrackerMaxFingersLowerMove);
+            float wristUpperSimilarity = getPositionSimilarity(WristUpperPrediction, detectedPalm.WristUpper, Parameters.PalmTrackerMaxWristUpperMove);
+            float wristLowerSimilarity = getPositionSimilarity(WristLowerPrediction, detectedPalm.WristLower, Parameters.PalmTrackerMaxWristLowerMove);
+            float fingersUpperSimilarity = getPositionSimilarity(FingersUpperPrediction, detectedPalm.FingersUpper, Parameters.PalmTrackerMaxFingersUpperMove);
+            float fingersLowerSimilarity = getPositionSimilarity(FingersLowerPrediction, detectedPalm.FingersLower, Parameters.PalmTrackerMaxFingersLowerMove);
 
             float similarity = handSimilarity * wristUpperSimilarity * wristLowerSimilarity * fingersUpperSimilarity * fingersLowerSimilarity;
 

+ 3 - 10
bbiwarg/Recognition/TouchRecognition/TrackedTouchEvent.cs

@@ -79,18 +79,11 @@ namespace bbiwarg.Recognition.TouchRecognition
 
         public override float calculateSimilarity(TouchEvent detectedTouchEvent)
         {
-            //finger similarity
             float fingerSimilarity = (fingerID == detectedTouchEvent.Finger.TrackID) ? 1 : 0;
+            float absolutePositionSimilarity = getPositionSimilarity(AbsolutePositionPrediction, detectedTouchEvent.AbsolutePosition, Parameters.TouchTrackerMaxAbsolutePositionMove);
+            float relativePositionSimilarity = getPositionSimilarity(RelativePositionPrediction, detectedTouchEvent.RelativePosition, Parameters.TouchTrackerMaxRelativePositionMove); 
 
-            //absolute position similarity
-            float absoluteDistance = detectedTouchEvent.AbsolutePosition.getDistanceTo(AbsolutePositionPrediction);
-            float absoluteSimilarity = Math.Max(0, 1 - absoluteDistance / Parameters.TouchTrackerMaxAbsolutePositionMove);
-
-            //relative position similarity
-            float relativeDistance = detectedTouchEvent.RelativePosition.getDistanceTo(RelativePositionPrediction);
-            float relativeSimilarity = Math.Max(0, 1 - relativeDistance / Parameters.TouchTrackerMaxRelativePositionMove);
-
-            float similarity = fingerSimilarity * absoluteSimilarity * relativeSimilarity;
+            float similarity = fingerSimilarity * absolutePositionSimilarity * relativePositionSimilarity;
 
             return similarity;
         }

+ 9 - 1
bbiwarg/Recognition/Tracking/TrackedObject.cs

@@ -3,6 +3,7 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using bbiwarg.Utility;
 
 namespace bbiwarg.Recognition.Tracking
 {
@@ -65,7 +66,7 @@ namespace bbiwarg.Recognition.Tracking
                 NumFramesInCurrentState++;
             else
                 NumFramesInCurrentState = 1;
-          }
+        }
 
         private TrackingState getNewState(T detectedObject)
         {
@@ -99,5 +100,12 @@ namespace bbiwarg.Recognition.Tracking
 
             return newState;
         }
+
+        protected float getPositionSimilarity(Vector2D p1, Vector2D p2, float maxDistance)
+        {
+            float distance = p1.getDistanceTo(p2);
+            float similarity = Math.Max(1 - distance / maxDistance, 0);
+            return similarity;
+        }
     }
 }