Exemplo n.º 1
0
        public ReconstructionController(KinectSensor sensor)
        {
            Contract.Requires(sensor != null);

            this.syncContext = SynchronizationContext.Current;
            this.sensor      = sensor;

            var rparams = new ReconstructionParameters(128, 256, 256, 256);

            reconstruction              = Reconstruction.FusionCreateReconstruction(rparams, ReconstructionProcessor.Amp, -1, worldToCameraTransform);
            worldToVolumeTransform      = reconstruction.GetCurrentWorldToVolumeTransform();
            worldToVolumeTransform.M43 -= MIN_DEPTH * rparams.VoxelsPerMeter;
            reconstruction.ResetReconstruction(worldToCameraTransform, worldToVolumeTransform);

            var depthFrameDesc = sensor.DepthFrameSource.FrameDescription;

            var totalPixels = depthFrameDesc.Width * depthFrameDesc.Height;

            rawDepthData  = new ushort[totalPixels];
            bodyIndexData = new byte[totalPixels];
            SurfaceBitmap = new ThreadSafeBitmap(depthFrameDesc.Width, depthFrameDesc.Height);

            var intrinsics = sensor.CoordinateMapper.GetDepthCameraIntrinsics();
            var cparams    = new CameraParameters(
                intrinsics.FocalLengthX / depthFrameDesc.Width,
                intrinsics.FocalLengthY / depthFrameDesc.Height,
                intrinsics.PrincipalPointX / depthFrameDesc.Width,
                intrinsics.PrincipalPointY / depthFrameDesc.Height);

            floatDepthFrame = new FusionFloatImageFrame(depthFrameDesc.Width, depthFrameDesc.Height, cparams);
            pointCloudFrame = new FusionPointCloudImageFrame(depthFrameDesc.Width, depthFrameDesc.Height, cparams);
            surfaceFrame    = new FusionColorImageFrame(depthFrameDesc.Width, depthFrameDesc.Height, cparams);
        }
Exemplo n.º 2
0
        public KinectFrameRenderer(KinectSensor sensor, DepthToColorConverter converter)
        {
            Contract.Requires(sensor != null);
            Contract.Requires(converter != null);

            this.syncContext = SynchronizationContext.Current;
            this.converter   = converter;

            var depthFrameDesc = sensor.DepthFrameSource.FrameDescription;
            var pixelCount     = depthFrameDesc.Width * depthFrameDesc.Height;

            frameData = new ushort[pixelCount];
            Bitmap    = new ThreadSafeBitmap(depthFrameDesc.Width, depthFrameDesc.Height);

            reader = sensor.DepthFrameSource.OpenReader();
            reader.FrameArrived += Reader_FrameArrived;
        }
Exemplo n.º 3
0
        private void UpdateBitmap(ThreadSafeBitmap bitmap, WriteableBitmapHolder holder, Image image)
        {
            if (holder == null || bitmap == null)
            {
                return;
            }

            var changed = false;

            bitmap.Access(bitmapData =>
                          changed = holder.WritePixels(bitmap.Width, bitmap.Height, bitmapData));

            if (changed)
            {
                image.Source = holder.Bitmap;
            }
        }
        /// <summary>
        /// Updates the source of given image.
        /// </summary>
        /// <param name="bitmap">Bitmap</param>
        /// <param name="holder">Bitmap holder</param>
        /// <param name="image">Image from statickinect window.</param>
        private void UpdateBitmap(ThreadSafeBitmap bitmap, WriteableBitmapHolder holder, Image image)
        {
            if (holder == null || bitmap == null)
            {
                return;
            }

            var changed = false;

            // Can not be interrupted by other threads. WritePixels returns true if the bitmap is changed.
            bitmap.Access(bitmapData =>
                          changed = holder.WritePixels(bitmap.Width, bitmap.Height, bitmapData));

            // If bitmap is changed updates the source of the image.
            if (changed)
            {
                image.Source = holder.Bitmap;
            }
        }