碎纸片拼接复原matlab程序

合集下载

碎纸片拼接复原的数学方法

碎纸片拼接复原的数学方法

碎纸片拼接复原的数学方法拼图游戏,一种看似简单却富含深度的游戏,给人们带来了无穷的乐趣。

然而,大家是否想过,这样的游戏其实与数学有着密切的?让我们一起探索碎纸片拼接复原背后的数学方法。

碎纸片拼接复原,其实就是一个计算几何问题。

在数学领域,欧几里得几何和非欧几里得几何是两个基本而又重要的分支。

欧几里得几何主要研究的是在平面上两点之间的最短距离,这是我们日常生活中常见的几何学。

而非欧几里得几何则研究的是曲面上的几何学,这种几何学并不符合我们日常生活中的直觉。

碎纸片拼接复原的问题就是一种非欧几里得几何问题。

在计算机科学中,图论是研究图形和网络的基本理论。

其中,图形遍历算法可以用来解决碎纸片拼接复原问题。

这种算法的基本思想是:从一点出发,尽可能多地遍历整个图形,并在遍历的过程中对图形进行重建。

对于碎纸片拼接复原问题,我们可以将每一张碎纸片看作是图中的一个节点,当两张碎纸片拼接在一起时,它们就形成了一个边。

通过这种方式,我们可以将所有的碎纸片连接起来,形成一个完整的图形。

在计算机科学中,碎纸片拼接复原问题被广泛应用于图像处理、数据恢复等领域。

例如,在数字图像处理中,如果一张图片被切割成若干块,我们可以通过类似的方法来恢复原始的图片。

在数据恢复领域,当一个文件被删除或格式化时,我们也可以通过类似的方法来恢复文件。

碎纸片拼接复原的问题不仅是一个有趣的拼图游戏,更是一个涉及计算几何、图论等多个领域的数学问题。

通过运用这些数学方法,我们可以有效地解决这个问题,从而更好地理解和应用这些数学理论。

在我们的日常生活中,我们经常会遇到一些破碎的物品,例如碎镜子、破碎的瓷器,或是碎纸片等。

这些物品的复原过程都需要一种科学的方法来帮助他们重新拼接起来。

这种科学方法就是碎纸片拼接复原技术。

碎纸片拼接复原技术是一种基于数学模型的方法,它通过比较碎纸片边缘的形状、纹理、颜色等特征,来找到碎纸片之间的相似性和关联性,从而将它们拼接起来。

碎纸片拼接

碎纸片拼接

碎纸片拼接与复原摘要本文讲述的是碎纸片拼接复原的问题。

碎纸片拼接复原在情报和考古方面用的较多,有很大的使用价值。

在实际操作中,人工拼接的准确度极高,但随着碎片数量增大,拼接难度将大大提高,这时必须借助计算机来处理,最后辅以人工干预来完成。

针对本文提出的问题,我们的模型不区分文字语言,把图像的灰度值作为建立模型的关键切入点。

使用matlab里的imread函数读入BMP图像,并取得其灰度值矩阵,矩阵中每一元素为图像每一像素的灰度值,通过对其边缘的灰度值进行匹配,求出其拼接顺序。

本文中匹配这一步骤采取求图片两边的一列像素灰度值进行求差绝对值,并将求其均值最小作为匹配原理,匹配度必须小于0.1。

第一问中只涉及到单面碎纸片,而且仅把单张纸进行纵向切碎成规则长条状,所以只需对其左右端像素的灰度值进行采集,然后进行匹配,将匹配度最高的两边连起来。

不过有两条纸的左边和右边全为白色,则将其单独列出来,作为复原后纸张的左右端,最后进行人工校正。

第二问中的纸片数量增多,且涉及到横纵同时切碎的纸片,所以不能直接沿用第一问的方法。

但通过观察,横切出的每一横条上碎纸片文字具有明显的共同点,可以进行快速匹配。

首先确定出第一行,通过寻找灰度矩阵最上面全为255的行数最多的图像,作为拼出第一行的碎片。

再用与刚才相似的方法,不过须取列为255最多的图片作整个复原图第一列。

