今天读的是 CVPR 2013 的 Boosting Binary Keypoint Descriptors,是一篇有关用二进制来描述图像块
(patch)的文章。另外 mingming cheng 2013 年也有一篇是用二进制的,不过是对整幅图像进行描述的,
后面再介绍吧。
跟传统的用浮点数等高精度单位来描述特征点相比,二进制描述最大的优势是表达紧凑(compact), 即二
进制描述只需要用 1 个 bit 来描述一个维度。另外,二进制操作也能显著提高计算的效率,这一点很好地体
现在了上面所说的程明明的论文里。但二进制描述的缺点也很明显,因为只用 1 个 bit 来描述一个维度,因
此信息量大大丢失,描述的准确度也因此而降低了。所以,这篇文章要解决的就是这样一个问题。
首先形式化地定义二进制描述:给定一个 patch
, 它的二进制描述即是寻找一个描述子
, 使得
1
( ) [ ( ),..., ( )]
D
CC C=xx x
, 其中
是二进制描述子的维度(简单来说可以想象为用长度为
的 01
字符串来编码一个区域)。为了方便套用分类算法的框架等原因,作者用{1,-1} 而不是{1,0}。然后对于任
意一维
,定义
如下:
( ) sgn( ( ))
T
d dd
C =x bh x
(1.1)
这里假设我们有
个弱分类器,
代表了每个弱分类器的权重,
,1 ,
( ) [ ( ),..., ( )]
T
d d dK
hh=hx x x
对应就是 K 个弱分类器。这里解释下它的核心思想,当取
的时
候,也就是只有一个分类器的时候,用分类器对图像块在某个维度进行描述的思想其实可以看成分类器将
图像块映射到一个实数上(类似 hash)。然后又因为只用一个分类器往往结果不准确(例如把不同的图像
块 hash 到同一个实数上去了),所以本文才套用 Adaboost 的方法,用
个弱分类器的加权和来提高其
准确性。Adaboost 这一常识性的工具就不多叙述了。整个文章方法的框架如下图所示:
有了目标函数以后,下一步就是构建训练集、损失函数,并训练分类器。首先作者随机选了一些点,然后
以这些点为中心取了
对图像块,记为
,其中
当且仅当图像块
,
是同一个
块,否则等于-1。然后损失函数定义为
评论2
最新资源