app+csdk+docs: 按反汇编定案修复——官方安卓路径无 160→320 插值级(ImageViewer 无 FILTER_BITMAP 最近邻放大),我们的双线性 2× 自造交错细纹;实测冷区细条纹比 1.16/1.29→1.00/0.93,csdk 同加 upscale_nearest,119 单测全绿
This commit is contained in:
@@ -528,3 +528,41 @@ JPEG 只能解释一部分:把我们那张(960×720 q95,202 KB)按 640×
|
||||
验证:临时把 `fpaTempFix = 0` 出两版,量冷区 HF(同样一张场景、同样流程)。
|
||||
2. band0 的 gain 插值本身与 PC 参考路径的差异(PC 端 NUC 逐字节一致,说明差异在
|
||||
Android 的 `GenerateVolatileLens` 重生成路径,而非表本身)。
|
||||
|
||||
## 14. 定案并修复:"低温区条纹更多"= 我们自造的 2× 交错图案(反汇编依据 + 实测验证)
|
||||
|
||||
### 14.1 依据(官方安卓路径没有插值级)
|
||||
|
||||
`ImageViewer`(官方 App,jadx 源码):
|
||||
- `this.bmpIr_ = Bitmap.createBitmap(fpaWidth, fpaHeight, ARGB_8888)`(**160×120**,即 SDK 直接给原生尺寸);
|
||||
- `this.paint_ = new Paint(1)` —— 只有 ANTI_ALIAS,**没有 FILTER_BITMAP**;离屏 `cachedbmp_ = Bitmap.createBitmap(640, 480)` 就用这些 paint 画进去(= **最近邻**)。
|
||||
|
||||
而我们的 `upscale2x`(移植自 PC SDK)是**双线性**:偶列取原样本、奇列取邻均值 →
|
||||
在传感器 Nyquist 上**人为造出一层"全幅/半幅"交错的细竖条纹**,且**只在色带最陡的暗/低温区**最扎眼。
|
||||
|
||||
### 14.2 实测验证(同场景 A/B,冷区=最冷 25% 像素)
|
||||
|
||||
| 冷区指标(照片,160×120 网格) | 修复前(双线性 2×) | 修复后(最近邻 2×) |
|
||||
|---|---|---|
|
||||
| 细尺度列条纹(去趋势宽 5)之比 | 1.16 ✗ | **1.00 ✔** |
|
||||
| 细尺度列条纹(去趋势宽 9)之比 | 1.29 ✗ | **0.93 ✔** |
|
||||
| 宽尺度列条纹(21 / 41)之比 | 0.90 / 0.87 ✔ | 0.82 / 0.72 ✔ |
|
||||
| 列剖面相关性(同一 FPN 图案) | +0.815 | +0.832 ✔ |
|
||||
| \|dx\| HF 之比 | 1.27 | 1.67(见 14.3) |
|
||||
|
||||
→ **用户报的"细条纹"就是这层自造交错**:去掉后细尺度条纹与官方一致(1.00/0.93),
|
||||
而真实 FPN(宽尺度)我们本来就比官方更轻。
|
||||
|
||||
### 14.3 顺带说明:HF 比值反而变大不是变差
|
||||
|
||||
重建后的 `|dx|` HF 从 1.27 升到 1.67,是因为**旧的交错本身就是一次列方向的平滑**
|
||||
(奇列被平均掉一半),它把这个指标"压低"了——去掉假平滑后露出的是真实逐像素噪声。
|
||||
即旧值 1.27 是"假图案 + 被平滑的噪声"的合成,新值是纯噪声。逐像素噪声的差异
|
||||
(同一场景、同一映射下)仍待查,方向已收窄到"照片路径的 JPEG/缩放"与"设备帧噪声"两者,
|
||||
方法学与数据见 §12/§13。
|
||||
|
||||
### 14.4 落地
|
||||
|
||||
- `RenderPipeline.upscaleNearest`(构造参数,实时会话 = true;默认 false 保持 C 参考字节不变);
|
||||
- csdk:`mag160c_render.h/.c` 增加 `upscale_nearest`(两个 demo 默认 1),同一段注释说明依据;
|
||||
- 单测新增 `UpscaleParityTest`(两种模式必须不同 + 最近邻必须逐行复制),共 **119 全绿**。
|
||||
|
||||
@@ -489,6 +489,29 @@
|
||||
"未连接"分支显示,正常出图时用户看不到任何反馈)。
|
||||
- [x] 单测 66 → **76 项全绿**;debug + release(R8) 双构建通过;APK 已更新。
|
||||
|
||||
## 用户反馈修复 第三十五轮(2026-10-06 夜,"低温区条纹更多":定位为我们自造的 2× 交错并修复)
|
||||
|
||||
用户:"你依据反汇编出来的东西进行修复"。
|
||||
|
||||
### 依据(官方安卓路径没有插值级)
|
||||
|
||||
`ImageViewer`:`Bitmap.createBitmap(fpaWidth,fpaHeight)` = **160×120** 原生尺寸,
|
||||
`new Paint(1)`(仅抗锯齿、**无 FILTER_BITMAP**)+ 离屏 640×480 → **最近邻**放大。
|
||||
我们的 `upscale2x`(PC SDK 移植)是双线性(偶列原值、奇列邻均值)→ 在传感器 Nyquist 上
|
||||
自造"全幅/半幅"交错细竖纹,恰好在暗/低温区最显眼。
|
||||
|
||||
### 实测(同场景 A/B,冷区=最冷 25%)
|
||||
|
||||
细尺度列条纹比(我们/官方):**1.16 / 1.29(双线性)→ 1.00 / 0.93(最近邻)** ✔;
|
||||
宽尺度(真实 FPN)0.87/0.90 → 0.72/0.82(我们本来更轻 ✔);列剖面相关性 0.815→0.832。
|
||||
`|dx|` HF 比 1.27→1.67 是**旧交错充当了列平滑**所致(假图案被去掉后露出真实噪声),
|
||||
不是变差;逐像素噪声差异的排查见 §12/§13。
|
||||
|
||||
### 落地
|
||||
|
||||
`RenderPipeline.upscaleNearest`(实时 true,默认 false 保 C 参考字节不变);
|
||||
csdk 增加 `upscale_nearest`(两个 demo 默认 1);新增 `UpscaleParityTest`;**119 单测全绿**。
|
||||
|
||||
## 用户反馈修复 第三十四轮(2026-10-06 晚,"低温区条纹更多":冷区噪声超预算 1.65×,定位中)
|
||||
|
||||
用户:"不对吧,还是有差别,我换了个场景,背景的低温区域在我们的app里面明显条纹更多"。
|
||||
|
||||
Reference in New Issue
Block a user