فهرست منبع

-random calibration points
-find homography

Alexander Hendrich 10 سال پیش
والد
کامیت
68da5aa226
3فایلهای تغییر یافته به همراه17 افزوده شده و 22 حذف شده
  1. 14 20
      bbiwarg/Output/GlassesOutput/GlassesWindow.cs
  2. 1 0
      bbiwarg/Parameters.cs
  3. 2 2
      bbiwarg/Utility/Projection2DTo2D.cs

+ 14 - 20
bbiwarg/Output/GlassesOutput/GlassesWindow.cs

@@ -27,9 +27,9 @@ namespace bbiwarg.Output.GlassesOutput
         private ImageSize outputSize;
         private OutputImage image;
         private Projection2DTo2D projection;
-        private List<Vector2D> calibrationPoints;
-        private int calibrationPointIndex;
+        private Vector2D currentCalibrationPoint;
         private bool calibrationImageUpToDate;
+        private Random rand;
 
         public GlassesWindow(InputProvider inputProvider, InputHandler inputHandler, String name, ImageSize outputSize, int updateInterval)
         {
@@ -42,18 +42,9 @@ namespace bbiwarg.Output.GlassesOutput
             guiUpToDate = false;
             calibrationImageUpToDate = false;
 
-            Random rand = new Random();
-            calibrationPoints = new List<Vector2D>();
-
-            for (int i = 0; i < 4; i++)
-                calibrationPoints.Add(outputSize.getAbsolutePoint(new Vector2D((float)rand.NextDouble(), (float)rand.NextDouble())));
-
-            /*calibrationPoints.Add(outputSize.getAbsolutePoint(new Vector2D(0.25f, 0.25f)));
-            calibrationPoints.Add(outputSize.getAbsolutePoint(new Vector2D(0.75f, 0.25f)));
-            calibrationPoints.Add(outputSize.getAbsolutePoint(new Vector2D(0.75f, 0.75f)));
-            calibrationPoints.Add(outputSize.getAbsolutePoint(new Vector2D(0.25f, 0.75f)));*/
-            calibrationPointIndex = 0;
-            projection = new Projection2DTo2D(inputSize, outputSize, calibrationPoints.Count);
+            rand = new Random();
+            currentCalibrationPoint = getRandomOutputPoint();
+            projection = new Projection2DTo2D(inputSize, outputSize, Parameters.GlassesWindowNumCalibrationPoints);
 
             Name = name;
             Text = name;
@@ -147,7 +138,7 @@ namespace bbiwarg.Output.GlassesOutput
                 image.Dispose();
 
             image = new OutputImage(outputSize);
-            image.fillCircle(calibrationPoints[calibrationPointIndex], 25, Color.Orange);
+            image.fillCircle(currentCalibrationPoint, 25, Color.Orange);
         }
 
         private void updateGUI()
@@ -169,13 +160,12 @@ namespace bbiwarg.Output.GlassesOutput
                     {
                         if (frameData.TrackedFingers.Count == 1)
                         {
-                            Vector2D pointOutput = calibrationPoints[calibrationPointIndex];
+                            Vector2D pointOutput = currentCalibrationPoint;
                             Vector2D pointInput = frameData.TrackedFingers[0].TipPoint;
 
                             projection.addCalibrationPoints(pointInput, pointOutput);
 
-                            calibrationPointIndex = (calibrationPointIndex + 1) % calibrationPoints.Count;
-                            calibrationImageUpToDate = false;
+                            currentCalibrationPoint = getRandomOutputPoint();
                         }
                     }
                 }
@@ -183,9 +173,13 @@ namespace bbiwarg.Output.GlassesOutput
             else if (e.KeyCode == Keys.R)
             {
                 projection.reset();
-                calibrationImageUpToDate = false;
-                calibrationPointIndex = 0;
+                currentCalibrationPoint = getRandomOutputPoint();
             }
         }
+
+        private Vector2D getRandomOutputPoint()
+        {
+            return outputSize.getAbsolutePoint(new Vector2D((float)rand.NextDouble(), (float)rand.NextDouble()));
+        }
     }
 }

+ 1 - 0
bbiwarg/Parameters.cs

@@ -41,6 +41,7 @@ namespace bbiwarg
         public static readonly int GlassesWindowUpdateInterval = 1000 / 30; // 30fps
         public static readonly ImageSize GlassesWindowOutputSize = new ImageSize(1280, 720);
         public static readonly String GlassesWindowTitle = "BBIWARG - GlassesOutput";
+        public static readonly int GlassesWindowNumCalibrationPoints = 20;
 
         // TUIO
         public static readonly bool TuioEnabledByDefault = false;

+ 2 - 2
bbiwarg/Utility/Projection2DTo2D.cs

@@ -50,8 +50,8 @@ namespace bbiwarg.Utility
         }
 
         private void calibrate() {
-            homography = CameraCalibration.GetPerspectiveTransform(calibrationPointsA.ToArray(), calibrationPointsB.ToArray());
-            //homography = CameraCalibration.FindHomography(calibrationPointsA.ToArray(), calibrationPointsB.ToArray(), Emgu.CV.CvEnum.HOMOGRAPHY_METHOD.DEFAULT, 2);
+            //homography = CameraCalibration.GetPerspectiveTransform(calibrationPointsA.ToArray(), calibrationPointsB.ToArray());
+            homography = CameraCalibration.FindHomography(calibrationPointsA.ToArray(), calibrationPointsB.ToArray(), Emgu.CV.CvEnum.HOMOGRAPHY_METHOD.DEFAULT, 0.995);
             IsCalibrated = true;
         }
     }