static void down_N()

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);
}