首页 > 其他分享 >使用iPhone相机和OpenCV来完成3D重建(第一部分)

使用iPhone相机和OpenCV来完成3D重建(第一部分)

时间:2023-06-14 15:03:05浏览次数:58  
标签:深度图 教程 相机 OpenCV iPhone 传感器 使用 重建 3D


使用iPhone相机和OpenCV来完成3D重建(第一部分)_人工智能

正文字数:1497  阅读时长:2分钟

这个教程将带你使用自己的手机摄像头和图片实现从零开始到点云。

Posted by Omar Padierna 

https://becominghuman.ai/stereo-3d-reconstruction-with-opencv-using-an-iphone-camera-part-i-c013907d1ab5

这是一个由3部分组成的系列文章。

我注意到,其他大多数关于三维重建的教程都在某种程度上有点欠缺。别误会,我认为它们是十分优秀的成果,但是在某种程度上它们是支离破碎的,或者它们当中有一部分过于深入地研究理论,或者两者兼而有之。

更糟糕的是,他们使用专门的数据集(如Tsukuba),这就会造成对一些数据集之外的任何东西在使用这种算法时,因为参数调微调会产生一些麻烦。

我相信三维重建(广义的计算机视觉)最酷的事情是重建你周围的世界,而不是别人的世界(比如数据集中的世界)。本教程是一个初步的尝试,旨在帮助您使用OpenCV的强大功能重新创建自己的世界。

简单地说,这个教程将带你使用自己的手机摄像头和图片实现从零开始到点云。所以,废话不多说,让我们开始吧。

注意

为了避免写一篇非常长的文章,本教程分为三个部分。

第1部分(理论和需求):概述了一个非常简单的立体三维重建所需要的步骤。

第2部分(相机校正):包括用代码校正你相机的基础设置/知识。

第3部分(视差图和点云):介绍了重建图片基础知识利用前面用代码标定过的相机。

三维重建所需的步骤

有很多方法可以重建周围的世界,但都可以归结为需要得到一张准确的深度图。

深度图中的每一个像素都表示的是深度信息(而不是颜色信息)。它一般都是用灰度图的形式展现出来。

使用iPhone相机和OpenCV来完成3D重建(第一部分)_opencv_02

Tsukuba 数据集的深度图。由OpenCV提供

如前所述,获取一张深度图有很多不同的方法,而这些方法都取决于所使用的传感器。一种传感器可以是一个简单的摄像机(从现在起在我们将称为RGB摄像机),但也可以使用其他传感器,如激光雷达或红外线或两者的组合。

传感器的类型将决定深度图的精准程度。根据精确度从大到小排列依次是激光雷达>红外线>相机。深度图也可以着色以更好的显示深度。

使用iPhone相机和OpenCV来完成3D重建(第一部分)_人工智能_03

我的Kinect相机自拍图

根据所用传感器的类型,实际获取深度图需要的步骤或多或少。例如,Kinect相机使用结合了RGB相机和红外传感器,因此您可以立即获得一张深度图(因为它是由红外传感器处理的信息)。

但是,如果您除了手机摄像头之外什么都没有,该怎么办?在这种情况下,您需要进行立体重建。立体重建和使用您的大脑和眼睛用来实际理解深度的原理是一样的。

其要点在于从两个不同的角度看同一张图片,并在两张图片中寻找相同的事物,并从位置的差异推断出深度。这称为立体匹配。

为了进行立体匹配,重要的是使两张图片具有完全相同的特征。换一种说法,两张照片都不应该有任何失真。这是一个问题,因为大多数相机的镜头会导致不同程度的畸变。这意味着为了精确地进行立体匹配,需要知道相机的光学中心和焦距。

在大多数情况下,这些信息是未知的(尤其是对于您的手机摄像头),这就是为什么立体3D重建需要以下步骤的主要原因:

1. 相机校正:使用一组图像推断相机的焦距和光学中心

2. 图像畸变:去除重建要用到的图像中的镜头畸变

3. 特征匹配:在两张图片之间寻找相似的特征并构建深度图

4. 重投影点:使用深度映射将像素重投影到三维空间中。

5. 构建点云:生成一个包含三维空间中的点的新文件以进行可视化。

6. 构建网格以获得实际的三维模型(不在本教程的范围内,但很快将在其他教程中提供)

