perform_wavelet_matching.m

来自「A toolbox for the non-local means algori」· M 代码 · 共 152 行

M
152
字号
function [M1,MW,MW1] = perform_wavelet_matching(M1,M,options)% perform_wavelet_matching - match multiscale histograms%% M1 = perform_wavelet_matching(M1,M,options);%%   M1 is the image to synthesize.%   M is the exemplar image.%%   This function match the histogram of the image and the histogram %   of each sub-band of a wavelet-like pyramid.%%   To do texture synthesis, one should apply several time this function.%   You can do it by setting the value of options.niter_synthesis.%   This leads to the synthesis as described in %%       Pyramid-Based Texture Analysis/Synthesis%       D. Heeger, J. Bergen,%       Siggraph 1995%%   Copyright (c) 2007 Gabriel Peyreoptions.null = 0;niter_synthesis = getoptions(options, 'niter_synthesis', 1);if not(isfield(options, 'color_mode'))    options.color_mode = 'pca';endif isfield(options, 'color_mode') && strcmp(options.color_mode, 'pca') && ~isfield(options, 'ColorP') && size(M,3)==3    [tmp,options.ColorP] = change_color_mode(M,+1,options);    endrgb_postmatching = getoptions(options, 'rgb_postmatching', 0);if size(M,3)==3    options.niter_synthesis = 1;    for iter=1:niter_synthesis        % color images        M  = change_color_mode(M, +1,options);        M1 = change_color_mode(M1,+1,options);        for i=1:size(M,3)            M1(:,:,i) = perform_wavelet_matching(M1(:,:,i),M(:,:,i), options);        end        M  = change_color_mode(M, -1,options);        M1 = change_color_mode(M1,-1,options);        if rgb_postmatching            for i=1:size(M,3)                M1(:,:,i) = perform_histogram_equalization(M1(:,:,i),M(:,:,i));            end        end    end    return;endif size(M,3)>1    for i=1:size(M,3)        [M1(:,:,i),MW,MW1] = perform_wavelet_matching(M1(:,:,i),M(:,:,i),options);    end    return;endn = size(M,1);n1 = size(M1,1);synthesis_method = getoptions(options, 'synthesis_method', 'steerable');m = 2^( ceil(log2(n)) );m1 = 2^( ceil(log2(n1)) );M = perform_image_extension(M,m);M1 = perform_image_extension(M1,m1);% precompute inputMW = my_transform(M, +1, options);for iter=1:niter_synthesis    % spatial equalization    M1 = my_equalization(M1,M);    % forward transforms    MW1 = my_transform(M1, +1, options);    % wavelet domain equalization    MW1 = my_equalization(MW1,MW);    % backward transform    M1 = my_transform(MW1, -1, options);    % spatial equalization    M1 = my_equalization(M1,M);endM1 = M1(1:n1,1:n1);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function M = my_equalization(M,M0)options.absval = 0;options.rows = 0;options.cols = 0;options.dim3 = 1;if iscell(M)    for i=1:min(length(M),length(M0))        M{i} = my_equalization(M{i},M0{i});            end    return;endif size(M,3)>1    for i=1:min(size(M,3),size(M0,3))        M(:,:,i) = my_equalization(M(:,:,i),M0(:,:,i));            end    return;endM = perform_histogram_equalization(M,M0);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function M = my_transform(M, dir, options)n = size(M,1);deltaJ = 5;Jmax = log2(n)-1;Jmin = max(Jmax-deltaJ+1,3);    synthesis_method = getoptions(options, 'synthesis_method', 'steerable');% steerable optionsif not(isfield(options, 'nb_orientations'))    options.nb_orientations = 4;end% wave ortho optionsoptions.wavelet_type = 'biorthogonal_swapped';options.wavelet_vm = 4;switch synthesis_method    case 'steerable'        M = perform_steerable_transform(M, Jmin, options);    case 'wavelets-ortho'        if dir==-1            M = convert_wavelets2list(M, Jmin);        end        M = perform_wavelet_transform(M, Jmin, dir, options);        if dir==1            M = convert_wavelets2list(M, Jmin);                    end        case 'quincunx-ti'        M = perform_quicunx_wavelet_transform_ti(M,Jmin,options);    case 'wavelets-ti'        options.wavelet_type = 'biorthogonal';        options.wavelet_vm = 3;        M = perform_atrou_transform(M,Jmin,options);    otherwise         error('Unknown transform.');end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?