基于条纹投影的物体三维形貌测量理论与仿真实验-含Matlab代码

本文主要是介绍基于条纹投影的物体三维形貌测量理论与仿真实验-含Matlab代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

▒▒本文目录▒▒

  • ✳️ 一、引言
  • ✳️ 二、条纹投影原理
    • ✳️ 2.1 ==相移轮廓术==
    • ✳️ 2.2 ==傅里叶变换轮廓术==
  • ✳️ 三、仿真分析
    • ✳️ 3.1 傅里叶变换轮廓术仿真实验
      • ✳️ 3.1.1 ==Matlab代码获取==
    • ✳️ 3.2 相移轮廓术仿真实验
      • ✳️ 3.2.1 ==Matlab代码获取==
  • ✳️ 参考文献

✳️ 一、引言

基于光栅投影的光学三维面形测量具有非接触、精度高、速度快、低成本、全场测量和易于实现等特点,在逆向工程、工业检测、质量控制、虚拟现实、医学诊断、文物修复和物体识别等领域应用广泛。相移轮廓术(PSM)和傅里叶变换轮廓术(FTP)是两种传统方法。相移法计算简单,测量精度高,但对噪声比较敏感,噪声会引起解相位结果存在大量虚假2π跳变,增加了相位展开的难度,且至少需要三幅以上的条纹图像,适用于静态测量;傅里叶变换法是M.Takeda 等人在1983年提出来的,它只需要一幅条纹图案,即可恢复物体三维形貌,可用于动态物体的三维形貌测量;但由于傅里叶变换不具有局部分析的能力,频谱混叠等问题,影响了其测量精度。小波变换具有多分辨率分析特点,抑噪能力强,可分为一维小波变换轮廓术(1D WTP)和二维小波变换轮廓术(2D WTP)。小波脊提取是小波变换轮廓术的关键步骤,最大模法是常见的小波脊提取方法。

✳️ 二、条纹投影原理

✳️ 2.1 相移轮廓术

相移法的投影条纹一般为余弦条纹(或正弦),得到条纹的灰度值用下式(1)表示:
g ( x , y ) = a ( x , y ) + b ( x , y ) cos ⁡ [ 2 π f 0 x + ϕ ( x , y ) ] (1) \text{g}\left( x,y \right)=a\left( x,y \right)+b\left( x,y \right)\cos \left[ 2\pi {{f}_{0}}x+\phi \left( x,y \right) \right] \tag{1} g(x,y)=a(x,y)+b(x,y)cos[2πf0x+ϕ(x,y)](1)

式中, a ( x , y ) a\left( x,y \right) a(x,y)为背景光强值, b ( x , y ) b\left( x,y \right) b(x,y)为调制强度, f 0 {{f}_{0}} f0为载波频率, ϕ ( x , y ) \phi \left( x,y \right) ϕ(x,y)为被测物体高度调制相位。

沿着垂直于光栅条纹方向在一个周期内移动n次,n∈(3,5)。当n=3时称为三步相移法,当n=4时称为四步相移法,当n=5时称为五步相移法。以四步相移法为例,四幅带有π/2相移的灰度值函数分别用下式表示:

