bead studio · 第三轮算法验证

2026-10-22 · 打开网页 · 逐组 CSV · 完整 JSON

本轮增加照片缩图选择,修复照片处理开关绕过结构优化的问题,并把选色、逐格匹配、候选复核统一为同一套空间目标。界面继续使用 bead studio,保留统一换色预览、应用、合并用量与撤销。

本轮实际改动

  1. 默认“清晰轮廓”:将有防振铃范围限制的抗混叠 Lanczos-3 与原线性光面积采样按 1:1 混合,再进行品牌色卡量化。混合在显示 RGB 中进行,是有意的视觉折中,不声称守恒原图光能。透明占位仍由原面积覆盖决定。
  2. 保留“忠实原图”:继续使用线性光面积采样。平滑渐变、密集纹理和星空可尝试此模式。“细节增强”仍可单独选择。
  3. 统一目标:颜色项为 ΔE00² + 0.5 × L*差²;每对水平或垂直相邻格增加 0.175 ×(输出明度梯度 − 输入明度梯度)²。候选色卡复核也包含梯度项。
  4. 联合精炼:逐格标签最多迭代 6 轮,变化很小时提前停止;再尝试每个色簇附近的 8 个真实品牌颜色,并重新优化标签。只接受完整目标不增加的更新。该算法是局部优化,不保证全局最优。
  5. 开关修复:抖色沿用照片的空间约束;清理从照片求解结果出发,仅接受不会增加局部完整能量的合并。不会再调用普通逐格匹配覆盖整张照片。清理可能因保护细节而不改变图纸。
  6. 性能:同一采样颜色的色差只计算一次,迭代直接查数值表;相邻梯度项转为明度的二次式,减少反复色差计算与字符串查询。
  7. 对照显示:原图对照改为无孔像素预览,避免圆豆孔洞让照片看起来发白。“拼豆”标签仍可查看实物外观近似。

13 张独立原图,104 组参数

原有 5 张照片,加上砖墙、草地、碎石、运动模糊时钟、硬币、月面、Hubble 深场、摩托车。每张测试 29、48、96、128 格 × 16、32 色,共 104 组;所有版本使用相同 MARD 221 色卡、完整放入、关闭抖色与清理。多尺寸是同一原图的重复比较,不能当成 104 张独立照片。全组用于开发和回归,未进行用户盲评。

版本面积参考 ΔE00 ↓SSIM / Lanczos ↑SSIM / Bicubic ↑边缘相关性 ↑孤立单豆数 ↓
上一版默认6.02870.84550.84850.8660661.6154
本版 · 忠实原图6.02930.84550.84850.8662661.4038
本版默认 · 清晰轮廓6.12680.85700.85680.8834669.4231

新默认相对上一版:Lanczos 参考的 SSIM 在 93 / 104 组提高,11 组降低;换用 Bicubic 参考仍有 91 组提高、13 组降低。平均 SSIM 从 0.8455 到 0.8570,边缘相关性从 0.8660 到 0.8834。代价是面积参考平均色差从 6.0287 到 6.1268,孤立单豆平均从 661.6 到 669.4。它倾向保留视觉轮廓,不是所有目标都同时变好。

为了避免只用同类缩图核评分,又增加线性光面积图作为 SSIM 参考:上一版 0.8846、新默认 0.8675,而本版“忠实原图”为 0.8847。参考本身会改变结论;选择“清晰轮廓”基于显示清晰度折中,不能把 SSIM 增幅解释为人工审美提升幅度。

逐图查看实际输出

原图
原图
上一版输出
上一版默认
本版忠实原图
本版 · 忠实原图
本版清晰轮廓
本版默认 · 清晰轮廓
版本ΔE00SSIM / LanczosSSIM / Bicubic边缘相关性孤立单豆

砖墙 / 29 格是当前最明显的 SSIM 退化例:约 −0.0306;Hubble 深场 / 128 格也出现约 −0.0284。两者仍可切回“忠实原图”。原图、上版和本版都以相同尺寸与色数比较,没有对本版单独挑有利参数。

处理开关回归

5 张原有照片 × 29、96 格 × 32 色。下表隔离缩图因素,均使用面积采样;比较开启不同开关时的平均 SSIM。

开关上一版本版
关闭抖色和清理0.88930.8895
仅清理0.84710.8895
仅抖色0.77140.8308
两项同时开启0.78120.8374

本版抖色仍低于不抖色的逐格 SSIM,因此继续默认关闭。它的目的在于用局部颜色分布表达渐变;能否接受额外单豆,需要结合图案和制作成本判断。

固定条件性能复测

13 张照片固定 96 × 96 / 32 色,每个版本先预热一次,再重复 5 次、轮换执行顺序。每张先取中位数,再对 13 张等权平均。仅统计 Node 转换函数,不含图片解码、Worker 通讯和绘制。

版本各原图中位数的平均
上一版默认188.8 ms
本版 · 忠实原图98.1 ms
本版默认 · 清晰轮廓147.8 ms

新默认从 188.8 ms 到 147.8 ms,约减少 21.7%;同样使用面积采样的本版约为 98.1 ms。实际浏览器和手机速度受设备、尺寸、色数影响。逐组单次耗时也保留在 CSV,但不把它当成稳定的设备性能结论。

没有采用的实验

自适应缩图试验受Kopf 等人的 Content-Adaptive Image Downscaling启发,是简化原型,未复现论文完整算法。双边增强参考Kyprianidis 与 Döllner 的结构保留滤波。上线的清晰缩图是独立实现的标准 Lanczos 与面积采样混合。

验证与复现

84 项自动校验通过:原有 62 项算法、15 项照片求解器与新缩图回归、7 项整色替换。包含 34 组CIEDE2000 金标准,完整/局部能量差一致、每轮迭代单调性、联合精炼、清理不绕过结构、抖色透明洞、灰度中性色、默认采样一致性、确定性与总量一致性。浏览器检查新模式、抖色和清理组合、对照显示、颜色预览/合并/撤销、JSON 导出与响应式布局。

node test.mjs
node validation/test-photo.mjs
node validation/test-edits.mjs

# macOS / Linux shell,13 图主回归
PHOTOS=astronaut,chelsea,coffee,camera,rocket,brick,grass,gravel,clock_motion,coins,moon,hubble_deep_field,motorcycle_left \
VARIANTS=v2,v3,balanced TAG=v3-final node validation/benchmark-v3.mjs
node validation/reference-v3.mjs v3-final
python3 validation/analyze-v3.py v3-final
node validation/performance-v3.mjs
node validation/benchmark-flags-v3.mjs
python3 validation/analyze-v3.py v3-flags

python3 -m http.server 8000 --directory dist

网页与 Node 校验无需 npm 安装;图像分析与报告需要 Python、NumPy、Pillow。源码保留上一版快照、原图、实验快照、逐组结果和复现脚本。SSIM 按亮度、11 × 11 高斯窗口、σ=1.5、K1=0.01、K2=0.03计算,裁去窗口边缘;具体定义参考Wang 等人的原始说明。有效图像区域采用 Pillow 缩图后的整数大小裁剪;程序本身使用连续坐标,非方图边缘仍可能有轻微取整差异。边缘相关性是亮度梯度归一化点积;单豆定义为上下左右没有同色相邻格,包括小特征和噪点,不能单独当成质量分。

数据与适用范围

照片取自scikit-image v0.19.3;授权和作者说明见官方数据文档与源码中的 THIRD_PARTY_NOTICES.txt。摩托车原图来自Middlebury 2014。品牌 HEX 来自Bitbead 社区近似色卡(CC BY 4.0),未校准实物材质。

仍没有人脸识别、语义分割或 AI 重绘;29 格中的小人脸无法完整保存。当前改动解决常规缩图、选色与结构匹配,不等于把任意复杂照片自动变成手工设计的像素画。建议小主体先裁切,再比较 96 或 128 格。不同色卡与更多用户照片仍需持续回归。