Changeset 36375 for trunk/psLib/src/imageops
- Timestamp:
- Dec 10, 2013, 2:55:11 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
- 1 copied
-
. (modified) (1 prop)
-
psLib/src/imageops/Makefile.am (modified) (1 diff)
-
psLib/src/imageops/psImageConvolve.c (modified) (7 diffs)
-
psLib/src/imageops/psImageConvolve.h (modified) (4 diffs)
-
psLib/src/imageops/psImageConvolve2dCache.c (copied) (copied from branches/eam_branches/ipp-20130904/psLib/src/imageops/psImageConvolve2dCache.c )
Legend:
- Unmodified
- Added
- Removed
-
trunk
-
trunk/psLib/src/imageops/Makefile.am
r21207 r36375 7 7 psImageBackground.c \ 8 8 psImageConvolve.c \ 9 psImageConvolve2dCache.c \ 9 10 psImageCovariance.c \ 10 11 psImageGeomManip.c \ -
trunk/psLib/src/imageops/psImageConvolve.c
r35767 r36375 36 36 #define MIN_GAUSS_FRAC 0.25 // Minimum Gaussian fraction to accept when smoothing 37 37 38 39 40 38 static bool threaded = false; // Run image convolution threaded? 41 39 static pthread_mutex_t threadMutex = PTHREAD_MUTEX_INITIALIZER; 42 43 40 44 41 static void kernelFree(psKernel *kernel) … … 780 777 } 781 778 782 void psImageSmooth _PreAlloc_DataFree (psImageSmooth_PreAlloc_Data *smdata) {779 void psImageSmoothCacheDataFree (psImageSmoothCacheData *smdata) { 783 780 psFree (smdata->resultX); 784 781 psFree (smdata->resultY); … … 786 783 } 787 784 788 psImageSmooth_PreAlloc_Data *psImageSmooth_PreAlloc_DataAlloc (psImage *image, double sigma, double Nsigma) { 789 790 psImageSmooth_PreAlloc_Data *smdata = psAlloc(sizeof(psImageSmooth_PreAlloc_Data)); 791 psMemSetDeallocator(smdata, (psFreeFunc) psImageSmooth_PreAlloc_DataFree); 785 // allocate the psImageSmoothCache data structure, but do not define the kernel 786 psImageSmoothCacheData *psImageSmoothCacheAlloc (psImage *image, double sigma, double Nsigma) { 787 788 psImageSmoothCacheData *smdata = psAlloc(sizeof(psImageSmoothCacheData)); 789 psMemSetDeallocator(smdata, (psFreeFunc) psImageSmoothCacheDataFree); 790 791 smdata->kernel = NULL; 792 792 793 793 if (!image) { … … 796 796 smdata->Nx = 0; 797 797 smdata->Ny = 0; 798 smdata->kernel = NULL;799 798 smdata->resultX = NULL; 800 799 smdata->resultY = NULL; … … 807 806 smdata->Ny = image->numRows; // Number of rows 808 807 809 IMAGE_SMOOTH_GAUSS(smdata->kernel, smdata->Nrange, sigma, F32); 808 // XXX drop this : we now require a call to a kernel-creation function (like psImageSmoothCacheKernel_Gauss) 809 // IMAGE_SMOOTH_GAUSS(smdata->kernel, smdata->Nrange, sigma, F32); 810 810 811 811 // use a temp running buffer for X and Y directions. … … 819 819 } 820 820 821 // generate a Gaussian smoothing kernel for supplied sigma. sigma here does not need to match 822 // that used to allocate the structure, but it is recommended 823 bool psImageSmoothCacheKernel_Gauss (psImageSmoothCacheData *smdata, float sigma) { 824 // check for NULL structure elements? 825 psFree (smdata->kernel); 826 IMAGE_SMOOTH_GAUSS(smdata->kernel, smdata->Nrange, sigma, F32); 827 return true; 828 } 829 821 830 // we can use the same DATA structure on multiple images of the same size 822 bool psImageSmooth _PreAlloc_F32(psImage *image, psImageSmooth_PreAlloc_Data *smdata)831 bool psImageSmoothCache_F32(psImage *image, psImageSmoothCacheData *smdata) 823 832 { 824 833 PS_ASSERT_IMAGE_NON_NULL(image, false); 834 PS_ASSERT_VECTOR_NON_NULL(smdata->kernel, false); 825 835 // assert on data type 826 836 … … 2156 2166 return threaded; 2157 2167 } 2158 -
trunk/psLib/src/imageops/psImageConvolve.h
r35767 r36375 26 26 #define PS_TYPE_KERNEL_NAME "psF32" ///< the data type for kernel as a string */ 27 27 28 /// a structure to contain data related to image smoothing with a 1D gauss kernel28 /// a structure to contain data related to image smoothing with a pre-cached 1D gauss kernel 29 29 typedef struct { 30 30 int Nx; … … 34 34 psF32 *resultY; 35 35 psVector *kernel; 36 } psImageSmooth_PreAlloc_Data; 36 } psImageSmoothCacheData; 37 38 /// a structure to contain data related to image smoothing with a pre-cached 1D gauss kernel 39 typedef struct { 40 float Nsigma; 41 int Ns; // number of pixel radii 42 float *radflux; // conv kernel in special positions 43 } psImageSmooth2dCacheData; 37 44 38 45 /// A convolution kernel … … 306 313 ); 307 314 308 psImageSmooth_PreAlloc_Data *psImageSmooth_PreAlloc_DataAlloc (psImage *image, double sigma, double Nsigma); 309 bool psImageSmooth_PreAlloc_F32(psImage *image, psImageSmooth_PreAlloc_Data *smdata); 315 psImageSmoothCacheData *psImageSmoothCacheAlloc (psImage *image, double sigma, double Nsigma); 316 bool psImageSmoothCache_F32(psImage *image, psImageSmoothCacheData *smdata); 317 bool psImageSmoothCacheKernel_Gauss (psImageSmoothCacheData *smdata, float sigma); 310 318 311 319 /// Control threading for image convolution functions … … 318 326 bool psImageConvolveGetThreads(void); 319 327 328 psImageSmooth2dCacheData *psImageSmooth2dCacheAlloc (float Nsigma); 329 bool psImageSmooth2dCacheKernel_PS1_V1 (psImageSmooth2dCacheData *smdata, float sigma, float kappa); 330 bool psImageSmooth2dCacheKernel_Gauss (psImageSmooth2dCacheData *smdata, float sigma); 331 bool psImageSmooth2dCache_F32(psImage *image, psImageSmooth2dCacheData *smdata); 332 320 333 /// @} 321 334 #endif // #ifndef PS_IMAGE_CONVOLVE_H
Note:
See TracChangeset
for help on using the changeset viewer.
