コード例 #1
0
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public MainWindow()
        {
            _iKinect = new Kinect();
            InitializeComponent();
            this._kinect = _iKinect.DiscoverKinectSensor();
            Initialize();

            KinectPoint[,] pic1 = _iKinect.GetColorImage(); // 1st Pic: strange area
            pic1 = _iKinect.GetColorImage(); //2nd Pic: too dark
            pic1 = _iKinect.GetColorImage(); //3rd Pic: not the same brightness as "real" image
            pic1 = _iKinect.GetColorImage(); //4th Pic: okay!

            MessageBox.Show("Please display the playground", "Display Playground", MessageBoxButton.OK,
                            MessageBoxImage.Information);

            KinectPoint[,] pic2 = _iKinect.GetColorImage();

            KinectPoint[,] newPic = _iKinect.GetDifferenceImage(pic2, pic1, 200); //0x64, 0x1E, 0x32

            //newPic = CalculateKMeans(newPic);

            short[] depthPic = _iKinect.GetDepthImage();

            KinectPoint[,] depthAndColorPic = _iKinect.CreateKinectPointArray();

            this._colorImageBitmap.WritePixels(this._colorImageBitmapRect, PrintKinectPointArray(newPic, 640, 480), this._colorImageStride, 0);
            this._colorImageBitmap2.WritePixels(this._colorImageBitmapRect, PrintKinectPointArray(depthAndColorPic, 640, 480), this._colorImageStride, 0);
            this._colorImageBitmap3.WritePixels(this._colorImageBitmapRect, PrintKinectPointArray(pic1, 640, 480), this._colorImageStride,0);
            this._colorImageBitmap4.WritePixels(this._colorImageBitmapRect, PrintKinectPointArray(pic2, 640, 480), this._colorImageStride, 0);
            this._rawDepthImage.WritePixels(this._rawDepthImageRect, PrintKinectPointArray(depthAndColorPic, 640, 480), this._rawDepthImageStride,0);
            this._rawDepthImage2.WritePixels(this._rawDepthImageRect, depthPic, this._rawDepthImageStride, 0);
        }
コード例 #2
0
        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;
        }