光照回归滤波+迭代

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
原文地址:https://www.cnblogs.com/hxjbc/p/10969778.html