5.论文阅读:Guided Depth Enhancement via Anisotropic Diffusion

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 不同图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像。需要说明的是:边缘和物体间的边界并不等同,边缘...
    大川无敌阅读 13,968评论 0 29
  • 201. M-Q型显影液组合是()。 (2.0 分) A. 米吐尔与菲尼酮的组合 B. 对苯二酚和菲尼酮的组合 C...
    我们村我最帅阅读 3,663评论 0 4
  • 声明:作者翻译论文仅为学习,如有侵权请联系作者删除博文,谢谢! 翻译论文汇总:https://github.com...
    SnailTyan阅读 12,411评论 1 27
  • 1、小家伙今天意外的收获了姑姑送的手铃,姑爷送的红包,小舅爷送的红包,还有三家婆给的红包,开心。感恩大家对筱晓的喜...
    玉露君阅读 316评论 0 1
  • 今天在公司发生了一件让我特别郁闷的事,虽然是小事,但是如鲠在喉。 下午有一个公司全员必须参加的培训会,会议结束后我...
    隔壁家大花阅读 622评论 5 1