g 1 ( x , y ) = a ( x , y ) + b ( x , y ) cos ⁡ [ 2 π f 0 x + ϕ ( x , y ) ] g 2 ( x , y ) = a ( x , y ) + b ( x , y ) cos ⁡ [ 2 π f 0 x + ϕ ( x , y ) + π / 2 ] g 3 ( x , y ) = a ( x , y ) + b ( x , y ) cos ⁡ [ 2 π f 0 x + ϕ ( x , y ) + π ] g 4 ( x , y ) = a ( x , y ) + b ( x , y ) cos ⁡ [ 2 π f 0 x + ϕ ( x , y ) + 3 π / 2 ] (2) \begin{align} & {{g}_{1}}\left( x,y \right)=a\left( x,y \right)+b\left( x,y \right)\cos \left[ 2\pi {{f}_{0}}x+\phi \left( x,y \right) \right] \\ & {{g}_{2}}\left( x,y \right)=a\left( x,y \right)+b\left( x,y \right)\cos \left[ 2\pi {{f}_{0}}x+\phi \left( x,y \right)+{\pi }/{2}\; \right] \\ & {{g}_{3}}\left( x,y \right)=a\left( x,y \right)+b\left( x,y \right)\cos \left[ 2\pi {{f}_{0}}x+\phi \left( x,y \right)+\pi \right] \\ & {{g}_{4}}\left( x,y \right)=a\left( x,y \right)+b\left( x,y \right)\cos \left[ 2\pi {{f}_{0}}x+\phi \left( x,y \right)+3{\pi }/{2}\; \right] \\ \end{align} \tag{2} g1(x,y)=a(x,y)+b(x,y)cos[2πf0x+ϕ(x,y)]g2(x,y)=a(x,y)+b(x,y)cos[2πf0x+ϕ(x,y)+π/2]g3(x,y)=a(x,y)+b(x,y)cos[2πf0x+ϕ(x,y)+π]g4(x,y)=a(x,y)+b(x,y)cos[2πf0x+ϕ(x,y)+3π/2](2)

得到

tan ⁡ [ 2 π f 0 x + ϕ ( x , y ) ] = g 4 ( x , y ) − g 2 ( x , y ) g 1 ( x , y ) − g 3 ( x , y ) (3) \tan \left[ 2\pi {{f}_{0}}x+\phi \left( x,y \right) \right]=\frac{{{g}_{4}}\left( x,y \right)-{{g}_{2}}\left( x,y \right)}{{{g}_{1}}\left( x,y \right)-{{g}_{3}}\left( x,y \right)} \tag{3} tan[2πf0x+ϕ(x,y)]=g1(x,y)g3(x,y)g4(x,y)g2(x,y)(3)

求取反正切函数,得到:

在这里插入图片描述

式(4)反正切运算得到的相位值 包裹在(-π,π]之间,称为相位主值(或包裹相位),需要通过相位解包裹算法展开得到实际相位。

✳️ 2.2 傅里叶变换轮廓术

傅里叶变换解相位的基本原理是在频域中把代表背景光的零频分量和代表噪声的高频分量通过合适的滤波器滤除掉,剩下的是包含有用相位信息的基频分量,再对基频分量进行逆傅里叶变换,通过正切运算即可解出被测物体高度调制相位主值。

根据欧拉公式,式(1)可以(5)表示为:

g ( x , y ) = a ( x , y ) + c ( x , y ) + c ∗ ( x , y ) (5) \text{g}\left( x,y \right)=a\left( x,y \right)+c\left( x,y \right)+{{c}^{*}}\left( x,y \right) \tag{5} g(x,y)=a(x,y)+c(x,y)+c(x,y)(5)

式中:

c ( x , y ) = 1 2 b ( x , y ) exp ⁡ ( i ( 2 π f 0 x + ϕ ( x , y ) ) ) c ∗ ( x , y ) = 1 2 b ( x , y ) exp ⁡ ( − i ( 2 π f 0 x + ϕ ( x , y ) ) ) (6) \begin{align} & c\left( x,y \right)=\frac{1}{2}b\left( x,y \right)\exp \left( i\left( 2\pi {{f}_{0}}x+\phi \left( x,y \right) \right) \right) \\ & {{c}^{*}}\left( x,y \right)=\frac{1}{2}b\left( x,y \right)\exp \left( -i\left( 2\pi {{f}_{0}}x+\phi \left( x,y \right) \right) \right) \\ \end{align} \tag{6} c(x,y)=21b(x,y)exp(i(2πf0x+ϕ(x,y)))c(x,y)=21b(x,y)exp(i(2πf0x+ϕ(x,y)))(6)

沿 x 方向对式(5)采用一维傅里叶变换,得到:

