傅里叶光学与成像:衍射理论基础

5星 · 超过95%的资源 需积分: 14 27 下载量 74 浏览量 更新于2024-07-31 收藏 5.63MB PDF 举报
"diffract, Fourier optics and imaging - OKAN K. ERSOY 2007" 《衍射、傅里叶光学与成像》是OKAN K. ERSOY在2007年撰写的一本涵盖多个现代科技领域的教材。这本书的核心是衍射、成像和傅里叶分析技术,这些内容在很多科学和技术领域中至关重要。随着技术的发展,傅里叶方法在成像技术的研究和开发中发挥了重要作用。 本书的形成源于作者超过30年的课程教学、研究和开发项目经验。作者观察到,随着时间的推移,书中涉及的主题变得更加重要且多元化。尽管傅里叶理论是理解的基础,但还需要结合线性系统理论、优化、数值方法、成像理论以及信号和图像处理等众多其他主题。同时,实施问题和材料制造也需要与理论相结合,使得这个领域的特性变得复杂。随着技术的进步,这一领域的重要性日益凸显,因此需要开设涵盖科学和技术主要主题的课程,帮助学生为现代技术做好准备。 该书适用于高级和研究生级别的课程,可以根据涵盖的主题设计多个一学期或一个季度的课程。全书共20章和3个附录,前三章作为基础知识的介绍。第1章简要介绍了衍射、傅里叶光学和成像的主题,并通过现代技术中的实例进行说明。第2章总结了线性系统理论和变换的必要知识,包括连续空间傅里叶变换和实傅里叶变换及其属性。附录则涵盖了脉冲函数、线性向量空间、离散时间傅里叶变换、离散傅里叶变换和快速傅里叶变换(FFT)等其他主题。第3章讨论波的传播基础,特别关注电磁波和它们的特性,特别是平面波。 接下来的四章是标量衍射理论的基础。第4章引入了亥姆霍兹方程、平面波的角谱、菲涅尔-基尔霍夫和瑞利-索默费尔德衍射理论,这些理论将波的传播描述为与傅里叶变换密切相关的线性积分变换。 此书对于理解衍射现象、光学成像以及傅里叶光学的理论基础至关重要,尤其对于学习现代成像技术和相关应用的学生和专业人士来说,是一份宝贵的资源。它不仅提供了理论知识,还强调了实际应用和技术发展之间的联系,有助于读者在科学与技术之间建立坚实的理解桥梁。

import numpy as np import numpy.fft as fft import scipy.ndimage as nd import imageio import scipy.misc as misc from math import pi #Read in source image #source = nd.imread("einstein.bmp", flatten=True) source = imageio.imread("einstein.bmp", as_gray=True) #Pad image to simulate oversampling pad_len = len(source) padded = np.pad(source, ((pad_len, pad_len),(pad_len, pad_len)), 'constant', constant_values=((0,0),(0,0))) ft = fft.fft2(padded) #simulate diffraction pattern diffract = np.abs(ft) l = len(padded) #keep track of where the image is vs the padding mask = np.ones((pad_len+2,pad_len+2)) mask = np.pad(mask, ((pad_len-1, pad_len-1),(pad_len-1, pad_len-1)), 'constant', constant_values=((0,0),(0,0))) #Initial guess using random phase info guess = diffract * np.exp(1j * np.random.rand(l,l) * 2 * pi) #number of iterations r = 801 #step size parameter beta = 0.8 #previous result prev = None for s in range(0,r): #apply fourier domain constraints update = diffract * np.exp(1j * np.angle(guess)) inv = fft.ifft2(update) inv = np.real(inv) if prev is None: prev = inv #apply real-space constraints temp = inv for i in range(0,l): for j in range(0,l): #image region must be positive if inv[i,j] < 0 and mask[i,j] == 1: inv[i,j] = prev[i,j] - beta*inv[i,j] #push support region intensity toward zero if mask[i,j] == 0: inv[i,j] = prev[i,j] - beta*inv[i,j] prev = temp guess = fft.fft2(inv) #save an image of the progress if s % 10 == 0: #imageio.imsave("/Users/chasegoddard/Stuff/CDI/code/save/progress" + str(s) + # ".bmp", prev) imageio.imsave("C:/Users/Administrator/Desktop/仿真结果/结果" + str(s) + ".bmp", prev) print(s)

2023-07-16 上传