快速二维相位解包算法基于按照非连续路径进行可靠性排序

Miguel Arevallilo Herra´ ez, David R. Burton, Michael J. Lalor, and Munther A. Gdeisat

摘要:

据我们所知,我们描述了一种新的相位展开技术。已经提出了几种基于首先展开最可靠像素的算法。这些仅限于连续路径,并且在定义起始像素时会遇到困难。这里描述的技术使用不同类型的可靠性函数,并且不遵循连续路径来执行展开操作。对该技术进行了详细的解释,并举例说明。

 1.引言

在条纹图案分析中,通常情况下,通过涉及反正切函数的表达式来获得相位。这个数学函数返回在极限之间已知的值+\pi 和 -\pi 。因此,给出的结果是模2\pi以及值接近2\pi出现在相位分布中。展开是解决这些不连续性的过程,将结果转换为所需的连续相位函数。

  展开问题是十多年来的一个主要研究主题。2确实存在任何不同的算法,但决不能保证得到正确的解决方案,而且执行时间往往很长。乍一看,相位展开似乎是一个相对简单的问题,但在处理真实图像时,必须设计程序来处理许多不同的问题。相位包络中的不连续性、局部区域的欠采样、信噪比的高局部变化以及掩蔽区域是展开器必须克服的一些问题.

过去已经提出了许多相位展开算法来提高展开算法的抗噪声性。这些算法可以分为以下几类:1.全局算法2.区域算法,以及3.路径跟随算法。

全局算法通过最小化一个全局函数来构建解包裹问题。这类算法虽然已知是鲁棒的,但计算上很密集。

区域算法将图像分割成若干区域,每个区域分别处理,然后将处理过的区域与相邻的区域结合起来形成更大的区域,直至整个图像被处理完成。区域算法可以进一步分为两个子类:基于瓦片的算法和基于区域的算法。这些算法在鲁棒性和计算量之间提供了一种折衷。

路径跟踪算法类可以细分为三组:路径依赖方法、残差补偿方法和质量引导路径方法。

在路径依赖方法中,最简单的是由 Schaefer 和 Oppenheim 提出的解包裹器。这组包括螺旋和多扫描方向方法。这些方法侦测图像中的不连续或突变位置,并使用这些信息来计算连续的相位偏移。这些算法通常用于平面偏移,由于固定的数据评估顺序,它们不能处理有噪声的图像。

残差补偿算法在图像中搜索残差,并在正残差和负残差之间生成切割。这些算法一般在计算上高效但不够鲁棒。


质量引导路径算法依赖于按质量排序的像素来解包裹,首先解包裹最高可靠性的像素,最后处理最低可靠性的像素,以防止错误传播。解包裹路径是基于像素的可靠性确定的。尽管有时候一些解包裹错误可能无法检测并且继续传播,这种方法通常在实践中是鲁棒的,并且计算上也相对高效。所提出的算法属于这一类别。

所提出的解包裹算法遵循离散路径,将在第二节中解释,而参考文献中的12到19的解包裹算法通常遵循连续路径。这些质量引导的解包裹算法和传统的方法相比,因为它们依赖于与积分器像素相邻的像素,所以能够更好地处理噪声图像。

2.算法

在质量引导路径展开算法中,主要有两个问题:可靠性函数的选择和展开路径的设计。从所提出的算法的角度解释了这两个问题。

A.可靠性函数

质量引导的路径展开算法使用不同的标准来确定点的可靠性。该标准通常基于像素与其相邻像素之间的梯度或差异。那些具有最低模2π梯度相对于它们的邻居的点被认为是最好的点,并且因此,是模2π梯度最高的点。

在可靠性函数中使用梯度的绝对值有多个缺点。如果存在一个高的载波值(与条纹图案的调制相比),载波成为主要的调制组件。然而,一个低的载波值会增加或减少图像像素的梯度值,并产生一个不适当的可靠性测量。

