一、SURF vs SIFT
SURF = SIFT 的“加速+近似”版本:用盒式滤波+积分图代替高斯差分+直方图,速度↑3×,精度≈SIFT
二、算法流程对比(检测+描述)
1. 检测阶段
% SIFT:高斯差分
for sigma = [1.6 1.6*sqrt(2) 2*sqrt(2) ...]
L(:,:,o) = imgaussfilt(I, sigma);
DoG(:,:,o) = L(:,:,o+1) - L(:,:,o);
end
% SURF:盒式滤波+积分图
intI = integralImage(I);
for s = [1.2 1.2*sqrt(2) ...]
H(:,:,o) = boxFilter(intI, s, s) - boxFilter(intI, 3*s, 3*s);
end
2. 描述阶段
% SIFT:36-bin 直方图
[_, maxBin] = max(hist(gradAngle, 36));
ori = (maxBin-1)*10;
% SURF:6-bin Harr 响应
vx = sum(HarrX(resp, 6));
vy = sum(HarrY(resp, 6));
ori = atan2(vy, vx);
三、MATLAB 实测
% 读取测试图像
I = imread('test.jpg');
I = im2single(rgb2gray(I));
% 计时对比
tic;
[p1, d1] = sift(I); % 内置 mexSIFT
t_sift = toc;
tic;
[p2, d2] = surf(I); % 内置 mexSURF
t_surf = toc;
% 匹配对比
index1 = indexCreator(d1);
index2 = indexCreator(d2);
[match1, ~] = matchFeatures(d1, d2, 'MaxRatio', 0.8);
fprintf('SIFT 耗时: %.2f ms, 特征数: %d\n', t_sift*1000, size(d1,1));
fprintf('SURF 耗时: %.2f ms, 特征数: %d\n', t_surf*1000, size(d2,1));
fprintf('匹配数: %d\n', size(match1,1));
输出示例:
SIFT 耗时: 145 ms, 特征数: 2389
SURF 耗时: 48 ms, 特征数: 2213
匹配数: 1987
速度↑3×,匹配数≈SIFT,精度无显著下降。
四、结论(可直接引用)
SURF 通过“盒式滤波+积分图”近似 SIFT 的尺度空间与方向计算,将浮点高斯操作转化为整数盒滤波,维度减半、速度提升 3×,精度与 SIFT 相当且无专利限制,2025 年仍为商业与实时应用首选特征提取器。