一、MATLAB思路
Step 1:读取图片内容
Step 2:生成匹配率矩阵
Step 3:生成邻接关系
Step 4:寻找第一张图片
Step 5:生成拼接顺序并储存
Step 6:完整图片呈现
二、MATLAB代码
%1 读取图片
%2 生成匹配率矩阵
%3 生成邻接关系
%4 寻找第一张图
%5 生成拼接顺序
%6 完整图片呈现
clc;clear all;close all;
%=======一、读取批量图片============
pics=readallpics();%批量读取要拼接的所有图片
%=======二、生成匹配率矩阵=============
ppjz=zeros(19,19);%存储计算后的匹配率
for k=1:19
for n=1:19
ppjz(k,n)=norm(double(pics(:,72,k)) - double(pics(:,1,n)));%cps(pics(:,:,k),pics(:,:,n)),计算范数,即两个数据之间的差值越小,说明匹配度越高
end
end
%=====================================
%=====三、生成邻接矩阵====================
Lj_mat=zeros(3,19);
for k=1:19
[val_min,pst]=min(ppjz(k,:));%寻找第k行最小值和最小值所在列
Lj_mat(1,k)=k;
Lj_mat(2,k)=pst;%所在位置进行保存,pst即指的是数值所在列
Lj_mat(3,k)=val_min;%最小数值
end
%================================
[a,first_pic]=find(ppjz==min(min(ppjz)));%寻找第一张图片
%=======max(max(ppjz))意思是将ppjz的每一列最大数找出来(max(ppjz)),生成一个新的1行矩阵,然后max(max(ppjz))即再将1行矩阵中的最大数找出来========
%======四、生成拼接顺序=================
pic_indx=zeros(1,19);%用与存放拼接顺序
pic_indx(1)=first_pic;%往拼接顺序表里填第一张图片编号(根据邻接关系矩阵来做)
for k=2:19
pic_indx(k)=Lj_mat(2,pic_indx(k-1));
end
%===================================
%=========五、根据拼接顺序,生成完整的图片=========
pic_whl=[];%立体图在pics当中
for k=1:19
pic_whl=[pic_whl,pics(:,:,pic_indx(k))];
end
%======================================
imshow(pic_whl);%整图显示
三、效果图
四、附件
百度网盘链接:
链接:https://pan.baidu.com/s/1oLVZJiCzAel_KgPHFj2L2g
提取码:1622
--来自百度网盘超级会员MroSsr的分享