Mercurial > hg > wm
comparison Meerwald/kim_common.c @ 0:be303a3f5ea8
import
| author | Peter Meerwald <pmeerw@cosy.sbg.ac.at> |
|---|---|
| date | Sun, 12 Aug 2007 13:14:34 +0200 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:be303a3f5ea8 |
|---|---|
| 1 #include "wm.h" | |
| 2 #include "kim_common.h" | |
| 3 | |
| 4 | |
| 5 // find the largest absolute coefficient of a subband | |
| 6 double find_subband_largest_coeff(Image_tree s, int subband, int verbose) { | |
| 7 int i, j; | |
| 8 double max; | |
| 9 | |
| 10 max = 0.0; | |
| 11 for (i = 5; i < s->image->height-5; i++) | |
| 12 for (j = 5; j < s->image->width-5; j++) { | |
| 13 double coeff; | |
| 14 | |
| 15 coeff = fabs(get_pixel(s->image, i, j)); | |
| 16 if (coeff > max) | |
| 17 max = coeff; | |
| 18 } | |
| 19 | |
| 20 if (verbose > 8) | |
| 21 fprintf(stderr, " subband %f\n", max); | |
| 22 | |
| 23 return max; | |
| 24 } | |
| 25 | |
| 26 // find largest absolute coefficient of the detail subbands (LH, HL, HH) of | |
| 27 // a decomposition level | |
| 28 double find_level_largest_coeff(Image_tree p, int verbose) { | |
| 29 double h, v, d; | |
| 30 | |
| 31 h = find_subband_largest_coeff(p->horizontal, HORIZONTAL, verbose); | |
| 32 v = find_subband_largest_coeff(p->vertical, VERTICAL, verbose); | |
| 33 d = find_subband_largest_coeff(p->diagonal, DIAGONAL, verbose); | |
| 34 | |
| 35 return MAX(h, MAX(v, d)); | |
| 36 } | |
| 37 | |
| 38 // calculate the significance threshold given the maximum absolute | |
| 39 // coefficient at a decomposition level | |
| 40 double calc_level_threshold(double max_coeff, int verbose) { | |
| 41 double threshold; | |
| 42 | |
| 43 threshold = pow(2.0, floor(log(max_coeff) / log(2.0)) - 1.0); | |
| 44 | |
| 45 if (verbose > 7) | |
| 46 fprintf(stderr, " max %f, threshold %f\n", max_coeff, threshold); | |
| 47 | |
| 48 return threshold; | |
| 49 } | |
| 50 | |
| 51 // calculate an appropriate embedding strength for a given decomposition level | |
| 52 // and a base alpha strength | |
| 53 double calc_level_alpha_detail(double alpha, int maxlevels, int level, int verbose) { | |
| 54 double level_alpha; | |
| 55 | |
| 56 level_alpha = alpha / pow(2.0, level - 1); | |
| 57 | |
| 58 return level_alpha; | |
| 59 } | |
| 60 |
