Esempio n. 1
0
            /// <summary>
            /// Place and orient an ArUco object.
            /// </summary>
            protected void PlaceArucoObject(ArucoObject arucoObject, Cv.Core.Vec3d rvec, Cv.Core.Vec3d tvec, int cameraId, float positionFactor = 1f)
            {
                GameObject arucoGameObject = arucoObject.gameObject;
                Camera     camera          = arucoTracker.ArucoCamera.ImageCameras[cameraId];

                // Place and orient the object to match the marker
                Transform arucoObjectTransform = arucoGameObject.transform;

                arucoGameObject.transform.SetParent(camera.transform);
                arucoGameObject.transform.localPosition = tvec.ToPosition() * positionFactor;
                arucoGameObject.transform.localRotation = rvec.ToRotation();
                arucoGameObject.transform.SetParent(arucoObjectTransform);

                // Adjust the object position
                Vector3 cameraOpticalCenter = arucoTracker.ArucoCamera.CameraParameters.OpticalCenters[cameraId];

                Vector3 imageCenter   = new Vector3(0.5f, 0.5f, arucoGameObject.transform.position.z);
                Vector3 opticalCenter = new Vector3(cameraOpticalCenter.x, cameraOpticalCenter.y, arucoGameObject.transform.position.z);
                Vector3 opticalShift  = camera.ViewportToWorldPoint(opticalCenter) - camera.ViewportToWorldPoint(imageCenter);

                // TODO: fix the position shift orientation
                Vector3 positionShift = opticalShift                                                                 // Take account of the optical center not in the image center
                                        + arucoGameObject.transform.up * arucoGameObject.transform.localScale.y / 2; // Move up the object to coincide with the marker

                arucoGameObject.transform.localPosition += positionShift;

                //print(arucoGameObject.name + " - imageCenter: " + imageCenter.ToString("F3") + "; opticalCenter: " + opticalCenter.ToString("F3")
                //  + "; positionShift: " + (arucoGameObject.transform.rotation * opticalShift).ToString("F4"));

                arucoGameObject.SetActive(true);
            }
Esempio n. 2
0
 public Cv.Core.Vec3d At(uint pos)
 {
     Cv.Core.Exception exception = new Cv.Core.Exception();
     Cv.Core.Vec3d     element   = new Cv.Core.Vec3d(au_std_vectorVec3d_at(cppPtr, pos, exception.cppPtr), DeleteResponsibility.False);
     exception.Check();
     return(element);
 }
Esempio n. 3
0
                public unsafe Cv.Core.Vec3d[] Data()
                {
                    System.IntPtr *dataPtr = au_std_vectorVec3d_data(cppPtr);
                    uint           size    = Size();

                    Cv.Core.Vec3d[] data = new Cv.Core.Vec3d[size];
                    for (int i = 0; i < size; i++)
                    {
                        data[i] = new Cv.Core.Vec3d(dataPtr[i], DeleteResponsibility.False);
                    }

                    return(data);
                }
Esempio n. 4
0
            public static bool EstimatePoseCharucoBoard(Std.VectorPoint2f charucoCorners, Std.VectorInt charucoIds, CharucoBoard board, Cv.Core.Mat cameraMatrix,
                                                        Cv.Core.Mat distCoeffs, out Cv.Core.Vec3d rvec, out Cv.Core.Vec3d tvec)
            {
                Cv.Core.Exception exception = new Cv.Core.Exception();
                System.IntPtr     rvecPtr, tvecPtr;

                bool valid = au_estimatePoseCharucoBoard(charucoCorners.cppPtr, charucoIds.cppPtr, board.cppPtr, cameraMatrix.cppPtr, distCoeffs.cppPtr,
                                                         out rvecPtr, out tvecPtr, exception.cppPtr);

                rvec = new Cv.Core.Vec3d(rvecPtr);
                tvec = new Cv.Core.Vec3d(tvecPtr);

                exception.Check();
                return(valid);
            }
Esempio n. 5
0
            /// <summary>
            /// <see cref="ArucoObjectTracker.EstimateTranforms(int, Dictionary, HashSet{ArucoObject})"/>
            /// </summary>
            public override void EstimateTranforms(int cameraId, Aruco.Dictionary dictionary)
            {
                if (!IsActivated || arucoTracker.MarkerTracker.DetectedMarkers[cameraId][dictionary] <= 0)
                {
                    return;
                }

                CameraParameters cameraParameters = arucoTracker.ArucoCamera.CameraParameters;

                foreach (var arucoGridBoard in arucoTracker.GetArucoObjects <ArucoGridBoard>(dictionary))
                {
                    Cv.Core.Vec3d rvec = null, tvec = null;
                    arucoGridBoard.MarkersUsedForEstimation = Aruco.EstimatePoseBoard(arucoTracker.MarkerTracker.MarkerCorners[cameraId][dictionary],
                                                                                      arucoTracker.MarkerTracker.MarkerIds[cameraId][dictionary], arucoGridBoard.Board, cameraParameters.CamerasMatrix[cameraId],
                                                                                      cameraParameters.DistCoeffs[cameraId], out rvec, out tvec);

                    arucoGridBoard.Rvec = rvec;
                    arucoGridBoard.Tvec = tvec;
                }
            }
Esempio n. 6
0
 public static void DrawAxis(Cv.Core.Mat image, Cv.Core.Mat cameraMatrix, Cv.Core.Mat distCoeffs, Cv.Core.Vec3d rvec, Cv.Core.Vec3d tvec, float length)
 {
     Cv.Core.Exception exception = new Cv.Core.Exception();
     au_drawAxis(image.cppPtr, cameraMatrix.cppPtr, distCoeffs.cppPtr, rvec.cppPtr, tvec.cppPtr, length, exception.cppPtr);
     exception.Check();
 }
Esempio n. 7
0
 public void PushBack(Cv.Core.Vec3d value)
 {
     au_std_vectorVec3d_push_back(cppPtr, value.cppPtr);
 }