一、读取所有图片
%A=imread('C:\Users\admin\Desktop\数学建模\数学建模\2013B\附件1\000.bmp');
%imshow(A);
file_path = 'C:\Users\admin\Desktop\数学建模\数学建模\2013B\附件1\';% 图像文件夹路径
img_path_list = dir(strcat(file_path,'*.bmp'));%获取该文件夹中所有jpg格式的图像
img_num = length(img_path_list);%获取图像总数量
image=cell(1,img_num);
if img_num > 0 %有满足条件的图像
for j = 1:img_num %逐一读取图像
image_name = img_path_list(j).name;% 图像名
image{j} = imread(strcat(file_path,image_name));
fprintf('%d %d %s\n',i,j,strcat(file_path,image_name));% 显示正在处理的图像名
%图像处理过程 省略
end
end
%imshow(image);
二、以灰度值矩阵储存
0~255=>0/1
%仅为一个示例
thresh=graythresh(image{1});%自动获取阈值
tu = imbinarize(image{1},thresh2);%二值化
Matrix1=tu;%将二值化图像转化为矩阵
三、每张纸条最右匹配其余纸条最左
并将最匹配的存在一张[2,19]的二维表中
match=0;%匹配度计数
right=zeros(2,19);%第一行:匹配度最大的纸条编号 第二行:其匹配数
%disp(Matrix(:,1));
for i = 1:img_num %每个纸条(i)都要轮一遍
for j=1:img_num %每个纸条的右侧都要和其余纸条(j)的左侧匹配一次
if i==j %轮到自身左右配对,跳过
continue
end
for k=1:1980 %长度为1980像素
if Matrix{i}(k,72)==Matrix{j}(k,1)
match=match+1;
end
end
if match>right(2,i)
right(2,i)=match;
right(1,i)=j;
end
match=0;
end
end
四、求出最左侧的纸条
for i=1:19
sum=0;
for j=1:1980
if Matrix{i}(j,1)==1
sum=sum+1;
end
end
if(sum>max)
max=sum;
leftest=i;
end
end
五、拼接
将两个数组结合成一个,先定义一个空数组,如A= [ ],然后再把两个数组依次赋给A,见下例。
A=[]; a=[1 2]; b=[3 4];A=[A a];A =1 2
A=[A b]; A =1 2 3 4
next=leftest;
disp(leftest);
all=Matrix{next};
for i=1:18
next=right(1,next);
all=[all,Matrix{1,next}];
end
imshow(all);
结果截图: