LUNAE / ENGINEERING REPORT
数据拍摄 2025-09-08 · 审计基准 2026-08-31 · 本地单文件版
Lunar eclipse · three-route implementation

月食三路线:原始数据审计与路线一工程复盘

这不是一组普通的 1,466 帧延时素材,而是 296 个时间点、以 5 张为主的包围曝光序列。路线一已经用 ARW 内嵌 PreviewImage 跑通,并针对亮度跳闪、误分组和月面角度漂移完成第二轮修正。

Sony ARW × 1,466约 1 小时 57 分PreviewImage 演示路线本地实测实现审计
路线一在全食阶段的月球居中画面
路线一 v2 · surface-lock
296 帧,月心固定,并用月海与环形山纹理校准滚转角。
Executive readout

先说结论

路线一已经证明“只用 ARW 内嵌 JPEG 也能把几何流程跑通”。但这批原片的结构决定了:正式质量版本不应继续把每组只挑一张 JPEG 当终点,而应先做路线三,再把 HDR master 交给路线一或路线二。

1,466ARW 原片;总量 125.1 GB,全部来自同一 Sony ILCE-7RM3。
296真实时间点;不是 1,466 个动画帧。279 组正好为 5 张。
20 s时间点间隔的众数与中位数;254/295 个间隔精确为 20 秒。
≈12 EV典型单组最短与最长快门跨度,明确构成强包围曝光。
路线一 v2 的核心结果:亮度全局最大/最小比从 3.982× 压到 1.206×;相邻帧亮度跳变的 P95 从 1.178× 降到 1.017×;角度残差 P95 从 0.751° 降到 0.406°。296 帧均有可用月缘测量,最终没有再用时间插帧掩盖错误分组。
初段带明显亮月牙的月食画面
00 · 明亮月牙与暗红本影并存
全食阶段红月
100 · 全食红月,暗部仍可辨识
生光阶段月食画面
200 · 生光,动态范围再次拉大
序列尾段亮暗月面
295 · 尾段;曝光候选不足更明显

以上为演示路线的 16-bit PNG 输出抽帧。亮度模式是 presentation,不代表月食各阶段的真实相对辐亮度。

Chapter 01 · source audit

Windows 原始数据到底是什么

统计来自 ARW 清单、EXIF 与 Windows 源目录只读盘点。时间以相机记录的北京时间解释;由于 EXIF 时间只有整秒精度,同一包围组内存在大量同秒记录。

目录实测

规模与设备

1,466 个 ARW,125.106 GB(116.514 GiB),平均每张 85.34 MB,文件大小仅在 85.28–85.50 MB 间波动。相机型号均为 ILCE-7RM3,RAW 尺寸均为 8000×5320。

EXIF 清单

拍摄时段

从 2025-09-08 00:32:38 到 02:29:41,跨度 1:57:03。1,466 张只有 732 个不同的整秒时间戳,说明不能靠“时间戳是否相同”直接定义时刻。

元数据缺口

物理测光边界

快门和 ISO 可用,但当前 manifest 中光圈与焦距为 0。再叠加 PreviewImage 已经过相机色调曲线、白平衡与压缩,路线一只能做观赏性一致化,不能声称完成绝对辐亮度标定。

拍摄节奏:主体是 20 秒周期,中间有明确停顿

296 个周期的中位时间
00:32:3801:30 左右最长停顿02:29:41
开场约 6 分钟2–70 秒不等,像是构图、参数和自动序列启动期。
主体时段20 秒是众数与中位数;全部 295 个相邻间隔中,254 个正好为 20 秒,占 86.1%。
尾段约 11 分钟多次改为 60 秒节奏;另有 ≈6 分 27 秒、2 分 1 秒和 1 分 30 秒等停顿。
对延时摄影的含义:原始时间并不完全等间隔。现在的视频把 296 个有效时间点按 12 fps 等速播放,因此是“按有效时刻顺序压缩”的演示,不是严格保持真实时间比例的可变帧率影片。若要科学展示过程速度,应按时间戳重复帧或生成可变时基。

包围曝光证据:279 组是完整五连拍

曝光感知重新分组
5 张/组
279 · 94.3%
4 张/组
14 · 4.7%
3 张/组
2 · 0.7%
9 张/组
1 · 0.3%

重新分组后没有 1–2 张的伪组;总和仍严格为 1,466 张。

