Changeset 14478
- Timestamp:
- Aug 13, 2007, 4:06:32 PM (19 years ago)
- Location:
- trunk/psLib/src/imageops
- Files:
-
- 2 edited
-
psImageConvolve.c (modified) (4 diffs)
-
psImageConvolve.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/imageops/psImageConvolve.c
r14332 r14478 7 7 /// @author Eugene Magnier, IfA 8 8 /// 9 /// @version $Revision: 1.5 3$ $Name: not supported by cvs2svn $10 /// @date $Date: 2007-0 7-20 20:12:31$9 /// @version $Revision: 1.54 $ $Name: not supported by cvs2svn $ 10 /// @date $Date: 2007-08-14 02:06:32 $ 11 11 /// 12 12 /// Copyright 2004-2007 Institute for Astronomy, University of Hawaii … … 42 42 } 43 43 44 // Set up indirections, so we can refer to kernel->kernel[-1][-3] for the (-1,-1) element, instead of 45 // kernel->image[kernel->yMax - kernel->yMin + 1][kernel->yMax - kernel->yMin + 3] (yuk!). 46 static void kernelRedirects(psKernel *kernel, // Kernel for which to set up the redirects 47 int numRows // Number of rows 48 ) 49 { 50 int xMin = kernel->xMin, yMin = kernel->yMin; // Minimum values 51 52 kernel->p_kernelRows = psAlloc(sizeof(float*)*numRows); 53 for (int i = 0; i < numRows; i++) { 54 kernel->p_kernelRows[i] = kernel->image->data.PS_TYPE_KERNEL_DATA[i] - xMin; 55 } 56 kernel->kernel = kernel->p_kernelRows - yMin; 57 return; 58 } 59 44 60 psKernel *psKernelAlloc(int xMin, int xMax, int yMin, int yMax) 45 61 { … … 79 95 psImageInit(kernel->image, 0.0); 80 96 81 // Set up indirections, so we can refer to kernel->kernel[-1][-3] for the (-1,-1) element, instead of 82 // kernel->image[kernel->yMax - kernel->yMin + 1][kernel->yMax - kernel->yMin + 3] (yuk!). 83 kernel->p_kernelRows = psAlloc(sizeof(float*)*numRows); 84 for (int i = 0; i < numRows; i++) { 85 kernel->p_kernelRows[i] = kernel->image->data.PS_TYPE_KERNEL_DATA[i] - xMin; 86 } 87 kernel->kernel = kernel->p_kernelRows - yMin; 97 kernelRedirects(kernel, numRows); 88 98 89 99 return kernel; 90 100 } 91 101 92 102 psKernel *psKernelAllocFromImage(psImage *image, int x0, int y0) 103 { 104 psKernel *kernel = psAlloc(sizeof(psKernel)); // The kernel, to be returned 105 psMemSetDeallocator(kernel,(psFreeFunc)kernelFree); 106 107 int numCols = image->numCols, numRows = image->numRows; // Size of image 108 109 kernel->xMin = - x0; 110 kernel->xMax = numCols - x0; 111 kernel->yMin = - y0; 112 kernel->yMax = numRows - y0; 113 kernel->image = psMemIncrRefCounter(image); 114 115 kernelRedirects(kernel, numRows); 116 117 return kernel; 118 } 93 119 94 120 bool psMemCheckKernel(psPtr ptr) … … 200 226 } 201 227 202 psImage *psImageConvolveDirect(psImage *out, 203 const psImage *in,228 psImage *psImageConvolveDirect(psImage *out, 229 const psImage *in, 204 230 const psKernel *kernel) 205 231 { 206 232 PS_ASSERT_IMAGE_NON_NULL(in, NULL); 207 233 if (in->type.type != PS_TYPE_S32 && in->type.type != PS_TYPE_F32 && in->type.type != PS_TYPE_F64) { 208 psError(PS_ERR_BAD_PARAMETER_TYPE, true,209 "Unallowable operation: psImage %s is not of type S32 or F{32,64}.", "in");210 return(NULL);234 psError(PS_ERR_BAD_PARAMETER_TYPE, true, 235 "Unallowable operation: psImage %s is not of type S32 or F{32,64}.", "in"); 236 return(NULL); 211 237 } 212 238 PS_ASSERT_PTR_NON_NULL(kernel, NULL); -
trunk/psLib/src/imageops/psImageConvolve.h
r14452 r14478 5 5 * @author Robert DeSonia, MHPCC 6 6 * 7 * @version $Revision: 1.2 2$ $Name: not supported by cvs2svn $8 * @date $Date: 2007-08- 09 01:40:07$7 * @version $Revision: 1.23 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2007-08-14 02:06:32 $ 9 9 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii 10 10 */ … … 69 69 int yMax ///< Most positive y index 70 70 ) PS_ATTR_MALLOC; 71 72 /// Allocate a convolution kernel from a provided image 73 psKernel *psKernelAllocFromImage(psImage *image, ///< Image from which to define kernel 74 int x0, int y0 ///< Coordinates of kernel centre 75 ); 71 76 72 77 /// Checks the type of a particular pointer.
Note:
See TracChangeset
for help on using the changeset viewer.
