void Start() { _webCamTexture = GetComponentInParent <InitWebCamera>().GetCamera(); _ARRootTransform = GameObject.FindWithTag("ARRoot").transform; allCharucoIds = new DoubleVectorIntMarshaller(); allCharucoCorners = new DoubleVectorPoint2FMarshaller(); numOfSuccessfulFrames = 0; }
void Start() { // setup for android platforms #if UNITY_ANDROID runningOnAndroid = true; numOfFrames = 40; #endif // setup for windows platforms #if UNITY_STANDALONE_WIN || UNITY_EDITOR_WIN runningOnAndroid = false; numOfFrames = 20; #endif _webCamTexture = GetComponentInParent <InitWebCamera>().GetCamera(); allCharucoIds = new DoubleVectorIntMarshaller(); allCharucoCorners = new DoubleVectorPoint2FMarshaller(); numOfSuccessfulFrames = 0; }
// find calibrates camera with collected data found by UFindCharucoBoardCorners method unsafe public static UCameraCalibrationData UCalibrateCameraCharuco(int width, int height, CharucoBoardParameters boardParameters, DoubleVectorIntMarshaller allCharucoIds, DoubleVectorPoint2FMarshaller allCharucoCorners) { MatDoubleMarshaller distCoeffs = new MatDoubleMarshaller(); MatDoubleMarshaller cameraMatrix = new MatDoubleMarshaller(); double reProjectionError = CalibrateCameraCharuco( height, width, boardParameters.squaresW, boardParameters.squaresH, boardParameters.squareLength, boardParameters.markerLength, allCharucoIds.NativeDataPointer, allCharucoCorners.NativeDataPointer, cameraMatrix.NativeDataPointer, distCoeffs.NativeDataPointer ); UCameraCalibrationData calibrationData = new UCameraCalibrationData( distCoeffs, cameraMatrix, reProjectionError ); return(calibrationData); }
// find charuco board corners in frame with given board parameters and imbues marshaller objects with information found unsafe public static bool UFindCharucoBoardCorners(Color32[] texture, int width, int height, CharucoBoardParameters boardParameters, DoubleVectorIntMarshaller allCharucoIds, DoubleVectorPoint2FMarshaller allCharucoCorners) { bool foundBoard = false; IntPtr foundBoardMarkers = CreateBooleanPointer(); fixed(Color32 *texP = texture) { DetectCharucoBoard( texP, width, height, boardParameters.squaresW, boardParameters.squaresH, boardParameters.squareLength, boardParameters.markerLength, foundBoardMarkers, allCharucoIds.NativeDataPointer, allCharucoCorners.NativeDataPointer ); } if (Marshal.ReadByte(foundBoardMarkers, 0) > 0) { foundBoard = true; } DeleteBooleanPointer(foundBoardMarkers); return(foundBoard); }
// public static UCameraCalibrationData UStaticCalibrateCameraData() // { // MatDoubleMarshaller distCoeffs = new MatDoubleMarshaller(); // MatDoubleMarshaller cameraMatrix = new MatDoubleMarshaller(); // StaticCameraCalibData( // cameraMatrix.NativeDataPointer, // distCoeffs.NativeDataPointer, // true // ); // UCameraCalibrationData calibrationData = new UCameraCalibrationData( // distCoeffs, // cameraMatrix // ); // return calibrationData; // } // unsafe public static UCameraCalibrationData UCalibrateCamera(Color32[] texture, int width, int height, DoubleVectorIntMarshaller allCharucoIds, DoubleVectorPoint2FMarshaller allCharucoCorners) // { // var watch = System.Diagnostics.Stopwatch.StartNew(); // // IntPtr distCoeffs = OpenCVMarshal.CreateMatPointer(); // MatDoubleMarshaller distCoeffs = new MatDoubleMarshaller(); // // IntPtr cameraMatrix = OpenCVMarshal.CreateMatPointer(); // MatDoubleMarshaller cameraMatrix = new MatDoubleMarshaller(); // fixed (Color32* texP = texture) // { // CalibrateCamera( // texP, // width, // height, // allCharucoIds.NativeDataPointer, // allCharucoCorners.NativeDataPointer, // cameraMatrix.NativeDataPointer, // distCoeffs.NativeDataPointer // ); // } // UCameraCalibrationData calibrationData = new UCameraCalibrationData( // distCoeffs, // cameraMatrix // ); // watch.Stop(); // var elapsedMs = watch.ElapsedMilliseconds; // return calibrationData; // } unsafe public static UCameraCalibrationData UCalibrateCameraCharuco(int width, int height, CharucoBoardParameters boardParameters, DoubleVectorIntMarshaller allCharucoIds, DoubleVectorPoint2FMarshaller allCharucoCorners) { var watch = System.Diagnostics.Stopwatch.StartNew(); // IntPtr distCoeffs = OpenCVMarshal.CreateMatPointer(); MatDoubleMarshaller distCoeffs = new MatDoubleMarshaller(); // IntPtr cameraMatrix = OpenCVMarshal.CreateMatPointer(); MatDoubleMarshaller cameraMatrix = new MatDoubleMarshaller(); double reProjectionError = CalibrateCameraCharuco( height, width, boardParameters.squaresW, boardParameters.squaresH, boardParameters.squareLength, boardParameters.markerLength, allCharucoIds.NativeDataPointer, allCharucoCorners.NativeDataPointer, cameraMatrix.NativeDataPointer, distCoeffs.NativeDataPointer ); UCameraCalibrationData calibrationData = new UCameraCalibrationData( distCoeffs, cameraMatrix, reProjectionError ); watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; return(calibrationData); }
unsafe public static bool UFindCharucoBoardCorners(Color32[] texture, int width, int height, CharucoBoardParameters boardParameters, DoubleVectorIntMarshaller allCharucoIds, DoubleVectorPoint2FMarshaller allCharucoCorners) { var watch = System.Diagnostics.Stopwatch.StartNew(); int cornersH = 9; int cornersW = 6; float squareLength = 0.025f; float markersLength = 0.0125f; bool foundBoard = false; IntPtr foundBoardMarkers = CreateBooleanPointer(); fixed(Color32 *texP = texture) { DetectCharucoBoard( texP, width, height, boardParameters.squaresW, boardParameters.squaresH, boardParameters.squareLength, boardParameters.markerLength, foundBoardMarkers, allCharucoIds.NativeDataPointer, allCharucoCorners.NativeDataPointer ); } watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; if (Marshal.ReadByte(foundBoardMarkers, 0) > 0) { foundBoard = true; } DeleteBooleanPointer(foundBoardMarkers); return(foundBoard); }