全息图算法:加权Gerchberg-Saxton算法(GSW)

背景:GS(Gerchberg-Saxton)在计算全息图、产生光阱方面,对比于直接算法,包括随机相位掩膜法(RM)、棱镜透镜叠加(S)算法,随机叠加(SR)算法,具有光能利用率高的优点,但是和GAA算法一样,都具有一个缺点,即光能的分布上,均匀性不够好。从该缺陷出发,便产生了加权的GS算法(GSW)算法。

本文只讨论纯相位型空间光调制器。设入射在空间光调制器(SLM)的光波为均匀平面波,设振幅为,则从SLM出射后的光波振幅为,其中,为SLM上第j个像素产生的相移。使用标量衍射理论,得到从SLM上第i行第j列像素的光传播到焦面(focal plane)上第m个光阱处的光振幅为

其中,k为波矢,有,λ为波长,实际上就表示的是位于处的光阱经过菲涅耳变换后得到的相位信息,右端包含了其空间频率信息,左端包含了轴向的信息,是一个透镜项。f为傅里叶变换透镜的焦距,d为像素边长,N为像素个数。引入无量纲量

其物理意义通过来表示,表示第m个光阱能量与总能量之比。计算全息的算法的意义在于对于给定的m个位于的光阱,或者给定的(两者是等效的),给出最优的,使得各个光阱的强度最接近于设计值。对于GS算法、GAA算法这两种迭代算法,其以达到最大值为目的,这也是导致其计算产生的光阱强度不均匀的间接原因之一。

首先将GS算法的思路作为切入,为了使以为自变量的函数达到最大,

求偏微分得到

最终得到(原文中用了Hessian矩阵,博主这不太明白QAQ,直接略过了)

而GSW算法,是在该表达式中引入了一个隐式的权重,表达式变为

在初次迭代时为1,在第k次迭代中,,其中表示求平均。

在对算法基本原理讲解后,大家可能还是一头雾水的(反正博主是一头雾水的QAQ),github上找到一个python编写的GSW算法源码后,给了我很大启发。如下是我绘制的算法框图,简单明了的讲解了这篇文章想要表达的一个思路。

GSW算法的流程图如图

输入图像灰度值作为振幅输入,并对图像每一像素赋予随机相位,作为输入图像。

其与GS算法不同的是,使用了随迭代次数改变的权重系数,即,输入图像中光阱的能量与每次迭代得到的复原图像中光阱能量之比值乘上一次迭代中的权重系数,作为本次迭代的权重。权重的引入,使得全息图还原得到的复原图的光阱能量会朝设计值靠近。

实验:如图所示为设计的图像

如下图为计算得到的计算全息图

下图为使用全息图还原得到的还原图

下图为还原图与原图的相关系数随迭代次数的图像

本篇文章中可能还有很多问题,欢迎大家在评论区讨论

参考文献:

1Di Leonardo Roberto,Ianni Francesca,Ruocco Giancarlo. Computer generation of optimal holograms for optical trap arrays.J. Optics express,2007,15(4).

相关推荐
可编程芯片开发1 分钟前
基于李雅普诺夫算法的四旋翼无人机姿态跟踪控制系统simulink建模与仿真
matlab·无人机·制造·四旋翼无人机·李雅普诺夫·姿态跟踪控制
无定义_19 分钟前
Dijkstra——单源最短路径
算法·图论
weixin_3077791325 分钟前
AI生成代码的隐患与治理:人工审查流程及提示词驱动的修复策略
开发语言·人工智能·算法
zmzb010333 分钟前
C++课后习题训练记录Day201
c++·算法·图论
lch2011_yb35 分钟前
CSP-J 2023 小苹果
算法
星星.7221 小时前
【图论】最小生成树|Prim+Kruskal算法
数据结构·c++·算法·图论
_Narcissus_1 小时前
单调栈笔记及例题详解
数据结构·c++·笔记·算法·力扣·单调栈·洛谷
土司大王9 小时前
LeetCode hot100——对称二叉树
算法·leetcode·职场和发展
sali-tec9 小时前
C# 基于OpenCv的视觉工作流-章106-差值追踪
图像处理·人工智能·opencv·算法·计算机视觉