void Split :: rec_merge(QuadTree * _node, double _p) { QuadTree * c, * n; double pMin, pMax, pct; if(_node == NULL || _node->done == true) return; if(_node->ne != NULL) { rec_merge(_node->nw, _p); rec_merge(_node->ne, _p); rec_merge(_node->sw, _p); rec_merge(_node->se, _p); } else { c = _node; pct = (_p * 255.0f) / 100.0; pMin = c->mean - pct; pMax = c->mean + pct; c->done = true; for(list::iterator it = c->neighbours.begin(); it != c->neighbours.end(); it++) { n = *it; if(n->done == false) { if(n->mean >= pMin && n->mean <= pMax) { for(int l(n->bbox[0][1]); l < n->bbox[1][1]; l++) for(int k(n->bbox[0][0]); k < n->bbox[1][0]; k++) result[l * rows + k] = (unsigned char)c->mean; rec_merge(n, _p); } } } for(int l(c->bbox[0][1]); l < c->bbox[1][1]; l++) for(int k(c->bbox[0][0]); k < c->bbox[1][0]; k++) result[l * rows + k] = (unsigned char)c->mean; } }