void nmap_to_hmap(unsigned char *map, const unsigned char *refmap, int w, int h, double scale, double offset)
{
int x, y;
+ int fx, fy;
+ double ffx, ffy;
double nx, ny, nz;
double v, vmin, vmax;
#ifndef C99
for(y = 0; y < h; ++y)
for(x = 0; x < w; ++x)
{
- int fx = x;
- int fy = y;
+ fx = x;
+ fy = y;
if(fx > w/2)
fx -= w;
if(fy > h/2)
fy -= h;
+ /* these must have the same sign as fx and fy (so ffx*fx + ffy*fy is nonzero), otherwise do not matter */
+ /* it basically decides how artifacts are distributed */
+ ffx = fx;
+ ffy = fy;
#ifdef C99
if(fx||fy)
- freqspace1[(w*y+x)] = _Complex_I * (fx * freqspace1[(w*y+x)] + fy * freqspace2[(w*y+x)]) / (fx*fx + fy*fy) / TWO_PI;
+ freqspace1[(w*y+x)] = _Complex_I * (ffx * freqspace1[(w*y+x)] + ffy * freqspace2[(w*y+x)]) / (ffx*fx + ffy*fy) / TWO_PI;
else
freqspace1[(w*y+x)] = 0;
#else
if(fx||fy)
{
save = freqspace1[(w*y+x)][0];
- freqspace1[(w*y+x)][0] = -(fx * freqspace1[(w*y+x)][1] + fy * freqspace2[(w*y+x)][1]) / (fx*fx + fy*fy) / TWO_PI;
- freqspace1[(w*y+x)][1] = (fx * save + fy * freqspace2[(w*y+x)][0]) / (fx*fx + fy*fy) / TWO_PI;
+ freqspace1[(w*y+x)][0] = -(ffx * freqspace1[(w*y+x)][1] + ffy * freqspace2[(w*y+x)][1]) / (ffx*fx + ffy*fy) / TWO_PI;
+ freqspace1[(w*y+x)][1] = (ffx * save + ffy * freqspace2[(w*y+x)][0]) / (ffx*fx + ffy*fy) / TWO_PI;
}
else
{
imgspace1[(w*y+x)][0] = (v - 128.0) / 127.0;
imgspace1[(w*y+x)][1] = 0;
#endif
+ if(v < 1)
+ v = 1; /* do not write alpha zero */
map[(w*y+x)*4+3] = floor(v + 0.5);
}
int i, j;
double *img_reduced = malloc(w*h * sizeof(double));
static const double filter[3][3] = { /* filter to derive one component */
- { -1, 0, 1 },
- { -2, 0, 2 },
- { -1, 0, 1 }
+ { -3, 0, 3 },
+ { -10, 0, 10 },
+ { -3, 0, 3 }
};
- static const double filter_mult = 0.125;
+ static const double filter_mult = 0.03125;
for(y = 0; y < h; ++y)
for(x = 0; x < w; ++x)
break;
}
img_reduced[(w*y+x)] = (v - 128.0) / 127.0;
+ if(v < 1)
+ v = 1; /* do not write alpha zero */
map[(w*y+x)*4+3] = floor(v + 0.5);
}