总结SIFT更新版Word下载.docx
《总结SIFT更新版Word下载.docx》由会员分享,可在线阅读,更多相关《总结SIFT更新版Word下载.docx(29页珍藏版)》请在冰豆网上搜索。
神经网络
MLData
8多维空间中的聚类和搜索
快速近似最近邻搜索FLANN
聚类
9GPU加速计算机视觉
影像处理
矩阵减少
特征检测和描述
视频分析
10计算摄影学
图像修补
去噪
11图片拼接
拼接管道
相机
特征查找和图像匹配
旋转估计
自动校准
图像扭曲
缝估计
曝光补偿
图片调和
其他
12其他
立体匹配
人脸识别
运动分析
平面细分(CAPI)
OpenCL的加速计算机视觉
AndroidAPI
GNUScientificLibrary
MathematicalFunctions
ComplexNumbers
Polynomials
SpecialFunctions
VectorsandMatrices
Permutations
Combinations
Multisets
Sorting
BLASSupport
LinearAlgebra
Eigensystems
FastFourierTransforms
NumericalIntegration
RandomNumberGeneration
Quasi-RandomSequences
RandomNumberDistributions
Statistics
Histograms
N-tuples
MonteCarloIntegration
SimulatedAnnealing
OrdinaryDifferentialEquations
Interpolation
NumericalDifferentiation
ChebyshevApproximations
SeriesAcceleration
WaveletTransforms
DiscreteHankelTransforms
OnedimensionalRoot-Finding
OnedimensionalMinimization
MultidimensionalRoot-Finding
MultidimensionalMinimization
Least-SquaresFitting
NonlinearLeast-SquaresFitting
BasisSplines
PhysicalConstants
IEEEfloating-pointarithmetic
数学函数
复数
多项式
特殊功能
向量和矩阵
排列
合并
多集
排序
基本线性代数子程序(BLAS)支持
线性代数
快速傅立叶变换
数值积分
随机数生成器
准随机序列
随机分布
统计
N-元组
蒙特卡罗积分
模拟退火算法
常微分方程
插值
数值微分
切比雪夫逼近
系列加速度
小波变换
离散汉克尔变换
一维求根
一维最小化
多维求根
多维最小化
最小二乘法拟合
非线性最小二乘法拟合
基础样条曲线
物理常数
IEEE浮点运算
sift.h文件参考
检测SIFT图像功能。
#include“cxcore.h”
算法步骤:
1.建立尺度空间
为了让尺度体现其连续性,在简单降采样的基础上加上了高斯滤波。
一幅图像可以产生几组(octave)图像,一组图像包括几层(interval)图像。
2.寻找极值点
3.去除不稳定的极值点(低对比度)
利用公式
确定精确定位后的极值点的像素值,进行对比度的检测。
若像素值满足大于contr_thr/intvls(程序中为0.04/3),则该点才能最终确定为极值点。
4.去除边界影响点
使用Hessian矩阵去除边界影响点:
如果该点满足则保留,否则被排除
α为最大特征值,β为最小的特征值,在程序中r=10.
5.特征点方向
计算公式:
scl_octv=σ*2.0intvl/intvls,式中:
scl_octv为关键点的尺度,intvl为关键点在高斯差分金字塔中所处于的层数
以关键点为中心,划定一个邻域,利用所有在此区域内的点的梯度形成一个方向直方图。
偏移为rad的正方形区域,rad=四舍五入(3*1.5*scl_octv)
梯度加权系数w的确定:
w=exp(-(i*i+j*j)/exp_denom),每个像素点的梯度值都必须乘以该点所对应的高斯权,这样才能得到最终的梯度值。
根据Lowe的建议,模板采用[0.25,0.5,0.25],并连续加权两次。
生成含有36柱的方向直方图,梯度直方图范围0~360度,其中每10度一个柱。
由半径为图像区域生成
对方向直方图进行两次平滑
求取关键点方向(可能是多个方向)
对方向直方图的Taylor展开式进行二次曲线拟合,精确关键点方向
6.特征点描述
描述子采用4×
4×
8=128维向量表征,综合效果最优(不变性与独特性)。
程序中hist[SIFT_DESCR_WIDTH][SIFT_DESCR_WIDTH][SIFT_DESCR_HIST_BINS]
最终以一维数组保存在feature数据结构
宏
#
SIFT_INTVLS
3
每组octave
的取样间隔
SIFT_SIGMA
1.6
默认情况下,初始高斯平滑的标准差sigma
SIFT_CONTR_THR
0.04
默认阈值,像素灰度值范围[0,1]。
去除那些对比度较低的不稳定极值点。
SIFT_CURV_THR
10
关键点的原则曲率比,默认阈值,去除边界点影响点
SIFT_IMG_DBL
1
双倍图像大小后再金字塔?
SIFT_DESCR_WIDTH
4
描述符直方图数组的默认宽度
SIFT_DESCR_HIST_BINS
8
描述符阵列中每个直方图的默认bin数
函数文档
intsift_features(IplImage*img,structfeature**feat)
查找图像中SIFT特征。
使用默认参数值,参见以上宏定义。
int_sift_features
(
IplImage*
img,
struct
feature
**
feat,
int
intvls,
double
sigma,
contr_thr,
curv_thr,
img_dbl,
descr_width,
descr_hist_bins
)
参数
IMG
被检测的图像。
返回特征点的数据结构,采用连续存放的数组结构。
Intvls
每组octave的尺度空间采样的间隔数。
sigma
建立octave金字塔时使用的高斯平滑量。
contr_thr
尺度空间过程
的一个评价参数阈值,
是一个向量,确定特征位置和尺度大小。
该阈值用于去掉不稳定的特性点,假定像素值的范围是[0,1]。
curv_thr
去除边界点影响点中的参数。
img_dbl
是否双倍图像大小后再建立尺度空间?
1是,0否。
descr_width
使用
宽度的
阵列计算直方图方向,用于计算特征描述符。
descr_hist_bins
每个阵列中的用于计算的特征的描述符的直方图的方向数。
返回
返回的特征点数据的大小
feature数据结构表示图像中尺度旋转不变性的特征。
a(x-u)(x-u)+2b(x-u)(y-v)+c(y-v)(y-v)=1
#include<
imgfeatures.h>
DataFields
x
x坐标
y
y坐标
a
仿射特性参数Oxford-type
b
c
scl
Lowe-style特征的大小
ori
Lowe-style特征的方向
d
描述符号的数目
descr
[FEATURE_MAX_D]
描述符号128个
type
特征类型,OXFD或LOWE
category
多用途特征种类
*
fwd_match
前一副图片的配对特征
bck_match
后一副图片的配对特征
mdl_match
模型中的配对特征
CvPoint2D64f
img_pt
图像中点的位置
mdl_pt
模型中点的位置
void*
feature_data
自定义数据
imgfeatures.hFileReference
#include"
cxcore.h"
intimport_features(char*filename,inttype,structfeature**feat)
从文件中读取特征数据
intexport_features(char*filename,structfeature*feat,intn)
导出n个特征数据到文件
voiddraw_features(IplImage*img,structfeature*feat,intn)
在图片上显示特征描述
doubledescr_dist_sq(struct
f1,struct
f2
计算两个描述子的欧式距离。
descr[128]
kdtree.hFileReference
structkd_node*kdtree_build(structfeature*features,intn)
构建kd树。
intkdtree_bbf_knn(structkd_node*kd_root,structfeature*feat,intk,structfeature***nbrs,intmax_nn_chks)
使用BestBinFirst搜索算法最佳(k近邻)匹配的特征向量,返回特征数组。
intkdtree_bbf_spatial_knn(structkd_node*kd_root,structfeature*feat,intk,structfeature***nbrs,intmax_nn_chks,CvRectrect,intmodel)
使用BestBinFirst搜索算法最佳(指定空间范围的k近邻)匹配的特征向量,返回特征数组。
voidkdtree_release(structkd_node*kd_root)
释放kdtree内存空间。
实验表明BBF算法性能很好,因为我们仅考虑Ratio(最近邻距离/次最近邻距离)<
0.49的情形,所以不必花费大量时间在很多相似的距离中寻找最近邻上面。
借助透视变换
补充:
二维齐次坐标变换的矩阵的形式是:
这个矩阵每一个元素都是有特殊含义的。
形进行平移变换;
[g
h]是对图形作投影变换;
[i]则是对图形整体进行缩放变换。
1)平移变换
2)缩放变换
3)旋转变换
4)对称变换
对称变换其实只是a、b、d、e取0、1等特殊值产生的一些特殊效果。
例如:
当b=d=0,a=-1,e=1时有x´
=-x,y´
=y,产生与y轴对称的图形。
当b=d=0,a=-1,e=-1时有x´
=x,y´
=-y,产生与x轴对称的图形。
当b=d=0,a=e=-1时有x´
=-y,产生与原点对称的图形。
当b=d=1,a=e=0时有x´
=y,y´
=x,产生与直线y=x对称的图形。
当b=d=-1,a=e=0时有x´
=-y,y´
=-x,产生与直线y=-x对称的图形。
5)错切变换
当d=0时,x´
=x+by,y´
=y,此时,图形的y坐标不变,x坐标随初值
(x,y)及变换系数b作线性变化。
当b=0时,x´
=dx+y,此时,图形的x坐标不变,y坐标随初值
(x,y)及变换系数d作线性变化。
6)复合变换
如果图形要做一次以上的几何变换,那么可以将各个变换矩阵综合起来进行一步到位的变换。
复合变换有如下的性质:
复合平移
对同一图形做两次平移相当于将两次的平移两加起来:
复合缩放
两次连续的缩放相当于将缩放操作相乘:
复合旋转
两次连续的旋转相当于将两次的旋转角度相加:
缩放、旋转变换都与参考点有关,上面进行的各种变换都是以原点为参考点的。
如果相对某个一般的参考点(xf,yf)作缩放、旋转变换,相当于将该点移到坐标原点处,然后进行缩放、旋转变换,最后将(xf,yf)点移回原来的位置。
切记复合变换时,先作用的变换矩阵在右端,后作用的变换矩阵在左端。
关于(xf,yf)点的缩放变换
绕(xf,yf)点的旋转变换
RANSAC为RANdomSAmpleConsensus(随机抽样一致)的缩写,它是根据一组包含异常数据的样本数据集,计算出数据的数学模型参数,得到有效样本数据的算法。
它于1981年由Fischler和Bolles最先提出。
RANSAC算法的基本假设是样本中包含正确数据(inliers,可以被模型描述的数据),也包含异常数据(Outliers,偏离正常范围很远、无法适应数学模型的数据),即数据集中含有噪声。
这些异常数据可能是由于错误的测量、错误的假设、错误的计算等产生的。
同时RANSAC也假设,给定一组正确的数据,存在可以计算出符合这些数据的模型参数的方法。
RANSAC基本思想描述如下:
①考虑一个最小抽样集的势为n的模型(n为初始化模型参数所需的最小样本数)和一个样本集P,集合P的样本数#(P)>
n,从P中随机抽取包含n个样本的P的子集S初始化模型M;
②余集SC=P\S中与模型M的误差小于某一设定阈值t的样本集以及S构成S*。
S*认为是内点集,它们构成S的一致集(ConsensusSet);
③若#(S*)≥N,认为得到正确的模型参数,并利用集S*(内点inliers)采用最小二乘等方法重新计算新的模型M*;
重新随机抽取新的S,重复以上过程。
④在完成一定的抽样次数后,若未找到一致集则算法失败,否则选取抽样后得到的最大一致集判断内外点,算法结束。
由上可知存在两个可能的算法优化策略。
①如果在选取子集S时可以根据某些已知的样本特性等采用特定的选取方案或有约束的随机选取来代替原来的完全随机选取;
②当通过一致集S*计算出模型M*后,可以将P中所有与模型M*的误差小于t的样本加入S*,然后重新计算M*。
RANSAC算法包括了3个输入的参数:
①判断样本是否满足模型的误差容忍度t。
t可以看作为对内点噪声均方差的假设,对于不同的输入数据需要采用人工干预的方式预设合适的门限,且该参数对RANSAC性能有很大的影响;
②随机抽取样本集S的次数。
该参数直接影响SC中样本参与模型参数的检验次数,从而影响算法的效率,因为大部分随机抽样都受到外点的影响;
③表征得到正确模型时,一致集S*的大小N。
为了确保得到表征数据集P的正确模型,一般要求一致集足够大;
另外,足够多的一致样本使得重新估计的模型参数更精确。
RANSAC算法经常用于计算机视觉中。
例如,在立体视觉领域中同时解决一对相机的匹配点问题及基本矩阵的计算。
使用GPUSIFT可加快处理速度,实验中加速比大约为4。
减少RANSAC样本集合可进一步加快速度。