/*
*上一篇,我们讲到了如何对图像进行处理
*接下来,我们聊聊如何对图像进行识别
*没看过上一篇的同学,请微信关注:simplemain
*/
====图像的识别 ====
我们已经拿到一个个的字符的图案了,现在要做的,就是如何把这些图案转化成计算机可认知的二进制编码。因为这次只涉及到英文和标点,所以实际要做的,就是将图案转化为asc码。
识别的方法有非常多,接下来我给大家介绍一下我用的几种方法。为了使得识别率提升,一般还会有其他更好或者更有效的方法,如果这里没讲述到,请大家谅解~
对于每一个待识别的字符图案,都有他自己的特征(比如:i长的很瘦,O长的很圆,T横竖都有等等),识别的时候,就可以借助他们的特征,从而抽丝剥茧的把他们认出来。
问:那具体怎么做呢?
答:我们将多种字体的所有英文和标点生成标准图案,再将待识别的图案和他们进行比对,看这些待匹配的图案和哪个标准图案最像,那就能找出最有可能的asc码。
那就开始吧!
步骤一:生成模板图案
我们用多种常见字体,将所有英文和标点生成标准图案。这里简称模板图案。为什么要多种字体呢?因为对于同一个字符,在不同字体下,可能长的完全不一样,比如同样是gal,不同字体效果如下:
拿到这些标准模板图案以后,我们就有了如下图的这些位图:
但是有了这些位图还不够,我们还要做一些其他工作,来保证后面的匹配工作能正常进行。接下来我们就看看还要做什么工作。
步骤二:归一化 +记录meta信息
我们将模板图案先去掉上下左右空白的背景,让前景图案顶格。接着再统一宽高,将图案压缩或拉伸为p*q大小的图案(比如都压缩或者拉伸到50像素*50像素),这样我们才能很好比对。说白了,就是大家都用统一的标准,否则你穿XL号的衣服,我穿S号的,我们的衣服就根本没有可比性。
好了,有了统一的比对标准,是不是一切就都好了呢?
大家一看这种问题,基本就可以条件反射的判定:回答是否定的(就跟读书那会儿做判断题一样^_^)。那问题出在哪儿呢?
有些图案做了归一化以后,就失真了,比如逗号[,]和引号[’],去掉周围的白边,最后就都长成如下图像了: