15 叠回原画效果的验收
✅ 已验证 · 工具 code/gauge.py(第 32 章)
叠完之后,怎么知道它像不像原画?三层判据,从硬到软。
一、硬判据:是不是真画的
看 output/.../strokes.jsonl:
| 门槛 | 现在 | |
|---|---|---|
写像素(set_pixels / ground)次数 | ≤ 2(只有背景铺黑) | 2 |
| 落笔次数 | > 0 | 80,669 |
旧路线这两个数是 55 / 0。这一条不过,后面的都不用看。
二、画面判据:边、层次、放大指纹
全部归一到 2508px 宽再量(第 3 章第二条),以源图为锚(第三条):
| 判据 | 门槛 | 源图 | 现在 |
|---|---|---|---|
| 梯度 p99 | ≥ 源图的 85% | 41.6 | 36.9(89%) |
| 8 级量化色数 | ≥ 源图的 55% | 2900 | 1840(63%) |
| 8px 阶梯指纹 | < 源图 | 6.19 | 0.78 |
阶梯指纹是「8px 周期的方向抖动」——1x 像素格放大 8 倍留下的签名。bicubic ×8 是 2.23,本流程 0.78。这是叠层这一部的主结果:放大痕迹没了。
三、像不像:低频 likeness
两边都降到 256px 宽再算 PSNR。临摹只该在这个尺度上像——逐像素对上是复刻的判据,不是临摹的。
| dB | |
|---|---|
| 门槛 | ≥ 30 |
| 现在 | 33.57 |
外加一条:全图最暗像素 (0,0,0)。origin 的背景是纯黑;早期版本铺的是 (6,5,8),黑发灰,肉眼能看出来。
两处固定的 1:1 特写
数字之外,每次出图必看两块(8x 坐标):
眼部: (3900, 1400) – (4700, 2000)
发丝边缘: (1500, 2000) – (2300, 2600)
把它们和参考画的 1:1 特写并排放。判成败的一句话:看不出「一边是放大的、一边是画的」就算过。
左:参考画(人类,2508px)。右:本流程 8K 成品,同为 1:1。差距还在——参考画有收尖的发丝和线稿,我们没有。这是第五部的事。
判据变差时怎么追
| 症状 | 先看 |
|---|---|
| 写像素 > 2 | job_trace.py 里谁调了 set_pixels |
| 阶梯指纹上升 | 有没有哪一步又走了升采样(upsample.upsample_image 不该出现在流程里) |
p99 掉,但 stages/01-tree.png 的 p99 没掉 | 笔画在软化边——第 17 章的两个坑 |
p99 掉,01-tree.png 也掉 | 矢量化参数(smooth / eps)或 α 解错 |
| 低频 likeness 掉 | 背景(有没有铺满、有没有外推)、或整体色偏 |
| 最暗像素不是 (0,0,0) | 背景平涂的颜色取错(整条扫线一个颜色) |