public Dictionary<BeamerPoint, KinectPoint> CalibrateBeamerToKinect(IBeamerWindow beamerWindow, IKinect kinect)
        {
            RunSimpleStrategy(beamerWindow, kinect);

            CalculateNewPoints();

            return new Dictionary<BeamerPoint, KinectPoint>();
            //TODO Implement
            //throw new NotImplementedException();
        }
예제 #2
0
        protected Calibration()
        {
            Points = new List<Point>();
            beamerToKinect = new Dictionary<BeamerPoint, KinectPoint>();
            kinectToRealWorld = new Dictionary<KinectPoint, RealWorldPoint>();
            realWorldToArea = new Dictionary<RealWorldPoint, AreaPoint>();
            KinectSpace = new List<BeamerPoint>[640,480];

            try
            {
                beamerWindow = new BeamerWindow();
                kinect = new Kinect.Kinect();
            }
            catch (Exception ex)
            {
                // TODO Exception Handling
            }
        }
        public Dictionary<BeamerPoint, KinectPoint> CalibrateBeamerToKinect(IBeamerWindow beamerWindow, IKinect kinect)
        {
            var beamerToKinect = new Dictionary<BeamerPoint, KinectPoint>();
            var kinectPoints = kinect.CreateKinectPointArray();

            for (var i = 0; i < CALIBRATION_POINTS; i++)
            {
                var beamerPoint = beamerWindow.DisplayCalibrationImageEdge(true, i);
                Thread.Sleep(KinectBeamerCalibration.THREAD_SLEEP);
                var picture1 = kinect.GetColorImage();
                Thread.Sleep(KinectBeamerCalibration.THREAD_SLEEP);
                beamerWindow.DisplayCalibrationImageEdge(false, i);
                Thread.Sleep(KinectBeamerCalibration.THREAD_SLEEP);
                var picture2 = kinect.GetColorImage();

                var diffKinectPoints = kinect.GetDifferenceImage(picture1, picture2, KinectBeamerCalibration.THRESHOLD);

                //TODO Refactoring
                var initPoints = new List<Vector2D>() { new Vector2D { X = 0, Y = 0 } };
                var centroids = KMeans.DoKMeans(KinectPointArrayHelper.ExtractBlackPointsAs2dVector(diffKinectPoints), initPoints);
                var kinectPoint = kinectPoints[(int)centroids[0].X, (int)centroids[0].Y];
                beamerToKinect.Add(beamerPoint, kinectPoint);

                var name = "";
                switch (i + 1)
                {
                    case 1:
                        name = "A";
                        break;
                    case 2:
                        name = "B";
                        break;
                    case 3:
                        name = "C";
                        break;
                    case 4:
                        name = "D";
                        break;
                }

                Calibration.Points.Add(new Point { Name = name, BeamerPoint = beamerPoint, KinectPoint = kinectPoint });
            }
            return beamerToKinect;
        }
        public KinectBeamerOperation()
        {
            CalculateAreaDimensions();
            area = new AreaPoint[areaWidth, areaHeight];

            try
            {
                beamerWindow = new BeamerWindow();
                kinect = new Kinect.Kinect();
            }
            catch (Exception ex)
            {
                // TODO Exception Handling
            }

            beamerWindow.DisplayBlank();
            Thread.Sleep(KinectBeamerCalibration.THREAD_SLEEP);
            blankImage = kinect.GetColorImage();

            kinectPoints = kinect.CreateKinectPointArray();
        }
        private void RunSimpleStrategy(IBeamerWindow beamerWindow, IKinect kinect)
        {
            var simpleStrategy = new CalibrateEdgePoints();
            simpleStrategy.CalibrateBeamerToKinect(beamerWindow, kinect);

            var edgePoints = Calibration.GetEdgePoints();
            pointA = edgePoints.Find((e) => e.Name == "A");
            pointB = edgePoints.Find((e) => e.Name == "B");
            pointC = edgePoints.Find((e) => e.Name == "C");
            pointD = edgePoints.Find((e) => e.Name == "D");
        }