public void FindObject_1stTracking() { // arrange - instantiate tracker InstantiateTracker(); // arrange - load new/current frame Image <Gray, byte> currentFrame = new Image <Gray, byte> ( Path.Combine(_resourceDir, "violeta_6.jpg") ); // define expected - status and new/current bounding box MedianFlowTrackerStatus expectedStatus = MedianFlowTrackerStatus.OK; IBoundingBox expectedBB = new BoundingBox ( new PointF(100, 89), new SizeF(70, 40) ); // get actual IBoundingBox actualBB = _tracker.FindObject(currentFrame); MedianFlowTrackerStatus actualStatus = _tracker.Status; // assert Assert.AreEqual(expectedStatus, actualStatus); float overlap = actualBB.GetOverlap(expectedBB); Assert.AreEqual(0.95f, overlap, 0.05f); }
public void FindObject_2ReliableShifts() { // 1.1 arrange - typical case ArrangeTypicalCase(); // 1.2 arrange - change fb error and ncc for each point. // Exactly 2 shifts have both fbError <= median(fbError) and ncc >= median(ncc) _service.FBErrorsList = new List <List <float> >(); _service.FBErrorsList.Add(new List <float>() { 0, 0, 0, 2, 2, 2 }); _service.NCCsList = new List <List <float> >(); _service.NCCsList.Add(new List <float>() { 1, 1, -1, -1, -1, 1 }); // 2. define expected IBoundingBox expectedBB = new BoundingBoxStub( new PointF(2, 3.5f), new SizeF(6, 2) ); MedianFlowTrackerStatus expectedStatus = MedianFlowTrackerStatus.OK; // 3. get actual IBoundingBox actualBB = _tracker.FindObject(new Image <Gray, byte>(_frameSize)); MedianFlowTrackerStatus actualStatus = _tracker.Status; // 4. assert Assert.IsTrue((actualBB as BoundingBoxStub).IsEqualTo(expectedBB as BoundingBoxStub)); Assert.AreEqual(expectedStatus, actualStatus); }
public void FindObject_1ValidShift() { // 1.1 arrange - typical case ArrangeTypicalCase(); // 1.2 arrange - change how points are tracked forward and backward. // Only 1 point is tracked both forward and backward succesfully. _LKtracker.ForwardStatusList = new List <byte[]>(); _LKtracker.ForwardStatusList.Add(new byte[] { 1, 0, 0, 0, 0, 0, 0, 0 }); _LKtracker.BackwardStatusList = new List <byte[]>(); _LKtracker.BackwardStatusList.Add(new byte[] { 1, 0, 0, 0, 0, 0, 0, 0 }); // 2. define expected IBoundingBox expectedBB = null; MedianFlowTrackerStatus expectedStatus = MedianFlowTrackerStatus.NOT_ENOUGH_VALID_SHIFTS; // 3. get actual IBoundingBox actualBB = _tracker.FindObject(new Image <Gray, byte>(_frameSize)); MedianFlowTrackerStatus actualStatus = _tracker.Status; // 4. assert Assert.AreEqual(expectedBB, actualBB); Assert.AreEqual(expectedStatus, actualStatus); }
public void FindObject_1ReliableShift() { // 1.1 arrange - typical case ArrangeTypicalCase(); // 1.2 arrange - change fb error and ncc for each point. // Only one point has both fbError <= median(fbError) and ncc >= median(ncc) _service.FBErrorsList = new List <List <float> >(); _service.FBErrorsList.Add(new List <float>() { 0, 0, 0, 2, 2, 2 }); _service.NCCsList = new List <List <float> >(); _service.NCCsList.Add(new List <float>() { 1, -1, -1, -1, 1, 1 }); // 2. define expected IBoundingBox expectedBB = null; MedianFlowTrackerStatus expectedStatus = MedianFlowTrackerStatus.NOT_ENOUGH_RELIABLE_SHIFTS; // 3. get actual IBoundingBox actualBB = _tracker.FindObject(new Image <Gray, byte>(_frameSize)); MedianFlowTrackerStatus actualStatus = _tracker.Status; // 4. assert Assert.AreEqual(expectedBB, actualBB); Assert.AreEqual(expectedStatus, actualStatus); }
public void FindObject_DifferentReliableShifts() { // 1.1 arrange - typical case ArrangeTypicalCase(); // 1.2 arrange - change fb error and ncc values - we want points 3 and 6 to be reliable // points order in lists: { 1, 2, 3, 6, 7, 8} _service.FBErrorsList = new List <List <float> >(); _service.FBErrorsList.Add(new List <float>() { 0, 0, 0, 0, 2, 2 }); _service.NCCsList = new List <List <float> >(); _service.NCCsList.Add(new List <float>() { -1, -1, 1, 1, 1, 1 }); // 2. define expected PointF expectedCenter = new PointF(3.5f, 0.5f); SizeF expectedSize = new SizeF(3, 1); MedianFlowTrackerStatus expectedStatus = MedianFlowTrackerStatus.OK; // 3. get actual IBoundingBox actualBB = _tracker.FindObject(new Image <Gray, byte>(_frameSize)); MedianFlowTrackerStatus actualStatus = _tracker.Status; // 4. assert Assert.AreEqual(expectedCenter, (actualBB as BoundingBoxStub).CenterStub); Assert.AreEqual(expectedSize, (actualBB as BoundingBoxStub).SizeStub); Assert.AreEqual(expectedStatus, actualStatus); }
public void FindObject_2ValidShifts_Fails() { // 1.1 arrange - typical case ArrangeTypicalCase(); // 1.2 arrange - change how points are tracked forward and backward. // Exactly 2 points are tracked both forward and backward succesfully. _LKtracker.ForwardStatusList = new List <byte[]>(); _LKtracker.ForwardStatusList.Add(new byte[] { 1, 1, 0, 0, 0, 0, 0, 0 }); _LKtracker.BackwardStatusList = new List <byte[]>(); _LKtracker.BackwardStatusList.Add(new byte[] { 1, 1, 0, 0, 0, 0, 0, 0 }); // 1.3 arrange - change fb error and ncc for each point. // Exactly 1 shift has both fbError <= median(fbError) and ncc >= median(ncc) _service.FBErrorsList = new List <List <float> >(); _service.FBErrorsList.Add(new List <float>() { 0, 0, 0, 2, 2, 2 }); _service.NCCsList = new List <List <float> >(); _service.NCCsList.Add(new List <float>() { 1, -1, -1, -1, 1, 1 }); // 2. define expected IBoundingBox expectedBB = null; MedianFlowTrackerStatus expectedStatus = MedianFlowTrackerStatus.NOT_ENOUGH_RELIABLE_SHIFTS; // 3. get actual IBoundingBox actualBB = _tracker.FindObject(new Image <Gray, byte>(_frameSize)); MedianFlowTrackerStatus actualStatus = _tracker.Status; // 4. assert Assert.AreEqual(expectedBB, actualBB); Assert.AreEqual(expectedStatus, actualStatus); }
public void FindObject_MADTooBig() { // 1.1 arrange - typical case ArrangeTypicalCase(); // 1.2 arrange - change how points are tracked forward and backward. // 4 points are tracked both forward and backward succesfully. _LKtracker.ForwardStatusList = new List <byte[]>(); _LKtracker.ForwardStatusList.Add(new byte[] { 1, 1, 1, 1, 0, 0, 0, 0 }); _LKtracker.BackwardStatusList = new List <byte[]>(); _LKtracker.BackwardStatusList.Add(new byte[] { 1, 1, 1, 1, 0, 0, 0, 0 }); // 1.3 arrange - change fb error for each point. // MAD must be bigger that a threshold ( == 10, set in ArrangeTypicalCase()). _service.FBErrorsList = new List <List <float> >(); _service.FBErrorsList.Add(new List <float>() { 0, 0, 21, 21 }); _service.NCCsList = new List <List <float> >(); _service.NCCsList.Add(new List <float>() { 1, 1, 1, 1 }); // 2. define expected IBoundingBox expectedBB = null; MedianFlowTrackerStatus expectedStatus = MedianFlowTrackerStatus.MAD_TOO_BIG; // 3. get actual IBoundingBox actualBB = _tracker.FindObject(new Image <Gray, byte>(_frameSize)); MedianFlowTrackerStatus actualStatus = _tracker.Status; // 4. assert Assert.AreEqual(expectedBB, actualBB); Assert.AreEqual(expectedStatus, actualStatus); }
public void FindObject_TypicalCase() { // 1. arrange ArrangeTypicalCase(); // 2. define expected PointF expectedCenter = new PointF(3, 4); SizeF expectedSize = new SizeF(6, 2); MedianFlowTrackerStatus expectedStatus = MedianFlowTrackerStatus.OK; // 3. get actual IBoundingBox actualBB = _tracker.FindObject(new Image <Gray, byte>(_frameSize)); MedianFlowTrackerStatus actualStatus = _tracker.Status; // 4. assert Assert.AreEqual(expectedCenter, (actualBB as BoundingBoxStub).CenterStub); Assert.AreEqual(expectedSize, (actualBB as BoundingBoxStub).SizeStub); Assert.AreEqual(expectedStatus, actualStatus); }
public void FindObject_2ndTracking() { // arrange - instantiate tracker InstantiateTracker(); // arrange - track for the first time Image <Gray, byte> currentFrame1 = new Image <Gray, byte> ( Path.Combine(_resourceDir, "violeta_6.jpg") ); _tracker.FindObject(currentFrame1); // arrange - prepare new/current frame for tracking the second time Image <Gray, byte> currentFrame2 = new Image <Gray, byte> ( Path.Combine(_resourceDir, "violeta_7.jpg") ); // define expected - status and new/current bounding box MedianFlowTrackerStatus expectedStatus = MedianFlowTrackerStatus.OK; float expectedNccMedian = 0.9f; IBoundingBox expectedBB = new BoundingBox ( new PointF(111, 101), new SizeF(70, 40) ); // get actual IBoundingBox actualBB = _tracker.FindObject(currentFrame2); MedianFlowTrackerStatus actualStatus = _tracker.Status; float actualNccMedian = _tracker.NccMedian; // assert Assert.AreEqual(expectedStatus, actualStatus); Assert.AreEqual(expectedNccMedian, actualNccMedian, 0.1f); float overlap = actualBB.GetOverlap(expectedBB); Assert.AreEqual(0.95f, overlap, 0.05f); }
public void FindObject_PostInit() { // 1.1 arrange - typical case ArrangeTypicalCase(); // 1.2. arrange data for the 2nd frame // 1.2.1 bounding box PointF bbCenter = new PointF(3, 4); SizeF bbSize = new SizeF(6, 2); PointF[] bbVisiblePoints = new PointF[] { new PointF(0, 3), new PointF(2, 3), new PointF(4, 3), new PointF(6, 3), new PointF(0, 5), new PointF(2, 5), new PointF(4, 5), new PointF(6, 5) }; IMedianFlowTrackerBoundingBox bb = new MedianFlowTrackerBoundingBoxStub(bbCenter, bbSize, bbVisiblePoints); _bb.HardcodedNextBB = (bb as MedianFlowTrackerBoundingBoxStub); // 1.2.2 arrange - set forward and backward points. // All points are tracked both forward and backward succesfully. _LKtracker.ForwardPointsList.Add(new PointF[] { new PointF(1, 3), new PointF(3, 3), new PointF(5, 3), new PointF(7, 3), new PointF(1, 5), new PointF(3, 5), new PointF(5, 5), new PointF(7, 5) }); _LKtracker.BackwardPointsList.Add(new PointF[] { new PointF(0, 3), new PointF(2, 3), new PointF(4, 3), new PointF(6, 3), new PointF(0, 5), new PointF(2, 5), new PointF(4, 5), new PointF(6, 5) }); _LKtracker.ForwardStatusList.Add(new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 }); _LKtracker.BackwardStatusList.Add(new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 }); // 1.2.3 arrange - change fb error for each point. // Every point should be reliable. _service.FBErrorsList.Add(new List <float>() { 0, 0, 0, 0, 0, 0, 0, 0 }); _service.NCCsList.Add(new List <float>() { 1, 1, 1, 1, 1, 1, 1, 1 }); // 1.3. arrange - call tracker the first time _tracker.FindObject(new Image <Gray, byte>(_frameSize)); // 2. define expected IBoundingBox expectedBB = new BoundingBoxStub( new PointF(4, 4), new SizeF(6, 2) ); MedianFlowTrackerStatus expectedStatus = MedianFlowTrackerStatus.OK; // 3. get actual - call tracker for the second time IBoundingBox actualBB = _tracker.FindObject(new Image <Gray, byte>(_frameSize)); MedianFlowTrackerStatus actualStatus = _tracker.Status; // 4. assert Assert.AreEqual((expectedBB as BoundingBoxStub).CenterStub, (actualBB as BoundingBoxStub).CenterStub); Assert.AreEqual((expectedBB as BoundingBoxStub).SizeStub, (actualBB as BoundingBoxStub).SizeStub); Assert.AreEqual(expectedStatus, actualStatus); }