Beispiel #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);
                }
            }
        }
Beispiel #2
0
        void UpdateProjectorIntrinsicsAndExtrinsics()
        {
            const bool samplesHaveDistortion = false;                   // Light projectors (should) have no radial or tanggal distortion.
            const bool fixedAspectRatio      = true;                    // We asume that the aspect is as advertised.
            const bool flipVerticalLensShift = true;                    // For projectors, we need to flip the vertical lens shift.

            _projectorIntrinsicsCalibrator.UpdateIntrinsics(samplesHaveDistortion, fixedAspectRatio, flipVerticalLensShift);
            //Debug.Log( "New Intrinsics. RMS: " + _projectorIntrinsicsCalibrator.rmsError + "\n" + _projectorIntrinsicsCalibrator.intrinsics );

            _projectorExtrinsicsCalibrator.Update(_cameraIntrinsics, _projectorIntrinsicsCalibrator.intrinsics, _projectorIntrinsicsCalibrator.textureSize);

            // Apply.
            _projectorIntrinsicsCalibrator.intrinsics.ApplyToCamera(_projectorCamera);
            _projectorExtrinsicsCalibrator.extrinsics.ApplyToTransform(_projectorCamera.transform);

            //Debug.Log( "_circlePointsProjectorViewMat\n" + _circlePointsWorldMat.dump() );
            //Debug.Log( "_circlePointsProjectorRenderImageMat\n" + _circlePointsProjectorRenderImageMat.dump() );
            //Debug.Log( "New Extrinsics:\n" + _stereoCalibrator.extrinsics );
        }