|
From: <kin...@us...> - 2004-02-27 18:25:43
|
Update of /cvsroot/teem/teem/src/limn In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9305/limn Modified Files: env.c qn.c Log Message: added a whole bunch more normal quantization methods Index: env.c =================================================================== RCS file: /cvsroot/teem/teem/src/limn/env.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** env.c 27 Feb 2004 16:42:53 -0000 1.6 --- env.c 27 Feb 2004 18:16:50 -0000 1.7 *************** *** 38,98 **** case limnQN16checker: sx = sy = 256; - if (nrrdMaybeAlloc(map, nrrdTypeFloat, 3, 3, sx, sy)) { - sprintf(err, "%s: couldn't alloc output", me); - biffMove(LIMN, err, NRRD); return 1; - } - mapData = map->data; - for (qn=0; qn<=sx*sy-1; qn++) { - limnQNtoV_f[qnMethod](vec, qn); - cb(mapData + 3*qn, vec, data); - } break; case limnQN14checker: sx = sy = 128; - if (nrrdMaybeAlloc(map, nrrdTypeFloat, 3, 3, sx, sy)) { - sprintf(err, "%s: couldn't alloc output", me); - biffMove(LIMN, err, NRRD); return 1; - } - mapData = map->data; - for (qn=0; qn<=sx*sy-1; qn++) { - limnQNtoV_f[qnMethod](vec, qn); - cb(mapData + 3*qn, vec, data); - } break; case limnQN12checker: sx = sy = 64; - if (nrrdMaybeAlloc(map, nrrdTypeFloat, 3, 3, sx, sy)) { - sprintf(err, "%s: couldn't alloc output", me); - biffMove(LIMN, err, NRRD); return 1; - } - mapData = map->data; - for (qn=0; qn<=sx*sy-1; qn++) { - limnQNtoV_f[qnMethod](vec, qn); - cb(mapData + 3*qn, vec, data); - } break; case limnQN10checker: sx = sy = 32; - if (nrrdMaybeAlloc(map, nrrdTypeFloat, 3, 3, sx, sy)) { - sprintf(err, "%s: couldn't alloc output", me); - biffMove(LIMN, err, NRRD); return 1; - } - mapData = map->data; - for (qn=0; qn<=sx*sy-1; qn++) { - limnQNtoV_f[qnMethod](vec, qn); - cb(mapData + 3*qn, vec, data); - } break; case limnQN8checker: sx = sy = 16; ! if (nrrdMaybeAlloc(map, nrrdTypeFloat, 3, 3, sx, sy)) { ! sprintf(err, "%s: couldn't alloc output", me); ! biffMove(LIMN, err, NRRD); return 1; ! } ! mapData = map->data; ! for (qn=0; qn<=sx*sy-1; qn++) { ! limnQNtoV_f[qnMethod](vec, qn); ! cb(mapData + 3*qn, vec, data); ! } break; default: --- 38,69 ---- case limnQN16checker: sx = sy = 256; break; case limnQN14checker: sx = sy = 128; break; case limnQN12checker: sx = sy = 64; break; case limnQN10checker: sx = sy = 32; break; case limnQN8checker: sx = sy = 16; ! break; ! case limnQN15checker: ! sx = 128; ! sy = 256; ! break; ! case limnQN13checker: ! sx = 64; ! sy = 128; ! break; ! case limnQN11checker: ! sx = 32; ! sy = 64; ! break; ! case limnQN9checker: ! sx = 16; ! sy = 32; break; default: *************** *** 100,103 **** --- 71,83 ---- biffAdd(LIMN, err); return 1; } + if (nrrdMaybeAlloc(map, nrrdTypeFloat, 3, 3, sx, sy)) { + sprintf(err, "%s: couldn't alloc output", me); + biffMove(LIMN, err, NRRD); return 1; + } + mapData = map->data; + for (qn=0; qn<=sx*sy-1; qn++) { + limnQNtoV_f[qnMethod](vec, qn); + cb(mapData + 3*qn, vec, data); + } return 0; Index: qn.c =================================================================== RCS file: /cvsroot/teem/teem/src/limn/qn.c,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** qn.c 27 Feb 2004 16:43:04 -0000 1.18 --- qn.c 27 Feb 2004 18:16:50 -0000 1.19 *************** *** 219,240 **** (vec)[2] = z*n - void - _limnQN16checker_QNtoV_f(float *vec, int qn) { - int ui, vi; - double u, v, x, y, z, n; - - /* _16_QtoV(vec, qn); */ - _EVEN_QtoV(8, vec, qn); - } - - void - _limnQN16checker_QNtoV_d(double *vec, int qn) { - int ui, vi; - double u, v, x, y, z, n; - - /* _16_QtoV(vec, qn); */ - _EVEN_QtoV(8, vec, qn); - } - #define _16_VtoQ(vec) \ x = (vec)[0]; \ --- 219,222 ---- *************** *** 260,263 **** --- 242,261 ---- } + void + _limnQN16checker_QNtoV_f(float *vec, int qn) { + int ui, vi; + double u, v, x, y, z, n; + + _EVEN_QtoV(8, vec, qn); + } + + void + _limnQN16checker_QNtoV_d(double *vec, int qn) { + int ui, vi; + double u, v, x, y, z, n; + + _EVEN_QtoV(8, vec, qn); + } + int _limnQN16checker_VtoQN_f(float *vec) { *************** *** 265,272 **** int xi, yi, ui, vi; - /* - _16_VtoQ(vec); - return (vi << 8) | ui; - */ _EVEN_VtoQ(8, vec); } --- 263,266 ---- *************** *** 277,284 **** int xi, yi, ui, vi; - /* - _16_VtoQ(vec); - return (vi << 8) | ui; - */ _EVEN_VtoQ(8, vec); } --- 271,274 ---- *************** *** 286,289 **** --- 276,314 ---- /* ---------------------------------------------------------------- */ + /* 15 bit --> HNB == 7 */ + + #define _ODD_QtoV(HNB, vec, qn) \ + ui = qn & ((1<<HNB)-1); \ + vi = (qn >> HNB) & ((1<<HNB)-1); \ + zi = (qn >> (2*HNB)) & 0x01; \ + u = AIR_AFFINE(-0.5, ui, ((1<<HNB)-1)+0.5, -0.5, 0.5); \ + v = AIR_AFFINE(-0.5, vi, ((1<<HNB)-1)+0.5, -0.5, 0.5); \ + x = u + v; \ + y = u - v; \ + z = 1 - AIR_ABS(x) - AIR_ABS(y); \ + z *= (zi << 1) - 1; \ + n = 1.0/sqrt(x*x + y*y + z*z); \ + vec[0] = x*n; \ + vec[1] = y*n; \ + vec[2] = z*n + + #define _ODD_VtoQ(HNB, vec) \ + x = vec[0]; \ + y = vec[1]; \ + z = vec[2]; \ + L = AIR_ABS(x) + AIR_ABS(y) + AIR_ABS(z); \ + if (!L) { \ + return 0; \ + } \ + x /= L; \ + y /= L; \ + u = x + y; \ + v = x - y; \ + AIR_INDEX(-1, u, 1, (1<<HNB), ui); \ + AIR_INDEX(-1, v, 1, (1<<HNB), vi); \ + zi = (z > 0); \ + return (zi << (2*HNB)) | (vi << HNB) | ui + + void _limnQN15checker_QNtoV_f(float *vec, int qn) { *************** *** 291,307 **** float u, v, x, y, z, n; ! ui = qn & 0x7F; ! vi = (qn >> 7) & 0x7F; ! zi = (qn >> 14) & 0x01; ! u = AIR_AFFINE(-0.5, ui, 127.5, -0.5, 0.5); ! v = AIR_AFFINE(-0.5, vi, 127.5, -0.5, 0.5); ! x = u + v; ! y = u - v; ! z = 1 - AIR_ABS(x) - AIR_ABS(y); ! z *= (zi << 1) - 1; ! n = 1.0/sqrt(x*x + y*y + z*z); ! vec[0] = x*n; ! vec[1] = y*n; ! vec[2] = z*n; } --- 316,328 ---- float u, v, x, y, z, n; ! _ODD_QtoV(7, vec, qn); ! } ! ! void ! _limnQN15checker_QNtoV_d(double *vec, int qn) { ! int ui, vi, zi; ! double u, v, x, y, z, n; ! ! _ODD_QtoV(7, vec, qn); } *************** *** 311,329 **** int ui, vi, zi; ! x = vec[0]; ! y = vec[1]; ! z = vec[2]; ! L = AIR_ABS(x) + AIR_ABS(y) + AIR_ABS(z); ! if (!L) { ! return 0; ! } ! x /= L; ! y /= L; ! u = x + y; ! v = x - y; ! AIR_INDEX(-1, u, 1, 128, ui); ! AIR_INDEX(-1, v, 1, 128, vi); ! zi = (z > 0); ! return (zi << 14) | (vi << 7) | ui; } --- 332,344 ---- int ui, vi, zi; ! _ODD_VtoQ(7, vec); ! } ! ! int ! _limnQN15checker_VtoQN_d(double *vec) { ! double L, u, v, x, y, z; ! int ui, vi, zi; ! ! _ODD_VtoQ(7, vec); } *************** *** 365,368 **** --- 380,417 ---- void + _limnQN13checker_QNtoV_f(float *vec, int qn) { + int ui, vi, zi; + float u, v, x, y, z, n; + + _ODD_QtoV(6, vec, qn); + } + + void + _limnQN13checker_QNtoV_d(double *vec, int qn) { + int ui, vi, zi; + double u, v, x, y, z, n; + + _ODD_QtoV(6, vec, qn); + } + + int + _limnQN13checker_VtoQN_f(float *vec) { + float L, u, v, x, y, z; + int ui, vi, zi; + + _ODD_VtoQ(6, vec); + } + + int + _limnQN13checker_VtoQN_d(double *vec) { + double L, u, v, x, y, z; + int ui, vi, zi; + + _ODD_VtoQ(6, vec); + } + + /* ----------------------------------------------------------- */ + + void _limnQN12checker_QNtoV_f(float *vec, int qn) { int ui, vi; *************** *** 398,401 **** --- 447,585 ---- /* ----------------------------------------------------------- */ + void + _limnQN11checker_QNtoV_f(float *vec, int qn) { + int ui, vi, zi; + float u, v, x, y, z, n; + + _ODD_QtoV(5, vec, qn); + } + + void + _limnQN11checker_QNtoV_d(double *vec, int qn) { + int ui, vi, zi; + double u, v, x, y, z, n; + + _ODD_QtoV(5, vec, qn); + } + + int + _limnQN11checker_VtoQN_f(float *vec) { + float L, u, v, x, y, z; + int ui, vi, zi; + + _ODD_VtoQ(5, vec); + } + + int + _limnQN11checker_VtoQN_d(double *vec) { + double L, u, v, x, y, z; + int ui, vi, zi; + + _ODD_VtoQ(5, vec); + } + + /* ----------------------------------------------------------- */ + + void + _limnQN10checker_QNtoV_f(float *vec, int qn) { + int ui, vi; + double u, v, x, y, z, n; + + _EVEN_QtoV(5, vec, qn); + } + + void + _limnQN10checker_QNtoV_d(double *vec, int qn) { + int ui, vi; + double u, v, x, y, z, n; + + _EVEN_QtoV(5, vec, qn); + } + + int + _limnQN10checker_VtoQN_f(float *vec) { + double L, x, y, z; + int xi, yi, ui, vi; + + _EVEN_VtoQ(5, vec); + } + + int + _limnQN10checker_VtoQN_d(double *vec) { + double L, x, y, z; + int xi, yi, ui, vi; + + _EVEN_VtoQ(5, vec); + } + + /* ----------------------------------------------------------- */ + void + _limnQN9checker_QNtoV_f(float *vec, int qn) { + int ui, vi, zi; + float u, v, x, y, z, n; + + _ODD_QtoV(4, vec, qn); + } + + void + _limnQN9checker_QNtoV_d(double *vec, int qn) { + int ui, vi, zi; + double u, v, x, y, z, n; + + _ODD_QtoV(4, vec, qn); + } + + int + _limnQN9checker_VtoQN_f(float *vec) { + float L, u, v, x, y, z; + int ui, vi, zi; + + _ODD_VtoQ(4, vec); + } + + int + _limnQN9checker_VtoQN_d(double *vec) { + double L, u, v, x, y, z; + int ui, vi, zi; + + _ODD_VtoQ(4, vec); + } + + /* ----------------------------------------------------------- */ + + void + _limnQN8checker_QNtoV_f(float *vec, int qn) { + int ui, vi; + double u, v, x, y, z, n; + + _EVEN_QtoV(4, vec, qn); + } + + void + _limnQN8checker_QNtoV_d(double *vec, int qn) { + int ui, vi; + double u, v, x, y, z, n; + + _EVEN_QtoV(4, vec, qn); + } + + int + _limnQN8checker_VtoQN_f(float *vec) { + double L, x, y, z; + int xi, yi, ui, vi; + + _EVEN_VtoQ(4, vec); + } + + int + _limnQN8checker_VtoQN_d(double *vec) { + double L, x, y, z; + int xi, yi, ui, vi; + + _EVEN_VtoQ(4, vec); + } + + /* ----------------------------------------------------------- */ + void (* limnQNtoV_f[LIMN_QN_MAX+1])(float *, int) = { *************** *** 406,414 **** _limnQN15checker_QNtoV_f, _limnQN14checker_QNtoV_f, _limnQN12checker_QNtoV_f, ! NULL, ! NULL, ! NULL, ! NULL, }; --- 590,599 ---- _limnQN15checker_QNtoV_f, _limnQN14checker_QNtoV_f, + _limnQN13checker_QNtoV_f, _limnQN12checker_QNtoV_f, ! _limnQN11checker_QNtoV_f, ! _limnQN10checker_QNtoV_f, ! _limnQN9checker_QNtoV_f, ! _limnQN8checker_QNtoV_f }; *************** *** 419,429 **** NULL, _limnQN16checker_QNtoV_d, ! NULL, _limnQN14checker_QNtoV_d, _limnQN12checker_QNtoV_d, ! NULL, ! NULL, ! NULL, ! NULL, }; --- 604,615 ---- NULL, _limnQN16checker_QNtoV_d, ! _limnQN15checker_QNtoV_d, _limnQN14checker_QNtoV_d, + _limnQN13checker_QNtoV_d, _limnQN12checker_QNtoV_d, ! _limnQN11checker_QNtoV_d, ! _limnQN10checker_QNtoV_d, ! _limnQN9checker_QNtoV_d, ! _limnQN8checker_QNtoV_d }; *************** *** 436,445 **** _limnQN15checker_VtoQN_f, _limnQN14checker_VtoQN_f, ! NULL, _limnQN12checker_VtoQN_f, ! NULL, ! NULL, ! NULL, ! NULL }; --- 622,631 ---- _limnQN15checker_VtoQN_f, _limnQN14checker_VtoQN_f, ! _limnQN13checker_VtoQN_f, _limnQN12checker_VtoQN_f, ! _limnQN11checker_VtoQN_f, ! _limnQN10checker_VtoQN_f, ! _limnQN9checker_VtoQN_f, ! _limnQN8checker_VtoQN_f }; *************** *** 450,461 **** NULL, _limnQN16checker_VtoQN_d, ! NULL, _limnQN14checker_VtoQN_d, ! NULL, _limnQN12checker_VtoQN_d, ! NULL, ! NULL, ! NULL, ! NULL }; --- 636,647 ---- NULL, _limnQN16checker_VtoQN_d, ! _limnQN15checker_VtoQN_d, _limnQN14checker_VtoQN_d, ! _limnQN13checker_VtoQN_d, _limnQN12checker_VtoQN_d, ! _limnQN11checker_VtoQN_d, ! _limnQN10checker_VtoQN_d, ! _limnQN9checker_VtoQN_d, ! _limnQN8checker_VtoQN_d }; *************** *** 468,471 **** --- 654,658 ---- (1 << 15), (1 << 14), + (1 << 13), (1 << 12), (1 << 11), |