一、2D Shape Context
1.原理(参考链接1、2)
形状上下文特征多用于形状匹配,目标识别。它采用一种基于形状轮廓的特征描述方法,其在对数极坐标系下利用直方图描述形状特征能够很好地反映轮廓上采样点的分布情况。
形状上下文指的是像素点邻域内的其它像素点的分布情况。
step1:对给定的一个图像,获得图像的轮廓,对轮廓边缘采集到一组离散的点集(共n个点)。
step2:计算形状上下文。以上边获得点集中任意一点作为参考点,将该点作为圆心、R为半径的区域内按对数距离间隔建立N个同心圆。将此区域沿圆周方向M等分,形成如图1所示的靶状模板。该点到其它各点的向量相对位置简化为模板上各扇区内的点分布数。这些点的统计分布直方图,成为该点的形状上下文。
采用对数距离分割可以使形状上下文描述子对邻近的采样点比远离点更敏感,能强化局部特征。轮廓不同点处的形状上下文是不同的,但相似轮廓的对应点处趋于有相似的形状上下文,如图2。
用上述方法,对n个点,每个点作为参考点,最终可以获得n个形状直方图。它描述了整个轮廓形状的特征。采样点越多, 形状表达越精细,计算量也会加大。
step3:计算代价矩阵C,并基于该矩阵进行点的匹配操作。最后结果越大表示越不相似,结果越小表示越相似。
二、3D Shape Context
3DSC是直接在2DSC上扩展而来,扩展为以点P为球心,R为半径的球区域,球的北极点由重建法线来估计。其中,与2Dsc类似,也存在不同大小的同心球,半径的计算方式为:
此时的采样点不再是计算梯度后的采样点,而是相对P点的距离,为了避免P点太近的点类似于噪声的干扰(即采样点太近,造成噪声的干扰影响程度更大),因此需要设置一个最小半径:
相对于2DSC中点数统计方式,3DSC增加了统计区域内点集的每个点不同的权重,其中权重的计算过程如下:
其中v(j, k, l)对应第j个同心球,第k个方位方向,第l个羊角方向区域对应的体积,\varrho反应了局部点的密度,即以P点为球心,a为半径的球体内的点数。
2.优缺点(参考链接1)
优点:充分利用上下文信息,在非刚性物体匹配中,具有很好的鲁棒性。
缺点:对于有背景、噪声点过多的情况,匹配效果很不好。
3.使用opencv3.0计算形状上下文代码
在opencv3.0中封装了ShapeContextDistanceExtractor类(参考链接3、4),使用该类中的函数计算形状上下文只需要两步
1)计算两图像的轮廓点;
2)使用ShapeContextDistanceExtractor中的computeDistance就可以得到两轮廓上下文特征的距离。
#include "opencv2/shape.hpp"
#include