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

📄 bihua22.m

📁 一个用matlab编写的 关于笔画提取的仿真试验程序
💻 M
字号:
function [Ahen,Ashu]=bihua22(A)
A1=A;
[m,n,l]=size(A1);
A3=(A1);
A2=A3;
for i=1:m 
    for j=1:n
        if A2(i,j)>100
            A2(i,j)=255;
        else
            A2(i,j)=0;
        end
    end
end
%%%计算重心
zx=A2;
fp=0;xfz=0;
yfz=0;
for i=1:m
    for j=1:n
    fp=double(fp)+double(zx(i,j)) ;
    xfz=double(xfz)+i*double(zx(i,j));
    yfz=double(yfz)+j*double(zx(i,j));
    end
end
xp=round(xfz/fp);
yp=round(yfz/fp);

for i=1:m 
    for j=1:n
        if A2(i,j)>200
            A2(i,j)=255;
        else
            A2(i,j)=10;
        end
    end
end
A2;

%%%%提取横
d=0;
bb=zeros(m,n);
for i=1:m
    for j=1:n
      aa=A2(i,j);
        if aa >200 
          d=d+1;
      end 
      if d>0 && (aa<200)
          if d>(n*2/8)
              if j<d ,
                  jjj=n+1;
                  iii=i-1;
                  d=n;
              else
                  jjj=j;
                  iii=i;
              end
                for k=d:-1:1
             bb(iii,jjj-k)=255; 
              end 
          end 
          d=0;
  end 
end
end 
d=0;iih=0;kdh=0;
for j=1:n
    for i=1:m
        if bb(i,j)>200
            d=d+1;
        end
         if d>0 && (bb(i,j)<200) %&&bbs(i,j)>20 )
          iih=iih+1;
       kdh=kdh+d;
       d=0;
      end
  end
end
% if iih>0
 kuanh=round(double(kdh)/double(iih));
% end
dh=0;
for j=1:n
   for i=1:m
      if bb(i,j)>200
            dh=dh+1;
        end
         if dh>0 && (bb(i,j)<200)
              if dh<kuanh %|| d>double(kuan) +2
            for k=dh:-1:1
               bb(i-k,j)=0; 
            end 
        end 
         dh=0;
      end
      end
  end
end

%%%%%%%%%%%%提取竖
ds=0;
bbs=zeros(m,n);
for j=1:n
    for i=1:m
      aas=A2(i,j);
      
      if aas >200 
          ds=ds+1;
      end 
      if ds>0 && (aas<200)
          if ds>(m*2/12)
              if ds >i ,
                  iii=m+1;
                  jjj=j-1;
                  ds=n;
              else
                  iii=i;
                  jjj=j;
              end
          for ks=ds:-1:1
         bbs(iii-ks,jjj)=255; 
              end 
          end 
          ds=0;
  end 
end
end 
bbs;
d=0;ii=0;kd=0;
for i=1:m
    for j=1:n
        if bbs(i,j)>200
            d=d+1;
        end
         if d>0 && (bbs(i,j)<200) %&&bbs(i,j)>20 )
          ii=ii+1;
       kd=kd+d;
       d=0;
      end
  end
end
kuan=round(double(kd)/double(ii));
d=0;
for i=1:m
   for j=1:n
      if bbs(i,j)>200
            d=d+1;
        end
         if d>0 && (bbs(i,j)<200)
         if d<kuan
            for k=d:-1:1
         bbs(i,j-k)=0; 
              end 
         end 
         d=0;
      end
      end
  end
end
%%%%%%%提取横竖的交点
for j=1:n
    for i=1:m
   %  cc11(i,j) = double(A2(i,j))-double(bb(i,j))-double(bbs(i,j));
cc(i,j)=double(A2(i,j))*2-double(bb(i,j))-double(bbs(i,j));
if cc(i,j)==0 
    cc(i,j)=255;
else
    cc(i,j)=0;
end
end
end
cc;
cc(xp,yp)=255;
%%%%%%%横竖后的剩余的部分
for i=1:m
   for j=1:n
       cc11(i,j) = (double(zx(i,j))-double(bb(i,j))-double(bbs(i,j)));
   end
end
Ahen=bb;
Ashu=bbs;
% figure(999),imshow(bb);
% figure(888),imshow(bbs);

⌨️ 快捷键说明

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