idamnjanovic@8
|
1 function solver=SMALL_denoise(Problem, solver)
|
idamnjanovic@8
|
2 %%% SMALL denoising
|
idamnjanovic@24
|
3 %
|
idamnjanovic@24
|
4 % Centre for Digital Music, Queen Mary, University of London.
|
idamnjanovic@24
|
5 % This file copyright 2009 Ivan Damnjanovic.
|
idamnjanovic@24
|
6 %
|
idamnjanovic@24
|
7 % This program is free software; you can redistribute it and/or
|
idamnjanovic@24
|
8 % modify it under the terms of the GNU General Public License as
|
idamnjanovic@24
|
9 % published by the Free Software Foundation; either version 2 of the
|
idamnjanovic@24
|
10 % License, or (at your option) any later version. See the file
|
idamnjanovic@24
|
11 % COPYING included with this distribution for more information.
|
idamnjanovic@24
|
12 %
|
idamnjanovic@8
|
13 % Function gets as input SMALL structure that contains SPARCO problem to
|
idamnjanovic@8
|
14 % be solved, name of the toolbox and solver, and parameters file for
|
idamnjanovic@8
|
15 % particular solver.
|
idamnjanovic@8
|
16 % It is based on omp/omps denoising by Ron Rubenstein (KSVD toolbox)
|
idamnjanovic@8
|
17 %
|
idamnjanovic@8
|
18 % Outputs are denoised image, psnr, number of non-zero coeficients and
|
idamnjanovic@8
|
19 % time spent
|
idamnjanovic@8
|
20 %%
|
idamnjanovic@8
|
21
|
idamnjanovic@8
|
22 %%%%% denoise the signal %%%%%
|
idamnjanovic@8
|
23 fprintf('\nStarting %s... \n', solver.name);
|
idamnjanovic@8
|
24 start=cputime;
|
idamnjanovic@8
|
25 %%
|
idamnjanovic@8
|
26 if strcmpi(solver.toolbox,'ompbox')
|
idamnjanovic@8
|
27 if (~isfield(solver.param,'lambda'))
|
idamnjanovic@8
|
28 solver.param.lambda = Problem.maxval/(10*Problem.sigma);
|
idamnjanovic@8
|
29 end
|
idamnjanovic@8
|
30
|
idamnjanovic@8
|
31 solver.param = Problem;
|
idamnjanovic@8
|
32 %solver.param.memusage = 'high';
|
idamnjanovic@8
|
33 solver.param = rmfield(solver.param, {'Noisy' 'Original' 'b' 'm' 'n' 'p' 'initdict'});
|
idamnjanovic@8
|
34 solver.param.x = Problem.Noisy;
|
idamnjanovic@8
|
35 solver.param.dict = Problem.A;
|
idamnjanovic@8
|
36 p = Problem.signalDim;
|
idamnjanovic@8
|
37 msgdelta=5;
|
idamnjanovic@8
|
38 % call the appropriate ompdenoise function
|
idamnjanovic@8
|
39 if (p==1)
|
idamnjanovic@8
|
40 [y,nz] = ompdenoise1(solver.param,msgdelta);
|
idamnjanovic@8
|
41 elseif (p==2)
|
idamnjanovic@8
|
42 [y,nz] = ompdenoise2(solver.param,msgdelta);
|
idamnjanovic@8
|
43 elseif (p==3)
|
idamnjanovic@8
|
44 [y,nz] = ompdenoise3(solver.param,msgdelta);
|
idamnjanovic@8
|
45 else
|
idamnjanovic@8
|
46 [y,nz] = ompdenoise(solver.param,msgdelta);
|
idamnjanovic@8
|
47 end
|
idamnjanovic@8
|
48 elseif strcmpi(solver.toolbox,'ompsbox')
|
idamnjanovic@8
|
49 if (~isfield(solver.param,'lambda'))
|
idamnjanovic@8
|
50 solver.param.lambda = Problem.maxval/(10*Problem.sigma);
|
idamnjanovic@8
|
51 end
|
idamnjanovic@8
|
52
|
idamnjanovic@8
|
53 solver.param = Problem;
|
idamnjanovic@8
|
54 %solver.param.memusage = 'high';
|
idamnjanovic@8
|
55 solver.param = rmfield(solver.param, {'Noisy' 'Original' 'b' 'm' 'n' 'p' 'initdict'});
|
idamnjanovic@8
|
56 solver.param.x = Problem.Noisy;
|
idamnjanovic@8
|
57 if issparse(Problem.A)
|
idamnjanovic@8
|
58 solver.param.A = Problem.A;
|
idamnjanovic@8
|
59 else
|
idamnjanovic@8
|
60 solver.param.A = sparse(Problem.A);
|
idamnjanovic@8
|
61 end
|
idamnjanovic@8
|
62 p = Problem.signalDim;
|
idamnjanovic@8
|
63 msgdelta=5;
|
idamnjanovic@8
|
64 % call the appropriate ompdenoise function
|
idamnjanovic@8
|
65 if (p==1)
|
idamnjanovic@8
|
66 [y,nz] = ompsdenoise1(solver.param,msgdelta);
|
idamnjanovic@8
|
67 elseif (p==2)
|
idamnjanovic@8
|
68 [y,nz] = ompsdenoise2(solver.param,msgdelta);
|
idamnjanovic@8
|
69 elseif (p==3)
|
idamnjanovic@8
|
70 [y,nz] = ompsdenoise3(solver.param,msgdelta);
|
idamnjanovic@8
|
71 else
|
idamnjanovic@8
|
72 [y,nz] = ompsdenoise(solver.param,msgdelta);
|
idamnjanovic@8
|
73 end
|
idamnjanovic@8
|
74 else
|
idamnjanovic@8
|
75 printf('\nToolbox has not been registered. Please change SMALL_learn file.\n');
|
idamnjanovic@8
|
76 return
|
idamnjanovic@8
|
77 end
|
idamnjanovic@8
|
78 %%
|
idamnjanovic@8
|
79 solver.time = cputime - start;
|
idamnjanovic@8
|
80 fprintf('\n%s finished task in %2f seconds. \n', solver.name, solver.time);
|
idamnjanovic@8
|
81 solver.reconstructed.Image=y;
|
idamnjanovic@8
|
82 solver.reconstructed.psnr=20*log10(Problem.maxval * sqrt(numel(Problem.Original)) / norm(Problem.Original(:)-solver.reconstructed.Image(:)));
|
idamnjanovic@8
|
83 solver.reconstructed.nz=nz;
|
idamnjanovic@8
|
84
|
idamnjanovic@8
|
85 end |