docs: 渲染差异定位到调色板(铁虹表):官方手机 App 用 Android SDK 运行时生成的表,我们用 PC 表;窗口/LUT-CDF 已逐行排除(附实测证据)
This commit is contained in:
@@ -102,3 +102,50 @@ CFunctions::CalContrastOffsetedAutoEnlargeRange():
|
||||
① LUT 的**平滑/CDF/pivot 细节**(Android 版 `HistDeRedundance` 的后续段尚未逐行核对),
|
||||
或 ② 官方 App 通过 `setEX`/`ExtPara` 设置的**亮度偏移**(`intBrightOffset`)等参数。
|
||||
这两处是下一轮的直接目标(继续用同一套"三 SDK 交叉 + 真机截图定量"的方法)。
|
||||
|
||||
## 7. 渲染差异的真正落点:**调色板(铁虹表)不同**
|
||||
|
||||
### 7.1 先排除的两项(都有反编译证据)
|
||||
|
||||
- **窗口**:Android `GrayEnlarge` + `CalContrastOffsetedAutoEnlargeRange` 与我们
|
||||
`statsWindow` 在对比度 c=0 时**逐字节一致**;官方 App 只调用
|
||||
`setAutoEnlarge(BasePara2.enlargeRange=8)`,没有对比度/亮度参数。
|
||||
- **灰度 LUT/CDF**:Android `HistDeRedundance` 的直方图与双向 CDF 段与我们 `lutRebuild`
|
||||
**逐行一致**(`0xFFC00000/span`、`>>20 & 0xffc`、`total>>12`、`iVar3=0x10000/step`、
|
||||
前后向各一张表、`+0x100/+0x200` 步进)——这段不是差异来源。
|
||||
|
||||
### 7.2 官方默认调色板 = 索引 2(和我们一样),但**表不同**
|
||||
|
||||
- 官方 App:`ImageViewer.java:383` / `DeviceController.java:91` →
|
||||
`setColorPalette(SharedPreferencesManager.getInt("paletteIndex", 2))` → 默认 **2(铁虹)**。
|
||||
- 判定方法:**"亮度 → 颜色"曲线在同一调色板下唯一**(与灰度分布/亮度水平无关),
|
||||
用它做检验(把像素代入调色板表,取同亮度最近项的色差):
|
||||
- 对照(我们自己的像素 → 我们的表):中位色差 **0.3**,83.6% 在 ±10 内;
|
||||
- 官方像素 → 我们的表:中位色差 **20.3**,只有 36% 在 ±10 内;最接近的调色板也不是 2 号;
|
||||
- 分亮度段看:亮度 32–96 时官方是**橙色**(R−B≈+90,R≈97–102/G≈44–77/B≈6),
|
||||
我们同一亮度是**紫/蓝**(R−B≈−33…+20)。
|
||||
- 原因(已定位到二进制):**我们索引 2 用的是 PC SDK 的表**
|
||||
(`OfficialTables.PALETTE256_ARGB`,来自 CoreSDKLib dev+0xb18),而官方**手机** App 用的是
|
||||
**Android SDK 运行时生成**的表 —— `CFunctions::SetColorPalette` case 2(libcxsdk @0x26c70)。
|
||||
上一轮把 case 0/1/3…10 的生成式移植成了 `VendorPalettes`,**case 2(铁虹)当时是拿 PC 表
|
||||
做"锚点校验"、没有移植生成式** → 两表在中间段不同,颜色/亮度观感因此不同。
|
||||
- "对比度更高"和"条纹更少"都由此解释:不同色带的亮度斜率不同(观感对比度不同),
|
||||
且官方色调更亮(暗端被抬起)→ 噪声与 FPN 在暗端不再显眼。
|
||||
|
||||
### 7.3 条纹本身的实测(数据层无差异)
|
||||
|
||||
| 指标 | 官方 | 我们 |
|
||||
|---|---|---|
|
||||
| NUC 帧 column-profile HF(PC 抓帧对照) | 7.81(0.63% of spread) | 7.20(0.63%) |
|
||||
| 渲染图平坦块列抖动(同刻截图,16×16 块) | 0.81–1.44 | 0.34–0.94 |
|
||||
| 渲染图 HF 能量 mean\|dx\|/mean\|dy\| | 2.80 / 3.67 | 2.71 / 3.47 |
|
||||
|
||||
→ 数据与降噪层面我们不差于官方;"条纹更明显"是**色调/亮度**的感知效应
|
||||
(官方实时画面 HF 更低 1.27 vs 2.92,也可能有 SDK 时域平滑参与)。
|
||||
|
||||
### 7.4 下一步
|
||||
|
||||
1. 移植 `SetColorPalette` **case 2** 的生成式(4 段线性,常量 0x75/0xbc/0x25/0xff/0x27/0x3b/0x1c3… 已在反编译中),
|
||||
替换 App 索引 2 的表;然后**同一分钟**内截两 App 实时图做"亮度→颜色"曲线回归(目标:中位色差降到控制组水平)。
|
||||
2. 顺带核对其余 11 个索引是否也应改用 Android 生成式(本轮 `VendorPalettes` 已覆盖 10 个)。
|
||||
3. 之后再按用户要求把验证过的改动同步进 `csdk`。
|
||||
|
||||
Reference in New Issue
Block a user