摘  要

对重要文件的拼接复原,传统上都由人工完成,拼接准确率虽然高但是效率很低。本文旨在建立模型,利用计算机编程加少量的人工干预实现碎纸片的拼接复原。

针对问题1,由于对任意一个字符来讲,笔画是连续的,所以对于一般情况,即使文字被切开,两边的像素还是有联系的,是呈现离散性渐变的。针对此特征,建立了文字连续性模型来求解该问题。而又因为被切开的两边碎片边缘灰度是具有高相关性的,所以,又建立了向量相关模型来求解进行图片拼接。用两种模型分别求解,都得到了对附件一和附件二的正确拼接结果。

针对问题2,可以采用第一问的模型,先进行全局搜索,找出每个碎片最相似的右侧邻近碎片,拼接出每一行的图片,再利用向量相关性进行横向拼接,得到拼接结果。但是,由于纸片同时被横向与纵向切割,碎片小,数量多,碎片之间的信息量不够,容易造成误判。所以建立向量投影分类模型,首先将可能处于同一行的碎片用模糊C均值(FCM)聚类方法分到同一类。对于汉字或英文的缺行碎片(碎片中只有一行或者两行字),利用掩码补充模型将投影中缺失的行用掩码补齐,然后再放入分类。分类完成后,将每一类中的碎片进行横向排序拼接。每一类横向拼接完成后,从而拼接成完整图片。对于不能正确拼接的部分,采取了多种人工干预的策略,最终得到正确的拼接结果。

针对问题3,由于附件中的碎片分为正反两面,所以可以建立组合匹配模型将碎片首先将正反面碎片的灰度矩阵上下拼接,每张碎片的拼接方案有两种(灰度矩阵a放在左右镜像处理后的b上或灰度矩阵b放在左右镜像处理后的a上)。拼接过后,边缘灰度向量信息会增加为原来的两倍,这时利用问题二中的全局搜索模型用向量相关性的方法进行匹配拼接。拼接出所有行后,将每一行的下半部分矩阵切割放在上半部分的右边,又可增加横向拼接时的边缘信息,然后各行再次利用向量相关性的方法进行横向拼接,最终得到结果图,但是仍然存在较多的碎片不能正确匹配,需要人工干预。

由于碎片在切割时的随机性,使得机器自动拼接存在一定的难度,因此,采取恰当的人工干预的措施,是保证正确拼接的必要手段。

关键词:文字连续性  匹配  FCM聚类方法 掩码补充模型  向量投影分类模型

一.问题背景及重述

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

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

问题2: 对于碎纸机既纵切又横切的情形,设计碎纸片拼接复原模型和算法,并针对附件3和附件4给出的中、英文各一页文件的碎片数据进行拼接复原。

问题3:从现实情形出发,还可能有双面打印文件的碎纸片拼接复原问题需要解决。附件5给出了一页英文印刷文字双面打印文件的碎片数据。设计相应的碎纸片拼接复原模型与算法,并就附件5的碎片数据给出拼接复原结果。

二.模型假设

1、不计碎纸片边缘的磨损,没有边缘像素损耗;

2、假设纸张垂直放入碎纸机即每张小碎纸片都是规则矩形;

3、图片中的文字像素没有任何断点;

4、图像上没有任何噪声或污点造成像素干扰。

三.变量说明

四.模型准备与问题分析

针对题目中附件所给的图片信息,我们学习准备了图像的处理方法[1]、模式匹配方法[2]和图像拼接方法[3,4]。将图片批处理成范围值0-255之间的灰度矩阵(纯黑为0,纯白为255,数字越大,颜色越亮)。

问题一中的附件图片,碎片数据较少,每一张碎片都比较大,那么相应的灰度矩阵中包含的信息就比较多,处理起来相对容易。而且仔细观察,分别只有一张图片的最左端和最右端边缘是没有文字的。由于完整纸片切开后,边缘处仍然是有联系的。所以可以提取图像边缘的灰度信息,首先找出第一张图片,然后利用图片的边缘信息找出下一张图片与之拼接。

问题二中,给出的图片碎片比较小,只有180*72像素,图像信息以及边缘信息都比较少。而且,由于既横切又纵切,图片的顺序被打乱,无法直接拼接。因此,首先得将这些碎片分类,将同一行的图片归在同一类中,然后将归类后的图片进行横向排序,拼接出这一行的图片碎片,因为有些碎片包含的边缘信息过少,可能无法分类或者成功排序,这时进行人工干预。每一行图片按排序拼接后,即可将问题转化为第一问的问题进行纵向拼接,最终得到结果。

问题三中附件五的碎片与问题二中附件四的类似,都是英文小碎片,但是正反面被打乱。虽然正反面一开始无法识别,但是某一张图的正面与另一张正面横向投影对齐,反面的横向投影也就会对齐。所以我们可以利用a面和b面的矩阵上下组合,变成一个大的单面图片,一方面增加了拼接的信息量,同时又将问题转化为第二问中类似的问题,利用第二问的模型即可找出双面碎片的拼接结果。

五.模型建立与求解

5.1   问题一的求解

5.1.1 基于文字连续性模型的碎片拼接

首先,对问题1的分析可知,该问题为一个图像处理问题。根据字的特征,我们知道笔画是连续的,图片放大之后我们也能看到有字的部分图像偏暗,由字中间向边缘,慢慢变亮直至超过字范围而变成白色。我们利用这一点,建立文字连续性模型来处理拼接问题。

(a)                                                                  (b)

图1:点阵字体的锯齿现象

由字体放大图1(a)可以看出笔画周边的锯齿,每一个锯齿方块就是一个像素,范围大小在255以下。切割后的图像,这些锯齿也会分开。但是,虽然像素分开了,由于汉字字体或者英文字体大部分是连体的,所以这些碎片的图像灰度信息会有一定的相关性或者说是连续性。

如图1(b),假如图片像素按照红线所示切开分为a,b两块。可以看到红线左右两边的像素块大都是相连的,最理想的情况就是如同像素块2,3或者4,5在同一位置直接对应,这种情况就可以认为这两个像素块匹配,匹配数num加1。但是,也有可能出现像素块1这样的情况,与之对应的位置没有像素块,但是下方或者上方有像素块,由于这些像素的连续性,所以也认为像素1得到匹配,num=num+1。

读取所有图片,由于纸张有页边距,若某一张碎片为完整纸片上的最左一张,则其图像左侧必定全为白色,即灰度值的前几列为255,通过这种方法,能很快找到第一张碎片,将其放入集合中,记为。

找到第一张碎片后,用第一张碎片的右边缘去和中所有碎片的左边缘进行匹配。由于白色点太多,匹配成功数会很大,影响结果。所以,我们只选取非白色点进行匹配,匹配过程中,非白色点的总数记为sumofb,每选取边缘非白色点匹配一次,sumofb=sumofb+1。

匹配率[3]的计算方法为:

(1)

