Changeset 26321
- Timestamp:
- Dec 2, 2009, 12:04:51 PM (16 years ago)
- Location:
- branches/pap/psModules/src/imcombine
- Files:
-
- 8 edited
-
. (modified) (1 prop)
-
pmSubtractionEquation.c (modified) (11 diffs)
-
pmSubtractionKernels.c (modified) (1 diff)
-
pmSubtractionMatch.c (modified) (3 diffs)
-
pmSubtractionStamps.c (modified) (4 diffs)
-
pmSubtractionStamps.h (modified) (2 diffs)
-
pmSubtractionVisual.c (modified) (11 diffs)
-
pmSubtractionVisual.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/pap/psModules/src/imcombine
-
Property svn:mergeinfo
set to (toggle deleted branches)
/branches/eam_branches/20091201/psModules/src/imcombine merged eligible /branches/eam_branches/20091113/psModules/src/imcombine 26119-26255
-
Property svn:mergeinfo
set to (toggle deleted branches)
-
branches/pap/psModules/src/imcombine/pmSubtractionEquation.c
r26035 r26321 18 18 19 19 #define USE_WEIGHT // Include weight (1/variance) in equation? 20 #define USE_WINDOW // Include weight (1/variance) in equation? 20 21 21 22 … … 30 31 const psKernel *reference, // Reference image (convolution source) 31 32 const psKernel *weight, // Weight image 33 const psKernel *window, // Window image 32 34 const psArray *convolutions, // Convolutions for each kernel 33 35 const pmSubtractionKernels *kernels, // Kernels … … 76 78 #ifdef USE_WEIGHT 77 79 cc *= weight->kernel[y][x]; 80 #endif 81 #ifdef USE_WINDOW 82 if (window) { 83 cc *= window->kernel[y][x]; 84 } 78 85 #endif 79 86 sumCC += cc; … … 107 114 rc *= wtVal; 108 115 c *= wtVal; 116 #endif 117 #ifdef USE_WINDOW 118 if (window) { 119 float winVal = window->kernel[y][x]; 120 ic *= winVal; 121 rc *= winVal; 122 c *= winVal; 123 } 109 124 #endif 110 125 sumIC += ic; … … 144 159 ref *= wtVal; 145 160 one *= wtVal; 161 #endif 162 #ifdef USE_WINDOW 163 if (window) { 164 float winVal = window->kernel[y][x]; 165 rr *= winVal; 166 ir *= winVal; 167 in *= winVal; 168 ref *= winVal; 169 one *= winVal; 170 } 146 171 #endif 147 172 sumRR += rr; … … 603 628 #endif 604 629 630 // XXX visualize the set of convolved stamps 631 605 632 psImage *polyValues = p_pmSubtractionPolynomial(NULL, spatialOrder, 606 633 stamp->xNorm, stamp->yNorm); // Polynomial terms … … 620 647 case PM_SUBTRACTION_MODE_1: 621 648 status = calculateMatrixVector(stamp->matrix1, stamp->vector1, stamp->image2, stamp->image1, 622 stamp->weight, stamp ->convolutions1, kernels, polyValues,623 footprint);649 stamp->weight, stamps->window, stamp->convolutions1, kernels, 650 polyValues, footprint); 624 651 break; 625 652 case PM_SUBTRACTION_MODE_2: 626 653 status = calculateMatrixVector(stamp->matrix1, stamp->vector1, stamp->image1, stamp->image2, 627 stamp->weight, stamp ->convolutions2, kernels, polyValues,628 footprint);654 stamp->weight, stamps->window, stamp->convolutions2, kernels, 655 polyValues, footprint); 629 656 break; 630 657 case PM_SUBTRACTION_MODE_DUAL: … … 1147 1174 double devNorm = 1.0 / (double)numPixels; // Normalisation for deviations 1148 1175 int numKernels = kernels->num; // Number of kernels 1176 double norm = NAN; 1149 1177 1150 1178 psImage *polyValues = NULL; // Polynomial values 1151 1179 psKernel *residual = psKernelAlloc(-footprint, footprint, -footprint, footprint); // Residual image 1180 1181 // set up holding images for the visualization 1182 pmSubtractionVisualShowFitInit (stamps); 1152 1183 1153 1184 for (int i = 0; i < stamps->num; i++) { … … 1160 1191 // Calculate coefficients of the kernel basis functions 1161 1192 polyValues = p_pmSubtractionPolynomial(polyValues, kernels->spatialOrder, stamp->xNorm, stamp->yNorm); 1162 doublenorm = p_pmSubtractionSolutionNorm(kernels); // Normalisation1193 norm = p_pmSubtractionSolutionNorm(kernels); // Normalisation 1163 1194 double background = p_pmSubtractionSolutionBackground(kernels, polyValues);// Difference in background 1164 1195 … … 1214 1245 } 1215 1246 } 1247 1248 // XXX visualize the target, source, convolution and residual 1249 pmSubtractionVisualShowFitAddStamp (target, source, residual, background, norm, i); 1250 1216 1251 for (int y = - footprint; y <= footprint; y++) { 1217 1252 for (int x = - footprint; x <= footprint; x++) { … … 1300 1335 } 1301 1336 #endif 1302 1337 1303 1338 } 1304 1339 psFree(residual); 1305 1340 psFree(polyValues); 1306 1341 1342 psLogMsg("psModules.imcombine", PS_LOG_INFO, "normalization: %f", norm); 1343 pmSubtractionVisualShowFit(); 1344 pmSubtractionVisualPlotFit(kernels); 1345 1307 1346 return deviations; 1308 1347 } -
branches/pap/psModules/src/imcombine/pmSubtractionKernels.c
r26156 r26321 111 111 112 112 pmSubtractionKernels *p_pmSubtractionKernelsRawISIS(int size, int spatialOrder, 113 const psVector *fwhms , const psVector *orders,113 const psVector *fwhmsIN, const psVector *ordersIN, 114 114 float penalty, pmSubtractionMode mode) 115 115 { 116 PS_ASSERT_VECTOR_NON_NULL(fwhms , NULL);117 PS_ASSERT_VECTOR_TYPE(fwhms , PS_TYPE_F32, NULL);118 PS_ASSERT_VECTOR_NON_NULL(orders , NULL);119 PS_ASSERT_VECTOR_TYPE(orders , PS_TYPE_S32, NULL);120 PS_ASSERT_VECTORS_SIZE_EQUAL(fwhms , orders, NULL);116 PS_ASSERT_VECTOR_NON_NULL(fwhmsIN, NULL); 117 PS_ASSERT_VECTOR_TYPE(fwhmsIN, PS_TYPE_F32, NULL); 118 PS_ASSERT_VECTOR_NON_NULL(ordersIN, NULL); 119 PS_ASSERT_VECTOR_TYPE(ordersIN, PS_TYPE_S32, NULL); 120 PS_ASSERT_VECTORS_SIZE_EQUAL(fwhmsIN, ordersIN, NULL); 121 121 PS_ASSERT_INT_POSITIVE(size, NULL); 122 122 PS_ASSERT_INT_NONNEGATIVE(spatialOrder, NULL); 123 124 // check the requested fwhm values: any values <= 0.0 should be dropped 125 psVector *fwhms = psVectorAllocEmpty (fwhmsIN->n, PS_TYPE_F32); 126 psVector *orders = psVectorAllocEmpty (ordersIN->n, PS_TYPE_S32); 127 for (int i = 0; i < fwhmsIN->n; i++) { 128 if (fwhmsIN->data.F32[i] <= FLT_EPSILON) continue; 129 psVectorAppend(fwhms, fwhmsIN->data.F32[i]); 130 psVectorAppend(orders, ordersIN->data.S32[i]); 131 } 123 132 124 133 int numGaussians = fwhms->n; // Number of Gaussians -
branches/pap/psModules/src/imcombine/pmSubtractionMatch.c
r26035 r26321 483 483 } 484 484 485 486 // generate the window function from the set of stamps 487 if (!pmSubtractionStampsGetWindow(stamps, size)) { 488 goto MATCH_ERROR; 489 } 485 490 486 491 // Define kernel basis functions … … 550 555 } 551 556 557 // generate the window function from the set of stamps 558 if (!pmSubtractionStampsGetWindow(stamps, size)) { 559 goto MATCH_ERROR; 560 } 561 552 562 psTrace("psModules.imcombine", 3, "Calculating equation...\n"); 553 563 if (!pmSubtractionCalculateEquation(stamps, kernels)) { … … 587 597 } 588 598 599 // if we hit the max number of iterations and we have rejected stamps, re-solve 589 600 if (numRejected > 0) { 590 601 psTrace("psModules.imcombine", 3, "Solving equation...\n"); -
branches/pap/psModules/src/imcombine/pmSubtractionStamps.c
r26046 r26321 46 46 psFree(list->y); 47 47 psFree(list->flux); 48 psFree(list->window); 48 49 } 49 50 … … 220 221 list->y = NULL; 221 222 list->flux = NULL; 223 list->window = NULL; 222 224 list->footprint = footprint; 223 225 list->sysErr = sysErr; … … 239 241 out->y = NULL; 240 242 out->flux = NULL; 243 out->window = psMemIncrRefCounter(in->window); 241 244 out->footprint = in->footprint; 242 245 … … 606 609 } 607 610 611 612 bool pmSubtractionStampsGetWindow(pmSubtractionStampList *stamps, int kernelSize) 613 { 614 PM_ASSERT_SUBTRACTION_STAMP_LIST_NON_NULL(stamps, false); 615 PS_ASSERT_INT_NONNEGATIVE(kernelSize, false); 616 617 int size = kernelSize + stamps->footprint; // Size of postage stamps 618 619 psFree (stamps->window); 620 stamps->window = psKernelAlloc(-size, size, -size, size); 621 psImageInit(stamps->window->image, 0.0); 622 623 // generate normalizations for each stamp 624 psVector *norm1 = psVectorAlloc(stamps->num, PS_TYPE_F32); 625 psVector *norm2 = psVectorAlloc(stamps->num, PS_TYPE_F32); 626 for (int i = 0; i < stamps->num; i++) { 627 pmSubtractionStamp *stamp = stamps->stamps->data[i]; // Stamp of interest 628 if (!stamp) continue; 629 if (!stamp->image1) continue; 630 if (!stamp->image2) continue; 631 632 float sum1 = 0.0; 633 float sum2 = 0.0; 634 for (int y = -size; y <= size; y++) { 635 for (int x = -size; x <= size; x++) { 636 sum1 += stamp->image1->kernel[y][x]; 637 sum2 += stamp->image2->kernel[y][x]; 638 } 639 } 640 norm1->data.F32[i] = sum1; 641 norm2->data.F32[i] = sum2; 642 } 643 644 // storage vector for flux data 645 psStats *stats = psStatsAlloc (PS_STAT_ROBUST_MEDIAN | PS_STAT_ROBUST_STDEV); 646 psVector *flux = psVectorAllocEmpty(2*stamps->num, PS_TYPE_F32); 647 648 // generate the window pixels 649 for (int y = -size; y <= size; y++) { 650 for (int x = -size; x <= size; x++) { 651 652 flux->n = 0; 653 for (int i = 0; i < stamps->num; i++) { 654 pmSubtractionStamp *stamp = stamps->stamps->data[i]; // Stamp of interest 655 if (!stamp) continue; 656 if (!stamp->image1) continue; 657 if (!stamp->image2) continue; 658 659 psVectorAppend (flux, stamp->image1->kernel[y][x] / norm1->data.F32[i]); 660 psVectorAppend (flux, stamp->image2->kernel[y][x] / norm2->data.F32[i]); 661 } 662 663 psStatsInit (stats); 664 if (!psVectorStats (stats, flux, NULL, NULL, 0)) { 665 psAbort ("failed to generate stats"); 666 } 667 stamps->window->kernel[y][x] = stats->robustMedian; 668 } 669 } 670 671 // XXX TESTING: 672 { 673 psFits *fits = psFitsOpen ("window.fits", "w"); 674 psFitsWriteImage (fits, NULL, stamps->window->image, 0, NULL); 675 psFitsClose (fits); 676 } 677 678 psFree (stats); 679 psFree (flux); 680 psFree (norm1); 681 psFree (norm2); 682 return true; 683 } 608 684 609 685 bool pmSubtractionStampsExtract(pmSubtractionStampList *stamps, psImage *image1, psImage *image2, -
branches/pap/psModules/src/imcombine/pmSubtractionStamps.h
r26035 r26321 24 24 psArray *flux; ///< Fluxes for possible stamps (or NULL) 25 25 int footprint; ///< Half-size of stamps 26 psKernel *window; ///< window function generated from ensemble of stamps 26 27 float sysErr; ///< Systematic error 27 28 } pmSubtractionStampList; … … 136 137 ); 137 138 139 bool pmSubtractionStampsGetWindow(pmSubtractionStampList *stamps, int kernelSize); 140 138 141 /// Extract stamps from the images 139 142 bool pmSubtractionStampsExtract(pmSubtractionStampList *stamps, ///< Stamps -
branches/pap/psModules/src/imcombine/pmSubtractionVisual.c
r23487 r26321 16 16 17 17 #include "pmKapaPlots.h" 18 #include "pmSubtraction.h" 18 19 #include "pmSubtractionStamps.h" 20 #include "pmSubtractionEquation.h" 19 21 20 22 #include "pmVisual.h" … … 32 34 static bool plotLeastSquares = true; 33 35 static bool plotImage = true; 36 34 37 // variables to store plotting window indices 35 static int kapa = -1;38 static int kapa1 = -1; 36 39 static int kapa2 = -1; 40 static int kapa3 = -1; 37 41 38 42 /** function prototypes*/ … … 46 50 bool pmSubtractionVisualClose(void) 47 51 { 48 if(kapa != -1) 49 KiiClose(kapa); 50 if(kapa2 != -1) 51 KiiClose(kapa2); 52 if(kapa1 != -1) KiiClose(kapa1); 53 if(kapa2 != -1) KiiClose(kapa2); 52 54 return true; 53 55 } … … 60 62 bool pmSubtractionVisualPlotConvKernels(psImage *convKernels) { 61 63 if (!pmVisualIsVisual() || !plotConvKernels) return true; 62 if (!pmVisualInitWindow(&kapa , "ppSub:Images")) {63 return false; 64 } 65 pmVisualScaleImage(kapa , convKernels, "Convolution_Kernels", 0, true);64 if (!pmVisualInitWindow(&kapa1, "ppSub:Images")) { 65 return false; 66 } 67 pmVisualScaleImage(kapa1, convKernels, "Convolution_Kernels", 0, true); 66 68 pmVisualAskUser(&plotConvKernels); 67 69 return true; … … 74 76 bool pmSubtractionVisualPlotStamps(pmSubtractionStampList *stamps, pmReadout *ro) { 75 77 if (!pmVisualIsVisual() || !plotStamps) return true; 76 if (!pmVisualInitWindow (&kapa , "ppSub:Images")) {78 if (!pmVisualInitWindow (&kapa1, "ppSub:Images")) { 77 79 return false; 78 80 } … … 134 136 stampNum++; 135 137 } 136 pmVisualScaleImage(kapa , canvas, "Subtraction_Stamps", 0, true);138 pmVisualScaleImage(kapa1, canvas, "Subtraction_Stamps", 0, true); 137 139 138 140 pmVisualAskUser(&plotStamps); … … 144 146 145 147 if (!pmVisualIsVisual() || !plotLeastSquares) return true; 146 if (!pmVisualInitWindow (&kapa , "PPSub:Images")) {148 if (!pmVisualInitWindow (&kapa1, "PPSub:Images")) { 147 149 return false; 148 150 } … … 197 199 198 200 psImage *canvas32 = pmVisualImageToFloat(canvas); 199 pmVisualScaleImage(kapa , canvas32, "Least_Squares", 0, true);201 pmVisualScaleImage(kapa1, canvas32, "Least_Squares", 0, true); 200 202 201 203 pmVisualAskUser(&plotLeastSquares); … … 207 209 bool pmSubtractionVisualShowSubtraction(psImage *image, psImage *ref, psImage *sub) { 208 210 if (!pmVisualIsVisual() || !plotImage) return true; 209 if (!pmVisualInitWindow (&kapa , "PPSub:Images")) {210 return false; 211 } 212 213 pmVisualScaleImage(kapa , image, "Image", 0, true);214 pmVisualScaleImage(kapa , ref, "Reference", 1, true);215 pmVisualScaleImage(kapa , sub, "Subtraction", 2, true);211 if (!pmVisualInitWindow (&kapa1, "PPSub:Images")) { 212 return false; 213 } 214 215 pmVisualScaleImage(kapa1, image, "Image", 0, true); 216 pmVisualScaleImage(kapa1, ref, "Reference", 1, true); 217 pmVisualScaleImage(kapa1, sub, "Subtraction", 2, true); 216 218 pmVisualAskUser(&plotImage); 217 219 return true; … … 255 257 } 256 258 259 static int footprint = 0; 260 static int NX = 0; 261 static int NY = 0; 262 static psImage *sourceImage = NULL; 263 static psImage *targetImage = NULL; 264 static psImage *residualImage = NULL; 265 static psImage *differenceImage = NULL; 266 static psImage *convolutionImage = NULL; 267 268 bool pmSubtractionVisualShowFitInit(pmSubtractionStampList *stamps) { 269 270 // if (!pmVisualIsVisual()) return true; 271 272 // generate 4 storage images large enough to hold the N stamps: 273 274 footprint = stamps->footprint; 275 276 float NXf = sqrt(stamps->num); 277 NX = (int) NXf == NXf ? NXf : NXf + 1.0; 278 279 float NYf = stamps->num / NX; 280 NY = (int) NYf == NY ? NYf : NYf + 1.0; 281 282 int NXpix = (2*footprint + 1) * NX; 283 NXpix += (NX > 1) ? 3 * NX : 0; 284 285 int NYpix = (2*footprint + 1) * NY; 286 NYpix += (NY > 1) ? 3 * NY : 0; 287 288 sourceImage = psImageAlloc (NXpix, NYpix, PS_TYPE_F32); 289 targetImage = psImageAlloc (NXpix, NYpix, PS_TYPE_F32); 290 residualImage = psImageAlloc (NXpix, NYpix, PS_TYPE_F32); 291 differenceImage = psImageAlloc (NXpix, NYpix, PS_TYPE_F32); 292 convolutionImage = psImageAlloc (NXpix, NYpix, PS_TYPE_F32); 293 294 psImageInit (sourceImage, 0.0); 295 psImageInit (targetImage, 0.0); 296 psImageInit (residualImage, 0.0); 297 psImageInit (differenceImage, 0.0); 298 psImageInit (convolutionImage, 0.0); 299 300 return true; 301 } 302 303 bool pmSubtractionVisualShowFitAddStamp(psKernel *target, psKernel *source, psKernel *convolution, double background, double norm, int index) { 304 305 // if (!pmVisualIsVisual()) return true; 306 307 int NXoff = index % NX; 308 int NYoff = index / NX; 309 310 int NXpix = NXoff * (2*footprint + 1 + 3) + footprint; 311 int NYpix = NYoff * (2*footprint + 1 + 3) + footprint; 312 313 // insert the (target) kernel into the (target) image: 314 for (int y = -footprint; y <= footprint; y++) { 315 for (int x = -footprint; x <= footprint; x++) { 316 targetImage->data.F32[y + NYpix][x + NXpix] = target->kernel[y][x]; 317 } 318 } 319 320 // insert the (source) kernel into the (source) image: 321 for (int y = -footprint; y <= footprint; y++) { 322 for (int x = -footprint; x <= footprint; x++) { 323 sourceImage->data.F32[y + NYpix][x + NXpix] = source->kernel[y][x]; 324 } 325 } 326 327 // insert the (convolution) kernel into the (convolution) image: 328 for (int y = -footprint; y <= footprint; y++) { 329 for (int x = -footprint; x <= footprint; x++) { 330 convolutionImage->data.F32[y + NYpix][x + NXpix] = -convolution->kernel[y][x]; 331 } 332 } 333 334 // insert the (difference) kernel into the (difference) image: 335 for (int y = -footprint; y <= footprint; y++) { 336 for (int x = -footprint; x <= footprint; x++) { 337 differenceImage->data.F32[y + NYpix][x + NXpix] = target->kernel[y][x] - background - source->kernel[y][x] * norm; 338 } 339 } 340 341 // insert the (residual) kernel into the (residual) image: 342 for (int y = -footprint; y <= footprint; y++) { 343 for (int x = -footprint; x <= footprint; x++) { 344 residualImage->data.F32[y + NYpix][x + NXpix] = target->kernel[y][x] - background - source->kernel[y][x] * norm + convolution->kernel[y][x]; 345 } 346 } 347 return true; 348 } 349 350 bool pmSubtractionVisualShowFit() { 351 352 // if (!pmVisualIsVisual()) return true; 353 if (!pmVisualInitWindow(&kapa1, "ppSub:Images")) return false; 354 if (!pmVisualInitWindow(&kapa2, "ppSub:Misc")) return false; 355 356 pmVisualScaleImage(kapa1, targetImage, "Target Stamps", 0, true); 357 pmVisualScaleImage(kapa1, sourceImage, "Source Stamps", 1, true); 358 pmVisualScaleImage(kapa1, convolutionImage, "Convolution Stamps", 2, true); 359 360 pmVisualScaleImage(kapa2, differenceImage, "Difference Stamps", 0, true); 361 pmVisualScaleImage(kapa2, residualImage, "Residual Stamps", 1, true); 362 pmVisualAskUser(NULL); 363 364 psFree(targetImage); 365 psFree(sourceImage); 366 psFree(convolutionImage); 367 psFree(differenceImage); 368 psFree(residualImage); 369 370 targetImage = NULL; 371 sourceImage = NULL; 372 convolutionImage = NULL; 373 differenceImage = NULL; 374 residualImage = NULL; 375 376 return true; 377 } 378 379 bool pmSubtractionVisualPlotFit(const pmSubtractionKernels *kernels) { 380 381 Graphdata graphdata; 382 383 // if (!pmVisualIsVisual()) return true; 384 if (!pmVisualInitWindow(&kapa3, "ppSub:plots")) return false; 385 386 KapaClearSections (kapa3); 387 KapaInitGraph (&graphdata); 388 389 psVector *x = psVectorAllocEmpty (kernels->num, PS_TYPE_F32); 390 psVector *y = psVectorAllocEmpty (kernels->num, PS_TYPE_F32); 391 392 graphdata.xmin = -1.0; 393 graphdata.xmax = kernels->num + 1.0; 394 graphdata.ymin = +32.0; 395 graphdata.ymax = -32.0; 396 397 psImage *polyValues = p_pmSubtractionPolynomial(NULL, kernels->spatialOrder, 0.0, 0.0); 398 399 // construct the plot vectors 400 for (int i = 0; i < kernels->num; i++) { 401 x->data.F32[i] = i; 402 y->data.F32[i] = p_pmSubtractionSolutionCoeff(kernels, polyValues, i, false); 403 graphdata.ymin = PS_MIN(graphdata.ymin, y->data.F32[i]); 404 graphdata.ymax = PS_MAX(graphdata.ymax, y->data.F32[i]); 405 } 406 x->n = y->n = kernels->num; 407 408 float range; 409 range = graphdata.xmax - graphdata.xmin; 410 graphdata.xmax += 0.05*range; 411 graphdata.xmin -= 0.05*range; 412 range = graphdata.ymax - graphdata.ymin; 413 graphdata.ymax += 0.05*range; 414 graphdata.ymin -= 0.05*range; 415 416 KapaSetLimits (kapa3, &graphdata); 417 418 KapaSetFont (kapa3, "helvetica", 14); 419 KapaBox (kapa3, &graphdata); 420 KapaSendLabel (kapa3, "kernel number", KAPA_LABEL_XM); 421 KapaSendLabel (kapa3, "coeff", KAPA_LABEL_YM); 422 423 graphdata.color = KapaColorByName ("black"); 424 graphdata.ptype = 2; 425 graphdata.size = 0.5; 426 graphdata.style = 2; 427 428 KapaPrepPlot (kapa3, x->n, &graphdata); 429 KapaPlotVector (kapa3, x->n, x->data.F32, "x"); 430 KapaPlotVector (kapa3, x->n, y->data.F32, "y"); 431 432 psFree (x); 433 psFree (y); 434 435 pmVisualAskUser(NULL); 436 return true; 437 } 438 257 439 #else 258 440 bool pmSubtractionVisualClose(void) {return true;} … … 261 443 bool pmSubtractionVisualPlotLeastSquares(pmSubtractionStampList *stamps) {return true;} 262 444 bool pmSubtractionVisualShowSubtraction(psImage *image, psImage *ref, psImage *sub) {return true;} 445 bool pmSubtractionVisualShowFitInit(pmSubtractionStampList *stamps) {return true;} 446 bool pmSubtractionVisualShowFitAddStamp(psKernel *target, psKernel *source, psKernel *convolution, double background, double norm, int index) {return true;} 447 bool pmSubtractionVisualShowFit() {return true;} 448 bool pmSubtractionVisualPlotFit(const pmSubtractionKernels *kernels); 263 449 #endif -
branches/pap/psModules/src/imcombine/pmSubtractionVisual.h
r23487 r26321 7 7 bool pmSubtractionVisualPlotLeastSquares(pmSubtractionStampList *stamps); 8 8 bool pmSubtractionVisualShowSubtraction(psImage *image, psImage *ref, psImage *sub); 9 bool pmSubtractionVisualShowFitInit(pmSubtractionStampList *stamps); 10 bool pmSubtractionVisualShowFitAddStamp(psKernel *target, psKernel *source, psKernel *convolution, double background, double norm, int index); 11 bool pmSubtractionVisualShowFit(); 12 bool pmSubtractionVisualPlotFit(const pmSubtractionKernels *kernels); 9 13 10 14 #endif
Note:
See TracChangeset
for help on using the changeset viewer.
