基于模糊数学原理新型贴近度计算的字符识别

本文介绍了一种基于模糊数学原理的新型字符识别方法,利用方格矩阵法和正态分布隶属函数来计算字符图像的贴近度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%基于模糊数学原理方格矩阵法新型贴近度计算的字符识别
%作者:Andy
%时间:2012-6-7

%说明:隶属函数为正态分布

%关键词:字符识别,模糊数学,方格矩阵法,新型贴近度

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

模糊数学是一门新兴学科,它已初步应用于模糊控制、模糊识别、模糊 智能化、聚类分析、模糊决策、模糊评判、系统理论、信息检索、医学、生物学等各个方面。在气象、结构力学、控制、心理学等方面已有具体的研究成果。然而模糊数学最重要的应用领域是计算机智能,不少人认为它与新一代计算机的研制有密切的联系。



(1)方格矩阵法

①将字母写在标准的长方形内,并将长方形均匀分成7×5个小方格。


②按每个小方格中线条出现的清晰程度给予适当的隶属度

得模糊关系矩阵为:


标准模式(矩阵)。

③模糊向量表示(模糊集合)


④按择近原则进行识别

设有两个文字向量:


计算数值

(不是贴近度或者说新的贴近度,用来衡量与的接近程度是有效的)

假设电脑收到文字向量

计算:

选出数值最大的,即最接近的并判为相应的字母(数字)。

实验结果:模糊算法不适合字符识别,在手写字体不太规范的时候,识别率不高

clear all
T_l=36;   %设置标准模式规格
T_h=20;   %
close all


%输入待识别图像
Pig=imread('C:\Documents and Settings\Administrator\桌面\Fuzzy字符识别\数字和字母图像\F\0436.bmp');


[m,n,z]=size(Pig);%获取图片大小信息
figure(1);
subplot(221);imshow(Pig);title('原始模板');
%Pig1=rgb2gray(Pig);%转换灰度图
%subplot(222);imshow(Pig1);title('灰度图像');
%Pigc=imcomplement(Pig1);%取反
%Pigc=imcomplement(Pig);%取反
Pigc=Pig;%取反
subplot(223);imshow(Pigc);title('取反后图像');
BW=im2bw(Pigc,graythresh(Pigc));%二值化
 %   imwrite(BW,'BW.jpg');
subplot(224);imshow(BW);title('二值图像');


%求解X方向的投影像素范围BW
[ix1,iy1]=xfenge(BW);
%求解y方向的投影像素范围BW
[jx1,jy1]=yfenge(BW);
%分割字符区域


imageampler=BW(ix1:iy1,jx1:jy1);
figure(12)
imshow(imageampler)


%pig=(1/255).*pig;        % 数值转换   1~0范围
imageampler=imresize(imageampler,[T_l-4,T_h-4],'nearest');


%[ix1,iy1]=xfenge(imageampler);
%求解y方向的投影像素范围BW
%[jx1,jy1]=yfenge(imageampler);
%分割字符区域


imageampler1=imageampler;   %(ix1:iy1,jx1:jy1);
imshow(imageampler1);


%扩展字符区域
[l k]=size(imageampler1);
imageampler1=double(imageampler1);clc;  %转为双精度型数值
figure(5)
imshow(imageampler1)
[li,hi]=size(imageampler1);
imageampler1=[~ones(li,2) imageampler1 ~ones(li,2)];
imageampler1=imageampler1';
[li,hi]=size(imageampler1);
imageampler1=[~ones(li,2) imageampler1 ~ones(li,2)];
imageampler1=imageampler1';
figure(6)
imshow(imageampler1);title('扩展后图像');


%行向量
k=0;
for i=1:T_l
    for j=1:T_h
        k=k+1;
        imageampler0(:,k)=[imageampler1(i,j)];
        imageampler2(:,k)=[1-imageampler1(i,j)];
    end
end


