clc
clear
close all
%1、把碎片的矩阵进行提取
%2、把矩阵转换为向量(行和或者行平均)
%3、对11*19个向量运用聚类(系统聚类:向量之间的距离用相关系数、类与类之间的距离用ward)
%4、对每一类用第一题中的算法进行分类
pic1=zeros(1980,72,19);
pic3=zeros(1980,1368);
for i=0:18
s=strcat(int2str(i),'.bmp');
pic1(:,:,i+1)=imread(s);
end
%%%将图片二值化
for i=1:19
for j=1:1980
for p=1:72
if pic1(j,p,i)~=255
pic1(j,p,i)=1;
else
pic1(j,p,i)=0;%黑色为0,白色为1
end
end
end
end
r=zeros(19);
for i=1:19
for j=i:19
r(i,j)=sum(abs(pic1(:,1,i)-pic1(:,end,j)));
end
end
for i=1:19
for j=1:i
r(i,j)=sum(abs(pic1(:,end,i)-pic1(:,1,j)));
end
end
for i=1:19
r(i,i)=inf;
end
for i=1:19
if pic1(:,1,i)==0
first_pic=i;%找到第一张图片
end
if pic1(:,end,i)==0
end_pic=i;%找到最后一张图片
end
end
r1=1980*ones(1,19);
rank_pic=zeros(1,19);
p1=first_pic;
xuhao=1;
rank_pic(xuhao)=first_pic;
cjl=0;%当这个值为0时说明没有重复,从第一个排序向量开始一开始p1=first,之后我们都要判定当前计算的i值是否已经出现过,如果出现过那么就跳过不计算。
while p1~=end_pic
for i=1:19
for j=1:i
if i==rank_pic(j)
cjl=1;
end
end
if i~=p1 && cjl==0
r1(i)=sum(sum(abs(pic1(:,end,p1)-pic1(:,1,i))));
end
cjl=0;
end
[~,label]=min(r1);
p1=label;
cjl=0;
r1=1980*ones(1,19);%将R1重新初始化!!!!
xuhao=xuhao+1;%序号递增
rank_pic(xuhao)=label;%将当前得到的最短距离放入排好的序列
end
pic2=pic1(:,:,rank_pic(1));
for i=1:18
pic2=[pic2 pic1(:,:,rank_pic(i+1))];
end
[m,n]=size(pic2);
pic2=1-pic2;
imshow(pic2);
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879