把一张含百万级像素的照片压缩成几十个拼豆色号,还原度却依然很高——这背后是两步关键算法在起作用。
第一步:颜色量化(把百万色压到几十色)
一张 58×58 的图纸只有 3364 个格子,不可能保留照片里的所有颜色。颜色量化算法会在保留视觉观感的前提下把颜色「聚类」:常见的做法有中位切分法(Median Cut)和 K-Means 聚类。它们的效果类似——把色彩空间里挨得近的颜色归为一堆,每堆选一个代表色。人眼对大面积色块的颜色变化不敏感,所以压缩后整体观感几乎不变。
第二步:色号匹配(把代表色映射到拼豆色号)
量化后的代表色还不一定能和拼豆色号对上——拼豆的色板是固定的,比如 MARD、Artkal 各有一两百个色号。这一步要做的是「最近颜色搜索」:在色板里找出与代表色在感知上最接近的那一颗。
判断「接近」不能简单算 RGB 欧氏距离,因为 RGB 距离和人眼感受并不一致(人眼对绿色通道的变化更敏感)。更准确的做法是换到 CIELAB 色彩空间,用 ΔE 色差公式(如 CIEDE2000)衡量两种颜色的感知差异,取 ΔE 最小的色号。豆画的色号匹配就是基于 CIEDE2000 实现的,这也是自动生成的图纸看起来「颜色很准」的原因。
第三步:去重与平滑
直接匹配经常会产生大量「只差一点点」的色号,比如同一个色块里同时出现 M102 和 M103。去重策略会把这类近邻色号合并到同一种,既减少买豆成本,也让成品表面颜色更干净。部分生成器还会对图纸做轻微的平滑处理,避免噪点式的杂色格子。
了解了原理,你就能理解为什么同一张图在不同色板下生成的图纸会不一样——色板越全、色差算法越好,还原度越高。下次生成图纸时,不妨切换不同色板对比一下效果。