全息图算法:加权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).

相关推荐
hhzz3 分钟前
机器学习-算法模型系列文章:07-SVM 一巴掌拍出来的超平面:SVM核函数选错,再干净的数据也救不了你
算法·机器学习·支持向量机
geovindu15 分钟前
java: Gale-Shapley Algorithm
java·开发语言·后端·算法
冻柠檬飞冰走茶35 分钟前
PTA基础编程题目集 7-34 通讯录的录入与显示(C语言实现)
c语言·开发语言·数据结构·算法
zander25839 分钟前
LeetCode 79. 单词搜索
算法·深度优先
老洋葱Mr_Onion1 小时前
【C++】高精度模板
开发语言·c++·算法
脚踏实地皮皮晨1 小时前
003003002_WPF Grid 基类官方类定义逐行深度解析
开发语言·windows·算法·c#·wpf·visual studio
aaaameliaaa9 小时前
字符函数和字符串函数
c语言·笔记·算法
城管不管10 小时前
ReAct、Plan-and-Execute、Reflection 三大智能 Agent 范式核心区别
java·人工智能·算法·spring·ai·动态规划
月疯11 小时前
二分法算法(水平等分图形面积)
算法
豆瓣鸡11 小时前
算法日记 - Day3
java·开发语言·算法