题目链接:https://blog.csdn.net/CSDN___CSDN/article/details/82051821
http://www.shumo.com/wiki/doku.php?id=2013_%E5%B9%B4%E5%85%A8%E5%9B%BD%E5%A4%A7%E5%AD%A6%E7%94%9F%E6%95%B0%E5%AD%A6%E5%BB%BA%E6%A8%A1%E7%AB%9E%E8%B5%9B_cumcm_%E8%AF%95%E9%A2%98
前提是:把十九张照片放在当前文件夹下
附件一,附件二是同一个程序
运行环境是:MATLAB2014a
clear all;clc; % 导入附件1图像矩阵
for i=0:18
if i<10
t=strcat('00',int2str(i),'.bmp');
cell{1,i+1}=imread(t);
else
t=strcat('0',int2str(i),'.bmp');
cell{1,i+1}=imread(t);
end
end
for i=1:19
level=graythresh(cell{1,i});
% graythresh是一个函数,
% 功能是使用最大类间方差法找到图片的一个合适的阈值。
% 利用这个阈值通常比人为设定的阈值能更好地把一张灰度图像转换为二值图像。
cell1{1,i}=im2bw(cell{1,i},level); %图像二值化处理
end
for i=1:19
for k=1:19
xs(i,k)=0;
for j=1:1980
if(cell1{1,i}(j,72)==cell1{1,k}(j,1)) %求相似度的矩阵
xs(i,k)=1+xs(i,k);
end
end
% 如果第i和第k张能够完好的衔接,则xs(i,k)
% 为什么不能直接使用
% if(cell1{1,i}(:,72)==cell1{1,k}(:,1))
% xs(i,k)=1+xs(i,k);
% 因为衔接的时候并不是都是一样的,只能看哪个相似度最大
end
end
%load 'ti1.mat';
for i=1:19
xs(i,i)=0;
end
for i=1:19
da(i)=max(xs(i,:));
end
wei=find(da==max(da));
% xs(7,9)=1980
% 说明第九张图是第一个,第七张图是最后一个
for i=1:19
k=find(xs(i,[1:19])==da(i)); %求出两两相邻的矩阵
lian(i,1)=i; %为前者
lian(i,2)=k; %为后者
end
lian(wei,1)=0;%wei=7
tou=lian(wei,2);
xu(1)=tou;%9
for i=1:18
xu(i+1)=lian(xu(i),2); %正确的图像排序序列
end
%根据求出的序列xu画图
for i=1:19
I(:,[72*(i-1)+1:72*i])=cell{1,xu(i)}; %将图复原
% size(cell{1,1})=1980 72
end
imwrite(I,'hanzi.jpg','quality',100);
imshow('hanzi.jpg') %输出图像