三种强大的物体识别算法.docx
- 文档编号:7580494
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:10
- 大小:165.79KB
三种强大的物体识别算法.docx
《三种强大的物体识别算法.docx》由会员分享,可在线阅读,更多相关《三种强大的物体识别算法.docx(10页珍藏版)》请在冰豆网上搜索。
三种强大的物体识别算法
三种强大的物体识别算法——SIFT/SURF、haar特征、广义hough变换的特性对比分析收藏
识别算法概述:
SIFT/SURF基于灰度图,
一、首先建立图像金字塔,形成三维的图像空间,通过Hessian矩阵获取每一层的局部极大值,然后进行在极值点周围26个点进行NMS,从而得到粗略的特征点,再使用二次插值法得到精确特征点所在的层(尺度),即完成了尺度不变。
二、在特征点选取一个与尺度相应的邻域,求出主方向,其中SIFT采用在一个正方形邻域内统计所有点的梯度方向,找到占80%以上的方向作为主方向;而SURF则选择圆形邻域,并且使用活动扇形的方法求出特征点主方向,以主方向对齐即完成旋转不变。
三、以主方向为轴可以在每个特征点建立坐标,SIFT在特征点选择一块大小与尺度相应的方形区域,分成16块,统计每一块沿着八个方向占的比例,于是特征点形成了128维特征向量,对图像进行归一化则完成强度不变;而SURF分成64块,统计每一块的dx,dy,|dx|,|dy|的累积和,同样形成128维向量,再进行归一化则完成了对比度不变与强度不变。
haar特征也是基于灰度图,首先通过大量的具有比较明显的haar特征(矩形)的物体图像用模式识别的方法训练出分类器,分类器是个级联的,每级都以大概相同的识别率保留进入下一级的具有物体特征的候选物体,而每一级的子分类器则由许多haar特征构成(由积分图像计算得到,并保存下位置),有水平的、竖直的、倾斜的,并且每个特征带一个阈值和两个分支值,每级子分类器带一个总的阈值。
识别物体的时候,同样计算积分图像为后面计算haar特征做准备,然后采用与训练的时候有物体的窗口同样大小的窗口遍历整幅图像,以后逐渐放大窗口,同样做遍历搜索物体;每当窗口移动到一个位置,即计算该窗口内的haar特征,加权后与分类器中haar特征的阈值比较从而选择左或者右分支值,累加一个级的分支值与相应级的阈值比较,大于该阈值才可以通过进入下一轮筛选。
当通过分类器所以级的时候说明这个物体以大概率被识别。
广义hough变换同样基于灰度图,使用轮廓作为特征,融合了梯度信息,以投票的方式识别物体,在本blog的另一篇文章中有详细讨论,这里不再赘述。
特点异同对比及其适用场合:
三种算法都只是基于强度(灰度)信息,都是特征方法,但SIFT/SURF的特征是一种具有强烈方向性及亮度性的特征,这使得它适用于刚性形变,稍有透视形变的场合;haar特征识别方法带有一点人工智能的意味,对于像人脸这种有明显的、稳定结构的haar特征的物体最适用,只要结构相对固定即使发生扭曲等非线性形变依然可识别;广义hough变换完全是精确的匹配,可得到物体的位置方向等参数信息。
前两种方法基本都是通过先获取局部特征然后再逐个匹配,只是局部特征的计算方法不同,SIFT/SURF比较复杂也相对稳定,haar方法比较简单,偏向一种统计的方法形成特征,这也使其具有一定的模糊弹性;广义hough变换则是一种全局的特征——轮廓梯度,但也可以看做整个轮廓的每一个点的位置和梯度都是特征,每个点都对识别有贡献,用直观的投票,看票数多少去确定是否识别出物体。
SIFT/SURF算法的深入剖析——谈SIFT的精妙与不足收藏
SURF算法是SIFT算法的加速版,opencv的SURF算法在适中的条件下完成两幅图像中物体的匹配基本实现了实时处理,其快速的基础实际上只有一个——积分图像haar求导,对于它们其他方面的不同可以参考本blog的另外一篇关于SIFT的文章。
不论科研还是应用上都希望可以和人类的视觉一样通过程序自动找出两幅图像里面相同的景物,并且建立它们之间的对应,前几年才被提出的SIFT(尺度不变特征)算法提供了一种解决方法,通过这个算法可以使得满足一定条件下两幅图像中相同景物的某些点(后面提到的关键点)可以匹配起来,为什么不是每一点都匹配呢?
下面的论述将会提到。
SIFT算法实现物体识别主要有三大工序,1、提取关键点;2、对关键点附加详细的信息(局部特征)也就是所谓的描述器;3、通过两方特征点(附带上特征向量的关键点)的两两比较找出相互匹配的若干对特征点,也就建立了景物间的对应关系。
日常的应用中,多数情况是给出一幅包含物体的参考图像,然后在另外一幅同样含有该物体的图像中实现它们的匹配。
两幅图像中的物体一般只是旋转和缩放的关系,加上图像的亮度及对比度的不同,这些就是最常见的情形。
基于这些条件下要实现物体之间的匹配,SIFT算法的先驱及其发明者想到只要找到多于三对物体间的匹配点就可以通过射影几何的理论建立它们的一一对应。
首先在形状上物体既有旋转又有缩小放大的变化,如何找到这样的对应点呢?
于是他们的想法是首先找到图像中的一些“稳定点”,这些点是一些十分突出的点不会因光照条件的改变而消失,比如角点、边缘点、暗区域的亮点以及亮区域的暗点,既然两幅图像中有相同的景物,那么使用某种方法分别提取各自的稳定点,这些点之间会有相互对应的匹配点,正是基于这样合理的假设,SIFT算法的基础是稳定点。
SIFT算法找稳定点的方法是找灰度图的局部最值,由于数字图像是离散的,想求导和求最值这些操作都是使用滤波器,而滤波器是有尺寸大小的,使用同一尺寸的滤波器对两幅包含有不同尺寸的同一物体的图像求局部最值将有可能出现一方求得最值而另一方却没有的情况,但是容易知道假如物体的尺寸都一致的话它们的局部最值将会相同。
SIFT的精妙之处在于采用图像金字塔的方法解决这一问题,我们可以把两幅图像想象成是连续的,分别以它们作为底面作四棱锥,就像金字塔,那么每一个截面与原图像相似,那么两个金字塔中必然会有包含大小一致的物体的无穷个截面,但应用只能是离散的,所以我们只能构造有限层,层数越多当然越好,但处理时间会相应增加,层数太少不行,因为向下采样的截面中可能找不到尺寸大小一致的两个物体的图像。
有了图像金字塔就可以对每一层求出局部最值,但是这样的稳定点数目将会十分可观,所以需要使用某种方法抑制去除一部分点,但又使得同一尺度下的稳定点得以保存。
有了稳定点之后如何去让程序明白它们之间是物体的同一位置?
研究者想到以该点为中心挖出一小块区域,然后找出区域内的某些特征,让这些特征附件在稳定点上,SIFT的又一个精妙之处在于稳定点附加上特征向量之后就像一个根系发达的树根一样牢牢的抓住它的“土地”,使之成为更稳固的特征点,但是问题又来了,遇到旋转的情况怎么办?
发明者的解决方法是找一个“主方向”然后以它看齐,就可以知道两个物体的旋转夹角了。
下面就讨论一下SIFT算法的缺陷。
SIFT/SURT采用henssian矩阵获取图像局部最值还是十分稳定的,但是在求主方向阶段太过于依赖局部区域像素的梯度方向,有可能使得找到的主方向不准确,后面的特征向量提取以及匹配都严重依赖于主方向,即使不大偏差角度也可以造成后面特征匹配的放大误差,从而匹配不成功;另外图像金字塔的层取得不足够紧密也会使得尺度有误差,后面的特征向量提取同样依赖相应的尺度,发明者在这个问题上的折中解决方法是取适量的层然后进行插值。
SIFT是一种只利用到灰度性质的算法,忽略了色彩信息,后面又出现了几种据说比SIFT更稳定的描述器其中一些利用到了色彩信息,让我们拭目以待。
最后要提一下,我们知道同样的景物在不同的照片中可能出现不同的形状、大小、角度、亮度,甚至扭曲;计算机视觉的知识表明通过光学镜头获取的图像,对于平面形状的两个物体它们之间可以建立射影对应,对于像人脸这种曲面物体在不同角度距离不同相机参数下获取的两幅图像,它们之间不是一个线性对应关系,就是说我们即使获得两张图像中的脸上若干匹配好的点对,还是无法从中推导出其他点的对应。
谈谈SIFT、PCA-SIFT、SURF及我的一点思考收藏
SIFT(Scale-invariantfeaturetransform),Lowe,2004
PCA-SIFT(PrincipleComponentAnalysis),Y.ke,2004
SURF(SpeededUpRobustFeatures),Bay,2006
这三位先后登场各有千秋,算是图像特征点检测领域的宋氏三姐妹了!
SIFT鼻祖先宗大佬,PCA-SIFT将SIFT中直方图方法换作主元分析法,SURF取出integral/Hessian两样法宝实现加速,也更易于并行。
下面,先整理SIFT思路:
1. 输入图像,建议做double(width*=2,height*=2,size*=4), 并高斯过滤进行平滑。
2. 由图片size决定建几个塔,每塔几层图像(一般3-5层)。
0塔的第0层是原始图像(或你double后的图像),往上每一层是对其下一层进行Laplacian变换(高斯卷积,其中sigma值渐大,例如可以是sigma,k*sigma,k*k*sigma…),直观上看来越往上图片越模糊。
塔间的图片是降采样关系,例如1塔的第0层可以由0塔的第3层downsample得到,然后进行与0塔类似的高斯卷积操作。
3. 构建DoG金字塔。
DoG金字塔由上一步生成的Gauss金字塔计算得到,塔数相同,每塔层数少1,因为DoG的每一层由Gauss的相邻两层相减得到。
4. 在DoG塔里进行极值点检测,并根据用户预设的对比度阈值、主曲率阈值去除不合法特征点。
极值点检测用的Non-MaximalSuppression,即在3*3*3个点中进行灰度值比较,最小或最大才过关。
5. 计算每个特征点的尺度。
注意塔间尺度关系,sigma*2.0^(octvs+intvl/intvls)
6. 计算每个特征点的梯度模值和方向。
用特征点周围一个矩阵区域(patch)内的点来描述该特征点,用的直方图进行模值统计并寻找主方向,主方向可以不止一个。
7. 最后要生成64D或128D的特征描述符了。
对齐主方向,计算方向直方图2D数组,假如每个直方图有8bin,那么64D(2*2*8bin)或128D(4*4*8bin)。
大面儿上说,SURFvs.SIFT:
SIFT
SURF
特征点检测
用不同尺度的图片与高斯函数做卷积
用不同大小的boxfilter与原始图像(integralimage)做卷积,易于并行
方向
特征点邻接矩形区域内,利用梯度直方图计算
特征点邻接圆域内,计算x、y方向上的Haar小波响应
描述符生成
20*20(单位为pixel)区域划分为4*4(或2*2)的子区域,每个子域计算8bin直方图
20*20(单位为sigma)区域划分为4*4子域,每个子域计算5*5个采样点的Haar小波响 应,记录∑dx, ∑dy, ∑|dx|,∑|dy|。
SURF基于integralimage,利用determinationofHessianmatrix来描述极值点,也就是可能的特征点。
那么什么是积分图像?
在这里Hessian矩阵又是什么?
怎么求得这个det(H)?
它怎么样了就是极值点了?
boxfilter是怎么来地,什么样儿?
这里有相关文档和源码下载,很详细很清晰,这里我就不八了,您佬哪里不明白,跟帖交流。
我比较好奇的是,Bay是如何发现integralimage*boxfilter与高斯卷积这层近似关系的?
为什么他会想到这么做?
此外,基于integralimage*Haarwaveletfilter进行主方向的判定及描述符的生成,这样的卷积结果是什么?
又说明了什么?
是一种与邻接点差异或变化率的反映?
Integralimageissofabulous。
有兴趣的朋友一起讨论一下?
LuoJuan对这三种算法进行了实验比较,衡量参数有Processingtime/scale/changes/rotation/blur/illumination/affine,衡量指标有重复度或RANSAC内点概率,图片库来自这里。
下面是大体赛况,您可以搜索"AcomparisonofSIFT,PCA-SIFTandSURF"看直播。
method
Time
Scale
Rotation
Blur
Illumination
Affine
Sift
common
best
best
common
common
good
PCA-sift
good
good
good
best
good
best
Surf
best
common
common
good
best
good
另外,SIFT、SURF也分别有了GPU实现,欢迎一起探讨学习!
SIFTonGPU,S.Heymann,2005
SIFTonGPU
(2),SudiptaN.Sinha,2006
SURFonGPU,NicoCornelis,2008
故用计算机求二次多项式拟合曲线则仅仅需要做如下工作:
VC程序代码:
voidCTestView:
:
OnHanshuquxian()
{
//--屏幕画图-------------------------
CTestDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
CDC*pDC=GetDC();
//-----------------------------------
inti;
intData_y[7]={0,0,0,0,20,40,60}; //y坐标数据
intData_x[7]={0,20,40,60,80,100,120}; //x坐标数据
doubleK1=0,K2=0,K3=0,K4=0,K5=0,K6=0,K7=0,y=0,a0=0,a1=0,a2=0;
//原始数据显示:
for(i=0;i<7;i++)
{
Step_Trake(pDC->GetSafeHdc(),300+Data_x[i],300+Data_y[i],1);//屏幕输出(蓝点)
}
//拟合曲线:
for(i=0;i<7;i++)
{
K1+=Data_x[i];
K2+=Data_y[i];
K3+=Data_x[i]*Data_y[i];
K4+=Data_x[i]*Data_x[i];
K5+=Data_x[i]*Data_x[i]*Data_y[i];
K6+=Data_x[i]*Data_x[i]*Data_x[i];
K7+=Data_x[i]*Data_x[i]*Data_x[i]*Data_x[i];
}
a2=(K1*K5-K3*K4-(7*K3-K1*K2)*(K1*K6-K4*K4)/(7*K4-K1*K1))/(K1*K7-K6*K4-(7*K6-K1*K4)*(K1*K6-K4*K4)/(7*K4-K1*K1));
a1=(7*K3-K1*K2-a2*(7*K6-K1*K4))/(7*K4-K1*K1);
a0=(K2-a1*K1-a2*K4)/7.0;
//拟合曲线显示:
for(i=0;i<7;i++)
{
y=a0+a1*Data_x[i]+a2*Data_x[i]*Data_x[i];
Step_Trake(pDC->GetSafeHdc(),300+Data_x[i],300+(int)y,0);//屏幕输出(红点)
}
}
显示的图像:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 强大 物体 识别 算法
![提示](https://static.bdocx.com/images/bang_tan.gif)