二阶差分将提供一个度量,用于相位函数凹凸度的程度。通过使用二阶差分,可以更好地检测相位图中的潜在不一致性。

二阶差分的计算将在第2节中对于图1中的像素进行解释。为了计算图像中一个像素的二阶差分,需要其正交和对角邻居的值(在一个3x3窗口中)。

像素(i,j−1),(i-1,j),(i,j+1)(i,j−1) 而像素(i−1,j−1),(j+1,i+1),(i−1,j+1)被称为对角邻居。

 

B. 解包裹路径

边缘是两个水平或垂直相连的像素的交点。任何具有左侧、右侧、上方或下方邻近像素的像素都可以构建一个边缘。图2(a)展示了一个图像的一部分,图中显示了像素的可靠性。每两个正交邻近像素都可以产生一个边缘,如图所示。

图2。所提出算法的数值例子。(下页继续。) 

图2(b)中,边缘的可靠性被定义为该边缘所连接的两个像素的可靠性之和。边缘可以被归类为图中以绿色显示的水平边缘和以红色显示的垂直边缘。

解包裹路径不能相对于像素的可靠性来定义。相反,它是通过查看边缘的可靠性值来定义的。解包裹路径的定义相对简单:首先解包裹那些可靠性更高的边缘。边缘按可靠性值存储在数组中,并根据可靠性值进行排序。具有更高可靠性的边缘首先被处理。

图2(c)到2(j)演示了所提出算法的原理。假设我们想要使用所提出的算法解包裹图2(a)中显示的像素的可靠性值。可以构建的边缘及其可靠性值在图2(b)中显示。

最初所有像素都被视为不属于任何组。在图2(c)中,像素f和g首先相对于彼此进行解包裹,因为连接它们的边缘具有最高的可靠性值。这两个像素属于同一组,这通过对它们进行相同颜色着色来示意。然后进行像素a和b的解包裹操作,这两个像素构成了第二组。接着是像素i和j的解包裹操作,它们构成了第三组。

图2(c)和2(d)显示了连接像素a和e的边缘具有第四高的值,

两个构建边缘的像素应该相互解包裹。但像素a已经相对于像素b解包裹,两者都属于同一组。为了解包裹像素e,需要添加/减去的2π倍数是从像素e计算得到的,然后加到或从像素e减去。像素a、b、e现在被视为同一组,并且在图2(d)中用相同的颜色显示。

图2(e)和2(f)说明了两组像素相对于彼此的解包裹。第一组包含像素a、b、e;第二组包含像素i和j。两组通过可靠性值高于或等于其他未处理边缘的垂直边缘连接。这两组应该相互解包裹。第二组包含的像素较少,所以在第一组和第二组之间的差异的2π倍数是计算出来的,然后加到或从第二组的所有像素中减去。包含较少像素的那一组的像素现在被认为属于同一组,并且现在被视为同一组的一部分。图2(f)中以相同的颜色显示。提出的算法按图所示继续进行。解包裹路径是离散的,因此两个构建边缘的像素之间的解包裹是局部的。这与Quiroga等人的算法相比是一个主要区别,可以在图2(d)中看到,像素l和q是相互独立解包裹的,并且与其它已解包裹的像素(a、b、e、f、g、i和j)相断开。

在解包裹过程中,有三种可能的情况:

  1. 两个像素之前都没有被解包裹过。像素相互之间解包裹,并被归为一组未解包裹的像素。
  2. 其中一个像素之前已经被处理过(因此属于一组已解包裹的像素),但另一个像素没有(不属于任何组)。之前没有被处理过的像素会相对于另一个像素进行解包裹,并加入到第二个像素的组中。
  3. 两个像素之前都已经被处理过。如果它们不属于同一组,这两组需要相互之间解包裹。这种解包裹是与彼此最大组进行的。这种操作涉及到将最小组的像素与最大组相连,然后将最小组剩余像素与最小组已经处理过的像素进行连接,形成一个新的组。

