⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testding200409234444.m

📁 一个用matlab编写的 关于笔画提取的仿真试验程序
💻 M
字号:
close all;
clear;
%A2=imread('D:\a实验用\nh1.bmp','bmp');
%figure(9),imshow(A2);
tic;
A1=imread('主.bmp');%%%%  w1/117/a104  qw/126/a157  l2/85/a99   qq/79/a64 yn/78/a75   h2/59/a44 annnew/56/a123 l21
A=rgb2gray(A1);
k=25;
hui=0;

figure(1),imshow(A);
[m,n]=size(A);
for i=2:(m-1)
for j=2:(n-1)
    hui=hui+double(A(i,j));
end
end


G=[0;-2;2;0];
H=[0.125;0.375;0.375;0.125];
%[A]=filtimag1231(A1);
%[cc]=fenggfuc(A);
%imwrite(cc,'qqying.bmp');figure(3),imshow(cc);
%Ac2=edge(A,'canny');
%figure(15),imshow(Ac2);
%G1=[0;0;-2;0;2;0;0;0];
%H1=[0.125;0;0.375;0;0.375;0;0.125;0];
%G=[0.025;0.475;0.475;0.025];
%H=[0.025;0.475;0.475;0.025];


huit=round(hui/(m*n));
%aaa=[huit,huit/2,huit,huit/2];
%ss=aaa*G;
%ss2=aaa*H;

%%%%边缘扩展
Ak=zeros(m+k,n+k);
for i=1:(m+k)
    for j=1:(n+k)
        Ak(i,j)=huit;
    end
end

for i=6:(m+6-1)
    for j=6:(n+6-1)
        Ak(i,j)=A(i-5,j-5);
    end
end

%%%对行进行1变换
[SSh,WWh]=hanb(Ak);%%%%hanb及hanb2为函数
%%%对行进行2变换
[SSh2,WWh2]=hanb2(SSh);
%%%对行进行2变换[SSh3,WWh3]=hanb3(SSh2);
%%%对列进行1变换%%%%lieb及lieb2为函数
[SSl,WWl]=lieb(Ak);
%%%对列进行2变换
[SSl2,WWl2]=lieb2(SSl);
%%%对列进行2变换[SSl3,WWl3]=lieb3(SSl2);
%%对行进行寻找变换后的最大值点c5=WWh3;   [ahmax3]=findmaxminh(c5);
  % c1=WWh;
  % [ahmax1]=findmaxminh(c1);
   c3=WWh2;
   [ahmax2]=findmaxminh(c3);
    
  %%寻找1列变换后的最大值点
  % c2=WWl;
 %  [almax1]=findmaxminl(c2);
   c4=WWl2;
   [almax2]=findmaxminl(c4);
 
%%%%%%%%%%%%%%%mm=1;  c6=WWl3;   [almax3]=findmaxminl(c6);

hmax2=ahmax2;
lmax2=almax2;
hmax22=ahmax2;
lmax22=almax2;
%hmax1=ahmax1;
%lmax1=almax1;


%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%
 
%figure(2),imshow(ccall11);
%%%%%%%%%%%%%%% figure(3),imshow(ahmax2);
%%% 统计行或列的不为零的边缘点,若不为零则记录其点值并存于Amh中
[mch2,nch2]=size(hmax2);
[mcl2,ncl2]=size(lmax2);
for i=6:(m+5)
    ererhm=0;
    ehm=0;
    for j=6:(n+5)
        if (abs(hmax2(i,j))>0)
           ererhm=ererhm+abs(hmax2(i,j));
           ehm=ehm+1;
       end
   end
   if ehm>0
   km=ererhm/ehm;
   Amh(1,i)=km;
else
     Amh(1,i)=0;
 end
end
for j=6:(n+5)
    ererlm=0;
    elm=0;
    for i=6:(m+5)
        if (abs(lmax2(i,j))>0)
           ererlm=ererlm+abs(lmax2(i,j));
           elm=elm+1;
       end
   end
    if elm>0
   km=ererlm/elm;
   Aml(1,j)=km;
else 
    Aml(1,j)=0; 
end
end


ath=zeros(m,n);
ath1=zeros(m,n);
ath2=zeros(m,n);
atl=zeros(m,n);
atl1=zeros(m,n);
atl2=zeros(m,n);
for i=1:(m)
    for j=1:(n)
        if abs(hmax2(i+5,j+3))>100 
        ath(i,j)=(hmax2(i+5,j+3));
        ath1(i,j)=abs(hmax2(i+5,j+3));
    end
    end
end

    for  j=1:(n)
    for    i=1:(m)
        if abs(lmax2(i+3,j+5))>100 %&& abs(lmax2(i+3,j+5))<=255  %%%%%%%%%???????????????????
        atl(i,j)=round(lmax2(i+3,j+5));
            atl1(i,j)=abs(lmax2(i+3,j+5));
    
    end
    end
end
atla=zeros(m,n);
atla1=zeros(m,n);atla2=zeros(m,n);
for i=1:(m)
    for j=1:(n)
        atla(i,j)=(double(atl(i,j))+double(ath(i,j)));
        atla1(i,j)=double(atl1(i,j))+double(ath1(i,j)); 
        ath2(i,j)=double(ath1(i,j))-double(ath(i,j));
        atl2(i,j)=double(atl1(i,j))-double(atl(i,j));
        atla2(i,j)=double(atl2(i,j))+double(ath2(i,j));

    end
end
%%%%%%%%%%%%%列补点
dddd=0;
aaah=ath2;
for kkk=1:10
for    j=1:(n)
for  i=1:(m)
       t1=aaah(i,j);
        if  t1 >0
            dddd=dddd+1;
        else
         if  dddd>5
         dddd=0;
         if A(i,j) >20
        aaah(i,j)=aaah(i-1,j);
         end
     else 
         dddd=0;
     end
        end

end
    end
end
end
for kkk=1:10
for    j=1:(n)
for  i=m:-1:(1)
       t1=aaah(i,j);
        if  t1 >0
            dddd=dddd+1;
        else
         if  dddd>5
         dddd=0;
         if A(i,j) >20
        aaah(i,j)=aaah(i+1,j);
         end
     else 
         dddd=0;
     end
        end

end
    end
end
end
figure(7),imshow(aaah); 
%%%%%%%%%%%滤波
dd=0;
 for  j=1:(n)
     i=1;
    while(i<=m)
       t1=aaah(i,j);
        if  t1 >0 
          k9=i;
          while aaah(k9,j)>0
              dd=dd+1; 
              k9=k9+1;
          end
          if dd < 8 
              for k8=dd:-1:1;
                  tttt=k9-k8;
                aaah(k9-k8,j)=0;
            end
             i=i+dd-1;
             dd=0;
         else
             i=i+dd-1;
             
        end
        dd=0;
       
    end
     i=i+1;  
 end
  
end
 

%%%%%%%%%%%行补点
aaa=atl;
dddd=0;
for kkkk=1:20
 for  i=1:(m)
    for    j=1:(n-1)
        
        t1=aaa(i,j);
        if  t1 >0
            dddd=dddd+1;
        else
         if  dddd>5
         dddd=0;
         if A(i,j) >5
        aaa(i,j)=aaa(i,j-1);
        
        end
         else 
         dddd=0;
     end
        end

end
    end
end

end
%%%%%%%%%%%滤波
dd=0;
 for  i=1:(m)
     j=1;
    while(j<=n)
       t1=aaa(i,j);
        if  t1 >0 
          k9=j;
          while aaa(i,k9)>0
              dd=dd+1; 
              k9=k9+1;
              if k9 > n 
                  k9=k9-1;
                  break;
              end
          end
          if dd < 9 
              for k8=dd:-1:1;
                  tttt=k9-k8;
                aaa(i,k9-k8)=0;
            end
             j=j+dd-1;
             dd=0;
         else
             j=j+dd-1;
             
        end
        dd=0;
       
    end
     j=j+1;  
 end
  
end
 %%%%%%%%%%%
atl;
abhl=zeros(m,n);
 for  i=1:(m)
    for    j=1:n
        abhl(i,j)=double(aaa(i,j))+double(aaah(i,j));
    end
end

%
figure(5),imshow(ath2); 
%figure(6),imshow(ath1); 
%figure(7),imshow(ath2);
figure(8),imshow(aaah); 

%figure(18),imshow(atl); 
%
figure(19),imshow(atl); 
%figure(20),imshow(atl2);
%figure(21),imshow(aaa);aa1=zeros(50,25);aa2=zeros(50,25);

%aa1'
%aa2'

%figure(13),imshow(atla); 
%figure(14),imshow(atla1);
%figure(15),imshow(atla2);
    
figure(25),imshow(abhl);
%cc2=erode(Cc,[0,1,1,0;0,1,1,0]);cc3=erode(cc2,[0 0 0;0 1 0;0 0 0]);figure(12),imshow(Cc);
%imwrite(C,'dk.bmp');Amhers2
%   imwrite(Cc,'qqo.bmp');figure(14),imshow(Cc);
toc;
%figure(14),imshow(cc3);figure(9),subplot(2,2,1),imshow(ath);subplot(2,2,2),imshow(atl);subplot(2,2,3),imshow(cc);subplot(2,2,4),imshow(cc);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -