Changeset 1883 for trunk/psModules/src/pmSubtractBias.c
- Timestamp:
- Sep 24, 2004, 12:33:17 PM (22 years ago)
- File:
-
- 1 edited
-
trunk/psModules/src/pmSubtractBias.c (modified) (15 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/pmSubtractBias.c
r1880 r1883 8 8 * @author George Gusciora, MHPCC 9 9 * 10 * @version $Revision: 1. 4$ $Name: not supported by cvs2svn $11 * @date $Date: 2004-09-24 2 1:05:00$10 * @version $Revision: 1.5 $ $Name: not supported by cvs2svn $ 11 * @date $Date: 2004-09-24 22:33:17 $ 12 12 * 13 13 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 22 22 #include<math.h> 23 23 #include "pslib.h" 24 25 26 //#include "pmSubtractBias.h" 27 // PM_OVERSCAN_NONE, ///< No overscan subtraction 28 // PM_OVERSCAN_ROWS, ///< Subtract rows 29 // PM_OVERSCAN_COLUMNS, ///< Subtract columns 30 // PM_OVERSCAN_ALL ///< Subtract the statistic of all pixels in overscan region 31 //} pmOverScanAxis; 32 //typedef enum { 33 // PM_FIT_NONE, ///< No fit 34 // PM_FIT_POLYNOMIAL, ///< Fit polynomial 35 // PM_FIT_SPLINE ///< Fit cubic splines 24 #include "pmSubtractBias.h" 36 25 37 26 #define PM_SUBTRACT_BIAS_POLYNOMIAL_ORDER 2 … … 73 62 // XXX: Is there already a function which does this? 74 63 psImage *p_psImageSubtractScalar(psImage *image, 75 float *scalar)64 float scalar) 76 65 { 77 66 int i; … … 80 69 for (i=0;i<image->numRows;i++) { 81 70 for (j=0;j<image->numCols;j++) { 82 image->data.F32[i][j]-= scalar;71 (image->data.F32[i][j])-= scalar; 83 72 } 84 73 } … … 95 84 { 96 85 int numOptions = 0; 97 psStatsOptions opt ;86 psStatsOptions opt = 0; 98 87 99 88 if (stat->options & PS_STAT_SAMPLE_MEAN) { … … 137 126 } 138 127 128 if (numOptions == 0) { 129 // XXX: psErrorMsg() 130 } 139 131 if (numOptions != 1) { 140 \\ XXX: 141 Generate warning message. 142 } 143 132 // XXX:Generate warning message. 133 } 144 134 return(opt); 145 135 } 146 136 147 137 // XXX: Must scale the overscan vector 148 psVector *ScaleOverscanVector(overscanVector, 149 (in->image)->numCols, 138 139 psVector *ScaleOverscanVector(psVector *overscanVector, 140 int n, 150 141 pmFit fit) 151 142 { 152 143 return(overscanVector); 153 144 } 154 155 145 156 146 psReadout *pmSubtractBias(psReadout *in, … … 158 148 const psList *overscans, 159 149 pmOverscanAxis overScanAxis, 160 constpsStats *stat,150 psStats *stat, 161 151 int nBin, 162 152 pmFit fit, … … 165 155 int i; 166 156 int j; 167 int nBin; 168 int numBins; 157 int numBins = 0; 169 158 static psVector *overscanVector = NULL; 170 159 psVector *tmpRow = NULL; 171 160 psVector *tmpCol = NULL; 172 psVector *tmpMask = NULL;173 161 psVector *myBin = NULL; 174 162 psVector *binVec = NULL; 175 psList *tmpOverscan = NULL; 163 psListElem *tmpOverscan = NULL; 164 double statValue; 165 psImage *myOverscanImage = NULL; 166 psPolynomial1D *myPoly; 167 psSpline1D *mySpline; 176 168 177 169 if (in == NULL) { … … 208 200 if (overScanAxis == PM_OVERSCAN_ALL) { 209 201 psImageStats(stat, in->image, in->mask, 0xffffffff); 210 p_psImageSubtractScalar(in->image, stat->value); 202 p_psGetStatValue(stat, &statValue); 203 p_psImageSubtractScalar(in->image, statValue); 211 204 return(in); 212 205 } … … 215 208 // having to copy every element in that vector? 216 209 217 // XXX: If we get here, do we know that overScanAxis == PM_OVERSCAN_ROW 210 // XXX: If we get here, do we know that overScanAxis == PM_OVERSCAN_ROWS 218 211 // or PM_OVERSCAN_COL? 219 212 220 213 // XXX: How to use multiple overscans? Currently, only the first is used. 221 if ((overScanAxis == PM_OVERSCAN_ROW ) || (overScanAxis == PM_OVERSCAN_COL)) {222 myOverscanImage = (psImage *) overscans->data;223 224 if (overScanAxis == PM_OVERSCAN_ROW ) {225 overscanVector = psVectorAlloc( (myOverscanImage->image)->numCols, PS_TYPE_F32);214 if ((overScanAxis == PM_OVERSCAN_ROWS) || (overScanAxis == PM_OVERSCAN_COLUMNS)) { 215 myOverscanImage = (psImage *) ((overscans->head)->data); 216 217 if (overScanAxis == PM_OVERSCAN_ROWS) { 218 overscanVector = psVectorAlloc(myOverscanImage->numCols, PS_TYPE_F32); 226 219 for (i=0;i<overscanVector->n;i++) { 227 220 overscanVector->data.F32[i] = 0.0; 228 221 } 229 222 tmpRow = psVectorAlloc((in->image)->numCols, PS_TYPE_F32); 230 tmpMask = psVectorAlloc((in->image)->numCols, PS_TYPE_U8); 231 232 tmpOverscan = (psList *) overscans; 223 224 tmpOverscan = (psListElem *) overscans->head; 233 225 while (tmpOverscan) { 234 226 myOverscanImage = (psImage *) tmpOverscan->data; 235 for (i=0;i<(myOverscanImage->image)->numCols;i++) { 236 for (j=0;j<(myOverscanImage->image)->numRows;j++) { 237 tmpRow->data.F32[j] = (myOverscanImage->image)->data.F32[i][j]; 238 tmpMask->data.U8[j] = (myOverscanImage->mask)->data.U8[i][j]; 227 for (i=0;i<myOverscanImage->numCols;i++) { 228 for (j=0;j<myOverscanImage->numRows;j++) { 229 tmpRow->data.F32[j] = myOverscanImage->data.F32[i][j]; 239 230 } 240 stat = psVectorStats(stat, tmpRow, tmpMask, 0xffffffff);241 overscanVector->data.F32[i] = stat->value;242 }243 // tmpOverscan = tmpOverscan->next; 244 tmpOverscan = NULL: 245 }246 247 psFree(tmpRow);248 psFree(tmp Mask);231 stat = psVectorStats(stat, tmpRow, NULL, 0xffffffff); 232 p_psGetStatValue(stat, &statValue); 233 overscanVector->data.F32[i] = statValue; 234 235 } 236 // tmpOverscan = tmpOverscan->next; 237 tmpOverscan = NULL; 238 } 239 psFree(tmpRow); 249 240 ScaleOverscanVector(overscanVector, (in->image)->numCols, fit); 250 241 } 251 if (overScanAxis == PM_OVERSCAN_COL ) {252 overscanVector = psVectorAlloc( (myOverscanImage->image)->numRows, PS_TYPE_F32);242 if (overScanAxis == PM_OVERSCAN_COLUMNS) { 243 overscanVector = psVectorAlloc(myOverscanImage->numRows, PS_TYPE_F32); 253 244 for (i=0;i<overscanVector->n;i++) { 254 245 overscanVector->data.F32[i] = 0.0; 255 246 } 256 tmpcol = psVectorAlloc((in->image)->numRows, PS_TYPE_F32); 257 tmpMask = psVectorAlloc((in->image)->nuRows, PS_TYPE_U8); 258 259 tmpOverscan = (psList *) overscans; 247 tmpCol = psVectorAlloc((in->image)->numRows, PS_TYPE_F32); 248 249 tmpOverscan = (psListElem *) overscans->head; 260 250 while (tmpOverscan) { 261 for (i=0;i<(myOverscanImage->image)->numRows;i++) { 262 for (j=0;j<(myOverscanImage->image)->numCols;j++) { 263 tmpRow->data.F32[j] = (myOverscanImage->image)->data.F32[i][j]; 264 tmpMask->data.U8[j] = (myOverscanImage->mask)->data.U8[i][j]; 251 for (i=0;i<myOverscanImage->numRows;i++) { 252 for (j=0;j<myOverscanImage->numCols;j++) { 253 tmpRow->data.F32[j] = myOverscanImage->data.F32[i][j]; 265 254 } 266 stat = psVectorStats(stat, tmpRow, tmpMask, 0xffffffff); 267 overscanVector->data.F32[i] = stat->value; 255 stat = psVectorStats(stat, tmpRow, NULL, 0xffffffff); 256 p_psGetStatValue(stat, &statValue); 257 overscanVector->data.F32[i] = statValue; 268 258 } 269 259 // tmpOverscan = tmpOverscan->next; 270 tmpOverscan = NULL: 271 } 272 psFree(tmpCol); 273 psFree(tmpMask); 260 tmpOverscan = NULL; 261 } 262 psFree(tmpCol); 274 263 ScaleOverscanVector(overscanVector, (in->image)->numRows, fit); 275 264 } … … 277 266 if ((nBin > 0) && (nBin < overscanVector->n)) { 278 267 numBins = 1+((overscanVector->n)/nBin); 279 psVector *myBin = psVectorAlloc(numBins, PS_TYPE_F32);268 myBin = psVectorAlloc(numBins, PS_TYPE_F32); 280 269 binVec = psVectorAlloc(nBin, PS_TYPE_F32); 281 270 … … 292 281 } 293 282 stat = psVectorStats(stat, binVec, NULL, 0); 294 myBin->data.F32[i] = stat->value; 283 p_psGetStatValue(stat, &statValue); 284 myBin->data.F32[i] = statValue; 285 295 286 } 296 287 // Change the effective size of overscanVector. … … 314 305 315 306 } else if (fit == PM_FIT_SPLINE) { 316 mySpline = (psS Pline1D *) fitSpec;307 mySpline = (psSpline1D *) fitSpec; 317 308 // XXX: What is the point of doing this? 318 309 } 319 310 } 320 311 321 if (overScanAxis == PM_OVERSCAN_ROW ) {312 if (overScanAxis == PM_OVERSCAN_ROWS) { 322 313 for (i=0;i<(in->image)->numCols;i++) { 323 314 for (j=0;j<(in->image)->numRows;j++) { … … 327 318 } 328 319 329 if (overScanAxis == PM_OVERSCAN_COLUMN ) {320 if (overScanAxis == PM_OVERSCAN_COLUMNS) { 330 321 for (i=0;i<(in->image)->numRows;i++) { 331 322 for (j=0;j<(in->image)->numCols;j++) { … … 343 334 344 335 // XXX: psErrorMsg(): Shouldn't get here? 345 } 346 336 return(in); 337 } 338 339
Note:
See TracChangeset
for help on using the changeset viewer.
