Mercurial > hg > smallbox
diff examples/Pierre Villars/Pierre_Villars_Example.m @ 6:f72603404233
(none)
author | idamnjanovic |
---|---|
date | Mon, 22 Mar 2010 10:45:01 +0000 |
parents | |
children | cbf3521c25eb |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/Pierre Villars/Pierre_Villars_Example.m Mon Mar 22 10:45:01 2010 +0000 @@ -0,0 +1,87 @@ +%% Pierre Villars Example +% This example is based on the experiment suggested by Professor Pierre +% Vandergheynst on the SMALL meeting in Villars. +% The idea behind is to use patches from source image as a dictonary in +% which we represent target image using matching pursuit algorithm. +% Calling Pierre_Problem function to get src image to be used as dictionary +% and target image to be represented using MP with 3 paches from source image +% +% +% Ivan Damnjanovic 2010 +%% + +clear all; + +% Defining the Problem structure + +SMALL.Problem = Pierre_Problem(); + +% Show original image and image that is used as a dictionary +figure('Name', 'Original and Dictionary Image'); + +subplot(1,2,1); imshow(SMALL.Problem.imageTrg/SMALL.Problem.maxval); +title('Original Image'); +subplot(1,2,2); imshow(SMALL.Problem.imageSrc/SMALL.Problem.maxval); +title('Dictionary image:'); + +% Using ten different dictionary sizes. First dictionary will contain all +% patches from the source image and last one will have only +% num_src_patches/2^9 atoms representing equidistant patches taken from +% the source image. + +n =10; +dictsize=zeros(1,n); +time = zeros(1,n); +psnr = zeros(1,n); + +for i=1:n + + + % Set reconstruction function + + SMALL.Problem.reconstruct=@(x) Pierre_reconstruct(x, SMALL.Problem); + + SMALL.solver(i)=SMALL_init_solver; + + % Defining the parameters sparse representation + + SMALL.solver(i).toolbox='SMALL'; + SMALL.solver(i).name='SMALL_MP'; + + % Parameters needed for matching pursuit (max number of atoms is 3 + % and residual error goal is 1e14 + + SMALL.solver(i).param=sprintf('%d, 1e-14',3); + + % Represent the image using the source image patches as dictionary + + SMALL.solver(i)=SMALL_solve(SMALL.Problem, SMALL.solver(i)); + + + dictsize(1,i) = size(SMALL.Problem.A,2); + time(1,i) = SMALL.solver(i).time; + psnr(1,i) = SMALL.solver(i).reconstructed.psnr; + + % Set new SMALL.Problem.A dictionary taking every second patch from + % previous dictionary + + SMALL.Problem.A=SMALL.Problem.A(:,1:2:dictsize(1,i)); + + + %% show reconstructed image %% + figure('Name', sprintf('dictsize=%d', dictsize(1,i))); + + imshow(SMALL.solver(i).reconstructed.image/SMALL.Problem.maxval); + title(sprintf('Reconstructed image, PSNR: %.2f dB in %.2f s',... + SMALL.solver(i).reconstructed.psnr, SMALL.solver(i).time )); + + +end + +%% plot time and psnr given dictionary size %% +figure('Name', 'time and psnr'); + +subplot(1,2,1); plot(dictsize(1,:), time(1,:), 'ro-'); +title('Time vs number of source image patches used'); +subplot(1,2,2); plot(dictsize(1,:), psnr(1,:), 'b*-'); +title('PSNR vs number of source image patches used'); \ No newline at end of file