www.gusucode.com > matlab非局部均值工具箱 > matlab非局部均值工具箱/matlab非局部均值工具箱/toolbox_nlmeans/tests/test_edge_synthesis.m

    % test for image synthesis using the manifold model

clear all;
k = 3; % hald window width
n = 100;  % size of synthesized image


%% compute the set of patches
w = 2*k+1;
options.n_delta = 17;
options.n_theta = 16;
options.sigma = 0.05;
options.rescale = 0;
options.manifold_type = 'lines';
options.manifold_type = 'edges';
[Q,delta_list,theta_list] = compute_edge_patches(w, options);
Q = (Q+1)/2; % patches should have values in [0,1]

ma = size(Q,3);
na = 1;
s = 1;  % number of colors

%% PCA projection
options.ndims = min(40,w^2); % number of dimension used for distance computation (PCA dim.reduc.)
H = reshape(Q, [s*w^2 na*ma]);
[options.P,X1,v,options.Psi] = pca(H,options.ndims);
% perform PCA projection
H = H - repmat( options.Psi, [1 na*ma] );
H = options.P'*H;
% reshape matrix
H = reshape(H, [options.ndims ma na]);
H = reshape( shiftdim(H,1), [ma na options.ndims]);
Ma = Q((end+1)/2,(end+1)/2,:); Ma = Ma(:);

options.Ha = H;
options.Ma = Ma;
options.k = k;
    

%% options of NL means
options.T = 0.01;       % width of the gaussian, relative to max(M(:))  (=1 here)
options.max_dist = 100000;  % search width (search all the patches)


% lambda=1 : total synthesis
lambda = 1;


repimg = ['results/' options.manifold_type '-synth/w' num2str(w) '-t' num2str(options.T) '-la' num2str(lambda) '/'];
if not(exist(repimg))
    mkdir(repimg);
end
reptheta = [repimg 'theta-delta/'];
if not(exist(reptheta))
    mkdir(reptheta);
end
name = ['edge'];

% initialization
M = double( rand(n)>0.5 );

use_thresh_decay = 0;

niter = 50;
%% iterations
for i=1:niter
    progressbar(i,niter);

    % set width of the windows
    if use_thresh_decay
        options.T = Tmax - (i-1)/(niter-1)*(Tmax-Tmin);
    end
    
    [Mm,Vx,Vy] = perform_nl_means(M, options);
    
    % perform partial update
    M = M*(1-lambda) + Mm*lambda;
    
    Theta = theta_list(Vx);
    Delta = delta_list(Vx);
    
    % save
    warning off;
    imwrite(clamp(Mm), [repimg name '-synth-' num2string_fixeddigit(i,2) '.png'], 'png');
    warning on;
end
fprintf('\n');