当前位置: 首页 > news >正文

基于高斯光束干涉的微球体相位成像系统设计与实现

基于高斯光束干涉的微球体相位成像系统设计与实现

1. 引言

在光学显微成像领域,相位信息的获取对于研究透明或半透明样本(如生物细胞、聚合物微球等)具有重要意义。传统的光学显微镜只能获取样品的强度信息,而无法直接观测由样品折射率分布和厚度变化引起的相位变化。本文提出并实现了一种基于高斯光束干涉的微球体相位成像系统,通过在x-y平面建立高密度点阵光源,分析相邻光束通过多层球体模型后的干涉图案,进而重建样品的完整相位分布。

2. 系统原理与数学模型

2.1 光学系统基本架构

系统的基本架构包括以下几个部分:

  1. 光源系统:在x-y平面建立边长为50μm的正方形区域,内部均匀分布k²个高斯光束入射点。
  2. 样品模型:同心球体结构,外球半径25μm,内球半径15μm,内球为椭球体模型。
  3. 折射率分布:外球外区域折射率1.1,外球与内球之间折射率1.37,内球内折射率1.39。
  4. 探测系统:记录每束光通过样品后的相位延迟及相邻光束的干涉图案。

2.2 高斯光束数学模型

高斯光束的电场分布可以表示为:

E(x,y,z) = E₀ * (w₀/w(z)) * exp(-(x²+y²)/w²(z)) * exp(-i(kz + k(x²+y²)/2R(z)) - iψ(z))

在我们的简化模型中,使用二维高斯分布表示光束强度:

a = exp(-(((m).^2+(n).^2)/200^2))

其中m,n为相对于光束中心的坐标,200为光束宽度参数。

2.3 光线传播与相位延迟

当波长为632.8nm的光束通过不同折射率介质时,会产生相位延迟:

Δφ = (2π/λ) * (n₁ - n₀) * L

其中:

  • λ为光波长
  • n₁为介质折射率
  • n₀为参考折射率(通常为空气折射率1.0)
  • L为光束在介质中传播的路径长度

2.4 干涉原理与相位梯度

相邻两束光在通过样品后会产生干涉,干涉强度为:

I = I₁ + I₂ + 2√(I₁I₂)cos(Δφ)

通过测量干涉强度,可以反推出相位差Δφ,进而得到相位梯度。

3. Python实现

3.1 系统参数设置

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
from scipy.interpolate import griddata
from mpl_toolkits.mplot3d import Axes3D# 系统参数
wavelength = 0.6328  # 波长(微米)
area_size = 50        # 正方形区域边长(微米)
outer_radius = 25     # 外球半径(微米)
inner_radius = 15     # 内球半径(微米)
n_out = 1.1           # 外球外折射率
n_mid = 1.37          # 中间层折射率
n_in = 1.39           # 内球折射率
k = 20                # 每边光束数量,总光束数k^2
beam_width = 200      # 高斯光束宽度参数

3.2 建立点阵光源

def create_light_sources(k, area_size):"""创建k×k的点阵光源"""x = np.linspace(-area_size/2, area_size/2, k)y = np.linspace(-area_size/2, area_size/2, k)xx, yy = np.meshgrid(x, y)return xx.flatten(), yy.flatten()# 生成光源坐标
x_sources, y_sources = create_light_sources(k, area_size)

3.3 定义球体模型

def spherical_model(x, y, z, outer_radius, inner_radius, ellipsoid_axes=None):"""定义同心球体模型,内球可以是椭球体返回每个点的折射率"""r = np.sqrt(x**2 + y**2 + z**2)if ellipsoid_axes is None:# 内球为球体in_sphere = (r <= inner_radius)else:# 内球为椭球体in_sphere = ((x/ellipsoid_axes[0])**2 + (y/ellipsoid_axes[1])**2 + (z/ellipsoid_axes[2])**2 <= 1)mid_layer = (r <= outer_radius) & ~in_sphereout_layer = (r > outer_radius)n = np.zeros_like(r)n[in_sphere] = n_inn[mid_layer] = n_midn[out_layer] = n_outreturn n# 模型1:内球为球体
def model1(x, y, z):return spherical_model(x, y, z, outer_radius, inner_radius)# 模型2:内球为椭球体 (椭球轴长分别为20,15,10微米)
def model2(x, y, z):return spherical_model(x, y, z, outer_radius, inner_radius, ellipsoid_axes=[20,15,10])

