HOG + SVM
我们常常会选取一些图片中的特征来代表这个图片中的内容,图片中物体的edge是很有力的特征。这样来说,我们可以用canny找到图片中的物体的edge。但是找到的edge只是大小,并没有gradient的信息。所以在这里我们提取gradient,生成它的特征信息。
输入图片
对图片进行颜色和对比度的归一化处理
计算gradient:
这一项稍微复杂一些,我们分开来说。
- 首先将图片分割成一个个 $8 \times 8$ pixel大小的cell,这样的话,一个长度为height, 宽度为 width的图片能生成的cell的个数就是 $\frac{height}{8} \times \frac{width}{8}$.
- 对于每一个cell中的每一个pixel都有我们计算的gradient的方向,将0-360划分为8个方向,然后将 $8 \times 8$ pixel中每一个pixel的方向都统计在这八个方向上,这样一来,我们的这64个pixel就可以保存为一个 $1\times 8$ 的histogram vector;
- 由于 $8 \times 8$ pixel 的感受面积还是比较小,可能无法感知到光线的变化,所以我们进一步将一个 $2 \times 2$ 的cell当做一个block,这样,对于一个block中的每一个cell,他都有一个 $1 \times8$的vector,这样四个cell的histogram放在一起就是一个 $ 1 \times 32$ 的histogram vector。
- 然后将这个$ 1 \times 32$ 的histogram vector进行归一化处理,就得到了这一张图的一个特征。对于整个图来讲,我们就得到了一个 $(\frac{height}{8} \times \frac{width}{8}\times32)$ 的特征。
我们将histogram vector拿出来作为图片是否是某种物体的特征,然后将这些特征放入一个SVM中,设置一个score,来判定是否有我们想要的物体。
Viola - Jones face detector (Harr+Adaboost)
- Harr-like feature
- Integral of image
- Adaboost
- Concatenate classifier
SIFT
Space - Scale Extrema detection
SIFT算子的第一步要先重视这里的scale invariant,我们希望SIFT能找到的特征是在各种尺度的情况下都可以成立的。因此,我们需要构建不同的尺度来寻找特征点。
使用DOG来代替LOG
通常情况下,我们用Laplacian of Gaussian来寻找图片中的边缘信息(先平滑,再二次求导),但是用LOG的话计算量会比较大而且复杂,于是我们就发现,可以用两个不同sigma值平滑的gaussian分布做差,得到和LOG类似的形状,也可以实现边缘检测。
提取不同的高斯平滑后的边缘,我们可以得到一个octave。
那为什么我们要octave呢,可能是因为在不同的高斯平滑下,我们找到的边缘是不同的。平滑程度大,找到的边界就会少一些,平滑程度小,产生的噪声就会强一些。不同的平滑程度下,我们得到的是不同的边界。
改变尺度,寻找边缘
在不同尺度下,找相同的特征这个思路很直观。比如说一棵树,我们在远处模糊的看到他的时候,他是一棵树;当我们走进之后,这个数会变得更加清晰,我们还能看出来他是一棵树。这就说明有一些特征信息是具有尺度不变性的。
所以,除了在原图上做blur,我们还需要改变原图的resolution,然后再做一系列的blur。这样对于一张图,我们会得到不同的几个octaves
Keypoint Localization
确定keypoint的步骤分为两步,找到key point,去掉contrast比较弱的key point
- 找到key point,
Orientation Assignment
Local Descriptor Creation