预处理:
1.二值化:是图片变成只有0和255像素值得黑白图片
2.膨胀:胖一圈
3.腐蚀:瘦一圈
去燥:
1.噪点: 直接判断周围8个点有没有像素,没有就置为白
2.噪线:(和背景颜色不一样的噪线)用颜色不一样这点做文章,eg.噪线是绿色,验证码是黑色,则因为黑色的RGB值相差不大,但是绿色的G值比R,B值都大,所以很容易就可以去除
3.噪线:(和背景颜色差不多一样的噪线)但是噪线的所有像素点的RGB值一样,就用连通域方法用CFS将噪线颜色的连通域都染出来再去除
***个人心得:
对于去燥这一步工作,我认为还是应该对于不同的验证码有不同的造作方法,在破解的工作中要多观察图片,只要找出特点,就可以击破,不论是外观颜色上的,还是内部RGB值方面的,还是相邻像素方面的。
分割:
1.直接颜色填充:对于不黏连的验证码,包括注入填充区域算法,种子填充算法,扫描线填充算法,边填充算法等
2.平均切分:适用于验证码中每一个字符的大小较均匀,对于部分粘连,也可颜色填充和平均切分结合起来使用
3.投影切分法:就是在某一方向上计算每一行的像素点个数通常采用垂直投影和水平方向的投影,也可颜色填充和投影结合起来使用,投影适用于通过噪线相粘连的验证码,也就是连接处的像素点较少,若链接紧密,投影法不可行。
4.字符特征切分法:eg.8,B都是有上下两个闭环结构的字符, M在下方加上基线后有左右结构两个闭环,该方法特征难以归纳,破解过程繁琐,针对性强。
5.粘连: 单字符分割后,直接用CNN进行识别,效果较好
6.移位: 单字符分割后,直接用CNN进行识别,效果较好
7.扭曲: 单字符分割后,直接用CNN进行识别,效果较好
识别:
1.模板匹配:(利用一些分类器)
***KNN
***SVM
2.机器学习:
***卷积神经网络CNN
***BP神经网络:BP算法有两部分组成:信息的正向传输,误差的反向传播,在正向传播过程中信息从输入层输入,输入到某隐层,该隐层计算后将该隐层输出向后面的隐层传输,逐层传向输出层,每一层的输出作为后面隐层的输入。最后的输出层的输出结果和期望的输出比较,计算误差,在反向向前传播,通过网络将误差信号沿原来的连通通路反传回来修改各层神经元的权值直至达到期望的目标。