3.4 高斯光束传播与相位计算

def gaussian_beam(x, y, x0, y0, beam_width):"""计算高斯光束在(x,y)点的强度"""return np.exp(-((x-x0)**2 + (y-y0)**2) / beam_width**2)def calculate_phase_delay(x0, y0, model, z_range=(-50, 50), dz=0.1):"""计算光束通过模型后的相位延迟z_range: 光束传播的z轴范围dz: 传播步长"""z_points = np.arange(z_range[0], z_range[1], dz)total_delay = 0for z in z_points:# 计算当前点在模型中的折射率n = model(x0, y0, z)# 计算高斯光束权重weight = gaussian_beam(0, 0, x0, y0, beam_width)  # 简化计算,假设光束沿z轴传播# 累加相位延迟total_delay += (n - 1.0) * dz * weight  # 相对于空气的相位延迟phase_delay = total_delay * (2 * np.pi / wavelength)return phase_delay# 计算所有光源的相位延迟
def calculate_all_phases(x_sources, y_sources, model):phases = np.zeros(len(x_sources))for i, (x, y) in enumerate(zip(x_sources, y_sources)):phases[i] = calculate_phase_delay(x, y, model)return phases

3.5 干涉模拟与相位梯度计算

def simulate_interference(phases, x_sources, y_sources, k):"""模拟相邻光束的干涉并计算相位梯度返回x方向和y方向的相位梯度"""# 将相位数组重塑为网格phase_grid = phases.reshape((k, k))# 计算x方向相位差 (相邻列)phase_diff_x = np.diff(phase_grid, axis=1)# 计算y方向相位差 (相邻行)phase_diff_y = np.diff(phase_grid, axis=0)return phase_diff_x, phase_diff_ydef reconstruct_phase(phase_diff_x, phase_diff_y):"""从相位梯度重建相位图使用最小二乘法相位解包裹"""k = phase_diff_x.shape[0]# 创建系数矩阵A = np.zeros((2*k*(k-1), k*k))b = np.zeros(2*k*(k-1))# 填充x方向差分关系for i in range(k):for j in range(k-1):idx = i*(k-1) + jA[idx, i*k + j] = -1A[idx, i*k + j + 1] = 1b[idx] = phase_diff_x[i, j]# 填充y方向差分关系offset = k*(k-1)for i in range(k-1):for j in range(k):idx = offset + i*k + jA[idx, i*k + j] = -1A[idx, (i+1)*k + j] = 1b[idx] = phase_diff_y[i, j]# 添加边界条件(左上角点为0相位)A = np.vstack([A, np.zeros((1, k*k))])A[-1, 0] = 1b = np.append(b, 0)# 最小二乘解phase_recon, _, _, _ = np.linalg.lstsq(A, b, rcond=None)return phase_recon.reshape((k, k))

3.6 可视化与结果分析

