https://github.com/up42/image-similarity-measures https://ece.uwaterloo.ca/~z70wang/publications/quality_2c.pdf https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance const int width = 200; const int height = 200; inline int sum (int v) { return (v >> 16) & 255 + (v >> 8) & 255 + v & 255; } double meanx, meany, varx, vary, varxy; void f (int * imgx, int * imgy) { int n = 0; long sumx = 0, sumxx = 0, sumy = 0, sumyy = 0, sumxy = 0; for (int i = 0; i < height; i++) for (int j = 0; j < width; j++) { int valx = imgx [i*width+j]; int x = (valx >> 16) & 255 + (valx >> 8) & 255 + valx & 255; int valy = imgy [i*width+j]; int y = sum (valy); n ++; sumx += x; sumxx += x*x; sumy += y; sumyy += y*y; sumxy += x*y; } meanx = sumx/n; meany = sumy/n; varx = (sumxx - sumx * sumx / n ) / (n-1); vary = (sumyy - sumy * sumy / n ) / (n-1); varxy = (sumxy - sumx * sumy / n ) / n; } int main(int argc, char *argv[]) { int * imgx = new int [width*height]; int * imgy = new int [width*height]; f (imgx, imgy); } class Image; void f (Image * imgx, Image * imgy) { int n = 0; double sumx = 0, sumxx = 0, sumy = 0, sumyy = 0, sumxy = 0; for (int i = 0; i < height; i++) for (int j = 0; j < width; j++) { x = imgx [i,j]; y = imgy [i,j]; n ++; sumx += x; sumxx += x*x; sumy += y; sumyy += y*y; sumxy += x*y; } double meanx = sumx/n; double meany = sumy/n; double varx = (sumxx - sumx * sumx / n ) / (n-1); double vary = (sumyy - sumy * sumy / n ) / (n-1); double varxy = (sumxy - sumx * sumy / n ) / n / (n-1); }