diff util/SMALL_denoise.m @ 8:33850553b702

(none)
author idamnjanovic
date Mon, 22 Mar 2010 10:56:54 +0000
parents
children fc395272d53e
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/util/SMALL_denoise.m	Mon Mar 22 10:56:54 2010 +0000
@@ -0,0 +1,77 @@
+function solver=SMALL_denoise(Problem, solver)
+
+%%% SMALL denoising
+%   Ivan Damnjanovic 2009
+%   Function gets as input SMALL structure that contains SPARCO problem to
+%   be solved, name of the toolbox and solver, and parameters file for
+%   particular solver.
+%   It is based on omp/omps denoising by Ron Rubenstein (KSVD toolbox)
+%
+%   Outputs are denoised image, psnr, number of non-zero coeficients and 
+%   time spent
+%%
+  
+  %%%%%  denoise the signal  %%%%%
+  fprintf('\nStarting %s... \n', solver.name);
+  start=cputime;
+  %%
+  if strcmpi(solver.toolbox,'ompbox')
+      if (~isfield(solver.param,'lambda'))
+          solver.param.lambda = Problem.maxval/(10*Problem.sigma);
+      end
+      
+      solver.param = Problem;
+      %solver.param.memusage = 'high';
+      solver.param = rmfield(solver.param, {'Noisy' 'Original' 'b' 'm' 'n' 'p' 'initdict'});
+      solver.param.x = Problem.Noisy;
+      solver.param.dict = Problem.A;
+      p = Problem.signalDim;
+      msgdelta=5;
+      % call the appropriate ompdenoise function
+      if (p==1)
+          [y,nz] = ompdenoise1(solver.param,msgdelta);
+      elseif (p==2)
+          [y,nz] = ompdenoise2(solver.param,msgdelta);
+      elseif (p==3)
+          [y,nz] = ompdenoise3(solver.param,msgdelta);
+      else
+          [y,nz] = ompdenoise(solver.param,msgdelta);
+      end
+  elseif strcmpi(solver.toolbox,'ompsbox')
+      if (~isfield(solver.param,'lambda'))
+          solver.param.lambda = Problem.maxval/(10*Problem.sigma);
+      end
+      
+      solver.param = Problem;
+      %solver.param.memusage = 'high';
+      solver.param = rmfield(solver.param, {'Noisy' 'Original' 'b' 'm' 'n' 'p' 'initdict'});
+      solver.param.x = Problem.Noisy;
+      if issparse(Problem.A)
+        solver.param.A = Problem.A;
+      else
+        solver.param.A = sparse(Problem.A);
+      end
+      p = Problem.signalDim;
+      msgdelta=5;
+      % call the appropriate ompdenoise function
+      if (p==1)
+          [y,nz] = ompsdenoise1(solver.param,msgdelta);
+      elseif (p==2)
+          [y,nz] = ompsdenoise2(solver.param,msgdelta);
+      elseif (p==3)
+          [y,nz] = ompsdenoise3(solver.param,msgdelta);
+      else
+          [y,nz] = ompsdenoise(solver.param,msgdelta);
+      end
+  else
+      printf('\nToolbox has not been registered. Please change SMALL_learn file.\n');
+      return
+  end
+ %%
+  solver.time = cputime - start;
+  fprintf('\n%s finished task in %2f seconds. \n', solver.name, solver.time);
+  solver.reconstructed.Image=y;
+  solver.reconstructed.psnr=20*log10(Problem.maxval * sqrt(numel(Problem.Original)) / norm(Problem.Original(:)-solver.reconstructed.Image(:)));
+  solver.reconstructed.nz=nz;
+  
+end
\ No newline at end of file