【验证码识别】基于不变矩算法实现数字验证码识别附matlab代码
1 简介
网络给人们提供丰富资源和极大便利,同时,互联网的安全性问题也随之而来。验证码正是加强网络系统安全性的常用手段。不变矩方法在目标识别领域的应用较为广泛,但在验证码识别方面的应用却不多。论文以数字验证码为例,先对验证图像进行去噪、定位、归一化等预处理,然后计算待识别数字的不变矩,再进行特征匹配,得到识别结果。以Matlab软件为开发平台来进行设计实现及仿真,并构建相应的GUI界面。实验结果表明利用不变矩在识别数字验证码方面具有可行性。在教学过程中应用该成果,可以使学生强化基本理论,培养学生的创新能力和理论联系实际的能力。
2 部分代码
% 提取不变矩特征数据
function res = invmoments(x)
x = double(x);
[M,N,~] = size(x);
[X,Y] = meshgrid(1:M, 1:N);
X = X(:);
Y = Y(:);
x = x(:);
m.m00 = sum(x);
m.m10 = sum(X.*x);
m.m01 = sum(Y.*x);
m.m11 = sum(X.*Y.*x);
m.m20 = sum(X.^2.*x);
m.m02 = sum(Y.^2.*x);
m.m30 = sum(X.^3.*x);
m.m03 = sum(Y.^3.*x);
m.m12 = sum(X.*Y.^2.*x);
m.m21 = sum(X.^2.*Y.*x);
xbar = m.m10/m.m00;
ybar = m.m01/m.m00;
e.hp11 = (m.m11 - ybar*m.m10) / m.m00^2;
e.hp20 = (m.m20 - xbar*m.m10) / m.m00^2;
e.hp02 = (m.m02 - ybar*m.m01) / m.m00^2;
e.hp30 = (m.m30 - 3*xbar*m.m20 + 2*xbar^2*m.m10) / m.m00^2.5;
e.hp03 = (m.m03 - 3*ybar*m.m02 + 2*ybar^2*m.m01) / m.m00^2.5;
e.hp21 = (m.m21 - 2*xbar*m.m11 -ybar*m.m20 + 2*xbar^2*m.m01) / m.m00^2.5;
e.hp12 = (m.m12 - 2*ybar*m.m11 -xbar*m.m02 + 2*ybar^2*m.m10) / m.m00^2.5;
res(1) = e.hp20 + e.hp02;
res(2) = (e.hp20 - e.hp02)^2 + 4*e.hp11^2;
res(3) = (e.hp30 - 3*e.hp12)^2 + (3*e.hp21 - e.hp03)^2;
res(4) = (e.hp30 + e.hp12)^2 + (e.hp21 + e.hp03)^2;
res(5) = (e.hp30 - 3*e.hp12)*(e.hp30 + e.hp12)*...
((e.hp30 + e.hp12)^2 - 3*(e.hp21 + e.hp03)^2)+...
(3*e.hp21 - e.hp03)*(e.hp21 + e.hp03)*...
(3*(e.hp30 + e.hp12)^2 - (e.hp21 + e.hp03)^2);
res(6) = (e.hp20 - e.hp02) * ((e.hp30 + e.hp12)^2-...
(e.hp21 + e.hp03)^2)+...
4*e.hp11*(e.hp30 + e.hp12)*(e.hp21 + e.hp03);
res(7) = (3*e.hp21 - e.hp03) * (e.hp30 + e.hp12) * ...
( (e.hp30 + e.hp12)^2 - 3*(e.hp21 + e.hp03)^2) +...
(3*e.hp12 - e.hp30)*(e.hp21 + e.hp03)*...
(3*(e.hp30 + e.hp12)^2 - (e.hp21 + e.hp03)^2);
3 仿真结果
4 参考文献
[1]赵杰. 不变矩特征在数字验证码识别中的应用[J]. 舰船电子工程, 2018, 38(6):3.