summaryrefslogtreecommitdiffstats
path: root/Wrappers/Matlab
diff options
context:
space:
mode:
authorDaniil Kazantsev <dkazanc3@googlemail.com>2018-04-09 15:17:24 +0100
committerGitHub <noreply@github.com>2018-04-09 15:17:24 +0100
commit62635199f4e5a464a267ffce070ecec68bfdcfe8 (patch)
treecdc7c4469e210a52cb416b2747ca2d954da073cc /Wrappers/Matlab
parenta5b5872b76bf00023a7e7cee97e028003ccbc45e (diff)
parentb9fafd363d1d181a4a8b42ea4038924097207913 (diff)
downloadregularization-62635199f4e5a464a267ffce070ecec68bfdcfe8.tar.gz
regularization-62635199f4e5a464a267ffce070ecec68bfdcfe8.tar.bz2
regularization-62635199f4e5a464a267ffce070ecec68bfdcfe8.tar.xz
regularization-62635199f4e5a464a267ffce070ecec68bfdcfe8.zip
Merge pull request #47 from vais-ral/add3Dtests
major renaming and new 3D demos for Matlab
Diffstat (limited to 'Wrappers/Matlab')
-rw-r--r--Wrappers/Matlab/demos/demoMatlab_3Ddenoise.m44
-rw-r--r--Wrappers/Matlab/demos/demoMatlab_denoise.m8
-rw-r--r--Wrappers/Matlab/mex_compile/compileCPU_mex.m8
-rw-r--r--Wrappers/Matlab/mex_compile/compileGPU_mex.m8
-rw-r--r--Wrappers/Matlab/mex_compile/regularisers_CPU/FGP_TV.c (renamed from Wrappers/Matlab/mex_compile/regularizers_CPU/FGP_TV.c)0
-rw-r--r--Wrappers/Matlab/mex_compile/regularisers_CPU/FGP_TV.c~91
-rw-r--r--Wrappers/Matlab/mex_compile/regularisers_CPU/ROF_TV.c (renamed from Wrappers/Matlab/mex_compile/regularizers_CPU/ROF_TV.c)0
-rw-r--r--Wrappers/Matlab/mex_compile/regularisers_GPU/FGP_TV_GPU.cpp (renamed from Wrappers/Matlab/mex_compile/regularizers_GPU/FGP_TV_GPU.cpp)0
-rw-r--r--Wrappers/Matlab/mex_compile/regularisers_GPU/ROF_TV_GPU.cpp (renamed from Wrappers/Matlab/mex_compile/regularizers_GPU/ROF_TV_GPU.cpp)0
9 files changed, 147 insertions, 12 deletions
diff --git a/Wrappers/Matlab/demos/demoMatlab_3Ddenoise.m b/Wrappers/Matlab/demos/demoMatlab_3Ddenoise.m
new file mode 100644
index 0000000..f5c3ad1
--- /dev/null
+++ b/Wrappers/Matlab/demos/demoMatlab_3Ddenoise.m
@@ -0,0 +1,44 @@
+% Volume (3D) denoising demo using CCPi-RGL
+
+addpath('../mex_compile/installed');
+addpath('../../../data/');
+
+N = 256;
+slices = 30;
+vol3D = zeros(N,N,slices, 'single');
+Im = double(imread('lena_gray_256.tif'))/255; % loading image
+for i = 1:slices
+vol3D(:,:,i) = Im + .05*randn(size(Im));
+end
+vol3D(vol3D < 0) = 0;
+figure; imshow(vol3D(:,:,15), [0 1]); title('Noisy image');
+
+%%
+fprintf('Denoise using ROF-TV model (CPU) \n');
+lambda_rof = 0.03; % regularisation parameter
+tau_rof = 0.0025; % time-marching constant
+iter_rof = 1000; % number of ROF iterations
+tic; u_rof = ROF_TV(single(vol3D), lambda_rof, iter_rof, tau_rof); toc;
+figure; imshow(u_rof(:,:,15), [0 1]); title('ROF-TV denoised volume (CPU)');
+%%
+% fprintf('Denoise using ROF-TV model (GPU) \n');
+% lambda_rof = 0.03; % regularisation parameter
+% tau_rof = 0.0025; % time-marching constant
+% iter_rof = 1000; % number of ROF iterations
+% tic; u_rofG = ROF_TV_GPU(single(vol3D), lambda_rof, iter_rof, tau_rof); toc;
+% figure; imshow(u_rofG(:,:,15), [0 1]); title('ROF-TV denoised volume (GPU)');
+%%
+fprintf('Denoise using FGP-TV model (CPU) \n');
+lambda_fgp = 0.03; % regularisation parameter
+iter_fgp = 500; % number of FGP iterations
+epsil_tol = 1.0e-05; % tolerance
+tic; u_fgp = FGP_TV(single(vol3D), lambda_fgp, iter_fgp, epsil_tol); toc;
+figure; imshow(u_fgp(:,:,15), [0 1]); title('FGP-TV denoised volume (CPU)');
+%%
+% fprintf('Denoise using FGP-TV model (GPU) \n');
+% lambda_fgp = 0.03; % regularisation parameter
+% iter_fgp = 500; % number of FGP iterations
+% epsil_tol = 1.0e-05; % tolerance
+% tic; u_fgpG = FGP_TV_GPU(single(vol3D), lambda_fgp, iter_fgp, epsil_tol); toc;
+% figure; imshow(u_fgpG(:,:,15), [0 1]); title('FGP-TV denoised volume (GPU)');
+%% \ No newline at end of file
diff --git a/Wrappers/Matlab/demos/demoMatlab_denoise.m b/Wrappers/Matlab/demos/demoMatlab_denoise.m
index 7258e5e..ab4e95d 100644
--- a/Wrappers/Matlab/demos/demoMatlab_denoise.m
+++ b/Wrappers/Matlab/demos/demoMatlab_denoise.m
@@ -9,28 +9,28 @@ figure; imshow(u0, [0 1]); title('Noisy image');
%%
fprintf('Denoise using ROF-TV model (CPU) \n');
-lambda_rof = 0.03; % regularization parameter
+lambda_rof = 0.03; % regularisation parameter
tau_rof = 0.0025; % time-marching constant
iter_rof = 2000; % number of ROF iterations
tic; u_rof = ROF_TV(single(u0), lambda_rof, iter_rof, tau_rof); toc;
figure; imshow(u_rof, [0 1]); title('ROF-TV denoised image (CPU)');
%%
% fprintf('Denoise using ROF-TV model (GPU) \n');
-% lambda_rof = 0.03; % regularization parameter
+% lambda_rof = 0.03; % regularisation parameter
% tau_rof = 0.0025; % time-marching constant
% iter_rof = 2000; % number of ROF iterations
% tic; u_rofG = ROF_TV_GPU(single(u0), lambda_rof, iter_rof, tau_rof); toc;
% figure; imshow(u_rofG, [0 1]); title('ROF-TV denoised image (GPU)');
%%
fprintf('Denoise using FGP-TV model (CPU) \n');
-lambda_fgp = 0.03; % regularization parameter
+lambda_fgp = 0.03; % regularisation parameter
iter_fgp = 1000; % number of FGP iterations
epsil_tol = 1.0e-05; % tolerance
tic; u_fgp = FGP_TV(single(u0), lambda_fgp, iter_fgp, epsil_tol); toc;
figure; imshow(u_fgp, [0 1]); title('FGP-TV denoised image (CPU)');
%%
% fprintf('Denoise using FGP-TV model (GPU) \n');
-% lambda_fgp = 0.03; % regularization parameter
+% lambda_fgp = 0.03; % regularisation parameter
% iter_fgp = 1000; % number of FGP iterations
% epsil_tol = 1.0e-05; % tolerance
% tic; u_fgpG = FGP_TV_GPU(single(u0), lambda_fgp, iter_fgp, epsil_tol); toc;
diff --git a/Wrappers/Matlab/mex_compile/compileCPU_mex.m b/Wrappers/Matlab/mex_compile/compileCPU_mex.m
index fcee53a..8da81ad 100644
--- a/Wrappers/Matlab/mex_compile/compileCPU_mex.m
+++ b/Wrappers/Matlab/mex_compile/compileCPU_mex.m
@@ -1,10 +1,10 @@
% execute this mex file in Matlab once
-copyfile ../../../Core/regularizers_CPU/ regularizers_CPU/
-copyfile ../../../Core/CCPiDefines.h regularizers_CPU/
+copyfile ../../../Core/regularisers_CPU/ regularisers_CPU/
+copyfile ../../../Core/CCPiDefines.h regularisers_CPU/
-cd regularizers_CPU/
+cd regularisers_CPU/
-fprintf('%s \n', 'Compiling CPU regularizers...');
+fprintf('%s \n', 'Compiling CPU regularisers...');
mex ROF_TV.c ROF_TV_core.c utils.c CFLAGS="\$CFLAGS -fopenmp -Wall -std=c99" LDFLAGS="\$LDFLAGS -fopenmp"
movefile ROF_TV.mex* ../installed/
diff --git a/Wrappers/Matlab/mex_compile/compileGPU_mex.m b/Wrappers/Matlab/mex_compile/compileGPU_mex.m
index df29a3e..45236fa 100644
--- a/Wrappers/Matlab/mex_compile/compileGPU_mex.m
+++ b/Wrappers/Matlab/mex_compile/compileGPU_mex.m
@@ -9,12 +9,12 @@
% tested on Ubuntu 16.04/MATLAB 2016b
-copyfile ../../../Core/regularizers_GPU/ regularizers_GPU/
-copyfile ../../../Core/CCPiDefines.h regularizers_GPU/
+copyfile ../../../Core/regularisers_GPU/ regularisers_GPU/
+copyfile ../../../Core/CCPiDefines.h regularisers_GPU/
-cd regularizers_GPU/
+cd regularisers_GPU/
-fprintf('%s \n', 'Compiling GPU regularizers (CUDA)...');
+fprintf('%s \n', 'Compiling GPU regularisers (CUDA)...');
!/usr/local/cuda/bin/nvcc -O0 -c TV_ROF_GPU_core.cu -Xcompiler -fPIC -I~/SOFT/MATLAB9/extern/include/
mex -g -I/usr/local/cuda-7.5/include -L/usr/local/cuda-7.5/lib64 -lcudart -lcufft -lmwgpu ROF_TV_GPU.cpp TV_ROF_GPU_core.o
movefile ROF_TV_GPU.mex* ../installed/
diff --git a/Wrappers/Matlab/mex_compile/regularizers_CPU/FGP_TV.c b/Wrappers/Matlab/mex_compile/regularisers_CPU/FGP_TV.c
index ba06cc7..ba06cc7 100644
--- a/Wrappers/Matlab/mex_compile/regularizers_CPU/FGP_TV.c
+++ b/Wrappers/Matlab/mex_compile/regularisers_CPU/FGP_TV.c
diff --git a/Wrappers/Matlab/mex_compile/regularisers_CPU/FGP_TV.c~ b/Wrappers/Matlab/mex_compile/regularisers_CPU/FGP_TV.c~
new file mode 100644
index 0000000..30d61cd
--- /dev/null
+++ b/Wrappers/Matlab/mex_compile/regularisers_CPU/FGP_TV.c~
@@ -0,0 +1,91 @@
+/*
+ * This work is part of the Core Imaging Library developed by
+ * Visual Analytics and Imaging System Group of the Science Technology
+ * Facilities Council, STFC
+ *
+ * Copyright 2017 Daniil Kazantsev
+ * Copyright 2017 Srikanth Nagella, Edoardo Pasca
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "matrix.h"
+#include "mex.h"
+#include "FGP_TV_core.h"
+
+/* C-OMP implementation of FGP-TV [1] denoising/regularization model (2D/3D case)
+ *
+ * Input Parameters:
+ * 1. Noisy image/volume
+ * 2. lambdaPar - regularization parameter
+ * 3. Number of iterations
+ * 4. eplsilon: tolerance constant
+ * 5. TV-type: methodTV - 'iso' (0) or 'l1' (1)
+ * 6. nonneg: 'nonnegativity (0 is OFF by default)
+ * 7. print information: 0 (off) or 1 (on)
+ *
+ * Output:
+ * [1] Filtered/regularized image
+ *
+ * This function is based on the Matlab's code and paper by
+ * [1] Amir Beck and Marc Teboulle, "Fast Gradient-Based Algorithms for Constrained Total Variation Image Denoising and Deblurring Problems"
+ */
+
+
+void mexFunction(
+ int nlhs, mxArray *plhs[],
+ int nrhs, const mxArray *prhs[])
+
+{
+ int number_of_dims, iter, dimX, dimY, dimZ, methTV, printswitch;
+ const int *dim_array;
+ float *Input, *Output, lambda, epsil;
+
+ number_of_dims = mxGetNumberOfDimensions(prhs[0]);
+ dim_array = mxGetDimensions(prhs[0]);
+
+ /*Handling Matlab input data*/
+ if ((nrhs < 2) || (nrhs > 6)) mexErrMsgTxt("At least 2 parameters is required: Image(2D/3D), Regularization parameter. The full list of parameters: Image(2D/3D), Regularization parameter, iterations number, tolerance, penalty type ('iso' or 'l1'), print switch");
+
+ Input = (float *) mxGetData(prhs[0]); /*noisy image (2D/3D) */
+ lambda = (float) mxGetScalar(prhs[1]); /* regularization parameter */
+ iter = 300; /* default iterations number */
+ epsil = 0.0001; /* default tolerance constant */
+ methTV = 0; /* default isotropic TV penalty */
+ printswitch = 0; /*default print is switched off - 0 */
+
+ if (mxGetClassID(prhs[0]) != mxSINGLE_CLASS) {mexErrMsgTxt("The input image must be in a single precision"); }
+
+ if ((nrhs == 3) || (nrhs == 4) || (nrhs == 5) || (nrhs == 6)) iter = (int) mxGetScalar(prhs[2]); /* iterations number */
+ if ((nrhs == 4) || (nrhs == 5) || (nrhs == 6)) epsil = (float) mxGetScalar(prhs[3]); /* tolerance constant */
+ if ((nrhs == 5) || (nrhs == 6)) {
+ char *penalty_type;
+ penalty_type = mxArrayToString(prhs[4]); /* choosing TV penalty: 'iso' or 'l1', 'iso' is the default */
+ if ((strcmp(penalty_type, "l1") != 0) && (strcmp(penalty_type, "iso") != 0)) mexErrMsgTxt("Choose TV type: 'iso' or 'l1',");
+ if (strcmp(penalty_type, "l1") == 0) methTV = 1; /* enable 'l1' penalty */
+ mxFree(penalty_type);
+ }
+ if (nrhs == 6) {
+ printswitch = (int) mxGetScalar(prhs[5]);
+ if ((printswitch != 0) || (printswitch != 1)) {mexErrMsgTxt("Print can be enabled by choosing 1 or off - 0"); }
+ }
+
+ /*Handling Matlab output data*/
+ dimX = dim_array[0]; dimY = dim_array[1]; dimZ = dim_array[2];
+
+ if (number_of_dims == 2) {
+ dimZ = 1; /*2D case*/
+ Output = (float*)mxGetPr(plhs[0] = mxCreateNumericArray(2, dim_array, mxSINGLE_CLASS, mxREAL));
+ }
+ if (number_of_dims == 3) Output = (float*)mxGetPr(plhs[0] = mxCreateNumericArray(3, dim_array, mxSINGLE_CLASS, mxREAL));
+
+
+ TV_FGP_CPU_main(Input, Output, lambda, iter, epsil, methTV, nonneg, printswitch, dimX, dimY, dimZ)
+}
diff --git a/Wrappers/Matlab/mex_compile/regularizers_CPU/ROF_TV.c b/Wrappers/Matlab/mex_compile/regularisers_CPU/ROF_TV.c
index 6b9e1ea..6b9e1ea 100644
--- a/Wrappers/Matlab/mex_compile/regularizers_CPU/ROF_TV.c
+++ b/Wrappers/Matlab/mex_compile/regularisers_CPU/ROF_TV.c
diff --git a/Wrappers/Matlab/mex_compile/regularizers_GPU/FGP_TV_GPU.cpp b/Wrappers/Matlab/mex_compile/regularisers_GPU/FGP_TV_GPU.cpp
index 9ed9ae0..9ed9ae0 100644
--- a/Wrappers/Matlab/mex_compile/regularizers_GPU/FGP_TV_GPU.cpp
+++ b/Wrappers/Matlab/mex_compile/regularisers_GPU/FGP_TV_GPU.cpp
diff --git a/Wrappers/Matlab/mex_compile/regularizers_GPU/ROF_TV_GPU.cpp b/Wrappers/Matlab/mex_compile/regularisers_GPU/ROF_TV_GPU.cpp
index 7bbe3af..7bbe3af 100644
--- a/Wrappers/Matlab/mex_compile/regularizers_GPU/ROF_TV_GPU.cpp
+++ b/Wrappers/Matlab/mex_compile/regularisers_GPU/ROF_TV_GPU.cpp