diff options
author | dkazanc <dkazanc@hotmail.com> | 2019-04-16 17:21:04 +0100 |
---|---|---|
committer | dkazanc <dkazanc@hotmail.com> | 2019-04-16 17:21:04 +0100 |
commit | 9c57162fef5822369c09b7b36b3637dae5e397c0 (patch) | |
tree | 48ce301b50ade615ae8544e6f5dd82caae67069d /src/Python | |
parent | 6040e1e1f501f501e8da628b065fd16d35133519 (diff) | |
download | regularization-9c57162fef5822369c09b7b36b3637dae5e397c0.tar.gz regularization-9c57162fef5822369c09b7b36b3637dae5e397c0.tar.bz2 regularization-9c57162fef5822369c09b7b36b3637dae5e397c0.tar.xz regularization-9c57162fef5822369c09b7b36b3637dae5e397c0.zip |
succesfull variable regulariser implementation
Diffstat (limited to 'src/Python')
-rw-r--r-- | src/Python/src/cpu_regularisers.pyx | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/src/Python/src/cpu_regularisers.pyx b/src/Python/src/cpu_regularisers.pyx index a63ecfa..a2c4c32 100644 --- a/src/Python/src/cpu_regularisers.pyx +++ b/src/Python/src/cpu_regularisers.pyx @@ -18,7 +18,7 @@ import cython import numpy as np cimport numpy as np -cdef extern float TV_ROF_CPU_main(float *Input, float *Output, float *infovector, float lambdaPar, int iterationsNumb, float tau, float epsil, int dimX, int dimY, int dimZ); +cdef extern float TV_ROF_CPU_main(float *Input, float *Output, float *infovector, float *lambdaPar, int arrayscal, int iterationsNumb, float tau, float epsil, int dimX, int dimY, int dimZ); cdef extern float TV_FGP_CPU_main(float *Input, float *Output, float *infovector, float lambdaPar, int iterationsNumb, float epsil, int methodTV, int nonneg, int dimX, int dimY, int dimZ); cdef extern float SB_TV_CPU_main(float *Input, float *Output, float *infovector, float mu, int iter, float epsil, int methodTV, int dimX, int dimY, int dimZ); cdef extern float LLT_ROF_CPU_main(float *Input, float *Output, float *infovector, float lambdaROF, float lambdaLLT, int iterationsNumb, float tau, float epsil, int dimX, int dimY, int dimZ); @@ -45,26 +45,33 @@ def TV_ROF_CPU(inputData, regularisation_parameter, iterationsNumb, marching_ste return TV_ROF_3D(inputData, regularisation_parameter, iterationsNumb, marching_step_parameter,tolerance_param) def TV_ROF_2D(np.ndarray[np.float32_t, ndim=2, mode="c"] inputData, - float regularisation_parameter, + regularisation_parameter, int iterationsNumb, float marching_step_parameter, float tolerance_param): cdef long dims[2] dims[0] = inputData.shape[0] dims[1] = inputData.shape[1] - + cdef float lambdareg + cdef np.ndarray[np.float32_t, ndim=2, mode="c"] reg cdef np.ndarray[np.float32_t, ndim=2, mode="c"] outputData = \ np.zeros([dims[0],dims[1]], dtype='float32') cdef np.ndarray[np.float32_t, ndim=1, mode="c"] infovec = \ np.ones([2], dtype='float32') # Run ROF iterations for 2D data - TV_ROF_CPU_main(&inputData[0,0], &outputData[0,0], &infovec[0], regularisation_parameter, iterationsNumb, marching_step_parameter, tolerance_param, dims[1], dims[0], 1) - + # TV_ROF_CPU_main(&inputData[0,0], &outputData[0,0], &infovec[0], regularisation_parameter, iterationsNumb, marching_step_parameter, tolerance_param, dims[1], dims[0], 1) + # Run ROF iterations for 2D data + if isinstance (regularisation_parameter, np.ndarray): + reg = regularisation_parameter.copy() + TV_ROF_CPU_main(&inputData[0,0], &outputData[0,0], &infovec[0], ®[0,0], 1, iterationsNumb, marching_step_parameter, tolerance_param, dims[1], dims[0], 1) + else: # supposedly this would be a float + lambdareg = regularisation_parameter; + TV_ROF_CPU_main(&inputData[0,0], &outputData[0,0], &infovec[0], &lambdareg, 0, iterationsNumb, marching_step_parameter, tolerance_param, dims[1], dims[0], 1) return (outputData,infovec) def TV_ROF_3D(np.ndarray[np.float32_t, ndim=3, mode="c"] inputData, - float regularisation_parameter, + regularisation_parameter, int iterationsNumb, float marching_step_parameter, float tolerance_param): @@ -72,15 +79,21 @@ def TV_ROF_3D(np.ndarray[np.float32_t, ndim=3, mode="c"] inputData, dims[0] = inputData.shape[0] dims[1] = inputData.shape[1] dims[2] = inputData.shape[2] - + cdef float lambdareg + cdef np.ndarray[np.float32_t, ndim=3, mode="c"] reg cdef np.ndarray[np.float32_t, ndim=3, mode="c"] outputData = \ np.zeros([dims[0],dims[1],dims[2]], dtype='float32') cdef np.ndarray[np.float32_t, ndim=1, mode="c"] infovec = \ np.ones([2], dtype='float32') # Run ROF iterations for 3D data - TV_ROF_CPU_main(&inputData[0,0,0], &outputData[0,0,0], &infovec[0], regularisation_parameter, iterationsNumb, marching_step_parameter, tolerance_param, dims[2], dims[1], dims[0]) - + #TV_ROF_CPU_main(&inputData[0,0,0], &outputData[0,0,0], &infovec[0], regularisation_parameter, iterationsNumb, marching_step_parameter, tolerance_param, dims[2], dims[1], dims[0]) + if isinstance (regularisation_parameter, np.ndarray): + reg = regularisation_parameter.copy() + TV_ROF_CPU_main(&inputData[0,0,0], &outputData[0,0,0], &infovec[0], ®[0,0,0], 1, iterationsNumb, marching_step_parameter, tolerance_param, dims[2], dims[1], dims[0]) + else: # supposedly this would be a float + lambdareg = regularisation_parameter + TV_ROF_CPU_main(&inputData[0,0,0], &outputData[0,0,0], &infovec[0], &lambdareg, 0, iterationsNumb, marching_step_parameter, tolerance_param, dims[2], dims[1], dims[0]) return (outputData,infovec) #****************************************************************# |