📄 segprocnew.m
字号:
% function cellarea=preprocessing(image,mheig,mwid,cof)
% image=wwx([1000,2000,1000,2000]);
tic
mheig=200;mwid=200;
% mapc=imread('16_125.jpg'); % 10_125,22_107,25_54,23_38,23_107,21_125,20_58,22-125
% mapg=rgb2gray(mapc);
mapg=imread('16_125.jpg');
image=255-double(mapg);
image=image(1:810,:);
if ~isa(image,'uint8')
image=uint8(image);
end
m=size(image,1);
n=size(image,2);
cof=histcofnew(image);
bwimage=im2bw(image,cof);
% seh=strel('line',200,0);
% sev=strel('line',200,90);
seh1=strel('line',27,0);
sev1=strel('line',27,90);
sse=strel('square',31);
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)>=200 % & aa(idxone(1))==0
flag(i,1:idxone(1))=1;
end
if 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)>=200 %& aa(idxone(kk)+1)==0
flag(i,idxone(kk)+1:idxone(kk+1))=1;
end
end
end
end
end
for i=1:n
aa=bwimage(1:m-1,i);
bb=bwimage(2:m,i);
ss=xor(aa,bb);
idxone=find(ss==1);
if isempty(idxone)
flag(:,i)=1;
else
long=length(idxone);
if idxone(1)>=200 % & aa(idxone(1))==0
flag(1:idxone(1),i)=1;
end
if m-idxone(long)>=200 %& aa(idxone(long)+1)==0
flag(idxone(long)+1:m,i)=1;
end
if long>1
for kk=1:length(idxone)-1
if idxone(kk+1)-idxone(kk)>=200 %& aa(idxone(kk)+1)==0
flag(idxone(kk)+1:idxone(kk+1),i)=1;
end
end
end
end
end
% flagd=imerode(~flag,sev1);
% flage=imdilate(flagd,sev1);
% flagh=~flage;
%
% flagd=imerode(~flagh,seh1);
% flage=imdilate(flagd,seh1);
% flagv=~flage;
poute=imerode(~flag,sse);
poutd=imdilate(poute,sse);
rse=strel('square',37);
oout=imdilate(poutd,rse);
ll=bwlabel(oout);
nn=max(max(ll));
pstat=imfeature(ll,'boundingbox');
oarea=[];playarea=[];
for ii=1:size(pstat,1);
mmid=pstat(ii).BoundingBox;
playarea=[playarea;round(mmid(1)),round(mmid(2)),mmid(3),mmid(4)];
if (mmid(3)>mwid & mmid(4)>mheig) |(mmid(3)>mheig & mmid(4)>mwid)
oarea=[oarea; round(mmid(1)),round(mmid(2)),mmid(3),mmid(4)];
end
end
bwout=zeros(m,n);playout=bwout;
for ii=1:size(oarea,1);
bwout(oarea(ii,2):oarea(ii,2)+oarea(ii,4)-1,oarea(ii,1):oarea(ii,1)+oarea(ii,3)-1)=1;
end
for ii=1:size(playarea,1);
playout(playarea(ii,2):playarea(ii,2)+playarea(ii,4)-1,playarea(ii,1):playarea(ii,1)+playarea(ii,3)-1)=1;
end
immo=bwout.*double(image);
imout=~bwout.*255;
pout=imout+immo;
toc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -