static IIntegralImage compressBWIntegralImage(IIntegralImage img, int recursionLevels default 5) { if (recursionLevels <= 0) ret BWIntegralImage(img); int w = img.getWidth(), h = img.getHeight(); if (w >= 2) { IIHorizontalSplit split = new(img); var a = split.a(); var b = split.b(); var a2 = toIISingleColorIfPossible(a); var b2 = toIISingleColorIfPossible(b); if (a != a2 || b == b2) { split.setA(a != a2 ? a2 : compressBWIntegralImage(a, recursionLevels-1)); split.setB(b != b2 ? b2 : compressBWIntegralImage(b, recursionLevels-1)); img = split; } } // TODO: vertical split ret img; }