精华内容
下载资源
问答
  • 三角网格是最常用的三维模型表述方式,基本结构为: 顶点 (Vertex),决定空间位置 面片 (Facet),描述拓扑结构 边 (Edge)。 通过Photo-consistencyfairness准则相结合,来优化曲面网格。

    深度图(depth) / 视差图(disparity)

    1. 深度图:场景中每个点到相机的距离
    2. 视差图:同一个场景在两个相机下成像的像素的位置偏差dis
    3. 两者关系:depth = b*f / dis (深度 = 基线 x 焦距 / 视差)
    4. 是三维信息的一种表示方式

    如下图,空间中一点p,在两个相机下投影为点为 p1、p2,视差值为它们像素坐标c1、c2的差值。
    在这里插入图片描述


    三维点云(point cloud)

    1. 三维点云是某个坐标系下的点的数据集
    2. 包含了丰富的信息,包括三维坐标XYZ、颜色RGB等信息

    在这里插入图片描述


    三维网格(mesh)
    1. 由物体的邻接点云构成的多边形组成的
    2. 通常由三角形、四边形或者其它的简单凸多边形组成

    在这里插入图片描述


    纹理贴图模型(texture mesh)

    1. 带有颜色信息的三维网格模型
    2. 所有颜色信息存储在一张纹理图上,显示时根据每个网格的纹理坐标和对应的纹理图进行渲染得到高分辨率的彩色模型
      在这里插入图片描述
    展开全文
  • 视差图推出深度图

    万次阅读 2018-10-24 09:46:41
    视差图推出深度图 相机成像的模型如下图所示: P为空间中的点,P1P2是点P在左右像平面上的成像点,f是焦距,OROT是左右相机的光心。由下图可见左右两个相机的光轴是平行的。XRXT是两个成像点在左右两个像面上...

    视差图推出深度图

    相机成像的模型如下图所示:
    P为空间中的点,P1和P2是点P在左右像平面上的成像点,f是焦距,OR和OT是左右相机的光心。由下图可见左右两个相机的光轴是平行的。XR和XT是两个成像点在左右两个像面上距离图像左边缘的距离。
    在这里插入图片描述
    若两个相机已经校正完成即达到极线平行,两条光轴方向也平行。则视差和物体深度的关系式如下:
    在这里插入图片描述
    可推导
    在这里插入图片描述
    其中d为视差
    根据公式易得,b,f是常数,Z与d成反比,即深度越小视差越大,距离近的物体视差大。这也就是视差图中近的的物体颜色越深的原因。
    由上面两幅图,可知距离像面越近的点,它在左右相机中的视差越大,距离像面越远的点,它在左右相机中的视差越小。
    深度Z和视差的关系图如下:
    在这里插入图片描述

    展开全文
  • 视差图转换为深度图的实现

    千次阅读 热门讨论 2020-06-19 15:35:25
    双目视觉视差图转换为深度图 视差图转换为深度图 网上关于视差图转换为深度图的博客较多,但缺少具体实现。我根据原理网上的一些参考自己实现了一个版本,做个记录,也希望能供大家参考 1 原理 根据视差图得到深度...

    视差图转换为深度图

    网上关于视差图转换为深度图的博客较多,但缺少具体实现。我根据原理和网上的一些参考自己实现了一个版本,做个记录,也希望能供大家参考

    1 原理

    根据视差图得到深度的原理很简单,示意如下:在这里插入图片描述
    图中b为双目相机的基线,一般需要自己测量(如果只需要相对深度的话可以自己取值)。f表示相机焦距(通常相机焦距有fx,fy,但由于视差只在x方向,因此直接取fx为f即可)。可以得到深度Z与视差d的关系为:
    式1
    式1
    具体推导可以参考推导过程。需要注意的是,d的单位是像素pixel,而其他几个变量的单位是mm,这看似单位不匹配(也是我一开始的困惑所在),但实际上是没有问题的。可以参考《视觉slam十四讲》的相机模型构建,相机成像过程如下:
    在这里插入图片描述
    主要分为:
    (1)实际空间点到物理成像平面上的投影;
    (2)物理成像平面转换到像素平面
    这两个过程。(1)中物理成像平面上对应实际空间点(X,Y,Z)的点(X’,Y’)是具有物理尺度的,只不过进行了缩放:

    X=fX/ZX' = f*X/Z
    Y=fY/ZY' = f*Y/Z

    在此之后,(2)将物理成像平面上的坐标进一步转换到像素平面得到坐标(u,v),也就是我们使用的图像像素坐标,这个过程为:

    u=αX+cxu = \alpha X' +cx
    v=βY+cyv = \beta Y' +cy

    fx=αffx = \alpha f, fy=βffy = \beta f, 这样就将像素坐标与三维空间点建立了联系。需要注意的是,焦距ff的单位确实是mm,但α,β\alpha,\beta的单位是pixel/mm。那么式1中的ff,也就是 fxfx的单位实际上是pixel,这样就和视差单位是pixel一致了。

    搞清楚原理后,下面就可以进行实现了。

    2 代码实现

    假定大家已经有了视差图,这里只进行深度图的求解。话不多说,直接上代码。main函数如下:

    int main(int argc, char* argv[])
    {
    	//视差图 D1, 深度图 depth1
    	cv::Mat D1,depth1, draw ,draw1;
    	//
    	//对视差图的计算,此处省略
    	//
    	sgm.disp2Depth(D1,depth1);//由视差图计算深度图
    	std::cout << "depth map is ok " << std::endl;
    	//转换成彩色图便于观察
    	depth1.convertTo(draw1, CV_8U, 1./256);
    	cv::applyColorMap(draw1, draw1, cv::COLORMAP_JET);
    	
    	//视差图也转换成彩色图
    	D1.convertTo(draw, CV_8U, 255. / (SemiGlobalMatching::DISP_SCALE * param.numDisparities));
    	cv::applyColorMap(draw, draw, cv::COLORMAP_JET);
    	
    	cv::imshow("image", I1);
    	cv::imshow("disparity1", draw);
    	cv::imshow("depth1", draw1);
    	cv::waitKey(0);
    }
    

    下面是disp2Depth()函数的实现,

    void SemiGlobalMatching::disp2Depth(cv::Mat dispMap, cv::Mat &depthMap)
    {
        	float fx = 4.9250945790423793e+02;//取fx为f,fx由标定内参得到
        	float baseline = 600; //基线距离b,根据标定的相机外参计算。如果只需要相对深度取1即可
    
            int height = dispMap.rows;
            int width = dispMap.cols;
    		depthMap.create(height, width, CV_16U);
    		
    		//这里深度图的数据类型可能会不一样,大家根据自己的情况进行修改
            short* dispData = (short*)dispMap.data;
            ushort* depthData = (ushort*)depthMap.data;
            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++)
                {
    				int id = i*width + j;
                    if (!dispData[id])  continue;  //防止0除
                    depthData[id] = ushort( fx*baseline / dispData[id]  );
                }
            }
    }
    

    结语

    相比于视差图的计算,深度计算只能算是饭后甜点了,不过还是需要把原理和思路理清。

    展开全文
  • 上一节中,我们学习了极线约束的概念和相关术语。主要包含:如果我们有同一个...下图和其中的数学公式可以证明该理论。 上图是上一节2幅图像间对极几何关系的等价三角形。它的等价方程式如下 disparity=x−x′=Bf...

    官网参见https://docs.opencv.org/3.4.1/dd/d53/tutorial_py_depthmap.html

    上一节中,我们学习了极线约束的概念和相关术语。主要包含:如果我们有同一个场景的2幅图像,我们就可以直观的获得图像的深度信息。下图和其中的数学公式可以证明该理论。
    在这里插入图片描述
    上图是上一节2幅图像间对极几何关系的等价三角形。它的等价方程式如下
    disparity=xx=BfZdisparity=x−x^′=\frac{Bf}{Z}
    x 和x’ 分别是图像平面中的点到3D 空间中的点和到摄像机中心的距离。B是2个摄像机之间的距离,f是摄像机之间的焦距。简而言之,上面的等价方程告诉我们点的深度Z和对应的图像点与其相机中心的距离x - x’成反比。根据上面公式,我们可以得到图像中所有像素点的深度。

    现在我们就可以找到2个图像之间的匹配点了。我们已经了解了极线约束可以使这个操作更快更精确。一旦找到匹配,就可以获得视差(disparity)。

    disparity:原意为“差异”,在立体视觉中称为视差,空间中一点,在左右目所成图像的横坐标之差。

    关于视差概念,可以参见https://blog.csdn.net/weixin_40367126/article/details/90753760

    以下代码是获得视差图。

    视差图是以图像对中任一幅图像为基准,其大小为该基准图像的大小,元素值为视差值的图像

    图片下载在http://globalempiresoft.com/tools/AR/OpenCV-2.1.0/samples/c/

    import cv2 
    import numpy as np
    import glob
    from matplotlib import pyplot as plt
    
    imgL = cv2.imread('scene_l.bmp',0)
    imgR = cv2.imread('scene_r.bmp',0)
    stereo = cv2.StereoBM_create(numDisparities=16, blockSize=15)
    disparity = stereo.compute(imgL,imgR)
    plt.imshow(disparity,'gray')
    plt.show()
    

    视差图结果如下
    在这里插入图片描述

    在上图中有很大的噪音。通过调整numDisparities和blockSize,可以获得更好的结果。
    例子中使用图片如下
    在这里插入图片描述
    在这里插入图片描述

    从视差图推导深度图参见https://www.jianshu.com/p/ee3872dc988b

    展开全文
  • 视差图和深度图有何关系I bet it’s more powerful than you think… 我敢打赌,它比您想像的还要强大…… Photo by Pereanu Sebastian on Unsplash Pereanu Sebastian在Unsplash上拍摄的照片 The question comes ...
  • 文章会把视差映射讲一下,算是对学习的记录总结。Parallax Mapping视差映射好多人的文章里都写到:视差映射是法线映射的增强版,不止改变了光照作用,还在平坦的多边形上创建了3D细节的假象。其实我们看原理代码...
  • 目标在本节中,我们将学习根据立体图像创建深度图。基础在上一节中,我们看到了对极约束其他相关术语等基本概念。我们还看到,如果我们有两个场景相同的图像,则可以通过直观的方式从中获取深度信息。下面是一张...
  • based Depth Refinement and Normal Estimation基于深度优化法线估计作者:Mattia Rossi, Mireille El Gheche, Andreas Kuhn, Pascal F...
  • 下面是一个图像,一些数学公式证明这个直觉上面的包含等面积三角形,写出他们的等式会得到下面的结果:xx'是图像平面里的点对应的场景里的点摄像机中心的距离。B是两个摄像机之间的距离(我们已知),f是摄像...
  • 因为parallax算法RayMarching算法相似(都为步进采样),就放在一个专栏里了,自己理解的地方有注明.原文链接 :https://github.com/UPBGE/upbge/issues/1009这个教程介绍了怎么用GLSL使用不同的视差贴图技术(也可以...
  • 视差图常为CV_16S或CV_32S等,如果直接使用cv::imwrite()保存视差图深度图,则图像将被转成CV_8U格式,损失很大的精度。 保存 在进行保存的时候,为保存无压缩图像,需要使用到cv::imwrite()的第三个参数。 显示...
  • 接上文 : ...然后shader中会有两层的深度(最后采样的两层),而V表面的交点坐落于这两层之间.如下这两个图层在纹理坐标T3T2的位置.现在您能使用二叉搜索来提高精度.二叉搜索的每一次迭...
  • 主要是基于图深度学习的入门内容。讲述最基本的基础知识,其中包括深度学习、数学、神经网络等相关内容。该教程由代码医生工作室出版的全部书籍混编节选而成。偏重完整的知识体系学习指南。在实践方面不会涉及太...
  • CogDL 是由清华大学知识工程实验室(KEG)联合北京智源人工智能研究院(BAAI)所开发的基于深度学习的开源工具包,底层架构 PyTorch,编程语言使用了 Python。视频 ↑CogDL 允许研究人员开发人员轻松地针对数据...
  • 【新智元导读】今天新智元介绍清华大学朱文武教授组的一篇预印版综述论文,全面回顾 (graph) 深度学习,从半监督、无监督强化学习三大角度,系统介绍了 GNN、GCN、自编码器 (GAE) 等 5 大类模型及其应用发展...
  • 本文提出使用深度学习方法和几何RANSAC结合的无监督相对位姿回归pipeline, 分别对光流图和视差图进行预测,然后使用RANSAC求解内点集合以及相对位姿。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来...
  • 法线贴图一样视差贴图能够极大提升表面细节,使之具有深度感。它也是利用了视错觉,然而对深度有着更好的表达,与法线贴图一起用能够产生难以置信的效果。视差贴图光照无关,我在这里是作为法线贴图的技术延续来...
  • 铜灵 发自 凹非寺量子位 出品 | 公众号 QbitAI一个你边...输入这样的视频:就能输出这样的3D景深版:谷歌在博客中表示,这是世界首个在摄像机人体同时运动情况下的深度学习景深预测算法,优于制作深度图的最先进工...
  • 通过特征点匹配获取拍摄场景的深度分布信息,提取最大深度和最小深度,结合当前的基线以及人眼可接受的最大视差和最小视差重新调整基线,直到获取合适的基线,从而保证拍摄场景在舒适立体成像区内成像。所提方法不会引起...
  • MC-CNN(1409.4326)《Computing the Stereo Matching Cost ... 通过基于交叉的成本汇总半全局匹配来细化成本,然后进行左右一致性检查以消除被遮挡区域中的错误。缺陷:CNN为一对图像块计算相似度分数,以进一步...
  • 双目立体匹配一直是双目视觉的研究热点,双目相机拍摄同一场景的左、右两幅视点图像,运用立体匹配匹配算法获取视差图,进而获取深度图。而深度图的应用范围非常广泛,由于其能够记录场景中物体距离摄像机的距离,...
  • 背景介绍立体匹配也称作视差估计(disparity estimation),或者双目深度估计。其输入是一对在同一时刻捕捉到的,经过极线校正的...当给定摄像机的基线距离b焦距f之后,我们就可以从视差图中自动计算出深度,。所...
  • OpenGL视差贴图

    2019-10-09 17:19:23
    参考: ...视差贴图(Parallax Mapping)技术法线贴图差不多,但...法线贴图一样视差贴图能够极大提升表面细节,使之具有深度感。它也是利用了视错觉,然而对深度有着更好的表达,与法线贴图一起用能够产生难以置信的...
  • 一、窗口代价计算视差的的基本原理二、实现NCC视差匹配方法三、图像集四、总结一、窗口代价计算视差的的基本原理立体匹配算法的原理:就是找出两张图像的对应关系,根据三角测量原理,得到视差图;在获得了视差信息...
  • 前言 本篇文章是在高博的一起做RGB-D SLAM 系列 的基础上修改代码,增加了单、双目接口以及实时点云图构建路径显示功能,并利用词袋模型进行闭环检测,实现了一个简易单双目slam系统。
  • Semi-Global Matching(SGM)算法源码地址:SemiGlobalMatching​github.com视差...存储每个像素的视差值,在影像内外参数已知的情况下,视差图可以转换为深度图,表示每个像素在空间中的位置,图1为双目立体像对的...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 310
精华内容 124
关键字:

深度图和视差图