用单张2D图像重构3D场景

zouxy09@qq.com

http://blog.csdn.net/zouxy09

之前看到Stanford大学的机器学习公开课程的lecture01中,Andrew Ng介绍他的两个学生用单幅图像去重构这个场景的三维模型。感觉非常厉害,所以就自己了解了一下。而这个研究也在相应的大学网站上面提供了详细的资料,包括相关论文、编写的代码和训练涉及到的样本库等等。

斯坦福大学:

http://ai.stanford.edu/~asaxena/reconstruction3d/

康奈尔大学:

http://www.cs.cornell.edu/~asaxena/learningdepth/

下面是个人看了下上面的《Learning 3-D Scene Structure from a Single Still Image》这篇论文的一点点理解,暂时还没涉及到具体的数学模型内容,如果后面自己有机会在这个方向往下做的时候,再做具体的分析了。

人看到一张静态图像去理解它的3D结构是一件很容易的事,因为人有图像里面这些物体的先验知识(当然得包含生理和心理效应),例如水是在地下的,天空和白云在上面,大部分的墙壁是直立的平面,桌子是方的,树是长在地面的,而且上面有叶子,还有山水啊,植物,动物啊等等,人看到它的一面,可以联想到它的立体结构。这也是为什么人用一个眼睛也能“看到”三维世界的原因。但对于计算机来说,由于投射投影,3D场景投射到2D空间里面,就损失了很多的信息,例如深度信息,同时诸如光照,材料特性、朝向、距离等信息都反映成唯一的测量值——灰度,因而要从这唯一的测量值恢复上述一个或几个反映物体本质特征的参数是一个病态过程(又称不适定性问题,即解不唯一。观测数据不足以约束问题的解,因此要利用先验知识或引入合适约束)。所以从单张图像去理解图像场景的3D结构就很困难了。

以前为了实现3D重构,一般都是通过两个(模拟人的双眼)或者多个摄像头来获取图像,再配准的。当然,也有研究单张图像的,但是都会对场景做很多的假设,例如由明暗恢复形状shape from shading(SFS)(利用单幅图像中物体表面明暗变化恢复其表面各点的法向方向进而求得其相对高度),运用光学辅助等,使用有很大的局限性。现在呢,就有很多的深度摄像头出来了,例如kinect,但还是两个摄像头(一个彩色,一个红外用于测图像深度,也就是测场景中物体到相机的距离);还有就是去年三星开发的在传统的cmos图像传感器里面增加可以测距的红外感光元,这样一个摄像头就可以获取彩色和深度图像了,但是目前技术还不是很成熟,应用还不广。

那么现在我们是讨论怎样从单张静态图像去重构其3D场景(不需要对场景做假设)。

图像为3D空间在2D平面(图像传感器)的投影,那么同一个投影可能是由无限种可能的3D场景投影产生的(还记得投影的概念不?)。这就是重构的困难。但是,不是每一种可能都是合理的,我们要做的就是找到最有可能投影为这张2D图像的3D场景(是不是有点概率论和贝叶斯的味道了)。因为我们生活的环境是结构性的,也就是说物体大部分是规则和有联系的,所以我们才可以通过一些描述这类规则和联系的先验知识去预测哪一种3D场景的可能性最大,最合理。

我们可以借鉴人的理解原理,将人对场景理解的先验知识赋予计算机,让计算机通过分析图像的特征去获得额外的3D结构的信息,通过这些信息去进行3D重构。那么现在的第一个问题是:图像中有哪些信息对场景的理解有用呢?

被观察对象本身具有某些特征,观察者即使只用一只眼睛也可以获得足够的深度信息,这种特征就称为单眼线索。人类单眼感知距离的手段包括:遮挡、纹理梯度、明暗线索、线条透视、聚焦调节等。
  在空间关系上,处于同一视线上的各物体间相互遮挡,实际所看到的只是离观察者最近的物体,这一点在美术、工程制图等方面得到了充分的运用。这种遮挡提供了物体相互间的相对空间关系。
  大片的相似景物常常能够提供足够的纹理信息,实际上在日常生活中经常会不自觉地利用这一信息,如“近者大,远者小,近者在图像的下缘,远者在图像的上缘”。这种单眼线索是根据对象的纹理大小、疏密、位置来获取深度信息的。这种纹理大小、疏密、位置分布被称为纹理梯度。
  明暗和阴影的变化也提供了一种有效的深度线索。对于具有相同质地的物体,明暗提供了关于朝向的信息,这也就得到了相对距离信息。
  线条透视是指平面上的对象在面积的大小、线条的长短以及线条之间距离远近等特征上所显示的能够引起深度感的单眼线索。典型的线条透视是在平行的道路、铁轨等图像中体现的,在线条轮廓画中这一特点得到了充分的运用。
  前面几种空间深度感知的单眼线索可以说都是心理性的,是从长期的训练和适应中形成的。而眼睛的聚焦调节则是具有生理基础的单眼线索。通过调节水晶体的曲率变化使得物体在视网膜上得到清晰的象。这种调节引起视觉感受器的神经冲动,进而传入中枢神经系统的运动区,也可以产生深度知觉。
  在计算机视觉的研究中,对上述感知手段的模拟产生了一大类称之为Shape from X的技术。

