idamnjanovic@6
|
1 %% Pierre Villars Example
|
idamnjanovic@6
|
2 % This example is based on the experiment suggested by Professor Pierre
|
idamnjanovic@6
|
3 % Vandergheynst on the SMALL meeting in Villars.
|
idamnjanovic@6
|
4 % The idea behind is to use patches from source image as a dictonary in
|
idamnjanovic@6
|
5 % which we represent target image using matching pursuit algorithm.
|
idamnjanovic@6
|
6 % Calling Pierre_Problem function to get src image to be used as dictionary
|
idamnjanovic@6
|
7 % and target image to be represented using MP with 3 paches from source image
|
idamnjanovic@6
|
8 %
|
idamnjanovic@6
|
9 %
|
idamnjanovic@6
|
10 % Ivan Damnjanovic 2010
|
idamnjanovic@6
|
11 %%
|
idamnjanovic@6
|
12
|
idamnjanovic@6
|
13 clear all;
|
idamnjanovic@6
|
14
|
idamnjanovic@6
|
15 % Defining the Problem structure
|
idamnjanovic@6
|
16
|
idamnjanovic@6
|
17 SMALL.Problem = Pierre_Problem();
|
idamnjanovic@6
|
18
|
idamnjanovic@6
|
19 % Show original image and image that is used as a dictionary
|
idamnjanovic@6
|
20 figure('Name', 'Original and Dictionary Image');
|
idamnjanovic@6
|
21
|
idamnjanovic@6
|
22 subplot(1,2,1); imshow(SMALL.Problem.imageTrg/SMALL.Problem.maxval);
|
idamnjanovic@6
|
23 title('Original Image');
|
idamnjanovic@6
|
24 subplot(1,2,2); imshow(SMALL.Problem.imageSrc/SMALL.Problem.maxval);
|
idamnjanovic@6
|
25 title('Dictionary image:');
|
idamnjanovic@6
|
26
|
idamnjanovic@6
|
27 % Using ten different dictionary sizes. First dictionary will contain all
|
idamnjanovic@6
|
28 % patches from the source image and last one will have only
|
idamnjanovic@6
|
29 % num_src_patches/2^9 atoms representing equidistant patches taken from
|
idamnjanovic@6
|
30 % the source image.
|
idamnjanovic@6
|
31
|
idamnjanovic@6
|
32 n =10;
|
idamnjanovic@6
|
33 dictsize=zeros(1,n);
|
idamnjanovic@6
|
34 time = zeros(1,n);
|
idamnjanovic@6
|
35 psnr = zeros(1,n);
|
idamnjanovic@6
|
36
|
idamnjanovic@6
|
37 for i=1:n
|
idamnjanovic@6
|
38
|
idamnjanovic@6
|
39
|
idamnjanovic@6
|
40 % Set reconstruction function
|
idamnjanovic@6
|
41
|
idamnjanovic@6
|
42 SMALL.Problem.reconstruct=@(x) Pierre_reconstruct(x, SMALL.Problem);
|
idamnjanovic@6
|
43
|
idamnjanovic@6
|
44 SMALL.solver(i)=SMALL_init_solver;
|
idamnjanovic@6
|
45
|
idamnjanovic@6
|
46 % Defining the parameters sparse representation
|
idamnjanovic@6
|
47
|
idamnjanovic@6
|
48 SMALL.solver(i).toolbox='SMALL';
|
idamnjanovic@6
|
49 SMALL.solver(i).name='SMALL_MP';
|
idamnjanovic@6
|
50
|
idamnjanovic@6
|
51 % Parameters needed for matching pursuit (max number of atoms is 3
|
idamnjanovic@6
|
52 % and residual error goal is 1e14
|
idamnjanovic@6
|
53
|
idamnjanovic@6
|
54 SMALL.solver(i).param=sprintf('%d, 1e-14',3);
|
idamnjanovic@6
|
55
|
idamnjanovic@6
|
56 % Represent the image using the source image patches as dictionary
|
idamnjanovic@6
|
57
|
idamnjanovic@6
|
58 SMALL.solver(i)=SMALL_solve(SMALL.Problem, SMALL.solver(i));
|
idamnjanovic@6
|
59
|
idamnjanovic@6
|
60
|
idamnjanovic@6
|
61 dictsize(1,i) = size(SMALL.Problem.A,2);
|
idamnjanovic@6
|
62 time(1,i) = SMALL.solver(i).time;
|
idamnjanovic@6
|
63 psnr(1,i) = SMALL.solver(i).reconstructed.psnr;
|
idamnjanovic@6
|
64
|
idamnjanovic@6
|
65 % Set new SMALL.Problem.A dictionary taking every second patch from
|
idamnjanovic@6
|
66 % previous dictionary
|
idamnjanovic@6
|
67
|
idamnjanovic@6
|
68 SMALL.Problem.A=SMALL.Problem.A(:,1:2:dictsize(1,i));
|
idamnjanovic@6
|
69
|
idamnjanovic@6
|
70
|
idamnjanovic@6
|
71 %% show reconstructed image %%
|
idamnjanovic@6
|
72 figure('Name', sprintf('dictsize=%d', dictsize(1,i)));
|
idamnjanovic@6
|
73
|
idamnjanovic@6
|
74 imshow(SMALL.solver(i).reconstructed.image/SMALL.Problem.maxval);
|
idamnjanovic@6
|
75 title(sprintf('Reconstructed image, PSNR: %.2f dB in %.2f s',...
|
idamnjanovic@6
|
76 SMALL.solver(i).reconstructed.psnr, SMALL.solver(i).time ));
|
idamnjanovic@6
|
77
|
idamnjanovic@6
|
78
|
idamnjanovic@6
|
79 end
|
idamnjanovic@6
|
80
|
idamnjanovic@6
|
81 %% plot time and psnr given dictionary size %%
|
idamnjanovic@6
|
82 figure('Name', 'time and psnr');
|
idamnjanovic@6
|
83
|
idamnjanovic@6
|
84 subplot(1,2,1); plot(dictsize(1,:), time(1,:), 'ro-');
|
idamnjanovic@6
|
85 title('Time vs number of source image patches used');
|
idamnjanovic@6
|
86 subplot(1,2,2); plot(dictsize(1,:), psnr(1,:), 'b*-');
|
idamnjanovic@6
|
87 title('PSNR vs number of source image patches used'); |