Ignore:
Timestamp:
Apr 16, 2008, 12:11:38 AM (14 years ago)
Author:
Sam Hocevar
Message:
  • Add mode 8, for the very first graphic in the paper.
  • Add results for mode 8 in part0/lena-values.txt.
  • Make the bytecode version use less memory.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • research/2008-displacement/main.c

    r2287 r2288  
    2525
    2626#ifdef BYTECODE
    27 #   define MAXIMAGES 128
     27#   define MAXIMAGES 6
    2828static int slots[MAXIMAGES];
    2929static double slotbuf[MAXIMAGES * MAXWIDTH * MAXHEIGHT];
     
    383383{
    384384    double *floats;
    385     int x, y;
     385    int w, h, x, y;
    386386
    387387#ifdef BYTECODE
     
    390390    if(sys_read(0, &c, 1) != 1)
    391391        sys_exit(-5);
    392     WIDTH = ((int)(unsigned char)c) << 8;
     392    w = ((int)(unsigned char)c) << 8;
    393393    if(sys_read(0, &c, 1) != 1)
    394394        sys_exit(-5);
    395     WIDTH |= (int)(unsigned char)c;
     395    w |= (int)(unsigned char)c;
    396396
    397397    if(sys_read(0, &c, 1) != 1)
    398398        sys_exit(-5);
    399     HEIGHT = ((int)(unsigned char)c) << 8;
     399    h = ((int)(unsigned char)c) << 8;
    400400    if(sys_read(0, &c, 1) != 1)
    401401        sys_exit(-5);
    402     HEIGHT |= (int)(unsigned char)c;
     402    h |= (int)(unsigned char)c;
     403#else
     404    SDL_Surface *tmp, *surface;
     405    uint32_t *pixels;
     406
     407    tmp = IMG_Load(name);
     408    if(!tmp)
     409        return NULL;
     410
     411    w = tmp->w;
     412    h = tmp->h;
     413#endif
     414
     415    WIDTH = w > MAXWIDTH ? MAXWIDTH : w;
     416    HEIGHT = h > MAXHEIGHT ? MAXHEIGHT : h;
    403417
    404418    floats = new();
     
    406420        return NULL;
    407421
    408     for(y = 0; y < HEIGHT; y++)
    409     for(x = 0; x < WIDTH; x++)
     422#ifdef BYTECODE
     423    for(y = 0; y < h; y++)
     424    for(x = 0; x < w; x++)
    410425    {
    411426        if(sys_read(0, &c, 1) != 1)
    412427            sys_exit(-5);
     428        if(x >= WIDTH || y >= HEIGHT)
     429            continue;
    413430        put(floats, x, y, (double)(unsigned char)c / 0xff);
    414     }   
     431    }
    415432#else
    416     SDL_Surface *tmp, *surface;
    417     uint32_t *pixels;
    418 
    419     tmp = IMG_Load(name);
    420     if(!tmp)
    421         return NULL;
    422 
    423     WIDTH = tmp->w > MAXWIDTH ? MAXWIDTH : tmp->w;
    424     HEIGHT = tmp->h > MAXHEIGHT ? MAXHEIGHT : tmp->h;
    425     floats = new();
    426     if(!floats)
    427         return NULL;
    428 
    429433    surface = SDL_CreateRGBSurface(SDL_SWSURFACE, WIDTH, HEIGHT, 32,
    430434                                   0xff0000, 0xff00, 0xff, 0x0);
     
    859863    msg(" -6 <src>           restrained (a,b,c,d) ED kernel analysis on src\n");
    860864    msg(" -7 <src>           restrained displacement study on src\n");
     865    msg(" -8 <src>           displacement values on src\n");
    861866}
    862867
     
    891896        {
    892897            double *dest = ed(src, false, 7, 0,
    893                                 0, 3, 5, 1, 0,
    894                                 0, 0, 0, 0, 0);
     898                                 0, 3, 5, 1, 0,
     899                                 0, 0, 0, 0, 0);
    895900            study(src, dest, 1.2, 0.001, .16, .28);
    896901            del(dest);
     
    10681073        break;
    10691074
     1075        case 8:
     1076        {
     1077            const int STEP = 32;
     1078            double mat[NN][NN];
     1079            double *dest = ed(src, false, 7, 0,
     1080                                 0, 3, 5, 1, 0,
     1081                                 0, 0, 0, 0, 0);
     1082            double *tmp, *tmp2;
     1083            int dx, dy;
     1084
     1085            makegauss(mat, 1.2, 0., 0.);
     1086            tmp = gauss(src, mat);
     1087            for(dy = 0; dy <= STEP; dy++)
     1088            {
     1089                for(dx = 0; dx <= STEP; dx++)
     1090                {
     1091                    double fy = 2. / STEP * (dy - STEP / 2.);
     1092                    double fx = 2. / STEP * (dx - STEP / 2.);
     1093
     1094                    makegauss(mat, 1.2, fx, fy);
     1095                    tmp2 = gauss(dest, mat);
     1096                    msg("%g %g %g\n", fy, fx, 1000. * dist(tmp, tmp2, 1.));
     1097                    del(tmp2);
     1098                }
     1099                msg("\n");
     1100            }
     1101            del(tmp);
     1102            del(dest);
     1103            del(src);
     1104        }
     1105        break;
     1106
    10701107#if 0
    10711108    tmp = ed(src, 7, 0, 0, 3, 5, 1, 0, 0, 0, 0, 0, 0);
     
    10991136
    11001137#if 0
    1101 #   define STEP 32
    1102     dest = ed(src, 7, 0, 0, 3, 5, 1, 0, 0, 0, 0, 0, 0);
    1103     makegauss(mat, 1.2, 0., 0.);
    1104     tmp = gauss(src, mat);
    1105     for(dy = 0; dy < STEP; dy++)
    1106     {
    1107         for(dx = 0; dx < STEP; dx++)
    1108         {
    1109             double fy = 2. / STEP * (dy - STEP / 2.);
    1110             double fx = 2. / STEP * (dx - STEP / 2.);
    1111 
    1112             makegauss(mat, 1.2, fx, fy);
    1113             tmp2 = gauss(dest, mat);
    1114             msg("%g %g %g\n", fy, fx, 1000. * dist(tmp, tmp2, 1.));
    1115             fflush(stdout);
    1116             del(tmp2);
    1117         }
    1118         msg("\n");
    1119     }
    11201138
    11211139    save(dest, "output.bmp");
Note: See TracChangeset for help on using the changeset viewer.