而在本论文中,其主要的思想如下:我们把图像划分为很多小的区域(通过聚类算法),每个区域的像素的属性相似,例如纹理、颜色等,这个区域称为Superpixels,一个Superpixels一般是结构的一小部分,例如墙壁或者平面的一部分等,我们的工作就是先通过分析像素的相似性去对图像进行分割(或者聚类),将其划分为多个结构区域(例如2000个),然后再预测这些Super pixels的3D位置和方向。

图像有用的属性:

(1)图像特征与深度:Superpixels的图像特征与深度(和方向)存在着一定的联系;

(2)连接结构:除了occlusion的情况,一般相邻的Super pixels是最有可能互相连接的;

(3)共面结构:相邻Super pixels很有可能属于同一个平面,如果他们有相似的特征,而且两者之间没有边缘;

(4)共线结构:图像中的长直线代表了3D场景中的直线,例如建筑物的边缘、人行道、窗等;

上面说到,我们可以通过一个模型去描述这些Superpixels的3D位置和方向与图像特征的关系,也即找到一个函数,我们输入一张图像的特征,然后这个函数就输出对应的3D位置和方向,也就实现了3D重构。那么问题是:怎样的模型才可以比较好的描述这种关系呢?这里用到的是马尔科夫随机场Markov Random Field (MRF)。那么什么是MRF?为什么它能很好的描述这种关系?又怎样去求解这个模型呢?(机器学习:通过提供图像和相应的深度图像去训练得到MRF模型)。借用别人的解释来说明下:

马尔科夫随机场(Markov Random Field),它包含两层意思:一是什么是马尔可夫,二是什么是随机场。

马尔可夫一般是马尔可夫性质的简称。如果一个过程的“将来”仅依赖“现在”而不依赖“过去”,则此过程具有马尔可夫性,或称此过程为马尔可夫过程。X(t+1) = f(X(t))。拿天气来打个比方。如果我们假定天气满足马尔可夫性质,其意思就是我们假设今天的天气仅仅与昨天的天气存在概率上的关联,而与前天及前天以前的天气没有关系。其它如传染病和谣言的传播规律,就是马尔可夫的。

随机场包含两个要素:位置(site),相空间(phase space)。当给每一个位置中按照某种分布随机赋予相空间的一个值之后,其全体就叫做随机场。我们不妨拿种地来打个比方。“位置”好比是一亩亩农田;“相空间”好比是种的各种庄稼。我们可以给不同的地种上不同的庄稼,这就好比给随机场的每个“位置”,赋予相空间里不同的值。所以,俗气点说,随机场就是在哪块地里种什么庄稼的事情。

好了,明白了上面两点,就可以讲马尔可夫随机场了。还是拿种地打比方,如果任何一块地里种的庄稼的种类仅仅与它邻近的地里种的庄稼的种类有关,与其它地方的庄稼的种类无关,那么这些地里种的庄稼的集合,就是一个马尔可夫随机场。

在图像中MRF定义的直观意义是,位置s的像素值只受到周围点Ns的影响,而与其他的点无关。它提供了方便而直接的方法以概率来描述图像像素具有的一些空间相关的特性。

上面说到,利用二维投影图像来重构三维物体的可视部分的问题是一个病态问题。那么什么叫病态问题呢?如果一个问题的解是存在的、唯一的,而且连续依赖于初始数据,那么称其为适定的,当不能全部满足上述条件时,就称其为不适定的(没有唯一解)。不适定性问题(即病态问题),观测数据不足以约束问题的解,因此要利用先验知识或引入合适约束。针对我们的问题来说,就是给你一幅图像(观测数据),它所代表的3D场景有无限种可能(无数个解),所以我们需要利用先验知识去增加约束,不满足约束的解是不正确的,找到一个最优的解。不适定问题(或者病态问题)的典型处理方法有两种:正则化方法和马尔可夫随机场(MRF)的方法。
      马尔可夫随机场不但可以表征二值纹理,还可以利用吉布斯分布模型表征多值纹理,利用随机松弛算法或者确定性松弛算法,获得了图像分割的MAP估计。
       一维MARKOV随机过程(一阶的情况)很好的描述了随机过程中某点的状态只与该点之前的一个点的状态有关系。二维MRF的平面网格结构同样可以较好的表现图像中像素之间的空间相关性。
       MRF理论可以根据图像中像素之间的相关模式确定先验概率。MRF理论在实际应用中常常与统计决策和估计理论相结合,根据一定的最优化准则来确定目标函数。最大后验概率(MAP)是最常用的最优化准则,也是MRF建模中最常用的最优化准则。

