精华内容
下载资源
问答
  • via浏览器 ADM下载器 2.自定义 UA UA 是一串特殊字符,用来告诉所访问的网站,手机使用的操作系统及版本、CPU 类型、浏览器及版本等信息。UA 内容如下: Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaN8-00/012...

    1.下载必要工具

    via浏览器

    ADM下载器

    2.自定义 UA

    UA 是一串特殊字符,用来告诉所访问的网站,手机使用的操作系统及版本、CPU 类型、浏览器及版本等信息。UA 内容如下:

    Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaN8-00/012.002; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.0 Mobile Safari/533.4 3gpp-gba

    2.1 Via 浏览器设置方法

    via浏览器 --> 菜单 --> 设置 --> 通用 --> 浏览器标识 --> 自定义 --> 粘贴 UA 代码。

    2.2 ADM 下载器设置方法

    ADM 下载器 --> 菜单 --> 线程数 64 --> 设置 --> 用户代理 --> 自定义 --> 自定义用户代理 --> 粘贴 UA 代码。

    3. 注意

    直接打开百度网盘之后点击下载有可能不行, 需要先分享, 然后打开分享的链接就可以使用ADM下载器下载了

    转载于:https://www.cnblogs.com/BlameKidd/p/9875552.html

    展开全文
  • Created by Wang, Jerry, last modified on Dec 19, ...自CL ESH ADN PARAN--===========/CL ESH ADN PARAN-============ METHOD /IS CENTRAL (CL ESH ADM PARAM) Desktop 1Desktop 2Deskton 3StandardStructures...

    Created by Wang, Jerry, last modified on Dec 19, 2014

    自CL ESH ADN PARAN--===========/CL ESH ADN PARAN-============ METHOD  /IS CENTRAL (CL ESH ADM PARAM)
    	Desktop 1Desktop 2Deskton 3StandardStructures
    52
    SY-SUERC
    n
    다
    sY-TARTX
    Objects  DetailDisplay
    Tahles
    Data ExolorerBreak.j
      …………  4345049055
    	RANSRORTING NO EIELDS.IF sy-subrcrv centralgs cache-is central.ESE.
    IS ITTAL
    = abap_true.
    rv central
    	gs cache-is centxalENDIF.
    abap false
    Variables 1variables 2
    Locals
    Globals
    Auto
    Memory Analysis
    크
    
    ।
    S... Variable
    GS CACHE-IS CENTRAL
    v... va
    C... Hexadecinal V./2000
    
    
    要获取更多Jerry的原创文章,请关注公众号"汪子熙":
    展开全文
  • 七、6.2调用的dark_channel函数 首先判断暗通道范围是否为奇数,然后对输入图像I进行四周边界扩充,类似于重复边界,这样扩充后的I进行暗通道计算时无需考虑边界值情况(比如位于第一列、第一行等)。...

    七、6.2调用的dark_channel函数

    首先判断暗通道范围是否为奇数,然后对输入图像I进行四周边界扩充,类似于重复边界,这样扩充后的I进行暗通道计算时无需考虑边界值情况(比如位于第一列、第一行等)。遍历获得每一个暗通道块patch,找块在三个颜色通道(如果是彩色的话)的最小值,记作J,最小值的位置记作J_index。

    function [J, J_index] = dark_channel(I, patch_size)
    % function J = dark_channel(I, patch_size);
    
    % Computes the "Dark Channel" of corresponding RGB image.
    % -Finds from the input image the minimum value among all 
    %  pixels within the patch centered around the location of the 
    %  target pixel in the newly created dark channel image 'J'
    %  J is a 2-D image (grayscale).
    
    % Example: J = dark_channel(I, 15); % computes using 15x15 patch
    
    % Check to see that the input is a color image
    % if ndims(I) == 3
    %     [M N C] = size(I);
    %     J = zeros(M, N); % Create empty matrix for J
    %     J_index = zeros(M, N); % Create empty index matrix
    % else
    %     error('Sorry, dark_channel supports only RGB images');
    % end
    %% for grayscale image
    %
    [M, N, C] = size(I);
    J = zeros(M, N); % Create empty matrix for J
    J_index = zeros(M, N); % Create empty index matrix
    
    % Test if patch size has odd number
    if ~mod(numel(patch_size),2) % if even number
        error('Invalid Patch Size: Only odd number sized patch supported.');
    end
    
    % pad original image
    %I = padarray(I, [floor(patch_size./2) floor(patch_size./2)], 'symmetric');
    I = padarray(I, [floor(patch_size./2) floor(patch_size./2)], 'replicate');%重复边界,为了不考虑块的临界
    
    % Compute the dark channel 
     for m = 1:M
            for n = 1:N
                patch = I(m:(m+patch_size-1), n:(n+patch_size-1),:);
                tmp = min(patch, [], 3);%第三维度的最小值
                [tmp_val, tmp_idx] = min(tmp(:));
                J(m,n) = tmp_val;
                J_index(m,n) = tmp_idx;
            end
     end
    
    
    
    end
    
    
    
    

    八、6.3调用的assign_dark_channel_to_pixel函数

    函数格式

    function [outImg] = assign_dark_channel_to_pixel(S, dark_channel_refine, dark_channel_index, patch_size)
    

    输入为模糊图像S、改进的暗通道dark_channel_refine(S暗通道图像去掉一些比较小的值为0),暗通道映射dark_channel_index(6.3为J_idx),以及暗通道范围patch_size,返回S调整后的图像outImg。

    8.1 padsize为patchsize/2向下取整,比如patchsize为35,那么表示以某像素为中心(第19行18列)的35*35大小的区域参数暗通道计算,某像素分别向上下左右的宽度为17(padsize),同样对S进行重复边界的扩充,宽度为padsize,为了不讨论边界点问题,比如像素位于图像边界时暗通道区域会变化。

    [M N C] = size(S);
    %outImge = zeros(M, N); % 
    
    % pad original image
    padsize = floor(patch_size./2);
    S_padd = padarray(S, [padsize padsize], 'replicate');%重复

    8.2 进行和()相似的操作,获得S的某个区域patch的最低值,即暗通道值,判断与输入的改进的暗通道值dark_channel_refine是否相等,如果不等,将dark_channel_refine对应的暗通道映射dark_channel_index在patch的值改为dark_channel_refine的值,将修改的patch回溯(赋值回)S_padd。

    m = 1:M;
            for n = 1:N%dark_channel_refine:小于阈值置为0的暗通道
                patch = S_padd(m:(m+patch_size-1), n:(n+patch_size-1),:);
                if ~isequal(min(patch(:)), dark_channel_refine(m,n))
                    patch(dark_channel_index(m,n)) = dark_channel_refine(m,n);
                end
                for cc = 1:C
                    S_padd(m:(m+patch_size-1), n:(n+patch_size-1),cc) = patch(:,:,cc);
                end
            end%根据dark_channel_refine回修正S_padd

    8.3 将S_padd裁剪掉在8.1步添加的边界,得到outImg,并把outImg内边界值替换为对应S的值。函数assign_dark_channel_to_pixel结束,返回outImg。

    outImg = S_padd(padsize + 1: end - padsize, padsize + 1: end - padsize,:);%裁剪
    %% boundary processing
    outImg(1:padsize,:,:) = S(1:padsize,:,:);  outImg(end-padsize+1:end,:,:) = S(end-padsize+1:end,:,:);
    outImg(:,1:padsize,:) = S(:,1:padsize,:);  outImg(:,end-padsize+1:end,:) = S(:,end-padsize+1:end,:);
    %边界值替换
    %figure(2); imshow([S, outImg],[]);
    end

    九、4.3调用的estimate_psf函数

    函数格式

    function psf = estimate_psf(blurred_x, blurred_y, latent_x, latent_y, weight, psf_size)

    输入带有边界的模糊图像的梯度blurred_x, blurred_y(4.3输入为Bx和By),4.3中得到的清晰图像筛选后的梯度lantent_x和lantent_y和weight=2,和模糊和的尺寸,输出估计的模糊核。

    9.1 分别将前四个参数转为频域。

        latent_xf = fft2(latent_x);
        latent_yf = fft2(latent_y);
        blurred_xf = fft2(blurred_x);
        blurred_yf = fft2(blurred_y);

    9.2 计算b_f和p.m,并把b_f转为空间域,得到b。定义部分参数后,初始化psf后,调用自定义函数conjgrad()进行共轭梯度优化后,得到估计的psf,将小于psf值值和0.05的psf值置为0,重新归一化并返回,函数estimate_psf结束。

        latent_xf = fft2(latent_x);
        latent_yf = fft2(latent_y);
        blurred_xf = fft2(blurred_x);
        blurred_yf = fft2(blurred_y);
        % compute b = sum_i w_i latent_i * blurred_i
        b_f = conj(latent_xf)  .* blurred_xf ...
            + conj(latent_yf)  .* blurred_yf;
        b = real(otf2psf(b_f, psf_size));
    
        p.m = conj(latent_xf)  .* latent_xf ...
            + conj(latent_yf)  .* latent_yf;
        %p.img_size = size(blurred);
        p.img_size = size(blurred_xf);
        p.psf_size = psf_size;
        p.lambda = weight;
    
        psf = ones(psf_size) / prod(psf_size);
        psf = conjgrad(psf, b, 20, 1e-5, @compute_Ax, p);
        
        psf(psf < max(psf(:))*0.05) = 0;
        psf = psf / sum(psf(:));    
    end

    传入的compute_Ax函数:

    function y = compute_Ax(x, p)
        x_f = psf2otf(x, p.img_size);
        y = otf2psf(p.m .* x_f, p.psf_size);
        y = y + p.lambda * x;
    end

    返回y,y的值为p.m与x的频域的点乘的逆傅里叶变换后与x的p.lambda的和。

    十  9.2调用的conjgrad函数

    函数格式

    function x=conjgrad(x,b,maxIt,tol,Ax_func,func_param,visfunc)

    x对应4.2的psf,maxIt迭代次数为20,tol为1e-5,Ax_func为compute_Ax,func_param为结构体p。

    10.1 首先计算b与Ax_func(x,func_param)的差值,得到r,p初始值设为r,rsold为r的平方和。

        r = b - Ax_func(x,func_param);
        p = r;
        rsold = sum(r(:).*r(:));

    10.2 迭代,每次以p和func_param为输入调用Ax_func,获得Ap,计算alpha为rsold除以p与Ap的点乘之和。x增加alpha倍的p,r减少alpha倍的Ap,计算新的r的平方和rsnew,如果根号下rsnew小于定值tol,那么退出迭代,否则更新p为r和rsnew/rsold倍的p的和,rsold置为rsnew。迭代完后,返回x,即估计后的模糊核psf,函数conjgrad结束。

        for iter=1:maxIt
            Ap = Ax_func(p,func_param);
            alpha = rsold/sum(p(:).*Ap(:));
            x=x+alpha*p;
            if exist('visfunc', 'var')
                visfunc(x, iter, func_param);
            end
            r=r-alpha*Ap;
            rsnew=sum(r(:).*r(:));
            if sqrt(rsnew)<tol
                break;
            end
            p=r+rsnew/rsold*p;
            rsold=rsnew;
        end
    end

    十一、2.8调用的adjust_psf_center函数(cho_code文件夹下)

    输入psf,输出调整后的psf。

    11.1 创建与psf等大的网络矢量X和Y。分别与psf点乘后求和得到xc1和yc1。xc2和yc2取值为psf最中间列号和行号。也即X每行和Y每列的均值,xshift和yshift表示了xc1与均值的偏移的四舍五入。将psf调用warpimage得到调整后的psf。

    function psf = adjust_psf_center(psf)
    
    [X Y] = meshgrid(1:size(psf,2), 1:size(psf,1));
    xc1 = sum2(psf .* X);
    yc1 = sum2(psf .* Y);
    xc2 = (size(psf,2)+1) / 2;
    yc2 = (size(psf,1)+1) / 2;
    xshift = round(xc2 - xc1);
    yshift = round(yc2 - yc1);
    psf = warpimage(psf, [1 0 -xshift; 0 1 -yshift]);
    end
    function val = sum2(arr)
    val = sum(arr(:));
    end

    11.2 warpimage函数:输入待调整的psf和调整矩阵M([1 0 -xshift; 0 1 -yshift])

    function warped = warpimage(img, M)
    if size(img,3) == 3
        warped(:,:,1) = warpProjective2(img(:,:,1), M);
        warped(:,:,2) = warpProjective2(img(:,:,2), M);
        warped(:,:,3) = warpProjective2(img(:,:,3), M);
        warped(isnan(warped))=0;
    else
        warped = warpProjective2(img, M);
        warped(isnan(warped))=0;
    end
    end

    实质调用了自定义的扭曲投影函数warpProjective2,得到扭曲后的psf,记作warped,并将其中的NaN的值改为0.返回warped。

    11.3 warpProjective2输入待调整的psf和调整矩阵M([1 0 -xshift; 0 1 -yshift])

    coords为一个k*2大小的坐标,k=m*n(图像的大小),coords每一列代表一个不重复的坐标值。取值1到m或n。homogeneousCoords在coords的基础上增加了第三行全1矩阵,扭曲坐标warpedCoords为A([1 0 -xshift; 0 1 -yshift])与homogeneousCoords的乘积(不是点乘),结果warpedCoords的第一行为调整后的网络矢量xprime,yprime同理,使用系统函数interp2对im图像以原网络矢量x和y线性插值到xprime和yprime网络矢量,结果为result,并调整result大小和输入图像大小im相同。result即调整后的psf。

    function result = warpProjective2(im,A)
    
    if (size(A,1)>2)
      A=A(1:2,:);
    end
    
    % Compute coordinates corresponding to input 
    % and transformed coordinates for result
    [x,y]=meshgrid(1:size(im,2),1:size(im,1));
    coords=[x(:)'; y(:)'];
    homogeneousCoords=[coords; ones(1,prod(size(im)))];
    warpedCoords=A*homogeneousCoords;
    xprime=warpedCoords(1,:);%./warpedCoords(3,:);
    yprime=warpedCoords(2,:);%./warpedCoords(3,:);
    
    result = interp2(x,y,im,xprime,yprime, 'linear');
    result = reshape(result,size(im));
    
    return;
    end

    十二  1.8调用的ringing_artifacts_removal函数

    1.6步完成时已经得到了估计的模糊核kernel和中间潜在图像interim_latent(黑白图像)。函数格式如下:

    function [result] = ringing_artifacts_removal(y, kernel, lambda_tv, lambda_l0, weight_ring)

    该函数用来根据模糊核得到清晰图像,并抑制振铃。传入0-1的初始模糊图像y、1.6得到的模糊和kernel、两个权值参数,weight_ring用来表示抑制振铃效应的程度,为0表示没有振铃不需要去除,返回最后去除的结果result。

    12.1 对y同样添加liu的边界,得到y_pad,对其每个颜色通道,分别调用自定义函数deblurring_adm_aniso(十三),传入当前颜色通道y_pad(:,:,c)、模糊核kernel、权值参数lambda_tv和alpha=1。得到tv正则化的结果Latent_tv,将Latent_tv裁剪掉之前添加的边界。

    H = size(y,1);    W = size(y,2);
    y_pad = wrap_boundary_liu(y, opt_fft_size([H W]+size(kernel)-1));
    Latent_tv = [];
    for c = 1:size(y,3)
        Latent_tv(:,:,c) = deblurring_adm_aniso(y_pad(:,:,c), kernel, lambda_tv, 1);
    end
    Latent_tv = Latent_tv(1:H, 1:W, :);

    12.2 如果weight_ring为0,那么不需要对Latent_tv进行后续操作,直接为函数的返回值。

    if weight_ring==0
        result = Latent_tv;
        return;
    end

    12.3 否则,对y_pad进行L0正则化,调用自定义函数L0Restoration),传入y_pad、kernel、权值lambda_l0和kappa=2,得到正则化结果Latent_l0,并同样裁剪掉添加的边界。

    Latent_l0 = L0Restoration(y_pad, kernel, lambda_l0, 2);
    Latent_l0 = Latent_l0(1:H, 1:W, :);

    12.4 得到对y_padd进行tv正则化和l0正则化结果的差异diff,对差异值调用自定义函数bilateral_filter十四)进行滤波,最终去振铃的结果为tv正则化的结果Latent_tv减去weight_ring倍的滤波后的差异bf_diff得到result,函数ringing_artifacts_removal结束。

    diff = Latent_tv - Latent_l0;
    bf_diff = bilateral_filter(diff, 3, 0.1);
    result = Latent_tv - weight_ring*bf_diff;

    十三、12.1调用的deblurring_adm_aniso函数

    函数格式

    function [I] = deblurring_adm_aniso(B, k, lambda, alpha)

    输入参数为模糊图像(灰度)B(对应12.1的y_padd的单个颜色通道)、模糊核k,权值lambda和alpha=1.输出正则化结果I。这个方法来自于使用超拉普拉斯先验的快速图像去卷积,采用了aniso TV正则化方法。

    13.1 用于迭代和计算的beta初始化为1/lambda,迭代截至下界为beta_min,I初始化为输入值B,根据B和k调用computeDenominator计算分母,得到Nomin1、 Denom1和 Denom2。

    beta = 1/lambda;
    beta_min = 0.001;
    [m n] = size(B); 
    % initialize with input or passed in initialization
    I = B; 
    [Nomin1, Denom1, Denom2] = computeDenominator(B, k);

    computeDenominator函数如下:输入参数为y(被调用输入的变量为x)和k。Nomin1为模糊核k的频域的共轭与y的频域的点乘,Denom1为模糊核k的频域的模的平方,Denom2为将水平和垂直梯度算子[1,-1]和[1;-1]转为频域后模平方之和。

    function [Nomin1, Denom1, Denom2] = computeDenominator(y, k)
    sizey = size(y);
    otfk  = psf2otf(k, sizey); 
    Nomin1 = conj(otfk).*fft2(y);
    Denom1 = abs(otfk).^2; 
    % if higher-order filters are used, they must be added here too
    Denom2 = abs(psf2otf([1,-1],sizey)).^2 + abs(psf2otf([1;-1],sizey)).^2;
    end

    13.2 计算I的差分Ix和Iy。

    Ix = [diff(I, 1, 2), I(:,1) - I(:,n)]; 
    Iy = [diff(I, 1, 1); I(1,:) - I(m,:)]; 

    13.3 循环,gamma值为1/(2*beta),分母Denom为刚计算的Denom1与gamma倍的Denom2之和。Wx和Wy分别为差分Ix(Iy)的绝对值的每个元素与beta*lambda的大小,如果大于,那么Wx对应元素为Ix的值,否则为0.Wxx为Wx的水平方向上的负差分与Wy在垂直方向上的负差分之和。最后频域的结果为(Nomin1 + gamma*fft2(Wxx))./Denom,将该结果转为空间域取实数部分得到更新的I,重新计算I的差分Ix和Iy,beta缩小为之前的二分之一,直至beta小于betamin,循环结束。函数结束,返回最后的I。

    while beta > beta_min
        gamma = 1/(2*beta);
        Denom = Denom1 + gamma*Denom2;
        % subproblem for regularization term
        if alpha==1
            Wx = max(abs(Ix) - beta*lambda, 0).*sign(Ix);
            Wy = max(abs(Iy) - beta*lambda, 0).*sign(Iy);
            %%
        else% 恒为1 跳过
            Wx = solve_image(Ix, 1/(beta*lambda), alpha);
            Wy = solve_image(Iy, 1/(beta*lambda), alpha);
        end
          Wxx = [Wx(:,n) - Wx(:, 1), -diff(Wx,1,2)]; 
          Wxx = Wxx + [Wy(m,:) - Wy(1, :); -diff(Wy,1,1)]; 
            
          Fyout = (Nomin1 + gamma*fft2(Wxx))./Denom; 
          I = real(ifft2(Fyout));
          % update the gradient terms with new solution
          Ix = [diff(I, 1, 2), I(:,1) - I(:,n)]; 
          Iy = [diff(I, 1, 1); I(1,:) - I(m,:)]; 
        beta = beta/2;
    end 

    十四、12.4调用的bilateral_filter

    函数格式

    function r_img = bilateral_filter(img, sigma_s, sigma, boundary_method, s_size)

    在12.4中,输入的参数分别为tv正则化结果和L0正则化结果的差异diff,对应第一个输入参数img、3,对应sigma_s、0.1,对应sigma。

    14.1 因为只输入了参数 所以将变量boundary_method置为replicate,代表重复边界。判断输入的img是否为0~255,满足则转化为0~1,方便操作。根据12的操作,img颜色通道和最开始选定的模糊图像的颜色通道相等,假设为彩色,将rgb通道转为lab通道,sigma变为之前的一百倍;如果为灰度,无需附加操作,lab即img。判断s_size是否存在,由于不存在,所以fr设为三倍的sigma_s的上界,即fr=9。分别对img和lab扩充边界(重复边界)边界宽度为fr,得到p_img和p_lab。

    if ~exist('boundary_method', 'var')
        boundary_method = 'replicate';
    end
    
    if isinteger(img) == 1, img = single(img) / 255; end %将0-255 转为0-1
    
    [h w d] = size(img);
    
    if d == 3
      C = makecform('srgb2lab');
      lab = single( applycform(double(img), C) );
      sigma = sigma * 100;
    else
      lab = img;
      sigma = sigma * sqrt(d);
    end
    
    if exist('s_size', 'var')
        fr = s_size;
    else
        fr = ceil(sigma_s*3);
    end
    
    p_img = padarray(img, [fr fr], boundary_method);
    p_lab = padarray(lab, [fr fr], boundary_method);

    14.2 因为是对四周进行的扩充,那么扩充后图像的真实部分(非添加的边界部分)的两个维度的开始和结束分别是u、b和u、r,代表边界扩充后的p_img的第u行到第b行、第u列到第r列,未扩充的img。初始化r_img、w_sum,spatial_weight为2*fr+1大小(19*19)的高斯模糊核,方差为3均值为0,ss为sigma(0.1)的平方(0.01).

    u = fr+1; b = u+h-1;
    l = fr+1; r = l+w-1;
    
    r_img = zeros(h, w, d, 'single');
    w_sum = zeros(h, w, 'single');
    
    spatial_weight = fspecial('gaussian', 2*fr+1, sigma_s);
    ss = sigma * sigma;

    遍历y、x,取值范围为-fx到fx,y+fr+1即从1到2*fr+1,u+y的范围为1到2*fr+1,b+y范围为h到2*fr+h。w_s依次获取了高斯模糊核spatial_weight的值作为权重,n_img和n_lab对p_img和p_lab进行裁剪,依次以(1,1)到(2*fr+1,2*fr+1)为左上角,裁剪一个共h行w列的图像。f_diff为原始lab与扩增后偏移裁剪(以边界区域为左上角)得到的n_lab的差值,f_dist表示三个通道的f_diff的平方和,表示了lab与n_lab在lab三个颜色通道的平方误差的和。计算其高斯分布的概率密度函数(矩阵)w_f,w_t的值为w_f与w_s的点乘。r_img增加n_img与w_t复制三层的结果,w_sum增加w_t。

    遍历完后r_img点除复制三层的w_sum得到最后返回的结果r_img,函数bilateral_filter结束。

    for y = -fr:fr
      for x = -fr:fr
        
        w_s = spatial_weight(y+fr+1, x+fr+1);
        
        n_img = p_img(u+y:b+y, l+x:r+x, :);
        n_lab = p_lab(u+y:b+y, l+x:r+x, :);
        
        f_diff = lab - n_lab;
        f_dist = sum(f_diff.^2, 3);
        
        w_f = exp(-0.5 * (f_dist / ss));
        
        w_t = w_s .* w_f;
        
        r_img = r_img + n_img .* repmat(w_t, [1 1 d]);
        w_sum = w_sum + w_t;
        
      end
    end
    
    r_img = r_img ./ repmat(w_sum, [1 1 d]);
    
    end

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    总体算法的流程:

    1.选择去模糊的图像,设定部分参数(包括权值等)。

    2.建立图像金字塔,从上到下,下层的模糊核由上层的模糊核重插值得到,下层的图像由原始图像下采样得到。

    3.每层金字塔进行五次迭代,每次迭代中,通过正则化得到清晰图像S(()或()),然后根据模糊图像b的梯度以及清晰图像S的梯度(阈值筛选后的)计算得到模糊核k(())。迭代结束,得到估计的模糊核和中间潜在图像S。(这里说的清晰图像并非论文最后结果,只是用来辅助计算模糊核。得到模糊核后再返回来计算清晰图像)

    4.此时可以看作非盲复原。对原始的模糊图像y和得到的估计的模糊核k,分别进行TV正则化和L0正则化,得到两种复原结果,对他们的差异进行滤波后,用tv正则化结果减去滤波后的差异得到得到去振铃的结果即最终复原的结果;或者调用whyte的方法进行复原,亦的到最后的清晰图像。

     

    展开全文
  • 注意这里的K会随着梯度的增大而减小,最终会导致G里面的梯度趋于相同 其他的拆分方法 求解 以上提出的两个优化方程都是非凸的,我们用alternating direction minimization(ADM)来解决这个问题,因为ADM对于非凸的...

    Abstract& Introduction

    到目前为止,经典的Retinex模型都是不够健壮的,对于噪声的加入抵抗力很差,我们提出了健壮的Retinex模型,进行对噪声图的估计,加入了对照明情况和反射率的新的正则项
    之前增强低光图像有很多办法:
    包括HE的方法,它的主要bonous点在于增强了对比度,然而正因为他增强了对比度,必然带来过度增强的隐患
    倒置弱光图像的算法(就像我们之前说的那篇文章一样),倒置的弱光图像看起来像是雾度图像,然后运用除雾算法,将得到的结果再次反转,然而不具有很好的物理背景,同时在处理过程中,增强和降噪的顺序一直是一个问题。在去噪之前执行增强方法可能会导致噪声放大,从而增加了去噪的难度。另一方面,去噪后,增强效果可能会有些模糊。
    这里还认为那些state of art的深度学习算法所采用的数据集都是合成的,所以可能有问题
    之前的retinex算法对正则项也运用对数,我们认为正则项是不应该用对数来作用的,这样是无法很好地处理图像中的噪声的,所以我们主要的改进点就在这里

    Contributions

    在传统的retinex模型的基础上考虑了噪声的影响,显式估计噪声图像,同时估计结构图和光照图
    增强的拉格朗日求解器,不采用对数的求解法
    我们的方法不仅可以用于弱光图像的增强,也可以用于水下图像,图像去雾、沙尘暴天气

    Methods

    依然是基于如下的公式
    在这里插入图片描述
    intrinsic image decomposition和上面的方程基本类似,它要考虑的是L(朗博shading)、R(反射率)和C(镜面反射分量),只不过在大部分方法中,C被出于简单的考虑而舍弃掉了,这里我们依然舍弃掉C,但是加入了一个噪声分量N
    而正是这个N的加入导致无脑求对数失败,我们提出的新方法既考虑到了噪声,又避免了对数求解的使用

    Structure

    在[14]和[23]之后,我们在HSV颜色空间中的V通道上执行所提出的方法。给定输入的低亮度彩色图像,我们首先将其转换为HSV空间。然后,将该分解应用于归一化V通道图像I,得到光照分量L和反射率分量R。之后,为了照亮黑暗区域,我们调整照明L并生成调整后的照明L‘。然后将调整后的照明L’与反射组件R集成,生成增强的V通道图像I。最后,将增强的HSV图像转换回RGB颜色空间,得到了最终的增强结果。下面的小节将详细介绍所提出的结构显示微光图像增强方法
    待优化函数如下
    在这里插入图片描述
    F代表Frobenius范数,下三角就是一阶微分算子,第一项约束了ground truth和估测结果之间的差异,第二项控制着光照图的光滑性,第三项缩小R和G之间的差异,以便保证结构信息不丢失
    之间的工作大家都用l2范数来约束亮度梯度,l1约束反射梯度,然而发现亮度的分布并不均匀,所以不适用l2范数
    G实际上是把I的梯度放大之后得到的,因为弱光图像往往伴随着对比度低的问题,G的形成是如下的方程
    在这里插入图片描述
    注意这里的K会随着梯度的增大而减小,最终会导致G里面的梯度趋于相同

    其他的拆分方法

    在这里插入图片描述在这里插入图片描述

    求解

    以上提出的两个优化方程都是非凸的,我们用alternating direction minimization(ADM)来解决这个问题,因为ADM对于非凸的问题也是收敛的
    在这里插入图片描述
    简而言之就是通过变形,把这个优化函数转化为迭代求解的过程(具体迭代过程略),最后利用了一个gamma校正来让L变得更好看
    在这里插入图片描述
    在这里插入图片描述

    Discussion& Conclusion

    采用经典Retinex模型的弱光增强方法往往不能有效地处理噪声,这种情况不可避免地存在。在本文中,我们提出了一个稳健的Retinex模型,在强噪声的情况下,加入一个噪声项来处理弱光图像增强。此外,我们在光照和反射率的优化问题中引入了新的正则化项,以联合估计分段平滑光照和结构显示反射率。提出了一种基于ADM的优化算法。除了低光图像增强,我们的方法也适用于其他类似的任务,如水下或遥感图像增强,以及在朦胧或灰尘环境中。未来的工作包括加速我们的方法并将其推广到视频增强。自动决定哪个模型对输入图像是最佳的也是一个很有吸引力的话题
    (顺便吐槽一句这个方法还真是慢的可以)
    在这里插入图片描述

    展开全文
  • 五 4.2调用的L0Restoration函数(不考虑暗通道) 函数格式 function S = L0Restoration(Im, kernel, lambda, kappa) 输入模糊图像Im、模糊核k、梯度权值lambda,kappa=2,代表ADM(Altetnating Direction Method)的...
  • Salient Object Detection via Structured Matrix Decomposition

    千次阅读 热门讨论 2016-02-22 17:13:38
    salient object detection via low rank matrix recovery》一文。在后面的模型中p范数实际上是采用了p等于无穷(矩阵的无穷范数是指矩阵的每一行元素绝对值之和的最大值)也就是最大的“显著性值”来确定Gij索引的...
  • 原因:vue-router路由版本更新产生的问题,导致路由跳转失败抛出该错误,但并不影响程序功能 解决方案一、 使用编程式导航跳转时,每次使用,后面都跟上.catch方法,捕获错误信息 this.$router.push('/location')....
  • ADMM算法相关资源

    千次阅读 2017-08-23 22:04:39
    Distributed optimization and statistical learning via the alternating direction method of multipliers S. Boyd, N. Parikh, E. Chu, B. Peleato, and J. Eckstein, 2011 Proximal algorithms N. ...
  • : Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory ...
  • 讲解arcgis中的amd知识前,首先介绍这两种Javascript模块规范:CommonJS和AMD。我主要介绍AMD,但是要先从CommonJS讲起。 CommonJS 2009年,美国程序员Ryan Dahl创造了node.js项目,将javascript语言用于服务器端...
  • If you want to transfer data from or to the vCSA with a client like WinSCP or e.g. you get the error message “The remote Server sends no data” or similar.Go to vSphere Web Client > Adm...
  • Python模块大全

    万次阅读 多人点赞 2016-12-23 11:09:19
    Python模块
  • Robust PCA 学习笔记

    万次阅读 多人点赞 2013-02-05 23:26:45
    Alternating Directions Method (ADM) [2,4]. 7.1. General method of ALM For the optimizationproblem min f(X), subj. h(X)=0 (3) we can define the Lagrangefunction: L(X,Y,μ) = f(X)+, h(x)>+μ/2||h(X...
  • IPv6 Prohibit路由

    2021-07-15 19:04:13
    这两个函数都将回复类型为ICMPV6_DEST_UNREACH,code码为ICMPV6_ADM_PROHIBITED的ICMPv6报文,并且将接收到的数据报文丢弃。 static void ip6_rt_init_dst_reject(struct rt6_info *rt, u8 fib6_type) { rt->dst....
  • 关于 Linux中系统调优的一些笔记

    千次阅读 多人点赞 2021-10-24 11:53:10
    我突然又明白,死亡是聪明的兄长,我们可以放心地把自己托付给他,他会知道在我们有所准备的适当时刻前来。我也突然懂得,原来痛苦、失望和悲愁不是为了惹恼我们,使我们气馁或者无地自容;它们的存在,是为了使我们...
  • 近日,来自谷歌的研究者提出了两种有关联的方法,它们推动了扩散模型的图像合成质量的界限——通过重复细化的超分辨率(SR3,Super-Resolution via Repeated Refinements)和一个类条件合成模型,称为级联扩散模型...
  • 渗透之——Metasploit命令及模块

    万次阅读 2019-01-26 10:26:29
    show exploits 列出metasploit框架中的所有渗透攻击模块。 show payloads 列出metasploit框架中的所有攻击载荷。 show auxiliary 列出metasploit框架中的所有辅助攻击载荷。 search name 查找metasploit框架中所有的...
  • Lai, ‘‘Face recognition by sparse discriminant analysis via joint L2,1-norm minimization,’’ Pattern Recognit., vol. 47, no. 7, pp. 2447–2453, 2014. IV. 贪心策略逼近(GREEDY STRATEGY ...
  • 小麦苗的常用代码--常用命令(仅限自己使用)--下 上篇:... ...--------------------------------------------------------------------------------------------------...
  • systemd用法

    千次阅读 2018-01-09 16:00:25
    https://wiki.archlinux.org/index.php/systemd systemd is a suite of basic building blocks for a Linux system. It provides a system and service manager that... runs as PID 1 and starts the rest of th
  • 小麦苗的常用代码--常用命令(仅限自己使用) 囗 ■ ☑ ● • · ◆ ※ ☆ ★ ⊙ √ → innobackupex--help -? -h help=y sy...
  • Via Robust Retinex Model》 这是一篇2018年6月份的TIP(视觉顶刊)会议文章,文章针对弱光(低照度)图像存在密集噪声的问题,提出一种基于Rubost Retinex分解模型的 Structure-revealing弱光增强方法,考虑图像存在....
  • Red Hat Linux安装vsftp

    2018-02-26 22:19:30
    # Users that are not allowed to login via ftp root bin daemon adm lp sync shutdown halt mail news uucp operator games nobody 这时我们要在 root前加上# 。 出现以下错误: 200 PORT command...
  • kvm基础使用及Virt-tools工具使用

    千次阅读 2017-07-06 22:04:56
    kvm基础使用 查看虚拟机状态 [root@sh-kvm-1 ~]# virsh list --all Id Name State ---------------------------------------------------- 1 kvm-1 running 2
  • 让 WebRTC 使用外部的音视频编解码器

    千次阅读 2017-04-19 09:47:39
    // frames to be delivered via webrtc::VideoEncoder::Encode. This flag is used // as the internal_source parameter to // webrtc::ViEExternalCodec::RegisterExternalSendCodec. virtual bool ...
  • 一、文章摘要概述 ...基于Retinex模型,同样是针对分解后照明图对比度、细节增强和反射图存在的密集噪声问题,在上一篇博客中介绍了一种全变差优化模型,通过ADM依次迭代更新照明图和反射图得到最优...
  • ntpd与ntpdate的区别

    万次阅读 2018-04-17 12:57:58
    server clock.via.net server 137.92.140.80 server 133.100.9.2 server 128.118.46.3 server ntp.nasa.gov server 129.7.1.66 server ntp-sop.inria.fr server   (国家授时中心服务器IP地址) 3). 在打开NTP服务器...
  • x64、x86_64、x64、AMD64

    千次阅读 2018-10-11 21:46:51
    IAMD,Cyrix(现为VIA所收购)等厂家也生产X86指令集的CPU,其中32位(x86-32)的CPU有i80386,i80486,i80586,i80686,统称i80X86,简称x86 。 Intel从16位微处理器8086开始的整个CPU芯片系列,系列中的每种型号...
  • Any incoming network connections are rejected with an icmp-host-prohibited message for IPv4 and icmp6-adm-prohibited for IPv6. Only network connections initiated from within the system are possible. ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,021
精华内容 808
热门标签
关键字:

admvia