为什么可以确认是 bracket,而不是随机改曝光

  • 五张一组的比例达到 94.3%,且快门按固定非单调顺序重复。
  • 典型组最短与最长快门相差约 12 EV,相邻档位约 3 EV。
  • 下一周期常在 20 秒后重复同一曝光值;“重复 EV”是比固定秒数更可靠的组边界。
  • 4 张、3 张和 9 张属于不完整或变体周期,不能自动假定为丢文件。
出现次数组内快门顺序跨度解释
133 组1/40 → 1/320 → 1/5 → 1/2500 → 1.6 s≈12 EV全场最常见的五档周期;非单调顺序本身就是相机包围序列的强特征。
68 组1/60 → 1/500 → 1/8 → 1/4000 → 1.0 s≈12 EV较亮阶段的另一套五档梯级。
42 组1/80 → 1/640 → 1/10 → 1/5000 → 0.8 s≈12 EV尾段常见梯级;有少数组缺一档。
2 组1/5 → 1/40 → 1.6 s → 1/320 → 13 s≈12 EV13 秒长曝光正是最初被固定时间窗错误拆出的来源之一。

曝光与预览特征

1,466 行 EXIF
43不同快门值;从 1/6400 秒到 13 秒。
65.6%ISO 3200:961 张;其次 ISO 800 为 364 张。
1616×1080ARW 的 PreviewImage 尺寸;演示版按需抽取 772 张。
100%全部 1,466 条记录都识别到 PreviewImage 标签;原始 ARW 未被改写。
数据最重要的结构性结论:路线一当前“每组取一张”的做法只利用了约五分之一的曝光信息。剩余曝光并不是冗余,而是路线三恢复亮月牙高光和地影红月暗部的关键输入。
Chapter 02 · implemented

路线一现在怎样工作

当前版本是 PreviewImage 演示管线:优先验证“分组、月缘跟踪、中心/角度配准、亮度中心化、一次重采样和 QC”能否闭环。正式 RAW 线性开发尚未接入。

01 · INGEST扫描 ARW 与 EXIF原生 TIFF/IFD 解析器读取 PreviewImage;保留源文件、时间、快门、ISO 与尺寸。
02 · GROUP曝光感知分组时间阈值加入快门开放预算;重复 EV 在至少三张后开启新周期。
03 · SELECT输出源与几何向导分离中位曝光初选;长曝光找月缘,必要时提升更有信号的渲染候选。
04 · LIMB月缘检测与稳健圆拟合log/CLAHE、径向梯度峰、RANSAC 圆和局部精修,不使用亮度质心。
05 · TRACK轨迹与回退预测、局部跟踪、定期全局检查;同一 bracket 共享几何。
06 · PHOTOMETRY亮度中心化在线性化 sRGB 上测量扣除局部天空后的月盘积分亮度,每时刻只乘一个标量。
07 · SURFACE LOCK月面角度配准圆心/半径归一后用 SIFT + RANSAC 估计相邻帧滚转。
08 · TRANSFORM合并成一次变换平移与旋转写成一个仿射矩阵;只做一次 Lanczos 重采样。
09 · CROP公共无黑边画布对全部旋转后的有效区域求安全交集,最终 566×616。
10 · OUTPUTPNG、MP4 与 QC296 帧 16-bit PNG,12 fps MP4 共 24.67 秒,并保存 CSV/JSON。

核心算法 A:月球几何不是“找亮斑”

296 / 296 可用

从月缘而不是亮度质心出发

食相变化会让明亮区域从圆盘一侧移动。亮度质心必然跟着亮月牙漂移,而真实月心没有移动。因此检测器只把前一时刻当先验,在预测半径附近沿多条径向剖面寻找月缘梯度,再用 RANSAC 与稳健损失拟合圆。

pₖ(u) = c + (r + u)[cos φₖ, sin φₖ]
edgeₖ = arg max |∂P(pₖ(u)) / ∂u|
(c, r) = robust_circle_fit({edgeₖ})

测量审计

  • 251 帧从同一 bracket 的长曝光几何向导转移圆;31 帧直接跟踪。
  • 10 帧在定期全局检查中重初始化;4 帧直接重初始化。
  • 平滑半径约 78.27–87.05 px(预览尺度)。
  • 圆轨迹残差中位数约 0.091 px,P95 约 0.212 px,最大约 0.425 px。

核心算法 B:亮度中心化怎样消除跳闪

presentation 模式