最后从第二行第二个开始,从左至右从上到下依次匹配上碎片,最后结果需进行人工校正。

第三问由于涉及到双面纸的问题,可以继续沿用第二问的方法,不过拼接标准需要改为两面灰度值匹配度之和,将纸片拼接好后,最后再人工检查其是否拼接完全正确。

此模型还可用于彩色图像的拼接,用RGB颜色系统,同样是导出每一像素的RGB 值,构成矩阵,用与文中相似的办法进行破碎彩色图像的拼接。

关键词:拼接复原图像处理灰度值矩阵匹配1 问题重述B题碎纸片的拼接复原破碎文件的拼接在司法物证复原、历史文献修复以及军事情报获取等领域都有着重要的应用。

2013 数模国赛 B题 碎纸片的拼接复原

2013 数模国赛 B题  碎纸片的拼接复原

2013高教社杯全国大学生数学建模竞赛B题碎纸片的拼接复原首先分析问题:对于第一问分析如下对于给定的来自同一页印刷文字文件的碎纸机破碎纸片(仅纵切),建立碎纸片拼接复原模型和算法,并针对附件1、附件2给出的中、英文各一页文件的碎片数据进行拼接复原。

如果复原过程需要人工干预,请写出干预方式及干预的时间节点。

求matlab图像拼接程序clear;I=imread('xingshi32.bmp');if(isgray(I)==0)disp('请输入灰度图像,本程序用来处理128 *128的灰度图像!');elseif (size(I)~=[128,128])disp('图像的大小不合程序要求!');elseH.color=[1 1 1]; %设置白的画布figure(H);imshow(I);title('原图像');zeroImage=repmat(uint8(0),[128 128]);figure(H); %为分裂合并后显示的图设置画布meansImageHandle=imshow(zeroImage);title('块均值图像');%%%%%设置分裂后图像的大小由于本图采用了128像素的图blockSize=[128 64 32 16 8 4 2];%%设置一个S稀疏矩阵用于四叉树分解后存诸数据S=uint8(128);S(128,128)=0;threshold=input('请输入分裂的阈值(0--1):');%阈值threshold=round(255*threshold);M=128;dim=128;%%%%%%%%%%%%%%%%% 分裂主程序%%%%%%%%%%%while (dim>1)[M,N] = size(I);Sind = find(S == dim);numBlocks = length(Sind);if (numBlocks == 0)%已完成break;endrows = (0:dim-1)';cols = 0:M:(dim-1)*M;rows = rows(:,ones(1,dim));cols = cols(ones(dim,1),:);ind = rows + cols;ind = ind(:);tmp = repmat(Sind', length(ind), 1);ind = ind(:, ones(1,numBlocks));ind = ind + tmp;blockValues= I(ind);blockValues = reshape(blockValues, [dim dim numBlocks]);if(isempty(Sind))%已完成break;end[i,j]=find(S);set(meansImageHandle,'CData',ComputeMeans(I,S));maxValues=max(max(blockValues,[],1),[],2);minValues=min(min(blockValues,[],1),[],2);doSplit=(double(maxValues)-double(minValues))>threshold;dim=dim/2;Sind=Sind(doSplit);Sind=[Sind;Sind+dim;(Sind+M*dim);(Sind+(M+1)*dim)];S(Sind)=dim;end对于第二问于碎纸机既纵切又横切的情形,请设计碎纸片拼接复原模型和算法,并针对附件3、附件4给出的中、英文各一页文件的碎片数据进行拼接复原。

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

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

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

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

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

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

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

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

