예제 #1
0
        public void CreateCurrent()
        {
            // arrange
            PointF center      = new PointF(3, 2);
            SizeF  size        = new SizeF(4, 5);
            Size   gridSize    = new Size(4, 2);
            SizeF  gridPadding = new SizeF(1, 1);
            IMedianFlowTrackerBoundingBox bb = new MedianFlowTrackerBoundingBox(
                center,
                size,
                gridSize,
                gridPadding
                );

            // define expected
            PointF expectedCenter      = new PointF(5.5f, 3.5f);
            SizeF  expectedSize        = new SizeF(6, 7.5f);
            Size   expectedGridSize    = gridSize;
            SizeF  expectedGridPadding = gridPadding;

            // get actual
            IMedianFlowTrackerBoundingBox IactualBB = bb.CreateCurrent(2.5f, 1.5f, 1.5f);
            MedianFlowTrackerBoundingBox  actualBB  = IactualBB as MedianFlowTrackerBoundingBox;

            // assert
            Assert.AreEqual(expectedCenter, actualBB.Center);
            Assert.AreEqual(expectedSize, actualBB.Size);
            Assert.AreEqual(expectedGridSize, actualBB.GridSize);
            Assert.AreEqual(expectedGridPadding, actualBB.GridPadding);
        }
예제 #2
0
        private static MedianFlowTracker LoadTracker()
        {
            MedianFlowTrackerBoundingBox bb        = LoadBoundingBox();
            LucasKanadeTracker           lkTracker = LoadLucasKanade();

            // fb error calculator
            MedianFlowTracker.FBError_Calculator fbErrorCalc = Service.FBError;

            // ncc calculator
            MedianFlowTracker.NCC_Calculator nccCalc = Service.NCC;

            // patch size
            Size patchSize = new Size(8, 8);

            // mad treshold
            float madTreshold = 10;

            return(new MedianFlowTracker
                   (
                       bb,
                       lkTracker,
                       fbErrorCalc,
                       nccCalc,
                       patchSize,
                       madTreshold
                   ));
        }
예제 #3
0
        /// <summary>
        /// Instatiates a ready-to-go median flow tracker.
        /// All of its initial configuration is done here.
        /// </summary>
        private void InstantiateTracker()
        {
            // grid bounding box
            _gridBb = new MedianFlowTrackerBoundingBox
                      (
                new Size(10, 10),
                new SizeF(5, 5)
                      );

            // lucas kanade tracker
            _lkTracker = new LucasKanadeTracker(
                new Size(11, 11),
                2,
                new MCvTermCriteria(20, 0.03),
                LKFLOW_TYPE.DEFAULT,
                LKFLOW_TYPE.CV_LKFLOW_PYR_A_READY | LKFLOW_TYPE.CV_LKFLOW_PYR_B_READY
                );

            // fb error and ncc calculators
            _fbErrorCalc = Service.FBError;
            _nccCalc     = Service.NCC;

            // patch size for calculating NCC
            _patchSize = new Size(11, 11);

            // MAD treshold
            _madTrashold = 10;

            // ** instantiate the median flow tracker **
            _tracker = new MedianFlowTracker(
                _gridBb,
                _lkTracker,
                _fbErrorCalc,
                _nccCalc,
                _patchSize,
                _madTrashold
                );

            // initial frame
            _initialFrame = new Image <Gray, byte>(Path.Combine(_resourceDir, "violeta_5.jpg"));

            // initial bounding box
            _initialBB = new BoundingBox(
                new PointF(90, 81),
                new SizeF(70, 40)
                );

            // ** initialize the median flow tracker **
            _tracker.Initialize(_initialFrame, _initialBB);
        }
예제 #4
0
        public void GetGrid_NonUniformSpacing()
        {
            // arrange
            MedianFlowTrackerBoundingBox box = new MedianFlowTrackerBoundingBox(new SizeF(4, 2));

            // define expected
            PointF[,] expected = new PointF[, ] {
                { new PointF(0.0f, 0.0f), new PointF(3.0f, 0.0f) },
                { new PointF(0.0f, 1.0f), new PointF(3.0f, 1.0f) }
            };

            // get actual
            PointF[,] actual = box.GetGrid(new Size(2, 2), new SizeF(0.0f, 0.0f));

            // assert
            Assert.IsTrue(CompareGrids(expected, actual));
        }
예제 #5
0
        public void GetVisibleGridPoints_Padding()
        {
            // arrange
            IMedianFlowTrackerBoundingBox bb = new MedianFlowTrackerBoundingBox
                                               (
                new PointF(2.5f, 3),
                new SizeF(3, 2),        // bb is not square
                new Size(2, 2),         // there are 4 grid points
                new SizeF(1, 0.5f)      // padding, different for horizontal and vertical
                                               );

            // define expected
            PointF[] expectedPoints =
            {
                new PointF(2, 2.5f), new PointF(3, 2.5f),
                new PointF(2, 3.5f), new PointF(3, 3.5f)
            };

            // get actual
            PointF[] actualPoints = bb.GetGridPoints();

            // assert
            CollectionAssert.AreEqual(expectedPoints, actualPoints);
        }
예제 #6
0
        public void GetVisibleGridPoints_Simple()
        {
            // arrange
            IMedianFlowTrackerBoundingBox bb = new MedianFlowTrackerBoundingBox
                                               (
                new PointF(2.5f, 3),
                new SizeF(3, 2),        // bb is not square
                new Size(2, 2),         // there are 4 grid points
                new SizeF(0, 0)
                                               );

            // define expected
            PointF[] expectedPoints =
            {
                new PointF(1, 2), new PointF(4, 2),
                new PointF(1, 4), new PointF(4, 4)
            };

            // get actual
            PointF[] actualPoints = bb.GetGridPoints();

            // assert
            CollectionAssert.AreEqual(expectedPoints, actualPoints);
        }