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

                bool updatedCameraImage = false;

                Cv.Core.Mat[]    cameraImages     = arucoTracker.ArucoCamera.Images;
                CameraParameters cameraParameters = arucoTracker.ArucoCamera.CameraParameters;

                foreach (var arucoGridBoard in arucoTracker.GetArucoObjects <ArucoGridBoard>(dictionary))
                {
                    if (arucoTracker.DrawAxes && cameraParameters != null && arucoGridBoard.MarkersUsedForEstimation > 0 && arucoGridBoard.Rvec != null)
                    {
                        Aruco.DrawAxis(cameraImages[cameraId], cameraParameters.CamerasMatrix[cameraId], cameraParameters.DistCoeffs[cameraId],
                                       arucoGridBoard.Rvec, arucoGridBoard.Tvec, arucoGridBoard.AxisLength);
                        updatedCameraImage = true;
                    }
                }

                if (updatedCameraImage)
                {
                    arucoTracker.ArucoCamera.Images = cameraImages;
                }
            }
 protected virtual void ArucoObjectController_DictionaryRemoved(Aruco.Dictionary dictionary)
 {
     if (!IsActivated)
     {
         return;
     }
 }
            /// <summary>
            /// <see cref="ArucoObjectTracker.Draw(int, Dictionary)"/>
            /// </summary>
            public override void Draw(int cameraId, Aruco.Dictionary dictionary)
            {
                if (!IsActivated)
                {
                    return;
                }

                bool updatedCameraImage = false;

                Cv.Core.Mat[] cameraImages = arucoTracker.ArucoCamera.Images;

                // Draw the detected markers
                // TODO: draw only markers in ArucoObjects list + add option to draw all the detected markers
                if (arucoTracker.DrawDetectedMarkers && DetectedMarkers[cameraId][dictionary] > 0)
                {
                    Aruco.DrawDetectedMarkers(cameraImages[cameraId], MarkerCorners[cameraId][dictionary], MarkerIds[cameraId][dictionary]);
                    updatedCameraImage = true;
                }

                // Draw the rejected marker candidates
                if (arucoTracker.DrawRejectedCandidates && RejectedCandidateCorners[cameraId][dictionary].Size() > 0)
                {
                    Aruco.DrawDetectedMarkers(cameraImages[cameraId], RejectedCandidateCorners[cameraId][dictionary], REJECTED_MARKERS_CANDIDATES_COLOR);
                    updatedCameraImage = true;
                }

                if (updatedCameraImage)
                {
                    arucoTracker.ArucoCamera.Images = cameraImages;
                }
            }
Exemple #4
0
            /// <summary>
            /// <see cref="ArucoObjectTracker.Detect(int, Dictionary, HashSet{ArucoObject})"/>
            /// </summary>
            public override void Detect(int cameraId, Aruco.Dictionary dictionary)
            {
                if (!IsActivated)
                {
                    return;
                }

                CameraParameters cameraParameters = arucoTracker.ArucoCamera.CameraParameters;

                Std.VectorVectorPoint2f diamondCorners = null;
                Std.VectorVec4i         diamondIds     = null;

                if (arucoTracker.MarkerTracker.DetectedMarkers[cameraId][dictionary] > 0)
                {
                    if (cameraParameters == null)
                    {
                        Aruco.DetectCharucoDiamond(arucoTracker.ArucoCamera.Images[cameraId], arucoTracker.MarkerTracker.MarkerCorners[cameraId][dictionary],
                                                   arucoTracker.MarkerTracker.MarkerIds[cameraId][dictionary], DETECT_SQUARE_MARKER_LENGTH_RATE, out diamondCorners, out diamondIds);
                    }
                    else
                    {
                        Aruco.DetectCharucoDiamond(arucoTracker.ArucoCamera.Images[cameraId], arucoTracker.MarkerTracker.MarkerCorners[cameraId][dictionary],
                                                   arucoTracker.MarkerTracker.MarkerIds[cameraId][dictionary], DETECT_SQUARE_MARKER_LENGTH_RATE, out diamondCorners, out diamondIds,
                                                   cameraParameters.CamerasMatrix[cameraId], cameraParameters.DistCoeffs[cameraId]);
                    }
                }

                DiamondCorners[cameraId][dictionary]   = diamondCorners;
                DiamondIds[cameraId][dictionary]       = diamondIds;
                DetectedDiamonds[cameraId][dictionary] = (diamondIds != null) ? (int)diamondIds.Size() : 0;
            }
