in lear_gist-1.2/gist.c [596:630]
static void down_N(float *res, image_t *src, int N)
{
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;
for(j = ny[l]; j < ny[l+1]; j++)
{
for(i = nx[k]; i < nx[k+1]; i++) {
mean += src->data[j*src->stride+i];
}
}
float denom = (float)(ny[l+1]-ny[l])*(nx[k+1]-nx[k]);
res[k*N+l] = mean / denom;
}
}
free(nx);
free(ny);
}