Changeset 8935 for trunk/psModules/src/camera/pmFPA_JPEG.c
- Timestamp:
- Sep 25, 2006, 10:23:10 AM (20 years ago)
- File:
-
- 1 edited
-
trunk/psModules/src/camera/pmFPA_JPEG.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/camera/pmFPA_JPEG.c
r8848 r8935 5 5 * @author EAM, IfA 6 6 * 7 * @version $Revision: 1. 8$ $Name: not supported by cvs2svn $8 * @date $Date: 2006-09-2 0 02:36:36$7 * @version $Revision: 1.9 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2006-09-25 20:23:10 $ 9 9 * 10 10 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 124 124 PS_ASSERT_PTR_NON_NULL(file, false); 125 125 126 char *name, *mode, *word, *mapname; 127 psArray *range; 128 psImageJpegColormap *map; 126 switch (file->type) { 127 case PM_FPA_FILE_JPEG: { 128 // XXX we need to decide where the scale will come from in the long term 129 psRandom *rng = psRandomAlloc(PS_RANDOM_TAUS, 0); 130 psStats *stats = psImageBackground(readout->image, NULL, 0, 0.25, 0.75, 10000, rng); 131 psFree(rng); 129 132 130 switch (file->type) { 131 case PM_FPA_FILE_JPEG: 133 if (!isfinite(stats->robustMedian) || !isfinite(stats->robustUQ) || !isfinite(stats->robustLQ)) { 134 psError(PS_ERR_UNKNOWN, false, "Unable to measure statistics for image.\n"); 135 psFree(stats); 136 return false; 137 } 138 float delta = stats->robustUQ - stats->robustLQ; // Inter-quartile range 139 float min, max; // Minimum and maximum for stretch 132 140 133 name = pmFPAfileNameFromRule (file->filerule, file, view); 141 psString mode = pmFPAfileNameFromRule (file->extrule, file, view); 142 psString word = pmFPAfileNameFromRule (file->extxtra, file, view); 143 psArray *range = psStringSplitArray (word, ":", false); 134 144 135 mapname = pmFPAfileNameFromRule (file->filextra, file, view); 136 map = psImageJpegColormapSet (NULL, mapname); 137 if (!map) { 138 map = psImageJpegColormapSet (NULL, "-greyscale"); 145 if (!strcasecmp (mode, "RANGE") && range) { 146 float fmin = atof(range->data[0]); 147 float fmax = atof(range->data[1]); 148 min = stats->robustMedian + fmin*delta; 149 max = stats->robustMedian + fmax*delta; 150 } else if (!strcasecmp (mode, "FRACTION")) { 151 float fmin = atof(range->data[0]); 152 float fmax = atof(range->data[1]); 153 min = fmin*stats->robustMedian; 154 max = fmax*stats->robustMedian; 155 } else { 156 min = stats->robustMedian - 3*delta; 157 max = stats->robustMedian + 6*delta; 158 } 159 psFree(mode); 160 psFree(word); 161 psFree(range); 162 psFree(stats); 163 164 if (!isfinite(min) || !isfinite(max)) { 165 psError(PS_ERR_UNKNOWN, true, "The stretch parameters are not both finite.\n"); 166 return false; 167 } 168 169 psString name = pmFPAfileNameFromRule (file->filerule, file, view); 170 psString mapname = pmFPAfileNameFromRule (file->filextra, file, view); 171 psImageJpegColormap *map = psImageJpegColormapSet (NULL, mapname); 172 psFree(mapname); 173 if (!map) { 174 map = psImageJpegColormapSet (NULL, "-greyscale"); 175 } 176 177 psImageJpeg (map, readout->image, name, min, max); 178 psFree(name); 179 psFree(map); 180 181 return true; 139 182 } 140 141 mode = pmFPAfileNameFromRule (file->extrule, file, view);142 word = pmFPAfileNameFromRule (file->extxtra, file, view);143 range = psStringSplitArray (word, ":", false);144 145 // XXX we need to decide where the scale will come from in the long term146 psRandom *rng = psRandomAlloc(PS_RANDOM_TAUS, 0);147 psStats *stats = psImageBackground(readout->image, NULL, 0, 0.25, 0.75, 10000, rng);148 float delta = stats->robustUQ - stats->robustLQ;149 float min = stats->robustMedian - 3*delta;150 float max = stats->robustMedian + 6*delta;151 if (!strcasecmp (mode, "RANGE") && range) {152 float fmin = atof(range->data[0]);153 float fmax = atof(range->data[1]);154 min = stats->robustMedian + fmin*delta;155 max = stats->robustMedian + fmax*delta;156 }157 if (!strcasecmp (mode, "FRACTION")) {158 float fmin = atof(range->data[0]);159 float fmax = atof(range->data[1]);160 min = fmin*stats->robustMedian;161 max = fmax*stats->robustMedian;162 }163 psImageJpeg (map, readout->image, name, min, max);164 165 psFree(name);166 psFree(mapname);167 psFree(map);168 psFree(mode);169 psFree(word);170 psFree(range);171 psFree(rng);172 psFree(stats);173 174 return true;175 176 183 default: 177 184 fprintf (stderr, "warning: type mismatch\n");
Note:
See TracChangeset
for help on using the changeset viewer.
