目录

  • 赛题解析
    • 题目
    • 解题思路
    • 算法细节
    • 运行结果
    • Matlab源码

赛题解析

题目

2013年B题 碎纸片的拼接复原

    破碎文件的拼接在司法物证复原、历史文献修复以及军事情报获取等领域都有着重要的应用。传统上,拼接复原工作需由人工完成,准确率较高,但效率很低。特别是当碎片数量巨大,人工拼接很难在短时间内完成任务。随着计算机技术的发展,人们试图开发碎纸片的自动拼接技术,以提高拼接复原效率。纵切片如下(共19张):

    接下来讨论这个问题:对于给定的来自同一页印刷文字文件的碎纸机破碎纸片(仅纵切),建立碎纸片拼接复原模型和算法。

我们在全国大学生数学建模竞赛上可以下载到这道题目所给的图片数据。
全国大学生数学建模竞赛官网: 历年赛题.
如果对数学建模历年所有题目感兴趣也欢迎下载我整理好的资料:全套

解题思路

    我们首先会得到一张完整诗歌图片的19张等长纵切片,这些图片被完全打乱了顺序。我们所要做的就是创建一个合理的模型来实现对所有碎片的重排序与拼接。
    首先我们知道,我们得到的碎片如果不是在左右两边,那么它的左右两边都是有可能有不完整的汉字的。如果我们把这些图片转换成0-1像素矩阵(0表示黑色,1表示白色),那么任意两个处于中间位置的图片,位于左方图片的最右边与右方图片的最左边,每一行对应的值基本是相等的。此时我们用列向量相减的方法,得到另一个列向量,它表示任一碎片的最左边与另一张碎片的最右边像素列向量每一行对应的差值,再求和以此来表示两张碎片之间的"距离"。之后我们再对这些"距离"进行排序,找到最小的那个,就表示这个"距离"对应的两张碎片是相临的。

算法细节

  1. 用imread函数读取图片并转换成0-1矩阵(0表示黑色,1表示白色)。
  2. 首先计算每张图片的第一列与最后一列的总和,找出第一张图片(最左边)和最后一张图片(最右边)。
  3. 从左边的开始,以此计算它与剩下的每个碎片的最右边的"距离",再找出最小的那个,就代表它们相邻。
  4. 我在这设置了一个类似于C语言指针的变量p,这里p始终指向当前处理的碎片,即要找出与它右相邻的另一张碎片。(p表示一组行向量的下标,具体见代码。)
  5. 继续的进行第4步,直到p指向之前已经找到的最右边的碎片。
  6. 将对应的矩阵按顺序拼接起来,然后用imshow函数输出显示。

这套算法我是用matlab实现的,但是由于本人对matlab的理解过于浅薄,对矩阵运算理解的还不够,所以希望各位大神多多指出我的不足。

运行结果

Matlab源码

此处展示以上解析的源码,如何运用最小距离方法将分成19列的碎纸片拼接成一张完整的图片。

clc
clear
close all
%1、把碎片的矩阵进行提取
%2、把矩阵转换为向量(行和或者行平均)
%3、对11*19个向量运用聚类(系统聚类:向量之间的距离用相关系数、类与类之间的距离用ward)
%4、对每一类用第一题中的算法进行分类
pic1=zeros(1980,72,19);
pic3=zeros(1980,1368);
for i=0:18s=strcat(int2str(i),'.bmp');pic1(:,:,i+1)=imread(s);
end
%%%将图片二值化
for i=1:19for j=1:1980for p=1:72if pic1(j,p,i)~=255pic1(j,p,i)=1;elsepic1(j,p,i)=0;%黑色为0,白色为1endendend
end
r=zeros(19);
for i=1:19for j=i:19r(i,j)=sum(abs(pic1(:,1,i)-pic1(:,end,j)));end
end
for i=1:19for j=1:ir(i,j)=sum(abs(pic1(:,end,i)-pic1(:,1,j)));end
end
for i=1:19r(i,i)=inf;
end
for i=1:19if pic1(:,1,i)==0first_pic=i;%找到第一张图片endif pic1(:,end,i)==0end_pic=i;%找到最后一张图片end
end
r1=1980*ones(1,19);
rank_pic=zeros(1,19);
p1=first_pic;
xuhao=1;
rank_pic(xuhao)=first_pic;
cjl=0;%当这个值为0时说明没有重复,从第一个排序向量开始一开始p1=first,之后我们都要判定当前计算的i值是否已经出现过,如果出现过那么就跳过不计算。
while p1~=end_picfor i=1:19for j=1:iif i==rank_pic(j)cjl=1;endendif i~=p1 && cjl==0r1(i)=sum(sum(abs(pic1(:,end,p1)-pic1(:,1,i))));endcjl=0;end[~,label]=min(r1);p1=label;cjl=0;r1=1980*ones(1,19);%将R1重新初始化!!!!xuhao=xuhao+1;%序号递增rank_pic(xuhao)=label;%将当前得到的最短距离放入排好的序列
end
pic2=pic1(:,:,rank_pic(1));
for i=1:18pic2=[pic2 pic1(:,:,rank_pic(i+1))];
end
[m,n]=size(pic2);
pic2=1-pic2;
imshow(pic2);

