弱结构光三维扫描重建

1. 摘要

在视觉三维重建中,要获取稠密的三维点云,通常采用面结构光来实现。但是作为普通的开发者,昂贵的工业相机、投影仪、工装等设备令人望而却步。如何利用手上常见的设备,实现稠密点云重建呢?

早在 1998 年,Jean-Yves Bouguety 与 Pietro Perona 就思考过类似这样的问题,他们发表了一篇名为 《3D photography on your desk》的论文,在论文中作者凭借极其简单的硬件(相机、点光源、铅笔/细棒、标定板,桌子)实现了稠密的3D重建,其重建误差可控制在0.1%以内。该方法甚至可以推广,利用太阳光实现汽车外形的三维重建,误差可在0.5%以内。

image-20250926175714795 image-20250926175728152
a) 天使雕塑重建 b) 汽车外形重建

2. 原理

image-20250926180554248
系统构成

作者设计的重建系统非常精妙,如上图所示:相机、点光源、细棒这三者构成测量装置,将被测物放置在桌面上,然后手持细棒并缓慢移动,令细棒投影缓慢扫过被测物。基于这些图像序列即可完成三维重建。

整个系统一共有三个物体需要提前固定,并完成相应的标定。即相机、桌面、点光源。其中相机内参和桌面平面方程可以在标定相机时一起得到(标定板放置在桌面上,通过标定时的位置外参可以得到)。而点光源则通过一个高度已知的铅笔,放置在桌面上,摆放多个位置后,由最小二乘计算得到。

因此,完整的实验步骤包括:

  • 相机标定
  • 光源标定
  • 重建图像序列采集

2.1 相机标定

相机标定需要棋盘格标定板一个,相机固定后,在被测物物体所在区域将标定板摆放多个位姿,最后一个位姿中,标定板平放在桌面上。

标定算法可使用张氏标定(OpenCV自带),标定完成后,可以得到最后一个位姿下的标定板平面相对于相机光心的外参(RT),从而求得标定板平面的参数(如点法式,平面上一点,平面的法向量)。如果标定板很厚。假设厚度为 \(d\),可以将平面点沿着法向量平移 \(d\),从而得到桌面的平面参数 \(\Pi_d\)

2.2 光源标定

image-20250926183629904
光源标定原理

如上图所示,将一个长度为 \(h\) 的铅笔垂直立在桌面 \(\Pi_d\) 上,铅笔笔尖为 \(T\) ,笔尾为 \(K\) ,光源 \(S\) 投射的光线经笔尖 \(T\) 与桌面 \(\Pi_d\) 相交于 \(T_s\) 点,相机采集到的铅笔图像中,笔尖像素点为 \(\bar{t}_s\) ,笔尾像素点为 \(\bar{b}\) 。根据成像原理,相机光心 \(O_c\) 与 笔尖像素点 \(\bar{t}_s\) 的连线与桌面 \(\Pi_d\) 相交于笔尖投影点 \(T_s\);同理相机光心 \(O_c\) 与 笔尾像素点 \(\bar{b}\) 的连线与桌面 \(\Pi_d\) 相交于笔尾投影点 \(K\)

而桌面 \(\Pi_d\) 在相机标定完成后已知,因此我们可以很容易求得笔尖投影点 \(T_s\) 和笔尾投影点 \(K\) ,另外铅笔高度 \(h\) 已知,因此结合桌面 \(\Pi_d\) 的法向量可以得到笔尖 \(T\) 的坐标。直线 \(TT_s\) 过光源 \(S\)

当移动铅笔时,上述关系始终成立,因此可以得到若干条经过光源 \(S\) 的直线,通过联立求最小二乘,即可计算出光源 \(S\) 的坐标(相机坐标系下)。

image-20250926183519725
光源标定示意图

2.3 重建序列采集

image-20250926185217096
三维重建原理

如上图所示,手持一根细棒在被测物体上面移动,在某一时刻 \(t\) ,细棒经光源 \(S\) 照射产生一个投影平面 \(\Pi(t)\) ,投影平面在物体上被待测物体和桌面调制,设桌面细棒上部投影一点为 \(A(t)\) ,下部投影一点为 \(B(t)\) ,物体上细棒投影区域上某点为 \(P\)。则根据投影原理,以上三点均在投影平面 \(\Pi(t)\) 上 。而根据成像原理,上述三点与相机光心 \(O_c\) 的连线分别交相平面于 \(\bar{x}_{top}(t)\)\(\bar{x}_{bot}(t)\)\(\bar{x}_c\)

