Exemple #1
0
        void UpdateCalibration(bool foundBoard)
        {
            if (foundBoard)
            {
                _successFrameCount++;
                float averageMovement = ComputeAverageMovement();
                if (averageMovement < lowMovementThreshold)
                {
                    _stableFrameCount++;
                }
                else
                {
                    _stableFrameCount = 0;
                }
            }
            else
            {
                _successFrameCount = 0;
                _stableFrameCount  = 0;
            }

            // When consistently stable, gather sample.
            if (_stableFrameCount == stableFrameCountThreshold)
            {
                _intrinsicsCalibrator.AddSample(_chessCornersRealModelMat, _chessCornersImageMat);
                _intrinsicsCalibrator.UpdateIntrinsics();
                _previewFlasher.Start();
                _rmsErrorText.text = _intrinsicsCalibrator.rmsError.ToString("F3");
                _stableFrameCount  = 0;

                // When enough samples are gathered, save to file and switch to testing mode.
                if (_intrinsicsCalibrator.sampleCount == _desiredSampleCount)
                {
                    string intrinsicsFileName = _intrinsicsFileName;
                    if (_addErrorValueToFileName)
                    {
                        intrinsicsFileName += "_E-" + _intrinsicsCalibrator.rmsError.ToString("F02").Replace(".", ",");
                    }
                    string filePath = _intrinsicsCalibrator.intrinsics.SaveToFile(intrinsicsFileName);
                    SwitchState(State.Testing);

                    Debug.Log(logPrepend + "Saved intrinsics to file.\n" + filePath);
                }
            }
        }
Exemple #2
0
        void Sample()
        {
            _projectorIntrinsicsCalibrator.AddSample(_circlePointsRealModelMat, _circlePointsProjectorRenderImageMat);
            _projectorExtrinsicsCalibrator.AddSample(_circlePointsDetectedWorldMat, _circlePointsCameraImageMat, _circlePointsProjectorRenderImageMat);
            _stableFrameCount = 0;

            // Update projector intrinsics and extrinnsics.
            if (sampleCount >= blindSampleCountTarget)
            {
                UpdateProjectorIntrinsicsAndExtrinsics();
            }

            // State switching.
            if (_state == State.BlindCalibration && sampleCount == blindSampleCountTarget)
            {
                SwitchState(State.TrackedCalibration);
            }

            // Update UI.
            _previewFlasher.Start();
            UpdateSampleCounterUI();

            _sampleManuallyRequested = false;
        }