Example #1
0
        /// <summary>
        ///   Gets the sum of the areas of the rectangular features in an integral image.
        /// </summary>
        ///
        public double GetSum(IntegralImage2 image, int x, int y)
        {
            double sum = 0.0;

            if (!Tilted)
            {
                // Compute the sum for a standard feature
                foreach (HaarRectangle rect in Rectangles)
                {
                    sum += image.GetSum(x + rect.ScaledX, y + rect.ScaledY,
                                        rect.ScaledWidth, rect.ScaledHeight) * rect.ScaledWeight;
                }
            }
            else
            {
                // Compute the sum for a rotated feature
                foreach (HaarRectangle rect in Rectangles)
                {
                    sum += image.GetSumT(x + rect.ScaledX, y + rect.ScaledY,
                                         rect.ScaledWidth, rect.ScaledHeight) * rect.ScaledWeight;
                }
            }

            return(sum);
        }
Example #2
0
        /// <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.
        }
Example #3
0
        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);
        }
Example #4
0
        public void GetSumTest()
        {
            byte[,] img =
            {
                { 01, 02, 03, 04, 05, 06, 07, 08, 09,  10 },
                { 11, 12, 13, 14, 15, 16, 17, 18, 19,  20 },
                { 21, 22, 23, 24, 25, 26, 27, 28, 29,  30 },
                { 31, 32, 33, 34, 35, 36, 37, 38, 39,  40 },
                { 41, 42, 43, 44, 45, 46, 47, 48, 49,  50 },
                { 51, 52, 53, 54, 55, 56, 57, 58, 59,  60 },
                { 61, 62, 63, 64, 65, 66, 67, 68, 69,  70 },
                { 71, 72, 73, 74, 75, 76, 77, 78, 79,  80 },
                { 81, 82, 83, 84, 85, 86, 87, 88, 89,  90 },
                { 91, 92, 93, 94, 95, 96, 97, 98, 99, 100 }
            };

            // Create integral image
            Bitmap         bmp = Accord.Imaging.Tools.ToBitmap(img);
            IntegralImage2 ii  = IntegralImage2.FromBitmap(bmp, 0, true);


            // Horizontal rectangular feature
            int x = 6, y = 0, w = 3, h = 2;

            int  expected = 7 + 8 + 9 + 17 + 18 + 19;
            long actual   = ii.GetSum(x, y, w, h);

            Assert.AreEqual(expected, actual);
        }
        /// <summary>
        ///   Gets the sum of the areas of the rectangular features in an integral image.
        /// </summary>
        /// 
        public double GetSum(IntegralImage2 image, int x, int y)
        {
            double sum = 0.0;

            if (!Tilted)
            {
                // Compute the sum for a standard feature
                foreach (HaarRectangle rect in Rectangles)
                {
                    sum += image.GetSum(x + rect.ScaledX, y + rect.ScaledY,
                        rect.ScaledWidth, rect.ScaledHeight) * rect.ScaledWeight;
                }
            }
            else
            {
                // Compute the sum for a rotated feature
                foreach (HaarRectangle rect in Rectangles)
                {
                    sum += image.GetSumT(x + rect.ScaledX, y + rect.ScaledY,
                        rect.ScaledWidth, rect.ScaledHeight) * rect.ScaledWeight;
                }
            }

            return sum;
        }