测量“月球信号”,不是整帧直方图

  1. 把 PreviewImage 的 sRGB 反变换为近似线性 RGB。
  2. 在 1.15r–1.45r 环带取局部天空中位数。
  3. 在 0.88r 内测量月盘并逐像素扣除天空。
  4. 截掉信号最高的 2%,避免少数饱和高光控制整盘。
  5. 以全场对数中位数为目标,上限 0.12;每帧 RGB 同乘一个标量。

为什么没有逐帧直方图匹配

直方图匹配会把月影边界、红色和局部对比度也改掉。单一标量只改变整体曝光感,不改变帧内食相结构。最终增益为 0.187×–40.27×,中位数 0.757×,没有帧触及 100× 安全上限。

仍然是观赏性中心化。Preview JPEG 的相机曲线不可逆;40× 增益也会放大暗部噪声。正式版应让 bracket HDR 先提供高信噪 master。

核心算法 C:只对齐圆心不等于锁住月面

surface-lock

月面滚转估计

先把每帧月盘缩放到 256×256 的标准 patch,只保留内侧 78% 圆盘并做 CLAHE。SIFT 提取月海与环形山关键点,KNN 比值筛选后,由 RANSAC 部分仿射模型求相邻帧小角度,再把可靠增量逐帧累积。

matches = SIFT(t−1) ↔ SIFT(t)
good if d₁ < 0.76·d₂
A = RANSAC_affine_partial(good, threshold=1.7 px)
Δθₜ = atan2(A₀₁, A₀₀)
θₜ = θₜ₋₁ + accepted(Δθₜ)

角度审计

  • 295 个相邻对中 278 对通过独立 SIFT 审计。
  • 应用角度范围 −9.21° 到 +0.69°,尾帧累计约 −6.42°。
  • 输出残余相对旋转:中位数 0.063°,P95 0.406°,最大 1.005°。
  • 中位误差原本就低(旧版 0.059°);真正改善的是相机碰动的长尾。
Chapter 03 · engineering lessons

遇到的问题,以及绕过的弯路

用户看到的“亮度大跳”和“角度没对齐”都不是单点参数问题,而是分组、渲染源、测光指标和旋转观测之间的耦合。下面按根因排列。

01

固定 4 秒分组把长曝光拆成独立动画帧

13 秒和 4 秒快门天然会超出固定组窗口。旧版得到 300 个“时刻”,其中有 4 个单张组和 2 个双张组;实际应是 296 组。曾对两个明显闪帧做线性时间插值,但那只是在遮掩症状。最终改为“快门开放预算 + 相邻曝光预算 + 重复 EV 边界”,伪组归零,时间修复归零。

02

月盘亮度分位数会被食相面积欺骗

旧指标先减低分位再取高分位,明亮月牙面积变化会让同一物理曝光得到完全不同的代表值;多档 PreviewImage 切换后更严重。最终改为局部天空环带扣底 + 月盘积分信号 + 高光 2% 截尾。

03

几何向导与渲染源混在一起

长曝光最容易找完整月缘,但不一定适合输出;中位曝光适合保高光,却可能让暗红月面几乎无信号。现在把检测用长曝光向导和最终渲染候选分离,同组共享几何。

04

平滑增益并不总能消闪

规格建议平滑 log 增益,这对线性 RAW 很合理;但 Preview JPEG 的非线性色调和同组多档源切换会让平滑误差延续到多帧。演示版改成每时刻显式中心化;正式 RAW/HDR 路线可恢复平滑物理增益。

05

相关搜索把移动地影边界当成月面纹理

高通互相关容易追着明暗边界跑,出现交替的小角度;对累计角再平滑还会改变一阶差分。现在用内盘 SIFT、RANSAC 和置信筛选,只插值失败的相邻测量,不平滑可靠累积角。

06

离线 Windows 缺工具,不应阻断演示

Windows 上没有可直接依赖的 ExifTool/FFmpeg 组合,因此实现了只读 TIFF/IFD 内嵌 JPEG 提取,并用 OpenCV MP4 编码回退。该解析器已用真实 Sony ARW 与 ExifTool 输出做字节一致性核对。

v1 → v2:同一评价口径下的改进

