MATLAB规则碎纸片拼接

1、课题意义

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

图像碎片的复原工作是以实际碎片为参考依据进行的,建立能够准确描述实物的计算机模型是图像碎片复原工作的关键步骤之一,对碎片复原的后续工作有基础性的作用,模型建立的准确性和复杂性将影响到后续工作能否顺利进行下去。

本文利用边缘特征点匹配,相关系数,广度搜索法等方法建立了规则碎纸片的拼接复原模型。

对于问题一,我们利用边缘特征点匹配的方法,先提取边缘特征点的灰度矩阵,再寻找矩阵相似度最大的碎片实现匹配。

对于问题二,我们采用了基于文字特征的半自动拼接方法,通过找到相交点距离相等的最大个数来确定匹配图像。

对于问题三,我们提取了各边的像素作为灰度矩阵,用X,Y,H,L确定目标函数

d3ea224afdca8a7f469274c88f785258.png

运用广度搜索算法找出最佳匹配项。

最后,本文还对模型推广进行了进一步讨论,分析了模型的优缺点,提出了改进模型的方法和思路。

关键词:图像拼接;规则碎片;图像复原;灰度矩阵;广度搜索算法;特征匹配;自动拼接;图像分割;匹配准则







2.问题的重述

破碎文件的拼接在司法物证复原、历史文献修复及军事情报获取等领域都有重要的应用。传统拼接复原工作由人工完成,准确率较高,但效率很低。随着计算机技术的发展,人们试图开发碎纸片的自动拼接技术,以提高拼接复原效率。碎纸自动拼接技术是图像处理与模式识别领域中的一个较新但是很典型的应用,它是通过扫描和图像提取技术获取一组碎纸片的形状、颜色等信息,然后利用计算机进行相应的处理从而实现对这些碎纸片的全自动或半自动拼接还原。请讨论以下问题:

1. 对于给定同一页印刷文字文件的碎纸机破碎纸片(仅纵切),建立碎纸片拼接复原模型和算法,并针对附件1、附件2给出的中、英文各一页文件的碎片数据进行拼接复原。每页纸被切为19条碎片。如果复原过程要人工干预,请写出干预方式及干预的时间节点。复原结果以图片形式及表格形式表达,将碎片序号按复原后顺序填入1×19的表格。

2. 对于碎纸机既纵切又横切的情况,请设计碎纸片拼接复原模型和算法,并针对附件3、附件4给出的中、英文各一页文件的碎片数据进行拼接复原。每页纸被切为11×19个碎片。如果复原过程要人工干预,表达要求同上,将碎片序号按复原后顺序填入11×19的表格。

3. 上述所给碎片数据均为单面打印文件,还可能有双面打印文件的碎纸片拼接复原问题要解决。附件5给出一页英文印刷文字双面打印文件的碎片数据。每页纸被切为11×19个碎片,每个碎片有正反两面。每一碎片对应两个文件,共有2×11×19个文件。请尝试设计相应的碎纸片拼接复原模型与算法,并就附件5的碎片数据给出拼接复原结果,表达要求同上,将碎片序号按复原后顺序填入两个11×19的表格。(以上若不能确定复原位置的碎片,可不填入上述表格,单独列表。)

3、效果图

397af31c2eb11b8edba10cdc1beeb100.png


附件1的复原图





db40622a08d746defbad50c1c7241e37.png


附件2的复原图





附录二:




051a8f004668d59089f60061f596f84e.png



附件3的复原图


fa3c6dea573dad514c98632468062a30.png


附件4的复原图

4、程序代码
clc;clear
A=cell(1,19);
for i=0:18;                        
    if i<=9
       NO=strcat('00',num2str(i));
    elseif i<=99
       NO=strcat('0',num2str(i));
    else NO=num2str(i);
    end    
dir=[NO,'.bmp'];
a=imread(dir,'bmp');          
end
 for k=1:19                         
    B{1,k}=im2bw(A{1,k});          
 end
%for k=1:19
   % imshow(B{1,k},[])               
%end
C=cell(1,19);
M=zeros(1980,19);
N=zeros(1980,19);
for i=1:19;
    m=find(B{1,i}(:,1)==0);
    if sum(m)==0;
        c=i;      
    end
    M(1:end,i)=B{1,i}(:,1);      n=find(B{1,i}(:,72)==0);
     if sum(n)==0
         d=i;      
     end
    N(1:end,i)=B{1,i}(:,72);  end
M1=[];N1=[];
for i=1:19;                            
    m=find(B{1,i}(:,1)==0);
    n=find(B{1,i}(:,72)==0);
    M1=[M1;length(m)];
    N1=[N1;length(n)];
end
save M1.mat;save N1.mat;save M.mat;save N.mat;
n2=c;n3=d;
global d5
d5=[c];
n6=xuanze(n2,n3);
d5=[d5,d]             D=[];
for i=1:19
    k=d5(i);
    D=[D,B{1,k}];
end
imshow(D,[]);

function n6=xuanze(n2,n3)
load M1;load N1; load M;load N;
M(:,n3)=0;
global d5
n6=0;
 d1=[];
 for i=1:19
     d2=corrcoef(M(1:end,i),N(1:end,n2));
     d1=[d1,d2(1,2)];
 end
 for j=1:length(d5)
     k1=d5(j);
    d1(k1)=0;
 end   
  d4=max(d1');
  n6=[n6,n2];
  n2=find(d1==d4);
  d5=[d5,n2];
  if length(d5)==18
      return
  end  
  n6=xuanze(n2,n3);
   end

  • 0
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你的matlab大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值