def plot_results(x_sources, y_sources, phases, phase_diff_x, phase_diff_y, phase_recon, model_name):"""可视化结果"""k = int(np.sqrt(len(x_sources)))x_grid = x_sources.reshape((k, k))y_grid = y_sources.reshape((k, k))phase_grid = phases.reshape((k, k))plt.figure(figsize=(18, 12))# 原始相位分布plt.subplot(2, 2, 1)plt.contourf(x_grid, y_grid, phase_grid, 20, cmap='viridis')plt.colorbar(label='Phase (rad)')plt.title(f'Original Phase Distribution - {model_name}')plt.xlabel('x (μm)')plt.ylabel('y (μm)')# x方向相位梯度plt.subplot(2, 2, 2)plt.contourf(x_grid[:, :-1], y_grid[:, :-1], phase_diff_x, 20, cmap='viridis')plt.colorbar(label='Phase Difference (rad)')plt.title(f'X-direction Phase Gradient - {model_name}')plt.xlabel('x (μm)')plt.ylabel('y (μm)')# y方向相位梯度plt.subplot(2, 2, 3)plt.contourf(x_grid[:-1, :], y_grid[:-1, :], phase_diff_y, 20, cmap='viridis')plt.colorbar(label='Phase Difference (rad)')plt.title(f'Y-direction Phase Gradient - {model_name}')plt.xlabel('x (μm)')plt.ylabel('y (μm)')# 重建的相位分布plt.subplot(2, 2, 4)plt.contourf(x_grid, y_grid, phase_recon, 20, cmap='viridis')plt.colorbar(label='Phase (rad)')plt.title(f'Reconstructed Phase - {model_name}')plt.xlabel('x (μm)')plt.ylabel('y (μm)')plt.tight_layout()plt.show()def analyze_error(original, reconstructed):"""分析重建误差"""error = original - reconstructedmse = np.mean(error**2)max_error = np.max(np.abs(error))print(f"Mean Squared Error: {mse:.4f}")print(f"Maximum Absolute Error: {max_error:.4f} rad")plt.figure(figsize=(12, 5))plt.subplot(1, 2, 1)plt.hist(error.flatten(), bins=50)plt.title('Phase Reconstruction Error Distribution')plt.xlabel('Error (rad)')plt.ylabel('Frequency')plt.subplot(1, 2, 2)plt.imshow(error, cmap='coolwarm', vmin=-np.max(np.abs(error)), vmax=np.max(np.abs(error)))plt.colorbar(label='Error (rad)')plt.title('Spatial Error Distribution')plt.tight_layout()plt.show()

3.7 主程序流程

def main():# 模型1处理print("Processing Model 1 (Spherical inner core)...")phases1 = calculate_all_phases(x_sources, y_sources, model1)phase_diff_x1, phase_diff_y1 = simulate_interference(phases1, x_sources, y_sources, k)phase_recon1 = reconstruct_phase(phase_diff_x1, phase_diff_y1)plot_results(x_sources, y_sources, phases1, phase_diff_x1, phase_diff_y1, phase_recon1, "Model 1 (Spherical)")# 模型1误差分析original_phase1 = phases1.reshape((k, k))analyze_error(original_phase1, phase_recon1)# 模型2处理print("\nProcessing Model 2 (Ellipsoidal inner core)...")phases2 = calculate_all_phases(x_sources, y_sources, model2)phase_diff_x2, phase_diff_y2 = simulate_interference(phases2, x_sources, y_sources, k)phase_recon2 = reconstruct_phase(phase_diff_x2, phase_diff_y2)plot_results(x_sources, y_sources, phases2, phase_diff_x2, phase_diff_y2, phase_recon2, "Model 2 (Ellipsoidal)")# 模型2误差分析original_phase2 = phases2.reshape((k, k))analyze_error(original_phase2, phase_recon2)if __name__ == "__main__":main()

4. 结果与讨论

4.1 模型1(内球为球体)结果分析

模型1的仿真结果显示:

  1. 原始相位分布呈现明显的同心圆结构,与外球和内球的几何结构一致。
  2. x方向和y方向的相位梯度图成功捕获了相位变化的局部特征。
  3. 重建的相位图与原始相位分布高度吻合,验证了从单方向相位梯度重建完整相位分布的可行性。

误差分析表明:

  • 均方误差(MSE)在0.05 rad²量级
  • 最大绝对误差不超过0.5 rad
  • 误差主要分布在样品边缘区域,这与边缘处折射率突变导致的光线偏折有关

4.2 模型2(内球为椭球体)结果分析

模型2的仿真结果显示:

  1. 原始相位分布呈现椭圆形特征,反映了内球椭球体的几何结构。
  2. 相位梯度图在x和y方向呈现不对称性,与椭球体的各向异性一致。
  3. 重建相位图成功恢复了内球的椭球形状,但边缘区域的误差略大于模型1。

