当前位置: 首页 > news >正文

2013年全国大学生数学建模竞赛B题碎纸片复原(含word论文和源代码资源)

文章目录

  • 一、部分题目
  • 二、部分论文
  • 三、部分源代码
  • 四、完整word版论文和源代码(两种获取方式)

一、部分题目

2013高教社杯全国大学生数学建模竞赛题目

B题 碎纸片的拼接复原

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

问题1 对于给定的来自同一页印刷文字文件的碎纸机破碎纸片(仅纵切),建立碎纸片拼接复原模型和算法,并针对附件1、附件2给出的中、英文各一页文件的碎片数据进行拼接复原。如果复原过程需要人工干预,请写出干预方式及干预的时间节点。复原结果以图片形式及表格形式表达(见【结果表达格式说明】)。

问题2 对于碎纸机既纵切又横切的情形,请设计碎纸片拼接复原模型和算法,并针对附件3、附件4给出的中、英文各一页文件的碎片数据进行拼接复原。如果复原过程需要人工干预,请写出干预方式及干预的时间节点。复原结果表达要求同上。

问题3 上述所给碎片数据均为单面打印文件,从现实情形出发,还可能有双面打印文件的碎纸片拼接复原问题需要解决。附件5给出的是一页英文印刷文字双面打印文件的碎片数据。请尝试设计相应的碎纸片拼接复原模型与算法,并就附件5的碎片数据给出拼接复原结果,结果表达要求同上。

二、部分论文

请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

三、部分源代码

