Changeset 41891 for trunk/Ohana/src/opihi/cmd.data/medimage_calc.c
- Timestamp:
- Nov 4, 2021, 6:02:11 PM (5 years ago)
- Location:
- trunk/Ohana
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
src/opihi/cmd.data/medimage_calc.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana
- Property svn:mergeinfo changed
/branches/eam_branches/ipp-dev-20210817/Ohana (added) merged: 41800,41802,41818-41820,41824,41830,41835,41850,41869,41874-41875,41886
- Property svn:mergeinfo changed
-
trunk/Ohana/src/opihi/cmd.data/medimage_calc.c
r41341 r41891 19 19 static float *irls_testval = NULL; 20 20 21 enum {CALC_MEDIAN, CALC_MEAN, CALC_IRLS, CALC_WTMEAN };21 enum {CALC_MEDIAN, CALC_MEAN, CALC_IRLS, CALC_WTMEAN, CALC_INNER_FRACTION}; 22 22 23 23 int medimage_calc (int argc, char **argv) { … … 39 39 } 40 40 41 float minRange = NAN; 42 float maxRange = NAN; 43 41 44 int mode = CALC_MEDIAN; 42 45 if ((N = get_argument (argc, argv, "-mean"))) { … … 45 48 } 46 49 if ((N = get_argument (argc, argv, "-irls"))) { 47 if (mode != CALC_MEDIAN) { gprint (GP_ERR, "supply only one of -mean, -median, -irls, -wtmean\n"); return FALSE; }50 if (mode != CALC_MEDIAN) goto choose_one; 48 51 mode = CALC_IRLS; 49 52 remove_argument (N, &argc, argv); 50 53 } 51 54 if ((N = get_argument (argc, argv, "-wtmean"))) { 52 if (mode != CALC_MEDIAN) { gprint (GP_ERR, "supply only one of -mean, -median, -irls, -wtmean\n"); return FALSE; }55 if (mode != CALC_MEDIAN) goto choose_one; 53 56 mode = CALC_WTMEAN; 54 57 remove_argument (N, &argc, argv); 55 58 } 59 if ((N = get_argument (argc, argv, "-inner-fraction"))) { 60 if (mode != CALC_MEDIAN) goto choose_one; 61 if (argc < N + 3) goto fraction_options; 62 mode = CALC_INNER_FRACTION; 63 remove_argument (N, &argc, argv); 64 minRange = atof(argv[N]); 65 if ((minRange < 0.0) || (minRange > 1.0)) goto fraction_options; 66 remove_argument (N, &argc, argv); 67 maxRange = atof(argv[N]); 68 if ((maxRange < 0.0) || (maxRange > 1.0)) goto fraction_options; 69 if (maxRange <= minRange) goto fraction_options; 70 remove_argument (N, &argc, argv); 71 } 56 72 if ((N = get_argument (argc, argv, "-median"))) { 57 if (mode != CALC_MEDIAN) { gprint (GP_ERR, "supply only one of -mean, -median, -irls, -wtmean\n"); return FALSE; }73 if (mode != CALC_MEDIAN) goto choose_one; 58 74 mode = CALC_MEDIAN; 59 75 remove_argument (N, &argc, argv); … … 157 173 } 158 174 break; 175 case CALC_INNER_FRACTION: 176 fsort (val, N); 177 int Ns = MIN(MAX(0, minRange * N),N); // e.g., 0.1 * 50 = 5 178 int Ne = MIN(MAX(0, maxRange * N),N); // e.g., 0.9 * 50 = 45 179 int Npt = Ne - Ns; 180 181 float sum = 0.0; 182 for (n = Ns; n < Ne; n++) { 183 sum += val[n]; 184 } 185 outvalue[Npix] = sum / (float) Npt; 186 187 if (varvalue) { 188 float sum = 0.0; 189 for (n = Ns; n < Ne; n++) { 190 sum += SQ(val[n] - outvalue[Npix]); 191 } 192 // variance on the mean (stdev / sqrt(N))^2 193 varvalue[Npix] = sum / (Npt - 1) / Npt; 194 } 195 break; 159 196 case CALC_MEAN: { 160 197 float sum = 0.0; … … 195 232 irls_free(); 196 233 return TRUE; 234 235 choose_one: 236 gprint (GP_ERR, "supply only one of -mean, -median, -irls, -wtmean, -inner-fraction\n"); 237 return FALSE; 238 239 fraction_options: 240 gprint (GP_ERR, "USE: -inner-fraction (min) (max) : min & max in range 0.0 to 1.0\n"); 241 return FALSE; 197 242 } 198 243
Note:
See TracChangeset
for help on using the changeset viewer.
