碎纸条拼接复原

有一份文字文件被纵向切割成为19条碎纸条,文字为中文,现通过计算机编程计算将其还原。图片切割如图所示:

1440598279_20150826204054

这个问题可以理解为碎纸条排列成一个序列,要使得碎纸条与碎纸条之间的差异最小。在这个问题中,可以将每张碎纸条理解为一个点,将两张纸条拼接起来时边缘的吻合程度为对应两个点的距离。由于文字文件两边都会有留白,所以最后一张碎纸条的右边与第一张碎纸条的左边都是留白,因此它们能很好吻合,这就使得碎纸条能够连接成为一个回路。这样子就可以将问题转化为求拜访每个地点后回到起点的最短路径的“旅行商问题”。“旅行商问题”常被称为“旅行推销员问题”,是指一名推销员要拜访多个地点时,如何找到在拜访每个地点一次后再回到起点的最短路径。

1 碎纸条吻合程度的量化

1.1 边缘吻合程度

图片在计算机中是以矩阵的形式表示的。例子中给出的是灰度图像,即图像没有色彩。灰度图像的像素数据就是一个矩阵,矩阵的行对应图像的高(单位为像素),矩阵的列对应图像的宽(单位为像素),矩阵的元素对应图像的像素,矩阵元素的值就是像素的灰度值。两张图片边缘的越能吻合,它们边缘对应像素的灰度值就越接近,所以在这里我们使用两张碎纸条边缘像素的灰度值的差的绝对值的和来描述两张碎纸条边缘的吻合程度。吻合度越小表示越吻合。即:

式中d表示吻合程度,akq表示碎纸条i第k行第q列的像素的灰度值,ak1表示碎纸条j第k行第一列的像素的灰度值。

1.2 邻接矩阵

我们用邻近矩阵的形式来表示任意两张碎纸条的吻合程度。我们规定,邻接矩阵中第i行第j列的元素dij表示将序号为j的碎纸条连接到序号为i的碎纸条的右边的吻合程度。因此,通过1.1中对碎纸条边缘吻合程度的量化,我们可以得到一个19*19的矩阵。

1.3 邻接矩阵的计算

邻接矩阵能够通过MATLAB编程计算出来,程序如下:

 
clear;clc; %运行本程序时需要将 m 文件放到存储碎纸条的文件夹中 %并且将MATLAB的根目录 CD 到储存碎纸条的文件夹中 ljjz = ones(19,19);  %邻接矩阵 for i = 0:18     %根据序号得到文件名     if(i<10)         imiph = ['00',num2str(i),'.bmp'];     else         imiph = ['0',num2str(i),'.bmp'];     end     for j = 0:18         if(j<10)             imjph = ['00',num2str(j),'.bmp'];         else             imjph = ['0',num2str(j),'.bmp'];         end         %读取图片,并且将图片矩阵转为double         imi = im2double(imread(imiph));         imj = im2double(imread(imjph));         [imh,iml] = size(imi);         %相减,求吻合度         mysum = sum(abs(imi(:,iml) - imj(:,1)));         ljjz(i+1,j+1) = mysum;     end end
 

 

 

运行这个程序就能得到邻接矩阵。

2 碎纸条拼接序列

2.1 旅行商模型

“旅行商问题”可以利用0-1规划求解。设xij = 1为将序号为j的碎纸条连接到序号为i的碎纸条的右边;dij为相应的吻合程度。对于任意一张碎纸条,只能有一张碎纸条连接在它的左边,也只能有一张碎纸条连接在它的右边,所以有以下两个约束条件。

由此可以得到以下0-1规划模型:

1440598293_20150826214258

 

2.2 LINGO求解

LINGO是一款用于求解线性或非线性规划模型的优秀的软件,我们将应用这款软件求解2.1总的模型。程序代码如下:

sets:          s/1..19/;          link(s,s):d,x;
endsets
Data:
d =  数据省略
enddata
min = @sum(s(i):@sum(s(j):x(i,j)*d(i,j)));
@for(s(i):@sum(s(j):x(i,j)) = 1);
@for(s(j):@sum(s(i):x(i,j)) = 1);
@for(s(i):@for(s(j):@bin(x(i,j))));

 

 

代码中的d为邻接矩阵,是1中MATLAB的计算结果。

3 拼接碎纸条

3.1 分析结果

