static int bwContrastQuadtree_minOfArea(BWImage min, Rect rect) { ret bwContrastQuadtree_minOfArea(min, rect, Rect(0, 0, min.getWidth(), min.getHeight())); } static int bwContrastQuadtree_minOfArea(BWImage min, Rect rect, Rect block) { Rect r2 = intersectRects(rect, block); if (r2.empty()) ret 255; // simple case 1: no intersection // simple case 2: whole block if (eq(r2, block)) ret min.getInt(block.x, block.y); // complex case: process 4 subsquares int r = block.w/2; ret intMin( bwContrastQuadtree_minOfArea(min, r2, Rect(block.x, block.y, r, r)), bwContrastQuadtree_minOfArea(min, r2, Rect(block.x+r, block.y, r, r)), bwContrastQuadtree_minOfArea(min, r2, Rect(block.x, block.y+r, r, r)), bwContrastQuadtree_minOfArea(min, r2, Rect(block.x+r, block.y+r, r, r))); }