因此当拍摄到某一时刻下的图像后,假设物体居中,两侧仍留有桌面细棒投影。分别取上部和下部细棒投影像素 \(\bar{x}_{top}(t)\)\(\bar{x}_{bot}(t)\),则光心 \(O_c\)\(\bar{x}_{top}(t)\) 连线与桌面 \(\Pi_d\) 相交于 \(A(t)\) ,同理光心 \(O_c\)\(\bar{x}_{bot}(t)\) 连线与桌面 \(\Pi_d\) 相交于 \(B(t)\) , 桌面 \(\Pi_d\) 已知,故可解算出 \(A(t)\)\(B(t)\) 。而光源 \(S\) 已知,因此细棒投影面 \(\Pi(t)\) 可根据这三点表示出来。而物体表面某一代求的三维点 \(P\) 可通过其像素点 \(\bar{x}_c\)\(O_c\) 的连线与细棒投影面 \(\Pi(t)\) 相交求得。

image-20250926194515776
重建原理示意图

在细棒投影面上,物体表面所有与投影面相交的点都可通过上述方法计算得到,而细棒投影在某时刻下的投影沿投影面是连续的。而当细棒缓慢移动,扫过待测物体表面时,若图像采集速度大于移动速度时,则可得到连续的投影,如此一来,整个待测物体表面均可得到重建的点,最终可得到稠密点云。

2.4 投影计算处理

所采集到的连续多张投影序列图像实际上构成了空间和时间。细棒从一端缓慢移动到另一端,而细棒是有宽度的,所以得到的投影并非一条线,而是有宽度的投影区域。所以假设细棒阴影在图像中从左侧移动到右侧,则我们在处理参与重建计算的投影点时,只处理阴影的右边缘点(即前进方向所指的边缘点)。

这里主要需处理每个时刻 \(t\) 下的细棒边缘点 \(\bar{x}_{top}(t)\)\(\bar{x}_{bot}(t)\) 的定位以及该时刻下,细棒边缘所经过的每个可重建像素点 \(t_s(\bar{x}_c)\)

2.4.1 差分图像提取

所采集到的图像其中既包含物体自身所形成的阴影还包含细棒阴影,并且阴影的边界通常不是陡变的,因此不方便提取精确的边缘点。这里利用图像序列做如下处理:

整个序列中,每个像素的最大亮度和最小亮度值(灰度值)可表示为:

\[I_{max}(x,y) = \max(I(x,y,t)) \\ I_{min }(x,y) = \min(I(x,y,t)) \]

则每个像素的阈值为:

\[I_{shadow}(x,y) = \frac{I_{max}(x,y) + I_{min}(x,y)}{2} \]

细棒阴影边缘位置可以定义为图像 \(I(x,y,t)\) 与阈值图像 \(I_{shadow}(x,y)\) 在时空域中相交的位置,可看作是差分图像:

\[\Delta I(x,y,t) = I(x,y,t) - I_{shadow}(x,y) \]

的过零点位置。

2.4.2 细棒边缘点与重建像素点定位

对于每一帧图像,在拍摄时都应该使得细棒阴影超出被测物体的上下区域,得到直接投影在桌面上的直线阴影,这样方便定位出细棒右侧投影平面上的点 \(\bar{x}_{top}(t)\)\(\bar{x}_{bot}(t)\)

image-20250927000216441
细棒边缘点与重建像素点提取

如上图所示, \(t_0\) 时刻下,计算得到差分图像 \(\Delta I(x,y,t_0)\) ,那么顶部 \(y_{top} = 10\) (可根据实际情况取固定值)处整行差分灰度值的分布情况如左下图曲线所示,那么 \(x_{top}(t_0)\) 即为该曲线的二次过零点。同理可得 \(x_{bot}(t_0)\) 。而对于待重建像素点 \(\bar{x}_c\) ,将所有差分图像,在 \((x_c,y_c)\) 所在区域的差分灰度值绘制为曲线,那么曲线的一次过零点即为 \(\bar{x}_c\)

2.4.3 非重建像素点滤除

在某帧图像中,只有细棒投影边缘上的点才参与重建,因此为了滤除其他不参与重建的点(如物体自身投影),可计算每个像素的对比度:

\[I_{contranst}(x,y) = I_{max}(x,y) - I_{min}(x,y) \]

只有对比度大于阈值 \(I_{thresh}\) 时,才处理,否则跳过。

2.4.4 实时处理加速算法

