• 光照回归滤波+迭代


    function q = LEP(I, l, r,na,mu) %I should be the gray scale
    [hei, wid] = size(I);
    N = boxfilter(ones(hei, wid), r); 
    
    mean_I = boxfilter(I, r) ./ N;
    mean_l = boxfilter(l, r) ./ N;
    mean_Il = boxfilter(I.*l, r) ./ N;
    cov_Il = mean_Il - mean_I.* mean_l;
    %mean_I(isnan(mean_I)) = I(isnan(mean_I));
    
    mean_II = boxfilter(I.*I, r) ./ N;
    %temp = I.*I;
    %mean_II(isnan(mean_II)) = temp(isnan(mean_II));
    %mean_II(isinf(mean_II)) = temp(isinf(mean_II));
    
    var_I = mean_II - mean_I .* mean_I;
    
    [img_gradientx,img_gradienty]=gradient(I);
    
    grad_value = img_gradientx.*img_gradientx + img_gradienty.*img_gradienty;
    %grad_value_gen = sqrt(grad_value);
    mean_grad = boxfilter(grad_value, r) ./ N;
    
    a = (var_I+cov_Il.*mu)./ (var_I +mu.* var_I+na.*mean_grad); % Eqn. (5) in the paper;
    %a = (var_I)./ (var_I + mean_grad);
    b = mean_I - a .* mean_I; % Eqn. (6) in the paper;
    
    mean_a = boxfilter(a, r) ./ N;
    mean_b = boxfilter(b, r) ./ N;
    
    mean_a(isnan(mean_a)) = a(isnan(mean_a));
    mean_a(isinf(mean_a)) = a(isinf(mean_a));
    mean_b(isnan(mean_b)) = b(isnan(mean_b));
    mean_b(isinf(mean_b)) = b(isinf(mean_b));
    
    q = mean_a .* I + mean_b; % Eqn. (8) in the paper;
    q=real(q);
    %w = fspecial('gaussian',[5,5],1);
    %replicate:图像大小通过赋值外边界的值来扩展
    %symmetric 图像大小通过沿自身的边界进行镜像映射扩展
    %I_gauss = imfilter(I,w,'replicate');
    %q(isnan(q)) = I_gauss(isnan(q));
    %q(isinf(q)) = I_gauss(isinf(q));
    %q(q<0.001) = 0.001;
    end
    imgPath = '/home/hxj/gluon-tutorials/GAN/MultiPIE/MultiPIE_test_Gray_128/'; % 图像库路径 
    imgDir = dir([imgPath '*.png']); % 遍历所有jpg格式文件 
    J = imread('LEP/039_01_01_051_08.png');
    J = rgb2gray(J);
    J = imresize(J, [128, 128]);
    
    for i = 1:length(imgDir) % 遍历结构体就可以一一处理图片了
       % if str2num(imgDir(i).name(6:7)) > 8 &&  str2num(imgDir(i).name(6:7)) < 27
        X = imread([imgPath imgDir(i).name]); %读取每张图片 
        [h w c] = size(X);
        X(X==0) =1;
        if c == 3
            X = rgb2gray(X);
        end
        X = imresize(X, [128, 128]);
        log_x = log(double(X)+1);
        
        %[s v d]=svd(log_x);
        %[s v d]=svd(log(log_x));
        [s v d]=svd(log(double(J)));
        re=s(:,:)*v(:,1:5)*d(:,1:5)';
        log_re = log(re+1);
        
        l = LEP(log_x,log_re,4,1,3);
        %l = LEP(log_x,log(double(J)+1),4,1,1);
        
        r = log_x - l;
        r = exp(r);
        MIN_r = min(min(r));
        MAX_r = max(max(r));
        r_n = (r - MIN_r)./(MAX_r - MIN_r);
       
        imwrite(imresize(mat2gray(r_n),[128,128]),['/home/hxj/桌面/PG/PIE/LEP_gray/own/' imgDir(i).name]);
        
    end
    function APG(na)
        imgPath = '/home/hxj/桌面/PG/Pose+illumination/LEP/'; % 图像库路径 
        imgDir = dir([imgPath '*.png']); % 遍历所有jpg格式文件 
        
        for j = 1:length(imgDir)
        X = imread([imgPath imgDir(j).name]);
        [h w c] = size(X);
        X(X==0) =1;
        if c == 3
            X = rgb2gray(X);
        end
        I = log(double(X)+1);
        R0 =0;  R1= 0; 
        L0 =0;  L1= 0; 
        t0 =1;  t1= 1;
        mu0=0.01; %pace 
        
        for i =1:1000
            YR1 = R1 +(t0-1).*(R1-R0)./t0;
            YL1 = L1 +(t0-1).*(L1-L0)./t0;
            GR1 = YR1+(I-YR1-YL1)./2;
            [U Q V]=svd(GR1);
            Q1 = Q;
            Qt = Q1-mu0/2;
            Q1(Q>(mu0/2)) = Qt(Q>(mu0/2));
            Q1(Q<(mu0/2)) = 0;
            R2 = U(:,:)*Q1(:,:)*V(:,:)';
                 
            GL1 = YL1+(I-YL1-YR1)./2;
            L2 =GL1;  
            GL1t = GL1 - (mu0/2).*na;
            L2(GL1>((mu0/2).*na)) =GL1t(GL1>((mu0/2).*na));
            L2(GL1<((mu0/2).*na)) =0;
            t2 = (1+sqrt(1+4.*t1*t1))./2;
            mu1=mu0*1; 
            
            R0 = R1;
            R1 = R2;
            L0 = L1;
            L1 = L2;
            t0 = t1;
            t1 = t2;
            mu0 = mu1;
            
        end
        
    % subplot(2,2,1);imshow(X,[]); title('img');
    % subplot(2,2,2);imshow(I,[]); title('I');
    % subplot(2,2,3);imshow(R1,[]); title('R1');
    % subplot(2,2,4);imshow(L1,[]); title('L1');
        MIN_r = min(min(R1));
        MAX_r = max(max(R1));
        r_n = (R1 - MIN_r)./(MAX_r - MIN_r);
    imwrite(imresize(mat2gray(r_n),[128,128]),['/home/hxj/桌面/PG/Pose+illumination/LEP_iteration/' imgDir(j).name]);
        end
    end
  • 相关阅读:
    Rocket core checkExceptions
    Rocket core ImmGen
    Rocket core RegFile
    Linux 运行 jar 包命令
    怎么在java中杀死正在运行的线程?
    通过实现Runnable接口实现多线程
    解决:Mybatis中parameterType为string传参问题
    解决:Unexpected error occurred in scheduled task
    匹配模块
    办公工具学习
  • 原文地址:https://www.cnblogs.com/hxjbc/p/10969778.html
Copyright © 2020-2023  润新知