我们参赛选择的题号是(从A/B/C/D中选择一项填写): B我们的参赛报名号为(如果赛区设置报名号的话):所属学校(请填写完整的全名):楚雄师范学院参赛队员(打印并签名) :1. 陈志明2. 施明杰3. 阮秀婷指导教师或指导教师组负责人(打印并签名):(论文纸质版与电子版中的以上信息必须一致,只是电子版中无需签名。

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

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

)日期: 3013 年 9 月 16 日赛区评阅编号(由赛区组委会评阅前进行编号):编号专用页赛区评阅编号(由赛区组委会评阅前进行编号):全国统一编号(由赛区组委会送交全国前编号):全国评阅编号(由全国组委会评阅前进行编号):碎纸片的拼接复原算法及MATLAB实现摘要:对于只有纵切的情形,文章通过比较当前待拼碎片与剩余碎片的信噪比psnr[1,3,4]的值来确定两碎片是否为邻接碎片;拼接算法首先连续调用右拼函数直到拼接到原图右边界,然后连续调用左拼函数直到拼接到原图左边界,从而得到整幅复原图像;对于单面纵横交错切的情形,文章对首先采用纵切拼接算法将碎片拼接成多幅横条图片,然后将各横条图片矩阵转置[2],再次采用纵切拼接算法拼接;两种情形的拼接,都存在人为参与;实验证明,我们的算法对纵切情形是有效的,对纵横切情况是可行的。

碎纸片的拼接还原研究

碎纸片的拼接还原研究

碎纸片的拼接复原摘要碎纸片的拼接复原是一门借助计算机,把大量碎纸片重新拼接成初始纸张的技术。

针对问题一,本文首先利用碎纸片图像灰度矩阵的边缘矩阵,建立了两个碎纸片之间的匹配度函数,求得了每一张图片之间左右边缘匹配度矩阵。

然后根据左边边缘位置的碎片的左边空白部分最多的特点,确定了左边位置的碎纸片。

接着根据拼接碎纸片的拼接复原时,所有碎纸片匹配度之和取极大值的原则,采用贪心算法,得到了所有碎纸片的初始位置,拼接复原了附件1和附件2中纸片。

针对问题二,由于附件3碎片数量太多,并且碎片的拼接复原,是一个以碎纸片总匹配度为目标函数的组合优化问题。

所以本文采用遗传算法将碎纸片的编号作为基因,并将基因均匀分成19段,按顺序每一段对应一个初始纸片列位置,进行了求解。

然后,根据边缘碎纸片某些边的空白部分多的特征,对初始基因进行了优化。

接着,根据碎纸片的黑色像素密度不同的特点,将碎纸片分成三类,根据同类纸片优先匹配的原则,对遗传算法的运行过程进行了优化,拼接复原了附件3和附件4中纸片。

针对问题三,随着碎纸片量的增多,计算量急剧增加。

在上述拼接复原碎纸片的基础上,又引进了同行位置碎纸片的上部(或下部)空白位置宽度相近的聚类思想。

先对每个类内部拼接,在合并所有类并做一次整体拼接。

由于时间有限,我们未能完成最后一次的整体的拼接,但我们会在比赛后继续探究。

关键词:边缘矩阵匹配度函数遗传算法聚类一、问题重述碎片拼接实际用途已经越来越广泛,传统上拼接复原工作由人工完成,碎片拼接的准确率较高,但效率很低。

并且当碎片数量很大时,人工短时间内拼接出来几乎是不可能的。

所以开发碎纸的拼接技术,以提高拼接复原效率已成为越来越多人的期望。

现在,在碎纸片是规则的情况下,题目要求我们在以下条件建立碎纸片拼接复原模型和算法。

1.来自同一页印刷文字文件(中文、英文各一页)的碎纸机破碎纸片(仅纵切)拼接复原,并将附件1和附件2复原。

2.对碎纸机既纵切又横切文件的情形,将碎纸片拼接完整。

纸片纵切拼接原理及其编程

纸片纵切拼接原理及其编程

1. 对于给定的来自同一页印刷文字文件的碎纸机破碎纸片(仅纵切),建立碎纸片拼接复原模型和算法,并针对附件1、附件2给出的中、英文各一页文件的碎片数据进行拼接复原。

如果复原过程需要人工干预,请写出干预方式及干预的时间节点。

复原结果以图片形式及表格形式表达(见【结果表达格式说明】)。

用MATLAB 中的imread ()函数,把图片进行量化处理,得到对应能够反映出图像特性的矩阵。

