Mercurial > hg > smallbox
changeset 131:d8783debe482
Merge from branch "ivand_dev"
author | Ivan Damnjanovic lnx <ivan.damnjanovic@eecs.qmul.ac.uk> |
---|---|
date | Mon, 13 Jun 2011 15:04:31 +0100 (2011-06-13) |
parents | 5a6cef81227e (current diff) 037bb7da3703 (diff) |
children | b17f690df281 |
files | Problems/Pierre_Problem.m Problems/my_dummy_problem.m |
diffstat | 3 files changed, 144 insertions(+), 121 deletions(-) [+] |
line wrap: on
line diff
--- a/Problems/Pierre_Problem.m Mon Jun 13 14:58:00 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,121 +0,0 @@ -function data=Pierre_Problem(src, trg, blocksize, dictsize); -%% Generate Pierre 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, versn] = fileparts(which('SMALLboxSetup.m')); -cd([pathstr1,FS,'data',FS,'images']); -[filename,pathname] = uigetfile({'*.png;'},'Select a source image'); -[pathstr, name, ext, versn] = 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, versn] = 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; - -
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Problems/generateMyDummyProblem.m Mon Jun 13 15:04:31 2011 +0100 @@ -0,0 +1,23 @@ +function data=generateMyDummyProblem(varargin) +%% Template function that can be used for the sparse problem specification +% +% The problem specification function should take training signals and +% convert them to the matrix of training elements to be used for +% dictionary learning. +% +% input arguments: +% optional input parameters +% +% output arguments: +% data - SPARCO compatible problem structure + +%% Change copyright notice as appropriate: +% Centre for Digital Music, Queen Mary, University of London. +% This file copyright 2009 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. +%%
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Problems/generatePierre_Problem.m Mon Jun 13 15:04:31 2011 +0100 @@ -0,0 +1,121 @@ +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, versn] = fileparts(which('SMALLboxSetup.m')); +cd([pathstr1,FS,'data',FS,'images']); +[filename,pathname] = uigetfile({'*.png;'},'Select a source image'); +[pathstr, name, ext, versn] = 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, versn] = 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; + +