智能图像处理与分析识别课件:图像匹配_第1页
智能图像处理与分析识别课件:图像匹配_第2页
智能图像处理与分析识别课件:图像匹配_第3页
智能图像处理与分析识别课件:图像匹配_第4页
智能图像处理与分析识别课件:图像匹配_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

智能图像处理与分析识别《智能图像处理与分析识别》第九章图像匹配9.1模板匹配的概念9.2基于灰度相关的模板匹配9.3基于变换域的模板匹配9.4基于特征相关的模板匹配图像匹配技术是数字图像信息处理和计算机视觉领域中的一个热点问题,在气象预报、医疗诊断、文字读取、空间飞行器自动导航、武器投射系统制导、雷达图像目标跟踪、地球资源分析与检测、以及景物分析等许多领域中得到广泛应用。在数字图像处理领域,常常需要把不同的传感器或同一传感器在不同时间、不同成像系统条件下,对同一景物获取的两幅或者多幅图像进行比较,找到该组图像中的共有景物,或是根据已知模式,到另一幅图中寻找相应的模式,此过程为图像匹配。实际上,图像匹配就是一幅图像到另一幅图像对应点的最佳变换。图像匹配的目标是:在被搜索图像中找到与模板图像匹配的区域。9.1模板匹配的概念被搜索图像模板图像9.1模板匹配的概念

模板匹配过程大致可分为以下几步:(1)图像的取样与量化:通过采样设备获取图像,经过图像处理装置将计算机中的图像数据以数组的方式存储。(2)图像分割:分割图像是按照颜色、亮度或纹理来进行判断。(3)图像分析:分析被分割的图像,是否可修改或合并。(4)形状描述:提取图像的特征。(5)图像匹配:计算模板图像与被搜索图像区域的相似度。

模板匹配的分类方法很多,通常可分为三种:基于灰度相关的模板匹配方法、基于变换域的模板匹配方法和基于特征相关的模板匹配方法。《智能图像处理与分析识别》第九章图像匹配9.1模板匹配的概念9.2基于灰度相关的模板匹配9.3基于变换域的模板匹配9.4基于特征相关的模板匹配9.2基于灰度相关的模板匹配

基于灰度相关的模板匹配算法是基于模板与被搜索图像中的灰度值来进行匹配的,是模板匹配中最基本的匹配思想。在灰度相关匹配过程中,基于模板图像和被搜索图像的灰度值信息,建立模板图像与被搜索图像中子图像的相似性度量,再查找能够使两幅图像相似性度量值最大或最小的子图像,即可找到匹配图像。

常用的相似性度量算法有:平均绝对差算法(MAD)绝对误差和算法(SAD)误差平方和算法(SSD)平均误差平方和算法(MSD)归一化积相关算法(NCC)序贯相似性算法(SSDA)9.2基于灰度相关的模板匹配

平均绝对差算法(MeanAbsoluteDifferences,简称MAD算法),是Leese在1971年提出的一种匹配算法,是模式识别中常用方法之一。9.2.1MAD算法被搜索图像模板图像

9.2基于灰度相关的模板匹配MAD算法利用平均绝对差作为相似性测度,平均绝对差的计算公式如下:其中,,

9.2.1MAD算法9.2基于灰度相关的模板匹配—SAD算法9.2.2SAD算法

绝对误差和算法(SumofAbsoluteDifferences,简称SAD算法)与MAD算法思想几乎是完全一致,只是其相似度测量公式有所不同。SAD算法的相似性测度计算的是子图与模板图的L1距离,公式如下:9.2基于灰度相关的模板匹配—SAD算法由于SAD算法与MAD、SSD、NCC算法类似,所以仅列出SAD算法的代码:%%读取模板图像mask=imread('mask.jpg');[M,N,d0]=size(mask);if

d0==3mask_gray=rgb2gray(mask);elsemask_gray=mask;endfigure,imshow(mask_gray);title('模板图像')%%读取查询图像(被搜索图像)src=imread('baby.jpg');[m,n,d]=size(src);if

d==3%若图像是彩色图像则转化为灰度图src_gray=rgb2gray(src);elsesrc_gray=src;end【Matlab实现】%%计算相似性测度dst=zeros(m-M,n-N);fori=1:m-M%子图选取,每次滑动一个像素

forj=1:n-Ntemp=src_gray(i:i+M-1,j:j+N-1);%当前子图dst(i,j)=dst(i,j)+sum(sum(abs(temp-mask_gray)));

endendabs_min=min(min(dst));[x,y]=find(dst==abs_min);%找最小相似性测度对应的被搜索图像位置9.2基于灰度相关的模板匹配—SAD算法%%匹配结果展示figure,imshow(src_gray);holdon;rectangle('position',[y,x,N-1,M-1],'edgecolor','b');holdoff;title('SAD匹配结果')

9.2基于灰度相关的模板匹配9.2.3SSD算法

误差平方和算法(SumofSquaredDifferences,简称SSD算法),也叫差方和算法。SSD算法与SAD算法如出一辙,只是其相似度测量公式有一点改动,计算的是子图与模板图的L2距离。相似性测度误差平方和的计算公式如下:9.2.4NCC算法

归一化积相关算法(NormalizedCrossCorrelation,简称NCC算法)是通过归一化的相关性度量公式来计算二者之间的匹配程度。归一化积互相关系数的计算公式如下:

9.2基于灰度相关的模板匹配—SSDA算法

序贯相似性检测算法(SequentialSimiliarityDetectionAlgorithm,简称SSDA算法),是由Barnea和Sliverman于1972年,在文章《Aclassofalgorithmsforfastdigitalimageregistration》中提出的一种匹配算法,是对传统模板匹配算法的改进,比MAD算法快几十到几百倍。9.2.5SSDA算法SSDA算法描述如下:(1)定义绝对误差:其中,带有上划线的分别表示子图、模板的均值:可见,绝对误差就是子图与模板图各自去掉其均值后,对应位置之差的绝对值。9.2基于灰度相关的模板匹配—SSDA算法

右图给出了A、B、C三点的误差累计增长曲线。其中,A、B种情况误差增长得快,达到误差阈值Th所用累加次数少,说明被搜索图像区域偏离模板较为严重;C情况下增长缓慢,达到误差阈值Th所用累加次数多,说明被搜索图像区域与模板偏离较小,很可能是匹配点。9.2基于灰度相关的模板匹配9.2.6SATD算法Hadamard变换算法(SumofAbsoluteTransformedDifference,简称SATD算法),是先经Hadamard变换,再对绝对值求和算法。Hadamard变换等价于把原图像Q矩阵左右分别乘以一个Hadamard变换矩阵H。其中,Hardamard变换矩阵H的元素都是1或-1,是一个正交矩阵,可以由Matlab中的Hadamard(n)函数生成,n代表n阶方阵。SATD算法图像匹配就是将模板与子图做差后得到矩阵Q,再对矩阵Q求其Hadamard变换(左右同时乘以H,即HQH),对变换所得矩阵求其元素的绝对值之和,即SATD值,并将其作为相似度的判别依据。对所有子图都进行如上的变换后,找到SATD值最小的子图,便是最佳匹配。9.2基于灰度相关的模板匹配—SATD算法SATD算法图像匹配的Matlab程序代码实现如下:%读取图像src=double(rgb2gray(imread('baby.jpg')));mask=double(rgb2gray(imread('模板图像_bdd.jpg')));%模板图像长宽相等[M,K]=size(src);%搜索图大小N=size(mask,1);%模板大小%%hadamard变换矩阵hdm_matrix=hadamard(N);hdm=zeros(M-N+1,K-N+1);%保存SATD值fori=1:M-N+1forj=1:K-N+1temp=(src(i:i+N-1,j:j+N-1)-mask)/256;sw=(hdm_matrix*temp*hdm_matrix)/256;hdm(i,j)=sum(sum(abs(sw)));endend%%寻找最小值及其窗口位置min_hdm=min(min(hdm));[x,y]=find(hdm==min_hdm);%展示匹配结果figure,imshow(uint8(mask));title('模板图像');imwrite(uint8(mask),'模板图像_bdd_gray.jpg');figure,imshow(uint8(src));holdon;rectangle('position',[y,x,N-1,N-1],'edgecolor','r');title('SATD匹配结果');holdoff;【Matlab实现】《智能图像处理与分析识别》第九章图像匹配9.1模板匹配的概念9.2基于灰度相关的模板匹配9.3基于变换域的模板匹配9.4基于特征相关的模板匹配图像的空间域与其他域之间的变换,如傅里叶变换,小波变换,轮廓波变换,剪切波变换等,实际上是图像在其他坐标领域中的表现。在空间域中,图像的信息是像素值和坐标位置;在其他域中,如傅里叶变换,图像的信息就是频率和幅度。简单的讲就是从不同的角度看图像而已。在其他域中对图像进行模板匹配处理,称为基于变换域的模板匹配。基于傅里叶变换的图像匹配是典型的基于变换域的模板匹配方法,图像的旋转、平移、比例变换等均能在傅里叶变换的频域中反映出来。9.3基于变换域的模板匹配9.3基于变换域的模板匹配

