- // negative scale = match median to offset
-
- fprintf(stderr, "Calculating median...\n");
-
- float *medianbuf = malloc(sizeof(float) * w * h);
- float vmed;
-
- fprintf(stderr, " converting...\n");
- /* renormalize, find min/max */
- for(y = 0; y < h; ++y)
- for(x = 0; x < w; ++x)
- {
-#ifdef C99
- v = creal(imgspace1[(w*y+x)]);
-#else
- v = (imgspace1[(w*y+x)][0]);
-#endif
- medianbuf[w*y+x] = v;
- }
- fprintf(stderr, " sorting...\n");
- qsort(medianbuf, w*h, sizeof(*medianbuf), floatcmp);
- fprintf(stderr, " done.\n");
- if(w*h % 2)
- vmed = medianbuf[(w*h-1)/2];
- else
- vmed = (medianbuf[(w*h)/2] + medianbuf[(w*h-2)/2]) * 0.5;
-
- // we actually want (v - vmed) * scale + offset