所以可以将原图像看成是一个Markov场,以此作为先验知识来进行最大后验概率密度估计(MAP)。呵呵,好像还没能讲明白,因为自己也还没看明白,继续学习……

用单张2D图像重构3D场景相关推荐

  1. (附源码连接)利用AI将2D照片合成3D场景

    利用AI将2D照片合成3D场景 新的 NVIDIA NGP Instant NeRF 很好地介绍了神经辐射场的入门. 在短短一个小时内,您就可以编译代码库.准备图像并训练您的第一个 NeRF. 与其他 ...

  2. 2D图像转3D仅需5秒,特斯拉的自动驾驶技术有救了?

    来源:科技智谷 编译:徐浩 75年前,宝丽来相机拍摄出第一张即时照片,是人类第一次以逼真的二维图像快速捕捉三维世界,具有划时代的意义.今天,人工智能的研究人员正在进行相反的工作,力求在几秒钟的时间内将 ...

  3. Halcon 2D图像转3D效果查看

    Halcon读取图像之后,可以直接通过下面的按钮转换成3D效果图(当然并不是所有2D图转换后的效果都比较好看) Halcon的2D图转3D显示的过程应该是根据2D图像的灰度值来对应成3D信息的高度,灰 ...

  4. AI更加进化 可将2D影像转为3D场景

    Alphabet子公司DeepMind近日已发展一人工智能型系统,只要观察2D影像就能建立其3D场景.DeepMind的研究人员说明,人们理解视觉场景时并不只光靠眼睛,还必须仰赖脑袋里的知识进行推理, ...

  5. 使用opencv以及pcl将2D图像转换为3D点云

    如果你要问怎么得到2D图片,可以看我另文博客:深度相机的图像深度实时显示 本文其实是转载自 http://blog.csdn.net/zhuquan945/article/details/5280 ...

  6. 2D图像生成3D点云补充材料chamfer distance和EMD

    传自知乎大佬 Point Set Prediction Network 论文提出了全新的网络架构,一共分为三个阶段. 第一阶段:网络大致由一个编码器和一个解码器构成,编码器是由卷积层和ReLU构成.输 ...

  7. 相机标定 2D图像到3D坐标转换 像素坐标转到世界坐标时相机坐标系中的Zc值求解:线结构光平面标定法

    线激光平面拟合图像 在单目视觉中会丢失掉焊缝的深度信息,为了后续求解焊缝的世界坐标则需要先求解出焊缝的深度信息才可以进行坐标计算. 在α和β平面分别对标定板进行拍照多幅图片(我采集了13幅)进行相机标 ...

  8. 从2D图片生成3D点云

    记录两个可以由2D图像生成3D模型的深度学习网络 1.由单张2D图像生成3D点云的深度网络 论文 <A Point Set Generation Network for 3D Object Re ...

  9. 英伟达这篇CVPR 2022 Oral火了!2D图像秒变逼真3D物体!虚拟爵士乐队来了!

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 你见过乐器自己演奏么?看看这个: 图1. "活灵活现"的虚拟乐器还是在 NVIDIA 服 ...

最新文章

  1. python大学课程-利用python完成大学刷课(从0到完成的思路)
  2. 打开适配器并捕获数据包
  3. PHP 练习(新闻发布)
  4. android 上传头像工具类,Android开发中如何实现头像的更换与上传
  5. Using WIN32 calling convention 阅读笔记
  6. linux下目录与文件的权限及特殊权限
  7. 18.nginx 服务器的代理服务
  8. mysql key键_mysql KEY是什么键?有什么作用?
  9. 2020年MathorCup数学建模B题养老服务床位需求预测与运营模式研究全过程解题程序及多篇论文
  10. 《嵌入式系统可靠性设计技术及案例解析》读书笔记(二)
  11. Laplacian算子-Log算子-Dog算子边缘检测原理合集及实现
  12. java运行期类型鉴定
  13. bin to npy
  14. 地表反射率影响因素_【专题突破】影响气候形成的因素及主要气候判别(高中地理),务必掌握!...
  15. 自学单片机是否先学c语言,学习单片机一定要先学好C语言再去学单片机吗
  16. 微信小程序 table表格 PC版本
  17. SkyEye(一种软件模拟的系统开发平台)
  18. 常用的加密方式有哪些?
  19. python 换硬币
  20. Spring AOP实现原理,从代理说起

热门文章

  1. Python语音信号处理
  2. android开发模板web,Android开发实践:Android.mk模板
  3. linux png格式的文件,PNG文件结构分析之一(了解PNG文件存储格式)(转)
  4. 扫地机器人水箱背景_水箱尘盒组件及扫地机器人的制作方法
  5. 动态网页开发技术(三):jsp
  6. Java基础--成员变量和局部变量(区别、重名问题)
  7. 静态资源详解和帮助文档的使用
  8. api 文件夹index.js 集合写法
  9. MySQL的Limit子句
  10. Loadrunner基本概念解析一