MichelsonEx 是一个基于 Python 和计算光学的实验分析工具。它从迈克尔逊干涉仪的录像中提取选定区域(ROI)的灰度时间序列,通过去趋势、汉宁窗和快速傅里叶变换(FFT)估计干涉条纹变化的主频率,并据此计算反射镜的微小位移。
当迈克尔逊干涉仪的一面反射镜移动时,往返光程差的变化量是反射镜位移的两倍。若观测到 N 个完整的条纹变化周期,则:
ΔL = N × λ / 2
ΔL:反射镜位移N:条纹变化周期数λ:激光波长
程序先计算主频率 f,再由视频时长 T 得到 N = f × T。
- 交互式框选视频中的 ROI
- 提取 ROI 平均灰度时间序列
- 线性去趋势和汉宁窗预处理
- FFT 主频率检测与三点抛物线插值
- 根据激光波长计算微米级位移
- 输出时域信号、频谱和测量摘要图
MichelsonEx/
├── main.py # 命令行入口和 ROI 选择
├── utils.py # 信号提取、FFT 和位移计算
├── visualization.py # 分析结果可视化
├── tests/ # 核心算法测试
├── requirements.txt # 运行依赖
└── requirements-dev.txt # 测试依赖
建议使用 Python 3.9 或更高版本。
git clone https://github.com/Pototoooo/MichelsonEx.git
cd MichelsonEx
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txtpython main.py <视频路径> [激光波长_nm]示例:
# 使用默认的 632.8 nm He-Ne 激光波长
python main.py interference_video.mp4
# 指定 532 nm 激光
python main.py interference_video.mp4 532运行后:
- 在弹出的第一帧画面中框选条纹清晰的 ROI。
- 按
Enter或空格确认;按C取消。 - 等待程序处理全部帧并输出主频率、周期数和位移。
- 查看当前目录生成的
measurement_result.png。
ROI 选择和结果图窗口需要图形桌面环境。
处理流程为:
视频 → ROI 平均灰度 → 线性去趋势 → 汉宁窗 → FFT → 主频率 → 周期数 → 位移
当前方法输出的是由条纹变化周期估计的位移量大小,不能判断运动方向。它更适合主频率稳定、条纹变化近似周期性且反射镜在分析时段内单向运动的实验。若运动发生反向、频率随时间明显变化或存在多个强频率分量,单一 FFT 主峰可能不能代表净位移。用于精密测量前,请结合已知位移进行标定并评估不确定度。
pip install -r requirements-dev.txt
pytest测试覆盖位移公式和合成周期信号的主频率估计。
本项目采用 MIT License 开源。