def SelectSameElementEx(origin, me, w, h, c, excludes, thresold = 0.5): if w <= WMargin or w >= (origin.width - WMargin): return 0 if h < HMargin or h >= (origin.height - HMargin): return 0 if not hasattr(me, 'left'): me.left = w me.right = w me.top = h me.bottom = h else: if w < me.left: me.left = w elif w > me.right: me.right = w if h < me.top: me.top = h elif h > me.bottom: me.bottom = h count = 1 similars = ImageUtils.getSimilarNeighborsEx(origin, c, (w, h), excludes, thresold) s1 = [] distMean = 0 for (ww, hh, dist) in similars: cc = origin.getpixel((w + ww,h ++ hh)) if color.isBackground(cc): continue distMean += dist cc = origin.getpixel((w + ww, h + hh)) s1.append((ww, hh, cc)) origin.putpixel((w + ww, h + hh), color.BLACK_COLOR) me.putpixel((w + ww, h + hh), cc) if 0 == len(s1): return count distMean /= len(s1) thresold = thresold * SAME_ELEMENT_THRESOLD_ALPHA + (1 - SAME_ELEMENT_THRESOLD_ALPHA) * distMean #print('%s thresold=%lf, distMean=%lf' % (FILEANME, thresold, distMean)) for (ww, hh, cc) in s1: count += SelectSameElementEx(origin, me, w + ww, h + hh, cc, [(0, 0), (-ww, -hh)], thresold) return count