通过2.2的计算,我们能够得到一个回路,但是这并不能很好的拼接碎纸条,因为我们并不知道从何开始拼接。由于文字文件的左右两端都会有留白,所以第一张碎纸条的左边应是有留白的,通过这个特点,我们能利用肉眼观察找到最左边的碎纸条。经过观察确定,编号为008的碎纸条为第一张碎纸条。这样子我们就能得到碎纸条的拼接顺序,如下:

8141215310216145913181171706

3.2 拼接碎纸条

利用3.1的分析结果,通过MATLAB编程,即可将碎纸条拼接成一张完整的文字文件。程序代码如下:

 
sets:s/1..19/;          link(s,s):d,x; endsets Data:=  数据省略 enddata min = @sum(s(i):@sum(s(j):x(i,j)*d(i,j))); @for(s(i):@sum(s(j):x(i,j)) = 1); @for(s(j):@sum(s(i):x(i,j)) = 1); @for(s(i):@for(s(j):@bin(x(i,j))));
 

 

 

拼接结果如下:

1440598300_20150826220425

从结果上看,拼接效果很好。

本问题是2013年全国大学生数学建模大赛B题的第一问,这篇文章是作者参考竞赛论文《基于旅行商模型的文字碎纸片拼接复原》写成,作为练习之用。本文程序由作者自己编写,方法参考竞赛获奖论文。

转载于:https://www.cnblogs.com/chenjiafeng/p/5330074.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28932.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以计算机为主题的作文500字,玩电脑作文500字(精选10篇)

玩电脑作文500字(精选10篇) 在日常学习、工作抑或是生活中&#xff0c;大家一定都接触过作文吧&#xff0c;作文是经过人的思想考虑和语言组织&#xff0c;通过文字来表达一个主题意义的记叙方法。你写作文时总是无从下笔&#xff1f;下面是小编整理的玩电脑作文500字(精选10篇…

一堂难忘的计算机课作文,难忘的一堂课作文7篇

难忘的一堂课作文7篇 课堂是我们获取知识的重要一个途径&#xff0c;各位&#xff0c;我们看看下面的难忘的一堂课高中作文&#xff0c;欢迎阅读。 难忘的一堂课作文一 “叮铃铃……”上课铃响了&#xff0c;同学们都坐到自己的位置上。看看课程表&#xff0c;这节课是语文课&a…

传纸条

ContestsProblemsRanklistStatus 17120581088Logout 传纸条 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 传纸条是一种在课堂上传递信息的老方法&#xff0c;虽然现在手机短信和QQ聊天越来越普及&#xff0c;但是手写的信息会让人感到一…

我有一个计算机梦想作文500,我有一个梦想作文500字(精选3篇)

我有一个梦想作文500字(精选3篇) 在平平淡淡的日常中&#xff0c;大家都经常接触到作文吧&#xff0c;作文是人们把记忆中所存储的有关知识、经验和思想用书面形式表达出来的记叙方式。那么问题来了&#xff0c;到底应如何写一篇优秀的作文呢&#xff1f;以下是小编整理的我有一…

一节计算机课作文500,难忘的一堂课作文500字5篇

难忘的一堂课作文500字5篇 上学以来,每一天我们都在上课,学校的课,人生的课,总有那么一些课让我们难忘。下面就是小编整理的难忘的一堂课作文500字,一起来看一下吧。 难忘的一堂课作文500字1 记得在二年级下学期的时候,一天下午,上语文课,刘老师一进教室就说:“同学们…

275. 传纸条

和方格取数的分析一样 #include <iostream> #include <algorithm> using namespace std; const int N55; int dp[2*N][N][N]; int a[N][N]; int main() {int m,n;cin>>m>>n;//注意和方格取数不同的点在于是一个矩形不是正方形for(int i1;i<m;i)for…

作文纸条APP分析

基于官网下的的apk&#xff0c;版本号是v4.2.1 静态代码分析 注&#xff1a;使用apktool反译apk 从AndroidManifest分析 多Activity的UI架构&#xff0c;每次个模块的主界面都是一个独立的Activity 接入了友盟SDK&#xff0c;至少使用了友盟分享与帐号登录组件 使用了阿里云…

调教LLaMA类模型没那么难,LoRA将模型微调缩减到几小时

选自Lightning AI 作者&#xff1a;Sebastian Raschka机器之心编译编辑&#xff1a;赵阳 LoRA 微调方法&#xff0c;随着大模型的出现而走红。 进NLP群—>加入NLP交流群 最近几个月&#xff0c;ChatGPT 等一系列大语言模型&#xff08;LLM&#xff09;相继出现&#xff0c;随…

