Changeset 5516 for trunk/psModules/src/detrend/pmFlatField.c
- Timestamp:
- Nov 15, 2005, 10:09:03 AM (20 years ago)
- File:
-
- 1 edited
-
trunk/psModules/src/detrend/pmFlatField.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/detrend/pmFlatField.c
r5435 r5516 18 18 * @author Ross Harman, MHPCC 19 19 * 20 * @version $Revision: 1. 2$ $Name: not supported by cvs2svn $21 * @date $Date: 2005-1 0-20 23:06:24$20 * @version $Revision: 1.3 $ $Name: not supported by cvs2svn $ 21 * @date $Date: 2005-11-15 20:09:03 $ 22 22 * 23 23 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 36 36 #include "pmMaskBadPixels.h" 37 37 #include "pmFlatFieldErrors.h" 38 #include "pmSubtractBias.h" 38 39 39 40 … … 42 43 const pmReadout *flat) 43 44 { 45 // XXX: Use the proper image and readout asserts. 46 PS_ASSERT_PTR_NON_NULL(in, true); 47 PS_ASSERT_PTR_NON_NULL(in->image, false); 48 PS_ASSERT_PTR_NON_NULL(in->mask, false); 49 PS_ASSERT_PTR_NON_NULL(flat, false); 50 PS_ASSERT_PTR_NON_NULL(flat->image, false); 51 if (in == NULL) 52 printf("XXX: NULL\n"); 53 44 54 // XXX: Not sure if this is correct. Must consult with IfA. 45 55 PS_ASSERT_PTR_NON_NULL(in->mask, false); 56 57 PS_WARN_PTR_NON_NULL(in->parent); 58 if (in->parent != NULL) { 59 PS_WARN_PTR_NON_NULL(in->parent->concepts); 60 } 46 61 int i = 0; 47 62 int j = 0; … … 51 66 psElemType flatType; 52 67 psElemType maskType; 53 psImage *inImage = NULL;54 68 psImage *inMask = NULL; 55 69 psImage *flatImage = NULL; 56 70 57 58 // Check for nulls 59 if (in == NULL) { 60 return true; // Readout might have data in it 61 } else if(flat==NULL) { 62 psError( PS_ERR_BAD_PARAMETER_NULL, true, 63 PS_ERRORTEXT_pmFlatField_NULL_FLAT_READOUT); 64 return false; 65 } 66 67 inImage = in->image; 71 // 72 // Determine trimmed image from metadata. 73 // 74 psImage *trimmedImg = p_psDetermineTrimmedImage(in); 68 75 flatImage = flat->image; 69 if (inImage == NULL) {70 psError( PS_ERR_BAD_PARAMETER_NULL, true,71 PS_ERRORTEXT_pmFlatField_NULL_INPUT_IMAGE);72 return false;73 } else if(flatImage == NULL) {74 psError( PS_ERR_BAD_PARAMETER_NULL, true,75 PS_ERRORTEXT_pmFlatField_NULL_FLAT_IMAGE);76 return false;77 }78 76 inMask = in->mask; 79 77 80 78 // Check input image and its mask are not larger than flat image 81 79 82 if (inImage->numRows>flatImage->numRows || inImage->numCols>flatImage->numCols) { 80 if (trimmedImg == NULL) 81 printf("XXX: 00\n"); 82 if (flatImage == NULL) 83 printf("XXX 01\n"); 84 85 if (trimmedImg->numRows>flatImage->numRows || trimmedImg->numCols>flatImage->numCols) { 83 86 psError( PS_ERR_BAD_PARAMETER_SIZE, true, 84 87 PS_ERRORTEXT_pmFlatField_SIZE_INPUT_IMAGE, 85 inImage->numRows, inImage->numCols, flatImage->numRows, flatImage->numCols);88 trimmedImg->numRows, trimmedImg->numCols, flatImage->numRows, flatImage->numCols); 86 89 return false; 87 90 } … … 94 97 95 98 // Determine total offset based on image offset with chip offset 96 totOffCol = inImage->col0 + in->col0;97 totOffRow = inImage->row0 + in->row0;99 totOffCol = trimmedImg->col0 + in->col0; 100 totOffRow = trimmedImg->row0 + in->row0; 98 101 99 102 // Check that offsets are within image limits … … 103 106 totOffRow, totOffCol, flatImage->numRows, flatImage->numCols); 104 107 return false; 105 } else if(totOffRow>= inImage->numRows || totOffCol>=inImage->numCols) {108 } else if(totOffRow>=trimmedImg->numRows || totOffCol>=trimmedImg->numCols) { 106 109 psError( PS_ERR_BAD_PARAMETER_SIZE, true, 107 110 PS_ERRORTEXT_pmFlatField_OFFSET_INPUT_IMAGE, 108 totOffRow, totOffCol, inImage->numRows, inImage->numCols);111 totOffRow, totOffCol, trimmedImg->numRows, trimmedImg->numCols); 109 112 return false; 110 113 } else if(totOffRow>=inMask->numRows || totOffCol>=inMask->numCols) { … … 116 119 117 120 // Check for incorrect types 118 inType = inImage->type.type;121 inType = trimmedImg->type.type; 119 122 flatType = flatImage->type.type; 120 123 maskType = inMask->type.type; … … 145 148 case PS_TYPE_##TYPE: \ 146 149 /* Per Eugene's request, use two sets of loops: first to fill mask, second to avoid div with bad pix */ \ 147 for(j = totOffRow; j < inImage->numRows; j++) { \148 for(i = totOffCol; i < inImage->numCols; i++) { \150 for(j = totOffRow; j < trimmedImg->numRows; j++) { \ 151 for(i = totOffCol; i < trimmedImg->numCols; i++) { \ 149 152 if(flatImage->data.TYPE[j][i] <= 0.0) { \ 150 153 /* Negative or zero flat pixels shall be masked in input image as PM_MASK_FLAT */ \ … … 154 157 } \ 155 158 } \ 156 for(j = totOffRow; j < inImage->numRows; j++) { \157 for(i = totOffCol; i < inImage->numCols; i++) { \159 for(j = totOffRow; j < trimmedImg->numRows; j++) { \ 160 for(i = totOffCol; i < trimmedImg->numCols; i++) { \ 158 161 if(!inMask->data.PS_TYPE_MASK_DATA[j][i]) { \ 159 162 /* Module shall divide the input image by the flat-fielded image */ \ 160 inImage->data.TYPE[j][i] /= flatImage->data.TYPE[j][i]; \163 trimmedImg->data.TYPE[j][i] /= flatImage->data.TYPE[j][i]; \ 161 164 } \ 162 165 } \
Note:
See TracChangeset
for help on using the changeset viewer.
