https://www.learnopencv.com/histogram-of-oriented-gradients/
https://zhuanlan.zhihu.com/p/85829145
https://www.bilibili.com/video/BV117411d7oz?p=3&t=807
选择一个高宽比例固定的滑窗,这个是在原始图像(original image)进行滑窗,比如这里选择的是 100×200,然后resize 成 64×128。
那么一张图可以获得的图片数量是,W 是原始图片的宽,H 是原始图片的高,
分别是滑动窗口的高和宽,stride 是步长
下面这张图的大小是 64宽乘128高(图片块需要有固定的长宽比),分割成 88 的 cell,那么一共有 64/8128/8 = 8*16=128 个网格。
计算梯度幅值和梯度方向
将梯度值根据角度分配到直方图中,直方图包含了 9 个 bin 来对应 0,20,40,…160 这些角度。
上图左边是梯度方向(也就是角度),右边是梯度幅值,梯度幅值为 2 对应的角度是 80 度(上图蓝色标记),在直方图可以找到对应的角度,所以直接赋值给 80度这个bin,幅度为 4 对应的角度为 10 度(上图红色标记),在直方图找不到对应位置,所以需要进行分配,示意图如下,因为 10度刚好在 0和20度中间,所以按照比例一半给 0度这个bin,一半给 20度这个bin。
下图,幅值为 85 对应的角度是 165,有个前提条件是 0 度和 180度是一样的,所以相当于要把 85 按照比例分给 0 度和 160度这两个bin(因为 165 处于 160度和180度之间,而0 度和 180 度是等价的)
分配给0度这个bin的值是 ,分配给 160度这个bin是值是
每一个 8×8的cell 会生成一个 9 bin的直方图,如下所示:
下面需要进行归一化操作,具体过程是这样的,我们以 4 个 8×8 cell 为一组,就是下图中的蓝色滑窗,每一个滑窗包含 4 个 cell,而每个cell 可以产生 9 个bin,所以一个滑窗可以获得 36 个bin,对这 36维进行归一化,假设这个向量是 那么归一化就是
从左至右,从上到下进行窗口滑动,这样就可以得到 7×15=105 个滑窗。
所以一张 64×128 大小的图可以获得 维的向量
所以一张原始输入图片获得的特征数量是