G ( f ) = A ( f ) + C ( f − f 0 ) + C ∗ ( f + f 0 ) (7) \text{G}\left( f \right)=\text{A}\left( f \right)+\text{C}\left( f-{{f}_{0}} \right)+{{C}^{*}}\left( f+{{f}_{0}} \right) \tag{7} G(f)=A(f)+C(ff0)+C(f+f0)(7)

上式(7)由-1级 C ∗ ( f + f 0 ) {{C}^{*}}\left( f+{{f}_{0}} \right) C(f+f0)、0级 A ( f ) \text{A}\left( f \right) A(f)、1级 C ( f − f 0 ) \text{C}\left( f-{{f}_{0}} \right) C(ff0)三种频谱信号组成,如图0所示

在这里插入图片描述

图0 一维傅里叶变换的基频分量提取[1]

其中 A ( f ) \text{A}\left( f \right) A(f)其代表零频背景信号,而 C ( f − f 0 ) \text{C}\left( f-{{f}_{0}} \right) C(ff0) C ∗ ( f + f 0 ) {{C}^{*}}\left( f+{{f}_{0}} \right) C(f+f0)包含了所需的相位信号。这里选取 C ( f − f 0 ) \text{C}\left( f-{{f}_{0}} \right) C(ff0),逆傅里叶变换得到:

c ( x , y ) = 1 2 b ( x , y ) [ cos ⁡ ( 2 π f 0 x + ϕ ( x , y ) ) + i sin ⁡ ( 2 π f 0 x + ϕ ( x , y ) ) ] (8) c\left( x,y \right)=\frac{1}{2}b\left( x,y \right)\left[ \cos \left( 2\pi {{f}_{0}}x+\phi \left( x,y \right) \right)+i\sin \left( 2\pi {{f}_{0}}x+\phi \left( x,y \right) \right) \right] \tag{8} c(x,y)=21b(x,y)[cos(2πf0x+ϕ(x,y))+isin(2πf0x+ϕ(x,y))](8)

其实部和虚部分别为:

Re ⁡ { c ( x , y ) } = 1 2 b ( x , y ) cos ⁡ ( 2 π f 0 x + ϕ ( x , y ) ) Im ⁡ { c ( x , y ) } = 1 2 b ( x , y ) sin ⁡ ( 2 π f 0 x + ϕ ( x , y ) ) (9) \begin{align} & \operatorname{Re}\left\{ c\left( x,y \right) \right\}=\frac{1}{2}b\left( x,y \right)\cos \left( 2\pi {{f}_{0}}x+\phi \left( x,y \right) \right) \\ & \operatorname{Im}\left\{ c\left( x,y \right) \right\}=\frac{1}{2}b\left( x,y \right)\sin \left( 2\pi {{f}_{0}}x+\phi \left( x,y \right) \right) \\ \end{align} \tag{9} Re{c(x,y)}=21b(x,y)cos(2πf0x+ϕ(x,y))Im{c(x,y)}=21b(x,y)sin(2πf0x+ϕ(x,y))(9)

被测物体高度调制相位主值可以写成:

ψ ( x , y ) = Im ⁡ { c ( x , y ) } Re ⁡ { c ( x , y ) } = arctan ⁡ [ 2 π f 0 x + ϕ ( x , y ) ] (10) \begin{align} & \psi \left( x,y \right)=\frac{\operatorname{Im}\left\{ c\left( x,y \right) \right\}}{\operatorname{Re}\left\{ c\left( x,y \right) \right\}} \\ & =\arctan \left[ 2\pi {{f}_{0}}x+\phi \left( x,y \right) \right] \end{align} \tag{10} ψ(x,y)=Re{c(x,y)}Im{c(x,y)}=arctan[2πf0x+ϕ(x,y)](10)

同相移法类似,傅里叶变换法得到的相位主值也是截断的,即包裹在(-π,π]之间,需要相位解包裹才可得到实际相位。

✳️ 三、仿真分析

✳️ 3.1 傅里叶变换轮廓术仿真实验