远程完整帧审计
亮度全局 max/minv1 · 3.982×v2 · 1.206×↓ 69.7%
相邻亮度跳变 P95v1 · 1.178×v2 · 1.017×↓ 13.7%
最大相邻亮度跳变v1 · 2.385×v2 · 1.203×↓ 49.6%
角度残差 P95v1 · 0.751°v2 · 0.406°↓ 45.9%
最大角度残差v1 · 1.948°v2 · 1.005°↓ 48.4%
时间点 / 修复帧v1 · 300 / 2v2 · 296 / 0根因修复
不要过度解读这些数字:亮度指标评价的是演示版“月盘视觉一致性”,并非天体测光;角度指标只评价相邻帧月面滚转,不评价锐度、拖影或地影边界的自然演化。
Chapter 04 · not implemented

路线二:月食运行轨迹合成图

这条路线不把月亮居中,而是保留它在天空中的真实位置,把多个食相叠加到一张背景图。最大风险不是“怎么贴月亮”,而是不能在相机被碰动时错误地把天空运动也对齐掉。

Route 02 · design ready

目标产物

一张背景稳定、月亮沿真实轨迹排列的合成图;每个食相没有矩形天空边界,也不会因 Lighten/Maximum 把不同曝光的天空一起叠进去。

01选背景帧地景清晰、天空噪声低,并让背景帧本身也是一个最终食相。
02修正相机坐标固定机位用恒等变换;碰动时只在地景 ROI 上做 AKAZE/ORB + RANSAC。
03按空间间距选食相不是机械等时间;两月盘距离需大于半径和的 1.15–1.5 倍。
04提取月球增量在月球外环带拟合 RGB 天空平面 B=a+bx+cy,只保留 F=I−B。
05辐亮度 Alpha 合成羽化圆盘边缘,在背景原坐标加回 αF,并检查重叠和越界。

背景坐标模型优先级

  1. 相机固定:Hₜ = I,保留原始月心坐标。
  2. 有稳定地景:只在建筑、山体或地景 ROI 匹配;先相似变换,再仿射,最后才考虑单应。
  3. 无地景且相机移动:第一版停止并要求人工控制点;不能用星点对齐,因为会消掉地球自转形成的天空轨迹。

月球提取与合成

B(x,y) = a + bx + cy        # 局部天空
F(x,y) = I(x,y) − B(x,y)    # 月球增量
α(d) = 1 − smoothstep(r−f, r+f, d)
Cnew(x) = Cold(x) + α(x)·F(x)

这比整层 Lighten/Maximum 更稳,因为不会复制每张源图的天空底色、云层渐变和矩形裁切边界。

当前数据的特别风险:现有月心轨迹图呈多次折返和跳线,说明机位在拍摄中被重新构图或碰动。路线二不能直接拿当前原始月心连线当真实天球轨迹,必须先确认是否存在可用地景 ROI;若原始画面纯天空,则需要人工控制点或第二版天文解算。
Chapter 05 · not implemented

路线三:同一时刻 bracket HDR / 曝光融合

这是最应该优先补齐的路线。它把每组 3–9 张曝光合成一张线性 master,同时保住明亮月牙和地影内红月,从根源上降低路线一的 40× 暗部增益与 Preview JPEG 跳闪。

Route 03 · highest priority

两个输出模式

radiance:输出 float32 EXR/TIFF,作为路线一、二的正式输入;mertens:直接生成观赏性曝光融合图。第一版优先 radiance,因为后续还能统一色调映射。

01读取 bracket_id以可编辑 manifest 为准;自动分组只提建议,当前 296 组已验证。
02线性 RAW 开发固定白平衡、关闭 auto-bright 和 gamma,统一为 float32 线性 RGB。
03选择参考曝光综合未饱和比例、噪声底、纹理和拖影,不默认选择第一张。
04圆心粗配准每组通常只允许平移;显著缩放/旋转应标成抖动或焦距变化。
05亚像素平移共同有效月盘上先相位相关,再 ECC Translation 精修。
06曝光比例标定EXIF 的 t·ISO/N² 作先验,在共同未饱和像素上稳健拟合单一比例。
07有效掩码与权重排除黑场、饱和、低信噪、运动异常和月缘不稳定区。
08稳健辐亮度合并按噪声与中间曝光权重加权,像素级 MAD 剔除云和错位。
09去鬼影超过噪声/MAD 的像素权重归零;大片薄云锁到参考曝光。
10输出与 QC保存 HDR master、对齐曝光、权重/饱和/去鬼影掩码和预览。

曝光标定与加权合并

