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

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

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

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

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

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

参考文献:

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

相关推荐
灰灰勇闯IT15 分钟前
【探索实战】Kurator多集群统一应用分发实战:从环境搭建到业务落地全流程
算法
鱼在树上飞23 分钟前
乘积最大子数组
算法
H_z___39 分钟前
Codeforces Round 1070 (Div. 2) A~D F
数据结构·算法
自学小白菜1 小时前
每周刷题 - 第三周 - 双指针专题 - 02
python·算法·leetcode
杜子不疼.1 小时前
【LeetCode76_滑动窗口】最小覆盖子串问题
算法·哈希算法
ComputerInBook1 小时前
代数基本概念理解——特征向量和特征值
人工智能·算法·机器学习·线性变换·特征值·特征向量
不能只会打代码2 小时前
力扣--3433. 统计用户被提及情况
java·算法·leetcode·力扣
biter down2 小时前
C++ 解决海量数据 TopK 问题:小根堆高效解法
c++·算法
用户6600676685392 小时前
斐波那契数列:从递归到缓存优化的极致拆解
前端·javascript·算法
初夏睡觉2 小时前
P1055 [NOIP 2008 普及组] ISBN 号码
算法·p1055