美文网首页
5.论文阅读:Guided Depth Enhancement

5.论文阅读:Guided Depth Enhancement

作者: Persistently | 来源:发表于2017-09-17 14:18 被阅读0次

    1.

    假设我们得到一个对齐的深度 - 颜色图像对。 深度图包含无效区域或者具有比成对彩色图像低的分辨率。 彩色图像被假定为无影的。 我们分别通过D(p)和I(p)表示像素p =(x,y)的深度和颜色。 p在图像域Ω中。 具有已知深度值的像素被称为种子像素,其形成集合S.如果将种子像素视为热源,则可以通过从这些图像开始在图像上扩散热(即深度)来进行深度增强 来源。 扩散过程由以下偏微分方程表示:

    其中W(p; t)是在时间t处位置p处的扩散电导,D0(p)是初始状态下的深度。 电导是取决于给定的颜色引导图像的空间变化项,导致等式是各向异性扩散

    2.

    等式的解对应于我们期望实现的增强深度图。当给出初始深度图时,增强质量高度取决于W(p)的选择。

    3.

    首先将离散深度图构造为图G =(V,E),其中V是一组顶点,即像素,E包含表示4连邻域的边。


    如果我们将深度图视为一个列向量D,则等式D(P)变为如下

    其中L是单位矩阵,w是N×N矩阵。 N是整个图像的像素的总数。 给定初始深度图D0,D的平滑解可以通过求解线性系统AD = b来计算.

    这里,p和q对应于列矢量D中的像素p和q的索引。
    注意A是稀疏和正定义矩阵。 因此,引导深度增强被转换为稀疏线性系统,可以有效地解决。

    matlab code:

    function result = AnisotropicDiffusion(color,depth,sigma_w,data_weight)
    if( size(color,3) ~= 3 ),
        error( 'color data must be of 3 channel' );
    end
    if ~exist( 'data_weight', 'var' ),
        data_weight = 100;
    end
    height = size(color,1);
    width = size(color,2);
    pixelNumber = height * width;
    
    tic;
    depth = double(depth);
    Z = sparse(reshape(depth,pixelNumber,1)) * data_weight;
    
    color = double(color);
    S = ADMatrix(color,depth,sigma_w,data_weight);
    
    fprintf('    The running time of getting A and b is %.5f s\n',toc);
    Result = S\Z;
    BackslashTime=toc;
    fprintf('    The running time of solving Ax=b by Backslash is %.5f s\n',BackslashTime)
    
    result = full(reshape(double(Result),height,width));
    fprintf('    Done!\n')
    
    
    function output = ADMatrix(color,depth,sigma,data_weight)
    height = size(color,1);
    width = size(color,2);
    number = height * width;
    x = zeros(height * width * 5,1);
    y = zeros(height * width * 5,1);
    s = zeros(height * width * 5,1);
    count = 1;
    colorN3 = reshape(color,number,3);
    for i = 1:height 
        for j = 1:width
            
            pos = height*(j-1)+i;
           
            temp = [pos - 1, pos + 1, pos - height, pos + height];
            judge = zeros(4,1);
            judge(1) = mod(temp(1),height) ~= 0;
            judge(2) = mod(temp(2),height) ~= 1;
            judge(3) = temp(3) - height > 0;
            judge(4) = temp(4) + height < number;
            judge = logical(judge);
            validNumber = sum(judge);
            
            w = exp(-1/(2*sigma^2)*sum(( repmat(colorN3(pos,:),validNumber,1) - colorN3(temp(judge),:)).^2,2)); 
    
            x(count:count+validNumber-1) = pos*ones(validNumber,1);
            y(count:count+validNumber-1) = temp(judge);
            s(count:count+validNumber-1) = -w/sum(w);
            count = count + validNumber;
            x(count) = pos;
            y(count) = pos;
            if depth(i,j)==0
                s(count) = 1;
            else
                s(count) = data_weight + 1;
            end
            count = count + 1;
        end
    end
    x = x(1:count-1);
    y = y(1:count-1);
    s = s(1:count-1);
    output = sparse(x,y,s,number,number);
    

    end

    相关文章

      网友评论

          本文标题:5.论文阅读:Guided Depth Enhancement

          本文链接:https://www.haomeiwen.com/subject/zuptvttx.html