/// <summary> /// Detects the presence of an object in a given window. /// </summary> /// public bool Compute(IntegralImage2 image, Rectangle rectangle) { int x = rectangle.X; int y = rectangle.Y; int w = rectangle.Width; int h = rectangle.Height; double mean = image.GetSum(x, y, w, h) * invArea; double var = image.GetSum2(x, y, w, h) * invArea - (mean * mean); double sdev = (var >= 0) ? Math.Sqrt(var) : 1; // For each classification stage in the cascade foreach (HaarCascadeStage stage in cascade.Stages) { // Check if the stage has rejected the image if (stage.Classify(image, x, y, sdev) == false) { return(false); // The image has been rejected. } } // If the object has gone all stages and has not // been rejected, the object has been detected. return(true); // The image has been detected. }
public void lena_test() { string localPath = NUnit.Framework.TestContext.CurrentContext.TestDirectory; #region doc_lena // In this example, we will compute an integral image // representation of Lena Söderberg's famous picture: TestImages testImages = new TestImages(path: localPath); Bitmap lena = testImages["lena.bmp"]; // get the image // Create a new Integral Image (squared and tilted) from Lena's picture: IntegralImage2 ii = IntegralImage2.FromBitmap(lena, computeTilted: true); // Let's say we would like to get the summed area in the rectangular region // delimited by pixel (34, 50) until pixels (60, 105). This is equivalent to // the region under the rectangle (34, 50, 34+60, 50+105) = (34, 50, 94, 155): long sum = ii.GetSum(34, 50, 94, 155); // this is the sum of values (1760032) // Now let's say we would like to get the squared sum and tilted sum as well: long ssum = ii.GetSum2(34, 50, 94, 155); // this is the sum of squared values (229508896) long tsum = ii.GetSumT(34, 50, 94, 155); // this is the sum of tilted values (-593600) #endregion Assert.AreEqual(1760032, sum); Assert.AreEqual(229508896, ssum); Assert.AreEqual(-593600, tsum); }