针对2013年B题碎纸片拼接问题(附件一、附件二)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDN___CSDN/article/details/82118233

题目链接: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')                      %输出图像

猜你喜欢

转载自blog.csdn.net/CSDN___CSDN/article/details/82118233