app+csdk+docs: 修正上一轮最近邻2×的退化(颗粒/边沿台阶)——照片改为从160×120单级6×放大(官方ImageViewer同款),实时缓冲与csdk回退为插值2×;实测冷区|dx| 0.76×官方(更平滑),119单测全绿
This commit is contained in:
@@ -566,3 +566,36 @@ JPEG 只能解释一部分:把我们那张(960×720 q95,202 KB)按 640×
|
||||
- `RenderPipeline.upscaleNearest`(构造参数,实时会话 = true;默认 false 保持 C 参考字节不变);
|
||||
- csdk:`mag160c_render.h/.c` 增加 `upscale_nearest`(两个 demo 默认 1),同一段注释说明依据;
|
||||
- 单测新增 `UpscaleParityTest`(两种模式必须不同 + 最近邻必须逐行复制),共 **119 全绿**。
|
||||
|
||||
## 15. 用户复核:"我们颗粒更大,尤其高低温分界边沿"——是我上一轮 14 节的最近邻改错了
|
||||
|
||||
用户:"我们的app图片看起来像素颗粒更大啊,特别是高低温分界的边沿,是不是啥滤波没开"。
|
||||
|
||||
### 15.1 眼睛 + 数据都指向同一个原因
|
||||
|
||||
17:51 同尺寸对照(左=我们 17:06 版,右=官方):**我们的边沿是 2 个传感器像素一级的台阶**,
|
||||
官方是**单像素**的平滑过渡——即 14 节里"最近邻 2×"把有效分辨率砍半了(相邻两个传感器像素被复制成同一个值)。
|
||||
定量复核:冷区 `|dx|` 比值 1.27(我们更毛)。
|
||||
|
||||
反汇编/源码再核对:官方 `ImageViewer` 除 `new Paint(1)` 外还有 `PaintFlagsDrawFilter pfd_`
|
||||
(会**加上** FILTER_BITMAP)→ 它的显示/保存链其实是**从 160×120 单级滤波放大**
|
||||
(`cachedbmp_` 640×480),既没有交错也没有块状复制。
|
||||
|
||||
### 15.2 修法(照片改为单级放大;实时缓冲回退到插值)
|
||||
|
||||
- **照片**:`PhotoSaver.SENSOR_W/H` 改为 **160×120**(原生传感器网格,与探针/NUC 同一空间),
|
||||
`RENDER_SCALE = 6`(输出仍是 960×720);调用方交入的帧改为**精确取样** 320×240 缓冲的偶数像素
|
||||
(`o[2x]=src[x]`,所以偶数采样就是原始像素,无重采样误差)。→ **单级 6× 双线性**,
|
||||
传感器像素级颗粒、无交错、无块状。
|
||||
- **实时缓冲**:`upscaleNearest` 回退为 **false**(插值 2×):最近邻会把颗粒变成 2 传感器像素、
|
||||
边沿出现粗台阶,是可见的退化。csdk 的两个 demo 同步回退为 0,选项保留并写明测得的教训。
|
||||
|
||||
### 15.3 实测(同场景:我们 17:54 / 官方 17:56,翻转对齐 r=0.994)
|
||||
|
||||
| 指标 | 官方 | 我们(新) |
|
||||
|---|---|---|
|
||||
| 索引分位 p5/25/50/75/95 | 21 / 48 / 76 / 90 / 224 | 18 / 47 / 78 / 92 / 224 |
|
||||
| 冷区 `\|dx\|` | 4.32 | **3.29(比值 0.76)** |
|
||||
|
||||
→ 修好后我们**比官方更平滑**(官方因最近邻 4× 反而有 4 像素大块,见 x8 放大对照图)。
|
||||
单测 119 全绿(`PhotoNucMappingTest` 更新为 160×120→960×720 的新策略)。
|
||||
|
||||
@@ -489,6 +489,28 @@
|
||||
"未连接"分支显示,正常出图时用户看不到任何反馈)。
|
||||
- [x] 单测 66 → **76 项全绿**;debug + release(R8) 双构建通过;APK 已更新。
|
||||
|
||||
## 用户反馈修复 第三十六轮(2026-10-06 夜,"我们颗粒更大"→ 照片改单级放大,实时回退插值)
|
||||
|
||||
用户:"我们的app图片看起来像素颗粒更大啊,特别是高低温分界的边沿,是不是啥滤波没开。"
|
||||
|
||||
### 定位
|
||||
|
||||
14 节的"最近邻 2×"把**相邻两个传感器像素复制成同一个值** → 有效分辨率砍半 →
|
||||
边沿变成 2 像素台阶(用户看到的"颗粒更大")。再核对官方源码:`ImageViewer` 还有
|
||||
`PaintFlagsDrawFilter pfd_`(**加** FILTER_BITMAP)→ 官方是从 160×120 **单级滤波放大**。
|
||||
|
||||
### 修法
|
||||
|
||||
- 照片:`PhotoSaver.SENSOR_W/H = 160×120`、`RENDER_SCALE = 6`(输出仍 960×720),
|
||||
调用方交入偶数采样的精确 160×120 帧 → **单级 6× 双线性**(无交错、无块状);
|
||||
- 实时:`upscaleNearest = false`(回退插值 2×,颗粒回到 1 传感器像素);
|
||||
- csdk:两个 demo 的 `upscale_nearest` 回退 0,选项保留并写明教训。
|
||||
|
||||
### 实测(同场景 17:54 vs 17:56,对齐 r=0.994)
|
||||
|
||||
分位 18/47/78/92/224 vs 官方 21/48/76/90/224;冷区 `|dx|` **3.29 vs 4.32(0.76)**——
|
||||
修好后我们比官方更平滑。单测 119 全绿(`PhotoNucMappingTest` 已按新策略更新)。
|
||||
|
||||
## 用户反馈修复 第三十五轮(2026-10-06 夜,"低温区条纹更多":定位为我们自造的 2× 交错并修复)
|
||||
|
||||
用户:"你依据反汇编出来的东西进行修复"。
|
||||
|
||||
Reference in New Issue
Block a user