结构光3D扫描

325,411

636

203.

结构光三维扫描

在Radiohead的“纸牌屋”视频中,汤姆的脸也采用了同样的技术。我将指导您设置投影仪和相机,并捕获可以使用处理应用程序解码为三维点云的图像。

具有景深的点云凯尔·麦克唐纳维米欧.



纸牌屋谷歌代码项目

我已经包括了很多关于如何使这项技术发挥作用的讨论,以及它背后的一般理论。其基本思想是:

1下载三相
2顺时针旋转投影机以“纵向”
3项目包含的图像/模式,拍摄每张照片
4调整照片大小并用它们替换/img中的示例图像

第一步:理论:三角测量

如果你只是想做一个扫描,而不关心它是如何工作的,跳到第3步!前两步只是对技术的一些讨论。

基于固有特征的三角剖分
大多数三维扫描是基于三角测量的(例外是飞行时间系统就像微软的”纳塔尔"). 三角测量的基本原理是三角函数对三角形进行三次测量并用这些测量值恢复其余测量值的原理。

如果我们从两个角度拍摄一个白色小球,我们将得到两个角度测量值(基于小球在相机图像中的位置)。如果我们也知道两个摄像机之间的距离,我们就有两个角度和一个侧面。这允许我们计算到白色球的距离。这是怎么回事运动捕捉工作(很多反光球,很多相机)。它与人类如何看待深度有关,并用于差距-基于3D扫描(例如,灰点大黄蜂).

预计特征的三角测量
我们可以用激光笔代替多个图像传感器。如果我们知道激光指针的角度,那就是一个角度。另一个来自相机,除了我们在寻找一个激光点而不是一个白色的球。激光和相机之间的距离给了我们侧面,由此我们可以计算到激光点的距离。

但摄像机不局限于一次一个点,我们可以扫描一整条线。这是系统的基础David 3D扫描仪,它用激光扫描整个场景。

或者,更好的是,我们可以投射一堆线,同时跟踪它们。这叫做结构光扫描。

第2步:理论:三相扫描

想象一下在场景中投影一个从白色到黑色的渐变。然后,给定点的亮度与投影仪的角度相对应。但是这里有三个问题:这只产生256个可能的角度,因为大多数相机和投影仪的位深度,现场的固有颜色和反射率并未占据且方式光强度下降距离不是模型化的。

如果我们投影多个距离彼此偏移的渐变,我们可以克服这些问题中的两个问题。光强度下降在给定点处的所有光上的缩放因子充当缩放因子,场景的固有颜色是偏移强度。采样多次可以帮助钻头深度问题,但更好的解决方案是将梯度重复为三角波(“条纹”)。这种方式相邻的线路没有相同的亮度。

对于重复的梯度,我们不再对每一行具有独特的角度识别。要解决此问题,我们必须将条纹编号从一个条带传播到另一个条带。这被称为映射展开。有一堆相位展开算法,它们通常在精度和速度之间具有折衷。最简单和最快的相位展开算法之一使用洪水填充技术。

一个剩下的问题是,随着场景远离投影机的焦平面,模式将模糊。我们可以通过使用一种“预模糊”模式:三个余弦波来处理这一点。该技术称为三相扫描,包括图案:COS(θ-2π/ 3),COS(θ),COS(θ+2π/ 3)。

步骤3:工具和材料

摄像头和支架
我们只是拍了三张照片并将它们转移到电脑上。因此,您可以将网络摄像头的任何东西用于宝丽来和扫描仪,但您最好使用标准数码相机。

投影仪和支架
我们只是投影三个帧,所以你可以使用透明胶片和投影仪,甚至幻灯机,但你最好用数字投影仪,你可以用你的电脑。当投射结构光模式来捕捉运动时,投影仪的类型很重要(CCD与DLP、色轮频率等),但如果我们只是进行一次扫描,这其实并不重要。

三相解码器应用程序
可从结构光Google代码项目,并包括要投影的模式。

处理
如果要修改解码器应用程序,则需要进行处理。Processing是一种“为希望编程图像、动画和交互的人提供的开源编程语言和环境”。解码器应用程序还使用两个外部库,您需要下载并安装:Peasycam.控制P5.

第四步:投影仪相机配置

我们将使用“纵向”设置进行此扫描。这意味着投影机和相机将安装在侧面。投影机往往有一些内部镜头移位:当您在桌子上放置投影机时,它将图像“向上”投影到屏幕而不是直接拍摄。为了补偿这一点,确保相机的光轴与投影机击中的表面切向。换句话说,如果投影仪已经顺时针旋转,请将摄像机保持在投影机的右侧。

此时,相机和投影仪的图像平面近似已纠正:投影仪的水平线是相机上的水平线。白色墙壁有助于作为背景来测试相机和投影仪是否对齐(一般来说,像白色这样的反射色比深色更容易扫描)。

一旦对齐,相机的透视图需要与投影仪的透视图有一个垂直偏移。向上移动相机:足够使您可以看到正投影的余弦图案中的曲线。太多了,你会捕捉到很多阴影(投影区域)不是投影)或缺少投影仪的区域突出的。

对于安装,您可以使用几乎任何适当稳定的东西。我什么都用过了蜘蛛投影仪支架桌子上贴着胶带和纸板,还有音乐架。主要目标是确保在捕捉每个图案时几何图形不会发生变化。

第5步:照明校准

一旦你的投影仪和相机安排好了,就需要考虑照明了。

关灯
结构光对环境照明相当强,但它有助于关闭尽可能多的灯光。这样只有投影仪才能照亮现场。

一旦灯光熄灭,确保你的投影仪没有剪辑黑色或白色。使用像这样的校准模式监测伽马试验,或下面附加的图案,同时调整投影仪的“对比度”和“亮度”设置。然后调整相机的白平衡和曝光,以确保白色不会被剪断。如果您的拍摄对象靠近投影仪,则最亮的白色将比您的拍摄对象远离投影仪时更亮,因为光强度衰减.

曝光时间问题
你可能会发现你相机里的图像看起来是彩色的,即使你投射的是黑白图像。这是因为你的投影仪有一个彩色轮子你捕捉到的投影还不到一整帧。要解决这个问题,请降低ISO(降低灵敏度)并将相机的曝光时间至少增加到1/60秒。如果白色是剪辑的,你要么把一个中性密度过滤器放在相机上,要么把场景从投影仪上移开。

眼睛安全
在你走到投影仪前,记住:它是明亮的,视网膜损伤是不可逆转的。如果你想做胸部扫描,闭上眼睛。

步骤6:捕获和解码

捕获
使用所有内容和校准,将分辨率设置为1024x768并打开三个余弦图像并一次显示全屏。大多数操作系统都有一个内置的图像查看器,可以让您使用“幻灯片显示”模式并手动前进。如有必要,可以放大相机。将投影机聚焦在主题上,而不是在它们后面。尝试尽可能多地匹配示例图像。

解码设置
一旦捕捉到图像,将图像传输到计算机并调整其大小,必要时将其重新定向为纵向。480x640是一个很好的尺寸开始。这听起来可能很小,但请记住:这是300k点,或600k三角形!将图像重命名为“phase1.jpg”、“phase2.jpg”和“phase3.jpg”,并替换示例图像。确保图像整齐。哪一个先来并不重要,重要的是模式在2中逐渐移动π/从图像到图像的3个步骤。

解码参数
有三个解码参数:噪声阈值,zskew和zscale。Zskew和Zscale都依赖于投影机相机配置,噪声阈值取决于对象的亮度以及环境光。换句话说,一旦您的相机和投影机到位,您只需要调整Zskew和Zscale一次。Zskew和Zscale与步骤1中描述的两个测量(相机和投影仪之间的距离以及相机和投影仪之间的角度)有关。

首先调整噪声阈值,以便任何太暗而无法解码的东西都不会影响解码。5-20岁是个不错的起点。然后修改zscale,使点具有一定的深度。确保深度在正确的方向,并且你的拍摄对象没有左右翻转(或者真的像镜子一样由内而外翻转)。最后,修改zskew,使点正确倾斜。如果你的相机是朝着一个垂直的墙稍微向下看,墙应该稍微向前倾斜。改变解码参数是一个反复的过程:有时你必须先得到一个正确的参数,然后才能看到如何改变其他参数。

