public static double getCovarianceXY(int p, int q, double[,] image) { double mc00 = Moments.getCentralMoment(0, 0, image); double mc11 = Moments.getCentralMoment(1, 1, image); return(mc11 / mc00); }
public static double getVarianceY(int p, int q, double[,] image) { double mc00 = Moments.getCentralMoment(0, 0, image); double mc02 = Moments.getCentralMoment(0, 2, image); return(mc02 / mc00); }
public static double getNormalizedCentralMoment(int p, int q, double[,] image) { double gama = ((p + q) / 2) + 1; double mpq = Moments.getCentralMoment(p, q, image); double m00gama = Math.Pow(Moments.getCentralMoment(0, 0, image), gama); return(mpq / m00gama); }
public static double getHuMoment(double[,] image, int n) { double result = 0.0; double n20 = Moments.getNormalizedCentralMoment(2, 0, image), n02 = Moments.getNormalizedCentralMoment(0, 2, image), n30 = Moments.getNormalizedCentralMoment(3, 0, image), n12 = Moments.getNormalizedCentralMoment(1, 2, image), n21 = Moments.getNormalizedCentralMoment(2, 1, image), n03 = Moments.getNormalizedCentralMoment(0, 3, image), n11 = Moments.getNormalizedCentralMoment(1, 1, image); switch (n) { case 1: result = n20 + n02; break; case 2: result = Math.Pow((n20 - 02), 2) + Math.Pow(2 * n11, 2); break; case 3: result = Math.Pow(n30 - (3 * (n12)), 2) + Math.Pow((3 * n21 - n03), 2); break; case 4: result = Math.Pow((n30 + n12), 2) + Math.Pow((n12 + n03), 2); break; case 5: result = (n30 - 3 * n12) * (n30 + n12) * (Math.Pow((n30 + n12), 2) - 3 * Math.Pow((n21 + n03), 2)) + (3 * n21 - n03) * (n21 + n03) * (3 * Math.Pow((n30 + n12), 2) - Math.Pow((n21 + n03), 2)); break; case 6: result = (n20 - n02) * (Math.Pow((n30 + n12), 2) - Math.Pow((n21 + n03), 2)) + 4 * n11 * (n30 + n12) * (n21 + n03); break; case 7: result = (3 * n21 - n03) * (n30 + n12) * (Math.Pow((n30 + n12), 2) - 3 * Math.Pow((n21 + n03), 2)) + (n30 - 3 * n12) * (n21 + n03) * (3 * Math.Pow((n30 + n12), 2) - Math.Pow((n21 + n03), 2)); break; default: result = 0; break; } return(result); }
public static double getCentralMoment(int p, int q, double[,] image) { double mc = 0; double m00 = Moments.getBasicMoment(0, 0, image); double m10 = Moments.getBasicMoment(1, 0, image); double m01 = Moments.getBasicMoment(0, 1, image); double x0 = m10 / m00; double y0 = m01 / m00; for (int i = 0, k = image.GetLength(0); i < k; i++) { for (int j = 0, l = image.GetLength(1); j < l; j++) { mc += Math.Pow((i - x0), p) * Math.Pow((j - y0), q) * image[i, j]; } } return(mc); }