Exemple #5
0
 /// <summary>
 /// Detect the ArUco objects for a camera on an custom image.
 /// </summary>
 /// <param name="cameraId">The id of the camera.</param>
 /// <param name="dictionary">The dictionary to use for the detection.</param>
 /// <param name="dictionary">The image to use for the detection.</param>
 public virtual void Detect(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)
 {
     if (!IsActivated)
     {
         throw new Exception("Activate the tracker before detecting ArUco objects.");
     }
 }
Exemple #6
0
 /// <summary>
 /// Place and orient the detected ArUco objects relative to a camera.
 /// </summary>
 /// <param name="cameraId">The id of the camera to use.</param>
 /// <param name="dictionary">The dictionary to use.</param>
 public virtual void UpdateTransforms(int cameraId, Aruco.Dictionary dictionary)
 {
     if (!IsActivated)
     {
         throw new Exception("Activate the tracker before updating transforms of ArUco objects.");
     }
 }
Exemple #7
0
        public override void Draw(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)
        {
            base.Draw(cameraId, dictionary, image);

            if (DetectedMarkers[cameraId][dictionary] > 0)
            {
                // Draw all the detected markers
                if (arucoTracker.DrawDetectedMarkers)
                {
                    Aruco.DrawDetectedMarkers(image, MarkerCorners[cameraId][dictionary], MarkerIds[cameraId][dictionary]);
                }

                // Draw axes of detected tracked markers
                if (arucoTracker.DrawAxes && arucoCameraUndistortion != null && MarkerRvecs[cameraId][dictionary] != null)
                {
                    for (uint i = 0; i < DetectedMarkers[cameraId][dictionary]; i++)
                    {
                        ArucoObject foundArucoObject;
                        int         detectedMarkerHashCode = ArucoMarker.GetArucoHashCode(MarkerIds[cameraId][dictionary].At(i));
                        if (arucoTracker.ArucoObjects[dictionary].TryGetValue(detectedMarkerHashCode, out foundArucoObject))
                        {
                            Aruco.DrawAxis(image, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId], arucoCameraUndistortion.UndistortedDistCoeffs[cameraId],
                                           MarkerRvecs[cameraId][dictionary].At(i), MarkerTvecs[cameraId][dictionary].At(i), estimatePoseMarkerLength);
                        }
                    }
                }
            }

            // Draw the rejected marker candidates
            if (arucoTracker.DrawRejectedCandidates && RejectedCandidateCorners[cameraId][dictionary].Size() > 0)
            {
                Aruco.DrawDetectedMarkers(image, RejectedCandidateCorners[cameraId][dictionary]);
            }
        }
            // ArucoObjectTracker methods

            /// <summary>
            /// <see cref="ArucoObjectTracker.Activate(ArucoTracker)"/>
            /// </summary>
            public override void Activate(ArucoTracker arucoTracker)
            {
                base.Activate(arucoTracker);

                // Initialize the properties and the ArUco objects
                MarkerCorners            = new Dictionary <Aruco.Dictionary, Std.VectorVectorPoint2f> [arucoTracker.ArucoCamera.CamerasNumber];
                MarkerIds                = new Dictionary <Aruco.Dictionary, Std.VectorInt> [arucoTracker.ArucoCamera.CamerasNumber];
                RejectedCandidateCorners = new Dictionary <Aruco.Dictionary, Std.VectorVectorPoint2f> [arucoTracker.ArucoCamera.CamerasNumber];
                MarkerRvecs              = new Dictionary <Aruco.Dictionary, Std.VectorVec3d> [arucoTracker.ArucoCamera.CamerasNumber];
                MarkerTvecs              = new Dictionary <Aruco.Dictionary, Std.VectorVec3d> [arucoTracker.ArucoCamera.CamerasNumber];
                DetectedMarkers          = new Dictionary <Aruco.Dictionary, int> [arucoTracker.ArucoCamera.CamerasNumber];

                for (int cameraId = 0; cameraId < arucoTracker.ArucoCamera.CamerasNumber; cameraId++)
                {
                    MarkerCorners[cameraId]            = new Dictionary <Aruco.Dictionary, Std.VectorVectorPoint2f>();
                    MarkerIds[cameraId]                = new Dictionary <Aruco.Dictionary, Std.VectorInt>();
                    RejectedCandidateCorners[cameraId] = new Dictionary <Aruco.Dictionary, Std.VectorVectorPoint2f>();
                    MarkerRvecs[cameraId]              = new Dictionary <Aruco.Dictionary, Std.VectorVec3d>();
                    MarkerTvecs[cameraId]              = new Dictionary <Aruco.Dictionary, Std.VectorVec3d>();
                    DetectedMarkers[cameraId]          = new Dictionary <Aruco.Dictionary, int>();

                    foreach (var arucoObjectDictionary in arucoTracker.ArucoObjects)
                    {
                        Aruco.Dictionary dictionary = arucoObjectDictionary.Key;

                        MarkerCorners[cameraId].Add(dictionary, new Std.VectorVectorPoint2f());
                        MarkerIds[cameraId].Add(dictionary, new Std.VectorInt());
                        RejectedCandidateCorners[cameraId].Add(dictionary, new Std.VectorVectorPoint2f());
                        MarkerRvecs[cameraId].Add(dictionary, new Std.VectorVec3d());
                        MarkerTvecs[cameraId].Add(dictionary, new Std.VectorVec3d());
                        DetectedMarkers[cameraId].Add(dictionary, 0);
                    }
                }
            }
            // ArucoObjectTracker methods

            public override void Activate(IArucoObjectsTracker arucoTracker)
            {
                base.Activate(arucoTracker);

                DiamondCorners   = new Dictionary <Aruco.Dictionary, Std.VectorVectorPoint2f> [arucoCamera.CameraNumber];
                DiamondIds       = new Dictionary <Aruco.Dictionary, Std.VectorVec4i> [arucoCamera.CameraNumber];
                DetectedDiamonds = new Dictionary <Aruco.Dictionary, int> [arucoCamera.CameraNumber];
                DiamondRvecs     = new Dictionary <Aruco.Dictionary, Std.VectorVec3d> [arucoCamera.CameraNumber];
                DiamondTvecs     = new Dictionary <Aruco.Dictionary, Std.VectorVec3d> [arucoCamera.CameraNumber];

                for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++)
                {
                    DiamondCorners[cameraId]   = new Dictionary <Aruco.Dictionary, Std.VectorVectorPoint2f>();
                    DiamondIds[cameraId]       = new Dictionary <Aruco.Dictionary, Std.VectorVec4i>();
                    DetectedDiamonds[cameraId] = new Dictionary <Aruco.Dictionary, int>();
                    DiamondRvecs[cameraId]     = new Dictionary <Aruco.Dictionary, Std.VectorVec3d>();
                    DiamondTvecs[cameraId]     = new Dictionary <Aruco.Dictionary, Std.VectorVec3d>();

                    foreach (var arucoObjectDictionary in arucoTracker.ArucoObjects)
                    {
                        Aruco.Dictionary dictionary = arucoObjectDictionary.Key;

                        DiamondCorners[cameraId].Add(dictionary, new Std.VectorVectorPoint2f());
                        DiamondIds[cameraId].Add(dictionary, new Std.VectorVec4i());
                        DetectedDiamonds[cameraId].Add(dictionary, 0);
                        DiamondRvecs[cameraId].Add(dictionary, new Std.VectorVec3d());
                        DiamondTvecs[cameraId].Add(dictionary, new Std.VectorVec3d());
                    }
                }
            }