第7步:变化

恭喜你,你只用了三张图片做了三维扫描!那我们该怎么办?为了记录下我下一步的技巧,请注意我的维米欧. 以下是我一直在调查的一些事情。请随时在评论部分留下任何想法或问题!

3D运动

这只给了我们一次扫描。用这种技术捕捉运动还需要一些技巧。第一种方法是同步相机和投影仪,这样我们就可以高速拍摄。商业结构光系统使用硬件和特殊的电子设备来实现这一点。DIY方法可能使用来自相机的垂直同步信号来驱动微控制器,该微控制器为投影仪生成三相模式。如果没有真正的同步,我们可以得到一个60帧的摄像头,如PS3Eye和60赫兹的投影仪相当远。

导出数据
如果您想对数据执行某些操作,那么导出三维数据以便与其他应用程序一起使用显然很重要。也许是制作一个缩影,或者是在电子游戏中为一个角色使用网格。一个更复杂的应用程序解码.zip文件可从结构光项目。它可以处理导出到各种三维格式,如.png深度贴图、.ply和.obj三角形网格和点云。它还允许您捕捉上述运动。随着这个应用程序的开发,我将编写另一个说明如何捕获三维视频。

更精确的展开
第二步中提到的相位展开是相移扫描的重要组成部分。对于一个给定包装阶段的展开问题,没有一个“正确”的答案。然而,洪水填充技术显然并不理想,因为它可以创建沿直线具有较大相位不连续性的区域。更好的相位展开算法可以避免这些明显的误差。

自动校准
我们应该能够通过对参考受试者进行一些测试扫描来自动近似zskew、zscale和噪声阈值参数。

绝对位置
三相扫描只能通过在展开阶段期间传播相位恢复相对位置。为了拍摄场景中的每个位置的绝对测量,我们可以使用具有许多不同频率的余弦图案,或者使用称为灰码扫描的技术。灰色代码通过使用10个模式而不是3分配给每个条带的唯一代码。

表现不可见的捕获
除非你喜欢闪烁滚动线条的美感,否则结构光并不是在观众面前的舞台上捕捉3D信息的最佳方式。解决这个问题的一个方法是修改投影仪,去掉红外截止滤光片,换成可见光截止滤光片。然后,用红外相机,你可以看到投影图案而不干扰可见光谱中的场景。

第8步:其他资源金宝博比分直播手机版

交互式示例
灰色代码解码器
这是我建立的第一个3D扫描仪,基于灰度编码和交叉投影/相机光线。

三相解码器
这是一个精简版的三相解码器,只实现了基本的功能。

文件

建立自己的三维扫描仪
概述3D扫描如何工作,具有涉及数学的描述。

结构光系统中的模式编码策略

结构光扫描不同方法的惊人汇编。如果你认为你有更好的模式比三相扫描,比较他们的那些在本文。

摄像机网络的多视图几何

对从多个角度测量场景所涉及的数学进行稍微深入的介绍。

快速主动视觉中光照的时间抖动
使用DLP投影仪的抖动模式的超快结构光的疯狂方法。

研究人员
宋张
Radiohead“纸牌屋”视频背后的研究人员。

Paul Debevec.
捕捉更高阶的物质信息,如次表面散射和极化。

迈克尔·瓦兰
处理来自结构光扫描仪的三维数据需要大量的工作。

