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

📄 segproc1.m

📁 基于图像特征的模板匹配算法的研究
💻 M
字号:

% function cellarea=preprocessing(image,mheig,mwid,cof)
image=wwx([1200,1600,1200,1700]);

if ~isa(image,'uint8')
    image=uint8(image);
end
m=size(image,1);
n=size(image,2);


bwimage=im2bw(image);

se=ones(3,3);
seh=ones(1,3);
bwimage=dilate(bwimage,seh,5);
bwimage=~(bwimage);
bwimage=dilate(bwimage,seh,5);
bwimage=~(bwimage);

bwimage=erode(bwimage,seh);
bwimage=dilate(bwimage,seh);

flag=repmat(logical(uint8(0)),m,n);
for i=1:m
    aa=bwimage(i,1:n-1);
    bb=bwimage(i,2:n);
    ss=xor(aa,bb);
    idxone=find(ss==1);
    if isempty(idxone)
        flag(i,:)=1;
    else 
        long=length(idxone);
        if idxone(1)>=80 & aa(idxone(1))==1
            flag(i,1:idxone(1))=1;
        elseif idxone(1)>=200 & aa(idxone(1))==0
            flag(i,1:idxone(1))=1;
        end
        if n-idxone(long)>=80 & aa(idxone(long)+1)==1
            flag(i,idxone(long)+1:n)=1;
        elseif n-idxone(long)>=200 & aa(idxone(long)+1)==0
            flag(i,idxone(long)+1:n)=1;
        end
        if long>1
            for kk=1:length(idxone)-1
                if idxone(kk+1)-idxone(kk)>=80 & aa(idxone(kk)+1)==1
                    flag(i,idxone(kk)+1:idxone(kk+1))=1;
                elseif idxone(kk+1)-idxone(kk)>=200 & aa(idxone(kk)+1)==0
                    flag(i,idxone(kk)+1:idxone(kk+1))=1;
                end
            end
        end
    end
end
    
sev=ones(3,1);
se=ones(3,3);

flag=erode(flag,sev,2);
flag=dilate(flag,sev,2);   % vertical openning operation

flag=dilate(flag,se,6);
flag=~flag;
flag=dilate(flag,se,6);
flag=~flag;                 % square closing operation

flag=erode(flag,sev,12);
flag=dilate(flag,sev,12);    % vertical openning operation

flag=dilate(flag,se,18);
flag=~(flag);
flag=dilate(flag,se,25);     % squrar closing operation and erosion operation

flag=dilate(flag,seh,40);
flag=~(flag);                % horizon erosion operation
flag=bwmorph(flag,'open');

cellarea=[];
step=min(fix(mwid/2),60);
for i=50:step:n-50
   if i==50
      proc=flag(:,i);
   else
      proc=proc&flag(:,i);
   end
end

aa=proc(1:m-1);
bb=proc(2:m);
cc=xor(aa,bb);
p1=find(cc==1);
if ~isempty(p1)
   if proc(1)==0,p1=[1;p1];end
   if proc(m)==0,p1=[p1;m];end
   for i=2:2:length(p1)
      if p1(i)-p1(i-1)>=mheig
         flagpart=flag(p1(i-1):p1(i),:);
         fph=size(flagpart,1);
         for j=1:10:fph
            if j==1,pror=flagpart(j,:);else,pror=pror&flagpart(j,:);end
         end
         dd=pror(1:n-1);
         ff=pror(2:n);
         hh=xor(dd,ff);
         q1=find(hh==1);
         if isempty(q1)
            cellarea=[cellarea;p1(i-1),p1(i),1,n];
         else
            if pror(1)==0,q1=[1,q1];end
            if pror(n)==0,q1=[q1,n];end
            for j=2:2:length(q1)
               if q1(j)-q1(j-1)>=mwid
                  cellarea=[cellarea;p1(i-1),p1(i),q1(j-1),q1(j)];
               end
            end
         end
      end
   end
else
   if proc(1)==0,cellarea=[1,m,1,n];end
end 



if ~isempty(cellarea) & cellarea(1,2)-cellarea(1,1)+1<m
   for i=1:size(cellarea,1)
      hh=cellarea(i,2)-cellarea(i,1)+1;
      if hh>mheig*1.4 | (hh>mheig*1.15 & (cellarea(i,1)==1|cellarea(i,2)==m))
         
         flagp=flag(cellarea(i,1):cellarea(i,2),cellarea(i,3):cellarea(i,4));
         upc=length(find(flagp(20,:)==0));
         downc=length(find(flagp(hh-20,:)==0));
         long=cellarea(i,4)-cellarea(i,3)+1;
         for j=5:20:long-5
            if j==5,aa=flagp(:,j);else,aa=aa|flagp(:,j);end
         end
         zero=find(aa==0);
         lu=zero(1);
         if lu>mheig*.15 & lu<mheig*.3 & upc<long*.5
            cellarea(i,1)=cellarea(i,1)+fix(lu*.25);
         elseif lu>=mheig*.3 & upc<long*.5
            cellarea(i,1)=cellarea(i,1)+fix(lu*.4);
         end
         ld=hh-zero(length(zero));
         if ld>mheig*.15 & ld<mheig*.3 & downc<long*.5
            cellarea(i,2)=cellarea(i,2)-fix(ld*.25);
         elseif ld>=mheig*.3 & downc<long*.5
            cellarea(i,2)=cellarea(i,2)-fix(ld*.4);
         end
         if cellarea(i,1)>1 & cellarea(i,2)<n
            ih=cellarea(i,2)-cellarea(i,1);  
            if ih<mheig*1.3
               step=fix((mheig*1.3-ih)/2);
               if cellarea(i,1)>1+step 
                  cellarea(i,1)=cellarea(i,1)-step;
               else
                  cellaeea(i,1)=1;
               end
               if cellarea(i,2)<m-step 
                  cellarea(i,2)=cellarea(i,2)+step;
               else
                  cellaeea(i,2)=m;
               end
            end
         end
         if cellarea(i,3)~=1
            if cellarea(i,3)>25
               cellarea(i,3)=cellarea(i,3)-25;
            else
               cellarea(i,3)=1;
            end 
         end
         if cellarea(i,4)~=n
            if cellarea(i,4)<n-25
               cellarea(i,4)=cellarea(i,4)+25;
            else
               cellarea(i,4)=n;
            end 
         end
         
      end
   end
end   

⌨️ 快捷键说明

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