流程图描述了一个相位解包裹算法的步骤。这里是每个步骤的详细描述:

  1. 开始:启动流程。

  2. 计算可靠性值:对图像中除边界外的每个像素计算可靠性值。

  3. 构建边缘并计算可靠性值:构建图像中的垂直和水平边缘,并为每个边缘计算可靠性值。

  4. 排序边缘:按可靠性值对所有边缘(垂直和水平)进行排序,并将它们存储在名为SORTED的数组中。

  5. 设置像素组:将每个像素设置为不属于任何组。

  6. 检查构建边缘的像素:检查构成边缘的两个像素。

  7. 判断像素组归属

    • 如果两个像素都属于不同的组,则解包裹属于最小组的像素,并将两组合并。
    • 如果两个像素都不属于任何组,则将这两个像素解包裹,并将它们归为同一组。
    • 如果其中一个像素属于某个组而另一个不属于任何组,则解包裹不属于任何组的像素,并将它加入另一个像素所在的组。
  8. 检查未处理的边缘:检查SORTED数组中是否有未处理的边缘。

  9. 解包裹边界:如果没有未处理的边缘,对图像边界相对于图像其余部分进行解包裹。

  10. 停止:结束流程。

整个过程是一个迭代的解包裹算法,它根据构成边缘的像素的可靠性来决定解包裹的顺序,并根据这些边缘的可靠性值动态地将像素归类到不同的组中。这种方法旨在提高解包裹的准确性,尤其是在处理带有噪声的复杂图像时。

流程图描述了提出算法的操作过程,如图3所示。可靠性函数可能需要修改,低可靠性点可能会在最终结果中引起问题。可能更好的做法是忽略那些非常低可靠性值的交点,并在解包裹完成后对这些进行插值。

3.模拟和实验结果

A. 模拟结果

提出的算法已通过使用模拟图像进行了测试。所有显示包裹相位的图像在[−π,π]范围内被缩放到黑色和白色之间以供显示。解包裹的相位图像也被缩放到黑白之间以覆盖完整的动态范围。

图4(a)显示了一个非常高质量的包裹相位分布,其中没有噪声和物理不连续性。这幅图像已用于在理想条件下测试提出的算法。图4(b)显示了结果的解包裹相位。

图5(a)显示了一个模拟的包裹相位分布,在相位的主体中没有噪声,但中心有一个小区域包含随机噪声。这组数据的目的是测试解包裹器隔离这种噪声的能力,并防止它破坏好数据的解包裹。图5(b)显示了结果的解包裹相位图。

 

B. 实验结果

图6(a)展示了从真实条纹图案分析得到的包裹相位图。该包裹相位图包含由投影条纹的阴影造成的损坏区域。该包裹相位图已使用提出的算法进行了解包裹。图6(b)展示了解包裹后的相位图,表明该算法能够成功解包裹不可靠的区域。

图7(a)展示了一个嘈杂的包裹相位图,它被盐和胡椒噪声所损坏。该图像已使用提出的算法进行了解包裹,解包裹后的相位图显示在图7(b)中。图7(c)展示了解包裹后相位图的三维表示。包裹相位图如图7(a)所示已经被Schaefer和Oppenheim的解包裹算法解包裹,解包裹后的相位图显示在图7(d)中。

解包裹后相位图的动态范围可能比包裹相位图的动态范围大得多。展示解包裹相位图通过在黑色和白色之间缩放它并不总是表明解包裹过程正确进行。因此,遵循Ghiglia和Romero的方法,我们重新包裹解包裹后的相位图以允许与包裹图像直接比较。这种重新包裹在视觉上令人信服地表明解包裹是定性正确的。

图8展示了图7(b)所示解包裹相位图的重新包裹相位图。图7(a)和8展示了包裹和重新包裹相位图之间的良好一致性,证明了提出的算法成功地解包裹了包裹相位图。

