/// <summary> /// Process a new video frame. /// </summary> public void ProcessFrame(UnmanagedImage frame) { filterImage = filter.Apply(frame); Blob blob = extractBlob(); if (blob == null) { trackingObject.Reset(); return; } trackingObject.Rectangle = blob.Rectangle; trackingObject.Center = (IntPoint)blob.CenterOfGravity; if (rotation) { // Locate moments CentralMoments moments = new CentralMoments(); moments.Compute(filterImage, blob.Rectangle); trackingObject.Angle = moments.GetOrientation(); } if (extract) { blobCounter.ExtractBlobsImage(filterImage, blob, false); trackingObject.Image = blob.Image; } }
public void ComputeTest() { Bitmap image = Accord.Imaging.Image.Clone(Resources.hu); CentralMoments target = new CentralMoments(image, order: 3); Assert.AreEqual(86424.0 / target.Mu00, 1, 1e-4); Assert.AreEqual(0, target.Mu01); Assert.AreEqual(0, target.Mu10); Assert.AreEqual(5.868206472635379E8 / target.Mu02, 1, 1e-2); Assert.AreEqual(6348920.945848465 / target.Mu11, 1, 1e-2); Assert.AreEqual(9.084235762166061E8 / target.Mu20, 1, 1e-3); Assert.AreEqual(-2.155191E9 / target.Mu12, 1, 1e-4); Assert.AreEqual(7.125893E8 / target.Mu21, 1, 1e-3); Assert.AreEqual(-1.26244547E10 / target.Mu30, 1, 1e-4); Assert.AreEqual(1.71818829E9 / target.Mu03, 1, 1e-4); SizeF size = target.GetSize(); float angle = target.GetOrientation(); Assert.AreEqual(410.207916f, size.Height); Assert.AreEqual(329.534637f, size.Width); Assert.AreEqual(0.0196384024f, angle, 1e-4); }