📄 pmain1.m
字号:
% pmain
% get all the models
mod1=wwx([997,1093,2012,2080]);
mod2=wwx([1729,1824,2259,2326]);
mod3=wwx([1289,1386,2750,2819]);
mod4=wwx([1876,1970,2786,2853]);
mod5=wwx([2021,2117,3031,3098]);
mod6=wwx([2314,2409,2541,2606]);
mod7=wwx([2168,2263,2669,2734]);
mod8=wwx([2022,2118,1815,1882]);
mod9=wwx([3190,3288,2128,2209]);
mod10=wwx([3629,3726,1392,1472]);
mod11=wwx([3336,3433,2538,2618]);
modstr(1).va=edge(mod1,'canny');
modstr(1).na=1;
modstr(2).va=edge(mod2,'canny');
modstr(2).na=2;
modstr(3).va=edge(mod3,'canny');
modstr(3).na=3;
modstr(4).va=edge(mod4,'canny');
modstr(4).na=1;
modstr(5).va=edge(mod5,'canny');
modstr(5).na=5;
modstr(6).va=edge(mod6,'canny');
modstr(6).na=6;
modstr(7).va=edge(mod7,'canny');
modstr(7).na=7;
modstr(8).va=edge(mod8,'canny');
modstr(8).na=8;
modstr(9).va=edge(mod9,'canny');
modstr(9).na=9;
modstr(10).va=edge(mod10,'canny');
modstr(10).na=10;
modstr(11).va=edge(mod11,'canny');
modstr(11).na=11;
xx=length(modstr);
sse=strel('square',3);
ccov=zeros(xx,xx);
for ii=1:xx-1
a=modstr(ii).va;
[ma,na]=size(a);
ac=imdilate(a,sse);
for jj=ii+1:xx
b=modstr(jj).va;
[mb,nb]=size(b);
bc=imdilate(b,sse);
xmax=0;
if ma>=mb & na>=nb
sumb=sum(sum(b));
for kk=1:ma-mb+1
for ll=1:na-nb+1
outf=and(a(kk:kk+mb-1,ll:ll+nb-1),bc);
forw=sum(sum(outf))/sum(sum(a(kk:kk+mb-1,ll:ll+nb-1)));
outb=and(ac(kk:kk+mb-1,ll:ll+nb-1),b);
backw=sum(sum(outb))/sumb;
if xmax<min(forw,backw);
xmax=min(forw,backw);
end
end
end
elseif ma>=mb & na<nb
for kk=1:ma-mb+1
for ll=1:nb-na+1
outf=and(a(kk:kk+mb-1,:),bc(:,ll:ll+na-1));
forw=sum(sum(outf))/sum(sum(a(kk:kk+mb-1,:)));
outb=and(ac(kk:kk+mb-1,:),b(:,ll:ll+na-1));
backw=sum(sum(outb))/sum(sum(b(:,ll:ll+na-1)));
if xmax<min(forw,backw);
xmax=min(forw,backw);
end
end
end
elseif ma<mb & na>=nb
for kk=1:mb-ma+1
for ll=1:na-nb+1
outf=and(a(:,ll:ll+nb-1),bc(kk:kk+ma-1,:));
forw=sum(sum(outf))/sum(sum(a(:,ll:ll+nb-1)));
outb=and(ac(:,ll:ll+nb-1),b(kk:kk+ma-1,:));
backw=sum(sum(outb))/sum(sum(b(kk:kk+ma-1,:)));
if xmax<min(forw,backw);
xmax=min(forw,backw);
end
end
end
elseif ma<mb & na<nb
suma=sum(sum(a));
for kk=1:mb-ma+1
for ll=1:nb-na+1
outf=and(a,bc(kk:kk+ma-1,ll:ll+na-1));
forw=sum(sum(outf))/suma;
outb=and(ac,b(kk:kk+ma-1,ll:ll+na-1));
backw=sum(sum(outb))/sum(sum(b(kk:kk+ma-1,ll:ll+na-1)));
if xmax<min(forw,backw);
xmax=min(forw,backw);
end
end
end
end
ccov(ii,jj)=xmax;
end
end
ccov=ccov+ccov';
% 计算近临函数矩阵lij
[x,ind]=sort(ccov);
m=size(ccov,1);
mij=zeros(m,m);
for ii=1:m
for jj=1:m
mij(ii,ind(jj,ii))=m-jj+1;
end
end
lij=mij+mij'-2;
ee=6*eye(m);
lij=lij+ee;
[clu,rowid]=max(ccov);
[sclu,idc]=sort(clu);
sidc=idc;
cc=0;
while length(sidc)>0
xx=rowid(sidc(1))*ones(1,length(sidc));
xout=xx-sidc;
if all(xout)
cc=cc+1;
catecell{cc}=sidc(1);
sidc(1)=[];
% for kk=1:length(catecell)
% ax=catecell{kk};
% aout=ax-rowid(sidc(1))*ones(1,length(ax));
% if ~all(aout)
% bx=[ax sidc(1)];
% catecell{kk}=bx;
% sidc(1)=[];
% break
% end
% end
else
cc=cc+1;
catecell{cc}=[sidc(1) rowid(sidc(1))];
for ii=2:length(sidc)
if sidc(ii)==rowid(sidc(1));
sidc(ii)=[];
break
end
end
sidc(1)=[];
end
end
rij=zeros(length(catecell),length(catecell));
for ii=1:length(catecell)-1
ca=catecell{ii};
for jj=ii+1:length(catecell)
cb=catecell{jj};
rij(ii,jj)=min(min(lij(ca,cb)));
end
end
rij=rij+rij';
rij=rij+diag(2*m*ones(size(rij,1),1));
[ri,rowi]=min(rij);
[ri,coli]=min(ri);
ckk=rowi(coli);
eli=catecell{coli};
plij=lij(eli,eli);
elong=length(eli);
if elong>1
cons=ones(elong,elong)-triu(ones(elong,elong));
aimax=max(max(cons.*plij));
else
aimax=plij;
end
eli=catecell{ckk};
plij=lij(eli,eli);
elong=length(eli);
if elong>1
cons=ones(elong,elong)-triu(ones(elong,elong));
akmax=max(max(cons.*plij));
else
akmax=plij;
end
if ri<akmax | ri<aimax
sigmin=min(ckk,coli);
merg=catecell{sigmin};
sigmax=max(ckk,coli)
merg=[merg catecell{sigmax}];
catecell{sigmin}=merg;
% hmax=0;wmax=0;
% for ii=1:length(modstr)
% [m,n]=size(modstr(ii).va);
% if m>hmax hmax=m; end
% if n>wmax wmax=n; end
% end
%
% normal=zeros(hmax,wmax);
% for ii=1:length(modstr)
% [m,n]=size(modstr(ii).va);
% hm=fix((hmax-m)/2);
% wn=fix((wmax-n)/2);
% mid=normal;
% mid(hm+1:hm+m,wn+1:wn+n)=modstr(ii).va;
% struct(ii).va=mid;
% struct(ii).na=ii;
% end
% xx=length(struct);
% rrange=hmax*wmax;
% ssample=[];
% for i=1:xx
% aa=reshape(struct(ii).va,1,rrange);
% ssample=[ssample;aa];
% end
% [cc ss]=subclust(ssample,.4);
% xx=length(struct);
% cout=zeros(xx,xx);
% for ii=1:xx-1
% adis=bwdist(struct(ii).va);
% for jj=ii+1:xx
% bdis=bwdist(struct(jj).va);
% about=adis-bdis;
% sout=sum(sum(about.*about))/(hmax*wmax);
% cout(ii,jj)=sqrt(sout);
% end
% end
%
% mmax=max(max(cout));
% ccout=cout/mmax;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -