收藏 分享(赏)

基于MATLAB图像处理功能的碎片拼接系统开发.pdf

上传人:精品资料 文档编号:9791329 上传时间:2019-09-04 格式:PDF 页数:13 大小:1.45MB
下载 相关 举报
基于MATLAB图像处理功能的碎片拼接系统开发.pdf_第1页
第1页 / 共13页
基于MATLAB图像处理功能的碎片拼接系统开发.pdf_第2页
第2页 / 共13页
基于MATLAB图像处理功能的碎片拼接系统开发.pdf_第3页
第3页 / 共13页
基于MATLAB图像处理功能的碎片拼接系统开发.pdf_第4页
第4页 / 共13页
基于MATLAB图像处理功能的碎片拼接系统开发.pdf_第5页
第5页 / 共13页
点击查看更多>>
资源描述

1、基于 MATLAB图像处理功能的二维碎片拼接软件开发 张梓麒 2014/9/26 组 员 1:张梓麒 2012302540199 组员 2:崔兆仑 2012302540205 组员 3:姜盛波 2012302540198 组员 4:郝亮亮 2012302350056 2 基于 MATLAB图像处理功能的 二维 碎片拼接 软件开发 1.目的与意义 破碎文件的拼接在司法物证复原、历史文献修复以及军事情报获取等领域都有着重要的应用。传统上,拼接复原工作需由人工完成,准确率较高,但效率很低。特别是当碎片数量巨大,人工拼接很难在短时间内完成任务。随着计算机技术的发展,人们试图开发碎纸片的自动拼接技术,以

2、提高拼接复原效率。 目前 ,针对 非规则碎片 的 拼接技术已相对成熟 ,利用改进的遗传算法对边缘形状进行 匹配 ,可以获得不错的拼接结果 1。然而 ,对于规则切割的碎片 ,例如碎片 均为 全等 的矩形 ,由于无法 利用 所含信息 量较大 的 几何特征 进行匹配 ,故对其的拼接方案 仍有待研究 与开发 。 2.研究内容 本小组将致力于研究规则碎片的 拼接 方案 , 并编写相关程序 。 ( 1) 对于给定的来自同一页印刷 文件的碎纸机破碎纸片(仅纵切),建立碎纸片拼接复原模型和算法,并针对 中、英文 文件的碎片数据进行拼接复原。 ( 2) 对于碎纸机既纵切又横切的情形, 设计碎纸片拼接复原模型和算

3、法,并针对 中、英文 的碎片数据进行拼接复原。 ( 3) 针对 双面打印文件的碎纸片拼接复原问题 ,对 相应的碎纸片拼接复原模型与算法 进行改进 。 3.研究方法 对于规则碎片 , 只能利用其所包含的文字或图像信息 对其 进行匹配 , 本小组的 初步 想法是根据碎片边缘包含的信息 , 设计算法 并 利用计算机软件 寻找最为匹配的两张碎片 , 进行逐步 拼接 。 由于各图 片边缘含有的信息量有限 ,故有时计算机并不能 直接找到合适匹配的相邻碎片 ,这就需要 加入 人工干预的过程 。 MATLAB软件有很强大的图像处理功能 ,并可以 借助图形用户界面 ( GUI) 实现良好的交互式算法 。本小组拟

4、利用 MATLAB 提取图像的灰度矩阵 ,设计一种方法衡量两个灰度矩阵边缘向量的匹配程度 ,并对其进行优化 。在此基础上利用MATLAB 对碎片进行逐步拼接 ,编写一个 GUI 界面 ,加入人工干预 , 使 碎片的拼接 过程更为方便可靠 。 4.已取得的成果 4.1 仅纵切的中文文件的拼接 ( 无人工干预 ) 3 本小组 将一张文字图片纵切成 19个全等的矩形碎片 ,部分碎片如下 : 利用 MATLAB提取各碎片的灰度矩阵 ,并对其进行二值化处理 。 得到 19个的 二值矩阵,将第 张图片的灰度矩阵和二值矩阵分别记为 、 。 由于该文件的左侧有一定 页边距 ,故可以利用 MATLAB首先找到其

