




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于基于 SIFT 特征的图像配准(附特征的图像配准(附 Matlab 源代码)源代码) 本文先给出了采用 SIFT 方法进行图像配准的实验原图以及实验结果,最后附上 Matlab 源代码。 实验一: 实验一的图像(见图 1.1)是本人自己拍摄的,然后由软件裁剪成 400400 像素而成, 其中参考图像和待配准图像之间有重叠部分,且具有一定的旋转。这是一般难度的图像配准。 (图 1.1 参考图像(左图)和待配准图像(右图) ) 经过筛选后的能作为配准控制点的 SIFT 匹配特征点对见下图 1.2 所示。 (图 1.2 经过筛选后的能作为配准控制点的 SIFT 匹配特征点对) 配准后的图像见下图 1.3 所示。 (1.3 配准后的图像) 实验二: 实验二的图像 (见图 2.1) 是本人自己在同一地点不同角度拍摄的, 然后由软件裁剪成 600 450 像素而成,其中参考图像和待配准图像之间有重叠部分,且具有一定的旋转。这是具有 一定难度的图像配准。 (图 2.1 参考图像(左图)和待配准图像(右图) ) 经过筛选后的能作为配准控制点的 SIFT 匹配特征点对见下图 2.2 所示。 (图 2.2 经过筛选后的能作为配准控制点的 SIFT 匹配特征点对) 配准后的图像见下图 1.3 所示。 (2.3 配准后的图像) 实验三: 实验三的图像(见图 3.1)是两幅 SAR 图像,大小为 400400 像素,其中参考图像和待 配准图像之间有重叠部分,且具有一定的旋转。这是具有难度的图像配准。 (图 3.1 参考图像(左图)和待配准图像(右图) ) 经过筛选后的能作为配准控制点的 SIFT 匹配特征点对见下图 3.2 所示。 (图 3.2 经过筛选后的能作为配准控制点的 SIFT 匹配特征点对) 配准后的图像见下图 3.3 所示。 (3.3 配准后的图像) 下面是 Matlab 源代码,共计 13 个*.m 文件和 1 个*.exe 文件,其中 siftWin32 .exe 文件需 要自行下载,下载链接为 格式的源代码的,到 进行下载。 Zoo_main.m close all;clear all;clc; im1=imread(image dataimage3_1.jpg); im2=imread(image dataimage3_2.jpg); gray1=zoo_x2gray(im1); gray2=zoo_x2gray(im2); des1,loc1=zoo_sift(gray1); des2,loc2=zoo_sift(gray2); figure;zoo_drawPoints(im1,loc1,im2,loc2); Num=3;Thresh=0.85; match=zoo_BidirectionalMatch(des1,des2,Num ,Thresh); clear des1 des2 loc1=loc1(match(:,1),:); loc2=loc2(match(:,2),:); figure;zoo_linePoints(im1,loc1,im2,loc2); agl=zoo_getRotAgl(loc1,loc2); figure;zoo_drawRotAglHist(agl); opt=zoo_optIndex(agl); loc1=loc1(opt,:); loc2=loc2(opt,:); figure;zoo_linePoints(im1,loc1,im2,loc2); T=zoo_getTransMat(gray1,loc1,gray2,loc2); im=zoo_imRegist(im1,im2,T); figure,imshow(im); zoo_x2gray.m function gray=zoo_x2gray(im) if length(size(im)=3 gray=rgb2gray(im); else gray=im; end gray=uint8(medfilt2(double(gray); zoo_sift.m function des,loc=zoo_sift(im) row,col=size(im); f=fopen(tmp.pgm,w); if f=-1 error(Could not create file tmp.pgm.); end fprintf(f, P5n%dn%dn255n, col, row); fwrite(f,im,uint8); fclose(f); if isunix command = !./sift ; else command = !siftWin32 ; end command = command tmp.key; eval(command); g=fopen(tmp.key,r); if g=-1 error(Could not open file tmp.key.); end header,cnt=fscanf(g,%d %d,1 2); if cnt=2 error(Invalid keypoint file beginning.); end num=header(1); len=header(2); if len=128 error(Keypoint descriptor length invalid (should be 128).); end loc=double(zeros(num,4); des=double(zeros(num,128); for k=1:num vector,cnt=fscanf(g, %f %f %f %f, 1 4); if cnt=4 error(Invalid keypoint file format); end loc(k,:)=vector(1,:); descrip, count = fscanf(g, %d, 1 len); if (count = 128) error(Invalid keypoint file value.); end descrip = descrip / sqrt(sum(descrip.2); des(k, :) = descrip(1, :); end fclose(g); for k=1:size(des,1) des(k,:)=des(k,:)/sum(des(k,:); end delete tmp.key tmp.pgm zoo_drawPoints.m function zoo_drawPoints(im1,loc1,im2,loc2) im=zoo_appendingImages(im1,im2); imshow(im); hold on set(gcf,Color,w); plot(loc1(:,2),loc1(:,1),r*,loc2(:,2)+size(im1,2),l oc2(:,1),b*); hold off zoo_BidirectionalMatch.m function match=zoo_BidirectionalMatch(des1,des2,Num ,Thresh) X=sum(des1.2,2); Y=sum(des2.2,2); XY=des1*des2;zoo_BidirectionalMatch corr=XY./sqrt(X*Y); corr1,ix1=sort(corr,2,descend); corr1=corr1(:,1:Num); ix1=ix1(:,1:Num); row1,col1=find(corr1Thresh); match12=zeros(length(row1),2); match12(:,1)=row1; match12(:,2)=ix1(size(corr1,1)*(col1-1)+row1); clear corr1 ix1 row1 col1 corr2,ix2=sort(corr,1,descend); corr2=corr2(1:Num,:); ix2=ix2(1:Num,:); row2,col2=find(corr2Thresh); match21=zeros(length(col2),2); match21(:,1)=ix2(Num*(col2-1)+row2); match21(:,2)=col2; clear corr2 ix2 row2 col2 m1=match12(:,1)*10000+match12(:,2); m2=match21(:,1)*10000+match21(:,2); clear match12 match=; for k=1:length(m1) re=m1(k)-m2; idx=find(re=0); if isempty(idx) match=match;match21(idx,:); end end zoo_linePoints.m function zoo_linePoints(im1,loc1,im2,loc2) im=zoo_appendingImages(im1,im2); imshow(im); hold on set(gcf,Color,w); plot(loc1(:,2),loc1(:,1),r*,loc2(:,2)+size(im1,2),l oc2(:,1),b*); for k=1:size(loc1,1) text(loc1(k,2)-10,loc1(k,1),num2str(k),Color,y, FontSize,12); text(loc2(k,2)+size(im1,2)+5,loc2(k,1),num2str( k),Color,y,FontSize,12); line(loc1(k,2) loc2(k,2)+size(im1,2),. loc1(k,1) loc2(k,1),Color,g); end hold off zoo_getRotAgl.m function agl=zoo_getRotAgl(loc1,loc2) ori1=loc1(:,4); ori2=loc2(:,4); agl=ori2-ori1; agl=agl*180/pi; zoo_drawRotAglHist.m function zoo_drawRotAglHist(agl) agl=agl(agl-180); agl=agl(agl180); hist(agl,180); hold on set(gcf,Color,w); xlabel(Rotated Angle(); ylabel(Number of Feature Point); hold off zoo_getTransMat.m function T=zoo_getTransMat(gray1,loc1,gray2,loc2) gray1=double(gray1); gray2=double(gray2); N=size(loc1,1); iter=N*(N-1)*(N-2)/6; SEL=zeros(iter,3); count=1; for i=1:N-2 for j=2:N-1 for k=3:N if i=1 else im(i,j)=im2(ny,nx); end end end end end im=imCrop(im); im=uint8(im); function im=imCrop(pic) if length(size(pic)=3 gray=rgb2gray(pic); else gray=pic; end SZ=length(gray); k=1; while k0 if any(any(gray(k,:) break end k=k-1; end bottom=k; k=1; while k0 if any(any(gray(:,k) break end k=k-1; end right=k; if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年影像科医学影像解读能力评定答案及解析
- 2025年心血管疾病诊断技术应用考核答案及解析
- 2025年药学信息学药物合理应用数据库查询答案及解析
- 2025年胸外科手术操作技巧模拟试题答案及解析
- 民族团结课件边框
- 2025年全科医生常见疾病诊断与处理模拟考试答案及解析
- 品质工作方案模板
- 2025年全科护理实操技能考察答案及解析
- 2025年耳鼻喉科慢性鼻炎药物治疗选择试卷答案及解析
- 2025年神经内科常见病例诊断与治疗模拟考试卷答案及解析
- 村民饮水协议书
- 业余少体校管理办法
- 天津校外培训管理办法
- 小学生晨会课件
- 2025至2030锆英砂行业市场发展分析及发展趋势与投资报告
- DB44∕T 2499-2024 海堤生态化建设技术导则
- 地质灾害诱因成因分析方法-洞察阐释
- 护林防火培训
- 大小便失禁护理指南
- 物业弱电维修课件
- 民宿旅游培训课件
评论
0/150
提交评论