跟传统的用浮点数等高精度单位来描述特征点相比,二进制描述最大的优势是表达紧凑(compact), 即二进制描述只需要用1个bit来描述一个维度。另外,二进制操作也能显著提高计算的效率,这一点很好地体现在了上面所说的程明明的论文里。但二进制描述的缺点也很明显,因为只用1个bit来描述一个维度,因此信息量大大丢失,描述的准确度也因此而降低了。所以,这篇文章要解决的就是这样一个问题。
首先形式化地定义二进制描述:给定一个patch , 它的二进制描述即是寻找一个描述子
, 使得
, 其中
是二进制描述子的维度(简单来说可以想象为用长度为
的01字符串来编码一个区域)。为了方便套用分类算法的框架等原因,作者用{1,-1} 而不是{1,0}。然后对于任意一维
,有
有了目标函数以后,下一步就是构建训练集、损失函数,并训练分类器。首先作者随机选了一些点,然后以这些点为中心取了对图像块,记为
,其中
;当且仅当图像块
是同一个块,否则等于-1。然后损失函数定义为
其中就是patch包含的区域,
是在
中的某个元素(方向),
是预定义阈值,
是
点的梯度方向,
是预定义的量化级别。式子(1.4)看起来很复杂,其实就是在区域的各个方向上求梯度,用梯度的方向描述一个区域。具体来说,在
内
当且仅当
,所以
其实就是衡量
点的梯度方向与方向
的偏差是否在一定范围内,
则是描述了patch内的所有像素梯度在某个方向上的强度,如果这个强度大于阈值
,我们就将这个方向上的值标为-1,否则为1,那么就可以用
位的字符串来表示这个区域了(梯度方向真是一个神器啊!)。然后不断迭代产生新的分类器,再将这些分类器做boosting得到最后的结果,整篇文章的内容到这里就结束了。还有最后找了下,发现他们12年NIPS的那篇Learning Image Descriptors with the Boosting-Trick的跟这篇几乎一样,╮(╯▽╰)╭,不知说什么好了…,难怪几个大神说CVPR 开始水起来了…今年我也去水一把试试…
转载自:http://blog.youkuaiyun.com/k123han123/article/details/24579697