Exemple #10
0
            public override void Draw(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)
            {
                if (DetectedMarkers[cameraId][dictionary] > 0)
                {
                    // Draw all the detected markers
                    if (arucoTracker.DrawDetectedMarkers)
                    {
                        // TODO: draw only markers in ArucoObjects list + add option to draw all the detected markers
                        Aruco.DrawDetectedMarkers(image, MarkerCorners[cameraId][dictionary], MarkerIds[cameraId][dictionary]);
                    }

                    // Draw axes of detected tracked markers
                    if (arucoTracker.DrawAxes && cameraParameters != null && MarkerRvecs[cameraId][dictionary] != null)
                    {
                        for (uint i = 0; i < DetectedMarkers[cameraId][dictionary]; i++)
                        {
                            ArucoObject foundArucoObject;
                            int         detectedMarkerHashCode = ArucoMarker.GetArucoHashCode(MarkerIds[cameraId][dictionary].At(i));
                            if (arucoTracker.ArucoObjects[dictionary].TryGetValue(detectedMarkerHashCode, out foundArucoObject))
                            {
                                Aruco.DrawAxis(image, cameraParameters.CameraMatrices[cameraId], cameraParameters.DistCoeffs[cameraId],
                                               MarkerRvecs[cameraId][dictionary].At(i), MarkerTvecs[cameraId][dictionary].At(i), EstimatePoseMarkerLength);
                            }
                        }
                    }
                }

                // Draw the rejected marker candidates
                if (arucoTracker.DrawRejectedCandidates && RejectedCandidateCorners[cameraId][dictionary].Size() > 0)
                {
                    Aruco.DrawDetectedMarkers(image, RejectedCandidateCorners[cameraId][dictionary]);
                }
            }
            public override void Detect(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)
            {
                base.Detect(cameraId, dictionary, image);

                ArucoMarkerTracker markerTracker = arucoTracker.MarkerTracker;

                Std.VectorVectorPoint2f diamondCorners = null;
                Std.VectorVec4i         diamondIds     = null;

                if (markerTracker.DetectedMarkers[cameraId][dictionary] > 0)
                {
                    if (arucoCameraUndistortion == null)
                    {
                        Aruco.DetectCharucoDiamond(image, markerTracker.MarkerCorners[cameraId][dictionary], markerTracker.MarkerIds[cameraId][dictionary],
                                                   DetectSquareMarkerLengthRate, out diamondCorners, out diamondIds);
                    }
                    else
                    {
                        Aruco.DetectCharucoDiamond(image, markerTracker.MarkerCorners[cameraId][dictionary], markerTracker.MarkerIds[cameraId][dictionary],
                                                   DetectSquareMarkerLengthRate, out diamondCorners, out diamondIds, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId],
                                                   arucoCameraUndistortion.UndistortedDistCoeffs[cameraId]);
                    }
                }

                DiamondCorners[cameraId][dictionary]   = diamondCorners;
                DiamondIds[cameraId][dictionary]       = diamondIds;
                DetectedDiamonds[cameraId][dictionary] = (diamondIds != null) ? (int)diamondIds.Size() : 0;
            }