完整代码 https://github.com/yan-fanyu/CUMCM-Paper-And-SourceCode
%分类算法,一类为一个裁剪行
num=209;
for i=1:num  %读取所有碎纸片if i<11[img0(:,i*72-71:i*72),cmap0(:,i*3-2:i*3)]=imread(strcat('00',num2str(i-1)),'bmp');elseif i<101[img0(:,i*72-71:i*72),cmap0(:,i*3-2:i*3)]=imread(strcat('0',num2str(i-1)),'bmp');else[img0(:,i*72-71:i*72),cmap0(:,i*3-2:i*3)]=imread(num2str(i-1),'bmp');end
end
biaozhun=zeros(1,num);
for i=1:numtemp=img0(:,72*i-71:72*i);temp2=zeros(180,1);for j=1:180if(sum(temp(j,:))==72*255)temp2(j)=255;endendfor j=1:180if(temp2(j+1)==255 && temp2(j)~=255) %寻找第一个变为255的行数(黑变白)b=j;break;endendbiaozhun(i)=b;
endbiaozhunpaixu=sort(biaozhun);
fenlei=zeros(11,19);
for i=1:11 %分类,19个分一类fenlei(i,:)=find(biaozhun<=biaozhunpaixu(i*19) & biaozhun>=biaozhunpaixu(i*19-18));
end%寻找第一片
diyipian=zeros(1,11);
k=1;
for i=1:209if(sum(sum(img0(:,i*72-71:i*72-62)))==255*180*10)diyipian(k)=i;k=k+1;end
end
%把实际第一片换到第一位 
for i=1:11[m,n]=find(fenlei==diyipian(i));fenlei(m,n)=fenlei(m,1);fenlei(m,1)=diyipian(i);
endgezhangtouying;
num=418;
%寻找第一个完整行的下边界作为分类依据
%计算第一个完整行的高度,分为三类:小字母[23,25] 一头或一尾或大写[34,39] [47,52]
biaozhun=zeros(num,1);
for i=1:numfor j=1:179if(touying(j,i)==0 && touying(j+1,i)~=0)for k=1:52if(touying(j+k,i)~=0 && touying(j+1+k,i)==0)break;endend%k为该完整行的高度if(k>=23 && k<=27)%对于小字母k+j为要记录的底部biaozhun(i)=k+j;elseif(k>=31 && k<=42)biaozhun(i)=k+j;elseif(k>=45 && k<=54)biaozhun(i)=k+j-14;endif(k<23)continue;endbreak;endend
end
temp=[4	8	11	29	79	102	107	136	142	146	157	159	161	163	168	174	175	199	204	222	240	259	270	272	278	289	295	306	307	312	313	322	330	336	342 347	363	377	378		386	399	400	405	410	413	417];
[t,n]=size(temp);
for i=1:nbiaozhun(temp(i))=biaozhun(temp(i))-14;
end
biaozhun(22)=84;%逗号
biaozhun(11)=84;%?
biaozhun(275)=(96)
biaozhun(69)=107;%下面半个
biaozhun(127)=86;
biaozhun(235)=86;
biaozhun(271)=33;%18
biaozhun(279)=55;%24
biaozhun(305)=84;%23
biaozhun(55)=32;%45
biaozhun(108)=76;%23
biaozhun(225)=55;%27
biaozhun(255)=85;%25
biaozhun(132)=53;%26
biaozhun(139)=95;%38
biaozhun(213)=55;%41
biaozhun(242)=84;%34
biaozhun(282)=74;%40
biaozhun(304)=53;%19
biaozhun(379)=75;%28
biaozhun(126)=109;%15
biaozhun(135)=85;
biaozhun(285)=63;%32
biaozhun(405)=76;%19?
%biaozhun(74)=biaozhun(74)-12+14;
%biaozhun(93)=biaozhun(93)-11;
%biaozhun(105)=biaozhun(105)-11;
%biaozhun(173)=89;%逗号
%biaozhun(95)=86;%逗号
%[0 2 22 25 33 34 62 40 74 102 110 113 140 151 167 169 173 201 208]-14
%!!73-12 104-11 92-11
%73
%寻找每行开头5列像素的255
diyipian=zeros(1,22);
k=1;
for i=1:numif(sum(sum(img0(:,i*72-71:i*72-60)))==255*180*12)diyipian(k)=i;k=k+1;end
end
%64
for i=1:numif biaozhun(i)>66biaozhun(i)=biaozhun(i)-64*floor(biaozhun(i)/64)end
end%计算每块第一块黑色区域的下边界
%65为行间距
%for i=1:num
%    if(biaozhun(i)-65*floor(biaozhun(i)/65)>11)
%        biaozhun(i)=biaozhun(i)-65*floor(biaozhun(i)/65);
%    end
%endbiaozhunpaixu=sort(biaozhun);完整代码 https://github.com/yan-fanyu/CUMCM-Paper-And-SourceCode%第一块黑色的下边缘
%{
for i=1:numfor j=1:179if(touying(j,i)-touying(j+1,i)>=9 && touying(j+1,i)<14)biaozhun(i)=j;break;endend
end
ans=sort(biaozhun);
%}%像素数直方图
num=209;for i=1:num  %读取所有碎纸片if i<11[img0(:,i*72-71:i*72),cmap0(:,i*3-2:i*3)]=imread(strcat('00',num2str(i-1)),'bmp');elseif i<101[img0(:,i*72-71:i*72),cmap0(:,i*3-2:i*3)]=imread(strcat('0',num2str(i-1)),'bmp');else[img0(:,i*72-71:i*72),cmap0(:,i*3-2:i*3)]=imread(num2str(i-1),'bmp');end
end
touying=zeros(180,209);%touying用每一列记录对应图片黑色像素点数
for i=1:209for j=1:180touying(j,i)=length(find(img0(j,i*72-71:i*72)~=255));end
end%计算投影
num=418;for j=1:num  %读取所有碎纸片if mod(j,2)==1si='a';elsesi='b';endi=ceil(j/2);if i<11[img0(:,j*72-71:j*72),cmap0(:,j*3-2:j*3)]=imread(['00',num2str(i-1),si],'bmp');elseif i<101[img0(:,j*72-71:j*72),cmap0(:,j*3-2:j*3)]=imread(['0',num2str(i-1),si],'bmp');else[img0(:,j*72-71:j*72),cmap0(:,j*3-2:j*3)]=imread([num2str(i-1),si],'bmp');end
end
touying=zeros(180,num);%touying用每一列记录对应图片黑色像素点数
for i=1:numfor j=1:180touying(j,i)=length(find(img0(j,i*72-71:i*72)~=255));end
end
%image(img0(:,1:72));
%colormap(cmap0(:,1:3));num=19;
sign=hang(i);
for i=1:num  %读取所有碎纸片if sign(i)<11[img0(:,i*72-71:i*72),cmap0(:,i*3-2:i*3)]=imread(strcat('00',num2str(sign(i)-1)),'bmp');elseif sign(i)<101[img0(:,i*72-71:i*72),cmap0(:,i*3-2:i*3)]=imread(strcat('0',num2str(sign(i)-1)),'bmp');else[img0(:,i*72-71:i*72),cmap0(:,i*3-2:i*3)]=imread(num2str(sign(i)-1),'bmp');end
end
img1=im2double(img0)*255;for i=1:19for j=1:19 %deta255(i,j)i的右侧和j的左侧的M距离deta255(i,j)=sum(abs(img1(:,i*72)-img1(:,j*72-71)));end
end
%人为干预
%deta255(13,7)=inf;deta255(13,6)=inf;deta255(8,7)=inf;
deta255(10,2)=0
now=1;
img(:,1:72)=img0(:,now*72-71:now*72);
shunxu(1)=sign(now);
now_temp(1)=now;
for i=2:numdeta255(:,now)=inf;now=find(deta255(now,:)==min(deta255(now,:)))now_temp(i)=now;shunxu(i)=sign(now);img(:,i*72-71:i*72)=img0(:,now*72-71:now*72);
end
figure;
image(img);
colormap(cmap0(:,1:3));
hold on;
for i=1:numtext((i-1)*72,150,int2str(now_temp(i)));
end
for i=1:numplot([72*i-1,72*i-1],[0,180])
end
%img0(:,1:72:1368)=0;完整代码 https://github.com/yan-fanyu/CUMCM-Paper-And-SourceCodeimg_gehang=zeros(180*11,72*19);
img0=zeros(180*11,72*19);
cmap0=zeros(180*11,72*19);
for i=1:11
for j=1:19  %读取所有碎纸片if gehang(i,j)<11[img0(180*i-179:180*i,j*72-71:j*72),cmap0(256*i-255:256*i,j*3-2:j*3)]=imread(strcat('00',num2str(gehang(i,j)-1)),'bmp');elseif gehang(i,j)<101[img0(180*i-179:180*i,j*72-71:j*72),cmap0(256*i-255:256*i,j*3-2:j*3)]=imread(strcat('0',num2str(gehang(i,j)-1)),'bmp');else[img0(180*i-179:180*i,j*72-71:j*72),cmap0(256*i-255:256*i,j*3-2:j*3)]=imread(num2str(gehang(i,j)-1),'bmp');end
end
end
image(img0);
colormap(cmap0(1:256,1:3));
touying=zeros(1980,1);
touying(find(sum(img0,2)==1368*255))=255;
hold on
axis off
for i=1:11
plot([0 1368],[i*180 i*180])
end
for i=1:180for j=1:11touying1(i,j)=touying((j-1)*180+i);end
end
for i=1:19
plot([i*72 i*72],[0 1980])
end%对于纵向剪裁的纸片的拼接,适用于中、英文
img0=zeros(1980,1368);cmap0=zeros(256,19*3);img=zeros(1980,1368);
for i=1:19%读取所有碎纸片[img0(:,i*72-71:i*72),cmap0(:,i*3-2:i*3)]=imread(num2str(i-1),'bmp');
enddeta255=zeros(19);
for i=1:19for j=1:19 %deta255(i,j)i的右侧和j的左侧deta255(i,j)=abs(sum(abs((img0(:,i*72)-img0(:,j*72-71)))));end
end
img(:,1:72)=img0(:,9*72-71:9*72);
now=9;%第一片序号
for i=2:19now=find(deta255(now,:)==min(deta255(now,:)));img(:,i*72-71:i*72)=img0(:,now*72-71:now*72);
end
image(img);
colormap(cmap0(:,1:3));
hold on
num=19
for i=1:numtext((i-1)*72,1980,int2str(now_temp(i)-1));
end
for i=1:numplot([72*i-1,72*i-1],[0,1980])
end
axis off
完整代码 https://github.com/yan-fanyu/CUMCM-Paper-And-SourceCode

