当前位置:文档之家› 2013年数学建模碎纸片的拼接程序

2013年数学建模碎纸片的拼接程序

承诺书我们仔细阅读了《全国大学生数学建模竞赛章程》和《全国大学生数学建模竞赛参赛规则》(以下简称为“竞赛章程和参赛规则”,可从全国大学生数学建模竞赛网站下载)。

我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、网上咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。

我们知道,抄袭别人的成果是违反竞赛章程和参赛规则的,如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。

我们郑重承诺,严格遵守竞赛章程和参赛规则,以保证竞赛的公正、公平性。

如有违反竞赛章程和参赛规则的行为,我们将受到严肃处理。

我们授权全国大学生数学建模竞赛组委会,可将我们的论文以任何形式进行公开展示(包括进行网上公示,在书籍、期刊和其他媒体进行正式或非正式发表等)。

我们参赛选择的题号是(从A/B/C/D中选择一项填写):B我们的参赛报名号为(如果赛区设置报名号的话):所属学校(请填写完整的全名):吉林医药学院参赛队员(打印并签名):1.徐曦2.贾赟光3.武松浩指导教师或指导教师组负责人(打印并签名):吴希(论文纸质版与电子版中的以上信息必须一致,只是电子版中无需签名。

以上内容请仔细核对,提交后将不再允许做任何修改。

如填写错误,论文可能被取消评奖资格。

)日期:2013年09月16日赛区评阅编号(由赛区组委会评阅前进行编号):编号专用页赛区评阅编号(由赛区组委会评阅前进行编号):赛区评阅记录(可供赛区评阅时使用):评阅人评分备注全国统一编号(由赛区组委会送交全国前编号):全国评阅编号(由全国组委会评阅前进行编号):碎纸片的拼接复原摘要本文通过对图片像素点灰度值的分析,研究碎纸片的拼接复原。

针对问题一,利用Matlab 软件求出附件1、2图片的像素点灰度值分布矩阵,提取每张图片的左右边缘的灰度值向量,根据图片像素点灰度值的不同,并据此建立spearman 相关系数模型[1]2361i s d n nρ=--∑利用SPSS 对边缘灰度值进行相关性分析,根据相关系数的大小得到两两匹配的纸片对,采用人工干预的方式将纸片左右边缘逐次进行拼接,得到附件1、附件2图片拼接的顺序,具体结果见表3、表5:表3附件1拼接顺序表5附件2拼接顺序针对问题二,在问题一的基础上,利用Matlab 软件求出附件3、4图片边缘像素点灰度值分布矩阵,提取每张图片的上、下、左、右边缘的灰度值向量,由于初始数据庞大,运用逐一比较像素点灰度值的思想设计算法,结合C 语言设计程序[2],实现快速拼接功能,得到附件3、附件4图片拼接的顺序,见正文表6、表7,此处列举部分数据,如下所示:针对问题三,在问题二的基础上,利用Matlab 软件求出附件5图片边缘像素点灰度值分布矩阵,提取每张图片的上、下、左、右边缘的灰度值集合,从解决问题的实际角度出发,对于双面打印文件,运用特殊点灰度值比较法设计算法,结合C 语言设计程序,实现拼接功能,得到附件5图片拼接顺序,见正文表8、表9。

此处列举部分数据,如下所示:关键词:像素点灰度值相关性分析逐一比较法C 语言8141215310216145913181171706362715181151913108121417164一问题重述传统的拼接复原工作需由人工完成,准确率较高,但效率很低。

当碎片数量巨大,人工拼接很难在短时间内完成任务。

分析给出的碎纸片,建立碎纸片拼接复原模型,提高拼接效率。

二问题分析2.1纵切单面纸片的复原根据附件1、附件2给出的图片,利用Matlab对图片像素点的灰度值进行提取,得到每张图片左右边缘的像素点灰度值,见附录1,建立spearman系数模型,利用SPSS 求解两条边缘灰度值的spearman系数,得到相关系数,根据相关系数大小提取匹配度高的两张图片,逐次拼接,得到碎纸片复原图。

2.2既纵切又横切单面纸片的复原由于图片为既纵切又横切的碎纸片,在问题一的基础上,根据附件3、附件4给出的图片,利用Matlab对图片像素点的灰度值进行提取,得到每张图片上、下、左、右边缘的像素点灰度值,运用逐一比较寻找最佳目标的思想设计算法,先横向拼接图形,再进行纵向拼接。

先确定一张纸片,将其左、右边缘与其余纸片的边缘进行匹配,找到与其匹配度最佳的左、右两侧纸片,同理可确定其上下两侧纸片,依据此算法编写C程序,实现图片的拼接功能。

2.3既纵切又横切双面纸片的复原在问题二的基础上,根据附件5给出的图片,利用Matlab对图片像素点的灰度值进行提取,得到每张图片上、下、左、右边缘的像素点灰度值,对于双面纸片拼接问题,运用灰度值比较法,取边缘特殊点灰度值进行匹配,找到与之匹配的纸片,同时标记下已经被查找过的图片,减小循环次数。

设计算法并编写C程序实现拼接功能。