求得第一张碎片的右边缘和集合中每张碎片左边缘的匹配率后,将所得的匹配率对比,选取匹配率最高的那张碎片,将其放入集合中,记为(i为碎片的排列顺序),将右边缘像素去和中剩余碎片的左边缘像素进行匹配,重复此类操作,直到中没有碎片,最终得到排序结果即为碎片的拼接方案。计算所得集合中与的最大匹配率如表1所示。

表1:附件一中中文字符碎片拼接顺序及匹配情况:

当前碎片编号
8
14
12
15
13
10
2
16
1
最佳匹配碎片编号
14
12
15
13
10
2
16
1
4
最大匹配率
0.83
0.96
0.82
0.92
0.97
0.92
0.97
0.94
0.83
当前碎片编号
4
5
9
13
18
11
7
17
0
最佳匹配碎片编号
5
9
13
18
11
7
17
0
6
最大匹配率
0.85
0.87
0.97
0.92
0.74
0.89
0.98
0.91
0.99

表2:附件一中英文字符碎片拼接顺序及匹配情况:

当前碎片编号
3
6
2
7
15
18
11
0
5
最佳匹配碎片编号
6
2
7
15
18
11
0
5
1
最大匹配率
0.93
0.91
0.95
0.92
0.89
0.90
0.76
0.96
0.88
当前碎片编号
1
9
13
10
8
12
14
13
16
最佳匹配碎片编号
9
13
10
8
12
14
13
16
4
最大匹配率
0.99
0.87
0.87
0.94
093
0.92
0.96
0.84
0.82

5.1.2  基于向量相关性的碎片拼接

提取碎片边缘向量,选出第一张图片后,计算右边缘向量与集合中的每一张碎片左边缘向量的相关系数[5]:

(2)

将所得的对比,选出相关系数最最大的,放入集合中。再用选出的碎片右边缘向量与中剩余碎片匹配,重复此操作,直到中没有碎片,最终得到排序结果即为碎片的拼接方案。计算求得集合中与的相关系数为:

表3:附件二中中文字符碎片拼接顺序及匹配情况:

当前碎片编号
8
14
12
15
13
10
2
16
1
最相关碎片编号
14
12
15
13
10
2
16
1
4
最大相关系数
0.80
0.85
0.88
0.91
0.84
0.89
0.94
0.88
0.86
当前碎片编号
4
5
9
13
18
11
7
17
0
最相关碎片编号
5
9
13
18
11
7
17
0
6
最大相关系数
0.88
0.88
0.88
0.87
0.86
0.86
0.84
0.88
0.90

5.2  问题二的求解

问题二中所给附件三、四都是小碎片,宽度为72像素,与第一问中的一致,但是高度只有180像素,为第一问碎片的1/11,所以左右边缘的灰度信息较少,容易造成误判。

5.2.1 模型1 建立全局搜索的碎片拼接模型

由问题一的求解可以看出,利用向量相关模型或者文字连续性模型可以不必区分碎片的文字语言。所以对于问题二,可以建立全局搜索模型,同时利用第一问中的向量相关分析来进行碎片拼接。全局搜索模型算法如下:

Step 1:根据页边距找出11张处于纸片第一列的碎纸片,记为集合。取其中一张记为,放入;

Step 2:我们从存放于U的所有纸片中任取一张碎纸片与进行向量匹配,记录下匹配的相关系数,取相关系数最大的那张图片作为的下一张纸片,记为,以此法依次匹配得到后面的18张图片(最后一张同样存在页边距);对于得到的这样一条横串,我们记为

Step 3:从上面的集合中再任取一张图片记为,重复step2;

Step 4:当,我们根据问题1中的方法对进行拼接,即可得到整张纸片原图。

5.2.2模型2 基于向量投影分类的碎片拼接模型

但是由于附件三和四中都给出了209张碎片,如果进行全局搜索的话,时间复杂度,计算量十分庞大。所以为了减少计算时间,我们首先根据碎片中行距的位置对碎片进行预分类,将同一行的碎片分在一类,再对同一类中的碎片利用第一文的方法进行排序。

由于中英文文字在像素图片中的显示形式不一样,所以我们通过这两种文字显示的不同特征来用两种投影方式来进行分类排序。

1、 中文字的碎片拼接

(1)中文字碎片向量投影

针对中文字像素图片,可以利用中文字是方块字的特点首先建立向量投影匹配分组模型。附件3中所给11×19共209张图片,可以拼成完整的一篇文章,那么同一行的文字被切开后,字体仍然在相对的同一高度上。

图2 碎片投影

所以,利用这一特征,我们可以首先利用掩码补充法将图片中文字的行间距找出来,利用不同行的文字中行间距在图片中的高度不通,对碎片经行预分类,将同一行的碎片分在一类总,然后利用第一问中的方法对行内小块经行排序。掩码补充法的具体做法是:将像素矩阵水平投影,如图2,设当某一像素行都为白色255时,投影值只为0,当一像素行有小于255的像素块时,此行投影为1。最终,209张图片生成209列的投影矩阵Shadow。

(2)字符的填补

投影碎片的灰度信息,由于中文字中有上下结构的字,如,附件三中的“010.bmp”碎片中的“翁”字,中间有一小段的投影出现缺失。这时,由于投影向量中全白色段的长度很小(甚至可能为1个像素点),并且上下两字段的长度加起来接近一个中文字符块的高度时,我们将此段的投影向量填充为1,似得其投影矩阵具有连续性。

图3 字符缺损补充

(3) 字块的填补

利用掩码补充模型补充缺行碎片。在投影过程中,会遇到缺行的图片,这种缺行的图片大致分为三种:

图4 掩码补充时的特殊情况

如图4所示,有上部缺行,中部缺行和底部缺行。如果出现这样的情况,因为若全为白色的像素行过多,就有可能匹配不到分组。所以我们建立掩码补充模型,补充缺失的文字像素投影行,将缺失的文字像素投影段都补充为1,每一列的投影矩阵都叫做“投影编码”。

首先,我们将缺失投影行的图片搜寻出来,由于缺失一个字段,那么这些图片的向量投影值为1的连续段就会小于3,只有两段甚至是一段。利用这个方法,我们成功找出了缺失字段的图片,分别是第5 9 15 17 22 2628 33 41 61 67 71 72 75 86 90 94 102 107 109 110 111 114 115 118 120 124 126140 141 146 147 151 153 154 155 156 158 166 167 174 182 185 186 188 195 197 198205 206 208共51张(此数列的值比实际图片编号大一,如,第五张对应附件三中的004号图片)图片。

然后,我们将这些缺损字段的图片投影数据进行整合,计算每一段全白色段和非全白色段的段长(例如投影编码为00000011111100011,就记为6,6,3,2)并存入段长矩阵中,为了以后处理方便,我们都以全白色段的段长值开头,若起始为非纯白色段,则在此段长前加一0值,作为开头的全白色段长。

经过投影后的统计,一个中文字的高度Hz大约为41-42像素,而两行中文字之间的间距Dz大约为26-28像素。首先我们考虑上部缺行的图片,由于我们规定了段长矩阵中的第一列都为全白色段的长度,所以当第一列的值LenofD[i,1]大于间距Dz时,表示这张图片上部是有缺损的。然后根据上部缺损的不同长度段长LenofD[i,1],将LenofD[i,1]分割成几个段长(这些段长为全白色段与非全白色段间隔表示),放在矩阵head中,用分割后的段长head取代LenofD[i,1]。

(3)

对于中部缺行的图片我们也采取类似的方案进行处理。对于图片中间部分的全白色段段长LenofD[i,mid],因为中部缺损肯定的是缺[非全白色段,全白色段,非全白色段]或者是[非全白色段,全白色段,非全白色段,全白色段,非全白色段],只有两种情况,所以当LenofD[i,mid]大于(2×Dz+Hz)时:

(4)

用mid矩阵取代LenofD[i,mid]。

最后一种底部缺行的处理方案也与上部缺行的类似。如果图片底部的LenofD[i,bom]大于间距Dz,就将LenofD[i,bom]分解成小块段长:

(5)

用bom矩阵取代LenofD[i,bom]。

将补充好的段长矩阵LenofDnew,重新按照段长和全白色段,非全白色段间隔排列的规则还原出新的投影矩阵Shadownew,在Shadownew中的原先缺行图片的缺失段都会被赋值1,这些补充后值为1的段就称作“掩码”。补充掩码后的投影急诊对应的图片,就相当于在缺行的那一段,补充了一个高度Hz的字段,效果如图5:

图5 掩码遮盖

(4)用FCM聚类方法将碎片分类

将这些覆盖掩码后的投影矩阵Shadownew用模糊C均值(FCM)聚类方法[2]进行分类,根据投影矩阵中的投影编码一共分为11类碎片。每一类所包含的图片序号为(序号比实际编号大一):

表4:FCM预分类结果

C1
6     11    30    38    45    49    56    60    65    76    93    99    105  112  172  173  181  202  207
C2
7     20    21    37    53    62    64    68    70    73    79    80    97    100  117  132  163  164  178
C3
3     12    23    29    50    55    58    66    92    96    119  130  142  144  179  187  189  191  193
C4
9     10    25    26    36    39    47    75    82    89    104  106  123  131  149  162  168  190  194
C5
1     8     33    46    54    57    69    71    94    127  138  139  154  159  167  175  176  197  209
C6
17    22    67    107  110  111  140  146  151  158  174  182  185  188  198  205
C7
35    43    44    48    59    78    85    91    95    98    113  122  125  128  137  145  150  165  184
C8
4     13    15    32    40    52    74    83    108  116  129  135  136  160  161  170  177  200  204
C9
14    16    18    28    34    72    81    84    86    133  134  153  157  166  171  183  199  201  203  206
C10
2     19    24    27    31    42    51    63    77    87    88    101  121  143  148  169  180  192  196
C11
5  41  61     90    102  103  109  114  115  118  120  124  126  141  147  152  155  156  186  195 208
分类后C6中只有16张图片(少3张),C9中有20张(多1张),C11中有21张(多2张)。

(5)将分类好的碎片逐类横向拼接

分类完毕之后,继续利用向量相关模型进行横向拼接,拼接好同一类的一行之后,观察是否有拼接出错碎片。此时,由于程序对有些碎片无法正确匹配,必须进行人工干预,根据语义和偏旁部首进行手工拼接。

图6 人工干预前后比较

如图6,第46张与第25张碎片匹配出错,因为“迎”和“晴”都切在了竖线上,所以相关系数会很大,这是第一类典型的出错原因:边缘字形相近;第74张与第9张匹配出错,因为第74张碎片的右端边缘没有任何中文字符,造成正确无法计算相关系数,这是第二类出错原因:碎片边缘没有任何字符灰度信息。

人工干预时,根据中文字的特征,以及上下文的语义,我们进行手动调整错误的图片的位置,将此行拼成正确图片。

当每一个分类都成功拼接出正确图片行后,将这11个分类用在纵向进行拼接。纵向拼接成功后,在用向量相关模型进行横向拼接,最终得到正确结果:

表5:附件三的拼接结果

49
54
65
143
186
2
57
192
178
118
190
95
11
22
129
28
91
188
141
61
19
78
67
69
99
162
96
131
79
63
116
163
72
6
177
20
52
36
168
100
76
62
142
30
41
23
147
191
50
179
120
86
195
26
1
87
18
38
148
46
161
24
35
81
189
122
103
130
193
88
167
25
8
9
105
74
71
156
83
132
200
17
80
33
202
198
15
133
170
205
85
152
165
27
60
14
128
3
159
82
199
135
12
73
160
203
169
134
39
31
51
107
115
176
94
34
84
183
90
47
121
42
124
144
77
112
149
97
136
164
127
58
43
125
13
182
109
197
16
184
110
187
66
106
150
21
173
157
181
204
139
145
29
64
111
201
5
92
180
48
37
75
55
44
206
10
104
98
172
171
59
7
208
138
158
126
68
175
45
174
0
137
53
56
93
153
70
166
32
196
89
146
102
154
114
40
151
207
155
140
185
108
117
4
101
113
194
119
123

2、英文字的碎片拼接

(1)英文字碎片向量投影

对于英文字母,我们可以利用英文字母“四线三格”的书写格式,如图7所示:

图7 英文字符“四线三格”表示

这种书写格式我们也可以通过碎片灰度矩阵的每行灰度值的和表示成折线图,从中图7

观察出来。每当那一行的值变化比较剧烈时,那一行一般情况下总是四线中的某一线。

通过多次分析得出相邻两条直线之间的距离,大致分别为(12,20,15,25),之后制作模板,把每一个碎片与模板比较。

通过寻找每一个碎片起始直线位置,与模板对应寻找可以匹配的个数,通过循环找出与模板匹配率最高的模式。根据匹配的模式,从起始位置对碎片根据此模式的间距向上向下添加直线,完成直线填补工作。

之后,通过模糊C均值(FCM)聚类方法进行分类,根据补齐直线投影矩阵分出11类,由于分类方法的模糊性特征,造成分出的类别误差相对较大(如下),在之后运用相关性函数匹配时造成了很大的错误,在人工干预时大大增加了工作量。

表6:英文碎片分类结果

C1
7     15    18    24    48    55    61    62    63    69    71    85    91    92    97    100  101  102  104  123 138  147  149  157  173  175  186  196  197  199  209
C2
27    29    34    143  163  170
C3
3     5     12    22    33    40    65    66    68    76    105  107  113  120  137  148  150  155  180  181 185  190  191  192  193  198  205
C4
8     50    119  134  169
C5
10    11    17    20    45    57    58    67    72    83    84    93    94    106  122  127  135  142  146  153 158  172  177  183  184  195  203  206
C6
19    23    28    35    36    43    56    75    89    111  115  152  156  166  168
C7
16    21    37    42    44    46    74    77    78    80    103  109  117  124  136  141  144  162  174  200 208
C8
1     2     49    51    53    54    64    73    82    86    88    90    98    116  121  125  126  129  130  132 139  140  154  160  161  176  178  188  194  201 
C9
4     6     14    25    31    38    41    47    52    59    108  112  114  118  128  131  133  145  151  159 164  179  187  189  202  207
C10
13    32    39    60    70    79    95    96    99  165  167  204
C11
9     26    30    81    87    110  171  182
尽管直线修补后误差依然不小,相比于直接模糊C均值(FCM)聚类方法分类,大大提高了成功率,所以可以根据英文字书写格式的这种特征来进行向量投影。

表7:附件四的拼接顺序

191
75
11
154
190
184
2
104
180
64
106
4
149
32
204
65
39
67
147
201
148
170
196
198
94
113
164
78
103
91
80
101
26
100
6
17
28
146
86
51
107
29
40
158
186
98
24
117
150
5
59
58
92
30
37
46
127
19
194
93
141
88
121
126
105
155
114
176
182
151
22
57
202
71
165
82
159
139
1
129
63
138
153
53
38
123
120
175
85
50
160
187
97
203
31
20
41
108
116
136
73
36
207
135
15
76
43
199
45
173
79
116
179
143
208
21
7
49
61
119
33
142
168
62
169
54
192
133
118
189
162
197
112
70
84
60
14
68
174
137
195
8
47
172
156
96
23
99
122
90
185
109
132
181
95
69
167
163
166
188
111
144
206
3
130
34
13
110
25
27
178
171
42
66
205
10
157
74
145
83
134
55
18
56
35
16
9
183
152
44
81
77
128
200
131
52
125
140
193
87
89
48
72
12
177
124
0
102
115
根据不同的文字特征,对中英文碎片采取了不同的数学模型,汉字属于方块字,有明显的笔画连续性,字宽、字高,通过对方块字字块的判断可以比较好的判断匹配率;英文有明显的四线三格模式,通过直线寻找可以很好地把英文特征识别,提高匹配率。

5.3问题三的求解

5.3.1 基于组合匹配模型的双面碎片拼接

针对第三问附件中碎片的正反面,若某一碎片正面与另一碎片正面能够匹配,那么这两张图片的反面就是匹配的。利用这一特性,我们可以建立组合匹配模型。

将碎片图像信息转化为灰度矩阵,将每张图片的a,b面所对应的灰度矩阵上下拼接,每张碎片的拼接方案有两种(灰度矩阵a放在左右镜像处理后的b上或灰度矩阵b放在左右镜像处理后的a上),效果如图8所示:

图8 拼接方案

通过拼接大大增加碎片的信息量,在接下来的模式匹配寻找,行列拼接时提高了成功率。

拼接之后,延用第二问的全局搜索模型。首先,搜索碎片的行首、行尾放到两个数组中,并把行首、行尾为之标记;接着,全文搜索,运用相关系数函数匹配,寻找出与之匹配率最高的碎片,放进一个集合中。

由于灰度矩阵的相似性,匹配时出现错误,形成一段一段拼接好的碎片图像,观察每一行用肉眼可以看出的错误的位置,并进行调整,最后,把每一行的碎片拼接完成。每一行拼接好之后,假设a面为正面,b面为反面,把b面的灰度矩阵连接到a面后面,形成Z(a,b)灰度矩阵;如果b为正面,a为反面,形成Z(b,a)灰度矩阵。

把每一行的灰度矩阵,之后把灰度矩阵进行转置,运用第一问的碎片相关性方法对灰度矩阵进行匹配,最后得出正确结果:

表8:附件五碎片正面拼接顺序

136a
047b
020b
164a
081a
189a
029b
018a
108b
066b
110b
174a
183a
150b
155b
140b
125b
111a
078a
005b
152b
147b
060a
059b
014b
079b
144b
120a
022b
124a
192b
025a
044b
178b
076a
036b
010a
089b
143a
200a
086a
187a
131a
056a
138b
045b
137a
061a
094a
098b
121b
038b
030b
042a
084a
153b
186a
083b
039a
097b
175b
072a
093b
132a
087b
198a
181a
034b
156b
206a
173a
194a
169a
161b
011a
199a
090b
203a
162a
002b
139a
070a
041b
170a
151a
001a
166a
115a
065a
191b
037a
180b
149a
107b
088a
013b
024b
057b
142b
208b
064a
102a
017a
012b
028a
154a
179b
158b
058b
207b
116a
179a
184a
114b
035b
159b
073a
193a
163b
130b
021a
202b
053a
077a
016a
019a
092a
190a
050b
201b
031b
171a
146b
172b
122b
182a
040b
127b
188b
068a
008a
117a
167b
075a
063a
067b
046b
168b
157b
128b
195b
165a
105b
204a
141b
135a
027b
080a
000a
185b
176b
126a
074a
032b
069b
004b
077b
148a
085a
007a
03a
009a
145b
082a
205b
015a
101b
118a
129a
062b
052b
071a
033a
119b
160a
095b
051a
048b
133b
023a
054a
196a
112b
103b
055a
100a
106a
091b
049a
026a
113b
134b
104b
006b
123b
109b
096a
043b
099b
表9:附件五碎片反面拼接顺序

078b
111b
125a
140a
155a
150a
183b
174b
110a
066a
108a
018b
029a
189b
081b
164b
020a
047a
136b
089a
010b
036a
076b
178a
044a
025b
192a
124b
022a
120b
144a
079a
014a
059a
060b
147a
152a
005a
186b
153a
084b
042b
030a
038a
121a
098a
094b
061b
137b
045a
138a
056b
131b
187b
086b
200b
143b
199b
011b
161a
169b
194b
173b
206b
156a
034a
181b
198b
087a
132b
093a
072b
175a
097a
039b
083a
088b
107a
149b
180a
037b
191a
065b
115b
166b
001b
151b
170b
041a
070b
139b
002a
162b
203b
090a
114a
184b
179b
116b
207a
058a
158a
179a
154b
028b
012a
017b
102b
064b
208a
142a
057a
024a
013a
146a
171b
031a
201a
050a
190b
092b
019b
016b
077b
053b
202a
021b
130a
163a
193b
073b
159a
035a
165b
195a
128a
157a
168a
046a
067a
063b
075b
167a
117b
008b
068b
188a
127a
040a
182b
122a
172a
03b
007b
085b
148b
077a
004a
069a
032a
074b
126b
176a
185a
000b
080b
027a
135b
141a
204b
105a
023b
133a
048a
051b
095a
160b
119a
033b
071b
052a
062a
129b
118b
101a
015b
205a
082b
145a
009b
099a
043a
096b
109a
123a
006a
104a
134a
113a
026b
049b
091a
106b
100b
055b
103a
112a
196b
054b
六.模型结果的分析与检验

6.1 连续性模型的实验分析检验

利用文字连续性模型,最终成功将附件一和附件二的长条型中英文字体碎片很好的拼接起来了,拼接后的文章语意通顺,说明结果正确。由于问题一中的纵向切割,使得形成的边缘处除了第一张和最后一张外,其余碎片没有完全空白的情况,这给我们寻找第一张碎片带来了很大的便利。这种先找出第一张碎片,再继续拼接后续碎片的方法。可以大大简化边缘匹配的过程。

经过程序实验论证,针对问题一的中英文碎片拼接,拼接后的正确率为100%。

这种连续性模型可以很好的拼接出边缘所含信息较多的碎片。但如果对于边缘只含有少量文字或者与其他碎片含有相似字形较多的碎片,就会产生误差。

所以这种模型适用于边缘信息较多的碎片拼接。

6.2  全局搜索模型以及向量投影分组模型的分析检验

问题二中所给附件三、四都是小碎片,宽度为72像素,与第一问中的一致,但是高度只有180像素,为第一问碎片的1/11,所以左右边缘的像素信息也只为附件一和二的1/11,如果实用文全局搜索模型利用向量相关性的方法来拼接碎片的时间复杂度。

而如果使用向量投影分组模型,把每一行有黑点的情况投影到一个数组中,组成以一个180*209的数组,之后运用聚类分析方法分出11类,分类时由于空白处造成分类误差,运用相关系数函数匹配判断时出现匹配错误后,运用人工干预,分为11类。然后进行横向匹配,此时的时间复杂度只为。此模型能节约大量运算时间并且能较好得适应边缘特征并不明显的时候,但由于分类的误差,造成最后匹配时出现了错误,需要人工干预,增加了工作量。

6.3  组合匹配模型的分析检验

通过图片的组合拼接,把碎片的信息量进行扩充,增大信息量,图片特征,在下面的对每一行的分类,每一列的匹配拼接提高了成功率。并通过反面对正面的检测分析,可以更好的避免误差,减少人工干预的次数,减少了工作量。但由于使用的是全局搜索模型,在时间复杂度,耗时较多。

图9附件五碎片横向拼接

根据碎片拼接图片可以看出,有碎片拼接错误,主要缘由是匹配函数的选取,相关性的匹配,近似灰度矩阵就会造成干扰。使得最后匹配的数据出现了错误,造成一段一段的碎片,给人工干预时造成了一定的麻烦。通过反面的拼接去检验正面拼接的正确性。

七.模型的评价与推广

7.1 模型的评价

(1)问题一中的连续性模型对于拼接边缘信息量较大的碎片有较高的效率以及很高的准确率,但是当单独用该模型解决例如附件三、四的小碎片时,虽然效率很高,但是准确率较低。比如,如果有两张或者多张图片边缘切割都为白色时,可能就会出现无法匹配的情况,这时就需要人工干预;向量相关模型相对于文字连续性模型,具有更高的准确度。

(2)问题二中的全局搜索模型不仅耗时多,而且由于给的信息很少,在这么多图片中匹配,会造成准确率很低的情况;向量投影分组模型,投影图片灰度向量到投影矩阵中,利用FCM聚类分析方法让打乱的横切及纵切的图片得以分类,从而分步实现了碎片的排序,简化了拼接过程,大大减少了循环匹配的次数;

(3)问题三中组合匹配模型将附件五中的a,b两图片上下拼接,然后用拼接后的图片进行分类,这样不仅提高了效率,还一定程度上增加了碎片所提供的信息。

7. 2 模型的推广

这三种模型针对不同的情况,利用多种模型和匹配方法,能够较好的解决题目中的三个问题。

但是,我们仍然可以考虑其他特征,结合连续性模型或者向量相关模型综合考虑,比如字宽特征,计算两边的碎片边缘被切开字的缺损字宽,两边相加,当和值与标准字宽相差较大时,就可以排除不利因素。

现在已经有很多模式识别的算法和软件,我们可以利用文字识别算法来计算拼接后的两片碎片上的文字上的准确率,当准确率较高时,则认为匹配成功。利用已有的技术,可以大大效率有准确率

八.参考文献

[1] 章毓晋. 图像处理(第三版). 清华大学出版社,2012.2

[2] 边肇祺,张学工. 模式识别(第二版).清华大学出版社 2000.1

[3] 冯宇平,戴明,孙立悦,张威. 图像自动拼接融合的优化设计.光学精密工程.2012,18(2)

[4] 李仁发,杨高波. 特征提取与图像处理(第二版).电子工业出版社 2010.10

[5] 陈丽莉,刘贵喜.一种有效的序列图像自动拼接方法. 光电子激光. 2011,22(7)

九.附录

附录一:程序代码

% 第一问代码 文件名:Qusetion1.m

files=dir('C:\Users\ZYF\Desktop\新建文件夹\B\附件1\*.bmp');    %批量载入图像

for n=1:numel(files)

image{n}=imread(['C:\Users\ZYF\Desktop\新建文件夹\B\附件1\'files(n).name]);

end

[h,z]=size(image{1,1});

for k=1:n

byz(:,k)=image{1,k}(:,1);      %将第k张图片的最左边一列放入矩阵byz的第k列

byy(:,k)=image{1,k}(:,z);      %将第k张图片的最右边一列放入矩阵byy的第k列

end

%利用页边距寻找第一张图片

for i=1:n

sum=0;

for j=1:h

if byz(j,i)==255

sum=sum+1;

else

break;

end

end

if sum==h

f=i;

end

end

paixu=zeros(1,n);

index=1;

paixu(index)=f;

%依据连续性模型需找匹配点

for i=2:n

max=0;

for j=1:n

sumofbp=0;

num=0;

for k=2:h-1

ifbyy(k,paixu(index))~=255

ifbyz(k,j)<255||byz(k-1,j)<255||byz(k+1,j)<255

num=num+1;

else

num=num;

end;

end

end

if num>max

max=num;

signal=j;

end

end

index=index+1;

paixu(index)=signal;               %存放排好序的图片序号

end

temp=image{paixu(1)};

for i=2:n

temp=[tempimage{paixu(i)}];       %将排序好的图片存放与temp

end

imshow(temp)                           %完整显示整张纸片

%第二问中文拼接中投影代码   文件名reflect.m

% 碎片预处理,图像投影,存放投影数组

files=dir('C:\Users\ZYF\Desktop\新建文件夹\B\附件3\*.bmp');%载入图像

figure;

A=zeros(1,180);

for n=1:numel(files)

image{n}=imread(['C:\Users\ZYF\Desktop\新建文件夹\B\附件3\' files(n).name]);

end

[x,y]=size(image{1});

flag1=zeros(x,n);

for i=1:n

for j=1:x

sum=0;

for k=1:y

ifimage{i}(j,k)<255

break;

else

sum=sum+1;

end

end

if sum==y

flag1(j,i)=0;

else

flag1(j,i)=1;

end

end

end

%如果采用掩码模型,则运行代码yanma.m(包含3个函数top.m,mid.m,back.m)

%附件三掩码补充代码   文件名   yanma.m

files4=dir('C:\Users\asus\Desktop\2013B3\附件3\*.bmp');%载入图像

for n4=1:numel(files4)

image4{n4}=imread(['C:\Users\asus\Desktop\2013B3\附件3\' files4(n4).name]);

end

fid1=fopen('C:\Users\asus\Desktop\数模数据.txt','wt');

fid2=fopen('C:\Users\asus\Desktop\需补充.txt','wt');

[x,y]=size(image4{1});

flag=zeros(x,n4);

%向量投影

for i=1:n4

for j=1:x

sum=0;

for k=1:y

ifimage4{i}(j,k)<255

break;

else

sum=sum+1;

end

end

if sum==y

flag(j,i)=0;

else

flag(j,i)=1;

end

end

end

sumofb=0;

for i=1:209

sumofb=0;

for j=1:179

ifflag(j,i)==1&&flag(j+1,i)==0

sumofb=sumofb+1;

else

sumofb=sumofb;

end

end

if flag(180,i)==1

sumofb=sumofb+1;

end

numofb(i)=sumofb;

end

for i=1:209

if numofb(i)<3

fprintf(fid2,'%g ',i);

end

end

flagnew=flag;

A=[5 9 15 17 22 26 28 33 41 61 67 71 72 75 86 90 94 102 107 109 110111 114 115 118 120 124 126 140 141 146 147 151 153 154 155 156 158 166 167 174182 185 186 188 195 197 198 205 206 208];

[ax,ay]=size(A);

shul=zeros(ay,6);

for i=1:ay%统计投影白色0和黑色1的数量

sumofd=0;

index=1;

if flag(1,A(i))==1%若第一个为黑色,则白色个数为0

shul(i,index)=0;

index=index+1;

end

for j=1:179

ifflag(j,A(i))==flag(j+1,A(i))

sumofd=sumofd+1;

else

sumofd=sumofd+1;

shul(i,index)=sumofd;

index=index+1;

sumofd=0;

end

end

shul(i,index)=sumofd+1;

end

for i=1:ay

if shul(i,1)>26

topout=top(shul(i,1));

hebin(i,:)=[topoutshul(i,2:6)];

end

end

for i=1:ay

for j=3

if shul(i,j)>31

midout=mid(shul(i,j));

hebin(i,:)=[shul(i,1:2) midout shul(i,4:6)];

end

end

end

for i=1:ay

for j=5

if shul(i,j)>26

backout=back(shul(i,j));

hebin(i,:)=[shul(i,1:4) backout];

end

end

end

for i=1:ay

if hebin(i,1)~=0

temp=hebin(i,1);

else

temp=1;

end

for j=2:2:6

flagnew(temp:(temp+hebin(i,j)),A(i))=1;

temp=temp+hebin(i,j)+hebin(i,j+1);

end

end

%top函数代码   文件名top.m

%top函数

function [ topout ] = top( in)

if in<69

topout=[0 in-26 26];

elseif 68<in<95

topout=[in-68 42 26];

elseif 94<in<137

topout=[0 in-94 26 42 26];

elseif 136<in<163

topout=[in-136 42 26 4226];

else

topout=[0 in-162 26 42 2642 26];

end

end

%mid函数   文件名   mid.m

%mid函数

function [ midout ] = mid( in )

if in<101

midout=[26 in-52 26];

elseif 100<in<163

midout=[26 42 26 in-12026];

end

end

%back函数   文件名 back.m

%back函数

function [ backout ] = back( in )

if in<69

backout=[26 in-26 0 0];

elseif 68<in<95

backout=[26 42 in-68 0];

elseif 94<in<137

backout=[26 42 26 in-94];

end

end

%第二问C均值分类代码  文件名Classify.m

%模糊C均值(fcm)分类

clear;

close all;

load flag1.mat;

files=dir('C:\Users\ZYF\Desktop\新建文件夹\B\附件3\*.bmp');%载入图像

figure;

for n=1:numel(files)

image{n}=imread(['C:\Users\ZYF\Desktop\新建文件夹\B\附件3\' files(n).name]);

end

data = flag1';

[center,U,obj_fcn] = fcm(data, 11);

maxU = max(U);

%index(i)中存放第i类分组的图片

index(1).t = find(U(1,:) == maxU);

index(2).t = find(U(2, :) == maxU);

index(3).t = find(U(3,:) == maxU);

index(4).t = find(U(4,:) == maxU);

index(5).t = find(U(5,:) == maxU);

index(6).t = find(U(6,:) == maxU);

index(7).t = find(U(7,:) == maxU);

index(8).t = find(U(8,:) == maxU);

index(9).t = find(U(9,:) == maxU);

index(10).t = find(U(10,:) == maxU);

index(11).t= find(U(11,:) == maxU);

%第二问中文拼接代码   文件名Question_Chinese.m

clear;

close all;

% 问题二汉字匹配拼接

load index.mat;

class=12;

files=dir('C:\Users\ZYF\Desktop\新建文件夹\B\附件3\*.bmp');%载入图像

for n=1:numel(files)

image{n}=imread(['C:\Users\ZYF\Desktop\新建文件夹\B\附件3\' files(n).name]);

end

for k=1:n

bz(:,k)=image{1,k}(:,1);                 %将第k张图片的最左边一列放入矩阵bz的第k列

br(:,k)=image{1,k}(:,72);               %将第k张图片的最右边一列放入矩阵br的第k列

end

ind=1;

for oo=1:class

tmp=[];

first=index(oo).t;                      %将index分组的第oo组存放入first矩阵

cd=length(first);

f=zeros(1,cd);                         %标记图片是否已被使用,初始为0

kk=0;

for j=1:cd

sum=0;

for p=1:180

for q=1:5

ifimage{first(1,j)}(p,q)==255

sum=sum+1;

end

end

end

if sum==900

figure (oo);

subplot(1,cd,1)

imshow( image{first(j)});

kk=first(j);

f(1,1)=first(j);                 %已用图片

break;

end

end

jj=1;

if(kk==0)

figure (oo);

subplot(1,cd,1)

imshow( image{first(1)});

kk=first(1);

f(1,1)=first(1);                % 已用图片

end

tmp=[tmp kk];

sign=kk;

for z=1:cd

max=0;

for a=1:cd

sum1=0;

hh=0;

for ll=1:cd

if(first(a)==f(1,ll))

hh=1;

end

end

if(hh==0)

co=corrcoef(double(bz(:,first(a))),double(br(:,kk)));% 相关性函数判断

sum1=abs(co(1,2));

if(max<sum1)

max=sum1;

sign=first(a);

end

end

end

if(kk ~= sign)

tmp=[tmp sign];

subplot(1,cd,jj+1)

imshow(image{sign});

kk=sign;                          %现在图片

f(1,jj+1)=sign;

jj=jj+1;

else

for d=1:cd

for s=1:cd

gg=0;

if(first(d) ==f(1,s))

gg=1;

end

end

if(gg==0)

kk=first(d);

break;

end

end

cc(ind).a=tmp;

ind=ind+1;

tmp=[kk];

end

end

end

%第二问英文添加直线代码  文件名  Line.m

% 英文直线的修补

clear;

close all;

files=dir('.\附件4\*.bmp');%载入图像

for n=1:numel(files)

image{n}=imread(['.\附件4\' files(n).name]);

A(n).t=sum(image{n},2);

end

B=[12,20,15,25,12,20,15,25];%做模板

B1=[12,20,15,25,12,20,15,25,12,20,15,25];

B2=[20,15,25,12,20,15,25,12,20,15,25,12];

B3=[15,25,12,20,15,25,12,20,15,25,12,20];

B4=[25,12,20,15,25,12,20,15,25,12,20,15];

idx1=zeros(600,1);% 模板数组

idx1(1,1)=1;

mm=1;

for i=1:6

for j=1:4

mm=mm+B(j);

idx1(mm,1)=1;

end

end

%ind=A(10).t;

BZ=zeros(180,209);

for pp=1:209

ind=A(pp).t;

for i=2:179   % 拐点找出

if(ind(i-1)-ind(i)>10 &&ind(i+1)-ind(i)>10)

BZ(i,pp)=1;

end

end

if ind(1)<ind(2)

BZ(1,pp)=1;

end

if ind(180)<ind(179)

BZ(180,pp)=1;

end

po=find(BZ(:,pp)==1);

gg=1;

max=0;

for ii=1:5  % 与模板匹配

dd=0;

fh=0;

for z=po(1):180

if(BZ(z,pp)==1&&idx1(z+gg,1)==1||z+1<=180&&BZ(z+1,pp)==1&&idx1(z+gg,1)==1||(z-1)~=0&& BZ(z-1,pp)==1&&idx1(z+gg,1)==1)% 与模板匹配

dd=dd+1;

end

end

if(max<dd)

SG=ii;

max=dd;

kh=po(1);

end

gg=gg+B(ii);

end

if SG==1||SG==4

AB=kh;

j=1;

while AB-B1(5-j)>=1

BZ(AB-B1(5-j))=1;

AB=AB-B1(5-j);

j=mod(j+1,4);

end

AD=kh;

j=1;

while AD+B1(j)<=180

BZ(AD+B1(j),pp)=1;

AD=AD+B1(j);

j=j+1;

end

end

if SG==2

AB=kh;

j=1;

while AB-B2(5-j)>=1

BZ(AB-B2(5-j))=1;

AB=AB-B2(5-j);

j=mod(j+1,4);

end

AD=kh;

j=1;

while AD+B2(j)<=180

BZ(AD+B2(j),pp)=1;

AD=AD+B2(j);

j=j+1;

end

end

if SG==3

AB=kh;

j=1;

while AB-B3(5-j)>=1

BZ(AB-B3(5-j))=1;

AB=AB-B3(5-j);

j=mod(j+1,4);

end

AD=kh;

j=1;

while AD+B3(j)<=180

BZ(AD+B3(j),pp)=1;

AD=AD+B3(j);

j=j+1;

end

end

if SG == 4

AB=kh;

j=1;

while AB-B4(5-j)>=1

BZ(AB-B4(5-j))=1;

AB=AB-B4(5-j);

j=mod(j+1,4);

end

AD=kh;

j=1;

while AD+B4(j)<=180

BZ(AD+B4(j),pp)=1;

AD=AD+B4(j);

j=j+1;

end

end

end

%第二问英文拼接主代码  文件名  Question.m

clear;

close all;

load index2.mat;

class=12;

files=dir('C:\Users\ZYF\Desktop\新建文件夹\B\附件4\*.bmp');%载入图像

for n=1:numel(files)

image{n}=imread(['C:\Users\ZYF\Desktop\新建文件夹\B\附件4\'files(n).name]);

end

for k=1:n

bz(:,k)=image{1,k}(:,1); %首行

br(:,k)=image{1,k}(:,72);%末行

end

ind=1; % 类别计数器

for oo=1:class

dx=0;   %  倒序寻找

tmp=[];

first=index2(oo).t;

cd=length(first);

f=zeros(1,length(first));  %标记

kk=0;

while (sum(f)<length(first))

if length(tmp)==0            % 找行首块

for j=1:length(first)

if f(j)==0

im=image{ first(j)};

sumim=sum(im,1);

ifsum(sumim(1:10))==255*180*10  % 找到行首

figure (oo);

subplot(1,length(first),1)

imshow( image{first(j)});

kk=first(j);

f(j)=1;% 标记已用图片

break;

end

end

end

% 找块尾

for j=1:length(first)

if f(j)==0

im=image{ first(j)};

sumim=sum(im,1);

ifsum(sumim(70:72))==255*180*3  % 找到行尾

figure (oo);

subplot(1,length(first),1)

imshow( image{ first(j)});

kk=first(j);

f(j)=1;% 标记已用图片

dx=1;

break;

end

end

end

if(kk==0)  % dou找不到,用第可用一个图片

figure (oo);

subplot(1,length(first),1);

imshow( image{ first(1)});

pos=find(f==0);

kk=first(pos(1));

f(pos(1))=1; % 标记已用图片

end

tmp=[tmp kk];

end

maxsum=0; % 找最接近的

sign=kk;

for z=1:length(first)

if f(z)==0   % 没有用过

sum1=0;

for p=1:180

if dx==1

cha=abs(bz(p,kk)-br(p,first(z)));

if ( cha ==0 &&bz(p,kk)~= 255 && br(p,first(z))~=255)

sum1=sum1+1;

end

else

cha=abs(br(p,kk)-bz(p,first(z)));

if ( cha <20&& br(p,kk)~= 255 && bz(p,first(z))~=255)

sum1=sum1+1;

end

end

end

if(maxsum<sum1)

maxsum=sum1;

fpos=z;

sign=first(z);

end

end

end

if maxsum<1

sign=kk;

end

if(kk~=sign)

%找到了

if dx==1

tmp=[sign tmp ];

else

tmp=[tmp sign];

end

imshow(image{sign});

kk=sign;%现在图片

f(fpos)=1;

else            %没找到

cc(ind).a=tmp;ind=ind+1;

kk=0;tmp=[];dx=0;

end

end

end

for i=1:length(cc)

figure(20);clf;

for j=1:length(cc(i).a)

subplot(1,length(cc(i).a),j);

imshow(image{cc(i).a(j)});

end

pause;

end

%第三问英文拼接主代码   文件名  Question3_English.m

clc,clear;

% 碎片匹配连接

for n=1:209

fnamea=[num2str(n-1,'%03d') 'a.bmp'];

fnameb=[num2str(n-1,'%03d') 'b.bmp'];

image5{n}.a=imread(['.\附件5\' fnamea]);

image5{n}.b=imread(['.\附件5\' fnameb]);

image5a{2*n-1}=[image5{n}.a;fliplr(image5{n}.b)];%碎片a、b组合连接

image5a{2*n} =[image5{n}.b;fliplr(image5{n}.a)];

end

figure(1);clf;

subplot(2,1,1);imshow(image5{1}.a);

subplot(2,1,2);imshow(image5{1}.b);

figure(2);clf;

subplot(1,2,1);imshow(image5a{1});title('ab');% 显示组合效果

subplot(1,2,2);imshow(image5a{2});title('ba');

save image5.mat;

%load image5

n=209;

for k=1:2*n

bz(:,k)=image5a{1,k}(:,1);

br(:,k)=image5a{1,k}(:,72);

end

first=zeros(1,22);

last=zeros(1,22);

flag=zeros(2*n,1);

for i=1:2*n

im=image5a{i};

sim=sum(im,1);

if sum(sim(1:5))==360*255*5

flag(i)=1;  % 标记行首

end

if sum(sim(72-4:72))==360*255*5

flag(i)=2; % 标记行尾

end

end

first=find(flag==1);

last=find(flag==2);

ind=1;

flg=zeros(2*n,1); % 判断是否被用过

for hh=1:length(first)

tmp=[];

k=first(hh);

tmp=[tmp k];

flg(k)=1;

ry=1;% 另起一行的标志

while ry == 1

maxsum=0;

for i=1:2*n

sum1=0;

if( (flag(i)~= 1) && (flg(i)==0) )

co=corrcoef(double(bz(:,i)),double(br(:,k)));

sum1=abs(co(1,2));

if(maxsum<sum1)

maxsum=sum1;

sign=i;

end

end

end

if(k ~= sign) % 找到了

tmp=[tmp sign]

k=sign; % 现在图片

flg(k)=1;

ry=1;

else

cc(ind).a=tmp; % 没找到

ind=ind+1;

ry=0;

end

end

end

save cc.mat cc

% for i=1:length(cc)

%    figure(i);clf;

%    for j=1:length(cc(i).a)

%        leibie(i,j)=cc(i).a(j);

%        subplot(1,length(cc(i).a),j);

%        imshow(image5a{cc(i).a(j)});

%    end

% end

%第三问英文拼接图片显示代码   文件名  Question3show.m

% 附件5碎片拼接后,每一行的显示

load image5.mat;

load cc.mat;

close all;

for i=1:length(cc)

figure(i);clf;

for j=1:length(cc(i).a)

leibie(i,j)=cc(i).a(j);

subplot(1,length(cc(i).a),j);

imshow(image5a{cc(i).a(j)});

end

end

附件二:实验结果

附件1结果:

附件2结果:

附件3结果:

附件4结果:

附件5结果:

正面:

反面:

--------------------- 
作者:陌上西风听雨 
来源:CSDN 
原文:https://blog.csdn.net/z1143709608/article/details/60139479 
版权声明:本文为博主原创文章,转载请附上博文链接!

2013 B 碎纸片拼接与复原相关推荐

  1. 2013数学建模B题碎纸片拼接复原参考资料

    2013 B 碎纸片拼接复原问题 破碎文件的拼接在司法物证复原.历史文献修复以及军事情报获取等领域都有着重要的应用.传统上,拼接复原工作需由人工完成,准确率较高,但效率很低.特别是当碎片数量巨大,人工 ...

  2. 2013年数学建模国赛B题(碎纸片拼接复原的设计与实现)优秀论文.doc

    本博客下载链接包含修改的word版本, 可免费下载阅览学习, 也可作为数学建模相关课程作业修改上交: 链接:https://pan.baidu.com/s/1KBg5K-XXvFy5hAw8QHoIz ...

  3. 数学建模2013年B题——碎纸片拼接复原

    摘要 基于目前传统的手工拼接复原碎纸片的现状和碎纸片拼接复原的实际需求,本文通过对5个附件中的碎纸片文件进行半自动复原,以研究碎纸片复原的模型和算法,希望通过此种模型和算法减少碎纸片复原的效率.准确度 ...

  4. matlab拼碎纸片过程,碎纸片拼接复原模型

    1. 引言 破碎文件的拼接在司法物证复原.历史文献修复以及军事情报获取等领域都有着重要的应用.企事业.机关.院校和军队基于保密的需要,使用碎纸机对重 要文件,单据以及材料进行销毁.一些重要的文件随着时 ...

  5. 2013年国模 B题 碎纸片拼接

    重新做下2013年国模 B题 碎纸片拼接,只怪当年太年轻啊,现在再看这道题就是单人solo的节奏........ 1,2太简单,就不做了,3,4选第四题做一下,第3题是中文,字方方正正,比英文要简单, ...

  6. 如何用计算机拼接纸片,基于计算机处理的碎纸片拼接复原的研究.doc

    基于计算机处理的碎纸片拼接复原的研究 摘 要本文介绍了当A4张被碎纸机粉碎后,如何利用计算机进行碎纸片自动复原的过程.主要通过扫描将碎纸片的图片导入计算机,利用不同的方法,分别对中英文文字进行聚类分析 ...

  7. matlab彩色碎片拼接与复原_如何用matlab处理碎纸片拼接问题

    展开全部 用matlab处理碎纸片拼接: 1.思路: 分别用n个变量储存n个碎纸片图像,然后用矩阵拼接的方62616964757a686964616fe59b9ee7ad943133343363623 ...

  8. matlab彩色碎片拼接与复原_碎片拼接复原技术研究

    [摘 要]破碎文件的拼接在司法物证复原.历史文献修复以及军事情报获取等领域都有着重要的应用.传统上,拼接复原工作需由人工完成,准确率较高,但效率很低.针对规则碎纸片的拼接,本文基于中文文章试对文字特征 ...

  9. matlab彩色碎片拼接与复原_碎片拼接复原建模

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

  10. MATLAB规则碎纸片拼接

    1.课题意义 图像碎片复原技术是一项综合的并具有实用价值的研究课题,它的最终目的是要从大量的任意图像碎片中找出真正符合实际的匹配对,并根据这些匹配关系将相邻的图像碎片拼合起来重现图像的原貌. 图像碎片 ...

最新文章

  1. MLIR与Code Generation
  2. 东汉末年,他们把「服务雪崩」玩到了极致
  3. 查看.Net程序的框架版本的方法
  4. 企业网络设计,看这6个案例就够了
  5. python数据输出_python数据输出
  6. 边工作边刷题:70天一遍leetcode: day 35
  7. binarysearch java,java数据结构之二分查找法 binarySearch的实例
  8. mairdb自动备份_MariaDB 备份方法
  9. c#期末考试知识点_c#期末考试复习题及答案
  10. Matlab Tricks(十一)—— padarray 关于边缘成镜像对称
  11. layUI日期格式转换
  12. 【USACO1.2】【Luogu1206】回文平方数 Palindromic Squares(枚举,构造函数,进制)
  13. win7下配置Apache本地虚拟主机
  14. (转)爆款游戏推动硬件普及,5G 促进 VR 产业规模化运用
  15. 基于社交网络的推荐算法
  16. 【洛谷】【模拟+栈】P4711 「化学」相对分子质量
  17. Nexus私服使Maven更加强大
  18. 全国计算机等级考试.pdf,全国计算机等级考试真题.pdf
  19. 武汉交管网 “机动车车主基础信息采集”
  20. portraiture 3 mac(最强ps人像美化磨皮滤镜)内附安装教程

热门文章

  1. 微信公号DIY:训练微信聊天机器人公号变身图片上传工具
  2. java更新word目录_java aspose.words 生成word目录和更新目录
  3. mysql备份、还原数据库(命令行)
  4. 使用c语言编写词法分析程序,用C语言编写一个简单的词法分析程序
  5. win8.1修改用户名
  6. 计算机用户名登录取消,win7系统取消登录界面显示用户名的还原办法
  7. 专为前端开发者准备的 15 款优秀的 Sublime Text 插件
  8. 深度剖析Pyechars Graph关系图谱
  9. matlab按图像边缘抠图_PS抠图教程_PS抠图方法大全
  10. 运行您自己的电子邮件服务器:自定义Roundcube