傅里叶变换的算法本质上利用其频率特性,将互相关函数转化到频域空间进行计算,然后再将计算结果转回到时域空间。公式如下:

则,根据维纳-辛钦定理可得:

(*代表共轭复数)对上述式子进行快速傅里叶逆变换可得:

通过快速傅里叶变换得到模板图和搜索图之间的相对位移后,然后便可得到实验结果在搜索图中的位置。9.3基于变换域的模板匹配%%读取背景背景和模板图像,并将其转化为灰度图template=rgb2gray(imread('baby_mask.jpg'));background=rgb2gray(imread('baby.jpg'));

%%获取图像的尺寸[by,bx]=size(background);[ty,tx]=size(template);%usedforbboxplacement

%%进行傅里叶变换,计算频谱数据Ga=fft2(background);Gb=fft2(template,by,bx);c=real(ifft2((Ga.*conj(Gb))./abs(Ga.*conj(Gb))));%%画出互相关矩阵图像figure;surf(c),shadingflat;%plotcorrelation%%获取互相关函数的峰值位置[max_c,imax]=max(abs(c(:)));[ypeak,xpeak]=find(c==max(c(:)));

%%计算背景图像中的匹配区域的位置position=[xpeak(1),ypeak(1),tx,ty];

%%画出方框图hFig=figure;hAx=axes;imshow(background,'Parent',hAx);rectangle('Position',position,'LineWidth',0.8,'EdgeColor','r');【Matlab实现】基于傅里叶变换的模板匹配算法的Matlab程序代码实现如下:《智能图像处理与分析识别》第九章图像匹配9.1模板匹配的概念9.2基于灰度相关的模板匹配9.3基于变换域的模板匹配9.4基于特征相关的模板匹配9.4基于特征相关的模板匹配

基于特征的算法利用图像的显著特征,具有计算量小、速度快等特点,对于图像的畸变、噪声、遮挡等也具有一定的鲁棒性,但该类算法的匹配性能在很大程度上取决于特征提取的质量。

常用的基于特征相关的模板匹配算法有:基于SIFT算法的图像匹配、基于SURF算法的图像匹配、基于ORB算法的图像匹配。9.4.1基于SIFT算法的图像匹配

尺度不变特征转换(Scale-invariantfeaturetransform,简称SIFT)

,是一种用来侦测与描述影像中的局部性特征的算法,它在空间尺度中寻找极值点,提取位置、尺度、旋转不变量,生成特征描述子。SIFT算法的实质是在不同的尺度空间上查找关键点(特征点),并计算出关键点的方向。9.4基于特征相关的模板匹配9.4.1基于SIFT算法的图像匹配SIFT算法主要分以下步骤:(1)尺度空间极值点检测:搜索所有尺度上的图像位置,通过高斯微分函数来识别潜在的对于尺度和旋转不变的兴趣点。(2)筛选出稳定的关键点:在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度。关键点的选择依据于它们的稳定程度。(3)确定关键点方向:基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向。所有后面的对图像数据的操作都相对于关键点的方向、尺度和位置进行变换,从而提供对于这些变换的不变性。(4)生成特征点描述子:在每个关键点周围的邻域内,在选定的尺度上测量图像局部的梯度。这些梯度被变换成一种表示,这种表示允许比较大的局部形状的变形和光照变化。(5)特征点匹配