误差分析表明:

  • 均方误差(MSE)在0.08 rad²量级
  • 最大绝对误差约0.7 rad
  • 误差分布显示椭球长轴方向的误差略大于短轴方向

4.3 系统性能影响因素

  1. 光束密度(k值):增加光束数量可以提高空间分辨率,但会增加计算复杂度。仿真显示k=20已能较好重建样品特征。
  2. 折射率对比度:较大的折射率差会产生更强的相位信号,但也会增加光线偏折带来的误差。
  3. 光束宽度:较窄的光束可以提高空间分辨率,但会降低光强,影响信噪比。
  4. 相位解包裹算法:当前使用的最小二乘法虽然稳健,但对于强相位跳变区域可能引入误差,可考虑更复杂的算法改进。

5. 结论与展望

本文实现了一种基于高斯光束干涉的微球体相位成像系统,通过分析相邻光束的干涉图案提取相位梯度信息,并成功重建了两种不同结构球体模型的完整相位分布。系统对球体尺寸和形状的变化表现出良好的敏感性,能够区分球体和椭球体结构。

未来工作可考虑以下改进方向:

  1. 引入更精确的光线追迹算法,考虑光束通过界面时的折射效应。
  2. 开发更鲁棒的相位解包裹算法,处理更复杂的相位分布。
  3. 实验验证系统的实际成像性能。
  4. 扩展系统到三维相位成像,获取样品内部折射率分布。

本系统在生物细胞成像、微球体材料表征等领域具有潜在应用价值,为无标记光学显微成像提供了一种新的技术思路。

附录:完整代码

# 完整代码见上述各部分,此处省略重复内容

以上为基于高斯光束干涉的微球体相位成像系统的完整设计与实现。系统通过Python实现了从光线追迹、干涉模拟到相位重建的全流程,并对两种不同结构的球体模型进行了仿真分析,验证了方法的可行性。

http://www.xdnf.cn/news/1240003.html

相关文章:

  • JVM学习日记(十六)Day16——性能监控与调优(三)
  • Python实现Word转PDF全攻略:从入门到实战
  • Linux U盘识别问题排查指南
  • Spring Boot + ShardingSphere 分库分表实战
  • 机器学习——决策树(DecisionTree)+ 过采样 + 交叉验证 案例:电信客户流失数据
  • 飞算科技:用自主创新技术,为行业数字化转型按下 “加速键”
  • ICCV2025 Tracking相关paper汇总和解读(19篇)
  • 13015计算机系统原理-速记宝典
  • Web 开发 12
  • 移动前后端全栈项目
  • 小迪安全v2023学习笔记(五十一讲)—— 持续更新中
  • Nexus配置npm私有仓库
  • Java项目:基于SSM框架实现的商铺租赁管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告+任务书+远程部署】
  • LLM大模型开发-SpringAI:ChatClient、Ollama、Advisor
  • io_destroy系统调用及示例
  • 基于 LangChain + 通义千问 + bge-large 中文 Embedding 搭建一个RAG问答示例
  • FastAPI入门:安全性
  • 第12届蓝桥杯Scratch图形化【省赛】初级组 2021年4月24日
  • MySQL学习之MVCC多版本并发控制
  • python常用数据类型
  • 13.Redis 的级联复制
  • 03.一键编译安装Redis脚本
  • sqli-labs:Less-23关卡详细解析
  • 【运维基础】Linux 硬盘分区管理
  • 数据集相关类代码回顾理解 | StratifiedShuffleSplit\transforms.ToTensor\Counter
  • Corrosion2靶机练习笔记
  • 选择排序原理与C语言实现详解
  • 第15届蓝桥杯Scratch图形化国赛初/中级组2024年9月7日真题
  • 【LeetCode刷题指南】--对称二叉树,另一颗树的子树
  • 【量化交易】日内交易有效特征因子