SURF(Speeded Up Robust Features)算法原理

本文介绍了SURF算法,它是SIFT算法的改进版,着重提升了运算速度。文章从预备知识如积分图像和Hessian矩阵探测器开始,详细阐述了SURF的构建Hessian矩阵、尺度空间、特征点定位、主方向确定以及描述子生成等关键步骤,旨在为初学者提供清晰的学习指南。

1.前言与预备知识

1.1前言

Surf算法是对Sift算法的一种改进,主要是在算法的执行效率上,比Sift算法来讲运行更快!由于我也是初学者,刚刚才开始研究这个算法,然而网上对于Surf算法的资料又尤为极少,稍微介绍的明白一点的还是英文。所以在此想借这个机会把我所理解的部分介绍一下,对于后面准备学习Surf算法的朋友来说,希望有一点点的帮助!
1.2预备知识

  • 积分图像
积分图像的概念是由Viola和Jones提出的。积分图像中任意一点(i,j)的值为原图像左上角到任意点(i,j)相应的对焦区域的灰度值的总和,其数学公式如图所示:
 

那么,当我们想要计算图片一个区域的积分,就只需计算这个区域的四个顶点在积分图像里的值,便可以通过2步加法和2步减法计算得出,其数学公式如下:
         
  • Hession矩阵探测器
对于斑点检测:
斑点:与周围有着颜色和灰度差别的区域。
在一个一维信号中,让它和高斯二阶导数进行卷积,也就是拉普拉斯变换那么在信号的边缘处就会出现过零
### MATLAB 中使用 SURF 算法进行图像拼接 #### 使用 SURF 进行特征检测和描述 为了在 MATLAB 中利用 SURF 算法完成图像拼接,首先要加载待处理的两张图片并转换成灰度模式。接着调用 `detectSURFFeatures` 来定位关键点,并通过 `extractFeatures` 提取这些位置上的局部外观特性向量。 ```matlab % 加载输入图像 I1 = imread('image1.jpg'); I2 = imread('image2.jpg'); % 转换成灰度图 grayImage1 = rgb2gray(I1); grayImage2 = rgb2gray(I2); % 检测 SURF 特征点 points1 = detectSURFFeatures(grayImage1); %^1 points2 = detectSURFFeatures(grayImage2); %^1 % 提取特征描述子 [features1, valid_points1] = extractFeatures(grayImage1, points1);%^1 [features2, valid_points2] = extractFeatures(grayImage2, points2);%^1 ``` #### 匹配特征点 一旦获得了两个图像中的特征描述子之后,则需寻找它们之间的最佳匹配关系。这里采用双向最近邻距离比率测试来挑选可靠的对应关系: ```matlab indexPairs = matchFeatures(features1, features2,'MatchThreshold',5);%^2 matchedPoints1 = valid_points1(indexPairs(:, 1), :);%^2 matchedPoints2 = valid_points2(indexPairs(:, 2), :);%^2 ``` #### 计算变换矩阵与校正视角差异 找到足够的匹配对后就可以计算出能够使源图像变形到目标图像空间内的几何映射——即单应性矩阵H。这一步骤通常借助于随机抽样一致性算法(RANSAC)以排除异常值的影响从而获得更加稳健的结果。 ```matlab [tform,inlierIdx] = estimateGeometricTransform(matchedPoints1,... matchedPoints2,'homography','MaxNumTrials',2000,... 'DistanceThreshold',4,'Confidence',99.99);%^2 inliers1 = matchedPoints1(inlierIdx,:);%^2 inliers2 = matchedPoints2(inlierIdx,:);%^2 ``` #### 执行图像拼接操作 最后一步就是根据前面求得的单应性矩阵 H 对原始图像实施仿射变换,并将两者无缝融合在一起形成最终的全景效果图。 ```matlab outputView = imref2d(size(I2));%^3 R1 = size(I1,1); C1 = size(I1,2); R2 = size(I2,1); C2 = size(I2,2); [xlim ylim] = bounds([inliers1.Location; inliers2.Location],... [size(I1,[1 2]); size(I2,[1 2])]); warpI1 = imwarp(I1,tform,'OutputView',outputView);%^3 panorama = insertImage(warpI1,I2,'Location',[xlim(1)-1 ylim(1)-1]); figure; imshowpair(I1, I2, 'montage'); title('Input Images');%^3 figure; showMatchedFeatures(I1, I2, inliers1, inliers2); title('Inlier point matches');%^3 figure; imshow(panorama); title('Panoramic Image');%^3 ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值