Changeset 6452 for trunk/pois/src/poisExtractKernel.c
- Timestamp:
- Feb 17, 2006, 5:11:30 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/pois/src/poisExtractKernel.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/pois/src/poisExtractKernel.c
r5717 r6452 6 6 /* Create a kernel image from the solution vector */ 7 7 psImage *poisExtractKernel(const psVector *solution, // Vector containing the kernel elements 8 const psArray *kernelParams, // The kernel parameters9 float x,// The relative (-1 to 1) x position for which to get the kernel10 float y,// The relative (-1 to 1) y position for which to get the kernel11 const poisConfig *config // Configuration8 const psArray *kernelParams, // The kernel parameters 9 float x, // The relative (-1 to 1) x position for which to get the kernel 10 float y, // The relative (-1 to 1) y position for which to get the kernel 11 const poisConfig *config // Configuration 12 12 ) 13 13 { … … 18 18 assert(y >= -1.0 && y <= 1.0); 19 19 20 int xKernel = config->xKernel; // Half-size of kernel in x21 int yKernel = config->yKernel; // Half-size of kernel in y22 float kernelSum = 0.0; // Sum of the kernel20 int xKernel = config->xKernel; // Half-size of kernel in x 21 int yKernel = config->yKernel; // Half-size of kernel in y 22 float kernelSum = 0.0; // Sum of the kernel 23 23 24 24 /* Allocate the image */ 25 25 psImage *image = psImageAlloc(2*xKernel + 1, 2*yKernel + 1, PS_TYPE_F32); // The kernel image 26 26 for (int j = 0; j < (2*yKernel + 1); j++) { 27 for (int i = 0; i < (2*xKernel + 1); i++) {28 image->data.F32[j][i] = 0.0;29 }27 for (int i = 0; i < (2*xKernel + 1); i++) { 28 image->data.F32[j][i] = 0.0; 29 } 30 30 } 31 31 32 psPolynomial2D *poly = psPolynomial2DAlloc( config->spatialOrder + 1, config->spatialOrder + 1,33 PS_POLYNOMIAL_ORD); // Polynomial for evaluation32 psPolynomial2D *poly = psPolynomial2DAlloc(PS_POLYNOMIAL_ORD, config->spatialOrder + 1, 33 config->spatialOrder + 1); // Polynomial for evaluation 34 34 for (int j = 0; j < config->spatialOrder + 1; j++) { 35 for (int i = 0; i < config->spatialOrder + 1; i++) {36 poly->coeff[j][i] = 1.0;37 poly->mask[j][i] = 1;// Mask all coefficients; unmask to evaluate38 }35 for (int i = 0; i < config->spatialOrder + 1; i++) { 36 poly->coeff[j][i] = 1.0; 37 poly->mask[j][i] = 1; // Mask all coefficients; unmask to evaluate 38 } 39 39 } 40 40 … … 42 42 /* Iterate over the kernel parameters */ 43 43 for (int k = 0; k < kernelParams->n; k++) { 44 poisKernelBasis *kernel = kernelParams->data[k]; // The kernel basis function44 poisKernelBasis *kernel = kernelParams->data[k]; // The kernel basis function 45 45 46 int u = kernel->u;47 int v = kernel->v;48 int xOrder = kernel->xOrder;49 int yOrder = kernel->yOrder;46 int u = kernel->u; 47 int v = kernel->v; 48 int xOrder = kernel->xOrder; 49 int yOrder = kernel->yOrder; 50 50 51 // Evaluate polynomial52 poly->mask[xOrder][yOrder] = 0;53 double evaluation = solution->data.F64[k] * psPolynomial2DEval(poly, x, y);54 poly->mask[xOrder][yOrder] = 1;51 // Evaluate polynomial 52 poly->mask[xOrder][yOrder] = 0; 53 double evaluation = solution->data.F64[k] * psPolynomial2DEval(poly, x, y); 54 poly->mask[xOrder][yOrder] = 1; 55 55 56 image->data.F32[v + yKernel][u + xKernel] += (float)evaluation;57 kernelSum += (float)evaluation;56 image->data.F32[v + yKernel][u + xKernel] += (float)evaluation; 57 kernelSum += (float)evaluation; 58 58 } 59 59
Note:
See TracChangeset
for help on using the changeset viewer.
