当前位置:网站首页>[Chapter 10: a website digital verification code recognition based on moment invariants matlab deep learning practical application case]

[Chapter 10: a website digital verification code recognition based on moment invariants matlab deep learning practical application case]

2022-06-22 01:49:00 Haibao 7

【 The first 10 Chapter Digital verification code recognition based on moment invariants MATLAB In depth study of practical application cases 】

GUI The interface effect is shown in the figure
 Insert picture description here
 Insert picture description here
 Insert picture description here
 Insert picture description here
 Insert picture description here
Subfunction
invmoments.m file

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);

Subfunctions GetAllFiles.m

function fileList = GetAllFiles(dirName)

dirData = dir(dirName);    
dirIndex = [dirData.isdir]; 
fileList = {
    dirData(~dirIndex).name}'; 
if ~isempty(fileList)
    fileList = cellfun(@(x) fullfile(dirName,x),... 
        fileList,'UniformOutput',false);
end
subDirs = {
    dirData(dirIndex).name}; 
validIndex = ~ismember(subDirs,{
    '.','..'}); 
for iDir = find(validIndex)              
    nextDir = fullfile(dirName,subDirs{
    iDir});   
    fileList = [fileList; GetAllFiles(nextDir)];
end

end

function
GetDatabase

function GetDatabase()
files = dir(fullfile(pwd, 'images/*.jpg'));
for i = 0 : 9
    foldername = fullfile(pwd, sprintf('Databse/%d', i));
    if ~exist(foldername, 'dir')
        mkdir(foldername);
    end
end
h = waitbar(0,' Dealing with , Please wait ...', 'Name', ' Generate template library ');
steps = length(files);

for fi = 1 : length(files)
    filename = fullfile(pwd, sprintf('images/%s', files(fi).name));
    [pathstr, name, ext] = fileparts(filename);
    name = name(1:4);
    Img = imread(filename);   
    hsv = rgb2hsv(Img);
    h = hsv(:, :, 1);
    s = hsv(:, :, 2);
    v = hsv(:, :, 3);
    bw1 = h > 0.16 & h < 0.30;
    bw2 = s > 0.65 & s < 0.80;
    bw = bw1 & bw2;
    Imgr = Img(:, :, 1);
    Imgg = Img(:, :, 2);
    Imgb = Img(:, :, 3);
    Imgr(bw) = 255;
    Imgg(bw) = 255;
    Imgb(bw) = 255;
    Imgbw = cat(3, Imgr, Imgg, Imgb);
    Ig = rgb2gray(Imgbw);
    Ibw = im2bw(Ig, 0.8);
    sz = size(Ibw);
    cs = sum(Ibw, 1);
    mincs = min(cs);
    maxcs = max(cs);
    masksize = 16;
    S1 = []; E1 = [];
    flag = 1;
    s1 = 1;
    tol = maxcs;
    
    while s1 < sz(2)
        for i = s1 : sz(2)
            s2 = i;
            if cs(s2) < tol && flag == 1
                flag = 2;
                S1 = [S1 s2-1];
                break;
            elseif cs(s2) >= tol && flag == 2
                flag = 1;
                E1 = [E1 s2];
                break;
            end
        end
        s1 = s2 + 1;
    end
    Ibw = ~Ibw;
    Ibw = bwmorph(Ibw, 'thin', inf);
    for i = 1 : length(S1)
        Ibwi = Ibw(:, S1(i):E1(i));
        [L, num] = bwlabel(Ibwi);
        stats = regionprops(L);
        Ar = cat(1, stats.Area);
        [maxAr, ind_maxAr] = max(Ar);
        recti = stats(ind_maxAr).BoundingBox;
        recti(1) = recti(1) + S1(i) - 1;
        recti(2) = recti(2);
        recti(3) = recti(3);
        recti(4) = recti(4);
        Ibwi = imcrop(Ibw, recti);
        rate = masksize/max(size(Ibwi));
        Ibwi = imresize(Ibwi, rate, 'bilinear');
        ti = zeros(masksize, masksize);
        rsti = round((size(ti, 1)-size(Ibwi, 1))/2);
        csti = round((size(ti, 2)-size(Ibwi, 2))/2);
        ti(rsti+1:rsti+size(Ibwi,1), csti+1:csti+size(Ibwi,2))=Ibwi;
        Ti{
    i} = ti;
    end
    for i = 1 : length(Ti)
        namei = name(i);
        outfilenamei = fullfile(pwd, sprintf('Databse/%s/%s_%d_%d.jpg', namei, namei, fi, i));
        imwrite(Ti{
    i}, outfilenamei);
    end
    fprintf('\n Disposed of %d------%d\n', fi, length(files));
    h = waitbar(fi / steps);
end
close(h) ;

database
 Insert picture description here
Case image
 Insert picture description here
 Insert picture description here
 Insert picture description here
 Insert picture description here
High accuracy
 Insert picture description here

Download the full source code of this article [ link –> Portal ]

原网站

版权声明
本文为[Haibao 7]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/173/202206220101378347.html