SIFT的尺度空间通过唯一线性变换核—高斯卷积核实现,高斯函数如公式如下:

(1)尺度空间极值点检测

9.4.1基于SIFT算法的图像匹配

搭建高斯金字塔获取不同的尺度空间,如下图所示。原图像做第一层,假设已具有尺度σ0(Lowe推荐σ0=1.6,需要将原始图像做一定的调整,一般采用的方案是首先对初始图像做双线性差值以扩大一倍),之后的每一幅图像均由前一幅图像滤波得到且对应不同的参数σi(Octave),每组图像的初始图像(底层图像)是前一组图像倒数第三张隔点采样得到的,以便保持连续性,不同组相同层的滤波图像生成σi,最终生成的O组S+3层滤波图像集合被统称为高斯金字塔。9.4.1基于SIFT算法的图像匹配

式中,σ是尺度空间坐标,σ0称为初始尺度,s是组内层的索引,S表示每组的层数(一般为3-5)。同一组相邻两层尺度关系和相邻两组同一层尺度关系如下:金字塔组数取值如公式为:其中,m,n分别为原始图像的行高和列宽。原始图像和塔顶图像的大小共同决定金字塔层数,取值一般在4-6左右其中,t为塔顶图像的最小维数的对数值,S为组内有效检测层数。9.4.1基于SIFT算法的图像匹配

搭建好高斯金字塔之后,需要按照一定的方式提取图像的特征点。1980年,DavidCourtnayMarr和EllenHildreth提出了用于提取图像特征点的LoG(LaplacianofGaussian)算法。2002年,Mikolajczyk指出尺度归一化的数LoG所得出的极大值和极小值可以确保图像特征的稳定性,但计算复杂,运行效率不高。早在1994年,Lindeberg发现与LoG非常相似的高斯差分函数DoG(DifferenceofGaussian),LoG与DoG的关系如下所示:LoG与DoG只差一个系数,因此DoG算子也能确保图像特征点的稳定性。高斯差分图像计算公式如下:与分别代表相邻两层图像的高斯变换结果,相减即可得到高斯金字塔。9.4.1基于SIFT算法的图像匹配关键点即DoG空间中稳定的极值点。为了寻找DoG函数的极值点,每一个像素点要和所有相邻点进行对比,看是否比其尺度域的相邻点大或者小,如图9-11比较采样点与其相邻点,其中,蓝色的叉号为采样点,红色的点为相邻点,共26个(同尺度8个、上下相邻尺度各有9个点),查找关键点就是寻找极值点的过程。Scale9.4.1基于SIFT算法的图像匹配(2)筛选出稳定的关键点

9.4.1基于SIFT算法的图像匹配

由于DoG算子会产生较强的边缘响应,产生的不稳定边缘响应点需要被剔除。考虑到高斯差分算子的极值在横跨边缘的地方有较大主曲率,而在垂直边缘的方向有较小的主曲率,因此可以通过极值点主曲率的大小来评估其稳定性。主曲率通过一个2×2的Hessian矩阵H求出,Hessian矩阵的计算公式如下所示:

9.4.1基于SIFT算法的图像匹配

(3)确定关键点的方向

为使生成的描述子具有旋转不变性,Lowe提出用每个关键点所在邻域内所有像素点的梯度方向分布特性来确定关键点主方向的相应参数,梯度模值和方向分布公式如下所示:其中,L是关键点所在的尺度空间。9.4.1基于SIFT算法的图像匹配选取一个邻域,关键点为中心,邻域内所有像素点的梯度用直方图统计,方向用箭头表示。平面角度范围0~360°,以10。为一个方向单位平均分为36个方向。如图所示,直方图的峰值方向代表了关键点的主方向,方向直方图的峰值则代表了该特征点处邻域梯度的方向,以直方图中最大值作为该关键点的主方向,为了简化,图中仅展示了表示8个方向的直方图直方图表示梯度幅值大小,箭头表示梯度方向,梯度幅值最大所对应的方向表示关键点的主方向。为使算法具有更好的鲁棒性,直方图梯度幅值大于主方向峰值80%的方向表示为辅方向。因此,在相同位置和尺度下,会有多个峰值关键点被创建,但各关键点的方向不同。9.4.1基于SIFT算法的图像匹配(4)生成特征点描述子