原始待测物体及其三维形貌如图2(a)与(b)所示,模拟得到的参考条纹与变形条纹如图1(a)与©所示。分别对参考条纹与变形条纹图进行傅里叶变换,其各自频谱如图1(b)与图1(d)所示。提取+1级频谱进行居中处理后,进行逆傅里叶变换变换即可得到包裹相位信息,对其进行解包裹后进行解包裹,即可恢复出待测物体的相位信息。重构结果如图2©与(d)所示。
在这里插入图片描述

图1 模拟得到的参考条纹与变形条纹

在这里插入图片描述

图2 原始待测物体与傅里叶变换轮廓术重构物体三维形貌

✳️ 3.1.1 Matlab代码获取

傅里叶变换轮廓术仿真实验Matlab代码下载链接如下:

傅里叶变换轮廓术仿真实验

✳️ 3.2 相移轮廓术仿真实验

待测物体任然如图2(a)与(b)所示。以四步相移为例,分别获取四副参考条纹图与变形条纹图,如图3(a)-(h)所示。根据四步相移算法,可分别解调得到参考包裹相位以及目标包裹相位,如图3(i)与(j)所示。通过解包裹算法即可重构出待测物体的相位信息,其结果分别如图3(k)与(l)所示。

在这里插入图片描述

图3 相移轮廓术仿真实验结果

✳️ 3.2.1 Matlab代码获取

相移轮廓术仿真实验Matlab代码下载链接如下:

相移轮廓术仿真实验-Matlab代码

✳️ 参考文献

[1] 徐昆鹏, 王建华. 光栅投影三维测量解相位方法的对比研究[J]. 电子制作, 2022, 30(15): 64-69.


⭐️◎⭐️◎⭐️◎⭐️ · · · **博 主 简 介** · · · ⭐️◎⭐️◎⭐️◎⭐️

▁▂▃▅▆▇ 博士研究生生 ,研究方向主要涉及定量相位成像领域,具体包括干涉相位成像技术(如**全息干涉☑**、散斑干涉☑等)、非干涉法相位成像技术(如波前传感技术☑相位恢复技术☑)、此外,还对各种相位解包裹算法☑相干噪声去除算法☑等开展过深入的研究。


这篇关于基于条纹投影的物体三维形貌测量理论与仿真实验-含Matlab代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/194553

相关文章

Python实现文件下载、Cookie以及重定向的方法代码

《Python实现文件下载、Cookie以及重定向的方法代码》本文主要介绍了如何使用Python的requests模块进行网络请求操作,涵盖了从文件下载、Cookie处理到重定向与历史请求等多个方面,... 目录前言一、下载网络文件(一)基本步骤(二)分段下载大文件(三)常见问题二、requests模块处理

vscode保存代码时自动eslint格式化图文教程

《vscode保存代码时自动eslint格式化图文教程》:本文主要介绍vscode保存代码时自动eslint格式化的相关资料,包括打开设置文件并复制特定内容,文中通过代码介绍的非常详细,需要的朋友... 目录1、点击设置2、选择远程--->点击右上角打开设置3、会弹出settings.json文件,将以下内

SQL Server使用SELECT INTO实现表备份的代码示例

《SQLServer使用SELECTINTO实现表备份的代码示例》在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误,在SQLServer中,可以使用SELECTINT... 在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误。在 SQL Server 中,可以使用 SE

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

python多进程实现数据共享的示例代码

《python多进程实现数据共享的示例代码》本文介绍了Python中多进程实现数据共享的方法,包括使用multiprocessing模块和manager模块这两种方法,具有一定的参考价值,感兴趣的可以... 目录背景进程、进程创建进程间通信 进程间共享数据共享list实践背景 安卓ui自动化框架,使用的是

SpringBoot生成和操作PDF的代码详解

《SpringBoot生成和操作PDF的代码详解》本文主要介绍了在SpringBoot项目下,通过代码和操作步骤,详细的介绍了如何操作PDF,希望可以帮助到准备通过JAVA操作PDF的你,项目框架用的... 目录本文简介PDF文件简介代码实现PDF操作基于PDF模板生成,并下载完全基于代码生成,并保存合并P

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.