一维相位解包裹

一维相位解包裹


  本文首先介绍最简单的一维的位相解包裹算法。设W是包裹运算符,\varphi中是解包裹位相,\varphi是包裹的位相。则一维位相解包裹可表示为:

解包裹就是要选取正确的k,满足:

两个相邻像素位相的差值如下:

由式(2-1)和式(2-3)能够得创包裹位相的差位如下:

那么该值的主值为:
 


因为包裹之后的位相主值分布在(-\pi\pi)之问,所以式(2-5)中的△k,+k,要等于0,才可以满足:

那么,式(2-5)改写为:

通过式(2-3)、式(2-7)可知:

 从上式能够看出,对包裹位相的差值进行求积分就得到了解包裹位相。

一维的位相解包裹如图2-所示。从图2-1能够看出,一维的位相解包裹是比较简单的,它的积分路径是唯一的。 Itoh's算法是其中的经典算法,这个算法步骤如下:

①计算包裹位相的差值:

②进行初始化:令

 ③对包裹位相进行求和,获得解包裹位相:

代码:  这里直接用到一行函数unwrap进行了解包裹

import numpy as np
import matplotlib.pyplot as plt

def unwrap_phase(phase):
    """
    Unwraps a 1D phase array.
    """
    return np.unwrap(phase)

# 示例数据
phase_data = np.array([0, np.pi/2, np.pi, -np.pi, -np.pi/2, 0, np.pi/2, np.pi])

# 解包裹
unwrapped_phase_data = unwrap_phase(phase_data)

# 绘制结果图
plt.figure(figsize=(12, 6))

# 原始相位数据
plt.subplot(1, 2, 1)
plt.plot(phase_data, marker='o')
plt.title("Original Phase Data")
plt.xlabel("Sample")
plt.ylabel("Phase (radians)")
plt.ylim(-np.pi-0.5, np.pi+0.5)

# 解包裹后的相位数据
plt.subplot(1, 2, 2)
plt.plot(unwrapped_phase_data, marker='o', color='orange')
plt.title("Unwrapped Phase Data")
plt.xlabel("Sample")
plt.ylabel("Phase (radians)")

# 显示图表
plt.tight_layout()
plt.show()

在相位解包裹的过程中,确实可能遇到解包裹结果不准确的情况,尤其是当存在噪声、快速相位变化或者相位跳变不明显时。为了确保准确解包裹,你需要关注以下几点:

  1. **噪声水平:**如果数据中有很高的噪声,它可能导致错误的相位跳变判断。
  2. **相位变化速率:**如果相位在一个像素到下一个像素之间变化超过π,这会导致解包裹算法难以准确跟踪相位变化。
  3. **相位梯度:**相位解包裹算法通常假设相位变化是逐渐的,如果梯度很大,可能会出现问题。

下面是matlab 代码:

clc;
close all;
clear;
% 模拟数据
n = 150; % 像素点数量
x = linspace(0, 5*pi, n); % x轴范围,确保有足够的周期

% 生成连续的解包裹相位曲线
unwrapped_phase = 4 * sin(x) + 2 * sin(2*x) + randn(1, n) * 0.2; % 添加一些噪声

% 生成包裹相位曲线
wrapped_phase = mod(unwrapped_phase + pi, 2*pi) - pi;

% 绘制结果
figure;
plot(x, unwrapped_phase, 'b-', 'LineWidth', 1.5, 'DisplayName', 'Unwrapped Phase'); % 解包裹相位曲线
hold on; % 保持当前图形
plot(x, wrapped_phase, 'r--', 'LineWidth', 1.5, 'DisplayName', 'Wrapped Phase'); % 包裹相位曲线
hold off; % 结束绘图

title('Wrapped and Unwrapped Phase Simulation');
xlabel('Pixels');
ylabel('Phase (radians)');
legend show; % 显示图例

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JOSEF快速中间继电器DZK-916 4A AC220V板后嵌入式安装

系列型号 DZK-911快速中间继电器;DZK-912快速中间继电器; DZK-914快速中间继电器;DZK-916快速中间继电器; DZK-917快速中间继电器;DZK-918快速中间继电器; DZK-924快速中间继电器;DZK-934快速中…

德国进口高速主轴电机在机器人上的应用及选型方案

随着机器人技术的日新月异,高速主轴电机在机器人领域的应用也日趋广泛。德国进口的SycoTec高速主轴电机,以其高转速、高精度、高刚度的特点,在机器人的切割、铣削、钻孔、去毛刺等加工应用中发挥着关键作用。 一、高速主轴电机的特点 SycoT…

【项目问题解决】IDEA2020.3 使用 lombok 插件 java: 找不到符号 符号: 方法 builder()

目录 lombok找不到符号问题修改 1.问题描述2.问题原因3.解决思路4.解决方案5.总结6.参考 文章所属专区 项目问题解决 1.问题描述 IDEA2020.3 使用 lombok 插件 java: 找不到符号 符号: 方法 builder(),无法使用lombok下应有的注解,一度怀疑是版本问题 …

什么是SPA(Single Page Application)?它的优点和缺点是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

JVM理解

1、JVM是什么? JVM是Java Virtual Machine(Java虚拟机)的缩写,由一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域等组成。 他是帮助我们将java代码 生成编译后 的 class 文件。 2、JRE、JDK和JVM 的关系 …

【文件上传系列】No.0 利用 FormData 实现文件上传、监控网路速度和上传进度(原生前端,Koa 后端)

利用 FormData 实现文件上传 基础功能:上传文件 演示如下: 概括流程: 前端:把文件数据获取并 append 到 FormData 对象中后端:通过 ctx.request.files 对象拿到二进制数据,获得 node 暂存的文件路径 前端…

【STM32】TIM定时器输入捕获

1 输入捕获 1.1 输入捕获简介 IC(Input Capture)输入捕获 输入捕获模式下,当通道输入引脚出现指定电平跳变时(上升沿/下降沿),当前CNT的值将被锁存到CCR中(把CNT的值读出来,写入到…

【链表Linked List】力扣-109 有序链表转换二叉搜索树

目录 题目描述 解题过程 官方题解 题目描述 给定一个单链表的头节点 head ,其中的元素 按升序排序 ,将其转换为高度平衡的二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差不超过 1。 示例 1: 输…

解决思维题的一些自我总结

目录 常见思维题类型 排序 区间问题 01串串 字符串串 位运算 gcd 与 lcm 质数相关 二元组 常见思维题类型 思维题很多都可以说是贪心、但贪心种类很多,具体怎么贪,重要的还是在于积累经验吧...有些东西也很难总结,以下算是我的碎碎念…

linux学习之详解文件

目录 1.先认识文件 2.c语言中常用文件接口 fopen(打开文件) 3.系统接口操作文件 open write 文件的返回值以及打开文件的本质 理解struct_file内核对象 了解文件描述符(fd)分配规则 重定向 dup接口 标准错误流 文件缓冲…

(NeRF学习)3D Gaussian Splatting Instant-NGP

学习参考: 3D Gaussian Splatting入门指南【五分钟学会渲染自己的NeRF模型,有手就行!】 三维重建instant-ngp环境部署与colmap、ffmpeg的脚本参数使用 一、3D Gaussian Splatting (一)3D Gaussian Splatting环境配置…

ORA-600 kcbzib_kcrsds_1一键恢复

一个19c库由于某种原因redo损坏强制打开库报ORA-600 kcbzib_kcrsds_1错误 SQL> startup mount pfile?/database/pfile.txt; ORACLE instance started. Total System Global Area 859830696 bytes Fixed Size 9034152 bytes Variable Size 5…

通过K8S安装人大金仓数据库

1. 离线下载镜像&#xff0c;请点击 2. 官网下载镜像 https://www.kingbase.com.cn/xzzx/index.htm&#xff0c;根据自己的需求下载对应版本。 3. K8S需要的yaml清单 cat > kingbase.yaml << EOF apiVersion: apps/v1 kind: Deployment metadata:name: kingbase-…

水果党flstudio用什么midi键盘?哪个版本的FL Studio更适合我

好消息&#xff01;好消息&#xff01;特大好消息&#xff01; 水果党们&#xff01;终于有属于自己的专用MIDI键盘啦&#xff01; 万众期待的Novation FLKEY系列 正式出炉&#xff01; 话有点多话&#xff0c;先分享一份干货&#xff0c;尽快下载 FL Studio 21 Win-安装包&…

手把手将Visual Studio Code变成Python开发神器

Visual Studio Code 是一款功能强大、可扩展且轻量级的代码编辑器&#xff0c;经过多年的发展&#xff0c;已经成为 Python 社区的首选代码编辑器之一 下面我们将学习如何安装 Visual Studio Code 并将其设置为 Python 开发工具&#xff0c;以及如何使用 VS Code 提高编程工作…

IEEE 机器人最优控制开源库 Model-based Optimization for Robotics

系列文章目录 文章目录 系列文章目录前言一、开源的库和工具箱1.1 ACADO1.2 CasADi1.3 Control Toolbox1.4 Crocoddyl1.5 Ipopt1.6 Manopt1.7 LexLS1.8 NLOpt1.9 qpOASES1.10 qpSWIFT1.11 Roboptim 二、其他库和工具箱2.1 MUSCOD2.2 OCPID-DAE12.3 SNOPT 前言 机器人&#xff…

tomcat环境搭建

镜像下载地址&#xff1a;https://mirror.tuna.tsinghua.edu.cn/apache/tomcat/ 配置环境变量 添加系统变量 编辑Path 测试 dos窗口运行startup启动tomcat 访问http://localhost:8080/

短视频账号矩阵系统源码搭建步骤包括以下几个方面:

短视频账号矩阵系统源码搭建步骤包括以下几个方面&#xff1a; 1. 确定账号类型和目标受众&#xff1a;确定要运营的短视频账号类型&#xff0c;如搞笑、美食、美妆等&#xff0c;并明确目标受众和定位。 2. 准备账号资料&#xff1a;准备相关资质和资料&#xff0c;如营业执照…

Linux 线程——信号量

题目&#xff1a;编写代码实现编写一个程序&#xff0c;开启三个线程&#xff0c;这三个线程的ID分别是A,B,C,每个线程将自己的ID在屏幕上打印10遍&#xff0c;要求输出必须按照ABC的顺序显示&#xff0c;如&#xff1a;ABCABCABC... 思路&#xff1a;创建三个ID分别为ABC的线程…

(五) Python 代理模式

文章目录 5.1 代理模式概述5.1.1 代理介绍5.1.2 代理模式的作用 5.2 代理模式的UML类图5.3 了解不同类型的代理5.3.1虚拟代理5.3.2 远程代理5.3.3 保护代理5.3.4 智能代理 5.4 现实世界中的代理模式5.5 代理模式的优点5.6 门面模式和代理模式之间的比较 5.1 代理模式概述 5.1.…