Forráskód Böngészése

Merge branch 'master' of https://git.tk.informatik.tu-darmstadt.de/etri-smartspaces

Alexander Hendrich 11 éve
szülő
commit
f92076d5a8

+ 9 - 6
bbiwarg/Constants.cs

@@ -15,7 +15,6 @@ namespace bbiwarg
         public static readonly int OutputNumImagesPerRow = 3;
         public static readonly float OutputScaleFactor = 1f; // output window size is scaled by this factor (from necessary size for images)
 
-
         // confidence image
         public static readonly int ConfidenceImageMinThreshold = 500;
 
@@ -56,7 +55,11 @@ namespace bbiwarg
         public static readonly float PalmMinThumbDefectStartEndLengthQuotient = 1.2f;
         public static readonly float PalmMinTumbDefectDepthThumbLengthQuotient = 0.8f;
         public static readonly float PalmMaxTumbDefectDepthThumbLengthQuotient = 1.2f;
-        
+        public static readonly float PalmThumbDefectmXX = 50.0f;
+        public static readonly float PalmThumbDefectmXY = -25.0f;
+        public static readonly float PalmThumbDefectmYY = 50.0f;
+        public static readonly float PalmThumbDefectProcessNoise = 5.0e+1f;    
+
         //palm Grid
         public static readonly int PalmGridRows = 3;
         public static readonly int PalmGridColumns = 3;
@@ -66,10 +69,10 @@ namespace bbiwarg
         public static readonly int TouchEventTipCorrectionFactor = 7;
         public static readonly int TouchEventAreaSize = 25;
         public static readonly int TouchEventNumFramesUntilTracked = 2;
-
-
-
-
+        public static readonly float TouchmXX = 0.005481396f;
+        public static readonly float TouchmXY = 0.0003090923f;
+        public static readonly float TouchmYY = 0.0005702336f;
+        public static readonly float TouchProcessNoise = 3.0e-4f;
 
         // colors
         public static readonly Color ColorDetected = Color.Green;

+ 1 - 1
bbiwarg/Graphics/TouchEventVisualizer.cs

@@ -35,7 +35,7 @@ namespace bbiwarg.Graphics
             {
                 lastTouchPositions = currentTouchPositions;
                 currentTouchPositions = new List<Vector2D>();
-                kalmanFilter = new Kalman2DPositionFilter(1.0e-4f, 1.0e-5f);
+                kalmanFilter = new Kalman2DPositionFilter(Constants.TouchmXX, Constants.TouchmXY, Constants.TouchmYY, Constants.TouchProcessNoise);
                 kalmanFilter.setInitialPosition(e.RelativePalmPosition);
                 pos = e.RelativePalmPosition;
             }

+ 7 - 4
bbiwarg/Recognition/PalmRecognition/PalmDetector.cs

@@ -25,7 +25,7 @@ namespace bbiwarg.Recognition.PalmRecognition
         private List<MCvConvexityDefect> convexityDefects;
         private Vector2D thumbDefectStart;
         private Vector2D thumbDefectEnd;
-        private Vector2D thumbDefectDepth, lastThumbDefectDepth;
+        public Vector2D thumbDefectDepth, lastThumbDefectDepth;
         
         private Kalman2DPositionFilter thumbDefectDepthFilter, thumbDefectStartFilter, thumbDefectEndFilter;
 
