C++,python,热爱算法和机器学习
全部博文(1214)
分类: 网络与安全
2016-10-09 15:03:23
一、旋转倾斜
旋转倾斜的目的就是要提高识别的正确率,如果字符‘A’的模板是标准的,让一个横着的‘A’去训练肯定得不到正确的结果。不过怎么旋转呢?想要将每个字符都旋转到印刷体的角度那是很难的,也是不必要的,在这里采用的思想就是每次都旋转成为“最瘦的”。每次分割出来一个字符不管是横着的还是竖着的,都可以回到“最瘦”的角度。具体做法就是利用的旋转函数.
鉴于大部分验证码的旋转都不是特别夸张,所以处理时我让字符从旋转的范围定在顺时针-15度到15度,每次旋转一度,然后计算最左边第一个黑色像素到最右边第一个黑色像素的距离,取距离最小的角度最终让字符旋转那个角度。
可以看到分割出来的字符和原始的还是有点不太一样,由于测试用的验证码倾斜的并不明显,所以这里调整的也不是很明显。
二、归一化
由于验证码大小不一,图片上又大量背景像素,因此在进行最后一步识别的时候,还应该将验证码的大小缩放到固定的大小。在这里我是先得到字符像素的最小外包矩形,这样可以先把没有用的白色背景像素干扰取消掉。接下来就是将所有的字符都统一缩放到16*16的大小,这样最终得到的经过预处理的标准字符就可以开始训练识别了。