Python(TensorFlow)和MATLAB及Java光学像差导图

🎯要点

  1. 几何光线和波前像差计算
  2. 入瞳和出瞳及近轴光学计算波前像差
  3. 特征矩阵方法计算光谱反射率、透射率和吸光度
  4. 透镜像差和绘制三阶光线像差图和横向剪切干涉图
  5. 分析瞳孔平面焦平面和大气湍流建模
  6. 神经网络光学像差计算
  7. 透镜光线传播几何偏差计算
  8. 像差和像散
  9. 色差纠正对齐定位,计算多边形统计数据
  10. 分子图像分析
  11. 神经网络多尺度算法预测
  12. 聚焦光场矢量计算
  13. 非球面反射望远镜偏差算法
    在这里插入图片描述

Python望远镜色差

完美透镜具有抛物线形状,因此它会对入射波施加二次相位,并且尺寸无限大。这种透镜将输入平面波聚焦到焦点处的单个点,或者在满足成像条件时,它可以将点物体成像为一个点:
1 u + 1 v = 1 f \frac{1}{u}+\frac{1}{v}=\frac{1}{f} u1+v1=f1
其中 u u u是镜头与物体之间的距离, v v v是镜头与图像之间的距离, f f f是镜头的焦距。根据几何光学,点源将产生点图像。然而,即使使用完美的镜头,点源也不会产生点像,而是会产生模糊盘。这个模糊盘称为点扩展函数,它表示成像系统的空间分辨率。这是由于有限的镜头光圈导致一些光束离开点源并错过镜头。因此,图像的分辨率是镜头或成像系统光圈大小的函数。如果镜头是完美的,没有任何像差,则点源的图像大小,即PSF,为:
P S F = 4 λ ν π D PSF=\frac{4 \lambda \nu}{\pi D} PSF=πD4λν
其中 D D D是镜头光圈, v v v是到图像的距离, λ \lambda λ是波长。显然,当我们增加镜头尺寸时,PSF 更小,这意味着分辨率更高。此外,靠近镜头并减少 v v v 可以提高分辨率。然而,即使透镜无限大并且来自点光源的所有光都进入透镜,由于光的波动方面,图像也不能小于波长的一半。这也可以在波长相关函数中看到。减小波长将减小 PSF 并提高分辨率。然而,为了观察这些效应,我们必须离开几何光学并考虑波动光学。

最常见的像差类型是散焦。在散焦中,图像会失焦,因为探测器没有精确地位于图像平面上。在这种情况下,点物体会产生更大的模糊盘,也就是说,我们有更大的点扩展函数,这会导致图像分辨率降低。PSF 的大小与与图像平面的距离 z 的关系为:
PSF ⁡ ( z ) = PSF ⁡ ( 0 ) 1 + ( z λ π P S F ( 0 ) 2 ) 2 \operatorname{PSF}(z)=\operatorname{PSF}(0) \sqrt{1+\left(\frac{z \lambda}{\pi P S F(0)^2}\right)^2} PSF(z)=PSF(0)1+(πPSF(0)2zλ)2
这里,当 z z z小时,PSF的大小缓慢增加,但当 z z z大时,PSF的大小随 z z z线性增加。因此,即使稍微失焦,PSF 也不会受到影响。这个范围称为瑞利范围,它决定了我们系统的焦深。如果焦深很大,我们就不需要那么精确,不同距离的不同物体仍然可以对焦。然而,当焦深较小时,只有一个物体会被聚焦,从而导致物体清晰而背景模糊的美丽图像。焦深 b b b 的计算公式为:
b = π P S F ( 0 ) 2 2 λ b=\frac{\pi P S F(0)^2}{2 \lambda} b=2λπPSF(0)2
因此,较小的光斑会导致较小的焦深。因此,当光圈较大时,我们可以获得较高的分辨率和较低的焦深。