5、最左侧的碎片 : 考虑到该二值矩阵共有 1980列,故应有下式: 本小组利用 碎片图像二值化矩阵边缘向量 之间的平方欧式距离来衡量两碎片信息的 差异。由于二值化矩阵各元素非零即一 ,故可以用各对应元素之差的绝对值之和来表示其平方欧式距离。 将已经拼接完成的碎纸片 的 编号 构成的集合记为 ,其在图片中的位置记为 , 。 由于图片仅纵切,其两侧边缘保留的信息量较大 。将 上一轮 确定 位于 位置的碎纸片 的二值化矩阵记为 ,其右侧相邻的碎纸片 应为满足下列数学关系的最优解 : 4 开始碎片图像数字化 , w = 1找到二值矩阵第一列全为 0 的碎片 k作为行内第 w 张碎片 ?w = w + 1

6、找出与行内第 w 张碎片右边缘差别最小碎片 j否人工干预 w = 1 ?是否是w = 19 ?否完成是源程序如下 : path1= D:碎 片的拼接 2; dir1=dir(path1); for i=3:21 ai-2=imread(dir1(i).name); bi-2=im2bw(imread(dir1(i).name); end for i=1:19 z(i)=sum(bi(:,1); end zuo=find(z=max(z); point=zuo; xiabiao=point; for i=2:19 for j=1:19 c(i-1,j)=sum(abs(bj(:,1)-bpoin

7、t(:,72); end point=find(c(i-1,:)=min(c(i-1,:); 5 xiabiao=xiabiao,point; end tu=axiabiao(1); for i=2:19 tu=tu,axiabiao(i); end imshow(tu); 拼接结果如下 : 4.2 仅纵切的 英 文文件的拼接 ( 加入 人工干预 ) 由于英文文字相对中文 较为简单 ,故其边缘包含的信息量较少 ,计算机可能无法获得足够的信息对碎片进行匹配 , 这就需要加入人工干预的过程 ,利用计算机找到平方欧式距离最小的碎片后 ,人为的进行确认 ,若结果正确则进行下一轮拼接 ,不 正确则寻找另

8、外一张 平方欧式距离较短的碎片 。 源程序如下 : warning off; %读取图片 path1=D:碎片的拼接 2; dir1=dir(path1); sizet=size(dir1); 6 for i=3:sizet ai-2=imread(dir1(i).name); bi-2=im2bw(imread(dir1(i).name); end %寻找 最左侧图片 for i=1:sizet-2 z(i)=sum(bi(:,1); end zuo=find(z=max(z); %指针 赋初值 point=zuo; xiabiao=point; tu=axiabiao(1); %测试 指针

9、赋初值 pc=zuo; xbc=pc; tuc=axbc(1); for i=2:sizet-2 %寻找 距离最小的图片 for j=1:sizet-2 if ismember(j,xiabiao)=1 c(j)=sum(abs(aj(:,1)-apoint(:,72); else c(j)=NaN; end end %利用测试指针进行测试 pc=find(c=min(c); xbc=xiabiao,pc; tuc=tu,axbc(i); imshow(tuc); d=input(pass?,s); %若 输出图片有误 while d=w c(pc)=max(c)+1; pc=find(c=m

10、in(c); xbc=xiabiao,pc; tuc=tu,axbc(i); imshow(tuc); d=input(pass?,s); end point=pc; 7 xiabiao=xiabiao,point; tu=tu,axiabiao(i); end imshow(tu); 程序运行过程的截图如下 : 若判断计算机找对了碎片 ,则按 enter键继续 ;若碎片寻找有误 ,可输入 w令计算机继续寻找 。 4.3 横、纵切单面中文碎片的拼接 由于 碎片是 由 一张图像既纵切又横切得到的, 数量增加的同时,其边缘所包含的信息 量 也相对减少 。 由于不能确定两碎片是否属于同一行,故直接通

11、过比较左、右边缘信息来判断两者是否相邻的效率较低。 本小组首先利用行高和行间距的 特征对碎片进行聚类,尽可能的 将同一行的碎 片归为一类 , 先 在各类中进行的拼接。 得到各行的复原结果之后,再采用类似的方法,将各行拼接起来。 源程序如下 : Path3=D:碎片 的拼接 3; N=209; N_row=11; N_col=19; 8 level1=0.5; level2=254/255; %参数 设置 % im_1,bw_1=getImbw(Path3,N,level1); im_2,bw_2=getImbw(Path3,N,level2); %读取 图片 % count=0; for i=

12、1:30 h1,l1=getHL(cell2mat(bw_2(i); if h1=0 count=count+1; h(count)=h1; l(count)=l1; end end h(find(h=max(h)=; h(find(h=min(h)=; height=mean(h); l(find(lheight)=; l(find(l=min(l)=; linespace=mean(l); %获取行高和行间距 % for i=1:209 b2m(:,:,i)=cell2mat(bw_2(i); i2m(:,:,i)=cell2mat(im_1(i); x(i,1)=getX(b2m(:,:

13、,i),height,linespace); end %获取特征点的值 % omega=linespace+height; x=(1:N),x; cnt=zeros(1,11); c=zeros(N,1); for i=1:N temp=floor(x(i,2)/(omega/N_row); for k=1:11 if k=(temp+1) c(i)=k; cnt(k)=cnt(k)+1; class_pic(k,cnt(k)=x(i,1); break; end end 9 end %将 图片分类 % leftfunc=(i,k) sum(bw_2i(:,k); count=1; left=

14、zeros(11,1); for i=1:209 if sum(leftfunc(i,1:5)=180*5 imshow(im_2i); in=input(Is it a pic at the left? (enter for pass,n for no) ,s); if in=n continue; else left(count)=i; count=count+1; end end end % 找到最左边的一类 % cpc=class_pic; % cpc means class_pics copy z=; for i=1:11 for j=1:11 if ismember(left(j)

15、,cpc(i,:)=1 z=z,left(j); end end end for i=1:length(z) for n=1:100 hp=z(i); hxb(i,1)=hp; hang=im_2hp; hc=hang; for j=2:19 for k=1:209 if ismember(k,cpc(i,:)=1 else c(k)=NaN; end end hp=find(c=min(c); 10 for k=1:length(hp) hc=hang,im_2hp(k); imshow(hc); d=input(first pass? ,s); if d=n c(hp(k)=max(c)+

16、1; continue end hp=hp(k); break end while d=n hp=find(c=min(c); for k=1:length(hp) hc=hang,im_2hp(k); imshow(hc); d=input(second pass? ,s); if d=n c(hp(k)=max(c)+1; continue end hp=hp(k); break end end hxb(i,j)=hp; hang=hang,im_2hp; end imshow(hang); d=input(call it a line? ,s); if d=y break elseif

17、d=f hxb(i,:)=; break end hxb(i,:)=; end end 程序运行过程的截图如下 : 1.结合人工干预寻找最左侧碎片 : 若是则输入 enter,不是则输入 no。 11 2.自动拼接出现错误 :输入 n重新寻找 , 7次后出现正确结果 : 12 3.拼接完整一行后进行确认 :正确则输入 yes,不正确可重新拼接该 行 。 运行结束后可获得各行的拼接结果 ,利用类似的方法把各行拼接起来 ,可得到完整的复原图片 。整个过程共耗时 5分钟左右 ,大大提高了拼接的效率 。 5.下一步的工作与预期成果 ( 1) 针对英文碎片建立相应的聚类方法 ; ( 2) 考虑建立不同字体的拼接模板 ; ( 3) 寻找衡量两向量相似更为有效的方法 ; 13 ( 4) 编写 GUI界面 ,使整个拼接过程更为友好 。 参考文献 : 1郑蓓蓓 ,郭立本 . 改进的遗传算法应用于碎片拼接 J. 计算机与现代化 ,2011,05:52-56. 2涂望明 ,魏友国 ,施少敏 . MATLAB在数字图像处理中的应用 J. 微计算机信息 ,2007,06:299-300+23.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报