OpenCV中HoG描述子长度计算


发布于

|

分类

之前只管用,这次算了算。算了好久,终于搞定啦。

OpenCV中,设置Hog参数的时候大概是这样写的:

cv::HOGDescriptor hog(
        cv::Size(16, 16),  // winSize
        cv::Size(8, 8),    // blockSize
        cv::Size(4, 4),    // blockStride
        cv::Size(4, 4),    // cellSize
        9                  // nBins
);

所以这样一个设置,对于一幅224*224的图片,最终生成的描述子的大小是多少呢?

首先,我们来计算一下一个窗口的长度。

  1. 最开始是个9,是nBins。也就是每个Cell里面特征长度是9
  2. 然后,一个Block里面能平铺下2*2个Cell,所以还要乘上2*2
  3. Block在Window里面滑动。Window大小是16*16,Block大小是8*8,滑动步长是4*4,所以一个Window里面有((16-8)/4+1)*((16-8)/4+1)次滑动

到这里我们可以算出来一个Window的特征长度是9*(2*2)*(((16-8)/4+1)*((16-8)/4+1))=324。拿hog.getDescriptorSize()看一下,是对的。

然后,再来算一下全图的。这个好像其他地方都没有说。OpenCV认为,Block在Image里面滑动的时候,滑动步长就是你设定的blockStride。所以就这个例子而言,有((224-16)/4+1)*((224-16)/4+1)次滑动。

所以,这个例子里面,特征总长度为 324*(53*53)=910116,与我们使用代码得到的结果是相符的。


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注