
偏色

首先我们先来了解下什么是偏色。
我不太清楚在字库领域“偏色”这俩字是怎么来的,但个人猜测这要么是翻译错误要么就是当初最早用这个词的人对这个词理解有误,后来用的时间长了大家都这么叫就不好改了。
百度百科对这个词的解释:
抓拍的照片、反射光线会照亮场景、不正确的显影、打印、扫描等方式都会使图像产生偏色现象。由于光线式角度的问题、拍摄的照片有可能存在偏色的情况。
百度百科


大概意思就是说因为各种外部因素干扰导致成像的最终显示颜色与实际颜色不符,产生了偏差。
最常见的就是有的显示器或者手机屏幕坏掉了,就会导致屏幕上的画面不管是啥都偏向红黄蓝三原色中的任一方。
说了这么多,就是想说:字库中的偏色不应该是这个词,很多新手在刚开始接触字库的时候估计也会很蒙,比如我当初就没弄明白偏色到底是个啥?
到底应该怎么取色才能做出识别率更高、识别速度更快的字库?

我们先要把字体分为两种:标准字体和艺术字体。
标准字体呢,就不推荐大家使用字库了,用 OCR 光学文字识别就行。虽然谷歌中文字库不咋地,但是百度云识别对中文支持的就挺不错的,免费额度应该勉强够用。
具体方法请看开发文档文字识别分类下的这俩函数。

今天我们要重点聊的还是游戏界面中的艺术字,比如下面图片蓝色框中这种。

最典型的艺术字就是顶部的恭喜升级,其次是装备强化这些加了描边的。
按钮【我知道了】其实可以说是标准字体,但是因为字体颜色变化,也可以当成艺术字处理。
按照文字颜色构成、是否描边、背景色复杂程度、文字颜色与背景色对比强度,可以将艺术字做一下分类。
文字颜色是否描边背景色复杂程度文字颜色与背景色单一无描边颜色单一对比强烈,非同色系 同色渐变有描边颜色复杂属于同色系 多种颜色
标红色的情况下会让字库识别难度增加,尤其是当文字颜色与背景色属于同一色系时。

字库

即使不属于上面说的复杂场景,仅仅是文字颜色同色渐变,就会难倒很多新手,主要还是由于上面说的对偏色概念理解有误造成的。
如果把偏色换成下面的描述,估计很多人就明白了:
偏色就是构成文字主体的主要颜色的范围。
二值化就是把符合这个范围内的颜色处理成黑色,其他颜色处理成白色。
注意这里有三个重点,一是主体,意味着不要选描边;二是主要,意味着并不是取得颜色越多越全效果越好;三是范围,偏色是根据你取的构成字体主要颜色计算出来的一个颜色范围,只要在这个范围内的颜色就会被二值化处理成文字预览,在实际找字的时候也是如此。
下面还是以图片为例:

如果只看左边的图片,我们会觉得【门前论理】这几个字除了描边,主要就是白色,看起来很好识别的样子。
但通过放大镜观察会发现在白色与红色描边与之间还有 1 像素的中间色,我们在制作字库时就千万不能选这个中间色,因为它和主体颜色白色差别太大,完全不属于同一个色系,反而是和界面上其他的字体颜色很接近。
但是如果只取白色,字库二值化预览几乎识别不出来完整的文字。

这就需要我们再看看那些预览缺失的部分有没有与白色接近的颜色,并不断地计算新的偏色预览二值化效果。
经过几次尝试,我得到了下面这样的结果。

很多新手可能会觉得:这个预览字看上去好单薄,会不会找不到?
还是上面那句话,预览效果过于清晰完整,意味着偏色范围更大,反而会对找字造成太多的干扰。
如果你要找的字不是由多个颜色构成的,一定要保证颜色列表中的颜色不要出现差距太大的,颜色都是一个色系甚至肉眼分辨不出来最好。


下面我们再来看看如果字体是由多个颜色构成的情况:

这种呢我建议只取其中一个和背景色对比强烈的色系,预览效果不追求完整,差不多就行了。

还有一种比较棘手的情况就是文字和背景色属于同色系,这就要求取色列表更加精准。


尤其是这里的【需】字简直就是一团和背景色十分接近的模糊颜色,这时候千万不能取构成笔画的边缘像素的颜色,只能取中间点接近主体颜色的部分。

总结

二值化预览效果越清晰,并不代表字越好找,除非你遇到的是文字主体颜色单一、没有描边、背景色单一并且与文字主体颜色对比强烈的情况,否则预览约清晰意味着找到文字的几率越低。
打个比方就是你手里有一张照片,要从仓库里找一个类似的物品出来。手里的参照物越清晰,找到目标的难度就越高,找到目标需要的时间也就越长,甚至可能找不到。
如果你手里的照片是个简笔画,只是个球形,那不管你找到的是篮球足球乒乓球都符合;但如果你拿的照片是一个五彩斑斓的玻璃球的照片,就算给你一筐玻璃球,你也得对比半天图案是不是一样才能找得到。
和找色的精度差不多一样的道理,而我们要做的就是在精确度和效率之间找到平衡点。