- Timestamp:
- Jun 20, 2008, 10:00:01 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/pap_branch_080617/psModules/src/imcombine/pmSubtractionKernels.c
r18146 r18239 24 24 psFree(kernels->vStop); 25 25 psFree(kernels->preCalc); 26 psFree(kernels->penalties); 26 27 psFree(kernels->solution1); 27 28 psFree(kernels->solution2); … … 60 61 kernels->v = psVectorRealloc(kernels->v, start + numNew); 61 62 kernels->preCalc = psArrayRealloc(kernels->preCalc, start + numNew); 63 kernels->penalties = psVectorRealloc(kernels->penalties, start + numNew); 62 64 kernels->inner = start; 63 65 … … 74 76 kernels->v->data.S32[index] = v; 75 77 kernels->preCalc->data[index] = NULL; 78 kernels->penalties->data.F32[index] = PS_SQR(u) + PS_SQR(v); 76 79 77 80 psTrace("psModules.imcombine", 7, "Kernel %d: %d %d\n", index, u, v); … … 122 125 psKernel *preCalc = psKernelAlloc(-size, size, -size, size); 123 126 double sum = 0.0; // Normalisation 127 double moment = 0.0; // Moment, for penalty 124 128 for (int v = -size; v <= size; v++) { 125 129 for (int u = -size; u <= size; u++) { 126 130 sum += preCalc->kernel[v][u] = norm * power(u, uOrder) * power(v, vOrder) * 127 131 expf(-0.5 * (PS_SQR(u) + PS_SQR(v)) / PS_SQR(sigma)); 132 moment += preCalc->kernel[v][u] * sqrtf(PS_SQR(u) + PS_SQR(v)); 128 133 } 129 134 } … … 146 151 } 147 152 kernels->preCalc->data[index] = preCalc; 153 kernels->penalties->data.F32[index] = moment; 148 154 149 155 psTrace("psModules.imcombine", 7, "Kernel %d: %f %d %d\n", index, … … 173 179 kernels->widths = psVectorAlloc(numBasisFunctions, PS_TYPE_F32); 174 180 kernels->preCalc = psArrayAlloc(numBasisFunctions); 181 kernels->penalty = 0.0; 182 kernels->penalties = psVectorAlloc(numBasisFunctions, PS_TYPE_F32); 175 183 kernels->uStop = NULL; 176 184 kernels->vStop = NULL; … … 324 332 psFree(widths); 325 333 334 psWarning("Kernel penalty for dual-convolution is not configured for SPAM kernels."); 335 psVectorInit(kernels->penalties, 0.0); 336 326 337 return kernels; 327 338 } … … 413 424 psFree(start); 414 425 psFree(stop); 426 427 psWarning("Kernel penalty for dual-convolution is not configured for FRIES kernels."); 428 psVectorInit(kernels->penalties, 0.0); 415 429 416 430 return kernels; … … 520 534 psVector *vCoords = data->data[1] = psVectorAllocEmpty(RINGS_BUFFER, PS_TYPE_S32); // v coords 521 535 psVector *poly = data->data[2] = psVectorAllocEmpty(RINGS_BUFFER, PS_TYPE_F32); // Polynomial 536 double moment = 0.0; // Moment, for penalty 522 537 523 538 if (i == 0) { … … 527 542 uCoords->n = vCoords->n = poly->n = 1; 528 543 radiusLast = 0; 544 moment = 0.0; 529 545 } else { 530 546 int j = 0; // Index for data … … 546 562 poly->data.F32[j] = polyVal; 547 563 norm += polyVal; 564 moment += polyVal * sqrtf(PS_SQR(u) + PS_SQR(v)); 548 565 549 566 psVectorExtend(uCoords, RINGS_BUFFER, 1); … … 571 588 psBinaryOp(poly, poly, "*", psScalarAlloc(1.0 / norm, PS_TYPE_F32)); 572 589 } 590 moment /= norm; 573 591 } 574 592 … … 578 596 kernels->u->data.S32[index] = uOrder; 579 597 kernels->v->data.S32[index] = vOrder; 598 kernels->penalties->data.F32[index] = moment; 580 599 581 600 psTrace("psModules.imcombine", 7, "Kernel %d: %d %d %d\n", index,
Note:
See TracChangeset
for help on using the changeset viewer.
