diff options
| author | dkazanc <dkazanc@hotmail.com> | 2019-02-14 17:41:00 +0000 | 
|---|---|---|
| committer | dkazanc <dkazanc@hotmail.com> | 2019-02-14 17:41:00 +0000 | 
| commit | 4bcfee09d4b8fc23ea231521b4ceb7aaeecf2811 (patch) | |
| tree | 4d646ed02f36e6a636cc395f22d1ca47cae1c87a /Wrappers | |
| parent | ed8b0d3f19045cd08b954220c0407d3d4c3b79db (diff) | |
| download | regularization-4bcfee09d4b8fc23ea231521b4ceb7aaeecf2811.tar.gz regularization-4bcfee09d4b8fc23ea231521b4ceb7aaeecf2811.tar.bz2 regularization-4bcfee09d4b8fc23ea231521b4ceb7aaeecf2811.tar.xz regularization-4bcfee09d4b8fc23ea231521b4ceb7aaeecf2811.zip  | |
first TGVD version
Diffstat (limited to 'Wrappers')
| -rw-r--r-- | Wrappers/Matlab/demos/demoMatlab_3Ddenoise.m | 15 | ||||
| -rw-r--r-- | Wrappers/Matlab/demos/demoMatlab_denoise.m | 16 | ||||
| -rw-r--r-- | Wrappers/Matlab/mex_compile/regularisers_CPU/TGV.c | 29 | 
3 files changed, 37 insertions, 23 deletions
diff --git a/Wrappers/Matlab/demos/demoMatlab_3Ddenoise.m b/Wrappers/Matlab/demos/demoMatlab_3Ddenoise.m index 5cc47b3..23cda32 100644 --- a/Wrappers/Matlab/demos/demoMatlab_3Ddenoise.m +++ b/Wrappers/Matlab/demos/demoMatlab_3Ddenoise.m @@ -2,11 +2,13 @@  clear; close all  Path1 = sprintf(['..' filesep 'mex_compile' filesep 'installed'], 1i);  Path2 = sprintf(['..' filesep '..' filesep '..' filesep 'data' filesep], 1i); +Path3 = sprintf(['..' filesep 'supp'], 1i);  addpath(Path1);  addpath(Path2); +addpath(Path3);  N = 512;  -slices = 15; +slices = 7;  vol3D = zeros(N,N,slices, 'single');  Ideal3D = zeros(N,N,slices, 'single');  Im = double(imread('lena_gray_512.tif'))/255;  % loading image @@ -131,7 +133,16 @@ figure; imshow(u_diff4(:,:,7), [0 1]); title('Diffusion 4thO denoised volume (CP  % fprintf('%s %f \n', 'RMSE error for Anis.Diff of 4th order is:', rmse_diff4);  % figure; imshow(u_diff4_g(:,:,7), [0 1]); title('Diffusion 4thO denoised volume (GPU)');  %% - +fprintf('Denoise using the TGV model (CPU) \n'); +lambda_TGV = 0.05; % regularisation parameter +alpha1 = 1.0; % parameter to control the first-order term +alpha0 = 2.0; % parameter to control the second-order term +iter_TGV = 40; % number of Primal-Dual iterations for TGV +tic; u_tgv = TGV(single(vol3D), lambda_TGV, alpha1, alpha0, iter_TGV, 128); toc;  +rmseTGV = RMSE(Ideal3D(:),u_tgv(:)); +fprintf('%s %f \n', 'RMSE error for TGV is:', rmseTGV); +figure; imshow(u_tgv(:,:,3), [0 1]); title('TGV denoised volume (CPU)'); +%%  %>>>>>>>>>>>>>> MULTI-CHANNEL priors <<<<<<<<<<<<<<< %  fprintf('Denoise a volume using the FGP-dTV model (CPU) \n'); diff --git a/Wrappers/Matlab/demos/demoMatlab_denoise.m b/Wrappers/Matlab/demos/demoMatlab_denoise.m index 3506cca..14d3096 100644 --- a/Wrappers/Matlab/demos/demoMatlab_denoise.m +++ b/Wrappers/Matlab/demos/demoMatlab_denoise.m @@ -60,20 +60,20 @@ figure; imshow(u_sb, [0 1]); title('SB-TV denoised image (CPU)');  % figure; imshow(u_sbG, [0 1]); title('SB-TV denoised image (GPU)');  %%  fprintf('Denoise using the TGV model (CPU) \n'); -lambda_TGV = 0.04; % regularisation parameter -alpha1 = 1; % parameter to control the first-order term -alpha0 = 0.7; % parameter to control the second-order term -iter_TGV = 500; % number of Primal-Dual iterations for TGV +lambda_TGV = 0.045; % regularisation parameter +alpha1 = 1.0; % parameter to control the first-order term +alpha0 = 2.0; % parameter to control the second-order term +iter_TGV = 2000; % number of Primal-Dual iterations for TGV  tic; u_tgv = TGV(single(u0), lambda_TGV, alpha1, alpha0, iter_TGV); toc;   rmseTGV = (RMSE(u_tgv(:),Im(:)));  fprintf('%s %f \n', 'RMSE error for TGV is:', rmseTGV);  figure; imshow(u_tgv, [0 1]); title('TGV denoised image (CPU)');  %%  % fprintf('Denoise using the TGV model (GPU) \n'); -% lambda_TGV = 0.04; % regularisation parameter -% alpha1 = 1; % parameter to control the first-order term -% alpha0 = 0.7; % parameter to control the second-order term -% iter_TGV = 500; % number of Primal-Dual iterations for TGV +% lambda_TGV = 0.045; % regularisation parameter +% alpha1 = 1.0; % parameter to control the first-order term +% alpha0 = 2.0; % parameter to control the second-order term +% iter_TGV = 2000; % number of Primal-Dual iterations for TGV  % tic; u_tgv_gpu = TGV_GPU(single(u0), lambda_TGV, alpha1, alpha0, iter_TGV); toc;   % rmseTGV_gpu = (RMSE(u_tgv_gpu(:),Im(:)));  % fprintf('%s %f \n', 'RMSE error for TGV is:', rmseTGV_gpu); diff --git a/Wrappers/Matlab/mex_compile/regularisers_CPU/TGV.c b/Wrappers/Matlab/mex_compile/regularisers_CPU/TGV.c index 5459bf5..aa4eed4 100644 --- a/Wrappers/Matlab/mex_compile/regularisers_CPU/TGV.c +++ b/Wrappers/Matlab/mex_compile/regularisers_CPU/TGV.c @@ -21,14 +21,14 @@ limitations under the License.  #include "TGV_core.h"  /* C-OMP implementation of Primal-Dual denoising method for  - * Total Generilized Variation (TGV)-L2 model [1] (2D case only) + * Total Generilized Variation (TGV)-L2 model [1] (2D/3D)   *   * Input Parameters: - * 1. Noisy image (2D) (required) - * 2. lambda - regularisation parameter (required) - * 3. parameter to control the first-order term (alpha1) (default - 1) - * 4. parameter to control the second-order term (alpha0) (default - 0.5) - * 5. Number of Chambolle-Pock (Primal-Dual) iterations (default is 300) + * 1. Noisy image/volume (2D/3D) + * 2. lambda - regularisation parameter + * 3. parameter to control the first-order term (alpha1) + * 4. parameter to control the second-order term (alpha0) + * 5. Number of Chambolle-Pock (Primal-Dual) iterations   * 6. Lipshitz constant (default is 12)   *   * Output: @@ -44,7 +44,7 @@ void mexFunction(  {      int number_of_dims, iter; -    mwSize dimX, dimY; +    mwSize dimX, dimY, dimZ;      const mwSize *dim_array;      float *Input, *Output=NULL, lambda, alpha0, alpha1, L2; @@ -55,7 +55,7 @@ void mexFunction(      /*Handling Matlab input data*/      if ((nrhs < 2) || (nrhs > 6)) mexErrMsgTxt("At least 2 parameters is required, all parameters are: Image(2D), Regularisation parameter, alpha0, alpha1, iterations number, Lipshitz Constant"); -    Input  = (float *) mxGetData(prhs[0]); /*noisy image (2D) */ +    Input  = (float *) mxGetData(prhs[0]); /*noisy image/volume */      lambda =  (float) mxGetScalar(prhs[1]); /* regularisation parameter */      alpha1 =  1.0f; /* parameter to control the first-order term */       alpha0 =  0.5f; /* parameter to control the second-order term */ @@ -69,12 +69,15 @@ void mexFunction(      if (nrhs == 6)  L2 =  (float) mxGetScalar(prhs[5]); /* Lipshitz constant */      /*Handling Matlab output data*/ -    dimX = dim_array[0]; dimY = dim_array[1]; +    dimX = dim_array[0]; dimY = dim_array[1]; dimZ = dim_array[2];      if (number_of_dims == 2) { -        Output = (float*)mxGetPr(plhs[0] = mxCreateNumericArray(2, dim_array, mxSINGLE_CLASS, mxREAL)); -        /* running the function */ -        TGV_main(Input, Output, lambda, alpha1, alpha0, iter, L2, dimX, dimY);         +        dimZ = 1; /*2D case*/ +        Output = (float*)mxGetPr(plhs[0] = mxCreateNumericArray(2, dim_array, mxSINGLE_CLASS, mxREAL));              } -    if (number_of_dims == 3) {mexErrMsgTxt("Only 2D images accepted");}        +    if (number_of_dims == 3) { +        Output = (float*)mxGetPr(plhs[0] = mxCreateNumericArray(3, dim_array, mxSINGLE_CLASS, mxREAL)); +    }        +    /* running the function */ +    TGV_main(Input, Output, lambda, alpha1, alpha0, iter, L2, dimX, dimY, dimZ);          }  | 