第二种像差是探测器没有根据图像平面定向。这会导致 PSF 成为平面位置的函数。图像中心的分辨率可能很高,而沿着特定轴的分辨率会较低。如果倾斜足够大,PSF 将变成不对称椭圆。我们可以根据泽尼克多项式定义倾斜:
T x = A x cos ⁡ ( α ) T y = A y sin ⁡ ( α ) \begin{aligned} & T_x=A_x \cos (\alpha) \\ & T_y=A_y \sin (\alpha) \end{aligned} Tx=Axcos(α)Ty=Aysin(α)
因此,这种类型的像差也很容易通过沿着图像平面正确定位探测器来解决。

任何玻璃都有一定的色散,色散取决于波长。因此,折射率是波长的函数,因此透镜焦距也是波长的函数。通常,折射率与波长的关系为 1 0 − 4 10^{-4} 104,当我们使用宽带光成像或焦距较短且镜头较厚时,它开始影响成像,因此折射率的影响分散度高。为了克服望远镜中的色差,我们可以用镜子代替镜头。镜子将所有波长反射到同一方向,因此没有色差。此外,可以将两个镜头组合在一起,每个镜头由不同类型的玻璃制成,在所需的带宽下具有相反的色差,这样它们的色差就会相互抵消。

Python色差

import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit
from scipy import signal
import math

定义用于拟合垂直切片的模型函数

def gauss(x, *p):A, mu, sigma = preturn A*np.exp(-(x-mu)**2/(2.*sigma**2))

假设一个简单的线性校准定律

def compute_fwhm_data(filename,ref_wavelength_1_x,ref_wavelength_2_x,ref_wavelength_1=3948,ref_wavelength_2=7032,wavelength1=4000,wavelength2=7000,bin_size=50):rate = (ref_wavelength_2 - ref_wavelength_1) / (ref_wavelength_2_x - ref_wavelength_1_x)offset = 3948 - 527 * ratex1 = math.floor((wavelength1 - offset) / rate)x2 = math.ceil((wavelength2 - offset) / rate)image = fits.open(filename)imageData = image[0].datacleanImageData = signal.medfilt2d(imageData, kernel_size=3)sliceData = cleanImageData[:, x1:x2]width = len(sliceData[0])height = len(sliceData)fwhmData = [0] * widthfor columnIndex in np.arange(width):columnValues = sliceData[:, columnIndex]maxIndex = np.argmax(columnValues)background = np.concatenate((columnValues[ : maxIndex-bin_size], columnValues[maxIndex + bin_size : ]))backgroundValue = np.mean(background, axis=0)columnValues = np.subtract(columnValues, backgroundValue)maxValue = columnValues[maxIndex]spectrum = columnValues[maxIndex - bin_size : maxIndex + bin_size]maxIndex = np.argmax(spectrum)xdata = np.arange(len(spectrum))p0 = [maxValue, maxIndex, 3]coeff, var_matrix = curve_fit(gauss, xdata, spectrum, p0=p0)A, mu, sigma = coefffwhmData[columnIndex] = 2 * sigma fwhmData_smooth = signal.savgol_filter(fwhmData, 80, 3)min = np.min(fwhmData_smooth)normalized = fwhmData_smooth / minreturn normalized
def calculate_score(fwhmData):return len(fwhmData) / np.sum(fwhmData)
def get_for_wavelength(fwhmData,wavelength,wavelength1=4000,wavelength2=7100):step = len(fwhmData) / (wavelength2 - wavelength1)index = math.floor((wavelength - wavelength1) * step)return fwhmData[index]
rc10_fwhmData = compute_fwhm_data(filename="data/RC10/SSC.fits",ref_wavelength_1_x=414,   ref_wavelength_2_x=1865,  ref_wavelength_1 = 4047,ref_wavelength_2 = 6300,
)step = (7000 - 4000) / len(rc10_fwhmData)
xdata = np.arange(4000, 7000, step)plt.figure(figsize=(16, 8))
plt.title("Longitudinal Chromatic Aberration")
plt.plot(xdata, rc10_fwhmData, label="RC10", color='gray')
plt.xlabel("Wavelength in Å")
plt.ylabel("FWHM / FWHM min")
plt.xlim(4000, 7000)
plt.ylim(0, 5)
plt.legend();print("score (the higher — up to 1.0 — the better):")
print(f"RC10 -> {calculate_score(rc10_fwhmData):.2f}")