如果想要交流更多数据建模比赛的经验
欢迎关注我的公众号**夏虫不可语冰也**
同时也欢迎访问我的个人网站 www.cjl946.com

数学建模-关于碎纸片的拼接复原的理解(2003年建模国赛B题 附Matlab源码)相关推荐

  1. 数学建模 2013B碎纸片的拼接复原

    一.读取所有图片 %A=imread('C:\Users\admin\Desktop\数学建模\数学建模\2013B\附件1\000.bmp'); %imshow(A); file_path = 'C ...

  2. 数学建模之图论——图与网络模型(一)(基本概念和最短路问题,附MATLAB源码)

    图与网络的基本概念与数据结构 一.图与网络的基本概念 图论中图是由点和边构成的,可以反映一些对象之间的关系. 无向图 无向图(简称图):没有方向,由点和边构成的图,记做G =(V , E),点是V,边 ...

  3. MATLAB实战系列(十七)-大学生数学建模赛题解析-水塔中水流量估计(附MATLAB源码)

    题目 美国某洲的各用水管理机构要求各社区提供以每小时多少加仑计的用水率以及每天总 的用水量,但许多社区并没有测量水流入或流出当地水塔的水量的设备,他们只能代之以每小时测量水塔中的水位,精度在 0.5% ...

  4. 数学建模 碎纸片的拼接复原 灰色关联算法

    数学建模 碎纸片的拼接复原 灰色关联算法 第一问: 采用灰色关联分析(完美解决~~哈哈,调试出来了) clc; clear; % 第一问代码 文件名:Qusetion1.m filename = 'E ...

  5. 数学建模还原纸片matlab程序,碎纸片的拼接复原问题大学生数学建模全国一等奖论文.doc...

    碎纸片的拼接复原问题 摘要 为解决碎纸片的拼接复原问题,我们通过定义差异度指数.高度差,建立0-1规划模型,使用聚类分析.MATLAB搜索算法和人工干预等相结合,得到了所有附件复原序号和复原图片. 针 ...

  6. (数学建模)2013年国赛B题-碎纸片复原python代码

    数字图像处理的期末大作业 成绩出来了,感觉一般般,做个记录 代码图片文件:数学建模2013年国赛B题碎纸片复原(纵切和横纵切两问)-统计分析文档类资源-CSDN下载 目录 第一问 碎纸片拼接--纵切 ...

  7. 碎纸片的拼接复原-基于边缘匹配思想

    目录 选题 题目背景 问题提出 问题分析 文献查找 建立数学模型 方法选取的数学思想: 建模过程 工具选择与应用 代码实现 结果 附件 选题 题目背景 破碎文件的拼接在司法物证复原.历史文献修复以及军 ...

  8. matlab彩色碎片拼接与复原_碎纸片的拼接复原算法及MATLAB实现.doc

    碎纸片的拼接复原算法及MATLAB实现 2013高教社杯全国大学生数学建模竞赛 承 诺 书 我们仔细阅读了<全国大学生数学建模竞赛章程>和<全国大学生数学建模竞赛 赛区评阅编号(由赛 ...

  9. 碎纸片的拼接复原算法及MATLAB实现

    碎纸片的拼接复原算法及MATLAB实现 摘要:对于只有纵切的情形,文章通过比较当前待拼碎片与剩余碎片的信噪比psnr[1,3,4]的值来确定两碎片是否为邻接碎片:拼接算法首先连续调用右拼函数直到拼接到 ...

最新文章

  1. AI时代,人与机器的沟通方式
  2. 开发函数计算的正确姿势 —— 爬虫
  3. Yarn基本架构和工作机制
  4. 分布式消息队列 — RabbitMQ(1)
  5. opengl中gpu与cpu交互_OpenGL 环境配置与教程推荐
  6. 分享Silverlight/WPF/Windows Phone一周学习导读(1月9日-1月16日)
  7. git远程强制更新到本地
  8. 新年伊始 .Net7 preview1 发布!
  9. centos 基础命令第一节
  10. Apache Flume 简介
  11. Adroid我还是个菜鸟——导入jar包
  12. Redis过期删除策略
  13. 医院排队系统排队叫号系统
  14. 于佳宁担任BCF理事
  15. 严重的PHP缺陷可导致QNAP NAS 设备遭RCE攻击
  16. vue路由变化时使用axios取消所有请求
  17. AlertManager配置参数解析
  18. 【Hexo搭建个人博客】:yilia主题配置(一) - 基础配置
  19. 前端实现炫酷动效_创建炫酷 CSS 背景效果的 10 个代码片段
  20. 带宽,线速以及吞吐量的概念

热门文章

  1. 异常处理:Eclipse下解决Plugin execution not covered by lifecycle configuration异常
  2. 差分方程(递推关系式)
  3. PaxosStore解读
  4. 浅学 ----- C++ 继承和多态,文件操作
  5. 自媒体工具OpenWrite
  6. 焦虑症是什么?患上焦虑症该注意什么呢?
  7. Python中的布尔类型以及布尔值介绍
  8. 干货|手把手教你做app自动化测试
  9. TApplication
  10. MATLAB中的多项式拟合