maxd=0;
d=[];
for l=1:36
    %提取标准模式
     fsetnum=strcat('C:\Documents and Settings\Administrator\桌面\Fuzzy字符识别\数字和字母图像\_Template\T_',num2str(l),'.bmp');
     fset=imread(fsetnum);
     %fset=rgb2gray(fset);
     fset=double(fset);
     fset=(1/255).*fset;  %数值类型转换
    % fset=imresize(fset,[16 16],'nearest');
    
    kk=0;
    c=0;
    u=0;
    dd=0;yy=0;mm=0;
    
    sita=3;
    T_l=36;   %设置标准模式规格
    T_h=20;   %
    [T_l T_h]=size(fset);
    fset1=[];
   for i=1:T_l-2   %列扫描
        for j=1:T_h-2  %行扫描
            
            fset1(i,j)=fset(i,j);
           
            %水平方向
            if (j>1)&(i>1)
            if (fset(i,j)>0.99)&(fset(i,j-1)<=0.99)
                for x=0:2
                    x=x+1;
                    fuc=exp(-((x-u)/sita).^2);      %正态分布隶属函数
                    if j-x>0
                       fset1(i,j-x)=fuc;
                    end
                end
                mm=mm+1;
            end
            if (fset(i,j)>0.99)&(fset(i,j+1)<=0.99)
                for x=0:2
                    x=x+1;
                    fuc=exp(-((x-u)/sita).^2);      %正态分布隶属函数
                    if j+x<=T_h-2
                       fset1(i,j+x)=fuc;
                    end
                end
                kk=kk+1;
            end    
             %垂直方向
            if (fset(i,j)>0.99)&(fset(i-1,j)<=0.99)
                for y=0:2
                    y=y+1;
                    fuc=exp(-((y-u)/sita).^2);      %正态分布隶属函数
                    if i-y>0
                       fset1(i-y,j)=fuc;
                    end
                end
                yy=yy+1;
            end
            if (fset(i,j)>0.99)&(fset(i+1,j)<=0.99)
                for y=0:2
                    y=y+1;
                    fuc=exp(-((y-u)/sita).^2);      %正态分布隶属函数
                    if i+y<=T_l-2
                       fset1(i+y,j)=fuc;
                    end
                end
                dd=dd+1;
            end  
            end
            %k=k+1;
            %fset1(:,k)=[fset(i,j)];
            %fset2(:,k)=[1-fset(i,j)];
        end
    end
    fset1(T_l-1:T_l,T_h-1:T_h)=fset(T_l-1:T_l,T_h-1:T_h);%复制剩余象素点
    figure(2)
    subplot(121)
    imshow(fset1);
    subplot(122)
    imshow(fset)
    
   fset1=fset;
     k=0;
    c=0;
    size(fset1)
    for i=1:T_l
        for j=1:T_h
            k=k+1;
            fset11(:,k)=[fset1(i,j)];
            fset22(:,k)=[1-fset1(i,j)];
        end
    end
    %a=min(pig1(:,:),fset2(:,:));
    %b=min(pig(:,:),A1(:,:));
    c=max(min(imageampler0(:,:),fset11(:,:)),min(imageampler2(:,:),fset22(:,:)));%计算贴近度
    d(1,l)=sum(c(:,:));
    
    if d(1,l)>=max(d)  %输出贴近度最大值
        maxd=l;
    end
    l=l+1;
end%开始分类
maxd
fsetnum=strcat('C:\Documents and Settings\Administrator\桌面\Fuzzy字符识别\数字和字母图像\_Template\T_',num2str(maxd),'.bmp');figure(100)
imshow(fsetnum)


%输出模糊模式识别结果
Rchar=[];
i=1;
switch maxd %遍历比较
         case 1 
             Rchar(i)='0' ;
         case 2 
             Rchar(i)='1';
         case 3 
             Rchar(i)='2';
         case 4
             Rchar(i)='3' ;
         case 5 
             Rchar(i)='4';
         case 6 
             Rchar(i)='5';
         case 7 
             Rchar(i)='6';
         case 8 
             Rchar(i)='7';
         case 9 
             Rchar(i)='8';
         case 10 
             Rchar(i)='9';
         case 11 
             Rchar(i)='A' ;
         case 12 
             Rchar(i)='B';
         case 13 
             Rchar(i)='C';
         case 14 
             Rchar(i)='D' ;
         case 15 
             Rchar(i)='E';
         case 16 
             Rchar(i)='F';
         case 17
             Rchar(i)='G' ;
         case 18 
             Rchar(i)='H';
         case 19 
             Rchar(i)='I';
         case 20 
             Rchar(i)='J' ;
         case 21 
             Rchar(i)='K';
         case 22 
             Rchar(i)='L';
         case 23 
             Rchar(i)='M' ;
         case 24 
             Rchar(i)='N';
        case 25 
            Rchar(i)='O';
         case 26 
             Rchar(i)='P' ;
         case 27 
             Rchar(i)='Q';
         case 28 
             Rchar(i)='R';
         case 29 
             Rchar(i)='S' ;
         case 30 
             Rchar(i)='T';
         case 31 
             Rchar(i)='U';
         case 32 
             Rchar(i)='V' ;
         case 33 
             Rchar(i)='W';
         case 34
             Rchar(i)='X';
         case 35 
             Rchar(i)='Y' ;
         case 36 
             Rchar(i)='Z';
         otherwise 
             Rchar(i)='false';
end
 Rchar=char(Rchar)

结语:

用模糊算法进行字符识别识别率并不高,目前字符识别算法已经很成熟,我只是为了学习模糊算法才编写这个程序,如有什么错误,希望大侠们多多指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值