碎纸片的拼接复原算法及MATLAB实现
根据问题的分析,为了设计碎纸片拼接的算法,可将碎纸片作为顶点

根据问题的分析,为了设计碎纸片拼接的算法,可将碎纸片作为顶点基于目前传统的手工拼接复原碎纸片的现状和碎纸片拼接复原的实际需求,本文通过对5个附件中的碎纸片文件进行半自动复原,以研究碎纸片复原的模型和算法,希望通过此种模型和算法减少碎纸片复原的效率、准确度以及人工成本。
本文围绕几种不同类型的碎纸片拼接复原,建立碎纸片距离模型、旅行商模型和聚类分析模型,结合利用改良圈算法、聚类算法和少量的人工干预对几种不同类型的碎纸片拼接复原问题进行分析求解。
针对问题一,首先利用matlab对文件中的图片进行数值化处理,通过对每张碎纸片数值化矩阵左右两侧的分析,找到原图最左侧和最右侧的碎片序号a,b;建立碎纸片距离模型,以表示第两张碎纸片之间的距离,通过任意两张碎纸片之间的距离差异建立以第张碎纸片为起点,第张碎纸片为终点的旅行商模型,利用改良圈算法对模型求解,得到碎纸片拼接复原图及碎纸片序列针对问题二,首先利用matlab 对文件中的图片进行数值化处理,计算每张碎纸片的180行像素点的纵向向量,通过180个纵向向量将209张碎纸片聚类为12类,再通过人工干预将碎纸片均分为11类;通过对每张碎纸片数值化矩阵左右两侧的分析,找到每一类的起始碎纸片和终止碎纸片,建立同问题一的碎纸片距离模型,利用改良圈算法将11类碎纸片拼接复原成11行,使得问题转化成11行碎纸片的拼接复原问题;利用同问题一的方法拼接复原11行碎纸片得到碎纸片拼接复原原图及碎纸片序列针对问题三,首先利用matlab对文件中的图片进行数值化处理,计算每面碎纸片的特征因子,通过每面碎纸片的特征因子将每张碎纸片与剩余208张双面碎纸片即416张图片进行配对,并加入人工干预将每张碎纸片的两面数值化为0和1(即正反面两类);计算出每张碎纸片(包含两个面)360行像素点的纵向向量,通过360个纵向向量将209张碎纸片分为11类,利用问题二的求解方式对问题进行求解,最终得到碎纸片拼接复原的复原图及碎纸片序列。
碎纸片拼接复原的数学方法

碎纸片拼接复原的数学方法拼图游戏,一种看似简单却富含深度的游戏,给人们带来了无穷的乐趣。
然而,大家是否想过,这样的游戏其实与数学有着密切的?让我们一起探索碎纸片拼接复原背后的数学方法。
碎纸片拼接复原,其实就是一个计算几何问题。
在数学领域,欧几里得几何和非欧几里得几何是两个基本而又重要的分支。
欧几里得几何主要研究的是在平面上两点之间的最短距离,这是我们日常生活中常见的几何学。
而非欧几里得几何则研究的是曲面上的几何学,这种几何学并不符合我们日常生活中的直觉。
碎纸片拼接复原的问题就是一种非欧几里得几何问题。
在计算机科学中,图论是研究图形和网络的基本理论。
其中,图形遍历算法可以用来解决碎纸片拼接复原问题。
这种算法的基本思想是:从一点出发,尽可能多地遍历整个图形,并在遍历的过程中对图形进行重建。
对于碎纸片拼接复原问题,我们可以将每一张碎纸片看作是图中的一个节点,当两张碎纸片拼接在一起时,它们就形成了一个边。
通过这种方式,我们可以将所有的碎纸片连接起来,形成一个完整的图形。
在计算机科学中,碎纸片拼接复原问题被广泛应用于图像处理、数据恢复等领域。
例如,在数字图像处理中,如果一张图片被切割成若干块,我们可以通过类似的方法来恢复原始的图片。
在数据恢复领域,当一个文件被删除或格式化时,我们也可以通过类似的方法来恢复文件。
碎纸片拼接复原的问题不仅是一个有趣的拼图游戏,更是一个涉及计算几何、图论等多个领域的数学问题。
通过运用这些数学方法,我们可以有效地解决这个问题,从而更好地理解和应用这些数学理论。
在我们的日常生活中,我们经常会遇到一些破碎的物品,例如碎镜子、破碎的瓷器,或是碎纸片等。
这些物品的复原过程都需要一种科学的方法来帮助他们重新拼接起来。
这种科学方法就是碎纸片拼接复原技术。
碎纸片拼接复原技术是一种基于数学模型的方法,它通过比较碎纸片边缘的形状、纹理、颜色等特征,来找到碎纸片之间的相似性和关联性,从而将它们拼接起来。
碎纸片拼接

碎纸片拼接与复原摘要本文讲述的是碎纸片拼接复原的问题。
碎纸片拼接复原在情报和考古方面用的较多,有很大的使用价值。
在实际操作中,人工拼接的准确度极高,但随着碎片数量增大,拼接难度将大大提高,这时必须借助计算机来处理,最后辅以人工干预来完成。
针对本文提出的问题,我们的模型不区分文字语言,把图像的灰度值作为建立模型的关键切入点。
使用matlab里的imread函数读入BMP图像,并取得其灰度值矩阵,矩阵中每一元素为图像每一像素的灰度值,通过对其边缘的灰度值进行匹配,求出其拼接顺序。
本文中匹配这一步骤采取求图片两边的一列像素灰度值进行求差绝对值,并将求其均值最小作为匹配原理,匹配度必须小于0.1。
第一问中只涉及到单面碎纸片,而且仅把单张纸进行纵向切碎成规则长条状,所以只需对其左右端像素的灰度值进行采集,然后进行匹配,将匹配度最高的两边连起来。
不过有两条纸的左边和右边全为白色,则将其单独列出来,作为复原后纸张的左右端,最后进行人工校正。
第二问中的纸片数量增多,且涉及到横纵同时切碎的纸片,所以不能直接沿用第一问的方法。
但通过观察,横切出的每一横条上碎纸片文字具有明显的共同点,可以进行快速匹配。
首先确定出第一行,通过寻找灰度矩阵最上面全为255的行数最多的图像,作为拼出第一行的碎片。
再用与刚才相似的方法,不过须取列为255最多的图片作整个复原图第一列。
最后从第二行第二个开始,从左至右从上到下依次匹配上碎片,最后结果需进行人工校正。
第三问由于涉及到双面纸的问题,可以继续沿用第二问的方法,不过拼接标准需要改为两面灰度值匹配度之和,将纸片拼接好后,最后再人工检查其是否拼接完全正确。
此模型还可用于彩色图像的拼接,用RGB颜色系统,同样是导出每一像素的RGB 值,构成矩阵,用与文中相似的办法进行破碎彩色图像的拼接。
关键词:拼接复原图像处理灰度值矩阵匹配1 问题重述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给出的中、英文各一页文件的碎片数据进行拼接复原。
数字图像处理 纸片拼接复原

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)构成对比矩阵,计算每两个图像边缘之间相关数
碎纸片的拼接复原数学模型1

碎纸片的拼接复原数学模型摘要首先对图片进行灰度化处理,然后转化为0-1二值矩阵,利用矩阵行(列)偏差函数,建立了基于最小二乘法的碎纸片拼接数学模型,并利用模型对图片进行拼接复原。
本文主要研究了规则碎纸片的拼接复原问题。
首先利用二值法、环形像素点匹配等算法建立基于像素点数值匹配模型,然后利用MATLAB软件对碎纸片像素点进行数字化处理,得到各碎纸片的像素点数值矩阵,再利用MATLAB 软件编程进行矩阵特征优化匹配得到复原图。
针对问题一,当两个数字矩阵列向量的偏差函数最小时,对应两张图片可以左右拼接。
经计算,得到附件1的拼接结果为:9,15,13,16,4,11,3,17,2,5,6,10,14,19,12,8,18,1,7附件2的拼接结果为:4,7,3,8,16,19,12,1,6,2,10,14,11,9,13,15,18,17,5针对问题二:本文采用聚类分析方法建立优化模型。
将所有图片的像素转化为矩阵,其次采用人工干预的方式找出第一行第一张碎纸片,然后将所有图片灰度二制化,将灰色像素值转化为黑色像素值,然后由上至下找出黑白像素的分界线,根据分界线位置的差异值最小聚合出第一行所有的图片,同理聚合出第一列所有的图片,将第一行所有图片利用问题一的拼接算法求解出第一行图片拼接顺序。
以第一行第一张碎纸片下侧像素点与其他碎纸片上侧像素点像素匹配差异值最小为目标函数,依次穷举第一列所有的碎纸片,从而找出第二行第一张碎纸片。
根据第一行排好顺序的碎纸片以及第二行第一张碎纸片,采用上下侧边缘像素匹配以及左右侧边缘匹配,依次找出并排列好第2行,其他行依理重复步骤(2)、(3)即可。
完成匹配后,进行适当的人工干预即可确定碎纸片的复原图。
(见附录3、4图11,图12)。
最后,本文对所建模型的优点和缺点进行了客观的评价,认为本文研究的结果在图像拼接问题中有一定的参考价值。
关键词:灰度处理,图像二值化,最小二乘法,聚类分析,碎纸片拼接一、问题重述碎纸片的拼接复原技术在司法鉴定、历史文献修复与研究、军事情报获取以及故障分析等领域都有着广泛的应用。
碎纸片的拼接复原

