// returns similarity (not diff) static float rgbImageSimilarity_sameSize(RGBImage a, RGBImage b, float similarity) { int w = a.w(), h = a.h(); if (w != b.w() || h != b.h()) fail("not same size"); float factor = w*h; float maxError = (1f-similarity)*factor; float diff = 0; for (int y = 0; y < h; y++) for (int x = 0; x < w; x++) { diff += rgbDiff( a.getInt(x, y), b.getInt(x, y)); if (diff > maxError) ret similarity-0.001f; } ret 1f-diff/factor; }