# HG changeset patch # User luisf # Date 1334847314 -3600 # Node ID 15fd4c5be71a70d812fa664817eeeb0954694978 # Parent efe179d9757c8a03b96d3600a33b1d8cfe30a69a# Parent b1db9e090542cf20959767f15e35d97bc7d64cb9 merge diff -r efe179d9757c -r 15fd4c5be71a Problems/generatePierreProblem.m --- a/Problems/generatePierreProblem.m Wed Apr 11 16:28:46 2012 +0100 +++ b/Problems/generatePierreProblem.m Thu Apr 19 15:55:14 2012 +0100 @@ -88,18 +88,17 @@ if (numel(blocksize)==1) blocksize = ones(1,p)*blocksize; end -%% -%% create dictionary data %% -S=im2colstep(src,blocksize); +%% create dictionary data +S=im2col(src,blocksize,'sliding'); for j= 1:size(S,2) S(:,j)=S(:,j)./norm(S(:,j)); end -%% create measurement matrix %% - -T=im2colstep(trg,blocksize, blocksize); +%% observed patches matrix +% that are going to be decomposed on the dictionary +T=im2col(trg,blocksize, 'distinct'); %% output structure %% diff -r efe179d9757c -r 15fd4c5be71a Problems/generatePierre_Problem.m --- a/Problems/generatePierre_Problem.m Wed Apr 11 16:28:46 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,121 +0,0 @@ -function data=generatePierre_Problem(src, trg, blocksize, dictsize); -%% Generate Pierre Villars Problem -% -% Pierre_Problem is a part of the SMALLbox and generates the problem -% suggested by Professor Pierre Vandergheynst on the SMALL meeting in -% Villars. -% The function takes as an input: -% - src - source image matrix (if not present function promts user for -% an image file) , -% - trg - target image matrix (if not present function promts user for -% an image file) , -% - blocksize - block (patch) vertical/horizontal dimension (default 8), -% - dictsize - dictionary size (default - all patches from target -% image). -% -% The output of the function is stucture with following fields: -% - srcname - source image name, -% - imageSrc - source image matrix, -% - trgname - target image name, -% - imageTrg - Target image matrix, -% - A - dictonary with patches from the source image, -% - b - measurement matrix (i.e. patches from target image to be -% represented in dictionary A, -% - m - size of patches (default 25), -% - n - number of patches to be represented, -% - p - dictionary size, -% - blocksize - block size (default [5 5]), -% - maxval - maximum value (default - 255) -% - sparse - if 1 SMALL_solve will keep solution matrix in sparse form, -% due to memory constrains. - -% -% Centre for Digital Music, Queen Mary, University of London. -% This file copyright 2010 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. -%% prompt user for images %% - -% ask for source file name - -TMPpath=pwd; -FS=filesep; -if ~ exist( 'src', 'var' ) || isempty(src) -[pathstr1, name, ext] = fileparts(which('SMALLboxSetup.m')); -cd([pathstr1,FS,'data',FS,'images']); -[filename,pathname] = uigetfile({'*.png;'},'Select a source image'); -[pathstr, name, ext] = fileparts(filename); -data.srcname=name; -src = imread(filename); -src = double(src); -end; - -% ask for target file name - -if ~ exist( 'trg', 'var' ) || isempty(trg) -[filename,pathname] = uigetfile({'*.png;'},'Select a target image'); -[pathstr, name, ext] = fileparts(filename); -data.trgname=name; -trg = imread(filename); -trg = double(trg); -end; -cd(TMPpath); - -%% set parameters %% - -maxval = 255; -if ~ exist( 'blocksize', 'var' ) || isempty(blocksize),blocksize = 5;end - -if ~ exist( 'dictsize', 'var' ) || isempty(dictsize), - dictsize = (size(src,1)-blocksize+1)*(size(src,2)-blocksize+1); - patch_idx=1:dictsize; -else - num_blocks_src=(size(src,1)-blocksize+1)*(size(src,2)-blocksize+1); - patch_idx=1:floor(num_blocks_src/dictsize):dictsize*floor(num_blocks_src/dictsize); -end - -p = ndims(src); -if (p==2 && any(size(src)==1) && length(blocksize)==1) - p = 1; -end - - -% blocksize % -if (numel(blocksize)==1) - blocksize = ones(1,p)*blocksize; -end -%% -%% create dictionary data %% - -S=im2colstep(src,blocksize); - -for j= 1:size(S,2) - S(:,j)=S(:,j)./norm(S(:,j)); -end - -%% create measurement matrix %% - -T=im2colstep(trg,blocksize, blocksize); - -%% output structure %% - -data.imageSrc = src; -data.imageTrg = trg; -data.A = S(:,patch_idx); -data.b = T; -data.m = size(T,1); -data.n = size(T,2); -data.p = size(data.A,2); -data.blocksize=blocksize; -data.maxval=maxval; - -% keep coefficients matrix in sparse form and do not convert it to full. -% getting around out of memory problem when converting big matrix from -% sparse to full... (check SMALL_solve function) -data.sparse=1; - - diff -r efe179d9757c -r 15fd4c5be71a config/SMALL_learn_config.m --- a/config/SMALL_learn_config.m Wed Apr 11 16:28:46 2012 +0100 +++ b/config/SMALL_learn_config.m Thu Apr 19 15:55:14 2012 +0100 @@ -1,7 +1,10 @@ %% Configuration file used in SMALL_learn % -% Use this file to change the dictionary learning algorithms in SMALLBox -% Please refer to the documentation before editing this file +% Please DO NOT use this file to change the dictionary learning algorithms in SMALLBox +% If you want to change the dictionary learning algorithms +% create a copy of this file named 'SMALL_learn_config_local.m' +% +% Please refer to the documentation for further information % Centre for Digital Music, Queen Mary, University of London. % This file copyright 2009 Ivan Damnjanovic. @@ -73,7 +76,12 @@ DL.D(:,i)=DL.D(:,i)/norm(DL.D(:,i)); end D = DL.D; - + +%% +% Please do not make any changes to the 'SMALL_learn_config.m' file +% All the changes should be done to your local configuration file +% named 'SMALL_learn_config_local.m' +% % To introduce new dictionary learning technique put the files in % your Matlab path. Next, unique name for your toolbox needs % to be defined and also prefferd API for toolbox functions diff -r efe179d9757c -r 15fd4c5be71a config/SMALL_solve_config.m --- a/config/SMALL_solve_config.m Wed Apr 11 16:28:46 2012 +0100 +++ b/config/SMALL_solve_config.m Thu Apr 19 15:55:14 2012 +0100 @@ -1,7 +1,10 @@ %% Configuration file used in SMALL_solve % -% Use this file to change the solvers in SMALLBox -% Please refer to the documentation before editing this file +% Please DO NOT use this file to change the solvers used in SMALLBox +% If you want to change the solvers create a copy +% of this file named 'SMALL_learn_config_local.m' +% +% Please refer to the documentation for further information % Centre for Digital Music, Queen Mary, University of London. % This file copyright 2009 Ivan Damnjanovic. @@ -14,6 +17,7 @@ % %% + if strcmpi(solver.toolbox,'sparselab') y = eval([solver.name,'(SparseLab_A, b, n,',solver.param,');']); elseif strcmpi(solver.toolbox,'sparsify') @@ -37,11 +41,11 @@ epsilon=solver.param.epsilon; maxatoms=solver.param.maxatoms; y = eval([solver.name,'(A, b, G,epsilon,''maxatoms'',maxatoms,''checkdict'',''off'');']); -% danieleb: added call to omp functions with fast implementation. + % danieleb: added call to omp functions with fast implementation. elseif (strcmpi(solver.toolbox, 'ompbox_fast')) DtX=A'*b; - XtX = sum(b.*b); - G=A'*A; + XtX = sum(b.*b); + G=A'*A; epsilon=solver.param.epsilon; maxatoms=solver.param.maxatoms; y = eval([solver.name,'(DtX, XtX, G,epsilon,''maxatoms'',maxatoms,''checkdict'',''off'');']); @@ -71,6 +75,11 @@ [y, cost] = wrapper_mm_solver(b, A, solver.param); + %% + % Please do not make any changes to the 'SMALL_solve_config.m' file + % All the changes should be done to your local configuration file + % named 'SMALL_solve_config_local.m' + % % To introduce new sparse representation algorithm put the files in % your Matlab path. Next, unique name for your toolbox and % prefferd API needs to be defined. diff -r efe179d9757c -r 15fd4c5be71a util/SMALL_learn.m --- a/util/SMALL_learn.m Wed Apr 11 16:28:46 2012 +0100 +++ b/util/SMALL_learn.m Thu Apr 19 15:55:14 2012 +0100 @@ -28,8 +28,16 @@ start=cputime; tStart=tic; -% toolboxes configuration file -run(fullfile(SMALL_path, 'config/SMALL_learn_config.m')); +%% toolbox configuration +% test if there is a locally modified version of the config +% otherwise reads the "default" config file +if exist(fullfile(SMALL_path, 'config/SMALL_learn_config_local.m'), 'file') == 2 + printf('\n\nSMALL_learn: Using local configuration file.\n\n'); + run(fullfile(SMALL_path, 'config/SMALL_learn_config_local.m')); +else + printf('\n\nSMALL_learn: Using default configuration file.\n\n'); + run(fullfile(SMALL_path, 'config/SMALL_learn_config.m')); +end %% % Dictionary Learning time diff -r efe179d9757c -r 15fd4c5be71a util/SMALL_solve.m --- a/util/SMALL_solve.m Wed Apr 11 16:28:46 2012 +0100 +++ b/util/SMALL_solve.m Thu Apr 19 15:55:14 2012 +0100 @@ -48,8 +48,14 @@ start=cputime; tStart=tic; -% solvers configuration file -run(fullfile(SMALL_path, 'config/SMALL_solve_config.m')); +%% solvers configuration +% test if there is a locally modified version of the config +% otherwise reads the "default" config file +if exist(fullfile(SMALL_path, 'config/SMALL_solve_config_local.m'), 'file') == 2 + run(fullfile(SMALL_path, 'config/SMALL_solve_config_local.m')); +else + run(fullfile(SMALL_path, 'config/SMALL_solve_config.m')); +end %% % Sparse representation time