eᵢ ∝ tᵢ · ISOᵢ / Nᵢ²
sᵢ = robust_fit(Pref ≈ sᵢ·Pᵢ | Ωvalid)
Rᵢ(x) = sᵢPᵢ(x)
wᵢ(x) = mᵢ(x)·q(zᵢ) / [σread² + βᵢRᵢ(x)]
L(x) = ΣwᵢRᵢ / (Σwᵢ + ε)

RGB 三通道不应分别自由拟合,否则容易改变月食颜色;用亮度或绿通道估计公共标量。

为什么它最适合这批数据

  • 典型 bracket 覆盖约 12 EV,让短曝保护亮月牙、长曝提供红月暗部信噪。
  • 同一周期只跨几秒,月球位移主要是小平移,模型比跨时刻配准简单。
  • 线性 RAW 后,曝光比例与噪声权重有物理含义,不再受 JPEG 曲线切换支配。
  • HDR master 仍可选择 physical 或 presentation 显示,但不混在数据层。
已知实现门槛:manifest 目前缺光圈值,需要从更完整 EXIF/厂商 MakerNotes 补回或把固定光圈写入项目配置;同时必须建立饱和阈值、黑电平与噪声模型。没有这些,仍能做 Mertens 观赏融合,但 radiance 的物理标定会变弱。
Chapter 06 · delivery order

建议的后续实现顺序

当前最值钱的工作不是继续微调 Preview JPEG 的亮度阈值,而是把已验证的分组与月缘模块接到线性 RAW 和 bracket master 上。

阶段交付物复用当前成果新增核心验收重点
P0 · 固化路线一 v2当前 MP4、PNG、CSV、QC 作为回归基线全部补时间比例模式与代表帧人工抽查亮度 P95、角度 P95 不退化;296 时间点稳定
P1 · 路线三 radiance每个 bracket 一个 float32 master分组、月缘、候选与 QCRAW 线性开发、亚像素平移、曝光标定、权重/去鬼影亮部不剪切、暗部 SNR 提升、无月缘双影
P2 · RAW 路线一由 HDR master 生成正式居中延时surface-lock 与一次重采样全局色调映射、10-bit/ProRes 编码红色不漂、噪声可控、物理/观赏模式分离
P3 · 路线二真实轨迹合成图月心与 HDR master地景 ROI 配准、空间选帧、天空平面与 Alpha 合成轨迹真实、无矩形边、无重叠与越界

保留两种亮度语义

physical 保留月食真实变暗;presentation 便于观看。二者必须在文件名、manifest 和报告中显式标记。

固定可比的回归集

保留初段亮月牙、全食红月、重新生光、长曝光周期、机位跳动与尾段不完整 bracket 等困难片。

先修数据模型

补齐光圈、白平衡、黑/白电平、位深与固定镜头参数;否则 HDR 曲线再漂亮,也无法清楚解释物理口径。

Chapter 07 · provenance

证据来源与适用边界

这份报告只使用本地规格、源目录盘点、manifest、实现代码和完整输出审计;没有把网络资料或天象时间表混入本次工程结论。

本地事实与实现证据

  • Windows 源目录只读盘点
    ARW 数量、总字节、单文件大小范围与文件时间。
  • manifest.csv
    时间戳、快门、ISO、相机、RAW 尺寸、PreviewImage 标签与旧版 bracket_id。
  • 曝光感知分组重算
    296 组、组大小分布、时间间隔与 43 种快门。
  • run_summary / output_level_audit / surface_lock_audit
    完整 Windows 输出的亮度与角度评价。
  • measurements/*.csv
    月心、半径、残差、亮度增益、渲染源与应用角度。

规格与不确定性

  • 《月食三路线本地实现规格》
    三条路线的目标、公式、回退策略、CLI 与验收标准。
  • 时间戳语义
    EXIF 只有整秒精度,长曝光时间可能表示开始或结束;因此使用曝光感知周期和中位时间。
  • Preview JPEG 测光限制
    相机色调曲线、降噪、白平衡和压缩不可逆;亮度审计只评价演示输出一致性。
  • 路线二坐标风险
    当前轨迹显示机位多次改变。无稳定地景时,需要人工控制点或后续天文解算。
最终判断:路线一已经“工程上可成”,用户指出的两个问题都找到了可量化的根因与修复;但这批素材真正的质量上限在路线三。先把 296 个包围曝光周期合成为线性 HDR master,再复用现有中心与角度锁定,是下一步最短、也最可靠的路径。