computeMoments method

void computeMoments()

Implementation

void computeMoments() {
  for (var r = 1; r < sideLength; ++r) {
    List<int> area = List.filled(sideLength, 0, growable: false);
    List<int> areaR = List.filled(sideLength, 0, growable: false);
    List<int> areaG = List.filled(sideLength, 0, growable: false);
    List<int> areaB = List.filled(sideLength, 0, growable: false);
    List<double> area2 = List.filled(sideLength, 0.0, growable: false);
    for (var g = 1; g < sideLength; g++) {
      int line = 0;
      int lineR = 0;
      int lineG = 0;
      int lineB = 0;
      double line2 = 0.0;
      for (var b = 1; b < sideLength; b++) {
        int index = getIndex(r, g, b);
        line += weights[index];
        lineR += momentsR[index];
        lineG += momentsG[index];
        lineB += momentsB[index];
        line2 += moments[index];

        area[b] += line;
        areaR[b] += lineR;
        areaG[b] += lineG;
        areaB[b] += lineB;
        area2[b] += line2;

        int previousIndex = getIndex(r - 1, g, b);
        weights[index] = weights[previousIndex] + area[b];
        momentsR[index] = momentsR[previousIndex] + areaR[b];
        momentsG[index] = momentsG[previousIndex] + areaG[b];
        momentsB[index] = momentsB[previousIndex] + areaB[b];
        moments[index] = moments[previousIndex] + area2[b];
      }
    }
  }
}