diff options
-rw-r--r-- | CMakeLists.txt | 6 | ||||
-rw-r--r-- | Core/CCPiDefines.h | 2 | ||||
-rw-r--r-- | Core/CMakeLists.txt | 36 | ||||
-rw-r--r-- | Core/regularisers_CPU/FGP_TV_core.c (renamed from Core/regularizers_CPU/FGP_TV_core.c) | 2 | ||||
-rw-r--r-- | Core/regularisers_CPU/FGP_TV_core.h (renamed from Core/regularizers_CPU/FGP_TV_core.h) | 0 | ||||
-rw-r--r-- | Core/regularisers_CPU/ROF_TV_core.c (renamed from Core/regularizers_CPU/ROF_TV_core.c) | 0 | ||||
-rw-r--r-- | Core/regularisers_CPU/ROF_TV_core.h (renamed from Core/regularizers_CPU/ROF_TV_core.h) | 0 | ||||
-rw-r--r-- | Core/regularisers_CPU/utils.c (renamed from Core/regularizers_CPU/utils.c) | 0 | ||||
-rw-r--r-- | Core/regularisers_CPU/utils.h (renamed from Core/regularizers_CPU/utils.h) | 0 | ||||
-rwxr-xr-x | Core/regularisers_GPU/TV_FGP_GPU_core.cu (renamed from Core/regularizers_GPU/TV_FGP_GPU_core.cu) | 2 | ||||
-rwxr-xr-x | Core/regularisers_GPU/TV_FGP_GPU_core.h (renamed from Core/regularizers_GPU/TV_FGP_GPU_core.h) | 0 | ||||
-rwxr-xr-x | Core/regularisers_GPU/TV_ROF_GPU_core.cu (renamed from Core/regularizers_GPU/TV_ROF_GPU_core.cu) | 0 | ||||
-rwxr-xr-x | Core/regularisers_GPU/TV_ROF_GPU_core.h (renamed from Core/regularizers_GPU/TV_ROF_GPU_core.h) | 0 | ||||
-rw-r--r-- | Readme.md | 14 | ||||
-rw-r--r-- | Wrappers/Matlab/demos/demoMatlab_3Ddenoise.m | 44 | ||||
-rw-r--r-- | Wrappers/Matlab/demos/demoMatlab_denoise.m | 8 | ||||
-rw-r--r-- | Wrappers/Matlab/mex_compile/compileCPU_mex.m | 8 | ||||
-rw-r--r-- | Wrappers/Matlab/mex_compile/compileGPU_mex.m | 8 | ||||
-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 | ||||
-rw-r--r-- | Wrappers/Python/CMakeLists.txt | 20 | ||||
-rw-r--r-- | Wrappers/Python/ccpi/filters/regularisers.py (renamed from Wrappers/Python/ccpi/filters/regularizers.py) | 18 | ||||
-rw-r--r-- | Wrappers/Python/conda-recipe/bld.bat | 4 | ||||
-rw-r--r-- | Wrappers/Python/conda-recipe/build.sh | 4 | ||||
-rw-r--r-- | Wrappers/Python/conda-recipe/meta.yaml | 6 | ||||
-rw-r--r-- | Wrappers/Python/demo/test_cpu_regularisers.py (renamed from Wrappers/Python/demo/test_cpu_regularizers.py) | 177 | ||||
-rw-r--r-- | Wrappers/Python/fista-recipe/bld.bat | 13 | ||||
-rw-r--r-- | Wrappers/Python/fista-recipe/build.sh | 10 | ||||
-rw-r--r-- | Wrappers/Python/fista-recipe/meta.yaml | 29 | ||||
-rw-r--r-- | Wrappers/Python/setup-fista.py | 27 | ||||
-rw-r--r-- | Wrappers/Python/setup-regularisers.py.in (renamed from Wrappers/Python/setup-regularizers.py.in) | 12 | ||||
-rw-r--r-- | Wrappers/Python/src/cpu_regularisers.pyx (renamed from Wrappers/Python/src/cpu_regularizers.pyx) | 28 | ||||
-rw-r--r-- | Wrappers/Python/src/gpu_regularisers.pyx (renamed from Wrappers/Python/src/gpu_regularizers.pyx) | 28 | ||||
-rw-r--r-- | Wrappers/Python/test/test_cpu_regularisers.py (renamed from Wrappers/Python/test/test_cpu_regularizers.py) | 0 | ||||
-rw-r--r-- | Wrappers/Python/test/test_cpu_vs_gpu_regularisers.py (renamed from Wrappers/Python/test/test_cpu_vs_gpu_regularizers.py) | 18 | ||||
-rw-r--r-- | Wrappers/Python/test/test_gpu_regularisers.py (renamed from Wrappers/Python/test/test_gpu_regularizers.py) | 110 | ||||
-rw-r--r-- | Wrappers/Python/test/test_regularisers_3d.py (renamed from Wrappers/Python/test/test_regularizers_3d.py) | 0 | ||||
-rw-r--r-- | Wrappers/Python/test/test_regularizers.py | 395 | ||||
-rw-r--r-- | recipes/regularisers/bld.bat (renamed from recipes/regularizers/bld.bat) | 0 | ||||
-rw-r--r-- | recipes/regularisers/build.sh (renamed from recipes/regularizers/build.sh) | 0 | ||||
-rw-r--r-- | recipes/regularisers/meta.yaml (renamed from recipes/regularizers/meta.yaml) | 4 |
44 files changed, 262 insertions, 862 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index e39dacd..6d931ee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,12 +14,12 @@ cmake_minimum_required (VERSION 3.0) -project(FISTA) +project(RGL) #https://stackoverflow.com/questions/13298504/using-cmake-with-setup-py # The version number. -set (FISTA_VERSION_MAJOR 1) -set (FISTA_VERSION_MINOR 0) +set (RGL_VERSION_MAJOR 1) +set (RGL_VERSION_MINOR 0) set (CIL_VERSION_MAJOR 0) set (CIL_VERSION_MINOR 9) diff --git a/Core/CCPiDefines.h b/Core/CCPiDefines.h index c6ddc7d..d3038f9 100644 --- a/Core/CCPiDefines.h +++ b/Core/CCPiDefines.h @@ -3,7 +3,7 @@ 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 Srikanth Nagella, Edoardo Pasca +Copyright 2017 Srikanth Nagella, Edoardo Pasca, Daniil Kazantsev Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/CMakeLists.txt b/Core/CMakeLists.txt index f53c538..3bc5ceb 100644 --- a/Core/CMakeLists.txt +++ b/Core/CMakeLists.txt @@ -1,7 +1,7 @@ # Copyright 2018 Edoardo Pasca cmake_minimum_required (VERSION 3.0) -project(RegularizerLibrary) +project(RGL) #https://stackoverflow.com/questions/13298504/using-cmake-with-setup-py # The version number. @@ -41,8 +41,8 @@ if (OPENMP_FOUND) set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS} ${OpenMP_CXX_FLAGS}") endif() -## Build the regularizers package as a library -message("Creating Regularizers as shared library") +## Build the regularisers package as a library +message("Creating Regularisers as a shared library") message("CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}") @@ -76,26 +76,26 @@ elseif(UNIX) endif() message("CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}") -## Build the regularizers package as a library -message("Adding regularizers as shared library") +## Build the regularisers package as a library +message("Adding regularisers as a shared library") #set(CMAKE_C_COMPILER /apps/pgi/linux86-64/17.4/bin/pgcc) #set(CMAKE_C_FLAGS "-acc -Minfo -ta=tesla:cc20 -openmp") #set(CMAKE_C_FLAGS "-acc -Minfo -ta=multicore -openmp -fPIC") add_library(cilreg SHARED - ${CMAKE_CURRENT_SOURCE_DIR}/regularizers_CPU/FGP_TV_core.c - #${CMAKE_CURRENT_SOURCE_DIR}/regularizers_CPU/LLT_model_core.c - #${CMAKE_CURRENT_SOURCE_DIR}/regularizers_CPU/PatchBased_Regul_core.c - #${CMAKE_CURRENT_SOURCE_DIR}/regularizers_CPU/SplitBregman_TV_core.c - #${CMAKE_CURRENT_SOURCE_DIR}/regularizers_CPU/TGV_PD_core.c - ${CMAKE_CURRENT_SOURCE_DIR}/regularizers_CPU/ROF_TV_core.c - ${CMAKE_CURRENT_SOURCE_DIR}/regularizers_CPU/utils.c + ${CMAKE_CURRENT_SOURCE_DIR}/regularisers_CPU/FGP_TV_core.c + #${CMAKE_CURRENT_SOURCE_DIR}/regularisers_CPU/LLT_model_core.c + #${CMAKE_CURRENT_SOURCE_DIR}/regularisers_CPU/PatchBased_Regul_core.c + #${CMAKE_CURRENT_SOURCE_DIR}/regularisers_CPU/SplitBregman_TV_core.c + #${CMAKE_CURRENT_SOURCE_DIR}/regularisers_CPU/TGV_PD_core.c + ${CMAKE_CURRENT_SOURCE_DIR}/regularisers_CPU/ROF_TV_core.c + ${CMAKE_CURRENT_SOURCE_DIR}/regularisers_CPU/utils.c ) target_link_libraries(cilreg ${EXTRA_LIBRARIES} ) include_directories(cilreg PUBLIC ${LIBRARY_INC}/include ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/regularizers_CPU/ ) + ${CMAKE_CURRENT_SOURCE_DIR}/regularisers_CPU/ ) #GENERATE_EXPORT_HEADER( cilreg # BASE_NAME cilreg # EXPORT_MACRO_NAME CCPiCore_EXPORTS @@ -120,15 +120,15 @@ message ("I'd install into ${CMAKE_INSTALL_PREFIX} lib bin") ) endif() -# GPU Regularizers +# GPU Regularisers find_package(CUDA) if (CUDA_FOUND) set(CUDA_NVCC_FLAGS "-Xcompiler -fPIC -shared -D_FORCE_INLINES") message("CUDA FLAGS ${CUDA_NVCC_FLAGS}") CUDA_ADD_LIBRARY(cilregcuda SHARED - ${CMAKE_CURRENT_SOURCE_DIR}/regularizers_GPU/TV_ROF_GPU_core.cu - ${CMAKE_CURRENT_SOURCE_DIR}/regularizers_GPU/TV_FGP_GPU_core.cu + ${CMAKE_CURRENT_SOURCE_DIR}/regularisers_GPU/TV_ROF_GPU_core.cu + ${CMAKE_CURRENT_SOURCE_DIR}/regularisers_GPU/TV_FGP_GPU_core.cu ) if (UNIX) message ("I'd install into ${CMAKE_INSTALL_PREFIX}/lib") @@ -149,6 +149,6 @@ else() endif() -#add_executable(regularizer_test ${CMAKE_CURRENT_SOURCE_DIR}/test/test_regularizer.cpp) +#add_executable(regulariser_test ${CMAKE_CURRENT_SOURCE_DIR}/test/test_regulariser.cpp) -#target_link_libraries (regularizer_test LINK_PUBLIC regularizers_lib) +#target_link_libraries (regulariser_test LINK_PUBLIC regularisers_lib) diff --git a/Core/regularizers_CPU/FGP_TV_core.c b/Core/regularisers_CPU/FGP_TV_core.c index 462c3f7..15bb45c 100644 --- a/Core/regularizers_CPU/FGP_TV_core.c +++ b/Core/regularisers_CPU/FGP_TV_core.c @@ -255,7 +255,7 @@ float Grad_func3D(float *P1, float *P2, float *P3, float *D, float *R1, float *R { float val1, val2, val3, multip; int i,j,k, index; - multip = (1.0f/(8.0f*lambda)); + multip = (1.0f/(26.0f*lambda)); #pragma omp parallel for shared(P1,P2,P3,D,R1,R2,R3,multip) private(index,i,j,k,val1,val2,val3) for(i=0; i<dimX; i++) { for(j=0; j<dimY; j++) { diff --git a/Core/regularizers_CPU/FGP_TV_core.h b/Core/regularisers_CPU/FGP_TV_core.h index 37e32f7..37e32f7 100644 --- a/Core/regularizers_CPU/FGP_TV_core.h +++ b/Core/regularisers_CPU/FGP_TV_core.h diff --git a/Core/regularizers_CPU/ROF_TV_core.c b/Core/regularisers_CPU/ROF_TV_core.c index 9ffb905..9ffb905 100644 --- a/Core/regularizers_CPU/ROF_TV_core.c +++ b/Core/regularisers_CPU/ROF_TV_core.c diff --git a/Core/regularizers_CPU/ROF_TV_core.h b/Core/regularisers_CPU/ROF_TV_core.h index 14daf58..14daf58 100644 --- a/Core/regularizers_CPU/ROF_TV_core.h +++ b/Core/regularisers_CPU/ROF_TV_core.h diff --git a/Core/regularizers_CPU/utils.c b/Core/regularisers_CPU/utils.c index 0c02c45..0c02c45 100644 --- a/Core/regularizers_CPU/utils.c +++ b/Core/regularisers_CPU/utils.c diff --git a/Core/regularizers_CPU/utils.h b/Core/regularisers_CPU/utils.h index bd76bf0..bd76bf0 100644 --- a/Core/regularizers_CPU/utils.h +++ b/Core/regularisers_CPU/utils.h diff --git a/Core/regularizers_GPU/TV_FGP_GPU_core.cu b/Core/regularisers_GPU/TV_FGP_GPU_core.cu index 61097fb..314a367 100755 --- a/Core/regularizers_GPU/TV_FGP_GPU_core.cu +++ b/Core/regularisers_GPU/TV_FGP_GPU_core.cu @@ -493,7 +493,7 @@ extern "C" void TV_FGP_GPU_main(float *Input, float *Output, float lambdaPar, in cudaMemset(R2, 0, ImSize*sizeof(float)); cudaMemset(R3, 0, ImSize*sizeof(float)); /********************** Run CUDA 3D kernel here ********************/ - multip = (1.0f/(8.0f*lambdaPar)); + multip = (1.0f/(26.0f*lambdaPar)); /* The main kernel */ for (i = 0; i < iter; i++) { diff --git a/Core/regularizers_GPU/TV_FGP_GPU_core.h b/Core/regularisers_GPU/TV_FGP_GPU_core.h index 107d243..107d243 100755 --- a/Core/regularizers_GPU/TV_FGP_GPU_core.h +++ b/Core/regularisers_GPU/TV_FGP_GPU_core.h diff --git a/Core/regularizers_GPU/TV_ROF_GPU_core.cu b/Core/regularisers_GPU/TV_ROF_GPU_core.cu index 1a54d02..1a54d02 100755 --- a/Core/regularizers_GPU/TV_ROF_GPU_core.cu +++ b/Core/regularisers_GPU/TV_ROF_GPU_core.cu diff --git a/Core/regularizers_GPU/TV_ROF_GPU_core.h b/Core/regularisers_GPU/TV_ROF_GPU_core.h index d772aba..d772aba 100755 --- a/Core/regularizers_GPU/TV_ROF_GPU_core.h +++ b/Core/regularisers_GPU/TV_ROF_GPU_core.h @@ -1,7 +1,7 @@ -# CCPi-Regularization Toolkit (CCPi-RGL) +# CCPi-Regularisation Toolkit (CCPi-RGL) -**Iterative image reconstruction (IIR) methods normally require regularization to stabilize the convergence and make the reconstruction problem more well-posed. -CCPi-RGL software consist of 2D/3D regularization modules for single-channel and multi-channel reconstruction problems. The modules especially suited for IIR, however, +**Iterative image reconstruction (IIR) methods normally require regularisation to stabilise the convergence and make the reconstruction problem more well-posed. +CCPi-RGL software consist of 2D/3D regularisation modules for single-channel and multi-channel reconstruction problems. The modules especially suited for IIR, however, can also be used as image denoising iterative filters. The core modules are written in C-OMP and CUDA languages and wrappers for Matlab and Python are provided.** ## Prerequisites: @@ -24,13 +24,13 @@ can also be used as image denoising iterative filters. The core modules are writ ### Python (conda-build) ``` export CIL_VERSION=0.9.2 - conda build recipes/regularizers --numpy 1.12 --python 3.5 - conda install cil_regularizer=0.9.2 --use-local --force + conda build recipes/regularisers --numpy 1.12 --python 3.5 + conda install cil_regulariser=0.9.2 --use-local --force cd Wrappers/Python conda build conda-recipe --numpy 1.12 --python 3.5 - conda install ccpi-regularizer=0.9.2 --use-local --force + conda install ccpi-regulariser=0.9.2 --use-local --force cd test/ - python test_cpu_vs_gpu_regularizers.py + python test_cpu_vs_gpu_regularisers.py ``` ### Matlab ``` 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 diff --git a/Wrappers/Python/CMakeLists.txt b/Wrappers/Python/CMakeLists.txt index eb3bac7..fb00706 100644 --- a/Wrappers/Python/CMakeLists.txt +++ b/Wrappers/Python/CMakeLists.txt @@ -1,7 +1,7 @@ # Copyright 2018 Edoardo Pasca cmake_minimum_required (VERSION 3.0) -project(RegularizerPython) +project(regulariserPython) #https://stackoverflow.com/questions/13298504/using-cmake-with-setup-py # The version number. @@ -25,8 +25,8 @@ if (PYTHONINTERP_FOUND) endif() -## Build the regularizers package as a library -message("Creating Regularizers as shared library") +## Build the regularisers package as a library +message("Creating Regularisers as shared library") message("CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}") @@ -52,7 +52,7 @@ elseif(UNIX) ) endif() -# GPU Regularizers +# GPU regularisers find_package(CUDA) if (CUDA_FOUND) @@ -60,12 +60,12 @@ if (CUDA_FOUND) set (SETUP_GPU_WRAPPERS "extra_libraries += ['cilregcuda']\n\ setup( \n\ name='ccpi', \n\ - description='CCPi Core Imaging Library - Image Regularizers GPU',\n\ + description='CCPi Core Imaging Library - Image regularisers GPU',\n\ version=cil_version,\n\ cmdclass = {'build_ext': build_ext},\n\ - ext_modules = [Extension('ccpi.filters.gpu_regularizers',\n\ + ext_modules = [Extension('ccpi.filters.gpu_regularisers',\n\ sources=[ \n\ - os.path.join('.' , 'src', 'gpu_regularizers.pyx' ),\n\ + os.path.join('.' , 'src', 'gpu_regularisers.pyx' ),\n\ ],\n\ include_dirs=extra_include_dirs, \n\ library_dirs=extra_library_dirs, \n\ @@ -80,9 +80,9 @@ else() set(SETUP_GPU_WRAPPERS "#CUDA NOT FOUND") endif() -configure_file("setup-regularizers.py.in" "setup-regularizers.py") +configure_file("setup-regularisers.py.in" "setup-regularisers.py") -#add_executable(regularizer_test ${CMAKE_CURRENT_SOURCE_DIR}/test/test_regularizer.cpp) +#add_executable(regulariser_test ${CMAKE_CURRENT_SOURCE_DIR}/test/test_regulariser.cpp) -#target_link_libraries (regularizer_test LINK_PUBLIC regularizers_lib) +#target_link_libraries (regulariser_test LINK_PUBLIC regularisers_lib) diff --git a/Wrappers/Python/ccpi/filters/regularizers.py b/Wrappers/Python/ccpi/filters/regularisers.py index d6dfa8c..039daab 100644 --- a/Wrappers/Python/ccpi/filters/regularizers.py +++ b/Wrappers/Python/ccpi/filters/regularisers.py @@ -2,30 +2,30 @@ script which assigns a proper device core function based on a flag ('cpu' or 'gpu') """ -from ccpi.filters.cpu_regularizers_cython import TV_ROF_CPU, TV_FGP_CPU -from ccpi.filters.gpu_regularizers import TV_ROF_GPU, TV_FGP_GPU +from ccpi.filters.cpu_regularisers_cython import TV_ROF_CPU, TV_FGP_CPU +from ccpi.filters.gpu_regularisers import TV_ROF_GPU, TV_FGP_GPU -def ROF_TV(inputData, regularization_parameter, iterations, +def ROF_TV(inputData, regularisation_parameter, iterations, time_marching_parameter,device='cpu'): if device == 'cpu': return TV_ROF_CPU(inputData, - regularization_parameter, + regularisation_parameter, iterations, time_marching_parameter) elif device == 'gpu': return TV_ROF_GPU(inputData, - regularization_parameter, + regularisation_parameter, iterations, time_marching_parameter) else: raise ValueError('Unknown device {0}. Expecting gpu or cpu'\ .format(device)) -def FGP_TV(inputData, regularization_parameter,iterations, +def FGP_TV(inputData, regularisation_parameter,iterations, tolerance_param, methodTV, nonneg, printM, device='cpu'): if device == 'cpu': return TV_FGP_CPU(inputData, - regularization_parameter, + regularisation_parameter, iterations, tolerance_param, methodTV, @@ -33,7 +33,7 @@ def FGP_TV(inputData, regularization_parameter,iterations, printM) elif device == 'gpu': return TV_FGP_GPU(inputData, - regularization_parameter, + regularisation_parameter, iterations, tolerance_param, methodTV, @@ -41,4 +41,4 @@ def FGP_TV(inputData, regularization_parameter,iterations, printM) else: raise ValueError('Unknown device {0}. Expecting gpu or cpu'\ - .format(device))
\ No newline at end of file + .format(device)) diff --git a/Wrappers/Python/conda-recipe/bld.bat b/Wrappers/Python/conda-recipe/bld.bat index 850905c..e47f8d9 100644 --- a/Wrappers/Python/conda-recipe/bld.bat +++ b/Wrappers/Python/conda-recipe/bld.bat @@ -11,7 +11,7 @@ cd %SRC_DIR%\ccpi\Python :: issue cmake to create setup.py cmake . -%PYTHON% setup-regularizers.py build_ext +%PYTHON% setup-regularisers.py build_ext if errorlevel 1 exit 1 -%PYTHON% setup-regularizers.py install +%PYTHON% setup-regularisers.py install if errorlevel 1 exit 1 diff --git a/Wrappers/Python/conda-recipe/build.sh b/Wrappers/Python/conda-recipe/build.sh index 9ea4161..8b05663 100644 --- a/Wrappers/Python/conda-recipe/build.sh +++ b/Wrappers/Python/conda-recipe/build.sh @@ -13,7 +13,7 @@ echo "$SRC_DIR/ccpi/Python" cmake . -$PYTHON setup-regularizers.py build_ext -$PYTHON setup-regularizers.py install +$PYTHON setup-regularisers.py build_ext +$PYTHON setup-regularisers.py install diff --git a/Wrappers/Python/conda-recipe/meta.yaml b/Wrappers/Python/conda-recipe/meta.yaml index f4cb471..5336d14 100644 --- a/Wrappers/Python/conda-recipe/meta.yaml +++ b/Wrappers/Python/conda-recipe/meta.yaml @@ -1,5 +1,5 @@ package: - name: ccpi-regularizer + name: ccpi-regulariser version: {{ environ['CIL_VERSION'] }} @@ -17,7 +17,7 @@ requirements: #- boost ==1.64.0 #- boost-cpp ==1.64.0 - cython - - cil_regularizer + - cil_regulariser - vc 14 # [win and py35] - vc 9 # [win and py27] - cmake @@ -26,7 +26,7 @@ requirements: - python - numpy x.x #- boost ==1.64 - - cil_regularizer + - cil_regulariser - vc 14 # [win and py35] - vc 9 # [win and py27] diff --git a/Wrappers/Python/demo/test_cpu_regularizers.py b/Wrappers/Python/demo/test_cpu_regularisers.py index 76b9de7..4e4a2dd 100644 --- a/Wrappers/Python/demo/test_cpu_regularizers.py +++ b/Wrappers/Python/demo/test_cpu_regularisers.py @@ -5,24 +5,13 @@ Created on Fri Aug 4 11:10:05 2017 @author: ofn77899 """ - import matplotlib.pyplot as plt import numpy as np import os from enum import Enum import timeit -from ccpi.filters.cpu_regularizers_boost import SplitBregman_TV, LLT_model, PatchBased_Regul, TGV_PD -from ccpi.filters.regularizers import ROF_TV, FGP_TV +from ccpi.filters.regularisers import ROF_TV, FGP_TV ############################################################################### -#https://stackoverflow.com/questions/13875989/comparing-image-in-url-to-image-in-filesystem-in-python/13884956#13884956 -#NRMSE a normalization of the root of the mean squared error -#NRMSE is simply 1 - [RMSE / (maxval - minval)]. Where maxval is the maximum -# intensity from the two images being compared, and respectively the same for -# minval. RMSE is given by the square root of MSE: -# sqrt[(sum(A - B) ** 2) / |A|], -# where |A| means the number of elements in A. By doing this, the maximum value -# given by RMSE is maxval. - def nrmse(im1, im2): a, b = im1.shape rmse = np.sqrt(np.sum((im2 - im1) ** 2) / float(a * b)) @@ -51,17 +40,8 @@ def printParametersToString(pars): # 2D Regularizers # ############################################################################### -#Example: -# figure; -# Im = double(imread('lena_gray_256.tif'))/255; % loading image -# u0 = Im + .05*randn(size(Im)); u0(u0 < 0) = 0; -# u = SplitBregman_TV(single(u0), 10, 30, 1e-04); - # assumes the script is launched from the test directory filename = os.path.join(".." , ".." , ".." , "data" ,"lena_gray_512.tif") -#filename = r"C:\Users\ofn77899\Documents\GitHub\CCPi-FISTA_reconstruction\data\lena_gray_512.tif" -#filename = r"/home/ofn77899/Reconstruction/CCPi-FISTA_Reconstruction/data/lena_gray_512.tif" -#filename = r'/home/algol/Documents/Python/STD_test_images/lena_gray_512.tif' Im = plt.imread(filename) Im = np.asarray(Im, dtype='float32') @@ -86,48 +66,14 @@ imgplot = plt.imshow(u0,cmap="gray" reg_output = [] ############################################################################## -# Call regularizer - -####################### SplitBregman_TV ##################################### -# u = SplitBregman_TV(single(u0), 10, 30, 1e-04); - -start_time = timeit.default_timer() -pars = {'algorithm' : SplitBregman_TV , \ - 'input' : u0, - 'regularization_parameter':15. , \ - 'number_of_iterations' :40 ,\ - 'tolerance_constant':0.0001 , \ - 'TV_penalty': 0 -} - -out = SplitBregman_TV (pars['input'], pars['regularization_parameter'], - pars['number_of_iterations'], - pars['tolerance_constant'], - pars['TV_penalty']) -splitbregman = out[0] -rms = rmse(Im, splitbregman) -pars['rmse'] = rms -txtstr = printParametersToString(pars) -txtstr += "%s = %.3fs" % ('elapsed time',timeit.default_timer() - start_time) -print (txtstr) - -a=fig.add_subplot(2,4,2) - -# these are matplotlib.patch.Patch properties -props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) -# place a text box in upper left in axes coords -a.text(0.05, 0.95, txtstr, transform=a.transAxes, fontsize=14, - verticalalignment='top', bbox=props) -imgplot = plt.imshow(splitbregman,\ - cmap="gray" - ) +# Call regularisers ###################### FGP_TV ######################################### start_time = timeit.default_timer() pars = {'algorithm' : FGP_TV , \ 'input' : u0,\ - 'regularization_parameter':0.07, \ + 'regularisation_parameter':0.07, \ 'number_of_iterations' :300 ,\ 'tolerance_constant':0.00001,\ 'methodTV': 0 ,\ @@ -136,7 +82,7 @@ pars = {'algorithm' : FGP_TV , \ } fgp = FGP_TV(pars['input'], - pars['regularization_parameter'], + pars['regularisation_parameter'], pars['number_of_iterations'], pars['tolerance_constant'], pars['methodTV'], @@ -163,129 +109,18 @@ imgplot = plt.imshow(fgp, \ a.text(0.05, 0.95, txtstr, transform=a.transAxes, fontsize=14, verticalalignment='top', bbox=props) - -###################### LLT_model ######################################### -start_time = timeit.default_timer() - -pars = {'algorithm': LLT_model , \ - 'input' : u0, - 'regularization_parameter': 5,\ - 'time_step':0.00035, \ - 'number_of_iterations' :350,\ - 'tolerance_constant':0.0001,\ - 'restrictive_Z_smoothing': 0 -} -out = LLT_model(pars['input'], - pars['regularization_parameter'], - pars['time_step'] , - pars['number_of_iterations'], - pars['tolerance_constant'], - pars['restrictive_Z_smoothing'] ) - -llt = out[0] -rms = rmse(Im, out[0]) -pars['rmse'] = rms - -txtstr = printParametersToString(pars) -txtstr += "%s = %.3fs" % ('elapsed time',timeit.default_timer() - start_time) -print (txtstr) -a=fig.add_subplot(2,4,4) - -# these are matplotlib.patch.Patch properties -props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) -# place a text box in upper left in axes coords -a.text(0.05, 0.95, txtstr, transform=a.transAxes, fontsize=14, - verticalalignment='top', bbox=props) -imgplot = plt.imshow(llt,\ - cmap="gray" - ) -# ###################### PatchBased_Regul ######################################### -# # Quick 2D denoising example in Matlab: -# # Im = double(imread('lena_gray_256.tif'))/255; % loading image -# # u0 = Im + .03*randn(size(Im)); u0(u0<0) = 0; % adding noise -# # ImDen = PB_Regul_CPU(single(u0), 3, 1, 0.08, 0.05); - -start_time = timeit.default_timer() - -pars = {'algorithm': PatchBased_Regul , \ - 'input' : u0, - 'regularization_parameter': 0.05,\ - 'searching_window_ratio':3, \ - 'similarity_window_ratio':1,\ - 'PB_filtering_parameter': 0.06 -} -out = PatchBased_Regul(pars['input'], - pars['regularization_parameter'], - pars['searching_window_ratio'] , - pars['similarity_window_ratio'] , - pars['PB_filtering_parameter']) -pbr = out[0] -rms = rmse(Im, out[0]) -pars['rmse'] = rms - -txtstr = printParametersToString(pars) -txtstr += "%s = %.3fs" % ('elapsed time',timeit.default_timer() - start_time) -print (txtstr) - -a=fig.add_subplot(2,4,5) - - -# these are matplotlib.patch.Patch properties -props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) -# place a text box in upper left in axes coords -a.text(0.05, 0.95, txtstr, transform=a.transAxes, fontsize=14, - verticalalignment='top', bbox=props) -imgplot = plt.imshow(pbr ,cmap="gray") - - -# ###################### TGV_PD ######################################### -# # Quick 2D denoising example in Matlab: -# # Im = double(imread('lena_gray_256.tif'))/255; % loading image -# # u0 = Im + .03*randn(size(Im)); u0(u0<0) = 0; % adding noise -# # u = PrimalDual_TGV(single(u0), 0.02, 1.3, 1, 550); - -start_time = timeit.default_timer() - -pars = {'algorithm': TGV_PD , \ - 'input' : u0,\ - 'regularization_parameter':0.07,\ - 'first_order_term': 1.3,\ - 'second_order_term': 1, \ - 'number_of_iterations': 550 - } -out = TGV_PD(pars['input'], - pars['regularization_parameter'], - pars['first_order_term'] , - pars['second_order_term'] , - pars['number_of_iterations']) -tgv = out[0] -rms = rmse(Im, out[0]) -pars['rmse'] = rms - -txtstr = printParametersToString(pars) -txtstr += "%s = %.3fs" % ('elapsed time',timeit.default_timer() - start_time) -print (txtstr) -a=fig.add_subplot(2,4,6) - -# these are matplotlib.patch.Patch properties -props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) -# place a text box in upper left in axes coords -a.text(0.05, 0.95, txtstr, transform=a.transAxes, fontsize=14, - verticalalignment='top', bbox=props) -imgplot = plt.imshow(tgv, cmap="gray") - # ###################### ROF_TV ######################################### start_time = timeit.default_timer() pars = {'algorithm': ROF_TV , \ 'input' : u0,\ - 'regularization_parameter':0.07,\ + 'regularisation_parameter':0.07,\ 'marching_step': 0.0025,\ 'number_of_iterations': 300 } rof = ROF_TV(pars['input'], - pars['regularization_parameter'], + pars['regularisation_parameter'], pars['number_of_iterations'], pars['marching_step'], 'cpu') diff --git a/Wrappers/Python/fista-recipe/bld.bat b/Wrappers/Python/fista-recipe/bld.bat deleted file mode 100644 index 32c1bc6..0000000 --- a/Wrappers/Python/fista-recipe/bld.bat +++ /dev/null @@ -1,13 +0,0 @@ -IF NOT DEFINED CIL_VERSION ( -ECHO CIL_VERSION Not Defined. -exit 1 -) - -mkdir "%SRC_DIR%\ccpifista" -xcopy /e "%RECIPE_DIR%\.." "%SRC_DIR%\ccpifista" - -cd "%SRC_DIR%\ccpifista" -::%PYTHON% setup-fista.py -q bdist_egg -:: %PYTHON% setup.py install --single-version-externally-managed --record=record.txt -%PYTHON% setup-fista.py install -if errorlevel 1 exit 1 diff --git a/Wrappers/Python/fista-recipe/build.sh b/Wrappers/Python/fista-recipe/build.sh deleted file mode 100644 index e3f3552..0000000 --- a/Wrappers/Python/fista-recipe/build.sh +++ /dev/null @@ -1,10 +0,0 @@ -if [ -z "$CIL_VERSION" ]; then - echo "Need to set CIL_VERSION" - exit 1 -fi -mkdir "$SRC_DIR/ccpifista" -cp -r "$RECIPE_DIR/.." "$SRC_DIR/ccpifista" - -cd $SRC_DIR/ccpifista - -$PYTHON setup-fista.py install diff --git a/Wrappers/Python/fista-recipe/meta.yaml b/Wrappers/Python/fista-recipe/meta.yaml deleted file mode 100644 index 4e5cba6..0000000 --- a/Wrappers/Python/fista-recipe/meta.yaml +++ /dev/null @@ -1,29 +0,0 @@ -package: - name: ccpi-fista - version: {{ environ['CIL_VERSION'] }} - - -build: - preserve_egg_dir: False - script_env: - - CIL_VERSION -# number: 0 - -requirements: - build: - - python - - numpy - - setuptools - - run: - - python - - numpy - #- astra-toolbox - - ccpi-regularizer - - - -about: - home: http://www.ccpi.ac.uk - license: Apache v.2.0 license - summary: 'CCPi Core Imaging Library (Viewer)' diff --git a/Wrappers/Python/setup-fista.py b/Wrappers/Python/setup-fista.py deleted file mode 100644 index c5c9f4d..0000000 --- a/Wrappers/Python/setup-fista.py +++ /dev/null @@ -1,27 +0,0 @@ -from distutils.core import setup -#from setuptools import setup, find_packages -import os - -cil_version=os.environ['CIL_VERSION'] -if cil_version == '': - print("Please set the environmental variable CIL_VERSION") - sys.exit(1) - -setup( - name="ccpi-fista", - version=cil_version, - packages=['ccpi','ccpi.reconstruction'], - install_requires=['numpy'], - - zip_safe = False, - - # metadata for upload to PyPI - author="Edoardo Pasca", - author_email="edo.paskino@gmail.com", - description='CCPi Core Imaging Library - FISTA Reconstructor module', - license="Apache v2.0", - keywords="tomography interative reconstruction", - url="http://www.ccpi.ac.uk", # project home page, if any - - # could also include long_description, download_url, classifiers, etc. -) diff --git a/Wrappers/Python/setup-regularizers.py.in b/Wrappers/Python/setup-regularisers.py.in index 0811372..a1c1ab6 100644 --- a/Wrappers/Python/setup-regularizers.py.in +++ b/Wrappers/Python/setup-regularisers.py.in @@ -33,9 +33,9 @@ extra_link_args = [] extra_libraries = ['cilreg'] extra_include_dirs += [os.path.join(".." , ".." , "Core"), - os.path.join(".." , ".." , "Core", "regularizers_CPU"), - os.path.join(".." , ".." , "Core", "regularizers_GPU" , "TV_FGP" ) , - os.path.join(".." , ".." , "Core", "regularizers_GPU" , "TV_ROF" ) , + os.path.join(".." , ".." , "Core", "regularisers_CPU"), + os.path.join(".." , ".." , "Core", "regularisers_GPU" , "TV_FGP" ) , + os.path.join(".." , ".." , "Core", "regularisers_GPU" , "TV_ROF" ) , "."] if platform.system() == 'Windows': @@ -46,11 +46,11 @@ else: setup( name='ccpi', - description='CCPi Core Imaging Library - Image Regularizers', + description='CCPi Core Imaging Library - Image regularisers', version=cil_version, cmdclass = {'build_ext': build_ext}, - ext_modules = [Extension("ccpi.filters.cpu_regularizers_cython", - sources=[os.path.join("." , "src", "cpu_regularizers.pyx" ) ], + ext_modules = [Extension("ccpi.filters.cpu_regularisers_cython", + sources=[os.path.join("." , "src", "cpu_regularisers.pyx" ) ], include_dirs=extra_include_dirs, library_dirs=extra_library_dirs, extra_compile_args=extra_compile_args, diff --git a/Wrappers/Python/src/cpu_regularizers.pyx b/Wrappers/Python/src/cpu_regularisers.pyx index f993e54..248bad1 100644 --- a/Wrappers/Python/src/cpu_regularizers.pyx +++ b/Wrappers/Python/src/cpu_regularisers.pyx @@ -25,14 +25,14 @@ cdef extern float TV_FGP_CPU_main(float *Input, float *Output, float lambdaPar, #****************************************************************# #********************** Total-variation ROF *********************# #****************************************************************# -def TV_ROF_CPU(inputData, regularization_parameter, iterationsNumb, marching_step_parameter): +def TV_ROF_CPU(inputData, regularisation_parameter, iterationsNumb, marching_step_parameter): if inputData.ndim == 2: - return TV_ROF_2D(inputData, regularization_parameter, iterationsNumb, marching_step_parameter) + return TV_ROF_2D(inputData, regularisation_parameter, iterationsNumb, marching_step_parameter) elif inputData.ndim == 3: - return TV_ROF_3D(inputData, regularization_parameter, iterationsNumb, marching_step_parameter) + return TV_ROF_3D(inputData, regularisation_parameter, iterationsNumb, marching_step_parameter) def TV_ROF_2D(np.ndarray[np.float32_t, ndim=2, mode="c"] inputData, - float regularization_parameter, + float regularisation_parameter, int iterationsNumb, float marching_step_parameter): cdef long dims[2] @@ -43,13 +43,13 @@ def TV_ROF_2D(np.ndarray[np.float32_t, ndim=2, mode="c"] inputData, np.zeros([dims[0],dims[1]], dtype='float32') # Run ROF iterations for 2D data - TV_ROF_CPU_main(&inputData[0,0], &outputData[0,0], regularization_parameter, iterationsNumb, marching_step_parameter, dims[0], dims[1], 1) + TV_ROF_CPU_main(&inputData[0,0], &outputData[0,0], regularisation_parameter, iterationsNumb, marching_step_parameter, dims[0], dims[1], 1) return outputData def TV_ROF_3D(np.ndarray[np.float32_t, ndim=3, mode="c"] inputData, int iterationsNumb, - float regularization_parameter, + float regularisation_parameter, float marching_step_parameter): cdef long dims[3] dims[0] = inputData.shape[0] @@ -60,7 +60,7 @@ def TV_ROF_3D(np.ndarray[np.float32_t, ndim=3, mode="c"] inputData, np.zeros([dims[0],dims[1],dims[2]], dtype='float32') # Run ROF iterations for 3D data - TV_ROF_CPU_main(&inputData[0,0,0], &outputData[0,0,0], regularization_parameter, iterationsNumb, marching_step_parameter, dims[0], dims[1], dims[2]) + TV_ROF_CPU_main(&inputData[0,0,0], &outputData[0,0,0], regularisation_parameter, iterationsNumb, marching_step_parameter, dims[0], dims[1], dims[2]) return outputData @@ -68,14 +68,14 @@ def TV_ROF_3D(np.ndarray[np.float32_t, ndim=3, mode="c"] inputData, #********************** Total-variation FGP *********************# #****************************************************************# #******** Total-variation Fast-Gradient-Projection (FGP)*********# -def TV_FGP_CPU(inputData, regularization_parameter, iterationsNumb, tolerance_param, methodTV, nonneg, printM): +def TV_FGP_CPU(inputData, regularisation_parameter, iterationsNumb, tolerance_param, methodTV, nonneg, printM): if inputData.ndim == 2: - return TV_FGP_2D(inputData, regularization_parameter, iterationsNumb, tolerance_param, methodTV, nonneg, printM) + return TV_FGP_2D(inputData, regularisation_parameter, iterationsNumb, tolerance_param, methodTV, nonneg, printM) elif inputData.ndim == 3: - return TV_FGP_3D(inputData, regularization_parameter, iterationsNumb, tolerance_param, methodTV, nonneg, printM) + return TV_FGP_3D(inputData, regularisation_parameter, iterationsNumb, tolerance_param, methodTV, nonneg, printM) def TV_FGP_2D(np.ndarray[np.float32_t, ndim=2, mode="c"] inputData, - float regularization_parameter, + float regularisation_parameter, int iterationsNumb, float tolerance_param, int methodTV, @@ -90,7 +90,7 @@ def TV_FGP_2D(np.ndarray[np.float32_t, ndim=2, mode="c"] inputData, np.zeros([dims[0],dims[1]], dtype='float32') #/* Run ROF iterations for 2D data */ - TV_FGP_CPU_main(&inputData[0,0], &outputData[0,0], regularization_parameter, + TV_FGP_CPU_main(&inputData[0,0], &outputData[0,0], regularisation_parameter, iterationsNumb, tolerance_param, methodTV, @@ -101,7 +101,7 @@ def TV_FGP_2D(np.ndarray[np.float32_t, ndim=2, mode="c"] inputData, return outputData def TV_FGP_3D(np.ndarray[np.float32_t, ndim=3, mode="c"] inputData, - float regularization_parameter, + float regularisation_parameter, int iterationsNumb, float tolerance_param, int methodTV, @@ -116,7 +116,7 @@ def TV_FGP_3D(np.ndarray[np.float32_t, ndim=3, mode="c"] inputData, np.zeros([dims[0], dims[1], dims[2]], dtype='float32') #/* Run ROF iterations for 3D data */ - TV_FGP_CPU_main(&inputData[0,0,0], &outputData[0,0,0], regularization_parameter, + TV_FGP_CPU_main(&inputData[0,0,0], &outputData[0,0,0], regularisation_parameter, iterationsNumb, tolerance_param, methodTV, diff --git a/Wrappers/Python/src/gpu_regularizers.pyx b/Wrappers/Python/src/gpu_regularisers.pyx index a44bd1d..7ebd011 100644 --- a/Wrappers/Python/src/gpu_regularizers.pyx +++ b/Wrappers/Python/src/gpu_regularisers.pyx @@ -23,23 +23,23 @@ cdef extern void TV_FGP_GPU_main(float *Input, float *Output, float lambdaPar, i # Total-variation Rudin-Osher-Fatemi (ROF) def TV_ROF_GPU(inputData, - regularization_parameter, + regularisation_parameter, iterations, time_marching_parameter): if inputData.ndim == 2: return ROFTV2D(inputData, - regularization_parameter, + regularisation_parameter, iterations, time_marching_parameter) elif inputData.ndim == 3: return ROFTV3D(inputData, - regularization_parameter, + regularisation_parameter, iterations, time_marching_parameter) # Total-variation Fast-Gradient-Projection (FGP) def TV_FGP_GPU(inputData, - regularization_parameter, + regularisation_parameter, iterations, tolerance_param, methodTV, @@ -47,7 +47,7 @@ def TV_FGP_GPU(inputData, printM): if inputData.ndim == 2: return FGPTV2D(inputData, - regularization_parameter, + regularisation_parameter, iterations, tolerance_param, methodTV, @@ -55,7 +55,7 @@ def TV_FGP_GPU(inputData, printM) elif inputData.ndim == 3: return FGPTV3D(inputData, - regularization_parameter, + regularisation_parameter, iterations, tolerance_param, methodTV, @@ -66,7 +66,7 @@ def TV_FGP_GPU(inputData, #********************** Total-variation ROF *********************# #****************************************************************# def ROFTV2D(np.ndarray[np.float32_t, ndim=2, mode="c"] inputData, - float regularization_parameter, + float regularisation_parameter, int iterations, float time_marching_parameter): @@ -80,7 +80,7 @@ def ROFTV2D(np.ndarray[np.float32_t, ndim=2, mode="c"] inputData, # Running CUDA code here TV_ROF_GPU_main( &inputData[0,0], &outputData[0,0], - regularization_parameter, + regularisation_parameter, iterations , time_marching_parameter, dims[0], dims[1], 1); @@ -88,7 +88,7 @@ def ROFTV2D(np.ndarray[np.float32_t, ndim=2, mode="c"] inputData, return outputData def ROFTV3D(np.ndarray[np.float32_t, ndim=3, mode="c"] inputData, - float regularization_parameter, + float regularisation_parameter, int iterations, float time_marching_parameter): @@ -103,7 +103,7 @@ def ROFTV3D(np.ndarray[np.float32_t, ndim=3, mode="c"] inputData, # Running CUDA code here TV_ROF_GPU_main( &inputData[0,0,0], &outputData[0,0,0], - regularization_parameter, + regularisation_parameter, iterations , time_marching_parameter, dims[0], dims[1], dims[2]); @@ -114,7 +114,7 @@ def ROFTV3D(np.ndarray[np.float32_t, ndim=3, mode="c"] inputData, #****************************************************************# #******** Total-variation Fast-Gradient-Projection (FGP)*********# def FGPTV2D(np.ndarray[np.float32_t, ndim=2, mode="c"] inputData, - float regularization_parameter, + float regularisation_parameter, int iterations, float tolerance_param, int methodTV, @@ -130,7 +130,7 @@ def FGPTV2D(np.ndarray[np.float32_t, ndim=2, mode="c"] inputData, # Running CUDA code here TV_FGP_GPU_main(&inputData[0,0], &outputData[0,0], - regularization_parameter, + regularisation_parameter, iterations, tolerance_param, methodTV, @@ -141,7 +141,7 @@ def FGPTV2D(np.ndarray[np.float32_t, ndim=2, mode="c"] inputData, return outputData def FGPTV3D(np.ndarray[np.float32_t, ndim=3, mode="c"] inputData, - float regularization_parameter, + float regularisation_parameter, int iterations, float tolerance_param, int methodTV, @@ -159,7 +159,7 @@ def FGPTV3D(np.ndarray[np.float32_t, ndim=3, mode="c"] inputData, # Running CUDA code here TV_FGP_GPU_main( &inputData[0,0,0], &outputData[0,0,0], - regularization_parameter , + regularisation_parameter , iterations, tolerance_param, methodTV, diff --git a/Wrappers/Python/test/test_cpu_regularizers.py b/Wrappers/Python/test/test_cpu_regularisers.py index 9713baa..9713baa 100644 --- a/Wrappers/Python/test/test_cpu_regularizers.py +++ b/Wrappers/Python/test/test_cpu_regularisers.py diff --git a/Wrappers/Python/test/test_cpu_vs_gpu_regularizers.py b/Wrappers/Python/test/test_cpu_vs_gpu_regularisers.py index 63be1a0..15e9042 100644 --- a/Wrappers/Python/test/test_cpu_vs_gpu_regularizers.py +++ b/Wrappers/Python/test/test_cpu_vs_gpu_regularisers.py @@ -12,7 +12,7 @@ import matplotlib.pyplot as plt import numpy as np import os import timeit -from ccpi.filters.regularizers import ROF_TV, FGP_TV +from ccpi.filters.regularisers import ROF_TV, FGP_TV ############################################################################### def printParametersToString(pars): @@ -54,7 +54,7 @@ print ("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") ## plot fig = plt.figure(1) -plt.suptitle('Comparison of ROF-TV regularizer using CPU and GPU implementations') +plt.suptitle('Comparison of ROF-TV regulariser using CPU and GPU implementations') a=fig.add_subplot(1,4,1) a.set_title('Noisy Image') imgplot = plt.imshow(u0,cmap="gray") @@ -62,14 +62,14 @@ imgplot = plt.imshow(u0,cmap="gray") # set parameters pars = {'algorithm': ROF_TV, \ 'input' : u0,\ - 'regularization_parameter':0.04,\ + 'regularisation_parameter':0.04,\ 'number_of_iterations': 1200,\ 'time_marching_parameter': 0.0025 } print ("#############ROF TV CPU####################") start_time = timeit.default_timer() rof_cpu = ROF_TV(pars['input'], - pars['regularization_parameter'], + pars['regularisation_parameter'], pars['number_of_iterations'], pars['time_marching_parameter'],'cpu') rms = rmse(Im, rof_cpu) @@ -92,7 +92,7 @@ plt.title('{}'.format('CPU results')) print ("##############ROF TV GPU##################") start_time = timeit.default_timer() rof_gpu = ROF_TV(pars['input'], - pars['regularization_parameter'], + pars['regularisation_parameter'], pars['number_of_iterations'], pars['time_marching_parameter'],'gpu') @@ -132,7 +132,7 @@ print ("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") ## plot fig = plt.figure(2) -plt.suptitle('Comparison of FGP-TV regularizer using CPU and GPU implementations') +plt.suptitle('Comparison of FGP-TV regulariser using CPU and GPU implementations') a=fig.add_subplot(1,4,1) a.set_title('Noisy Image') imgplot = plt.imshow(u0,cmap="gray") @@ -140,7 +140,7 @@ imgplot = plt.imshow(u0,cmap="gray") # set parameters pars = {'algorithm' : FGP_TV, \ 'input' : u0,\ - 'regularization_parameter':0.04, \ + 'regularisation_parameter':0.04, \ 'number_of_iterations' :1200 ,\ 'tolerance_constant':0.00001,\ 'methodTV': 0 ,\ @@ -151,7 +151,7 @@ pars = {'algorithm' : FGP_TV, \ print ("#############FGP TV CPU####################") start_time = timeit.default_timer() fgp_cpu = FGP_TV(pars['input'], - pars['regularization_parameter'], + pars['regularisation_parameter'], pars['number_of_iterations'], pars['tolerance_constant'], pars['methodTV'], @@ -179,7 +179,7 @@ plt.title('{}'.format('CPU results')) print ("##############FGP TV GPU##################") start_time = timeit.default_timer() fgp_gpu = FGP_TV(pars['input'], - pars['regularization_parameter'], + pars['regularisation_parameter'], pars['number_of_iterations'], pars['tolerance_constant'], pars['methodTV'], diff --git a/Wrappers/Python/test/test_gpu_regularizers.py b/Wrappers/Python/test/test_gpu_regularisers.py index 640b3f9..2103c0e 100644 --- a/Wrappers/Python/test/test_gpu_regularizers.py +++ b/Wrappers/Python/test/test_gpu_regularisers.py @@ -11,8 +11,7 @@ import numpy as np import os from enum import Enum import timeit -from ccpi.filters.gpu_regularizers import Diff4thHajiaboli, NML -from ccpi.filters.regularizers import ROF_TV, FGP_TV +from ccpi.filters.regularisers import ROF_TV, FGP_TV ############################################################################### def printParametersToString(pars): txt = r'' @@ -32,9 +31,6 @@ def rmse(im1, im2): return rmse filename = os.path.join(".." , ".." , ".." , "data" ,"lena_gray_512.tif") -#filename = r"C:\Users\ofn77899\Documents\GitHub\CCPi-FISTA_reconstruction\data\lena_gray_512.tif" -#filename = r"/home/ofn77899/Reconstruction/CCPi-FISTA_Reconstruction/data/lena_gray_512.tif" -#filename = r'/home/algol/Documents/Python/STD_test_images/lena_gray_512.tif' Im = plt.imread(filename) Im = np.asarray(Im, dtype='float32') @@ -56,112 +52,20 @@ a.set_title('noise') imgplot = plt.imshow(u0,cmap="gray") -## Diff4thHajiaboli -start_time = timeit.default_timer() -pars = { -'algorithm' : Diff4thHajiaboli , \ - 'input' : u0, - 'edge_preserv_parameter':0.1 , \ -'number_of_iterations' :250 ,\ -'time_marching_parameter':0.03 ,\ -'regularization_parameter':0.7 -} - - -d4h = Diff4thHajiaboli(pars['input'], - pars['edge_preserv_parameter'], - pars['number_of_iterations'], - pars['time_marching_parameter'], - pars['regularization_parameter']) -rms = rmse(Im, d4h) -pars['rmse'] = rms -txtstr = printParametersToString(pars) -txtstr += "%s = %.3fs" % ('elapsed time',timeit.default_timer() - start_time) -print (txtstr) -a=fig.add_subplot(2,4,2) - -# these are matplotlib.patch.Patch properties -props = dict(boxstyle='round', facecolor='wheat', alpha=0.75) -# place a text box in upper left in axes coords -a.text(0.15, 0.25, txtstr, transform=a.transAxes, fontsize=12, - verticalalignment='top', bbox=props) -imgplot = plt.imshow(d4h, cmap="gray") - -a=fig.add_subplot(2,4,6) - -# these are matplotlib.patch.Patch properties -props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) -# place a text box in upper left in axes coords -a.text(0.05, 0.95, 'd4h - u0', transform=a.transAxes, fontsize=12, - verticalalignment='top', bbox=props) -imgplot = plt.imshow((d4h - u0)**2, vmin=0, vmax=0.03, cmap="gray") -plt.colorbar(ticks=[0, 0.03], orientation='vertical') - - -## Patch Based Regul NML -start_time = timeit.default_timer() -""" -pars = {'algorithm' : NML , \ - 'input' : u0, - 'SearchW_real':3 , \ -'SimilW' :1,\ -'h':0.05 ,# -'lambda' : 0.08 -} -""" -pars = { -'algorithm' : NML , \ - 'input' : u0, - 'regularization_parameter': 0.01,\ - 'searching_window_ratio':3, \ - 'similarity_window_ratio':1,\ - 'PB_filtering_parameter': 0.2 -} - -nml = NML(pars['input'], - pars['searching_window_ratio'], - pars['similarity_window_ratio'], - pars['PB_filtering_parameter'], - pars['regularization_parameter']) -rms = rmse(Im, nml) -pars['rmse'] = rms -txtstr = printParametersToString(pars) -txtstr += "%s = %.3fs" % ('elapsed time',timeit.default_timer() - start_time) -print (txtstr) -a=fig.add_subplot(2,4,3) - -# these are matplotlib.patch.Patch properties -props = dict(boxstyle='round', facecolor='wheat', alpha=0.75) -# place a text box in upper left in axes coords -a.text(0.15, 0.25, txtstr, transform=a.transAxes, fontsize=12, - verticalalignment='top', bbox=props) -imgplot = plt.imshow(nml, cmap="gray") - -a=fig.add_subplot(2,4,7) - -# these are matplotlib.patch.Patch properties -props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) -# place a text box in upper left in axes coords -a.text(0.05, 0.95, 'nml - u0', transform=a.transAxes, fontsize=14, - verticalalignment='top', bbox=props) -imgplot = plt.imshow((nml - u0)**2, vmin=0, vmax=0.03, cmap="gray") -plt.colorbar(ticks=[0, 0.03], orientation='vertical') - - -## Rudin-Osher-Fatemi (ROF) TV regularization +## Rudin-Osher-Fatemi (ROF) TV regularisation start_time = timeit.default_timer() pars = { 'algorithm' : ROF_TV , \ 'input' : u0, - 'regularization_parameter': 0.04,\ + 'regularisation_parameter': 0.04,\ 'number_of_iterations':300,\ 'time_marching_parameter': 0.0025 } rof_tv = TV_ROF_GPU(pars['input'], - pars['regularization_parameter'], + pars['regularisation_parameter'], pars['number_of_iterations'], pars['time_marching_parameter'],'gpu') @@ -190,13 +94,13 @@ imgplot = plt.imshow((rof_tv - u0)**2, vmin=0, vmax=0.03, cmap="gray") plt.colorbar(ticks=[0, 0.03], orientation='vertical') plt.show() -## Fast-Gradient Projection TV regularization +## Fast-Gradient Projection TV regularisation """ start_time = timeit.default_timer() pars = {'algorithm' : FGP_TV, \ 'input' : u0,\ - 'regularization_parameter':0.04, \ + 'regularisation_parameter':0.04, \ 'number_of_iterations' :1200 ,\ 'tolerance_constant':0.00001,\ 'methodTV': 0 ,\ @@ -205,7 +109,7 @@ pars = {'algorithm' : FGP_TV, \ } fgp_gpu = FGP_TV(pars['input'], - pars['regularization_parameter'], + pars['regularisation_parameter'], pars['number_of_iterations'], pars['tolerance_constant'], pars['methodTV'], diff --git a/Wrappers/Python/test/test_regularizers_3d.py b/Wrappers/Python/test/test_regularisers_3d.py index 2d11a7e..2d11a7e 100644 --- a/Wrappers/Python/test/test_regularizers_3d.py +++ b/Wrappers/Python/test/test_regularisers_3d.py diff --git a/Wrappers/Python/test/test_regularizers.py b/Wrappers/Python/test/test_regularizers.py deleted file mode 100644 index cf5da2b..0000000 --- a/Wrappers/Python/test/test_regularizers.py +++ /dev/null @@ -1,395 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Created on Fri Aug 4 11:10:05 2017 - -@author: ofn77899 -""" - -#from ccpi.viewer.CILViewer2D import Converter -#import vtk - -import matplotlib.pyplot as plt -import numpy as np -import os -from enum import Enum -import timeit -#from PIL import Image -#from Regularizer import Regularizer -from ccpi.filters.Regularizer import Regularizer - -############################################################################### -#https://stackoverflow.com/questions/13875989/comparing-image-in-url-to-image-in-filesystem-in-python/13884956#13884956 -#NRMSE a normalization of the root of the mean squared error -#NRMSE is simply 1 - [RMSE / (maxval - minval)]. Where maxval is the maximum -# intensity from the two images being compared, and respectively the same for -# minval. RMSE is given by the square root of MSE: -# sqrt[(sum(A - B) ** 2) / |A|], -# where |A| means the number of elements in A. By doing this, the maximum value -# given by RMSE is maxval. - -def nrmse(im1, im2): - a, b = im1.shape - rmse = np.sqrt(np.sum((im2 - im1) ** 2) / float(a * b)) - max_val = max(np.max(im1), np.max(im2)) - min_val = min(np.min(im1), np.min(im2)) - return 1 - (rmse / (max_val - min_val)) -############################################################################### - -############################################################################### -# -# 2D Regularizers -# -############################################################################### -#Example: -# figure; -# Im = double(imread('lena_gray_256.tif'))/255; % loading image -# u0 = Im + .05*randn(size(Im)); u0(u0 < 0) = 0; -# u = SplitBregman_TV(single(u0), 10, 30, 1e-04); - - -filename = r"C:\Users\ofn77899\Documents\GitHub\CCPi-FISTA_reconstruction\data\lena_gray_512.tif" -#filename = r"/home/ofn77899/Reconstruction/CCPi-FISTA_Reconstruction/data/lena_gray_512.tif" -#filename = r'/home/algol/Documents/Python/STD_test_images/lena_gray_512.tif' - -#reader = vtk.vtkTIFFReader() -#reader.SetFileName(os.path.normpath(filename)) -#reader.Update() -Im = plt.imread(filename) -#Im = Image.open('/home/algol/Documents/Python/STD_test_images/lena_gray_512.tif')/255 -#img.show() -Im = np.asarray(Im, dtype='float32') - - - - -#imgplot = plt.imshow(Im) -perc = 0.05 -u0 = Im + (perc* np.random.normal(size=np.shape(Im))) -# map the u0 u0->u0>0 -f = np.frompyfunc(lambda x: 0 if x < 0 else x, 1,1) -u0 = f(u0).astype('float32') - -## plot -fig = plt.figure() -#a=fig.add_subplot(3,3,1) -#a.set_title('Original') -#imgplot = plt.imshow(Im) - -a=fig.add_subplot(2,3,1) -a.set_title('noise') -imgplot = plt.imshow(u0,cmap="gray") - -reg_output = [] -############################################################################## -# Call regularizer - -####################### SplitBregman_TV ##################################### -# u = SplitBregman_TV(single(u0), 10, 30, 1e-04); - -start_time = timeit.default_timer() -reg = Regularizer(Regularizer.Algorithm.SplitBregman_TV) -print (reg.pars) -reg.setParameter(input=u0) -reg.setParameter(regularization_parameter=10.) -# or -# reg.setParameter(input=u0, regularization_parameter=10., #number_of_iterations=30, - #tolerance_constant=1e-4, - #TV_Penalty=Regularizer.TotalVariationPenalty.l1) -plotme = reg(output_all=True) [0] -pars = reg.pars -txtstr = reg.printParametersToString() -txtstr += "%s = %.3fs" % ('elapsed time',timeit.default_timer() - start_time) -print (txtstr) - - -a=fig.add_subplot(2,3,2) - - -# these are matplotlib.patch.Patch properties -props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) -# place a text box in upper left in axes coords -a.text(0.05, 0.95, txtstr, transform=a.transAxes, fontsize=14, - verticalalignment='top', bbox=props) -imgplot = plt.imshow(plotme,cmap="gray") - -###################### FGP_TV ######################################### -# u = FGP_TV(single(u0), 0.05, 100, 1e-04); -start_time = timeit.default_timer() -reg = Regularizer(Regularizer.Algorithm.FGP_TV) -out2 = reg(input=u0, regularization_parameter=5e-4, - number_of_iterations=10) -txtstr = reg.printParametersToString() -txtstr += "%s = %.3fs" % ('elapsed time',timeit.default_timer() - start_time) -print (txtstr) - - -a=fig.add_subplot(2,3,3) - -# these are matplotlib.patch.Patch properties -props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) -# place a text box in upper left in axes coords -imgplot = plt.imshow(out2,cmap="gray") -# place a text box in upper left in axes coords -a.text(0.05, 0.95, txtstr, transform=a.transAxes, fontsize=14, - verticalalignment='top', bbox=props) - -###################### LLT_model ######################################### -# * u0 = Im + .03*randn(size(Im)); % adding noise -# [Den] = LLT_model(single(u0), 10, 0.1, 1); -#Den = LLT_model(single(u0), 25, 0.0003, 300, 0.0001, 0); -#input, regularization_parameter , time_step, number_of_iterations, -# tolerance_constant, restrictive_Z_smoothing=0 - -del out2 -start_time = timeit.default_timer() -reg = Regularizer(Regularizer.Algorithm.LLT_model) -out2 = reg(input=u0, regularization_parameter=25, - time_step=0.0003, - tolerance_constant=0.001, - number_of_iterations=300) -txtstr = reg.printParametersToString() -txtstr += "%s = %.3fs" % ('elapsed time',timeit.default_timer() - start_time) -print (txtstr) -a=fig.add_subplot(2,3,4) - -# these are matplotlib.patch.Patch properties -props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) -# place a text box in upper left in axes coords -a.text(0.05, 0.95, txtstr, transform=a.transAxes, fontsize=14, - verticalalignment='top', bbox=props) -imgplot = plt.imshow(out2,cmap="gray") - - -# ###################### PatchBased_Regul ######################################### -# # Quick 2D denoising example in Matlab: -# # Im = double(imread('lena_gray_256.tif'))/255; % loading image -# # u0 = Im + .03*randn(size(Im)); u0(u0<0) = 0; % adding noise -# # ImDen = PB_Regul_CPU(single(u0), 3, 1, 0.08, 0.05); -start_time = timeit.default_timer() -reg = Regularizer(Regularizer.Algorithm.PatchBased_Regul) -out2 = reg(input=u0, regularization_parameter=0.05, - searching_window_ratio=3, - similarity_window_ratio=1, - PB_filtering_parameter=0.08) -txtstr = reg.printParametersToString() -txtstr += "%s = %.3fs" % ('elapsed time',timeit.default_timer() - start_time) -print (txtstr) - -a=fig.add_subplot(2,3,5) - - -# these are matplotlib.patch.Patch properties -props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) -# place a text box in upper left in axes coords -a.text(0.05, 0.95, txtstr, transform=a.transAxes, fontsize=14, - verticalalignment='top', bbox=props) -imgplot = plt.imshow(out2,cmap="gray") - - -# ###################### TGV_PD ######################################### -# # Quick 2D denoising example in Matlab: -# # Im = double(imread('lena_gray_256.tif'))/255; % loading image -# # u0 = Im + .03*randn(size(Im)); u0(u0<0) = 0; % adding noise -# # u = PrimalDual_TGV(single(u0), 0.02, 1.3, 1, 550); - -start_time = timeit.default_timer() -reg = Regularizer(Regularizer.Algorithm.TGV_PD) -out2 = reg(input=u0, regularization_parameter=0.05, - first_order_term=1.3, - second_order_term=1, - number_of_iterations=550) -txtstr = reg.printParametersToString() -txtstr += "%s = %.3fs" % ('elapsed time',timeit.default_timer() - start_time) -print (txtstr) -a=fig.add_subplot(2,3,6) - -# these are matplotlib.patch.Patch properties -props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) -# place a text box in upper left in axes coords -a.text(0.05, 0.95, txtstr, transform=a.transAxes, fontsize=14, - verticalalignment='top', bbox=props) -imgplot = plt.imshow(out2,cmap="gray") - - -plt.show() - -################################################################################ -## -## 3D Regularizers -## -################################################################################ -##Example: -## figure; -## Im = double(imread('lena_gray_256.tif'))/255; % loading image -## u0 = Im + .05*randn(size(Im)); u0(u0 < 0) = 0; -## u = SplitBregman_TV(single(u0), 10, 30, 1e-04); -# -##filename = r"C:\Users\ofn77899\Documents\GitHub\CCPi-Reconstruction\python\test\reconstruction_example.mha" -#filename = r"C:\Users\ofn77899\Documents\GitHub\CCPi-Simpleflex\data\head.mha" -# -#reader = vtk.vtkMetaImageReader() -#reader.SetFileName(os.path.normpath(filename)) -#reader.Update() -##vtk returns 3D images, let's take just the one slice there is as 2D -#Im = Converter.vtk2numpy(reader.GetOutput()) -#Im = Im.astype('float32') -##imgplot = plt.imshow(Im) -#perc = 0.05 -#u0 = Im + (perc* np.random.normal(size=np.shape(Im))) -## map the u0 u0->u0>0 -#f = np.frompyfunc(lambda x: 0 if x < 0 else x, 1,1) -#u0 = f(u0).astype('float32') -#converter = Converter.numpy2vtkImporter(u0, reader.GetOutput().GetSpacing(), -# reader.GetOutput().GetOrigin()) -#converter.Update() -#writer = vtk.vtkMetaImageWriter() -#writer.SetInputData(converter.GetOutput()) -#writer.SetFileName(r"C:\Users\ofn77899\Documents\GitHub\CCPi-FISTA_reconstruction\data\noisy_head.mha") -##writer.Write() -# -# -### plot -#fig3D = plt.figure() -##a=fig.add_subplot(3,3,1) -##a.set_title('Original') -##imgplot = plt.imshow(Im) -#sliceNo = 32 -# -#a=fig3D.add_subplot(2,3,1) -#a.set_title('noise') -#imgplot = plt.imshow(u0.T[sliceNo]) -# -#reg_output3d = [] -# -############################################################################### -## Call regularizer -# -######################## SplitBregman_TV ##################################### -## u = SplitBregman_TV(single(u0), 10, 30, 1e-04); -# -##reg = Regularizer(Regularizer.Algorithm.SplitBregman_TV) -# -##out = reg(input=u0, regularization_parameter=10., #number_of_iterations=30, -## #tolerance_constant=1e-4, -## TV_Penalty=Regularizer.TotalVariationPenalty.l1) -# -#out2 = Regularizer.SplitBregman_TV(input=u0, regularization_parameter=10., number_of_iterations=30, -# tolerance_constant=1e-4, -# TV_Penalty=Regularizer.TotalVariationPenalty.l1) -# -# -#pars = out2[-2] -#reg_output3d.append(out2) -# -#a=fig3D.add_subplot(2,3,2) -# -# -#textstr = out2[-1] -# -# -## these are matplotlib.patch.Patch properties -#props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) -## place a text box in upper left in axes coords -#a.text(0.05, 0.95, textstr, transform=a.transAxes, fontsize=14, -# verticalalignment='top', bbox=props) -#imgplot = plt.imshow(reg_output3d[-1][0].T[sliceNo]) -# -####################### FGP_TV ######################################### -## u = FGP_TV(single(u0), 0.05, 100, 1e-04); -#out2 = Regularizer.FGP_TV(input=u0, regularization_parameter=0.005, -# number_of_iterations=200) -#pars = out2[-2] -#reg_output3d.append(out2) -# -#a=fig3D.add_subplot(2,3,2) -# -# -#textstr = out2[-1] -# -# -## these are matplotlib.patch.Patch properties -#props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) -## place a text box in upper left in axes coords -#a.text(0.05, 0.95, textstr, transform=a.transAxes, fontsize=14, -# verticalalignment='top', bbox=props) -#imgplot = plt.imshow(reg_output3d[-1][0].T[sliceNo]) -# -####################### LLT_model ######################################### -## * u0 = Im + .03*randn(size(Im)); % adding noise -## [Den] = LLT_model(single(u0), 10, 0.1, 1); -##Den = LLT_model(single(u0), 25, 0.0003, 300, 0.0001, 0); -##input, regularization_parameter , time_step, number_of_iterations, -## tolerance_constant, restrictive_Z_smoothing=0 -#out2 = Regularizer.LLT_model(input=u0, regularization_parameter=25, -# time_step=0.0003, -# tolerance_constant=0.0001, -# number_of_iterations=300) -#pars = out2[-2] -#reg_output3d.append(out2) -# -#a=fig3D.add_subplot(2,3,2) -# -# -#textstr = out2[-1] -# -# -## these are matplotlib.patch.Patch properties -#props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) -## place a text box in upper left in axes coords -#a.text(0.05, 0.95, textstr, transform=a.transAxes, fontsize=14, -# verticalalignment='top', bbox=props) -#imgplot = plt.imshow(reg_output3d[-1][0].T[sliceNo]) -# -####################### PatchBased_Regul ######################################### -## Quick 2D denoising example in Matlab: -## Im = double(imread('lena_gray_256.tif'))/255; % loading image -## u0 = Im + .03*randn(size(Im)); u0(u0<0) = 0; % adding noise -## ImDen = PB_Regul_CPU(single(u0), 3, 1, 0.08, 0.05); -# -#out2 = Regularizer.PatchBased_Regul(input=u0, regularization_parameter=0.05, -# searching_window_ratio=3, -# similarity_window_ratio=1, -# PB_filtering_parameter=0.08) -#pars = out2[-2] -#reg_output3d.append(out2) -# -#a=fig3D.add_subplot(2,3,2) -# -# -#textstr = out2[-1] -# -# -## these are matplotlib.patch.Patch properties -#props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) -## place a text box in upper left in axes coords -#a.text(0.05, 0.95, textstr, transform=a.transAxes, fontsize=14, -# verticalalignment='top', bbox=props) -#imgplot = plt.imshow(reg_output3d[-1][0].T[sliceNo]) -# - -###################### TGV_PD ######################################### -# Quick 2D denoising example in Matlab: -# Im = double(imread('lena_gray_256.tif'))/255; % loading image -# u0 = Im + .03*randn(size(Im)); u0(u0<0) = 0; % adding noise -# u = PrimalDual_TGV(single(u0), 0.02, 1.3, 1, 550); - - -#out2 = Regularizer.TGV_PD(input=u0, regularization_parameter=0.05, -# first_order_term=1.3, -# second_order_term=1, -# number_of_iterations=550) -#pars = out2[-2] -#reg_output3d.append(out2) -# -#a=fig3D.add_subplot(2,3,2) -# -# -#textstr = out2[-1] -# -# -## these are matplotlib.patch.Patch properties -#props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) -## place a text box in upper left in axes coords -#a.text(0.05, 0.95, textstr, transform=a.transAxes, fontsize=14, -# verticalalignment='top', bbox=props) -#imgplot = plt.imshow(reg_output3d[-1][0].T[sliceNo]) diff --git a/recipes/regularizers/bld.bat b/recipes/regularisers/bld.bat index 6f2f7e7..6f2f7e7 100644 --- a/recipes/regularizers/bld.bat +++ b/recipes/regularisers/bld.bat diff --git a/recipes/regularizers/build.sh b/recipes/regularisers/build.sh index 0b8bce2..0b8bce2 100644 --- a/recipes/regularizers/build.sh +++ b/recipes/regularisers/build.sh diff --git a/recipes/regularizers/meta.yaml b/recipes/regularisers/meta.yaml index 37e447e..f204a6b 100644 --- a/recipes/regularizers/meta.yaml +++ b/recipes/regularisers/meta.yaml @@ -1,5 +1,5 @@ package: - name: cil_regularizer + name: cil_regulariser version: {{ environ['CIL_VERSION'] }} #source: @@ -37,4 +37,4 @@ requirements: about: home: http://www.ccpi.ac.uk license: Apache v2.0 - summary: Regularizer package from CCPi + summary: Regulariser package from CCPi |