surf算法原理总结
读出灰度图
构建Hessian矩阵
Hessian矩阵描述函数的局部曲率 记 f(x,y)在 M点处的黑塞矩阵为 H(M) H(M)是正定矩阵,M处是一个局部的极小值 H(M)是负定矩阵,M处是一个局部的极大值 H(M)是不定矩阵,M处不是极值
特征点尺度无关性
其中Lxx(x, σ)是高斯滤波后图像g(σ)的在x方向散情况 • 1维拉普拉斯运算可以通过1维卷积核[1,-2,1]实现
• 二维离散情况
f(x)=g(I(x)), I(x)为图像的灰度值
• Hessian矩阵判别式
• Dxx是盒子模板与图像卷积,近似代替Lxx • 代码中 • hessian(x,y)= (Dxx*Dyy-0.8317*(Dxy*Dxy))
• 尺度(模糊程度)不同,用的高斯模板尺度不同
尺度空间生成
• 第一个子八度的scale为原图大小 • 后面每个octave为上一个octave降采样的结果 • 即原图的1/4(长宽分别减半) • 构成下一个子八度(高一层金字塔)
确定特征点
• 在3*3*3的邻域范围内寻找Hessian矩阵的行列式最大值 • 每个像素点与其三维领域的26个点进行大小比较 • 三维线性插值法 • 去掉小于一定阈值(threshold)的点 • isMaximum
参数说明
• OCTAVE:尺度scale,图片尺寸,子八度,金字塔 • INTERVAL:模糊程度,高斯模板的大小 • 模板不断增大
next octave 是由 first octave 降采样得 到
尺度空间生成
• 4个octave层,不同octave中图片尺寸大小不同 • 每个octave层中4个INTERVAL图片,同一octave层中图片尺寸相同
surf算法原理
• (1)构建Hessian矩阵 • (2)尺度空间生成 • (3)初步确定特征点 • (4)精确定位特征点 • (5)选取特征点主方向确定 • (6)构造surf特征点描述算子
surf算法特征点提取
• extract_surf.cpp • data =read_png_u8_gray • 记做I(x,y),图像像素函数 • 预处理:图像积分 • squareConvolutionXY返回积分值
选取特征点的主方向
• 统计60度扇形内所有点的水平haar小波特征和垂直haar小波特征 总和 • 然后60度扇形以一定间隔进行旋转,最后将最大值那个扇形的方 向作为该特征点的主方向
选取特征点的主方向