浅析碎纸片拼接matlab含源码(2013年数学建模赛题)

目的:将一张被纵向等距切割成19份的碎纸片复原。

解题思路:

1.预处理。

批量导入图片转化为矩阵,按序将碎纸片的首列向量和末列向量分别存储首矩阵和末矩阵。

2.找开头。

通过纸片边缘的空白确定“头”(左边第一张碎纸片)。通过头所在的序列号索引到相应的末矩阵列。

3.相似度。

确认末矩阵的列,在首矩阵中找到最相似的列,再通过头确定尾。按序索引图片进行拼接。

3a7311486a93498ab185b4f057b07295.png

复原效果图:7125445ddafb4483ae1331cf1c01af2a.png

源码

clear;close all;
A = zeros(1980,1368);
C = 0;
imstart = zeros(1980,19);
imend = zeros(1980,19);

%% 设置文件夹路径
folder_path = 'C:\Users\Desktop\paper19';

% 获取文件夹中的所有图像文件
file_list = dir(fullfile(folder_path, '*.bmp')); % 根据需要修改文件扩展名

%% 循环处理每个图像文件
for i = 1:numel(file_list)
    % 读取图像
    img = imread(fullfile(folder_path, file_list(i).name));
    
    % 将图像转换为矩阵
    matrix = double(img);
    imstart(:,i) = matrix(:,1);
    imend(:,i) = matrix(:,72);
    % 在此处添加你想要的处理步骤
end
%%找到第一张图片
for i = 1:numel(file_list)
    if imstart(:,i) == 255
        A(:,1:72) = double(imread(fullfile(folder_path, file_list(i).name)));
        C = i;
        break
    end
end
%% 识别储存后续图片
for j=2:numel(file_list)
    
mindis = norm(imend(:,C) - imstart(:,1)); 
minIndex = 1;
for i = 2:numel(file_list)
    distance1 = norm(imend(:,C) - imstart(:,i)); 
    if distance1 < mindis
        mindis = distance1;
        minIndex = i;%保留索引
    end
end
    start_col = 72 * j - 71;  
    end_col = 72 * j; 
    A(:,start_col:end_col) = double(imread(fullfile(folder_path, file_list(minIndex).name)));
    C = minIndex;
end
%% 显示图片
imNew = uint8(A);
imshow(imNew, []);

 

 

  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我无法提供具体的代码。但是根据引用\[1\]和引用\[5\]的描述,可以知道该文章使用了Matlab编写程序来实现纸片拼接。文章通过比较待拼片与剩余片的信噪比值来确定两片是否为相邻片,并采用不同的拼接算法来处理不同情况的纸片。对于只有纵切的情形,文章连续调用右拼函数和左拼函数来拼接片,从而得到整幅复原图像。对于单面纵横交错切的情形,文章先将拼接成多幅横条图片,然后将各横条图片矩阵转置,再次采用纵切拼接算法拼接。这些算法都需要人为参与。所以,你可以根据这些描述来编写自己的Matlab代码来实现纸片拼接。 #### 引用[.reference_title] - *1* *3* *4* [纸片拼接复原算法及MATLAB实现](https://blog.csdn.net/m0_59833680/article/details/119908276)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [MATLAB纸片的自动拼接复原技术](https://blog.csdn.net/m0_60677550/article/details/120264321)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *5* [MATLAB纸片拼接复原](https://blog.csdn.net/m0_65908410/article/details/122233909)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值