Changeset 35771 for trunk/psModules/src/imcombine/pmSubtractionKernels.c
- Timestamp:
- Jul 3, 2013, 4:21:05 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/imcombine/pmSubtractionKernels.c
r30622 r35771 65 65 return result; 66 66 } 67 68 // Generate 1D convolution kernel for SIMPLE 69 psVector *pmSubtractionKernelSIMPLE(float sigma, // Gaussian width 70 int order, // Unused polynomial order 71 int size // Kernel half-size 72 ) 73 { 74 int fullSize = 2 * size + 1; // Full size of the kernel 75 psVector *kernel = psVectorAlloc(fullSize, PS_TYPE_F32); // Kernel to return 76 float expNorm = -0.5 / PS_SQR(sigma); // Normalization for exponential 77 float norm = 1.0 / sqrtf(2.0 * M_PI * sigma * sigma); // Correct Normalization for Gaussian 78 if (sigma < 0.1) { 79 kernel->data.F32[size] = 1.0; 80 return(kernel); 81 } 82 for (int i = 0, x = -size; x <= size; i++,x++) { 83 kernel->data.F32[i] = norm * expf(expNorm * PS_SQR(x)); 84 } 85 return(kernel); 86 } 87 67 88 68 89 // Generate 1D convolution kernel for ISIS … … 771 792 preCalc->poly = NULL; 772 793 break; 794 case PM_SUBTRACTION_KERNEL_SIMPLE: 795 preCalc->xKernel = pmSubtractionKernelSIMPLE(sigma,uOrder,size); 796 preCalc->yKernel = pmSubtractionKernelSIMPLE(sigma,vOrder,size); 797 preCalc->uCoords = NULL; 798 preCalc->vCoords = NULL; 799 preCalc->poly = NULL; 800 break; 773 801 case PM_SUBTRACTION_KERNEL_RINGS: 774 802 // the RINGS kernel uses the uCoords, vCoords, and poly elements of the structure … … 1230 1258 case PM_SUBTRACTION_KERNEL_RINGS: 1231 1259 return pmSubtractionKernelsRINGS(size, spatialOrder, inner, ringsOrder, penalty, bounds, mode); 1260 case PM_SUBTRACTION_KERNEL_SIMPLE: 1261 return pmSubtractionKernelsISIS(size,spatialOrder,fwhms,orders,penalty,bounds,mode); 1232 1262 default: 1233 1263 psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Unknown kernel type: %x", type); … … 1298 1328 case PM_SUBTRACTION_KERNEL_HERM: 1299 1329 case PM_SUBTRACTION_KERNEL_DECONV_HERM: 1330 case PM_SUBTRACTION_KERNEL_SIMPLE: 1300 1331 PARSE_STRING_NUMBER(size, ptr, ',', parseStringInt); 1301 1332 … … 1379 1410 return PM_SUBTRACTION_KERNEL_RINGS; 1380 1411 } 1381 1412 if (strncasecmp(type, "SIMPLE", nameLength) == 0) { 1413 return PM_SUBTRACTION_KERNEL_SIMPLE; 1414 } 1382 1415 psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Unrecognised kernel type: %s", type); 1383 1416 return PM_SUBTRACTION_KERNEL_NONE; … … 1436 1469 break; 1437 1470 1471 case PM_SUBTRACTION_KERNEL_SIMPLE: 1472 psStringAppend(&kernels->description, "SIMPLE(%d,%s)",kernels->size,params); 1473 break; 1438 1474 default: 1439 1475 psAbort("unknown kernel");
Note:
See TracChangeset
for help on using the changeset viewer.