每张图片是以72⨯1980的矩阵存在于matlab 软件中 量化即要求使用多大范围的数值来表示图像采样之后的每一个点。

量化的结果是图像能够容纳的颜色总数,它反映了采样的质量。

本文采用8位储存一个点,即相当于黑-白间可用0-255个状态进行描述,其中量化后的值越接近0,则表示该点的实际颜色越接近黑色;相反量化后的值越接近255,则表示该点的实际颜色越接近白色。

将19张碎纸片经matlab 数字化后得到19个72⨯1980的矩阵。

根据附件中碎纸片的编号顺序将19个矩阵合并为一个大小为)(19⨯721368⨯1980的矩阵,矩阵中的值,越接近0,则表示该值所对应点的实际颜色越接近黑色;相反该值越接近255,则表示该点的实际颜色越接近白色。

该矩阵如下A 所示:⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡212221212111=),(),(),(),(),(),(),(),(),(N M f M f M f N f f f N f f f A矩阵A 中各元素值即灰度满足条件为: ),(,),(N j M i j i f ≤≤1≤≤11≤≤0 (6.1.1)其中1980=M ,1368=N 。

假设第i 张纸片的第j 行第k 列数据为),(k j f i ,其中:⎩⎨⎧19≤≤172≤≤71-721980≤≤1)(i i k i j (6.1.2) 当71-72=i k 与i k 72=分别对应于第i 张纸片数字化后所对应矩阵的第一列与最后一列。

令)(,j w s i 为第i 张纸片的最后一列与第s 张纸片第一列第j 行数据的平方欧氏距离,该值为:271-72-72=)],(),([)(,s j f i j f j w s i s i (6.1.3)第一张碎纸片(未被纵切前最左边那张碎纸片)最左边边缘部分均为白色,经数字化处理后所对应矩阵的第一列数据值相同,在确定第一张后,采用平方欧氏距离。

数字图像处理 纸片拼接复原

数字图像处理 纸片拼接复原
G(1,1)=(tou-1)/2;
for m=1:18
[i,j]=find(T==max(T(:,tou+1)));%返回矩阵中非零元素;
y=(i-1)/2;
G(1,m+1)=y;
tou=y*2+1;
m=m+1;
End
(5)根据得出的顺序,得出图片的排序,并且输出图片
H=G+1;
P=[img{H(1)},img{H(2)},img{H(3)},img{H(4)},img{H(5)},img{H(6)},img{H(7)},img{H(8)},img{H(9)},img{H(10)},img{H(11)},img{H(12)},img{H(13)},img{H(14)},img{H(15)},img{H(16)},img{H(17)}];
imshow(P)
4实验现象
5.实验总结
在本次数字图像处理实验中,进行碎纸片复原处理,取出左右边缘的值,再对每张碎纸片的左右边缘进行对比相似度即可找出相邻图片,从而还原图片。依次想法进行程序设计,刚开始无法完全得出图片,经过多次调整和程序改进后,使得程序更加简洁,同时也得出了理想的实验结果,但在此过程中需要进行人工干预,选定第一张图片,稍显麻烦,需要进一步改进。
p=zeros(1980,38);
t1=0;
for k1=1:2:38
t1=t1+1;
p(:,k1)=im2bw(img{t1}(:,1));
end
t2=0;
for k2=2:2:38
t2=t2+1;
p(:,k2)=im2bw(img{t2}(:,72));
end
(3)构成对比矩阵,计算每两个图像边缘之间相关数

碎纸片的拼接复原

碎纸片的拼接复原

碎纸片的拼接复原摘要本文研究了碎纸片的复原问题。

对已有的碎纸片,我们利用Matlab求碎纸片边各侧边线的灰度值,通过最小偏差平方和法进行碎纸片间的相互匹配,中间加入人工干预进行筛选,将附件中的碎纸片全部还原。

之后,我们将该方法进行推广,可用以处理更复杂形状碎图片的的还原问题。

对问题一:首先假定附件一所给仅纵切的碎纸片的行文方向与各碎纸片两侧边线垂直,在此基础上先人工干预,根据碎纸片的剪切规范,甄选出原始图片的第一张和最后一张碎纸片,编号分别为008和006。

其次通过Matlab求出图片边线处各小网格点的灰度值,采用最小偏差平方和法,对编号008碎片右边线处的灰度值和其它碎纸片的左边线处的灰度值进行对应网格点的数值匹配,找到最匹配的碎纸片。

附件二碎片的处理进行了类似处理,给出的复原图片见附表4。

对问题二:附件三文本既纵切又横切,同样我们假设所给附件三中碎纸片的行文方向与碎纸片的上下左右边线分别平行或垂直。

在问题一的算法基础上,通过Matlab求出各碎纸片的4条边线的边界灰度值,然后利用最小偏差平方和法,对上下左右四边进行灰度值匹配,当结果多个时,我们进行了人工干预。

附件四依照附件三的方法类似处理,最终的复原见附表7和附表9。

对问题三:附件五中的图片既纵切又横切而且是正反面。

我们参照问题一、二的处理方法,加入反面的灰度值测算,随机选择一张碎纸片与其他碎纸片进行遍历匹配,得出4张匹配的碎纸片后,以这4张碎纸片为下一起点,扩张匹配,最终给出的复原图见附表12。

为适应更一般的情形,我们在模型改进部分,给出了当碎纸片的文字行文方向与碎纸片两侧边线不垂直时的处理方法(只处理了边线为直线的情形)。

首先是通过测算出的碎纸片灰度值确定出碎纸片的边缘线,其次定出碎纸片边缘线附近网格点的灰度值,最后完成边线的的匹配。

关键词:人工干预灰度矩阵灰度值最小偏差平方和法一问题重述1.1问题背景纸片文字是人们获取和交换信息的主要媒介,尤其是在计算机技术飞速发展、数码产品日益普及的今天。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

碎纸片拼接复原matlab程序
碎纸片拼接复原是一项有趣且具有挑战性的问题,在计算机视觉和图像处理领域有着广泛的应用。

在本文中,我们将介绍如何使用MATLAB编写程序来实现碎纸片拼接复原。

碎纸片拼接复原的基本步骤包括图像分割、特征提取、相似度计算和拼接重建。

接下来,我们将逐步介绍这些步骤的具体实现。

1. 图像分割:首先,将输入的碎纸片图像分割为小块。

可以使用MATLAB的图像分割函数,如imsegkmeans或imbinarize,根据像素强度或颜色信息将图像分割为不同的区域。

2. 特征提取:对于每个碎纸片块,需要提取一组关键特征向量,用于描述碎纸片块的特征。

常用的特征包括颜色直方图、纹理特征和边缘特征等。

可以使用MATLAB的图像处理工具箱中
的函数,如imhist或graycomatrix,来提取这些特征。

3. 相似度计算:根据提取的特征向量,需要计算每对碎纸片块之间的相似度。

常用的相似度度量方法包括欧氏距离、余弦距离和相关系数等。

可以使用MATLAB的统计工具箱中的函数,如pdist或corrcoef,来计算这些相似度。

4. 拼接重建:使用一种启发式算法来选择下一个最佳碎纸片块,并将其拼接到前一块上。

常用的启发式算法包括最小生成树、贪婪算法和遗传算法等。

可以使用MATLAB的优化工具箱中
的函数,如graph和tspsearch,来实现这些算法。

通过以上步骤的循环迭代,直到所有碎纸片块都被拼接为止,即可完成碎纸片拼接复原的过程。

除了以上基本步骤,还可以考虑一些改进和优化的方法,以提高拼接复原的效果。

例如,可以引入图像分割的约束条件,限制特定碎纸片块只能与特定的邻居块拼接。

可以使用MATLAB的MatConvNet或DeepLearning工具箱中的函数,如CNN或RNN,来实现这些约束条件的学习和应用。

总的来说,使用MATLAB编写碎纸片拼接复原的程序需要熟悉图像处理和计算机视觉的相关知识,并结合MATLAB的图像处理和优化工具箱中的函数来实现各个步骤。

希望本文对你进行碎纸片拼接复原的研究有所帮助。

相关文档
最新文档