目标检测(Object Detection)原理与实现(四)

来源:互联网 发布:matlab矩阵叉乘 编辑:程序博客网 时间:2024/06/04 17:52

基于ASM的目标检测

       ASM(Active Shape Model:主动形状模型)是Tim Cootes于1995年提出来的,其实是在1992年提交,1994年被接受,1995被发表的。ASM方法是通过寻找一系列匹配点来检测形状的方法,和单纯的基于shift(或者surf)特征点匹配的方法不一样,后者是通过互相独立的shift(或者surf)特征点匹配来做目标检测,当模版图像和待匹配图像之间的大多数shift(或者surf)匹配上了,就宣称目标找到,优点是仿射不变(旋转,缩放,简单的仿射变换),缺点是发生目标发生形变的时候,此种方法会失效。而ASM可适用于有形变的目标检测,这种方法和上节的霍夫投票的方法都是基于统计学习的框架来做的,ASM通过前期训练 (build阶段)来获得一个目标的部件轮廓点分布模型,检测阶段(fit)通过匹配各个部件轮廓点来完成目标检测,咋一听,也是基于特征点匹配的,但是这些特征点之间不是独立的,所有特征点都在小范围内寻找配对点,当所有配对之间的距离之和最小时就宣称完成了目标检测,也就是说每个特征点配对都最满意咯大笑。同样搜索也会陷入局部最小,只有模型初始位置选的好,然后模型上的每个点小范围内搜索下就完成了匹配,因此初始的位置预估的好坏也影响着ASM的性能,这是他的缺点,一般要借助于其他方法来进行初始位置的预估,比如人脸匹配就要接助于cascade等方法来检测到人脸的位置,然后进行ASM匹配。TimCootes后来还提出了AAM(ActiveAppearance model:主动外观模型)算法,顾名思义偏重于纹理而不是形状,二者的主要区别如下:

      1、ASM仅使用一小块图像区域的纹理来寻找特征点,而AAM则使用整个特征点区域的图像。

      2、ASM搜索特征点的准则是沿着图像边界的法线来寻找,而AAM仅在当前位置采样。

      3、ASM是为了寻找所有特征点匹配距离最小,AAM则是使得合成模型图像和目标图像匹配代价最小。

下面就来看看ASM的工作原理吧:

一、模型的建立(build)

第一步:选择合适的特征点

选择好的特征点对匹配起着决定性作用。好的特征点大概应该或多或少满足如下几点:边缘点、曲率大的、T型连接点和以上这些点的连线上的等分点,如(图一)所示:

(图一)

这些特征点是有序的,通过一系列特征点来描述物体,把这些特征点的坐标串起来形成一个2n维的向量:

,注意坐标不是成对排列的,如上述表达式所示,先是排列X,后排列Y。而这只是一个图像实例形状的描述,假设我们的训练集有S个图像,那么这S个2n维的向量则构成了2n维的向量分布,同样也可以构成一个2n维的向量空间,说到向量空间就有点类似于稀疏编码的基咯,这个话题就此打住,感兴趣的可以翻看前面关于稀疏编码的博文。这个向量分布可以描述大多数的图像模型,同样也可以生成一个类似于原始训练集的图像目标实例。如果这个实例很像训练集中的图像形状样子,那么这个分布是可靠的。那怎么来得到这个分布呢?

    考虑到S个手工标注2n维的向量冗余信息很大,可以对其采用PCA方法进行降维。相当于在这个2n维的向量空间里找到几个空间轴来描述分布。基于此作者直接假设了下面的一个模型,如(公式一)所示:


(公式一)

其中P是包含了前t个主成分的协方差矩阵,也就是t个协方差的特征向量,b是一个t维的向量,用来控制特征点形状的变化,可以用(公式二)在训练集中求取,这步还有个问题,就是PCA中主成分个数t的选取,有两种方法:1)选择前s个;2)选择前k%的分量,这里作者推荐使用第二种方法。

(公式二)

当b为0时,X-bar(x上面一横的那个符号)即坐标原点(平均形状),其实是很好理解哈。但这里b不要太大,如果太大,会导致整个形状变化超出人脸的变化范围,会使人变得异常狰狞,大家懂的。。。所以作者这里做了约束,如(图二)和(公式三)所示:


(图二)

(公式三)

 

二、检测阶段(fix)

         这个阶段就像刚开始说的,先用其他第三方方法检测到目标的大概位置,然后把模型初始位置选在那,接着完成两个阶段的任务:一,模型轮廓大概匹配,二,特征点匹配 。模型轮廓大概匹配阶段就是在模型初始位置定位好后,对模型进行一些旋转,平移,缩放的调节,使得模型的朝向和大小和图像中的目标大概差不多,如(公式四)所示:

(公式四)

        其中X表示对应待检测图像中调整后的模型的点,(Xt,Yt)、s、theta分别表示平移,缩放,旋转变换,这些变换在图像处理中经常用到的,具体如(公式五)所示:

(公式五)

        对于公式五中的参数大家可能比较关系怎么求取这些参数,在图像中可以通过几对对应点来求解,这里给给出一些近似方法,这些参数的求取可按(图三)所述步骤来完成:


(图三)

模型轮廓大概匹配之后就进行特征点匹配,具体来说就是沿着轮廓边缘法线的方向进行搜索、匹配,匹配的方法可以使用图像块的SSD方法,SSD就是图像块之间的像素点差的平方和。也可以使用类似sift的方法来匹配,但是sift被申请了专利,没法免费使用,本节的例子使用了类似sift的方法:Histogram Array Transform。

当所有匹配点之间的欧式距离和最短时,就完成了目标检测(匹配)。如(公式六)所示:

(公式六)

其中Y表示待检测图像中每个模型点附近的图像点,找到Y,再利用Y反求b,并且更新b,直到收敛。目标点搜寻匹配准则如(图四)所示:

(图四)

最后对上述来个总结,整体的匹配流程如(图五)所示:

(图五)

       点匹配过程在具体实现中也可以采用金字塔的方式,有粗到精来加快目标点的搜索过程,另外还有些快速判断先验信息,比如先验信息认为特征点主要是图像的强边缘点,并且图像灰度的梯度服从高斯分布,只要找到模型特征点附近梯度最大的值,即认为是特征点所在的位置。但有时这种信息会带来误判,如实验效果(图六)和(图七)所示:

 

(图六)                                                                                (图七)

     (图七)红圈处的眼镜边缘处强的边缘点被误判成特征点。因此该算法还有很多该改进的地方,虽然如此,ASM仍然是获取人脸特征的强有力的方法,这节写的比较仓促,如果有错误的地方,请指出,谢谢。


参考文献:

       An Introduction to Active Shape Models. Tim Cootes

       Locating Facial Features with an Extended Active ShapeModel.Stephen Milborrow

       Comparing Active Shape Models with Active Appearance Models.TimCootes

       Markov Random Field Modeling in Image Analysis. Stan Z.Li

      http://blog.sina.com.cn/s/blog_6d8e91f401015pv5.html


转载请注明来源:http://blog.csdn.net/cuoqu/article/details/9154685