之前的操作步骤确保每个特征点有了尺度、位置和方向信息。特征描述子就是通过这三个信息建立的。如图所示,在特征点周围取一4×4大小的邻域,以1×1分割邻域为16个方块,每个方块8个方向,每个方向1个数值,因此特征点描述子为4×4×8=128维。9.4.1基于SIFT算法的图像匹配(5)特征点匹配

其中,Threshold为阈值,一般取为0.8。SIFT算法具有旋转、尺度、亮度、仿射不变性,视角、噪声稳定性,易于与其他算法结合,但实时性差、对边缘光滑的特征点提取能力低。9.4.1基于SIFT算法的图像匹配%该函数读取图像并返回其SIFT“关键点”function[image,descriptors,locs]=sift(imageFile)image=imread(imageFile);%读图[rows,cols]=size(image);%转换为PGM格式,便于“关键点”可执行文件的读取f=fopen('tmp.pgm','w');iff==-1error('Couldnotcreatefiletmp.pgm.');endfprintf(f,'P5\n%d\n%d\n255\n',cols,rows);fwrite(f,image','uint8');fclose(f);%调用“关键点”可执行文件ifisunixcommand='!./sift';elsecommand='!siftWin32';endcommand=[command'<tmp.pgm>tmp.key'];eval(command);g=fopen('tmp.key','r');ifg==-1error('Couldnotopenfiletmp.key.');end[header,count]=fscanf(g,'%d%d',[12]);ifcount~=2error('Invalidkeypointfilebeginning.');endnum=header(1);len=header(2);iflen~=128error('Keypointdescriptorlengthinvalid(shouldbe128).');end【Matlab实现】SIFT算法的Matlab程序代码实现如下:9.4.1基于SIFT算法的图像匹配%创建两个输出矩阵(使用已知大小以提高效率)locs=double(zeros(num,4));descriptors=double(zeros(num,128));

fori=1:num[vector,count]=fscanf(g,'%f%f%f%f',[14]);ifcount~=4error('Invalidkeypointfileformat');endlocs(i,:)=vector(1,:);

[descrip,count]=fscanf(g,'%d',[1len]);if(count~=128)error('Invalidkeypointfilevalue.');end%将每个输入向量标准化为单位长度descrip=descrip/sqrt(sum(descrip.^2));descriptors(i,:)=descrip(1,:);endfclose(g);%%该函数显示叠加了SIFT“关键点”的图像functionshowkeys(image,locs)disp('DrawingSIFTkeypoints...');figure('Position',[5050size(image,2)size(image,1)]);%利用“关键点”画图colormap('gray');imagesc(image);holdon;imsize=size(image);fori=1:size(locs,1)TransformLine(imsize,locs(i,:),0.0,0.0,1.0,0.0);TransformLine(imsize,locs(i,:),0.85,0.1,1.0,0.0);TransformLine(imsize,locs(i,:),0.85,-0.1,1.0,0.0);endholdoff;9.4.1基于SIFT算法的图像匹配%x1,y1;起始点%x2,y2;终止点functionTransformLine(imsize,keypoint,x1,y1,x2,y2)len=6*keypoint(3);s=sin(keypoint(4));c=cos(keypoint(4));%变换r1=keypoint(1)-len*(c*y1+s*x1);c1=keypoint(2)+len*(-s*y1+c*x1);r2=keypoint(1)-len*(c*y2+s*x2);c2=keypoint(2)+len*(-s*y2+c*x2);line([c1c2],[r1r2],'Color','c');%%该函数读取两张图像,并找到它们的SIFT特征functionnum=match(image1,image2)[im1,des1,loc1]=sift(image1);%找出每张图的SIFT关键点[im2,des2,loc2]=sift(image2);distRatio=0.6;des2t=des2';%预计算矩阵转置fori=1:size(des1,1)dotprods=des1(i,:)*des2t;%点积向量[vals,indx]=sort(acos(dotprods));%取反余弦并对结果进行排序

%检查最近邻的角度是否小于2*distRatio.if(vals(1)<distRatio*vals(2))match(i)=indx(1);elsematch(i)=0;endend9.4.1基于SIFT算法的图像匹配%显示匹配点连接的图像newImg=cat(2,im1,im2);%将两张图像放在一张图中figure;imshow(newImg)holdonplot(loc1(:,2),loc1(:,1),'ro','MarkerSize',5,'LineWidth',0.7)plot(loc2(:,2)+size(im1,1),loc2(:,1),'m*','MarkerSize',5,'LineWidth',0.7)cols1=size(im1,2);fori=1:size(des1,1)if(match(i)>0)line([loc1(i,2)loc2(match(i),2)+cols1],...[loc1(i,1)loc2(match(i),1)],'Color','c');endendholdoff;num=sum(match>0);fprintf('Found%dmatches.\n',num);%保存结果frame=getframe(gcf);im=frame2im(frame);imwrite(im,'S图像匹配结果.jpg');%%主程序img1=imread('baby1.JPG');img2=imread('baby2.JPG');img1_gray=rgb2gray(img1);img2_gray=rgb2gray(img2);match('img1_gray.jpg','img2_gray.jpg');9.4.1基于SIFT算法的图像匹配9.4.1基于SIFT算法的图像匹配9.4基于特征相关的模板匹配9.4.2基于SURF算法的图像匹配2006年HerbertBay提出了SURF算法,该算法是对SIFT算法的改进,不仅继承了SIFT算法的优点,而且比SIFT算法速度快。下面对SURF算法作一下简单的阐述。

由计算点的积分到计算图像区域的积分,只需要计算图像区域四个角在积分图像的值,公式如下所示:

由于特征点需具备尺度无关性,所以在Hessian矩阵构造前,需要对其进行高斯滤波。9.4.2基于SURF算法的图像匹配

调整权值大小跟踪尺度间的变换以减少近似值和特征值间的误差,其行列式公式如下所示:由上述公式计算Hessian矩阵特征值,由特征值的正负判定局部极值点,正数为极值点,可以获取代表Hessian行列式近似值的图像。与SIFT算法使用高斯滤波器对图像进行降采样计算不同,SURF算法是在滤波过程中完成尺度变换,它使用盒子滤波器(Boxfilter)直接改变滤波器的尺寸生成图像金字塔,即尺度空间。高斯滤波模板盒子滤波器滤波器如下图所示:不同尺寸高斯差分滤波器示意图9.4.2基于SURF算法的图像匹配盒子滤波器尺寸初始值9×9,之后滤波器尺寸扩展如公式如下所示:其中,octave、interval从1开始计数,当octave=1,interval=1时,是第0组第0层。初始尺寸的获取是σ=1.2时高斯二阶微分函数经过离散和减裁得到的。滤波模板尺寸与σ之间关系为σ=1.2×L/9。SURF算法尺度空间分四组,每组四层,为保证连续性,相邻组中有重叠部分,盒子滤波器尺寸如右图所示。9.4.2基于SURF算法的图像匹配SURF算法与SIFT算法尺度空间的相同点都是O组L层,由章节3.2.1可知,不同点在于SURF的尺度空间中,不同组滤波器模板尺寸逐渐增加,而图像尺寸一致,相当于一个上采样的过程。同组使用同尺寸滤波器,但滤波器的模糊系数逐渐增大。SURF算法得到的图像金字塔如下图(右)所示。9.4.2基于SURF算法的图像匹配

盒式滤波器将图像滤波转化成计算加减运算问题,只需简单查找积分图就可,这样可以并行化计算,提高了运算速度。9.4.2基于SURF算法的图像匹配(3)筛选特征点经过滤波矩阵对图像处理,可以得到该尺度空间下的局部极值点。SURF检测特征点恰恰与SIFT相反,先Hessian矩阵检测,再非极大抑制。虽顺序相反,但方法保持一致,因此不再赘述。(4)计算特征点主方向SURF用统计特征点圆形邻域内的Haar小波特性的方法统计特征点方向。设立一个圆形邻域,圆心是特征点,半径是6S(S:特征点对应尺度),4S尺寸的Haar小波模板进行图像处理,统计60°扇形区域内所有的点水平、垂直Haar小波特性总和,同样方法处理整个区域,最后将最大值所属扇形区域的方向作该特征点的主方向,且只有一个。如下图所示:9.4.2基于SURF算法的图像匹配

dx

dy5s*5s主方向Hear小波模板旋转到主方向特征描述子生成过程SURF算法运用“盒子滤波器”改进特征提取方式,降低特征描述子维数改进描述方式,这样,相较于SIFT算法时间缩短,但实时性仍旧差。9.4.2基于SURF算法的图像匹配%%读取图像I1=imread('baby1.JPG');I1=imresize(I1,0.6);I1=rgb2gray(I1);I2=imread('baby2.JPG');I2=imresize(I2,0.6);I2=rgb2gray(I2);

%%寻找特征点

points1=detectSURFFeatures(I1);points2=detectSURFFeatures(I2);

%%计算描述向量

[f1,vpts1]=extractFeatures(I1,points1);[f2,vpts2]=extractFeatures(I2,points2);

%%显示figure;showMatchedFeatures(I1,I2,matched_pts1,matched_pts2,'montage');legend('matchedpoints1','matchedpoints2');%图例

输出结果如图9-23所示:SURF算法的Matlab程序代码实现如下:%%进行匹配

indexPairs=matchFeatures(f1,f2,'Prenormalized',true);matched_pts1=vpts1(indexPairs(:,1));matched_pts2=vpts2(indexPairs(:,2));基于SURF算法的图像匹配结果【Matlab实现】9.4.2基于SURF算法的图像匹配9.4基于特征相关的模板匹配计算其余点与P点的像素差公式如下:要判断像素P是否为特征点,则首先利用公式计算P1、P5、P9、P13与中心P的像素差,若至少有3个点的像素差的绝对值高出阈值,则进行下一步,否则舍弃。第二步,利用公式计算其余点与P点的像素差,在像素差的绝对值至少有连续9个超过阈值的情况下,定为角点,否则不是角点。(1)oFAST特征检测

1)基于FAST算法进行特征点的提取2006年Rosten和Drummond提出一种使用决策树学习方法加速的角点检测算法,即FAST算法,该算法认为若某点像素值与其周围某邻域内一定数量的点的像素值相差较大,则该像素可能是角点。9.4.3基于ORB算法的图像匹配②非极大值抑制先划定一个邻域(中心是特征点P,大小是3×3或5×5),通过极亮暗点判断计算邻域内所有点,若只有特征点P,则保留;若存在多个特征点,需计算所有特征点的s值(即score值,16个点与中心差值的绝对值总和),只有在P响应值最大的情况下保留,其他情况下抑制。s值计算公式如下所示:

