in lear_gist-1.2/gist.c [634:689]
static void color_down_N(float *res, color_image_t *src, int N, int c)
{
int i, j, k, l;
int *nx = (int *) malloc((N+1)*sizeof(int));
int *ny = (int *) malloc((N+1)*sizeof(int));
for(i = 0; i < N+1; i++)
{
nx[i] = i*src->width/(N);
ny[i] = i*src->height/(N);
}
for(l = 0; l < N; l++)
{
for(k = 0; k < N; k++)
{
float mean = 0.0f;
float *ptr;
switch(c)
{
case 0:
ptr = src->c1;
break;
case 1:
ptr = src->c2;
break;
case 2:
ptr = src->c3;
break;
default:
return;
}
for(j = ny[l]; j < ny[l+1]; j++)
{
for(i = nx[k]; i < nx[k+1]; i++)
{
mean += ptr[j*src->width+i];
}
}
float denom = (float)(ny[l+1]-ny[l])*(nx[k+1]-nx[k]);
res[k*N+l] = mean / denom;
assert(finite(res[k*N+l]));
}
}
free(nx);
free(ny);
}