Accord.Imaging.Moments.HuMoments.Compute C# (CSharp) Method

Compute() public method

Computes the Hu moments from the specified central moments.
public Compute ( CentralMoments moments ) : void
moments CentralMoments The central moments to use as base of calculations.
return void
        public void Compute(CentralMoments moments)
        {
            double inv = 1.0 / moments.Mu00;
            double inv2 = 1.0 / (moments.Mu00 * moments.Mu00);
            double inv5d2 = Math.Sqrt(inv2 * inv2 * inv);


            float n20 = (float)(moments.Mu20 * inv2);
            float n02 = (float)(moments.Mu02 * inv2);
            float n11 = (float)(moments.Mu11 * inv2);

            float n21 = (float)(moments.Mu21 * inv5d2);
            float n12 = (float)(moments.Mu12 * inv5d2);
            float n30 = (float)(moments.Mu30 * inv5d2);
            float n03 = (float)(moments.Mu03 * inv5d2);


            //   (η20 + η02)
            I1 = (n20 + n02);


            //   (η20 − η02)²              + 4    η11²
            I2 = (n20 - n02) * (n20 - n02) + 4 * (n11 * n11);


            //   (η30 − 3   η12)²
            I3 = (n30 - 3 * n12) * (n30 - 3 * n12)

            // + (3   η21 − η03)²
               + (3 * n21 - n03) * (3 * n21 - n03);


            //   (η30 + η12)²              + (η21 + η03)²
            I4 = (n30 + n12) * (n30 + n12) + (n21 + n03) * (n21 + n03);


            //   (η30 − 3   η12)   (η30 + η12)   [(η30 + η12)²               −3   (η21 + η03)²             ]
            I5 = (n30 - 3 * n12) * (n30 + n12) * ((n30 + n12) * (n30 + n12) - 3 * (n21 + n03) * (n21 + n03))

            //   (3   η21 − η03)   (η21 + η03)   [3   (η30 + η12)²              − (η21 + η03)²             ]
               + (3 * n21 - n03) * (n21 + n03) * (3 * (n30 + n12) * (n30 + n12) - (n21 + n03) * (n21 + n03));


            //   (η20 − η02)   [(η30 + η12)²              − (η21 + η03)²             ]
            I6 = (n20 - n02) * ((n30 + n12) * (n30 + n12) - (n21 + n03) * (n21 + n03))

            //  + 4   η11   (η30 + η12)   (η21 + η03)
                + 4 * n11 * (n30 + n12) * (n21 + n03);


            //   (3   η21 − η03)   (η30 + η12)                 [(η30 + η12)²              − 3   (η21 + η03)²             ]
            I7 = (3 * n21 - n03) * (n30 + n12) * (n30 + n12) * ((n30 + n12) * (n30 + n12) - 3 * (n21 + n03) * (n21 + n03))

            // - (η30 − 3   η12)   (η21 + η03)   [3   (η30 + η12)²              − (η21 + η03)²             ]
               - (n30 - 3 * n12) * (n21 + n03) * (3 * (n30 + n12) * (n30 + n12) - (n21 + n03) * (n21 + n03));
        }

Same methods

HuMoments::Compute ( UnmanagedImage image, Rectangle area ) : void
HuMoments::Compute ( float image, Rectangle area ) : void