Exemple #12
0
 /// <summary>
 /// Detect the ArUco objects on the current image of a camera.
 /// </summary>
 /// <param name="cameraId">The id of the camera to use.</param>
 /// <param name="dictionary">The dictionary to use for the detection.</param>
 public virtual void Detect(int cameraId, Aruco.Dictionary dictionary)
 {
     if (IsActivated)
     {
         Detect(cameraId, dictionary, arucoTracker.ArucoCamera.Images[cameraId]);
     }
 }
Exemple #13
0
            // MonoBehaviour methods

            /// <summary>
            /// Initializes the properties.
            /// </summary>
            protected virtual void Awake()
            {
                if (Dictionary == null)
                {
                    dictionary = Aruco.GetPredefinedDictionary(dictionaryName);
                }
                UpdateArucoHashCode();
            }
Exemple #14
0
            // MonoBehaviour methods

            /// <summary>
            /// Calls <see cref="UpdateProperties()"/>.
            /// </summary>
            protected virtual void Awake()
            {
                if (Dictionary == null)
                {
                    dictionary = Aruco.GetPredefinedDictionary(dictionaryName);
                }
                UpdateProperties();
            }
Exemple #15
0
 public override void Place(int cameraId, Aruco.Dictionary dictionary)
 {
     foreach (var arucoGridBoard in arucoTracker.GetArucoObjects <ArucoGridBoard>(dictionary))
     {
         if (arucoGridBoard.Rvec != null)
         {
             PlaceArucoObject(arucoGridBoard, arucoGridBoard.Rvec, arucoGridBoard.Tvec, cameraId);
         }
     }
 }
 protected override void ArucoObjectsController_DictionaryRemoved(Aruco.Dictionary dictionary)
 {
     for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++)
     {
         DiamondIds[cameraId].Remove(dictionary);
         DetectedDiamonds[cameraId].Remove(dictionary);
         DiamondRvecs[cameraId].Remove(dictionary);
         DiamondTvecs[cameraId].Remove(dictionary);
     }
 }
            // ArucoObjectsController related methods

            protected override void ArucoObjectsController_DictionaryAdded(Aruco.Dictionary dictionary)
            {
                for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++)
                {
                    DiamondIds[cameraId].Add(dictionary, new Std.VectorVec4i());
                    DetectedDiamonds[cameraId].Add(dictionary, 0);
                    DiamondRvecs[cameraId].Add(dictionary, new Std.VectorVec3d());
                    DiamondTvecs[cameraId].Add(dictionary, new Std.VectorVec3d());
                }
            }
