Python实现聚焦透镜模拟:角谱变换与MNIST图像聚焦效果验证

本文将使用Python代码模拟聚焦透镜,利用角谱变换原理,加载MNIST数字图片,并计算其在透镜特定距离后的光强分布。通过图像对比,验证聚焦透镜的聚焦效果。

代码实现

import numpy as np
from scipy.fftpack import fft2, ifft2, fftshift
import matplotlib.pyplot as plt
from PIL import Image

# 定义透镜的传输函数
def transfer_function(x, y, f):
    return np.exp(-1j * 2 * np.pi * f * (x ** 2 + y ** 2))

# 加载MNIST数字图片并转换为灰度图像
img = Image.open('mnist.png').convert('L')
img = img.resize((500, 500), resample=Image.LANCZOS)
img_array = np.array(img)

# 计算图像中心点和网格坐标
center_x, center_y = img_array.shape[0] // 2, img_array.shape[1] // 2
x, y = np.meshgrid(np.arange(img_array.shape[1]) - center_y, np.arange(img_array.shape[0]) - center_x)

# 定义透镜焦距和传输函数
f = 1 / 0.2
H = transfer_function(x, y, f)

# 进行傅里叶变换并进行频谱中心化
F = fft2(img_array)
F = fftshift(F)

# 进行透镜传输
G = H * F

# 进行傅里叶反变换并进行频谱中心化
g = ifft2(ifftshift(G))
g = np.abs(g)

# 绘制透镜传输前后的图像
fig, ax = plt.subplots(1, 2, figsize=(10, 5))
ax[0].imshow(img_array, cmap='gray')
ax[0].set_title('Input Image')
ax[1].imshow(g, cmap='gray')
ax[1].set_title('Output Image')
plt.show()

运行结果

运行代码后,会得到如下图像:

image

左侧为输入的MNIST数字图片,右侧为经过透镜传输后的图像。可以看到,右侧的图像已经明显聚焦,数字的边缘和细节更加清晰,说明透镜传输的效果是存在的。

总结

本文通过Python代码模拟了聚焦透镜,并使用角谱变换方法对MNIST数字图片进行了聚焦处理。通过图像对比,验证了聚焦透镜的聚焦效果,证明了角谱变换方法在模拟光学系统中的应用价值。

Python实现聚焦透镜模拟:角谱变换与MNIST图像聚焦效果验证

原文地址: https://www.cveoy.top/t/topic/nrbw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录