👉更新:亚图跨际


http://www.ppmy.cn/ops/105704.html

相关文章

2024版最新渗透测试工具大全(非常详细)零基础入门到精通,收藏这一篇就够了

所有工具仅能在取得足够合法授权的企业安全建设中使用,在使用所有工具过程中,您应确保自己所有行为符合当地的法律法规。如您在使用所有工具的过程中存在任何非法行为,您将自行承担所有后果,所有工具所有开发者和所有贡献者不承担…

统计学习方法与实战——统计学习方法概论

统计学习方法概论 文章目录 统计学习方法概论前言章节目录导读 实现统计学习方法的步骤统计学习方法三要素模型模型是什么? 策略损失函数与风险函数常用损失函数ERM与SRM 算法 模型评估与模型选择过拟合与模型选择 正则化与交叉验证泛化能力生成模型与判别模型生成方法判别方法…

打卡第60天------图论

加油!尽管前面的道路很困难,但是依然要坚持下去✊。 在算法训练营我学到了很多东西,对于算法的方法来说真的是涨知识了,对于我一个非科班出身,半路转行的干IT的人来说真的给予了我很大的帮助。我会继续回头看代码随想录…

无人机之传感器篇

无人机的传感器系统是其实现自主飞行、导航、避障、目标识别和环境感知等功能的关键部分。以下是对无人机中常见传感器的详细解析: 一、主要传感器类型 GPS(全球卫星定位系统) 功能:提供无人机的位置和导航信息。 原理&#x…

Vulnhub:hacksudo search

靶机下载地址。下载完成后,在VirtualBox中导入虚拟机,系统处理器修改为2,网卡配置修改为桥接。 信息收集 主机发现 扫描攻击机同网段存活主机。 nmap 192.168.31.0/24 -Pn -T4 靶机ip:192.168.31.218 端口扫描 nmap 192.168…

HTTP协议到HTTPS的Java客户端改造

前言 由于安全原因,我们公司对外暴露的接口通过HTTP协议的方式在未来的某一天将被彻底关闭。 从那以后,外部客户在调用我公司的接口时就只能通过HTTPS协议。 本篇文章的目的就是安全的指导外部客户的客户端开发人员或者有类似需求的Java开发人员&…

【TheMisto.AI】Flux最强线稿模型实际效果测评(附安装方法)

原文链接:【TheMisto.AI】Flux最强线稿模型实际效果测评(附安装方法) (chinaz.com) 不知道有没有小伙伴去测试一下哈,上一篇文章用的都是官方提供的参考图,经常关注Flux的小伙伴也知道那些ControlNet买家秀和卖家秀基…

Express Response类深度解析:全面掌握属性与方法,提升开发效率

在Express框架中,Response对象是一个非常重要的组成部分。它代表了HTTP响应,并提供了一系列的方法和属性来操作这个响应。本文将深入全面地讲解Express的Response类,包括其所有属性和方法,并通过代码示例进行说明。 Response对象…

GPT-4 vs LLaMA3.1:核心技术架构与应用场景对比

目录 前言 一、GPT-4 的核心技术架构 1.1 Transformer 结构概述 1.2 GPT-4 的主要组成部分 1.3 GPT-4 的创新与改进 二、LLaMA3.1 的核心技术架构 2.1 模型概述 2.2 LLaMA3.1 的主要组成部分 2.3 LLaMA3.1 的创新与改进 三、GPT-4 和 LLaMA3.1 的主要差异 3.1 模型规…

python学习11:函数/方法的定义与调用

