From 7b96642a017c1fa2911a7541fe8b933188fc654d Mon Sep 17 00:00:00 2001 From: Edoardo Pasca Date: Fri, 26 Jan 2018 10:25:17 +0000 Subject: added NML but commented out --- Wrappers/Python/src/fista_module_gpu.pyx | 192 ++++++++++++++++++++++++------- 1 file changed, 149 insertions(+), 43 deletions(-) (limited to 'Wrappers') diff --git a/Wrappers/Python/src/fista_module_gpu.pyx b/Wrappers/Python/src/fista_module_gpu.pyx index 41cf4a6..f18181b 100644 --- a/Wrappers/Python/src/fista_module_gpu.pyx +++ b/Wrappers/Python/src/fista_module_gpu.pyx @@ -26,6 +26,10 @@ cdef extern void NLM_GPU_kernel(float *A, float* B, float *Eucl_Vec, int N, int M, int Z, int dimension, int SearchW, int SimilW, int SearchW_real, float denh2, float lambdaf); +cdef extern float pad_crop(float *A, float *Ap, + int OldSizeX, int OldSizeY, int OldSizeZ, + int NewSizeX, int NewSizeY, int NewSizeZ, + int padXY, int switchpad_crop); def Diff4thHajiaboli(inputData, regularization_parameter, @@ -152,46 +156,148 @@ def Diff4thHajiaboli3D(np.ndarray[np.float32_t, ndim=3, mode="c"] inputData, return B -def NML(inputData, - regularization_parameter, - iterations, - edge_preserving_parameter): - if inputData.ndim == 2: - return NML2D(inputData, - regularization_parameter, - iterations, - edge_preserving_parameter) - elif inputData.ndim == 3: - return NML3D(inputData, - regularization_parameter, - iterations, - edge_preserving_parameter) - - #SearchW_real = (int) mxGetScalar(prhs[1]); /* the searching window ratio */ - #SimilW = (int) mxGetScalar(prhs[2]); /* the similarity window ratio */ - #h = (float) mxGetScalar(prhs[3]); /* parameter for the PB filtering function */ - #lambda = (float) mxGetScalar(prhs[4]); - -def NML2D(np.ndarray[np.float32_t, ndim=2, mode="c"] inputData, - SearchW_real, - SimilW, - h, - lambdaf): - N, M = inputData.shape - if h < 0: - raise ValueError('Parameter for the PB filtering function must be > 0') - - SearchW = SearchW_real + 2*SimilW; - - SearchW_full = 2*SearchW + 1; #/* the full searching window size */ - SimilW_full = 2*SimilW + 1; #/* the full similarity window size */ - h2 = h*h; - - padXY = SearchW + 2*SimilW; #/* padding sizes */ - newsizeX = N + 2*(padXY); #/* the X size of the padded array */ - newsizeY = M + 2*(padXY); #/* the Y size of the padded array */ - newsizeZ = Z + 2*(padXY); #/* the Z size of the padded array */ - - B = np.zeros((N,M), dtype=np.float ) - - \ No newline at end of file +#def NML(inputData, +# regularization_parameter, +# iterations, +# edge_preserving_parameter): +# if inputData.ndim == 2: +# return NML2D(inputData, +# regularization_parameter, +# iterations, +# edge_preserving_parameter) +# elif inputData.ndim == 3: +# return NML3D(inputData, +# regularization_parameter, +# iterations, +# edge_preserving_parameter) +# +# #SearchW_real = (int) mxGetScalar(prhs[1]); /* the searching window ratio */ +# #SimilW = (int) mxGetScalar(prhs[2]); /* the similarity window ratio */ +# #h = (float) mxGetScalar(prhs[3]); /* parameter for the PB filtering function */ +# #lambda = (float) mxGetScalar(prhs[4]); +# +#def NML2D(np.ndarray[np.float32_t, ndim=2, mode="c"] inputData, +# SearchW_real, +# SimilW, +# h, +# lambdaf): +# N = inputData.shape[0] +# M = inputData.shape[1] +# Z = 0 +# numdims = inputData.ndim +# +# if h < 0: +# raise ValueError('Parameter for the PB filtering function must be > 0') +# +# SearchW = SearchW_real + 2*SimilW; +# +# SearchW_full = 2*SearchW + 1; #/* the full searching window size */ +# SimilW_full = 2*SimilW + 1; #/* the full similarity window size */ +# h2 = h*h; +# +# padXY = SearchW + 2*SimilW; #/* padding sizes */ +# newsizeX = N + 2*(padXY); #/* the X size of the padded array */ +# newsizeY = M + 2*(padXY); #/* the Y size of the padded array */ +# #newsizeZ = Z + 2*(padXY); #/* the Z size of the padded array */ +# +# #output +# B = np.zeros((N,M), dtype=np.float ) +# #/*allocating memory for the padded arrays */ +# +# Ap = np.zeros((newsizeX, newsizeY), dtype=np.float) +# Bp = np.zeros((newsizeX, newsizeY), dtype=np.float) +# Eucl_Vec = np.zeros((SimilW_full*SimilW_full), dtype=np.float) +# +# #/*Gaussian kernel */ +# cdef int count, i_n, j_n; +# cdef float val; +# count = 0 +# for i_n in range (-SimilW, SimilW +1): +# for j_n in range(-SimilW, SimilW +1): +# val = (float)(i_n*i_n + j_n*j_n)/(2*SimilW*SimilW) +# Eucl_Vec[count] = np.exp(-val) +# count = count + 1 +# +# #/*Perform padding of image A to the size of [newsizeX * newsizeY] */ +# switchpad_crop = 0; # /*padding*/ +# pad_crop(&inputData[0,0], &Ap[0,0], M, N, 0, newsizeY, newsizeX, 0, padXY, +# switchpad_crop); +# +# #/* Do PB regularization with the padded array */ +# NLM_GPU_kernel(&Ap[0,0], &Bp[0,0], &Eucl_Vec[0,0], newsizeY, newsizeX, 0, +# numdims, SearchW, SimilW, SearchW_real, +# h2, lambdaf); +# +# switchpad_crop = 1; #/*cropping*/ +# pad_crop(&Bp[0,0], &B[0,0], M, N, 0, newsizeX, newsizeY, 0, padXY, +# switchpad_crop) +# +# return B +# +#def NML3D(np.ndarray[np.float32_t, ndim=2, mode="c"] inputData, +# SearchW_real, +# SimilW, +# h, +# lambdaf): +# N = inputData.shape[0] +# M = inputData.shape[1] +# Z = inputData.shape[2] +# numdims = inputData.ndim +# +# if h < 0: +# raise ValueError('Parameter for the PB filtering function must be > 0') +# +# SearchW = SearchW_real + 2*SimilW; +# +# SearchW_full = 2*SearchW + 1; #/* the full searching window size */ +# SimilW_full = 2*SimilW + 1; #/* the full similarity window size */ +# h2 = h*h; +# +# padXY = SearchW + 2*SimilW; #/* padding sizes */ +# newsizeX = N + 2*(padXY); #/* the X size of the padded array */ +# newsizeY = M + 2*(padXY); #/* the Y size of the padded array */ +# newsizeZ = Z + 2*(padXY); #/* the Z size of the padded array */ +# +# #output +# B = np.zeros((N,M,Z), dtype=np.float ) +# #/*allocating memory for the padded arrays */ +# +# Ap = np.zeros((newsizeX, newsizeY, newsizeZ), dtype=np.float) +# Bp = np.zeros((newsizeX, newsizeY, newsizeZ), dtype=np.float) +# Eucl_Vec = np.zeros((SimilW_full*SimilW_full*SimilW_full), dtype=np.float) +# +# #/*Gaussian kernel */ +# cdef int count, i_n, j_n, k_n; +# cdef float val; +# count = 0 +# for i_n in range (-SimilW, SimilW +1): +# for j_n in range(-SimilW, SimilW +1): +# for k_n in range(-SimilW, SimilW+1): +# val = (i_n*i_n + j_n*j_n + k_n*k_n)/(2*SimilW*SimilW*SimilW) +# Eucl_Vec[count] = np.exp(-val) +# count = count + 1 +# +# #/*Perform padding of image A to the size of [newsizeX * newsizeY] */ +# switchpad_crop = 0; # /*padding*/ +# pad_crop(&inputData[0,0,0], &Ap[0,0,0], +# M, N, Z, +# newsizeY, newsizeX, newsizeZ, +# padXY, +# switchpad_crop); +# +# #/* Do PB regularization with the padded array */ +# NLM_GPU_kernel(&Ap[0,0,0], &Bp[0,0,0], &Eucl_Vec[0,0,0], +# newsizeY, newsizeX, newsizeZ, +# numdims, SearchW, SimilW, SearchW_real, +# h2, lambdaf); +# +# switchpad_crop = 1; #/*cropping*/ +# pad_crop(&Bp[0,0,0], &B[0,0,0], +# M, N, Z, +# newsizeX, newsizeY, newsizeZ, +# padXY, +# switchpad_crop) +# +# return B +# +# \ No newline at end of file -- cgit v1.2.3