# HG changeset patch # User luisf # Date 1334852465 -3600 # Node ID c96880c0c47cf2a17fbd11dacc9aaeaac8ff4ec3 # Parent 88a5c02d20d3bb25cdff07f127e03a13e91002d8 renamed file. diff -r 88a5c02d20d3 -r c96880c0c47c examples/Image Denoising/SMALL_ImgDenoise_DL_test_TwoStep_KSVD_MOD_OLS_Mailhe.m --- a/examples/Image Denoising/SMALL_ImgDenoise_DL_test_TwoStep_KSVD_MOD_OLS_Mailhe.m Thu Apr 19 15:55:59 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,309 +0,0 @@ -%% Dictionary Learning for Image Denoising - KSVD vs Recursive Least Squares -% -% This file contains an example of how SMALLbox can be used to test different -% dictionary learning techniques in Image Denoising problem. -% It calls generateImageDenoiseProblem that will let you to choose image, -% add noise and use noisy image to generate training set for dictionary -% learning. -% Two dictionary learning techniques were compared: -% - KSVD - M. Elad, R. Rubinstein, and M. Zibulevsky, "Efficient -% Implementation of the K-SVD Algorithm using Batch Orthogonal -% Matching Pursuit", Technical Report - CS, Technion, April 2008. -% - RLS-DLA - Skretting, K.; Engan, K.; , "Recursive Least Squares -% Dictionary Learning Algorithm," Signal Processing, IEEE Transactions on, -% vol.58, no.4, pp.2121-2130, April 2010 -% - - -% Centre for Digital Music, Queen Mary, University of London. -% This file copyright 2011 Ivan Damnjanovic. -% -% This program is free software; you can redistribute it and/or -% modify it under the terms of the GNU General Public License as -% published by the Free Software Foundation; either version 2 of the -% License, or (at your option) any later version. See the file -% COPYING included with this distribution for more information. -% -%% - - - -% If you want to load the image outside of generateImageDenoiseProblem -% function uncomment following lines. This can be useful if you want to -% denoise more then one image for example. -% Here we are loading test_image.mat that contains structure with 5 images : lena, -% barbara,boat, house and peppers. -clear; -TMPpath=pwd; -FS=filesep; -[pathstr1, name, ext] = fileparts(which('SMALLboxSetup.m')); -cd([pathstr1,FS,'data',FS,'images']); -load('test_image.mat'); -cd(TMPpath); - -% Deffining the noise levels that we want to test - -noise_level=[10 20 25 50 100]; - -% Here we loop through different noise levels and images - -for noise_ind=2:2 -for im_num=2:2 - -% Defining Image Denoising Problem as Dictionary Learning -% Problem. As an input we set the number of training patches. - -SMALL.Problem = generateImageDenoiseProblem(test_image(im_num).i, 40000, '',256, noise_level(noise_ind)); -SMALL.Problem.name=int2str(im_num); - -Edata=sqrt(prod(SMALL.Problem.blocksize)) * SMALL.Problem.sigma * SMALL.Problem.gain; -maxatoms = floor(prod(SMALL.Problem.blocksize)/2); - - -%% -% Use KSVD Dictionary Learning Algorithm to Learn overcomplete dictionary -% Boris Mailhe ksvd update implentation omp is the same as with Rubinstein -% implementation - - -% Initialising solver structure -% Setting solver structure fields (toolbox, name, param, solution, -% reconstructed and time) to zero values - -SMALL.solver(1)=SMALL_init_solver; - -% Defining the parameters needed for image denoising - -SMALL.solver(1).toolbox='ompbox'; -SMALL.solver(1).name='omp2'; -SMALL.solver(1).param=struct(... - 'epsilon',Edata,... - 'maxatoms', maxatoms); - -% Initialising Dictionary structure -% Setting Dictionary structure fields (toolbox, name, param, D and time) -% to zero values - -SMALL.DL(1)=SMALL_init_DL('TwoStepDL', 'KSVD', '', 1); - - -% Defining the parameters for KSVD -% In this example we are learning 256 atoms in 20 iterations, so that -% every patch in the training set can be represented with target error in -% L2-norm (EData) -% Type help ksvd in MATLAB prompt for more options. - - -SMALL.DL(1).param=struct(... - 'solver', SMALL.solver(1),... - 'initdict', SMALL.Problem.initdict,... - 'dictsize', SMALL.Problem.p,... - 'iternum', 20,... - 'show_dict', 1); - -% Learn the dictionary - -SMALL.DL(1) = SMALL_learn(SMALL.Problem, SMALL.DL(1)); - -% Set SMALL.Problem.A dictionary -% (backward compatiblity with SPARCO: solver structure communicate -% only with Problem structure, ie no direct communication between DL and -% solver structures) - -SMALL.Problem.A = SMALL.DL(1).D; -SMALL.Problem.reconstruct = @(x) ImageDenoise_reconstruct(x, SMALL.Problem); - -% Denoising the image - find the sparse solution in the learned -% dictionary for all patches in the image and the end it uses -% reconstruction function to reconstruct the patches and put them into a -% denoised image - -SMALL.solver(1)=SMALL_solve(SMALL.Problem, SMALL.solver(1)); - -%% -% Use MOD Dictionary Learning Algorithm to Learn overcomplete dictionary -% Boris Mailhe MOD update implentation omp is the Ron Rubinstein -% implementation - - -% Initialising solver structure -% Setting solver structure fields (toolbox, name, param, solution, -% reconstructed and time) to zero values - -SMALL.solver(2)=SMALL_init_solver; - -% Defining the parameters needed for image denoising - -SMALL.solver(2).toolbox='ompbox'; -SMALL.solver(2).name='omp2'; -SMALL.solver(2).param=struct(... - 'epsilon',Edata,... - 'maxatoms', maxatoms); - -% Initialising Dictionary structure -% Setting Dictionary structure fields (toolbox, name, param, D and time) -% to zero values - -SMALL.DL(2)=SMALL_init_DL('TwoStepDL', 'MOD', '', 1); - - -% Defining the parameters for MOD -% In this example we are learning 256 atoms in 20 iterations, so that -% every patch in the training set can be represented with target error in -% L2-norm (EData) -% Type help ksvd in MATLAB prompt for more options - -SMALL.DL(2).param=struct(... - 'solver', SMALL.solver(2),... - 'initdict', SMALL.Problem.initdict,... - 'dictsize', SMALL.Problem.p,... - 'iternum', 20,... - 'show_dict', 1); - -% Learn the dictionary - -SMALL.DL(2) = SMALL_learn(SMALL.Problem, SMALL.DL(2)); - -% Set SMALL.Problem.A dictionary -% (backward compatiblity with SPARCO: solver structure communicate -% only with Problem structure, ie no direct communication between DL and -% solver structures) - -SMALL.Problem.A = SMALL.DL(2).D; -SMALL.Problem.reconstruct = @(x) ImageDenoise_reconstruct(x, SMALL.Problem); - -% Denoising the image - find the sparse solution in the learned -% dictionary for all patches in the image and the end it uses -% reconstruction function to reconstruct the patches and put them into a -% denoised image - -SMALL.solver(2)=SMALL_solve(SMALL.Problem, SMALL.solver(2)); -%% -% Use OLS Dictionary Learning Algorithm to Learn overcomplete dictionary -% Boris Mailhe ksvd update implentation omp is the Ron Rubinstein -% implementation - - -% Initialising solver structure -% Setting solver structure fields (toolbox, name, param, solution, -% reconstructed and time) to zero values - -SMALL.solver(3)=SMALL_init_solver; - -% Defining the parameters needed for image denoising - -SMALL.solver(3).toolbox='ompbox'; -SMALL.solver(3).name='omp2'; -SMALL.solver(3).param=struct(... - 'epsilon',Edata,... - 'maxatoms', maxatoms); - -% Initialising Dictionary structure -% Setting Dictionary structure fields (toolbox, name, param, D and time) -% to zero values - -SMALL.DL(3)=SMALL_init_DL('TwoStepDL', 'ols', '', 1); - - -% Defining the parameters for KSVD -% In this example we are learning 256 atoms in 20 iterations, so that -% every patch in the training set can be represented with target error in -% L2-norm (EData) -% Type help ksvd in MATLAB prompt for more options. - - -SMALL.DL(3).param=struct(... - 'solver', SMALL.solver(3),... - 'initdict', SMALL.Problem.initdict,... - 'dictsize', SMALL.Problem.p,... - 'iternum', 20,... - 'learningRate', 0.1,... - 'show_dict', 1); - -% Learn the dictionary - -SMALL.DL(3) = SMALL_learn(SMALL.Problem, SMALL.DL(3)); - -% Set SMALL.Problem.A dictionary -% (backward compatiblity with SPARCO: solver structure communicate -% only with Problem structure, ie no direct communication between DL and -% solver structures) - -SMALL.Problem.A = SMALL.DL(3).D; -SMALL.Problem.reconstruct = @(x) ImageDenoise_reconstruct(x, SMALL.Problem); - -% Denoising the image - find the sparse solution in the learned -% dictionary for all patches in the image and the end it uses -% reconstruction function to reconstruct the patches and put them into a -% denoised image - -SMALL.solver(3)=SMALL_solve(SMALL.Problem, SMALL.solver(3)); -%% -% Use Mailhe Dictionary Learning Algorithm to Learn overcomplete dictionary -% Boris Mailhe ksvd update implentation omp is the Ron Rubinstein -% implementation - - -% Initialising solver structure -% Setting solver structure fields (toolbox, name, param, solution, -% reconstructed and time) to zero values - -SMALL.solver(4)=SMALL_init_solver; - -% Defining the parameters needed for image denoising - -SMALL.solver(4).toolbox='ompbox'; -SMALL.solver(4).name='omp2'; -SMALL.solver(4).param=struct(... - 'epsilon',Edata,... - 'maxatoms', maxatoms); - -% Initialising Dictionary structure -% Setting Dictionary structure fields (toolbox, name, param, D and time) -% to zero values - -SMALL.DL(4)=SMALL_init_DL('TwoStepDL', 'opt', '', 1); - - -% Defining the parameters for KSVD -% In this example we are learning 256 atoms in 20 iterations, so that -% every patch in the training set can be represented with target error in -% L2-norm (EData) -% Type help ksvd in MATLAB prompt for more options. - - -SMALL.DL(4).param=struct(... - 'solver', SMALL.solver(4),... - 'initdict', SMALL.Problem.initdict,... - 'dictsize', SMALL.Problem.p,... - 'iternum', 20,... - 'learningRate', 2,... - 'show_dict', 1); - -% Learn the dictionary - -SMALL.DL(4) = SMALL_learn(SMALL.Problem, SMALL.DL(4)); - -% Set SMALL.Problem.A dictionary -% (backward compatiblity with SPARCO: solver structure communicate -% only with Problem structure, ie no direct communication between DL and -% solver structures) - -SMALL.Problem.A = SMALL.DL(4).D; -SMALL.Problem.reconstruct = @(x) ImageDenoise_reconstruct(x, SMALL.Problem); - -% Denoising the image - find the sparse solution in the learned -% dictionary for all patches in the image and the end it uses -% reconstruction function to reconstruct the patches and put them into a -% denoised image - -SMALL.solver(4)=SMALL_solve(SMALL.Problem, SMALL.solver(4)); - -%% show results %% - -SMALL_ImgDeNoiseResult(SMALL); - -%clear SMALL; -end -end - diff -r 88a5c02d20d3 -r c96880c0c47c examples/Image Denoising/SMALL_ImgDenoise_DL_test_TwoStep_KSVD_MOD_OLS_OPT.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/Image Denoising/SMALL_ImgDenoise_DL_test_TwoStep_KSVD_MOD_OLS_OPT.m Thu Apr 19 17:21:05 2012 +0100 @@ -0,0 +1,309 @@ +%% Dictionary Learning for Image Denoising - KSVD vs Recursive Least Squares +% +% This file contains an example of how SMALLbox can be used to test different +% dictionary learning techniques in Image Denoising problem. +% It calls generateImageDenoiseProblem that will let you to choose image, +% add noise and use noisy image to generate training set for dictionary +% learning. +% Two dictionary learning techniques were compared: +% - KSVD - M. Elad, R. Rubinstein, and M. Zibulevsky, "Efficient +% Implementation of the K-SVD Algorithm using Batch Orthogonal +% Matching Pursuit", Technical Report - CS, Technion, April 2008. +% - RLS-DLA - Skretting, K.; Engan, K.; , "Recursive Least Squares +% Dictionary Learning Algorithm," Signal Processing, IEEE Transactions on, +% vol.58, no.4, pp.2121-2130, April 2010 +% + + +% Centre for Digital Music, Queen Mary, University of London. +% This file copyright 2011 Ivan Damnjanovic. +% +% This program is free software; you can redistribute it and/or +% modify it under the terms of the GNU General Public License as +% published by the Free Software Foundation; either version 2 of the +% License, or (at your option) any later version. See the file +% COPYING included with this distribution for more information. +% +%% + + + +% If you want to load the image outside of generateImageDenoiseProblem +% function uncomment following lines. This can be useful if you want to +% denoise more then one image for example. +% Here we are loading test_image.mat that contains structure with 5 images : lena, +% barbara,boat, house and peppers. +clear; +TMPpath=pwd; +FS=filesep; +[pathstr1, name, ext] = fileparts(which('SMALLboxSetup.m')); +cd([pathstr1,FS,'data',FS,'images']); +load('test_image.mat'); +cd(TMPpath); + +% Deffining the noise levels that we want to test + +noise_level=[10 20 25 50 100]; + +% Here we loop through different noise levels and images + +for noise_ind=2:2 +for im_num=2:2 + +% Defining Image Denoising Problem as Dictionary Learning +% Problem. As an input we set the number of training patches. + +SMALL.Problem = generateImageDenoiseProblem(test_image(im_num).i, 40000, '',256, noise_level(noise_ind)); +SMALL.Problem.name=int2str(im_num); + +Edata=sqrt(prod(SMALL.Problem.blocksize)) * SMALL.Problem.sigma * SMALL.Problem.gain; +maxatoms = floor(prod(SMALL.Problem.blocksize)/2); + + +%% +% Use KSVD Dictionary Learning Algorithm to Learn overcomplete dictionary +% Boris Mailhe ksvd update implentation omp is the same as with Rubinstein +% implementation + + +% Initialising solver structure +% Setting solver structure fields (toolbox, name, param, solution, +% reconstructed and time) to zero values + +SMALL.solver(1)=SMALL_init_solver; + +% Defining the parameters needed for image denoising + +SMALL.solver(1).toolbox='ompbox'; +SMALL.solver(1).name='omp2'; +SMALL.solver(1).param=struct(... + 'epsilon',Edata,... + 'maxatoms', maxatoms); + +% Initialising Dictionary structure +% Setting Dictionary structure fields (toolbox, name, param, D and time) +% to zero values + +SMALL.DL(1)=SMALL_init_DL('TwoStepDL', 'KSVD', '', 1); + + +% Defining the parameters for KSVD +% In this example we are learning 256 atoms in 20 iterations, so that +% every patch in the training set can be represented with target error in +% L2-norm (EData) +% Type help ksvd in MATLAB prompt for more options. + + +SMALL.DL(1).param=struct(... + 'solver', SMALL.solver(1),... + 'initdict', SMALL.Problem.initdict,... + 'dictsize', SMALL.Problem.p,... + 'iternum', 20,... + 'show_dict', 1); + +% Learn the dictionary + +SMALL.DL(1) = SMALL_learn(SMALL.Problem, SMALL.DL(1)); + +% Set SMALL.Problem.A dictionary +% (backward compatiblity with SPARCO: solver structure communicate +% only with Problem structure, ie no direct communication between DL and +% solver structures) + +SMALL.Problem.A = SMALL.DL(1).D; +SMALL.Problem.reconstruct = @(x) ImageDenoise_reconstruct(x, SMALL.Problem); + +% Denoising the image - find the sparse solution in the learned +% dictionary for all patches in the image and the end it uses +% reconstruction function to reconstruct the patches and put them into a +% denoised image + +SMALL.solver(1)=SMALL_solve(SMALL.Problem, SMALL.solver(1)); + +%% +% Use MOD Dictionary Learning Algorithm to Learn overcomplete dictionary +% Boris Mailhe MOD update implentation omp is the Ron Rubinstein +% implementation + + +% Initialising solver structure +% Setting solver structure fields (toolbox, name, param, solution, +% reconstructed and time) to zero values + +SMALL.solver(2)=SMALL_init_solver; + +% Defining the parameters needed for image denoising + +SMALL.solver(2).toolbox='ompbox'; +SMALL.solver(2).name='omp2'; +SMALL.solver(2).param=struct(... + 'epsilon',Edata,... + 'maxatoms', maxatoms); + +% Initialising Dictionary structure +% Setting Dictionary structure fields (toolbox, name, param, D and time) +% to zero values + +SMALL.DL(2)=SMALL_init_DL('TwoStepDL', 'MOD', '', 1); + + +% Defining the parameters for MOD +% In this example we are learning 256 atoms in 20 iterations, so that +% every patch in the training set can be represented with target error in +% L2-norm (EData) +% Type help ksvd in MATLAB prompt for more options + +SMALL.DL(2).param=struct(... + 'solver', SMALL.solver(2),... + 'initdict', SMALL.Problem.initdict,... + 'dictsize', SMALL.Problem.p,... + 'iternum', 20,... + 'show_dict', 1); + +% Learn the dictionary + +SMALL.DL(2) = SMALL_learn(SMALL.Problem, SMALL.DL(2)); + +% Set SMALL.Problem.A dictionary +% (backward compatiblity with SPARCO: solver structure communicate +% only with Problem structure, ie no direct communication between DL and +% solver structures) + +SMALL.Problem.A = SMALL.DL(2).D; +SMALL.Problem.reconstruct = @(x) ImageDenoise_reconstruct(x, SMALL.Problem); + +% Denoising the image - find the sparse solution in the learned +% dictionary for all patches in the image and the end it uses +% reconstruction function to reconstruct the patches and put them into a +% denoised image + +SMALL.solver(2)=SMALL_solve(SMALL.Problem, SMALL.solver(2)); +%% +% Use OLS Dictionary Learning Algorithm to Learn overcomplete dictionary +% Boris Mailhe ksvd update implentation omp is the Ron Rubinstein +% implementation + + +% Initialising solver structure +% Setting solver structure fields (toolbox, name, param, solution, +% reconstructed and time) to zero values + +SMALL.solver(3)=SMALL_init_solver; + +% Defining the parameters needed for image denoising + +SMALL.solver(3).toolbox='ompbox'; +SMALL.solver(3).name='omp2'; +SMALL.solver(3).param=struct(... + 'epsilon',Edata,... + 'maxatoms', maxatoms); + +% Initialising Dictionary structure +% Setting Dictionary structure fields (toolbox, name, param, D and time) +% to zero values + +SMALL.DL(3)=SMALL_init_DL('TwoStepDL', 'ols', '', 1); + + +% Defining the parameters for KSVD +% In this example we are learning 256 atoms in 20 iterations, so that +% every patch in the training set can be represented with target error in +% L2-norm (EData) +% Type help ksvd in MATLAB prompt for more options. + + +SMALL.DL(3).param=struct(... + 'solver', SMALL.solver(3),... + 'initdict', SMALL.Problem.initdict,... + 'dictsize', SMALL.Problem.p,... + 'iternum', 20,... + 'learningRate', 0.1,... + 'show_dict', 1); + +% Learn the dictionary + +SMALL.DL(3) = SMALL_learn(SMALL.Problem, SMALL.DL(3)); + +% Set SMALL.Problem.A dictionary +% (backward compatiblity with SPARCO: solver structure communicate +% only with Problem structure, ie no direct communication between DL and +% solver structures) + +SMALL.Problem.A = SMALL.DL(3).D; +SMALL.Problem.reconstruct = @(x) ImageDenoise_reconstruct(x, SMALL.Problem); + +% Denoising the image - find the sparse solution in the learned +% dictionary for all patches in the image and the end it uses +% reconstruction function to reconstruct the patches and put them into a +% denoised image + +SMALL.solver(3)=SMALL_solve(SMALL.Problem, SMALL.solver(3)); +%% +% Use Mailhe Dictionary Learning Algorithm to Learn overcomplete dictionary +% Boris Mailhe ksvd update implentation omp is the Ron Rubinstein +% implementation + + +% Initialising solver structure +% Setting solver structure fields (toolbox, name, param, solution, +% reconstructed and time) to zero values + +SMALL.solver(4)=SMALL_init_solver; + +% Defining the parameters needed for image denoising + +SMALL.solver(4).toolbox='ompbox'; +SMALL.solver(4).name='omp2'; +SMALL.solver(4).param=struct(... + 'epsilon',Edata,... + 'maxatoms', maxatoms); + +% Initialising Dictionary structure +% Setting Dictionary structure fields (toolbox, name, param, D and time) +% to zero values + +SMALL.DL(4)=SMALL_init_DL('TwoStepDL', 'opt', '', 1); + + +% Defining the parameters for KSVD +% In this example we are learning 256 atoms in 20 iterations, so that +% every patch in the training set can be represented with target error in +% L2-norm (EData) +% Type help ksvd in MATLAB prompt for more options. + + +SMALL.DL(4).param=struct(... + 'solver', SMALL.solver(4),... + 'initdict', SMALL.Problem.initdict,... + 'dictsize', SMALL.Problem.p,... + 'iternum', 20,... + 'learningRate', 2,... + 'show_dict', 1); + +% Learn the dictionary + +SMALL.DL(4) = SMALL_learn(SMALL.Problem, SMALL.DL(4)); + +% Set SMALL.Problem.A dictionary +% (backward compatiblity with SPARCO: solver structure communicate +% only with Problem structure, ie no direct communication between DL and +% solver structures) + +SMALL.Problem.A = SMALL.DL(4).D; +SMALL.Problem.reconstruct = @(x) ImageDenoise_reconstruct(x, SMALL.Problem); + +% Denoising the image - find the sparse solution in the learned +% dictionary for all patches in the image and the end it uses +% reconstruction function to reconstruct the patches and put them into a +% denoised image + +SMALL.solver(4)=SMALL_solve(SMALL.Problem, SMALL.solver(4)); + +%% show results %% + +SMALL_ImgDeNoiseResult(SMALL); + +%clear SMALL; +end +end +