Exemple #18
0
 public override void Draw(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)
 {
     foreach (var arucoGridBoard in arucoTracker.GetArucoObjects <ArucoGridBoard>(dictionary))
     {
         if (arucoTracker.DrawAxes && cameraParameters != null && arucoGridBoard.Rvec != null)
         {
             Aruco.DrawAxis(image, cameraParameters.CameraMatrices[cameraId], cameraParameters.DistCoeffs[cameraId],
                            arucoGridBoard.Rvec, arucoGridBoard.Tvec, arucoGridBoard.AxisLength);
         }
     }
 }
Exemple #19
0
 protected override void ArucoObjectsController_DictionaryRemoved(Aruco.Dictionary dictionary)
 {
     for (int cameraId = 0; cameraId < arucoTracker.ArucoCamera.CameraNumber; cameraId++)
     {
         MarkerCorners[cameraId].Remove(dictionary);
         MarkerIds[cameraId].Remove(dictionary);
         RejectedCandidateCorners[cameraId].Remove(dictionary);
         MarkerRvecs[cameraId].Remove(dictionary);
         MarkerTvecs[cameraId].Remove(dictionary);
         DetectedMarkers[cameraId].Remove(dictionary);
     }
 }
Exemple #20
0
            public override void Detect(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)
            {
                Std.VectorVectorPoint2f markerCorners, rejectedCandidateCorners;
                Std.VectorInt           markerIds;

                Aruco.DetectMarkers(image, dictionary, out markerCorners, out markerIds, arucoTracker.DetectorParameters, out rejectedCandidateCorners);

                DetectedMarkers[cameraId][dictionary]          = (int)markerIds.Size();
                MarkerCorners[cameraId][dictionary]            = markerCorners;
                MarkerIds[cameraId][dictionary]                = markerIds;
                RejectedCandidateCorners[cameraId][dictionary] = rejectedCandidateCorners;
            }