尽管计算\(I_{shadow}\)需要用到\(I_{min}\)\(I_{max}\),但该算法存在一种无需在内存中存储完整图像序列的实现方式,这使得实时处理成为可能。具体实现方式如下:在采集图像\(I(x,y,t)\)的过程中,逐帧更新五个数组,分别是\(I_{max}(x,y)\)\(I_{min}(x,y)\)\(I_{contrast}(x,y)\)\(I_{shadow}(x,y)\)以及阴影时间\(t_s(x,y)\)。对于某个特定像素\((x,y)\),在图像序列开始时(第一帧)记录其最大亮度值\(I_{max}(x,y)\);随后,随着时间推移,利用后续输入的图像更新该像素的最小亮度值\(I_{min}(x,y)\)和对比度\(I_{contrast}(x,y)\)。当对比度\(I_{contrast}(x,y)\)超过阈值\(I_{thresh}\)时,开始计算并逐帧更新自适应阈值\(I_{shadow}(x,y)\)(此时阈值被激活)。这一过程会持续进行,直到该像素的亮度值$$I(x,y,t)$$首次(沿上升方向)超过阈值\(I_{shadow}(x,y)\),此时记录的时间即为该像素的阴影时间\(t_s(x,y)\)。在这种实现方式中,跟踪的是阴影的左边缘而非右边缘,但方法原理保持不变。

2.4.5 非理想点光源可能存在的问题

实验发现,这种基于阈值的阴影边缘检测方法能够在一定程度上应对场景中的内部反射问题。然而,若光源并非理想的点光源,那么取最大亮度与最小亮度的平均值作为阈值图像 \(I_{shadow}\) 的阈值,可能并非始终是最优选择。实际上,随着细杆与物体表面距离的增加,阴影边缘的轮廓会逐渐变得平缓;同时,随着物体表面法向量的变化,阴影边缘轮廓还会发生不对称变形。这些因素都会给阴影边界点的检测带来困难。未来,研究团队计划建立扩展光源的几何模型,并将其融入到该系统中。

3. 实现

scan bowl
a) 重建序列图像 b) 重建结果

项目地址:GShang2018/3D-photography-on-your-desk

4. 参考资料

  • sci.utah.edu/~gerig/CS6320-S2015/Materials/CS6320-CV-S2015-StructuredLight.pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/918947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

9.27 git与pycharm

今日学习内容:pycharm与git管理 在pycharm中可以用git对代码进行基础的管理今日bug 连不上github,可能是代理的原因 fatal: unable to access https://github.com/Shoiger/Alice.git/: Unsupported proxy syntax in …

淘宝客的优惠卷网站怎么做的电脑浏览器打不开是怎么回事

这篇教程主要内容展示如何利用Core Graphics Framework画圆圈,当用户点击屏幕时随机生成不同大小的圆,这篇教程在Xcode6和iOS8下编译通过。 打开Xcode,新建项目选择Single View Application,Product Name填写iOS8SwiftDrawingCirclesTutorial,Organization Name和Organization …

用前端框架做自适应网站杭州住房和城乡建设部网站

NIC注册和注销的通用架构Linux系统中NIC网络设备驱动程序利用网络代码进行注册和注销有其通用的架构,这里以PCI Ethernet NIC为例,其他设备类型只是所以函数名称和调用方式不同,主要依据于设备总线提供的接口。其中(a)为设备注册的大致流程图…

TDS文件搜索_Winform版本与avalonia开发差异比较:(一)系统消息的接收与无标题栏/边框窗体的移动与尺寸调整

TDS文件搜索_Winform版本与avalonia开发差异比较:(一)系统消息的接收与无标题栏/边框窗体的移动与尺寸调整一、Winform和Avalonia的选择 收到私信,有看过上一篇的朋友说想了解Winform相关内容,感谢建议,因为因此…

台州网站制作维护规范门户网站的建设和管理办法

说明: 1)访问应用业务,读取不到数据,show databases;查看数据库报错 2)重启docker服务,服务启动失败,查看日志报错如下图所示 3)报错信息:chmod /data/docker: read-only…

宜昌做网站优化万网ip查询

一、 在终端输入 sudo apt-get install openssh-server 二、 执行如下命令 sudo apt-get install ssh 三、 开启 ssh-server,输入密码 service ssh start 四、 验证,输入 ps -e|grep ssh,看到sshd成功 ps -e|grep ssh五、 连接

手机版网站开发网站运行时错误如何做

1、代码如下: close all;clear all;clc; %关闭所有图形窗口,清除工作空间所有变量,清空命令行 Iimread(pout.tif); Jimadjust(I,[0.2 0.5],[0 1]);%将0.2-0.5之间的灰度扩展到整个0-1范围,这种处理 对于强调感兴趣灰度区非常有用…

wordpress 站标不显示wordpress 手机登陆

返回目录:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV 环境变量参考 下一篇:将OpenCV与gcc和CMake结合使用 引言: OpenCV是一个开源的计算机视觉库,由英特尔公司所赞助。它是一个跨…

学做彩票网站win7 iis 默认网站