提出的算法的执行时间因图像而异,并取决于正在分析的特定相位分布。测试图像的大小为512 x 512像素。提出的算法已在一个PC系统上执行。该PC包含双Pentium III处理器,运行速度为1GHz。这台PC的内存是512Mbyte Rambus RAM。执行时间平均在半秒的数量级。

 

 

4.结论

一个快速、可靠的二维解包裹器已经被提出、描述和测试。该算法基于首先沿着非连续路径解包裹具有更高可靠性值的点,当存在不连续性或嘈杂区域时,能够产生一致的结果。

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

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

相关文章

目前进度记录

目前已经把之前记录的方法都实现了,目前的主函数可以写的更简单比如 int main(int argc, char* argv[]) {KernelClass::create_kernel();MPI_Init(&argc, &argv);kernel().mpi_manager.init_mpi(argc, argv);//创建种群int group1 kernel().conn_manger.c…

Python特征工程神器:Feature Engine库详解与实战

更多资料获取 📚 个人网站:ipengtao.com 特征工程是机器学习中至关重要的一环,而Feature Engine库作为Python中的强大特征工程工具,提供了丰富的功能和灵活的操作。本文将深入探讨Feature Engine的各种特性,包括缺失值…

单片机的低功耗模式介绍

文章目录 简介一、功耗来源说明1.1、芯片工作模式1.2、静态损耗1.3、I/O额外损耗1.4、动态损耗 二、功耗如何测量三、降低功耗有什么方法3.1、选取合适的芯片工作模式3.2、降低工作频率3.3、关闭不需要使用的外设3.4、 降低静态电流损耗3.5、 周期采集供电3.6、 设置IO口状态 四…

HNU数据库大作业-世界杯比赛系统

前言 之前做的那个版本bug较多,后进行了大量优化。 此项目是一个前后端分离的项目,前端主要使用htmlcssjs搭建,使用的是layui框架 后端使用php语言,仅实现了简单的查询数据库功能,无法实现多并发查询等复杂情况 数…

云架构俭约之道七法则(The Frugal Architect)

文章目录 一、前言关于 Law 与 Rule 的区别 二、云架构俭约之道七法则Design(设计方面)Law 1:把成本作为非功能性需求Law 2:可持续性系统需要将成本与业务相匹配Law 3:架构设计是一系列权衡的取舍 Measure(…

iOS加密CoreML模型

生成模型加密密钥 必须在Xcode的Preferences的Accounts页面登录Apple ID,才能在Xcode中生成模型加密密钥。 在Xcode中打开模型,单击Utilities选项卡,然后单击“Create Encryption Key”按钮。 从下拉菜单中选择当前App的Personal Team&…

多项目同时进行如何做好进度管理?

许多企业都面临着同时进行多个项目的情况,因此项目经理经常需要管理多个项目。多项目管理的难点不仅在于项目数量增加,还在于资源分配不均、难以监控多个项目进度以及复杂的沟通协作。 一、从项目经理的角度分析 首先,要把握高效项目管理的几…

蚂蚁SEO实用的网络baidu蜘蛛有哪些

网络蜘蛛是一种用于从互联网上自动抓取信息的程序。它们根据给定的规则和指令,遍历网站上的页面,收集信息并将其存储在数据库中。网络蜘蛛在搜索引擎、数据挖掘、信息提取等领域有着广泛的应用。本文将介绍一种实用的网络蜘蛛,并探讨其实现原…

MySQL——库,表基础操作

目录 一.库的操作 1.显示当前的数据库列表 2.创建数据库 3.字符集和校验规则 4.操纵数据库 5.删除数据库 6.数据库备份与还原 7.查看连接情况 二.表的操作 1.创建表 2.查看表结构 3.修改表 4.删除表 一.库的操作 1.显示当前的数据库列表 show databases; 2.创建数…

KubeKey 离线部署 KubeSphere v3.4.1 和 K8s v1.26 实战指南

作者:运维有术 前言 知识点 定级:入门级了解清单 (manifest) 和制品 (artifact) 的概念掌握 manifest 清单的编写方法根据 manifest 清单制作 artifactKubeKey 离线集群配置文件编写KubeKey 离线部署 HarborKubeKey 离线部署 KubeSphere 和 K8sKubeKey…

自建zerotier planet服务linux客户端使用

前期准备planet文件, 1.先安装zerotier curl -s https://install.zerotier.com | sudo bash2.安装完毕之后把planet文件上传上去 这个位置 3.加入网络,这里不做创建演示 zerotier-cli join 地址 4.查看planet的ip 直接用bash ifconfig没有的用ip ad…

低代码开发入局,同飞股份应用云表自主开发MES管理系统

近日,为了贯彻落实《“十四五”智能制造发展规划》,推动中国从制造大国向制造强国转变,工业和信息化部发布了2023年度“智能制造优秀场景”名单。经过省级有关部门和中央企业的推荐、专家评审、网上公示等程序,同飞股份凭借其“先…

Python格式化字符串(格式化输出)

Python 提供了“%”对各种类型的数据进行格式化输出,例如如下代码: price 108 print ("the books price is %s" % price) 上面程序中的 print 函数包含以下三个部分,第一部分是格式化字符串(相当于字符串模板&#xff…

Docker | Docker+Nginx部署前端项目

= ✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:Docker系列 ✨特色专栏: MySQL学习 🥭本文内容:Docker | Docker+Nginx部署前端项目 📚个人知识库: [Leo知识库]https://gaoziman.gi…

结合eNSP实验讲VLAN,让理论生动

目录 一、VLAN的简介 1、定义 2、产生的原因--解决传统以太网的问题 3、VLAN的作用 4、VLAN数据帧格式--插入VLAN标签 5、VLAN的种类 5.1静态VLAN--常用 5.1.1静态vlan的范围 5.2动态VLAN 6、VLAN的三种端口类型 6.1Access接口 6.2Trunk接口 6.3Hybrid接口 二、配置…

普冉(PUYA)单片机开发笔记(4): 配置通用定时器

概述 在前几篇开发笔记中,从 PY32F003 的一个厂家标准例程开始,实现了中断式无阻塞串口收发、对开发板 LED3 的亮/灭控制,时钟系统的初始化和时钟选择。在此基础上,今天做一下定时器的应用实验。事先考虑以下几个问题&#xff1a…

【C语言】函数调用及创建,并将数组传参到函数

🎥 岁月失语唯石能言的个人主页 🔥个人栏专:秒懂C语言 ⭐若在许我少年时,一两黄金一两风 目录 前言 一、函数的概念 二、库函数 2.1 标准库和头文件 2.2库函数的使用方法 2.2.1功能 2.2.2库函数的头文件 2…

一些程序源码及教程的网站合集~

很多时候我们需要一个快速上手的code demo及教程,除了最常用的【github】,一些中文网站可能会帮助我们更好上手~ 这里提供几个中文网站参考: 【51CTO】: Python 动态手势识别系统hmm 手势识别opencv_mob64ca140d96d9的技术博客…

19、WEB攻防——.NET项目DLL反编译未授权访问配置调试报错

文章目录 一、.NET项目——DLL文件反编译指向—代码特性二、.NET项目——Web.config错误调试—信息泄露三、.NET项目——身份验证未授权访问—安全漏洞 web搭配: windowsiisaspaccesswindowsiisaspxsqlserver 一、.NET项目——DLL文件反编译指向—代码特性 bin目…

【Linux】探索Linux进程优先级 | 环境变量 |本地变量 | 内建命令

最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 目录 一、进程优先级1.1优先级VS权限1.2为什么要有进程优先级&am…