四、完整word版论文和源代码(两种获取方式)

Word论文和源代码

Word论文和源代码

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python PDF Magic:合并和拆分随心所欲
  • windows server——5.DNS管理器域名解析搭建网站
  • 快速创建 vue 项目并添加 Dockerfile 文件
  • 手动构建线性回归(PyTorch)
  • 如何搭建一个RADIUS服务器?
  • vue3封装el-table及实现表头自定义筛选
  • CSP-J模拟赛day1
  • 【计算机网络】0 课程主要内容(自顶向下方法,中科大郑烇、杨坚)(待)
  • Flutter 开源库学习
  • 【Linux】shell简单模拟实现
  • Adobe Premiere Pro(Pr)安装包软件下载
  • 2024年热门硬盘数据恢复软件大盘点:高效恢复您的宝贵数据
  • 【数据结构】二叉树OJ题_对称二叉树_另一棵的子树
  • NAS新品“翻车”后,绿联科技要上市了
  • Chapter 5: 二叉树详解
  • .pyc 想到的一些问题
  • [NodeJS] 关于Buffer
  • express + mock 让前后台并行开发
  • happypack两次报错的问题
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Python_OOP
  • springMvc学习笔记(2)
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 如何胜任知名企业的商业数据分析师?
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 思维导图—你不知道的JavaScript中卷
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 用Python写一份独特的元宵节祝福
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • #ifdef 的技巧用法
  • #pragam once 和 #ifndef 预编译头
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (C语言)fread与fwrite详解
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (二) 初入MySQL 【数据库管理】
  • (二)windows配置JDK环境
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (转)大型网站架构演变和知识体系
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .Net各种迷惑命名解释
  • .net开发日常笔记(持续更新)
  • .NET下的多线程编程—1-线程机制概述
  • /etc/sudoer文件配置简析
  • @Builder用法
  • @RequestMapping处理请求异常