9.4.3基于ORB算法的图像匹配那么,质心位置C公式如下所示:

特征点中心与质心连线的向量即为oFAST特征点的方向。其角度公式如下所示:2)特征点附加方向ORB算法用灰度质心法(IntensityCentroid,简称IC)附加方向。其定义为:角点视为物体,物体质心(即角点质心)与角点灰度之间有偏移量存在,这个偏移量可以确定角点方向。首先计算Imagemoment(图像矩),图像块的力矩公式如下所示:

9.4.3基于ORB算法的图像匹配

9.4.3基于ORB算法的图像匹配

9.4.3基于ORB算法的图像匹配3)特征匹配描述子间的Hamming距离是判断匹配的依据。一般情况下,当Hamming距离大于128时,特征点不匹配。Hamming距离的计算公式如下所示:oFAST检测大大提升了特征点的检测速度,rBRIEF描述子也缩短了生成描述子的时间,所以ORB算法在速度上比SIFT和SURF算法有很大的提升,实时性高。但是ORB算法的缺点就是它并不具备尺度不变性,匹配精度有待提高。9.4.3基于ORB算法的图像匹配ORB算法的Matlab主程序代码实现如下:%%主程序%读取图像im1=imread('baby1.JPG');im2=imread('baby2.JPG');scale=[1,0.75,0.5,0.25];im1_grey=rgb2gray(im1);im2_grey=rgb2gray(im2);%FAST算法进行

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论