三变量说明,I J:图片的标号,l r:图片的左边缘和右边缘Ir:图片I右边缘像素点灰度值的向量J:图片J左边缘像素点灰度值的向量l四模型准备对于形状大小相同的纸片,唯一区分纸片的标志就是边缘字迹断线,本文基于图片像素点的灰度值,对碎纸片进行研究,故要提取给出图片边缘像素点的灰度值,下面给出灰度值的提取步骤:(以附件1中000-009图片左边缘为例)(1)将图片文件读入Matlab中,使用Imread()函数[4](源程序见附录2)(2)得到所需边缘像素点的灰度值集合,选取部分数据,见表1表1部分图片左边缘像素点灰度值000001002003004005006007008009255255255255255255255255025525525525525525525525525552552552552552552552552552552422552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552552555425525525524725525525525520902552552553255255255255002552552559225525525525500255255255255255255255255065255255195255255255255255252072552551125525525525525517125525525502552552552552552552552552550255255255255255255255255255025525525525525525520255255025525525525525525589255255025525525525525525525525525501922552552552552552552552550025525525525525525525525501202552552552552552552552550255255…………………………255255255255255255255255100255255255255255255255255255220255按以上步骤对附件1至5中给出的图片进行处理。

五模型的建立与求解5.1纵切单面纸片复原模型的建立与求解分析根据附件一、二给出的纵切碎纸片,利用Matlab 提取图片边缘像素点的灰度值(步骤在模型准备中已给出),将字迹断线转化为灰度值的变化关系,建立基于灰度值的spearman 相关系数模型,利用SPSS 求解各图片之间左右两边缘灰度值的相关性,根据相关性大小找出互相匹配的相邻纸片。

5.1.1建立基于灰度值的spearman 相关系数模型我们选择计算两图片间的匹配度,以相关性指标的大小来衡量匹配度的大小,例如,以图片,I J 为例,若Ir 与l J 的相关性很大,则I 右边缘与J 左边缘的匹配度较大,即两图片的连接顺序为I J →。

Spearman 相关系数公式如下:2361i s d n nρ=--∑(1)0,6r l 0.92310,21r l 0.9161,4r l 0.84411,7r l 0.8522,16r l 0.93412,15r l 0.813,10r l 0.8613,18r l 0.8724,5r l 0.81714,12r l 0.8325,9r l 0.86315,31r l 0.97,17r l 0.88316,1r l 0.9098,14r l 0.76617,0r l 0.8799,13r l0.92818,11r l0.8030,5r l 0.89610,8r l 0.8951,9r l 0.91611,0r l 0.6962,7r l 0.82412,14r l 0.9413,6r l 0.79813,10r l 0.8335,1r l 0.85914,17r l 0.7996,2r l 0.80715,18r l 0.8357,15r l 0.85916,4r l 0.8378,12r l 0.83817,16r l 0.9159,13r l0.83318,11r l0.861根据表4,采用人工干预的方式,对图片按左右边缘的顺序依次排列,得到拼接结果如下:表5附件2拼接顺序通过建立spearman 系数模型,利用相关系数比较两边缘匹配度的大小,解决了附件1和附件2的拼接问题,但此模型对于大规模的问题应用性较差,因此,我们在前面思想的基础上,利用C 语言编程,以实现对于大规模问题的求解。

5.1.2.1设计算法设计思路:本题基于通过比对各纸片左右边缘像素特性将纸片拼一张完整的图。

原理如图1所示:B<-->A、C、D、E⇓A B C⇓A B C D E图1具体算法如下:S1:提取所有纸片左右边缘像素点的灰度值,建立纸片左、右边缘的灰度值集合。

S2:选取某张纸片为基纸片,其左右边缘为待配准边缘,未被标记的纸片的左右边缘为配准边缘。

S3:将待配准边缘与配准边缘的左、右边缘像素点灰度值比较,找出与待配准边缘匹配度最高的配准边缘,从而确定基纸片的左右两侧纸片,并标记基纸片。

S4:以基纸片的一侧纸片作为新的基纸片,执行S2,若所有纸片全被标记,则执行S5。

S5:输出正确的拼接顺序,算法结束。

5.1.2.2编写程序采用C语言编写程序,具体程序代码如下:(以附件一为例)#include<stdio.h>#include<math.h>#include<stdlib.h>/*int pd(int x,int*d){int j,t,dz;dz=d;for(j=0;j<1979;j++)if(*(d+j)==255)t++;if(t>1900)return(0);elsereturn(1);}*/void main(){int a[1980][19],b[1980][19];int i,j;int n,s,d=0,m;FILE*fp1,*fp2;Char namein1[80]="C:\\Users\\Administrator\\Desktop\程序1\\Text1L.txt";Char namein2[80]="C:\\Users\\Administrator\\Desktop\程序1\\Text1R.txt";fp1=fopen(namein1,"r");while(!feof(fp1)){for(i=0;i<1979;i++)for(j=0;j<19;j++){fscanf(fp1,"%d",&a[i][j]);}} fp2=fopen(namein2,"r");while(!feof(fp2)){for(i=0;i<1979;i++)for(j=0;j<19;j++){fscanf(fp2,"%d",&b[i][j]);}//左查找d=0;do{i=d;s=2000;for(n=0;n<19;n++){if(b[0][n]==-1||n==i)continue;else{m=0;for(j=0;j<1980;j++){if(abs(a[j][i]-b[j][n])>=122)m++;}if(s>m){s=m;d=n;}}}b[0][d]=-1;a[0][i]=-1;printf("%d的左边是%d",i,d);} while(d!=8);printf("\n");//右查找d=0;do{n=d;s=2000;for(i=0;i<19;i++){if(a[0][i]==-1||n==i)continue;else{m=0;for(j=0;j<1980;j++){if(abs(b[j][n]-a[j][i])>=122)m++;}if(s>m){s=m;d=i;}}}a[0][i]=-1;printf("%d的右边是%d",n,d);}while(d!=6);printf("\n");fclose(fp1);fclose(fp2);}5.1.2.3运行结果程序运行结果如下:同理可得附件二的拼接结果,源程序见附录7,结果如下:通过以上的两个结果可以看出,此算法可以得出较为准确的拼接方案,同时,对于大规模的图片拼接问题,也可以进行求解,实用性较强。

相关主题