Changeset 14923 for trunk/psLib/src/imageops/psImageBinning.c
- Timestamp:
- Sep 20, 2007, 1:53:48 PM (19 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/imageops/psImageBinning.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/imageops/psImageBinning.c
r12699 r14923 8 8 * @author Eugene Magnier, IfA 9 9 * 10 * @version $Revision: 1. 2$ $Name: not supported by cvs2svn $11 * @date $Date: 2007-0 3-31 02:59:41$10 * @version $Revision: 1.3 $ $Name: not supported by cvs2svn $ 11 * @date $Date: 2007-09-20 23:53:46 $ 12 12 * 13 13 * Copyright 2007 Institute for Astronomy, University of Hawaii … … 44 44 assert (binning->nYbin > 0); 45 45 46 // force nXruff*nXbin > nXfine 46 47 binning->nXruff = binning->nXfine / binning->nXbin; 47 48 if (binning->nXfine % binning->nXbin) binning->nXruff ++; 48 49 50 // force nYruff*nYbin > nYfine 49 51 binning->nYruff = binning->nYfine / binning->nYbin; 50 52 if (binning->nYfine % binning->nYbin) binning->nYruff ++; … … 56 58 break; 57 59 case PS_IMAGE_BINNING_CENTER: 58 binning->nXoff = ( (binning->nXruff * binning->nXbin) %binning->nXfine) / 2;59 binning->nYoff = ( (binning->nYruff * binning->nYbin) %binning->nYfine) / 2;60 binning->nXoff = (binning->nXruff * binning->nXbin - binning->nXfine) / 2; 61 binning->nYoff = (binning->nYruff * binning->nYbin - binning->nYfine) / 2; 60 62 break; 61 63 case PS_IMAGE_BINNING_RIGHT: 62 binning->nXoff = ( (binning->nXruff * binning->nXbin) %binning->nXfine);63 binning->nYoff = ( (binning->nYruff * binning->nYbin) %binning->nYfine);64 binning->nXoff = (binning->nXruff * binning->nXbin - binning->nXfine); 65 binning->nYoff = (binning->nYruff * binning->nYbin - binning->nYfine); 64 66 break; 65 67 default: … … 78 80 void psImageBinningSetSkip(psImageBinning *binning, psImage *image) { 79 81 80 binning->nXskip = image->col0 - binning->nXoff; 81 binning->nYskip = image->row0 - binning->nYoff; 82 if (image != NULL) { 83 binning->nXskip = image->col0 - binning->nXoff; 84 binning->nYskip = image->row0 - binning->nYoff; 85 } else { 86 binning->nXskip = 0 - binning->nXoff; 87 binning->nYskip = 0 - binning->nYoff; 88 } 82 89 return; 83 90 } … … 90 97 assert (binning->nYruff > 0); 91 98 99 // force nXruff*nXbin > nXfine 92 100 binning->nXbin = binning->nXfine / binning->nXruff; 93 101 if (binning->nXfine % binning->nXruff) binning->nXbin ++; 94 102 103 // force nYruff*nYbin > nYfine 95 104 binning->nYbin = binning->nYfine / binning->nYruff; 96 105 if (binning->nYfine % binning->nYruff) binning->nYbin ++; … … 102 111 break; 103 112 case PS_IMAGE_BINNING_CENTER: 104 binning->nXoff = (binning->nX fine % binning->nXbin) / 2;105 binning->nYoff = (binning->nY fine % binning->nYbin) / 2;113 binning->nXoff = (binning->nXruff * binning->nXbin - binning->nXfine) / 2; 114 binning->nYoff = (binning->nYruff * binning->nYbin - binning->nYfine) / 2; 106 115 break; 107 116 case PS_IMAGE_BINNING_RIGHT: 108 binning->nXoff = (binning->nX fine % binning->nXbin);109 binning->nYoff = (binning->nY fine % binning->nYbin);117 binning->nXoff = (binning->nXruff * binning->nXbin - binning->nXfine); 118 binning->nYoff = (binning->nYruff * binning->nYbin - binning->nYfine); 110 119 break; 111 120 default: … … 137 146 } 138 147 139 /*** pmFPACopy.c:binRegion had the following logic ***/140 # if (0)141 // Want to include the lower bound: 1 binned by 4 --> 0; 3 binned by 4 --> 0; 4 binned by 4 --> 1142 region->x0 = (int)(region->x0 / xBin);143 region->y0 = (int)(region->y0 / yBin);144 // Want to exclude the upper bound: 4 binned by 4 --> 1; 5 binned by 4 --> 2; 7 binned by 4 --> 2145 region->x1 = (int)((region->x1 + xBin - 1) / xBin);146 region->y1 = (int)((region->y1 + yBin - 1) / yBin);147 # endif148 148 149 /* 150 * dvoMakeCorrUnbin ** OK 151 * psphotImageMedian ** OK? 152 * psphotMagnitudes ** OK 153 * pmFPACopy ** OK 154 * pmConceptsUpdate ** OK 155 * pmFPAMosaic ** OK (needs more use of psImageBinning functions) 156 * psImageUnbin 157 * psImageRebin 158 * ppImageRebinReadout 159 */ 149 // convert the fine coordinate to the ruff coordinate 150 double psImageBinningGetRuffX (const psImageBinning *binning, const double xFine) { 160 151 152 PS_ASSERT_INT_POSITIVE(binning->nXbin, NAN); 153 PS_ASSERT_INT_POSITIVE(binning->nYbin, NAN); 154 PS_ASSERT_INT_LESS_THAN_OR_EQUAL(binning->nXskip, binning->nXbin, NAN); 155 PS_ASSERT_INT_LESS_THAN_OR_EQUAL(binning->nYskip, binning->nYbin, NAN); 156 157 double xRuff = (xFine - binning->nXskip)/binning->nXbin; 158 return xRuff; 159 } 160 double psImageBinningGetRuffY (const psImageBinning *binning, const double yFine) { 161 162 PS_ASSERT_INT_POSITIVE(binning->nXbin, NAN); 163 PS_ASSERT_INT_POSITIVE(binning->nYbin, NAN); 164 PS_ASSERT_INT_LESS_THAN_OR_EQUAL(binning->nXskip, binning->nXbin, NAN); 165 PS_ASSERT_INT_LESS_THAN_OR_EQUAL(binning->nYskip, binning->nYbin, NAN); 166 167 double yRuff = (yFine - binning->nYskip)/binning->nYbin; 168 return yRuff; 169 } 170 171 // convert the ruff coordinate to the fine coordinate 172 double psImageBinningGetFineX (const psImageBinning *binning, const double xRuff) { 173 174 PS_ASSERT_INT_POSITIVE(binning->nXbin, NAN); 175 PS_ASSERT_INT_POSITIVE(binning->nYbin, NAN); 176 PS_ASSERT_INT_LESS_THAN_OR_EQUAL(binning->nXskip, binning->nXbin, NAN); 177 PS_ASSERT_INT_LESS_THAN_OR_EQUAL(binning->nYskip, binning->nYbin, NAN); 178 179 double xFine = xRuff * binning->nXbin + binning->nXskip; 180 return xFine; 181 } 182 double psImageBinningGetFineY (const psImageBinning *binning, const double yRuff) { 183 184 PS_ASSERT_INT_POSITIVE(binning->nXbin, NAN); 185 PS_ASSERT_INT_POSITIVE(binning->nYbin, NAN); 186 PS_ASSERT_INT_LESS_THAN_OR_EQUAL(binning->nXskip, binning->nXbin, NAN); 187 PS_ASSERT_INT_LESS_THAN_OR_EQUAL(binning->nYskip, binning->nYbin, NAN); 188 189 double yFine = yRuff * binning->nYbin + binning->nYskip; 190 return yFine; 191 }
Note:
See TracChangeset
for help on using the changeset viewer.
