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); } } }
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 ); }