static void color_down_N()

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