@@ -33,9 +33,12 @@ namespace bbiwarg.Recognition.PalmRecognition
 
         public PalmDetector()
         {
-            thumbDefectDepthFilter = new Kalman2DPositionFilter(5.0f, 1.0e+1f);
-            thumbDefectStartFilter = new Kalman2DPositionFilter(5.0f, 1.0e+1f);
-            thumbDefectEndFilter = new Kalman2DPositionFilter(5.0f, 1.0e+1f);
+            thumbDefectDepthFilter = new Kalman2DPositionFilter(Constants.PalmThumbDefectmXX, Constants.PalmThumbDefectmXY,
+                                                                Constants.PalmThumbDefectmYY, Constants.PalmThumbDefectProcessNoise);
+            thumbDefectStartFilter = new Kalman2DPositionFilter(Constants.PalmThumbDefectmXX, Constants.PalmThumbDefectmXY,
+                                                                Constants.PalmThumbDefectmYY, Constants.PalmThumbDefectProcessNoise);
+            thumbDefectEndFilter = new Kalman2DPositionFilter(Constants.PalmThumbDefectmXX, Constants.PalmThumbDefectmXY,
+                                                                Constants.PalmThumbDefectmYY, Constants.PalmThumbDefectProcessNoise);
         }
 
         public void findPalmQuad(OutputImage outputImage, List<Hand> hands)

+ 10 - 4
bbiwarg/Utility/Kalman2DPositionFilter.cs

@@ -12,7 +12,7 @@ namespace bbiwarg.Utility
     class Kalman2DPositionFilter
     {
         private Kalman kalman;
-        private float measurementNoiseFactor, processNoiseFactor;
+        private float mXX, mXY, mYY, processNoiseFactor;
         private float fps;
 
         public bool Initialized { get; private set; }
@@ -24,9 +24,11 @@ namespace bbiwarg.Utility
         // v_y: velocity in y direction
         // a_x: acceleration in x direction
         // a_y: acceleration in y direction
-        public Kalman2DPositionFilter(float measurementNoiseFactor = 1.0e-1f, float processNoiseFactor = 1.0e-4f, int fps = 30)
+        public Kalman2DPositionFilter(float mXX, float mXY, float mYY, float processNoiseFactor = 1.0e-4f, int fps = 30)
         {
-            this.measurementNoiseFactor = measurementNoiseFactor;
+            this.mXX = mXX;
+            this.mXY = mXY;
+            this.mYY = mYY;
             this.processNoiseFactor = processNoiseFactor;
             this.fps = fps;
             reset();
@@ -59,7 +61,11 @@ namespace bbiwarg.Utility
 
             // measurement noise covariance matrix
             Matrix<float> measurementNoiseCovarianceMatrix = new Matrix<float>(2, 2);
-            measurementNoiseCovarianceMatrix.SetIdentity(new MCvScalar(measurementNoiseFactor));
+
+            measurementNoiseCovarianceMatrix[0, 0] = mXX;
+            measurementNoiseCovarianceMatrix[0, 1] = measurementNoiseCovarianceMatrix[1, 0] = mXY;
+            measurementNoiseCovarianceMatrix[1, 1] = mYY;
+
             kalman.MeasurementNoiseCovariance = measurementNoiseCovarianceMatrix;
 
             // process noise covariance matrix

+ 4 - 6
bbiwarg/VideoHandle.cs

@@ -209,11 +209,13 @@ namespace bbiwarg
             if (palmTouchDetector != null)
             {
                 foreach (PalmTouchEvent e in palmTouchDetector.PalmTouchEvents)
-                    touchEventVisualizer.addPalmTouchEvent(e, CurrentFrame);
+                {
+                touchEventVisualizer.addPalmTouchEvent(e, CurrentFrame);
+                }
                 touchEventVisualizer.updateImage();
                 OutputImages[4] = touchEventVisualizer.OutputImage;
             }
-
+            
             // add borders
             for (int i = 0; i < Constants.OutputNumImages; i++)
             {
@@ -221,10 +223,6 @@ namespace bbiwarg
 
             }
 
-            //OutputImages = new OutputImage[] {OutputImages[0], OutputImages[1], OutputImages[2], OutputImages[3], OutputImages[4]};
-            
-            //palmDetector.i1, palmDetector.i2, palmDetector.i3, palmDetector.i5, palmDetector.i6, palmDetector.i7, palmDetector.i8, palmDetector.i9};
-
             Timer.stop("processFrameUpdate");
         }
     }