一种基于OpenCV图像处理的二维碎片拼接系统及方法

文档序号:31014400发布日期:2022-08-05 18:05阅读:284来源:国知局
一种基于OpenCV图像处理的二维碎片拼接系统及方法
一种基于opencv图像处理的二维碎片拼接系统及方法
技术领域
1.本发明属于计算机视觉领域,尤其是一种基于opencv图像处理的二维碎片拼接方法。


背景技术:

2.目前,业内存在许多关于这方面的研究:
3.(a)一种基于形状匹配的碎纸片拼接,这类算法是以观察轮廓为主,找到能很好拼接上轮廓片段,从而达到碎片匹配拼接的目的;
4.(b)基于轮廓角特征局部匹配[4],这个算法抓住碎片可局部角匹配从而找到全局碎片匹配的形式,从而达到多块碎片匹配拼接的目的;
[0005]
(c)广度优先搜索的全局匹配[5],这个算法以碎片如何拼接为主题,当我们成功找到匹配碎片以及匹配位置时,能够在计算机上实现碎片拼接复原的一种算法。
[0006]
以上算法是基于碎片形状、边缘特征的匹配拼接的理论研究。
[0007]
当然也存在基于内容的拼接算法,如:
[0008]
(a)边缘内容的向量匹配[6],此算法抓住碎片能够匹配往往边缘内容是一致的思想,基于边缘灰度信息的匹配方法,从而达到碎片的匹配拼接;
[0009]
(b)彩色图像碎片全自动拼接[7],此算法主要是以rgb图像的另一种角度,将rgb图像转换成hsv图像,作者认为hsv得到的效果往往比灰度信息得到的效果要好,因此采用此种方法实现匹配拼接。
[0010]
以上是基于碎片边缘内容的匹配拼接理论研究。
[0011]
综上所述,现有研究技术存在的问题是:上面所说的几种拼接算法,可以说是目前为止比较好的二维碎片拼接思想,也是相对来说比较新颖的算法研究。但是这些研究大都主要在理论以及简单的操作实践可行性上,其中相关的研究成果繁多,实现方式上也仅只是一个实验,或者专门于某种碎片的拼接算法系统上,真正的一款类似的集成多种碎片拼接算法的适应多种情况的软件系统还没有,在相关论文研究中也没有明确涉及到。


技术实现要素:

[0012]
针对现有技术存在的问题,本发明提供了一种基于opencv图像处理的二维碎片拼接方法。
[0013]
本方法是这样构思的,一种基于opencv图像处理的二维碎片拼接方法。所述二维碎片拼接方法,使用opencv进行图片灰度处理,二值化处理,图片边缘提取以及多边形拟合处理。使传输的碎片数据尽可能的达到最好的可拼接状态。为需要使用不同的拼接算法处理不同的拼接场景,使用两种拼接算法:(a)类多边形步骤拼接;(b)快速拼接。
[0014]
一种基于二维碎片拼接系统以及方法包括以下步骤:
[0015]
步骤一,碎片上传模块收集大量图像碎片作为二维碎片拼接系统的元数据。
[0016]
步骤二,碎片预处理模块对所有碎片进行灰度化处理
[0017]
步骤三,碎片预处理模块对所有碎片进行二值化处理。
[0018]
步骤四,碎片预处理模块对得到的二值图像进行边缘查找,使用的函数是opencv的findcontours,本质是对二值图像进行拓扑分析,得到外边界、孔边界以及他们的层次关系。
[0019]
步骤五,碎片预处理模块对得到的边缘信息碎片进行多边形,得到碎片的角点。
[0020]
步骤六,步骤五得到的角点以及步骤四得到的边缘信息,对每张碎片进行处理得到边缘灰度序列以及边缘长度序列。
[0021]
步骤七,拼接选择模块根据不同的场景选择类多边形拼接或者快速拼接算法。
[0022]
步骤八,若手动拼接则可以重新进行其他碎片拼接,将手动拼接的二次碎片压入碎片栈中,并重复步骤一到七。
[0023]
进一步,所述碎片上传模块中首先需要采集需要拼接的大量二维碎片,这个模块主要为系统提供将要拼接的图片碎片并上传到后台存储,以便后续的操作。
[0024]
进一步,所述碎片预处理模块,将上传到后台的图像碎片进行参数设定,如类多边形拼接需要计算边界长度和灰度值等参数有,快速拼接需要角点角度等参数,并预览根据设定的参数之后的效果。根据效果的呈现,调整参数,以得到较好的图像预处理参数,为后续拼接结果得到最正确的答案提供保障。
[0025]
进一步,所述拼接选择模块包括类多边形拼接和快速拼接算法,所述类多边形拼接算法具体步骤包括:
[0026]
(1)随机从碎片序列选取一张图片(从碎片序列中弹出),分别对剩下的每一张碎片的每一条边进行长度匹配,采用的是线段距离的差的绝对值,得到匹配信息序列(这个序列主要存储的是能匹配的边的信息以及匹配的值,采用的是与字典树类似的数据结构)。
[0027]
(2)从(1)中的匹配信息序列中选取最小的匹配信息。
[0028]
(3)当最小匹配信息只有一个时,直接根据序列中的记录的拼接部位,将两碎片拼接(同时将即将要拼接的碎片弹出碎片序列),拼接后的结果图压入碎片序列的末尾。
[0029]
(4)当最小匹配信息有多个时,将其分别与最小匹配信息的边进行灰度值匹配检测,得到数值最符合,也就是最小的一个。两碎片根据记录的匹配部位拼接(同时将即将要拼接的碎片弹出碎片序列),拼接后的结果图压入碎片序列的末尾。
[0030]
(5)碎片序列的数量,如果等于1,即拼接完成,输出结果图。如果大于1,重复图片拼接阶段的步骤。
[0031]
所述快速拼接算法具体步骤包括:
[0032]
(1)对每二个图像依次进行俩俩匹配,匹配方法是lcs动态规划算法。得到并保存匹配系数以及匹配位置。
[0033]
(2)通过(1)可以得到一张无向图,图中的每个顶点代表一副图像的轮廓信息,连接顶点的边代表两副碎片图像的匹配系数。
[0034]
(3)从该图中生成一个匹配系数总和最大的一颗树(其实就是最小生成树算法),用优先队列和bfs(广度优先搜索)实现,再记录这棵树的每一条边。
[0035]
(4)遍历每一条边,根据之前记录的轮廓匹配位置,依次对该边对应的二个顶点即碎片图像进行拼接,最后就可以得到完整的拼接后的图像。
[0036]
通常不规则图形可以拟合成多边形,多边形就存在角点。碎片能够拼接在一起,往
往取决的就是角点与角点之间的吻合匹配,当一个顶点所形成的向量的夹角是凹的45
°
,能与之匹配的就是凸的45
°
,当出现此类情况则选择使用快速拼接方法,否则使用类多边形拼接算法。
[0037]
综上所述,本发明的优点及积极效果为:本发明步骤简明,在非常多的数据量下,相比现有技术,本发明的方法可以使计算量大幅度减少;另一方面,最后的拼接图片正确率达到较高水平,本发明提出的基于opencv的二维碎片拼接方法无需人工参与处理图像的过程,通过系统自身的动态调整,可以使各个拼接方法完成的图片正确率达到较高水平,当有不同的拼接需求时,可以使用不同的拼接方法。对于有大量数据碎片的的数据量,现有技术不能同时用多种拼接方法和预处理进行图像拼接,本发明可以在很少的时间内达到最高正确率和最大数据量的拼接效果。
附图说明
[0038]
图1是基于opencv图像处理的二维碎片拼接系统及方法的流程图。
[0039]
图2是基于opencv图像处理的二维碎片拼接系统及方法的整体功能模块图。
[0040]
图3具体拼接示意图。
具体实施方式:
[0041]
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
[0042]
下面将参考附图并结合实施例来详细说明本发明。
[0043]
根据图1和图2所示,预处理模块对所有碎片进行灰度化处理;对所有碎片进行二值化处理,本程序可采用opencv的threshold方法,实现的两种二值化方法:一是当前灰度值大于设定阈值时将其变成255,不大于变成0;二是当前灰度值大于设定阈值时将其变成0,大于变成255;对得到的二值图像进行边缘查找,使用的函数是opencv的findcontours,本质是对二值图像进行拓扑分析,得到外边界、孔边界以及他们的层次关系。对得到的边缘信息碎片进行多边形逼近,得到碎片的角点。采用的函数是opencv的approxpolydp。该算法是将曲线近似表示为一系列点,并减少点的数量的一种算法。通过得到的角点以及边缘信息,对每张碎片进行处理得到边缘灰度序列以及边缘长度序列。
[0044]
拼接模块,根据预处理阶段得到的碎片信息。选择类多边形拼接算法或者快速拼接算法。其中可以进行手动拼接,将手动拼接的多个碎片重组为一个新的较大碎片并重新进行预处理。
[0045]
一种基于二维碎片拼接系统以及方法包括以下步骤:
[0046]
步骤一,碎片上传模块收集大量图像碎片作为二维碎片拼接系统的元数据。
[0047]
步骤二,碎片预处理模块对所有碎片进行灰度化处理
[0048]
步骤三,碎片预处理模块对所有碎片进行二值化处理。
[0049]
步骤四,碎片预处理模块对得到的二值图像进行边缘查找,使用的函数是opencv的findcontours,本质是对二值图像进行拓扑分析,得到外边界、孔边界以及他们的层次关
系。
[0050]
步骤五,碎片预处理模块对得到的边缘信息碎片进行多边形,得到碎片的角点。
[0051]
步骤六,步骤五得到的角点以及步骤四得到的边缘信息,对每张碎片进行处理得到边缘灰度序列以及边缘长度序列。
[0052]
步骤七,拼接选择模块根据不同的场景选择类多边形拼接或者快速拼接算法。
[0053]
步骤八,若手动拼接则可以重新进行其他碎片拼接,将手动拼接的二次碎片压入碎片栈中,并重复步骤一到七。
[0054]
进一步,所述碎片上传模块中首先需要采集需要拼接的大量二维碎片,这个模块主要为系统提供将要拼接的图片碎片并上传到后台存储,以便后续的操作。
[0055]
进一步,所述碎片预处理模块,将上传到后台的图像碎片进行参数设定,如类多边形拼接需要计算边界长度和灰度值等参数有,快速拼接需要角点角度等参数,并预览根据设定的参数之后的效果。根据效果的呈现,调整参数,以得到较好的图像预处理参数,为后续拼接结果得到最正确的答案提供保障。
[0056]
进一步,所述拼接选择模块包括类多边形拼接和快速拼接算法,所述类多边形拼接算法具体步骤包括:
[0057]
(1)随机从碎片序列选取一张图片(从碎片序列中弹出),分别对剩下的每一张碎片的每一条边进行长度匹配,采用的是线段距离的差的绝对值,得到匹配信息序列(这个序列主要存储的是能匹配的边的信息以及匹配的值,采用的是与字典树类似的数据结构)。
[0058]
(2)从(1)中的匹配信息序列中选取最小的匹配信息。
[0059]
(3)当最小匹配信息只有一个时,直接根据序列中的记录的拼接部位,将两碎片拼接(同时将即将要拼接的碎片弹出碎片序列),拼接后的结果图压入碎片序列的末尾。
[0060]
(4)当最小匹配信息有多个时,将其分别与最小匹配信息的边进行灰度值匹配检测,得到数值最符合,也就是最小的一个。两碎片根据记录的匹配部位拼接(同时将即将要拼接的碎片弹出碎片序列),拼接后的结果图压入碎片序列的末尾。
[0061]
(5)碎片序列的数量,如果等于1,即拼接完成,输出结果图。如果大于1,重复图片拼接阶段的步骤。
[0062]
所述快速拼接算法具体步骤包括:
[0063]
(1)对每二个图像依次进行俩俩匹配,匹配方法是lcs动态规划算法。得到并保存匹配系数以及匹配位置。
[0064]
(2)通过(1)可以得到一张无向图,图中的每个顶点代表一副图像的轮廓信息,连接顶点的边代表两副碎片图像的匹配系数。
[0065]
(3)从该图中生成一个匹配系数总和最大的一颗树(其实就是最小生成树算法),用优先队列和bfs(广度优先搜索)实现,再记录这棵树的每一条边。
[0066]
(4)遍历每一条边,根据之前记录的轮廓匹配位置,依次对该边对应的二个顶点即碎片图像进行拼接,最后就可以得到完整的拼接后的图像。
[0067]
如图3所示,通常不规则图形可以拟合成多边形,多边形就存在角点。碎片能够拼接在一起,往往取决的就是角点与角点之间的吻合匹配,当一个顶点所形成的向量的夹角是凹的45
°
,能与之匹配的就是凸的45
°
,当出现此类情况则选择使用快速拼接方法,否则使用类多边形拼接算法。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1