2003年国赛数学建模B题碎纸片拼接复原问题参考

一、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的分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值