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

📄 testding2.m

📁 一个用matlab编写的 关于笔画提取的仿真试验程序
💻 M
字号:
close all;
clear;
%A2=imread('D:\a实验用\nh1.bmp','bmp');
%figure(9),imshow(A2);
tic;
A1=imread('qw.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=1:(m)
for j=1:(n)
    
   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);
%[acc,zz]=fenggfuc(A);
%imwrite(cc,'qqying.bmp');figure(3),imshow(cc);
%Ac2=edge(A,'canny');
%figure(15),imshow(acc);
%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))

ab=A;
for i=1:m
for j=1:n
   if  A(i,j)>huit
   ab(i,j)=255;
else 
    ab(i,j)=0;
end
end
end
figure(15),imshow(ab);
%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(4),imshow(hmax2);
%%% 统计行或列的不为零的边缘点,若不为零则记录其点值并存于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
Aml
sum=0;
k2=0;
for i=6:(m+5) 
    elm=0;
    km=0;
    ererm=0;
for j=6:(n+5)
if (abs(hmax2(i,j))>=(Amh(1,i)*4)/16)
   elm=elm+1;
   ererm=ererm+double(A(i-5,j-5));  
   else
       hmax2(i,j)=0;
   end
end
Amhers(1,i)=elm;
if elm>15
   km=ererm/elm;
   Amher(1,i)=round(km);
  else 
    Amher(1,i)=0; 
 end
end 


 Amher
kk=0;
for i=1:m
    kk=kk+Amher(1,i+5);
end
taver=round(kk/m)
Cc=A;

%et11=erer11/el11;
for i=1:m
    if abs(huit-Amher(1,i+5))>10
    for j=1:n
              if  ((Cc(i,j)>(165*Amher(1,i+5))/160)&&Amher(1,i+5)>0);
            Cc(i,j)=255;  
        elseif Amher(1,i+5)==0&&Cc(i,j)>=0
        Cc(i,j)=255; 
        else   Cc(i,j)=0; 
        end
          
    end
else 
    for j=1:n
    Cc(i,j)=ab(i,j);
   end
end
end
 %imwrite(Cc,'qqer.bmp');
 figure(10),imshow(Cc);    
 cout=0;
 cout2=0;
 for i=1:(m)
    for j=1:(n)
            if Cc(i,j)>0
                   cout=cout+1;
               else
                   cout2=cout2+1;
               end
      
    end
end
if cout>cout2 
    bkg=255;
else
    bkg=0;
end

cc=Cc;
t1=0;
if bkg==0
 for t1=1:4
  for i=2:(m-1)
    for j=2:(n-1)
        cout=0;
         for pp=-1:1
            for qq=-1:1
               if Cc(i+pp,j+qq)>bkg
                   cout=cout+1;
               end
           end
       end
       if cout<4;
         cc(i,j)=bkg;
       end
    end
end
Cc=cc;
end
else
    for t1=1:4
    for i=3:(m-2)
     for j=3:(n-2)
        cout=0;
        for pp=-2:2
            for qq=-2:2
               if Cc(i+pp,j+qq)<bkg
                   cout=cout+1;
               end
           end
       end
         if cout<8;
          cc(i,j)=bkg;
        end
    Cc=cc;    
    end
end  
Cc=cc; 
end
end
  figure(11),imshow(Cc);    
asum=0;k3=0;
for i=1:m
    sum=0;
    for j=1:n-1
        if Cc(i,j)==Cc(i,j+1)
            flag=0;
        else 
            sum=sum+1;
        end
    end
    if sum>0&&(i>(m/4)||i<(3*m/4))
        asum=sum+asum;
        k3=k3+1;
    end
    Amhers2(1,i)=sum;
end
t3=round(asum/k3);
tb=round(t3*7/10);%%%%%设置跳变点的个数阈值!!!!!
  max1=0;

 
   for i=1:round(m/4)
       if Amhers2(1,i)==0
              max1=i;
              break;
          elseif   Amhers2(1,i)<tb||Amhers2(1,i)>30
          max1=i;
      end
  end
    max2=0;
  for i=m:-1:(round(6*m/8))
      if  Amhers2(1,i)<tb||Amhers2(1,i)>30
          max2=i;
      end
  end
      for i=1:m
      if i<=max1||i>=max2
          for j=1:n
              Cc(i,j)=bkg;
          end
      end
  end

 % figure(8),imshow(Cc);    
cc=Cc;
t1=0;
if bkg==0
 for t1=1:6
  for i=2:(m-1)
    for j=2:(n-1)
        cout=0;
         for pp=-1:1
            for qq=-1:1
               if Cc(i+pp,j+qq)>bkg
                   cout=cout+1;
               end
           end
       end
       if cout<4;
         cc(i,j)=bkg;
       end
    end
end
Cc=cc;
end
else
    for t1=1:6
    for i=2:(m-1)
     for j=2:(n-1)
        cout=0;
        for pp=-1:1
            for qq=-1:1
               if Cc(i+pp,j+qq)<bkg
                   cout=cout+1;
               end
           end
       end
         if cout<4;
          cc(i,j)=bkg;
        end
    end
end  
Cc=cc; 
end
end
%figure(13),imshow(Cc);
kkkk1=1;k2=round(n/16);k3=round(n*15/16);kkkk2=n;
for j=k2:-1:1
     sum=0;flag2=0;
   for i=max1:max2
        if Cc(i,j)==Cc(i+1,j)
            flag=0;            flag2=flag2+1;

        else 
            sum=sum+1;
        end
    end
        if sum==0||flag2>max2-6;
            kkkk1=j;
            break;
        end  
    end 
    
    for j=1:kkkk1
       for i=max1:max2
 Cc(i,j)=bkg;
   end
   end
   
   for j=k3:1:n
     sum=0;flag2=0;
   for i=max1:max2
       
        if Cc(i,j)==Cc(i+1,j)
            flag=0;
            flag2=flag2+1;
        else 
            sum=sum+1;
        end
    end
        if sum==0||flag2>max2-6;
            kkkk2=j;
            break;
        end  
    end 
    
    for j=n:-1:kkkk2
       for i=max1:max2
 Cc(i,j)=bkg;
   end
   end
 
%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);


%%%%%%%%%%%%%%%
%B=zeros(m,50);

⌨️ 快捷键说明

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