碎纸片的拼接复原论Word文档格式.docx
《碎纸片的拼接复原论Word文档格式.docx》由会员分享,可在线阅读,更多相关《碎纸片的拼接复原论Word文档格式.docx(22页珍藏版)》请在冰点文库上搜索。
t
if(abs(a(i)==b(i)))进行边界配对。
(1为白,0为黑)
c=c+1;
可以得到于某一张图还配对的左边的图片。
同理可得出所有图片的与其配对的左边的图片,也就可以轻易得出图片的顺序,再用得出的顺序编写程序,运用matlab算法进行拼接复原,此问题就可得到解决。
对于问题二,相对一复杂多了,我们先将图像输入再进行二值化处理,调用matlab算法及人工干预可得到位于左上角第一个图片,然后在套用问题一中的matlab算法,得出所有可能位于第一列的图片,然后以左上角第一个图片为匹配基点,以此得出与其
配对的图片,依次下去,就可以得出所有位于第一列的图片,继续运用matlab算法进行行匹配,就可得到所有图片的顺序,再用得出的顺序编写程序,运用matlab算法进行拼接复原,此问题也将得到解决。
对于问题三,在二的基础上再加增加两个for循环,即再a面像素点的情况下还要考虑b面的。
调用matlab算法对000a.bmp到208a.bmp和000b.bmp到208b.bmp输入并对其二值化,同时用matlab算法输出他们的边界矩阵,再第二问的程序下秩序同时满足a,b就能解决问题了。
四、问题的模型建立及求解
问题一:
先对附件一和附件二中的图片重命名(将图片名的前置0都删去),并将图片的存放途径改为C:
\DocumentsandSettings\Administrator\桌面\B\附件1\。
然后再在用matlab软件批量读取文件,并存为(II)然后用再采用OTSU算法将每个图像二值化并储存在JJ中,再提取每个二值化图像后即(JJ)的边界,将边界构成边界矩阵。
在边界矩阵中找到左边界相加的值为1980的图片,此图就为附件一的排头图片(程序详情见附录程序一)。
再在matlab软件中输入附录程序二可得出第一幅图与余下几幅图的右边界匹配度最大的那幅图。
同理我们可通过附录程序二可得:
0.bmp的左边为172.bmp的左边为16.bmp
3.bmp的左边为15.bmp。
4.bmp的左边为1.bmp。
5.bmp的左边为4.bmp。
6.bmp的左边为0.bmp。
7.bmp的左边为11.bmp。
8.bmp为排头
9.bmp的左边为5.bmp。
10.bmp的左边为3.bmp。
11.bmp的左边为18.bmp。
12.bmp的左边为14.bmp。
13.bmp的左边为9.bmp。
14.bmp的左边为8.bmp。
15.bmp的左边为12.bmp。
16.bmp的左边为2.bmp。
17.bmp的左边为7.bmp。
18.bmp的左边为13.bmp。
8.bmp为排头,以8.bmp为基准和由matlab程序运行出来得到的数据再经过人工处理可得碎纸顺序为8~14~12~15~3~10~2~16~1~4~5~9~13~18~11~7~17~0~6。
用表格为:
8
14
12
15
3
10
2
16
1
4
5
9
13
18
11
7
17
6
然后通过imread(详情见附录程序三)语句按其顺序输出,就能得到我们所想要拼接的图片。
对于附录二中的图片可套用一种的所有方法,然后改变对应图片粗村位置,将图片存放到c:
\programFiles\MATLAB\R2007b\work\。
并将原来附件一中的图片移除。
我们可以容易的知道它的碎纸顺序:
同理可用imred语句按顺序输出,就能得到我们想要拼接的图片
问题二:
1.对于附件三给定209张图片,我们先将图片重新命名(将图片名的前置0都删去)再通过C:
\DocumentsandSettings\Administrator\桌面\B\附件3\途径存放起来。
在matlab中输入以下程序读取图片并将其二值化(采用OTSU算法(详情见附录程序表四))并用循环嵌套方式来输出上界和左边界上的所有矩阵值均为1的图片号。
通过可知第15,30,50,63,72,90,126,136,144,169副图均可能是在第一个方格上。
但由于在一格只有一张图片,此时程序无法准确的得出答案,所以需要人工干预。
通过人工干预可以知道第五十副图在第一排第一列(即49.bmp)。
然后再输入附录程序五,以获取边界都为一的图片。
得到十六个左边界都为一的图片
7.bmp
14.bmp
29.bmp
49.bmp
61.bmp
62.bmp
67.bmp
71.bmp
80.bmp
89.bmp
94.bmp
125.bmp
135.bmp
143.bmp
168.bmp
38.bmp
我们分别这十六个图片二值化,输出它的上下边界矩阵,此时我们将范围缩小至十六,则可以开始与49bmp开始匹配,在matlab上输入程序达到匹配(详情见附录程序六)以得到能与49.bmp相匹配的图片。
可得出49.bmp下面为61.bmp。
同理可得:
61.bmp下面为168.bmp下面为38.bmp下面为71.bmp下面14.bmp下面为94.Bmp下面为125.bmp下面为29.bmp下面为7.bmp下面为89.bmp.
在matlab中输入附录程序六:
将for
j=1:
209b=sum(AB{j}(:
1));
if(b==180)j改为fori=1:
209a=sum(AB{i}(1,:
));
if(a==72)i
然后重复5操作可得第一行的序码为:
同理可得碎纸片的拼接碎纸表:
49
54
65
143
186
57
192
178
118
190
95
22
129
28
91
188
141
61
19
78
67
69
99
162
96
131
79
63
116
163
72
177
20
52
36
168
100
76
62
142
30
41
23
147
191
50
179
120
86
195
26
87
38
148
46
161
24
35
21
189
122
103
130
193
88
167
25
105
74
71
156
132
200
80
33
202
198
133
170
205
85
152
165
27
60
128
159
82
199
135
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
182
109
197
184
110
187
66
106
150
173
157
181
204
139
145
29
64
111
201
92
180
48
37
75
55
44
206
104
98
172
171
59
208
138
158
126
68
175
45
174
137
53
56
93
153
70
166
32
196
89
146
102
154
114
40
151
207
155
140
185
108
117
101
113
194
119
123
根据图片上的排序我们就能将碎片拼成图片
同时英文版的可按照上面的方法得出序列号,序列号为:
83
81
3、问题三的模型建立与求解:
先对图片名进行修改即将前缀0去掉,先将图片批量输入,再将图片二值化,载依次输出它们的像素值,直接输入算法(详情见附录程序七)得到图片的序号值。
五、模型优缺点及改进
解决此问题模型算法,通过编写程序,运用Matlab算法在加上必要的人工干预进行碎纸片的拼接复原,这种半自动拼接方法综合利用了计算机高速计算能力以及人的文字图像识别和理解能力,拼接效率比纯人工高,拼接准确性也好于纯计算拼接法。
【2】在司法物证复原、历史文献修复以及军事情报获取等领域都有着重要的应用。
但此类拼接复原碎纸片模型算法还是存在缺陷的,程序代码没有循环效果,需要多次修改重复运行,工作量大。
操作起来有一些困难,
我们在今后的学习中会继续的研究,希望编写出能够循环的程序语句,减少繁杂的操作。
为今后此类对碎纸片拼接复原方法的推广使用做出重要意义。
.
六、参考文献
[1]贾海燕,碎纸自动拼接关键技术研究,工学硕士学位论文,2005.11
[2]罗智中,基于文字特征的文档碎纸片半自动拼接,2012.05.06
[3]陶波、于志伟、郑筱祥、图像的自动拼接[J]、中国生物医学工程报。
1997,16(4):
29-35
[4]钟家强、王润生、基于边缘的图像配准改进算法[J]。
计算机工程与科学.2001.23(6):
25-29.
七、附录
一、附件一恢复所得图片为:
二、附件二恢复所得图片为:
三、附件三恢复所的图片为:
四、附件四恢复所的图片为:
五、附件五恢复所得图片为:
本题一直使用的是matlab软件。
附录程序一:
II=cell(1,19);
imageName=strcat('
C:
\DocumentsandSettings\Administrator\桌面\B\附件1\'
num2str(i-1),'
.bmp'
);
II{i}=imread(imageName);
end
JJ=cell(1,19);
th=graythresh(II{i});
JJ{i}=im2bw(II{i},th);
Ji=[JJ{1}(:
1)JJ{1}(:
72)JJ{2}(:
1)JJ{2}(:
72)JJ{3}(:
1)JJ{3}(:
72)JJ{4}(:
1)JJ{4}(:
72)JJ{5}(:
1)JJ{5}(:
72)JJ{6}(:
1)JJ{6}(:
72)JJ{7}(:
1)JJ{7}(:
72)JJ{8}(:
1)JJ{8}(:
72)JJ{9}(:
1)JJ{9}(:
72)JJ{10}(:
1)JJ{10}(:
72)];
Ji1=[JJ{11}(:
1)JJ{11}(:
72)JJ{12}(:
1)JJ{12}(:
72)JJ{13}(:
1)JJ{13}(:
72)JJ{14}(:
1)JJ{14}(:
72)JJ{15}(:
1)JJ{15}(:
72)JJ{16}(:
1)JJ{16}(:
72)JJ{17}(:
1)JJ{17}(:
72)JJ{18}(:
1)JJ{18}(:
72)JJ{19}(:
1)JJ{19}(:
Jii=[JiJi1];
forj=1:
C=sum(JJ{j}(:
1))
if(C==1980)
j
附录程序二:
>
c=zeros(1,19);
I17=imread('
17.bmp'
I18=imread('
0.bmp'
I19=imread('
6.bmp'
I=[I1,I2,I3,I4,I5,I6,I7,I8,I9,I10,I11,I12,I13,I14,I15,I16,I17,I18,I19];
imshow(I)
c(i)=cout0(Jii(:
1),Jii(:
2*i+2));
[C,I]=max(c)
再创建m-file此文件:
functionc=cout0(a,b)
if(abs(a(i)==b(i)))
end
附录程序三:
I1=imread('
8.bmp'
I2=imread('
14.bmp'
I3=imread('
12.bmp'
I4=imread('
15.bmp'
I5=imread('
3.bmp'
I6=imread('
10.bmp'
I7=imread('
2.bmp'
I8=imread('
16.bmp'
I9=imread('
1.bmp'
I10=imread('
4.bmp'
I11=imread('
5.bmp'
I12=imread('
9.bmp'
I13=imread('
13.bmp'
I14=imread('
18.bmp'
I15=imread('
11.bmp'
I16=imread('
7.bmp'
附件程序四:
clc
AA=cell(1,209);
209
\DocumentsandSettings\Administrator\桌面\B\¸
附件3\'
AA{i}=imread(imageName);
AB=cell(1,209);
%将每个图像二值化储存为AB
th=graythresh(AA{i});
AB{i}=im2bw(AA{i},th);
a=sum(AB{j}(1,:
%利用循环将j图片的上界矩阵值相加
b=sum(AB{j}(:
%利用循环将j图片的左边界矩阵值相加
if(a==72&
&
b==180)
j%输出上界和左边界矩阵值均为1的图片号
附录程序五:
clc
for
i=1:
\Documents
and
Settings\Administrator\桌面\B\附件3\'
b=sum(AB{j}(:
if(b==180)
附录程序六: