Esempio n. 1
0
        bool FindAndApplyChessPatternExtrinsics()
        {
            bool found = TrackingToolsHelper.FindChessboardCorners(_camTexGrayUndistortMat, _chessPatternSize, ref _chessCornersImageMat);

            if (found)
            {
                TrackingToolsHelper.DrawFoundPattern(_camTexGrayUndistortMat, _chessPatternSize, _chessCornersImageMat);
                _cameraExtrinsicsCalibrator.UpdateExtrinsics(_chessCornersWorldMat, _chessCornersImageMat, _cameraIntrinsics, _cameraTexture.width, _cameraTexture.height);
                const bool transformBoard = true;
                _cameraExtrinsicsCalibrator.extrinsics.ApplyToTransform(_calibrationBoardTransform, _mainCamera.transform, transformBoard);
            }
            _chessPatternTransform.gameObject.SetActive(found);
            return(found);
        }
Esempio n. 2
0
        void UpdateTesting(bool foundBoard)
        {
            _arImage.enabled = foundBoard;
            if (!foundBoard)
            {
                return;
            }

            bool success = _extrinsicsCalibrator.UpdateExtrinsics(_chessCornersWorldMat, _chessCornersImageMat, _intrinsicsCalibrator.intrinsics, _intrinsicsCalibrator.textureWidth, _intrinsicsCalibrator.textureHeight);

            if (success)
            {
                _extrinsicsCalibrator.extrinsics.ApplyToTransform(_mainCamera.transform);
            }
            _arImage.enabled = success;
        }
Esempio n. 3
0
        void Update()
        {
            if (!_cameraTexture || !_dirtyCameraTexture)
            {
                return;
            }

            if (!AdaptResources())
            {
                return;
            }

            // Update mat texture (If the textyre looks right in Unity, it needs to be flipped for OpenCV.)
            TrackingToolsHelper.TextureToMat(_cameraTexture, !_flipCameraTexture, ref _camTexMat, ref _tempTransferColors, ref _tempTransferTexture);

            // Convert to grayscale if more than one channel, else copy (and convert bit rate if necessary).
            TrackingToolsHelper.ColorMatToLumanceMat(_camTexMat, _camTexGrayMat);

            // Undistort (TODO: move undistortion to GPU as last step and work on distorted image instead).
            //Calib3d.undistort( _camTexGrayMat, _camTexGrayUndistortMat, _sensorMat, _distortionCoeffsMat );
            Imgproc.remap(_camTexGrayMat, _camTexGrayUndistortMat, _undistortMap1, _undistortMap2, Imgproc.INTER_LINEAR);

            // Find chessboard.
            bool foundBoard = TrackingToolsHelper.FindChessboardCorners(_camTexGrayUndistortMat, _chessPatternSize, ref _chessCornersImageMat, _fastAndImprecise);

            if (foundBoard)
            {
                // Draw chessboard.
                TrackingToolsHelper.DrawFoundPattern(_camTexGrayUndistortMat, _chessPatternSize, _chessCornersImageMat);

                // Update and apply extrinsics.
                bool foundExtrinsics = _extrinsicsCalibrator.UpdateExtrinsics(_chessCornersWorldMat, _chessCornersImageMat, _intrinsics, _cameraTexture.width, _cameraTexture.height);
                if (foundExtrinsics)
                {
                    if (_tranformPattern)
                    {
                        _extrinsicsCalibrator.extrinsics.ApplyToTransform(_chessPatternTransform, _applyRelative ? _mainCamera.transform : null, _tranformPattern);
                        if (!_applyRelative)
                        {
                            _mainCamera.transform.SetPositionAndRotation(Vector3.zero, Quaternion.identity);
                        }
                    }
                    else
                    {
                        _extrinsicsCalibrator.extrinsics.ApplyToTransform(_mainCamera.transform, _applyRelative ? _chessPatternTransform : null);
                        if (!_applyRelative)
                        {
                            _chessPatternTransform.SetPositionAndRotation(Vector3.zero, Quaternion.identity);
                        }
                    }
                }
                _arImage.gameObject.SetActive(foundExtrinsics);
            }
            else
            {
                _arImage.gameObject.SetActive(false);
            }

            // UI.
            Utils.fastMatToTexture2D(_camTexGrayUndistortMat, _processedCameraTexture);               // Flips vertically by default
            if (_precisionDotsContainerObject.activeSelf != _testPrecisionDotsEnabled)
            {
                _precisionDotsContainerObject.SetActive(_testPrecisionDotsEnabled);
            }


            _dirtyCameraTexture = false;
        }