​​​​​​ 与存储标量数据(如整数、字符串等)的传统数据库不同,矢量数据库旨在有效地存储和检索矢量数据——表示多维空间中的点的数值集合。 本文将探讨如何在 Rust 中实现基本的向量数据库。 让我们开始吧!🦀 什么是矢量数据库? 矢量数据库是一种针对存储和查询…

单人网站制作关键词搜索站长工具

PHP 做网页后端还是很优秀的&#xff0c;PHP 表单提交&#xff0c;不外乎两种方法&#xff0c;即 GET 和 POST 方法&#xff1b;PHP后台使用全局变量$_POST;$_GET;来获取提交数据。代码&#xff1a;<!DOCTYPE HTML> <html> <head><meta charset"utf-…

梦织网站如何用wordpress快速建站

使用 fake-as 可以将本地真实的 AS 编号隐藏&#xff0c;其他 AS 内的对等体在指定本端对等体所在的AS 编号时&#xff0c;应该设置成这个伪AS 编号。 这是实验拓扑&#xff0c;IBGP EBGP 邻居都使用物理接口来建立 基本配置&#xff1a; R1: sys sysname R1 int loo0 ip add…

js源码下载从哪个网站能下载建设部门户网站条例免费下载

【stm32】I2C通信协议 概念及原理 如果我们想要读写寄存器来控制硬件电路&#xff0c;就至少需要定义两个字节数据 一个字节是我们要读写哪个寄存器&#xff0c;也就是指定寄存器的地址 另一个字节就是这个地址下存储寄存器的内容 写入内容就是控制电路&#xff0c;读出内容就…

网站更新前知道内容岳阳网站平台设计

文章目录 前言SMTPPOP3IMAP4区别与联系 前言 常见的邮件协议包括SMTP、POP3和IMAP4。这些协议都隶属于TCP/IP协议簇&#xff0c;属于应用层&#xff0c;分别通过TCP端口25、110和143建立连接。电子邮件的发送和接收过程依赖于这些协议。 SMTP &#xff08;Simple Mail Trans…

东莞seo网站优化方式深圳网站快速备案

关于类似的帖子好像很多&#xff0c;但是没有找到具体能帮我解决问题的办法。还是自己深究了好久才基本知道app上面的xpath定位和web上的不同点&#xff1a; 先放一个图&#xff1a; A&#xff0c;先说说不用xpath的场景&#xff0c;一般是用于存在id或者name。可能没有看到na…

网站开发是先做前段还是后台简单电子商务网站建设

大家好&#xff0c;我是专注家居和装修知识分享的家居杂坛。喜欢的就点击一下关注吧&#xff01;对于在地面上所浇筑的混凝土&#xff0c;常规有两种做法。例如&#xff0c;在混凝土中铺设钢筋&#xff0c;打成钢筋混凝土的地面&#xff0c;又或者还有一些朋友在钢混凝土中放入…

php网站开发作业网站中高端建设

1、hibernate 要求实体类里面有一个属性作为唯一值&#xff0c;对应的表字段是主键&#xff0c;主键可以不同的生成策略 2、hibernate 主键生成策略有很多的值 <generator class"native"></generator> 3、在class属性里面有很多值 &#xff08;1&#xf…

docker复制文件到宿主机

要将 Nacos 容器内的文件复制到宿主机,可以使用 docker cp 命令,该命令支持在容器和宿主机之间复制文件或目录。以下是具体操作步骤: 一、基本语法 # 将容器内的文件/目录复制到宿主机 docker cp <容器名或容器I…

【SimpleFOC】SimpleFOC的运动规划器(Motion Planner)和梯形速度规划

SimpleFOC 在位置(角度)模式时,达到目标位置过程中,是默认开启平滑转动的效果的。 SimpleFOC 的平滑转动是通过运动规划器(Motion Planner)实现的,而不是瞬间跳到目标位置。 运动规划器的工作原理 1. 默认的梯形速…

南昌企业做网站产品单页营销型网站模板

指系统能按某种顺序如&#xff08;P1&#xff0c;P2&#xff0c;...&#xff0c;Pn&#xff09;&#xff0c;来为每个进程分配所需要的资源&#xff0c;直至最大需求&#xff0c;使每个进程都可以顺序完成。若系统不存在这样一个安全序列&#xff0c;则称系统处于不安全状态。

深圳入户申请网站官网永春网站设计

如果你准备发NLP方向的论文&#xff0c;或准备从事科研工作或已在企业中担任NLP算法岗的工作。那么我真诚的向大家推荐&#xff0c;贪心学院《自然语言处理高阶研修班》&#xff0c;目前全网上应该找不到类似体系化的课程。课程精选了四大主题进行深入的剖析讲解&#xff0c;四…