碎纸片的拼接复原摘要本文研究了碎纸片的复原问题。
对已有的碎纸片,我们利用Matlab求碎纸片边各侧边线的灰度值,通过最小偏差平方和法进行碎纸片间的相互匹配,中间加入人工干预进行筛选,将附件中的碎纸片全部还原。
之后,我们将该方法进行推广,可用以处理更复杂形状碎图片的的还原问题。
对问题一:首先假定附件一所给仅纵切的碎纸片的行文方向与各碎纸片两侧边线垂直,在此基础上先人工干预,根据碎纸片的剪切规范,甄选出原始图片的第一张和最后一张碎纸片,编号分别为008和006。
其次通过Matlab求出图片边线处各小网格点的灰度值,采用最小偏差平方和法,对编号008碎片右边线处的灰度值和其它碎纸片的左边线处的灰度值进行对应网格点的数值匹配,找到最匹配的碎纸片。
附件二碎片的处理进行了类似处理,给出的复原图片见附表4。
对问题二:附件三文本既纵切又横切,同样我们假设所给附件三中碎纸片的行文方向与碎纸片的上下左右边线分别平行或垂直。
在问题一的算法基础上,通过Matlab求出各碎纸片的4条边线的边界灰度值,然后利用最小偏差平方和法,对上下左右四边进行灰度值匹配,当结果多个时,我们进行了人工干预。
附件四依照附件三的方法类似处理,最终的复原见附表7和附表9。
对问题三:附件五中的图片既纵切又横切而且是正反面。
我们参照问题一、二的处理方法,加入反面的灰度值测算,随机选择一张碎纸片与其他碎纸片进行遍历匹配,得出4张匹配的碎纸片后,以这4张碎纸片为下一起点,扩张匹配,最终给出的复原图见附表12。
为适应更一般的情形,我们在模型改进部分,给出了当碎纸片的文字行文方向与碎纸片两侧边线不垂直时的处理方法(只处理了边线为直线的情形)。
首先是通过测算出的碎纸片灰度值确定出碎纸片的边缘线,其次定出碎纸片边缘线附近网格点的灰度值,最后完成边线的的匹配。
关键词:人工干预灰度矩阵灰度值最小偏差平方和法一问题重述1.1问题背景纸片文字是人们获取和交换信息的主要媒介,尤其是在计算机技术飞速发展、数码产品日益普及的今天。
基于MATLAB的碎纸片拼接复原技术研究