第一个分享

    建议

    • 锡箔纸速度挑战赛

      锡箔纸速度挑战赛
    • 让它发光比赛

      让它发光比赛
    • 第一次作家大赛

      第一次作家大赛

    203讨论

    在这里我觉得我自己想出这个主意很聪明。哦,等等,我一定很聪明,因为它成功了,哈哈!嘿嘿。不管怎样。我在考虑“旋转”投影仪的部分。我认为如果保存一个带有光图案的“圆球”,将节省大量的处理能力。当你在一个轴上旋转投影仪时,你旋转投影仪,使之与软件中的球体相匹配。这样就有了一种独特的模式,可以随时识别模型的方向。

    0
    adamseeley.

    1年前

    万一有人在听。。。。。。

    是否有一些代码或示例,用于获取扫描的图像/几何图形,然后将其与投影仪POV重新对齐?i、 e.使相机拍摄的参考图像现在与投影仪pov的原始投影线对齐。

    这是Madmapper从投影仪POV创建精确的可视模板,以创建投影映射。
    https://1024d.wordpress.com/tag/structured-light/
    https://1024d.wordpress.com/2011/08/09/madmapper ...


    如果有一个与投影仪视角相匹配的三维模型/深度图也会非常有用。。这就是光形态所做的。
    https://lightform.com/how-it-works









    0
    urjnlegend.

    4年前

    我在哪里可以找到软件?hdmi pico投影仪能用吗?

    0
    布拉登普

    两年前回复

    他说,搜索使用谷歌结构灯项目,也有一个突出显示的点击链接。我马上找到了下载页面。可悲的是,虽然他的观点是你不能做任何运动扫描,所以虽然你可以拍3张照片,但这仅仅是浪费你的时间和展示技术能力的一种方式。你需要一个硬件接口来实现全旋转扫描。

    你有没有想过用红外光源使用多个覆盆子PI Noir相机来做这件事?由于覆盆子PI相机位于IR频谱中,您可以使用其他相机捕获场景和PI IR摄像机以捕获点云。同样有一个非常有趣的“伎俩”帕米拉可以做这是非常低的数据 - 矢量运动 -https://www.raspberrypi.org/blog/vectors-from-coarse-motion-estimation/-GIF已经不在了,但奇怪的是它是一个人在玩杂耍。我说奇怪是因为我是一个流动的圆形艺术家又名接触杂耍

    0
    巨人

    三年前

    你好。。我还想知道在哪里可以买到de软件??我有一个佳能t2i数码单反相机,和一个通用的led投影仪,Windows7,4gb内存,NVIDIAGeForceGT610。你觉得这样行吗?谢谢。。。

    0
    火箭兵

    5年前在介绍

    好吧,我把照片分成三个阶段,它什么也没做。它所做的就是打开一个白色的屏幕。解决办法是什么?

    以下是我的三张测试图片:

    0
    seif935型

    5年前在介绍

    是的。偶尔在互联网上搜索我发现这款结构化光扫描仪软件,尤其是我记得的,尤其是我记得的50欧元,但它适用于我,特别是它不强迫用户使用DSLR相机(如FlexScan3D软件))或非常精确的视频投影仪(如David3D扫描仪软强制您使用)

    我猜它现在最便宜的3D扫描仪柔软

    http://rghost.net/private/7tgtnvflw/3e2648710775d9 ...

    我开始用SHOWWX做结构光扫描仪
    好。我正打算用一个新的投影仪来代替投影仪里的红色激光
    红外一体,在相机上有相应的滤波器。这样,
    扫描是人眼看不见的。

    它还保留了蓝色和绿色激光器,以便
    实时投影到扫描表面上(好吧,有一些
    百毫秒延迟)。例如,你可以放置一个白色球体
    在扫描仪前面,找到它的形状和位置,然后投影
    地球在上面。当你移动物体时,它会继续被跟踪,
    让你的投影保持不变。

    嗨,这个3D扫描的新扫描。我想测试'三相'软件。

    pattern文件夹中的图像是1024*768。这不是我的beamer的本机分辨率。我是否可以/应该在我的beamer的本机资源中创建新模式以获得更好的结果?

    线条图案不是'sharp'。为什么是这样?

    更新处理2.x:

    https://github.com/kippkitts/3PhaseScanning/tree/master/ThreePhase

    0
    Chrish1.

    6年前介绍

    我也收到错误“找不到类或类型名为priategyqueue”

    有什么想法吗?

    0
    JKPina公司

    6年前回复介绍

    同样的问题(也是三个相位的Linkedlist-1):我把:

    导入java.util.*;

    但出现了一个新错误:java.lang.NullPointerException:/