app+docs: 追查'官方更细腻'——定位到时域累积器(CAccumulator);实测证明差异在参考帧(FFC baseline)而非显示侧平滑;累积器已实现但默认关闭
This commit is contained in:
@@ -191,3 +191,60 @@ CFunctions::CalContrastOffsetedAutoEnlargeRange():
|
||||
2. 其它 11 个调色板索引与 Android 生成式的逐表核对(本轮已确认索引 2 一致)。
|
||||
3. 若要进一步逼近官方观感,可继续量:ExtPara 的亮度/对比度偏移(`intBrightOffset`)
|
||||
与官方 SDK 的时域平滑(实时画面 HF 更低)——目前主项已对齐。
|
||||
|
||||
## 9. 用户追问"官方还是更细腻"→ 找到遗漏的阶段:**时域累积器(CAccumulator)**
|
||||
|
||||
### 9.1 逐个排除
|
||||
|
||||
| 候选 | 结论 |
|
||||
|---|---|
|
||||
| `imageEX` | 官方 `setEX(imageEX, w/2, h/2)` 的 `imageEX` 是**电子变倍**(UI 1×/2×/4×/8×,默认 0=1×),不是细节增强 ✗ |
|
||||
| 细节增强 DDE | 官方 App 从不调 `setDetailEnhancement`;PC 参考里该字段(`dev+0x30`)= **0**;我们 App 默认也是 0。**实测把我们 DDE 开到 2 级后灰度空间噪声反而更大(0.76→0.82)** ✗ 不是差异来源 |
|
||||
| 时域累积 | ✅ **命中**:libcxsdk 有 `CAccumulator`(`Reset`/`PushFrame`/`Restart`),mode 2 为 `buf = (buf + new) >> 1`(逐帧 IIR);官方 App 的 `startProcess(...)` 里就传了 `baseLineAcc` 参数 |
|
||||
|
||||
### 9.2 实测(灰度域,已用调色板反解消除"色带斜率"干扰)
|
||||
|
||||
同一静止场景,各自连拍 3 张(间隔 1.5 s),图像区反解成灰度后统计:
|
||||
|
||||
| | 灰度空间 HF mean\|dx\| / mean\|dy\| | 灰度帧间噪声 1→2 / 2→3 |
|
||||
|---|---|---|
|
||||
| 官方 App | **0.34 / 0.26** | 4.12 / **1.80**(在收敛 ↓) |
|
||||
| 我们(pivot 已修) | 0.76 / 0.80 | 4.02 / 3.95(不收敛) |
|
||||
| 我们 + DDE 2 级 | 0.82 / 0.87(更差) | 4.35 / 4.52 |
|
||||
|
||||
两点结论:
|
||||
1. **官方的灰度画面比我们平滑约 2.3 倍**(0.34 vs 0.76)——这不是调色板/亮度能解释的;
|
||||
2. **官方的帧间噪声在收敛**(4.12→1.80:IIR 累加的特征),我们是平的(无时域累积)→
|
||||
正是 `CAccumulator` 那种"新老帧加权平均"的效果;这也同时解释了"条纹看起来更少"
|
||||
(残留 FPN 被时域平均压低)。
|
||||
|
||||
### 9.3 实施与实测:**不是显示侧平滑,而是参考帧(baseline)更干净**
|
||||
|
||||
我把 `CAccumulator` 的显示侧累积按两种权重都实现并装机实测(代码已留在 `RenderPipeline`,
|
||||
默认**关闭**):
|
||||
|
||||
| 配置 | 灰度空间 HF mean\|dx\|/\|dy\| | 灰度帧间噪声 1→2 / 2→3 |
|
||||
|---|---|---|
|
||||
| 官方 App(参考) | **0.34 / 0.26** | **4.12 / 1.80** |
|
||||
| 我们,累积关 | 0.76 / 0.80 | 4.02 / 3.95 |
|
||||
| 我们,显示侧累积 `>>2`(mode 4) | 0.18 / 0.20(过平滑 ✗) | **0.14 / 0.14**(几乎冻结 ✗) |
|
||||
| 我们,显示侧累积 `>>1`(mode 2) | 0.77 / 0.85 | 3.69 / 5.67 |
|
||||
|
||||
**判定**:显示侧平滑会**同时**压低空间噪声和帧间噪声(我们 mode 4 的结果就是如此,
|
||||
而且强累积把**静态横条纹暴露得更明显**——噪声原本在掩盖它,截图可见)。
|
||||
但官方的实测是"**空间噪声低 2.3×、帧间噪声与我们相同**"——这个组合只有一种解释:
|
||||
**官方的参考帧(FFC baseline)比我们的干净**,NUC 后残余 FPN 更小 → 条纹更少、画面更细腻,
|
||||
而逐帧传感器噪声不变 ✔✔。
|
||||
|
||||
**机制**(已定位到代码):官方用 `CFunctions::PushBaselineRaw` 把**整个 FFC 窗口内的
|
||||
raw 帧**逐个推进 `CAccumulator`(`Reset(pixels, baseLineAcc=4, 0)`,mode 4 = `>>2` 的 IIR,
|
||||
每次 FFC `Restart`)→ 参考帧是"长窗口指数平均";而我们 `refPush` 只做**4 帧等权平均** →
|
||||
参考帧噪声显著更大 → 残余条纹更多 ✗。
|
||||
|
||||
### 9.4 下一步(精确)
|
||||
|
||||
1. 把我们的参考帧收集改成与官方一致:FFC 窗口内**逐帧 IIR 累积**(权重 = `CAccumulator`
|
||||
的 mode,来自 BasePara2.baseLineAcc=4;窗口长度按官方 baseline 状态持续时长),
|
||||
`IrSession`/`RenderPipeline` 的黄金测试继续用文档化的旧配置(默认 4 帧等权)以免破坏 C 对齐;
|
||||
2. 装机用同一套灰度域指标回归:目标空间 HF ≈0.34(±20%)、帧间噪声保持不变;
|
||||
3. 之后同步 csdk(pivot + 温度链 + 参考累积)。
|
||||
|
||||
Reference in New Issue
Block a user