Exemple #21
0
            // ArucoObjectsController related methods

            protected override void ArucoObjectsController_DictionaryAdded(Aruco.Dictionary dictionary)
            {
                for (int cameraId = 0; cameraId < arucoTracker.ArucoCamera.CameraNumber; cameraId++)
                {
                    MarkerCorners[cameraId].Add(dictionary, new Std.VectorVectorPoint2f());
                    MarkerIds[cameraId].Add(dictionary, new Std.VectorInt());
                    RejectedCandidateCorners[cameraId].Add(dictionary, new Std.VectorVectorPoint2f());
                    MarkerRvecs[cameraId].Add(dictionary, new Std.VectorVec3d());
                    MarkerTvecs[cameraId].Add(dictionary, new Std.VectorVec3d());
                    DetectedMarkers[cameraId].Add(dictionary, 0);
                }
            }
Exemple #22
0
            public override void EstimateTransforms(int cameraId, Aruco.Dictionary dictionary)
            {
                Std.VectorVec3d rvecs = null, tvecs = null;

                if (DetectedMarkers[cameraId][dictionary] > 0 && cameraParameters != null)
                {
                    Aruco.EstimatePoseSingleMarkers(MarkerCorners[cameraId][dictionary], EstimatePoseMarkerLength, cameraParameters.CameraMatrices[cameraId],
                                                    cameraParameters.DistCoeffs[cameraId], out rvecs, out tvecs);
                }

                MarkerRvecs[cameraId][dictionary] = rvecs;
                MarkerTvecs[cameraId][dictionary] = tvecs;
            }
Exemple #23
0
            public override void UpdateTransforms(int cameraId, Aruco.Dictionary dictionary)
            {
                base.UpdateTransforms(cameraId, dictionary);

                foreach (var arucoCharucoBoard in arucoTracker.GetArucoObjects <ArucoCharucoBoard>(dictionary))
                {
                    if (arucoCharucoBoard.Rvec != null)
                    {
                        arucoCameraDisplay.PlaceArucoObject(arucoCharucoBoard.transform, cameraId, arucoCharucoBoard.Tvec.ToPosition(),
                                                            arucoCharucoBoard.Rvec.ToRotation());
                    }
                }
            }
Exemple #24
0
            /// <summary>
            /// Calls <see cref="OnPropertyUpdated()"/> in editor mode.
            /// </summary>
            protected virtual void OnValidate()
            {
#if UNITY_EDITOR
                if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode)
                {
                    if (Dictionary == null || dictionaryName != Dictionary.Name)
                    {
                        dictionary = Aruco.GetPredefinedDictionary(dictionaryName);
                    }
                    OnPropertyUpdated();
                }
#endif
            }
    public override void Draw(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)
    {
      base.Draw(cameraId, dictionary, image);

      foreach (var arucoGridBoard in arucoTracker.GetArucoObjects<ArucoGridBoard>(dictionary))
      {
        if (arucoTracker.DrawAxes && arucoCameraUndistortion != null && arucoGridBoard.Rvec != null)
        {
          Aruco.DrawAxis(image, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId], arucoCameraUndistortion.UndistortedDistCoeffs[cameraId],
            arucoGridBoard.Rvec, arucoGridBoard.Tvec, arucoGridBoard.AxisLength);
        }
      }
    }