步骤1只需执行一次,除非更换摄像机。而每次你获得一对新照片时,都需要重新执行一遍第2-5步……大概就是这样子。

实际的数学理论(为什么)要复杂得多,但是在本教程之后,它将更容易处理和理解,因为你将在阅读完本文之后获取一个实例,你可以进行各种的实验。

在下一部分中,我们将探讨如何实际校准手机摄像头,以及一些校准的最佳实践操作。

标签:深度图,教程,相机,OpenCV,iPhone,传感器,使用,重建,3D
From: https://blog.51cto.com/u_13530535/6477223

相关文章

  • 3d模型底模和高模的三条详细区别
    3d模型里底模和高模有哪些区别?在3d建模法线贴图的时候,常常会听到底模和高模两种不同的说法。这两种模型究竟有怎样的区别,有分别有着哪些各异的效果呢?本期,模型云就来为您盘点3d模型底模和高模的区别有哪些。3d模型底模和高模的区别有哪些区别一:面数不同底模又称低模,指的是低精度......
  • Unity3D学习笔记(二)创建地形和漫游
    七月3201212:35上午上一章粗略介绍了一下Unity游戏引擎的概念定义和界面功能,这次就来实践一下。我们的目标是没有蛀牙(误),目标是创建一个地形,上面有山脉和盆地,然后再放置一个人物,以第一人称的视角来漫游、观察我们所创建的世界。 在开始设计游戏之前我们需要先重新......
  • Unity3D学习笔记(一)界面介绍
    六月2020128:05下午从开始学习Unity到现在已经过去近三个月了,期间零零散散地在网上找教程、实例,感觉印象不够深刻。好多知识点不是被忽略了,就是被遗忘了。有幸在六一儿童节的时候发现了3DBuzz的基础视频教程,犹如介绍所言,几乎详细到每个菜单和按钮。为了部落(误),为......
  • opencv 边界填充/数值计算/图像阈值
    边界填充importcv2importmatplotlib.pyplotaspltimportnumpyaspyimg=cv2.imread('C:/Users/59925/Desktop/pytest/pics/minions-s.jpg')#读取文件#边界填充#指定填充边界大小top_size,bottom_size,left_size,right_size=50,50,50,50#函数一样只是填充方法type不......
  • opencv 视频提取
    视频提取importcv2importmatplotlibaspltimportnumpyaspy#cv2.VideoCapture可捕获摄像头用数字控制不同设备,如0,1#如果是视频文件直接指定路径即可。vc=cv2.VideoCapture('C:/Users/59925/Desktop/pytest/video/video_minions.mp4')ifvc.isOpened():#判断图像是......
  • opencv 图片处理/颜色通道提取/截取感兴趣部分图片
    图片处理importcv2#=============================#截取图像某一部分ROI(regionofinterest)mini=cv2.imread('C:/Users/59925/Desktop/pytest/pics/minions-s.jpg')print(mini.shape)cut_mini=mini[0:150,0:150]cv2.imshow('img',cut_mini)#============......
  • Unity3D:Pick and select GameObjects
    推荐:将NSDT场景编辑器加入你的3D工具链3D工具集:NSDT简石数字孪生PickandselectGameObjects可以在Scene视图中或从Hierarchy窗口中选择一个游戏对象。也可以一次选择多个游戏对象。Unity会在Scene视图中突出显示选择的游戏对象及其子项。默认情况下,选择轮廓颜色为橙......
  • ESMap 三维地图在智慧园区三维场景的应用-数字孪生3D可视化服务平台
       近年来,得益于物联网、大数据、云计算、人工智能等新一代信息技术的发展,“数字孪生”概念也被广泛的传播,越来越多的应用于智慧建筑、生产制造、智慧园区、水利水务、健康医疗等诸多领域。 如何运用“数字孪生”概念延长企业生命周期,助力企业从2D管理向3D管理的升级?易景......
  • 3dmax编辑常用按钮添加
    显示按钮,点击带笔的小图标修改按钮......
  • Unity3D:Scene 视图导航
    推荐:将NSDT场景编辑器加入你的3D工具链3D工具集:NSDT简石数字孪生Scene视图导航场景视图具有一组导航控件,可帮助您高效地四处移动:场景视图辅助图标移动、旋转和缩放工具居中工具场景视图辅助图标场景辅助图标将显示在场景视图中。这将显示场景视图摄像机的当前方向,并允......