像素图使用少量固定颜色时,需要把输入色映射到某个调色板项。最接近必须先有明确的距离定义,同分也需要稳定规则,否则不同位置或重复处理可能得到不一致的编号。
下面把一个游戏界面或模拟规则拆成可复查的记录。每组输入独立给出,先确认单位、先后次序和边界,再核对结果。它不依赖具体游戏的隐藏参数,读者可以直接挑选几步手工复算。
输入与规则
五种调色板颜色和十个输入色都使用三个零到十五的整数通道。距离定义为三通道差的平方和,不开平方;选择距离最小的调色板编号,同分取较小编号。这里只作数值练习,不改变调色板本身。
调色板编号零到四[[4, 11, 15], [9, 9, 12], [3, 12, 6], [4, 14, 2], [3, 8, 1]] 十个输入色[[9, 9, 12], [3, 11, 7], [8, 0, 15], [14, 0, 1], [5, 6, 6], [1, 6, 9], [7, 9, 4], [12, 7, 12], [7, 2, 1], [10, 2, 6]]
逐步记录
输入色[9, 9, 12],对五个调色板项的距离平方依次[38, 0, 81, 150, 158],选编号1,输出色[9, 9, 12]。最小距离0,只用数值比较,不把编号大小当成亮度。
输入色[3, 11, 7],对五个调色板项的距离平方依次[65, 65, 2, 35, 45],选编号2,输出色[3, 12, 6]。最小距离2,只用数值比较,不把编号大小当成亮度。
输入色[8, 0, 15],对五个调色板项的距离平方依次[137, 91, 250, 381, 285],选编号1,输出色[9, 9, 12]。最小距离91,只用数值比较,不把编号大小当成亮度。
输入色[14, 0, 1],对五个调色板项的距离平方依次[417, 227, 290, 297, 185],选编号4,输出色[3, 8, 1]。最小距离185,只用数值比较,不把编号大小当成亮度。
输入色[5, 6, 6],对五个调色板项的距离平方依次[107, 61, 40, 81, 33],选编号4,输出色[3, 8, 1]。最小距离33,只用数值比较,不把编号大小当成亮度。
输入色[1, 6, 9],对五个调色板项的距离平方依次[70, 82, 49, 122, 72],选编号2,输出色[3, 12, 6]。最小距离49,只用数值比较,不把编号大小当成亮度。
输入色[7, 9, 4],对五个调色板项的距离平方依次[134, 68, 29, 38, 26],选编号4,输出色[3, 8, 1]。最小距离26,只用数值比较,不把编号大小当成亮度。
输入色[12, 7, 12],对五个调色板项的距离平方依次[89, 13, 142, 213, 203],选编号1,输出色[9, 9, 12]。最小距离13,只用数值比较,不把编号大小当成亮度。
输入色[7, 2, 1],对五个调色板项的距离平方依次[286, 174, 141, 154, 52],选编号4,输出色[3, 8, 1]。最小距离52,只用数值比较,不把编号大小当成亮度。
输入色[10, 2, 6],对五个调色板项的距离平方依次[198, 86, 149, 196, 110],选编号1,输出色[9, 9, 12]。最小距离86,只用数值比较,不把编号大小当成亮度。
至少包含一次调色板原色输入用于核对零距离,其他映射逐候选比较,并保留稳定同分规则。
复核方法和适用范围
逐通道记录误差,再独立验证选中项没有比任何其他候选更大的总平方误差。距离也可展开为输入平方和加候选平方和减两倍内积,与直接平方差计算相互核对。
通道数值距离并不自动等于人眼感受到的色差,本例没有颜色空间校正或透明度。量化会丢失信息,多个输入可能映射到同一个颜色;结果编号相同并不说明原输入本来完全一样。
练习时可以只改动一项输入,预测从哪一步开始出现变化,再逐步比较。空状态、数值零和无法判断要分别记录;不要为了让最后结果一致而忽略中途的偏差。边界与同分约定同样属于规则,复核时应一并保留。