chatgpt赋能python:Python文本清洗——有效管理大数据

Python文本清洗——有效管理大数据 Python是一种高级编程语言&#xff0c;因其简单易用和可扩展性而受到广泛的青睐。Python的强大功能让其成为一款优秀的文本编辑工具&#xff0c;特别是在处理大数据时更是如此。其中&#xff0c;Python文本清洗是将原始数据进行预处理和过滤…

百度回应文心一言被指“套壳”;​比尔·盖茨:AI 的时代已经开启;Apache Flink 1.17 发布|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…

数字孪生是什么

数字孪生&#xff08;Digital Twins&#xff0c;数字镜像、数字化映射&#xff09;是充分利用物理模型&#xff08;物理对象的数字模型&#xff0c;不一定可视化&#xff0c;不一定是有形的模型&#xff09;、传感器更新、运行历史等数据&#xff0c;集成多学科、多物理量、多尺…

数字孪生技术的实用价值在哪里?用四个案例为你解答

数字孪生技术目前已经广泛应用于农业、工业、教育、交通、医疗等多个领域&#xff0c;参考下面这些实际案例&#xff0c;就能明白数字孪生技术的实用价值了。 智慧农业 在农业上&#xff0c;利用数字孪生技术可以收集当前大棚内的实时温度、湿度等数据&#xff0c;还能利用物联…

数字孪生应用案例及常用技术

数字孪生作为新一代高新技术&#xff0c;结合人工智能、5G、区块链等前沿技术与各产业不断融合深化&#xff0c;有力推动各行业数字化转型的发展&#xff0c;实现智能互联网时代的升级与变革。那么数字孪生运用过程中&#xff0c;常用的技术有哪些呢&#xff1f; 一、建模 目前…

数字孪生技术(数字化双胞胎)

数值建模与仿真、机器学习以及将信息连接起来的物联网、云平台等领域&#xff0c;对这些领域内的数据和应用的集成能力同样是数字化双胞胎的关键技术。当前&#xff0c;数字化双胞胎的应用领域与范畴还在不断发展&#xff0c;以上各个领域的突破都可能会提高数字化双胞胎的实际…

数字孪生常用关键技术,有哪些软件?

数字孪生技术中本质是利用虚拟孪生体建模还原物理世界场景。传统建模技术速度慢、还原度低&#xff0c;而物理世界数据驱动的实时可视化开发门槛高、效率低和开发难度大。利用快速三维建模技术&#xff0c;可以轻松助力虚拟孪生场景的建模和物理世界数据实时驱动的可视化显示难…

一个大屏掌握港口全部信息的数字孪生技术

随着数据可视化技术的不断发展&#xff0c;数据可视化也不断被应用于各个行业&#xff0c;今天为大家介绍数据可视化在水利方面的应用&#xff0c;通过山海鲸可视化的智慧港口模板进行详细说明。 首先为大家介绍一下山海鲸可视化软件&#xff0c;山海鲸可视化是国内近几年新崛…

数字孪生定义、意义及案例

资料全部为网络搜集&#xff01; 数字孪生 定义 数字孪生&#xff08;Digital twin&#xff09;是充分利用物理模型、传感器更新、运行历史等数据&#xff0c;集成多学科、多物理量、多尺度、多概率的仿真过程&#xff0c;在虚拟空间中完成映射&#xff0c;从而反映相对应的…

什么是 “数字孪生”

数字孪生&#xff08;Digital Twin&#xff0c;DT&#xff09;是一种超现实的概念&#xff0c; 其又被人命名为数字镜像或者数字化映射。 数字孪生简言之就是根据某个设备或系统的“物理实体”&#xff0c; 在虚拟世界中创造出一个与之完全相同的数字版的“虚拟模型”&#x…

行业前沿 | 数字孪生技术发展研究

随着无人机作业自主性、智能化、多任务等方面要求的提高&#xff0c;无人机从单机作业发展到集群作业&#xff0c;针对无人机集群协同算法开发过程中如何将集群协同算法从仿真环境迁移至真实环境且保证算法可靠性&#xff0c;一直是无人系统方向研究的重点。 数字孪生仿真以多…

数字孪生典型应用案例

数字孪生是大数据、人工智能、物联网等技术的蓬勃背景下&#xff0c;在传统仿真技术基础上衍生的新技术&#xff0c;作为一项虚实结合的数字化转型技术&#xff0c;现阶段正在各个领域加速落地。 随着城市数字模型的扩充与发展&#xff0c;数字孪生技术将覆盖城市的每条电力线…