Exemple #26
0
            public override void EstimateTransforms(int cameraId, Aruco.Dictionary dictionary)
            {
                // TODO: add autoscale feature (see: https://github.com/opencv/opencv_contrib/blob/master/modules/aruco/samples/detect_diamonds.cpp#L203)
                Std.VectorVec3d diamondRvecs = null, diamondTvecs = null;

                if (DetectedDiamonds[cameraId][dictionary] > 0 && cameraParameters != null)
                {
                    Aruco.EstimatePoseSingleMarkers(DiamondCorners[cameraId][dictionary], EstimatePoseSquareLength, cameraParameters.CameraMatrices[cameraId],
                                                    cameraParameters.DistCoeffs[cameraId], out diamondRvecs, out diamondTvecs);
                }

                DiamondRvecs[cameraId][dictionary] = diamondRvecs;
                DiamondTvecs[cameraId][dictionary] = diamondTvecs;
            }
Exemple #27
0
            // ArucoObjectTracker methods

            public override void Detect(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)
            {
                ArucoMarkerTracker markerTracker = arucoTracker.MarkerTracker;

                if (arucoTracker.RefineDetectedMarkers && arucoTracker.MarkerTracker.DetectedMarkers[cameraId][dictionary] > 0)
                {
                    foreach (var arucoBoard in arucoTracker.GetArucoObjects <ArucoGridBoard>(dictionary))
                    {
                        Aruco.RefineDetectedMarkers(image, arucoBoard.Board, markerTracker.MarkerCorners[cameraId][dictionary],
                                                    markerTracker.MarkerIds[cameraId][dictionary], markerTracker.RejectedCandidateCorners[cameraId][dictionary]);
                        markerTracker.DetectedMarkers[cameraId][dictionary] = (int)markerTracker.MarkerIds[cameraId][dictionary].Size();
                    }
                }
            }
        public override void EstimateTransforms(int cameraId, Aruco.Dictionary dictionary)
        {
            base.EstimateTransforms(cameraId, dictionary);

            Std.VectorVec3d diamondRvecs = null, diamondTvecs = null;

            if (DetectedDiamonds[cameraId][dictionary] > 0 && arucoCameraUndistortion != null)
            {
                Aruco.EstimatePoseSingleMarkers(DiamondCorners[cameraId][dictionary], EstimatePoseSquareLength, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId],
                                                arucoCameraUndistortion.UndistortedDistCoeffs[cameraId], out diamondRvecs, out diamondTvecs);
            }

            DiamondRvecs[cameraId][dictionary] = diamondRvecs;
            DiamondTvecs[cameraId][dictionary] = diamondTvecs;
        }
            /// <summary>
            /// <see cref="ArucoObjectTracker.Place(int, Dictionary, HashSet{ArucoObject})"/>
            /// </summary>
            public override void Place(int cameraId, Aruco.Dictionary dictionary)
            {
                if (!IsActivated || arucoTracker.MarkerTracker.DetectedMarkers[cameraId][dictionary] <= 0)
                {
                    return;
                }

                foreach (var arucoCharucoBoard in arucoTracker.GetArucoObjects <ArucoCharucoBoard>(dictionary))
                {
                    if (arucoCharucoBoard.ValidTransform)
                    {
                        PlaceArucoObject(arucoCharucoBoard, arucoCharucoBoard.Rvec, arucoCharucoBoard.Tvec, cameraId);
                    }
                }
            }
Exemple #30
0
        public override void EstimateTransforms(int cameraId, Aruco.Dictionary dictionary)
        {
            base.EstimateTransforms(cameraId, dictionary);

            Std.VectorVec3d rvecs = null, tvecs = null;

            if (DetectedMarkers[cameraId][dictionary] > 0 && arucoCameraUndistortion != null)
            {
                Aruco.EstimatePoseSingleMarkers(MarkerCorners[cameraId][dictionary], estimatePoseMarkerLength, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId],
                                                arucoCameraUndistortion.UndistortedDistCoeffs[cameraId], out rvecs, out tvecs);
            }

            MarkerRvecs[cameraId][dictionary] = rvecs;
            MarkerTvecs[cameraId][dictionary] = tvecs;
        }