科学技术创新基于M A T LA B 的碎纸片拼接复原技术研究唐巧玲陈佳(内江师范学院,四川内江641100)1概述碎纸片自动拼接技术是图像处理和模式识别领域中一种典型的新型应用,通过扫描成像技术获得一组被撕开的纸张的形状和颜色,再由计算机获取相应的信息,并通过计算机对这些纸张进行全自动或半自动复原的技术[1]。
本文主要研究由竖条型碎纸机粉碎的碎纸片,因此每个碎纸片的边缘是齐整的,所以无法利用碎纸片的轮廓形状得到有价值的信息,只能利用碎纸片边缘的所承载的色彩信息,来获取有价值的信息,再经过一系列的处理,进而实现碎纸片的拼接复原[6]。
本文利用MATLAB 提取碎纸片图片对象,将其看成一个集合,在水平方向对比两个碎纸片的相似度,选出相似度最高的两个碎纸片拼接成新的碎纸片,对已拼接完成的一侧停止比较,只比较另一侧,直至拼接完成为止。
然后对计算机处理的结果进行分析,提高其匹配率[7-8]。
2碎纸片拼接技术的原理2.1图像预处理碎纸片自动拼接复原技术是图像处理和模式识别领域中的典型应用,这一项技术通过扫描与图像提取技术来获取碎纸片的颜色和形状等有用的信息,之后再利用计算机对提取的信息进行进一步的处理,从而达到碎纸片的全自动复原或者半自动复原的目的。
在碎纸片拼接复原过程中,最重要的就是图像的预处理和碎纸片的匹配,图像预处理就是把碎纸片转化成计算机可以识别和处理的数据,而碎纸片匹配是在这些处理后的数据基础之上进行的。
本文首先运用MATLAB 软件对碎纸片做图像预处理:调用函数imread 使图片转化成灰度矩阵,该灰度矩阵的每个元素为0到255的整数。
不同的数字代表不同的灰度级或者亮度,其中数字0表示黑色,数值255表示白色,而每个矩阵中的各个数据表示其对应碎纸片的一个像素,这些数据就展示了碎纸片的数字特征信息,本文通过分析碎纸片提取出来的数字矩阵的灰度信息,发现矩阵的第一列和最后一列,然后将碎纸片边缘转化生成的数字特征信息进行处理,并对每个矩阵进行两两比较,就可以找出相邻的碎纸片。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
承诺书我们认真阅读了《全国大学生数学建模比赛章程》和《全国大学生数学建模比赛参赛规则》(以下简称为“比赛章程和参赛规则” ,可从全国大学生数学建模比赛网站下载)。
我们完好理解,在比赛开始后参赛队员不可以以任何方式(包含电话、电子邮件、网上咨询等)与队外的任何人(包含指导教师)研究、议论与赛题有关的问题。
我们知道,剽窃他人的成就是违犯比赛章程和参赛规则的,假如引用他人的成就或其余公然的资料(包含网上查到的资料),一定依据规定的参照文件的表述方式在正文引用途和参照文件中明确列出。
我们郑重承诺,严格恪守比赛章程和参赛规则,以保证比赛的公正、公正性。
若有违犯比赛章程和参赛规则的行为,我们将遇到严肃办理。
我们受权全国大学生数学建模比赛组委会,可将我们的论文以任何形式进行公然展现(包含进行网上公示,在书本、期刊和其余媒体进行正式或非正式发布等)。
我们参赛选择的题号是(从A/B/C/D 中选择一项填写): B我们的参赛报名号为(假如赛区设置报名号的话):所属学校(请填写完好的全名):楚雄师范学院参赛队员(打印并署名 ) : 1.陈志明2.施明杰3.阮秀婷指导教师或指导教师组负责人(打印并署名 ):(论文纸质版与电子版中的以上信息一定一致,不过电子版中无需署名。
以上内容请认真查对,提交后将不再同意做任何改正。
如填写错误,论文可能被撤消评奖资格。
)日期: 3013年9月16日赛区评阅编号(由赛区组委会评阅行进行编号):编号专用页赛区评阅编号(由赛区组委会评阅行进行编号):赛区评阅记录(可供赛区评阅时使用):评阅人评分备注全国一致编号(由赛区组委会送交全国前编号):全国评阅编号(由全国组委会评阅行进行编号):碎纸片的拼接还原算法及MATLAB实现纲要:关于只有纵切的情况,文章经过比较目前待拼碎片与节余碎片的信噪比psnr[1,3,4]的值来确立两碎片能否为毗邻碎片;拼接算法第一连续调用右拼函数直到拼接到原图右界限,而后连续调用左拼函数直到拼接到原图左界限,进而获得整幅还原图像;关于单面纵横交织切的情况,文章对第一采纳纵切拼接算法将碎片拼接成多幅横条图片,而后将各横条图片矩阵转置[2],再次采纳纵切拼接算法拼接;两种情况的拼接,都存在人为参加;实考证明,我们的算法对纵切情况是有效的,对纵横切状况是可行的。
重点字:纵切;单面纵横交织切;双面纵横交织切;信噪比;左拼函数;右拼函数;矩阵转; Matlab[5]编程一、问题描绘破裂文件的拼接在司法人证还原、历史文件修复以及军事情报获得等领域都有侧重要的应用。
传统上,拼接还原工作需由人工达成,正确率较高,但效率很低。
特别是当碎片数目巨大,人工拼接很难在短时间内达成任务。
跟着计算机技术的发展,人们试图开发碎纸片的自动拼接技术,以提升拼接还原效率。
请议论以下问题:(1)关于给定的来自同一页印刷文字文件的碎纸机破裂纸片(仅纵切),成立碎纸片拼接还原模型和算法,并针对附件 1、附件 2 给出的中、英文各一页文件的碎片数据进行拼接还原。
假如还原过程需要人工干涉,请写出干涉方式及干涉的时间节点。
还原结果以图片形式及表格形式表达。
(2)关于碎纸机既纵切又横切的情况,请设计碎纸片拼接还原模型和算法,并针对附件 3、附件 4 给出的中、英文各一页文件的碎片数据进行拼接还原。
假如还原过程需要人工干涉,请写出干涉方式及干涉的时间节点。
还原结果表达要求同上。
(3)上述所给碎片数据均为单面打印文件,从现真相形出发,还可能有双面打印文件的碎纸片拼接还原问题需要解决。
附件 5 给出的是一页英文印刷文字双面打印文件的碎片数据。
请试试设计相应的碎纸片拼接还原模型与算法,并就附件 5 的碎片数据给出拼接还原结果,结果表达要求同上。
二、拼接中存在的几个主要问题及解决方案为了将碎片拼接成一幅完好的图片,需要解决的问题有以下几个方面:(1)怎样判断两个碎片能否为相邻碎片?(2)怎样控制两两拼接的循环履行直至拼接达成?(3)怎样判断碎片能否为界限碎片?(4)假如碎片的某个界限恰好完好部是空白,则将其判断为原图的界限仍是相邻文字的缝隙?(5)关于既有纵切又有横切的单面图片,怎样拼接?(6)关于关于既有纵切又有横切的双面图片,怎样拼接?针对上述问题,我们给出以下解决方案:1.问题( 1)的解决方案为了减少计算量和便于办理,我们将原灰度图像变换成二值图像,此变换不影响文字类图片的质量,也不会影响拼接成效。
一般而言,相邻碎片的边沿都拥有很强的相像性,我们经过判断碎片矩阵的对应界限列的相像程度来确立两矩阵储存的碎片能否为相邻碎片。
为了确立两列向量的相像程度,我们利用其信噪比值 psnr 来权衡, psnr 的值越大,说明二者的相像程度越高。
在拼接过程中可能会存在这类现象:或许存在多幅待拼碎片与已拼图片的信噪比同样,为了从中选择一幅正确的碎片作为目前碎片的毗邻碎片,我们能够人为介入从语义长进行判断。
也有可能待拼碎片与已拼图片的信噪比大,可是其实不是已拼图片的毗邻图片,反而次小信噪比的碎片是毗邻碎片。
这是因为用信噪比去权衡毗邻碎片边沿的相像度也存在概任性偏差。
关于以上两种状况,我们都需要在程序运转时期进行人工干涉,即程序在拼接时需要与用户进行交互。
思想以下:拼接函数 f2() 和 f3() 拼接时都会将目前已拼图片与全部待拼碎片的信噪比进行求解,并将所得信噪比序列存入一维数组中,而后经过排序函数 paixu2() 进行自小而大的排序,而后经过循环控制,从已排序数组的最后一个元素逐一向前试试,每试试一次都要与用户交互,用户依据图片语义判断拼接正确与否,假如正确,则给出‘ YES’的输入,程序停止拼接;假如否,则给出‘ NO’的输入,程序持续试试节余碎片,直到找到正确毗邻碎片为止。
实考证明,用该种方法对纯真纵切碎片的状况特别有效。
2.问题( 2)的解决方案在拼接的过程中,需要考虑以下几种状况:① 假如选用的第一幅碎片恰好是原图的左边边沿碎片,则只要要在其右边进行拼接,直到完成。
② 假如选用的第一幅碎片恰好是原图的右边边沿碎片,则只要要在其左边进行拼接,直到拼接完成。
③ 假如选用的第一幅碎片恰好是原图的内部某一碎片,则既要进行右边拼接,又要进行左边拼接。
针对以上三种状况,我们编写了两个拼接函数,此中函数f2() 实现两碎片的右边拼接,函数f3() 实现两碎片的左边拼接。
经过频频调用两函数实现整幅图的拼接。
为了确立是选择函数 f2() 仍是函数 f3() ,依据以下思路进行:从全部碎片中第一选择一个碎片,判断其能否为右边边沿碎片,假如否,则对其进行右边拼接,则频频调用右拼函数 f2() ,直到右边沿,而后再调用左拼函数 f3() 进行左拼,直到左边沿;假如是,则直接调用左拼函数 f3() 进行左拼,直到左边沿。
3.问题( 3)的解决方案在拼接过程中需要判断能否已经拼接到原图的边沿,为认识决该问题,我们在设计函数 f2() 和 f3() 时,分别用它们的返回值的一个重量来标记能否调用成功。
假如函数按psnr 的逆序试了全部节余碎片都未能找到适合的碎片,说明目前待拼图片是界限图片,此时返回值重量 flag 的值为 0,不然返回 1。
4.问题( 4)的解决方案关于此种状况能够不做特别办理,只要要调用拼接函数f2() 或 f3() 进行拼接。
如果恰好是界限,而节余碎片个数为 n,则人机交互 n 次才能判断该图片为界限碎片,并且人为依据语义做出判断时,也浪费了好多精力。
为了防止该状况发生,我们将界限完好为空白的状况办理为界限。
也能够在程序中直接把该办理对应的代码去掉,其余代码不需做任何变动,不足是增添了人工干涉次数。
自然,我们假设,在纵切时没有恰好完好切在空白处的状况,不然程序会给犯错误的结果。
程序实现时,详细办理方法以下:以f2() 为例,第一测试碎片矩阵的大小,假如该碎片矩阵的右边界限重量各元素值的和与碎片的行数之差小于一个阀值,我们就以为该碎片为边沿碎片,停止拼接。
因为碎片已被办理为二值图像,在二值图像中,白色像素值为 1,黑色像素值为 0,而边沿往常是纯白的,在考虑有很少杂色的状况下,我们给了一个阀值。
左边边沿判断方法同样。
5.问题( 5)的解决方案关于既有纵切又有横切的图片,我们按以下思想进行拼接:利用纵切图片的拼接思想第一将碎片拼接成多个横条图片,而后将每个横条图片的矩阵进行转置,最后再次利用纵切拼接思想对横条图片进行拼接,拼接完成后,将获得的最后矩阵进行转置,最后获得整幅图片。
在实现过程中,存在以下细节需要办理:整个过程中需要多次调用纵切拼接函数将碎片拼接成多个横条图片,因此,需要在每次成功拼接一个横条图片刻将目前已参加拼接的碎片从节余碎片中分别出来,这就需要用到分别函数 ff() 。
6.问题( 6)的解决方案单面纵横切的算法和思想完好能够拓展到双面纵横切的情况,差别在于:在将全部碎片拼接成横条形图片后,再进行横条拼接时要产生两幅图像。
为了能生成两幅图像,需要在单面纵横切拼接算法的基础上做以下办理:在拼接过程中要将参加拼接的图片与节余图片分别出来;从一个图片开始拼起,假如碰到两个界限都已经找到了,说明第一个图片已经拼接完成,而后再将节余碎片拼接成另一面图像。
因时间关系,我们未能编程实现。
三、 Matlab 编程实现拼接算法中的几个功能模块及调用关系整个问题解决方案的实现代码分红以下几个功能模块:(1) read1() 函数:将待办理碎片集‘附件 1’读入一个三维矩阵中,程序中设置的默认读取路径是盘根目录,因此,需要把待拼碎片文件夹放在该路径下。
(2) read2() 函数:将待办理碎片集‘附件 2’读入一个三维矩阵中,其余同上。
(3) read3() 函数:将待办理碎片集‘附件 3’读入一个三维矩阵中,其余同上。
(4) read4() 函数:将待办理碎片集‘附件 4’读入一个三维矩阵中,其余同上。
(5) f2() 函数:按右拼方法实现两个单面纵切碎片的拼接。
(6) f3() 函数:按左拼方法实现两个单面纵切碎片的拼接。
(7) paixu2() 函数:实现 psnr 序列的排序。
(8) psnr() 函数:求解两个碎片矩阵的界限列向量的信噪比值。
(9) pinjie1() 函数:实现对附件 1 单面纵切图片的拼接。
(10)pinjie2() 函数:实现对附件 2 单面纵切图片的拼接。
(11)pinjie3() 函数:实现对附件 3 单面纵横交织切所得碎片的拼接。
(12)pinjie4() 函数:实现对附件 4 单面纵横交织切所得碎片的拼接。
(13)ff() 函数:关于单面纵横交织切的情况,将参加拼成横条图片的碎片从目前碎片会合中筛掉。
上述几个函数之间的调用关系是:①对只有纵切的情况,直接调用pinjie1()函数、pinjie2()函数进行拼接即可。