星轨银河堆栈合成 (Star Trails & Galaxy Stacking)
将多张连续拍摄的星空长曝光照片合成为星轨图或纯净银河图像。
适用场景
- 星轨合成 (trails):将多张星空照片叠加,生成星星拖尾的星轨效果
- 银河纯净合成 (clean):通过中值堆栈降噪,去除噪点、热像素、飞机轨迹和卫星,得到纯净的银河图像
- 间隔拍摄序列处理:适用于赤道仪跟踪或固定机位连续拍摄的星空序列
依赖
- Python 3.8+
- opencv-python-headless
- numpy
pip install opencv-python-headless numpy
使用流程
命令行调用
python scripts/star_trails.py <img1> <img2> [img3...] [-o OUTPUT] [--mode {trails,clean}] [--align] [--clahe]
参数说明
| 参数 | 说明 | 默认值 |
|---|---|---|
img1 img2 ... |
输入星空图像路径(至少2张) | 必填 |
-o, --output |
输出图像路径 | star_trails_result.jpg |
--mode trails |
星轨模式:lighten blend 叠加 | trails |
--mode clean |
纯净银河模式:median 堆栈降噪 | — |
--align |
启用帧间对齐(修正轻微位移) | 不启用 |
--clahe |
在 clean 模式下应用 CLAHE 对比度增强 | 不启用 |
使用示例
# 合成星轨
python scripts/star_trails.py IMG_001.jpg IMG_002.jpg IMG_003.jpg -o star_trails.jpg --mode trails
# 对齐后合成纯净银河
python scripts/star_trails.py IMG_*.jpg -o clean_galaxy.jpg --mode clean --align --clahe
技术要点
Lighten Blend 原理 (星轨模式)
对于所有输入帧的每个像素位置,取所有帧在该位置的最大值(最亮值):
result[x,y] = max(frame_1[x,y], frame_2[x,y], ..., frame_n[x,y])
原理:星星在每帧中位置不同,取最大值后每帧的星星都会保留在结果中,形成拖尾轨迹。星空背景本身较暗,取最大值不会显著改变背景。
暗帧减法:取所有帧每个像素位置的最小值作为"暗帧"估计(模拟相机传感器的暗电流/热噪声基准),从结果中减去以获得更干净的星轨。
Median 堆栈降噪原理 (纯净银河模式)
对于所有输入帧的每个像素位置,取所有帧在该位置的中值:
result[x,y] = median(frame_1[x,y], frame_2[x,y], ..., frame_n[x,y])
原理:中值对异常值不敏感。稳定信号(银河、恒星)在多帧中保持一致,取中值后得以保留;而随机噪点、热像素、飞机/卫星轨迹只出现在少数帧中,被中值运算排除。
适用条件:适用于赤道仪跟踪拍摄(银河位置不变)或多帧对齐后的固定机位拍摄。
ECC 对齐算法
--align 参数启用 Enhanced Correlation Coefficient (ECC) 图像对齐,使用 cv2.findTransformECC 进行亚像素级平移估计:
- 模式:
MOTION_TRANSLATION(仅平移,适合固定机位拍摄的微小位移) - 标准:
TERM_CRITERIA_EPS | TERM_CRITERIA_COUNT,1000次迭代,1e-6精度 - 对齐失败时自动回退使用原图,不中断处理流程
CLAHE 对比度增强
--clahe 参数在 clean 模式下对合成结果应用 Contrast Limited Adaptive Histogram Equalization (CLAHE),提升银河细节的对比度和可见性。
注意事项
输入要求
- 至少需要 2 张输入图像
- 所有图像分辨率必须一致(宽高完全相同)
- 建议使用间隔拍摄的连续星空照片(固定机位、固定参数)
- 支持 JPEG 和 PNG 格式,建议 RAW 转 JPEG 后导入
拍摄建议
- 星轨模式:不需要赤道仪,三脚架固定机位即可,每张曝光 20-60 秒,间隔尽量短
- 银河模式:建议使用赤道仪跟踪,或启用
--align参数,曝光时间根据焦距和赤道仪精度决定 - 帧数越多效果越好:星轨建议 30+ 张,银河堆栈建议 10-20 张
内存与性能
- 脚本采用内存高效的处理方式:逐帧读取、float32 累加器处理
- 图像数量较多时(100+ 张),处理时间会相应增加
- 对齐模式会显著增加处理时间(每帧需要 ECC 迭代计算)
文件结构
star-trails/
├── SKILL.md # 技能描述文件(本文件)
└── scripts/
└── star_trails.py # 星轨银河合成脚本