# 1)定义和调用 # def 方法名([参数]): # 方法体 # [return 返回值]# 调用 方法名([参数]) 案例1:没有返回值 # 案例1:没有返回值 def login_info():username xxxpwd 123456print(我的信息是:用户名{username},密码是…

【Redis】Redis 典型应⽤ - 缓存 (cache)

Redis 典型应⽤ - 缓存 cache 什么是缓存使⽤ Redis 作为缓存缓存的更新策略1) 定期⽣成2) 实时⽣成 缓存预热, 缓存穿透, 缓存雪崩 和 缓存击穿关于缓存预热 (Cache preheating)关于缓存穿透 (Cache penetration)关于缓存雪崩 (Cache avalanche)关于缓存击穿 (Cache breakdown…

centOS如何查看并放行防火墙3306端口

在CentOS系统中,您可以使用firewall-cmd命令来检查防火墙规则,确认是否放行了3306端口。以下是步骤和示例代码: 首先,确保您的系统上安装了firewalld服务。如果未安装,请使用以下命令安装: sudo yum insta…

From Man vs Machine to Man + Machine

From Man vs. Machine to Man Machine: The Art and AI of Stock Analyses 论文阅读 文章目录 From Man vs. Machine to Man Machine: The Art and AI of Stock Analyses 论文阅读 AbstractConstruction and Performance of the AI AnalystMethodologyThe Performance of Ana…

xml转txt,适应各种图片格式,如jpg,png,jpeg,PNG,JPEG等

xml转txt,适应各种图片格式,如jpg,png,jpeg,PNG,JPEG等 import xml.etree.ElementTree as ET import os import cv2 import numpy as np import globclasses []def convert(size, box):dw 1. / (size[0]…

Ajax的$.post(),$.get(),$.ajax 方法请求都是默认异步请求

. p o s t ( ) , .post(), .post(),.get(),$.ajax 方法请求都是默认异步请求,所以如果要用到返回的结果,则要考虑异步问题,不然可能会变量出现未定义之类的情况。 改成同步的方法: …

Training language models to follow instructionswith human feedback

Abstract 将语言模型做得更大并不会自动提高它们遵循用户意图的能力。例如,大型语言模型可能会生成不真实、有毒或对用户不有帮助的输出。换句话说,这些模型并未与用户对齐(aligned)。本文展示了一种通过人类反馈来对齐语言模型与…

yolo训练策略--使用 Python 和 OpenCV 进行图像亮度增强与批量文件复制之(图像增强是按梯度变化优化)

接上个博客: https://blog.csdn.net/weixin_43269994/article/details/141753412优化如下函数: def augment_and_copy_files(base_folder, image_filename, num_augmentations2, vgain_range(1, 1.5), process_labelsTrue, process_annotationsTrue):b…

[B站大学]Zotero7教程

参考资料: https://www.bilibili.com/video/BV1PSvUetEQX 2. 账号注册与同步 本节内容参考zotero中文社区文档:https://zotero-chinese.com/user-guide/sync 2.1 数据同步 首先注册一个Zotero官方账户。登录账号密码。 2.2 文件同步 按照文档,推荐…

ElasticSearch学习笔记(三)RestClient操作文档、DSL查询文档、搜索结果排序

文章目录 前言5 RestClient操作文档5.4 删除文档5.4 修改文档5.5 批量导入文档 6 DSL查询文档6.1 准备工作6.2 全文检索查询6.3 精准查询6.4 地理坐标查询6.5 复合查询6.5.1 相关性算分6.5.2 布尔查询 7 搜索结果处理7.1 排序7.1.1 普通字段排序7.1.2 地理坐标排序 前言 Elast…

小程序中使用page-container来做弹窗

<page-container></page-container>&#xff1a;小程序自带弹窗组件&#xff1b; 值描述show是否显示容器组件&#xff1b;overlay是否显示遮罩层&#xff1b;position弹出位置&#xff0c;可选值为 top bottom right center&#xff1b;round是否显示圆角