2017-07-07 86 views
0

我想要计算视频的密集特征轨迹,如https://hal.inria.fr/hal-00725627/document。我想使用OpenCV的生猪的描述是这样的:OpenCV猪功能解释

winSize = (32,32) 
blockSize = (32,32) 
blockStride = (2,2) 
cellSize = (2,2) 
nbins = 9 

hog = cv2.HOGDescriptor(winSize,blockSize,blockStride,cellSize,nbins) 
hist = hog.compute(img) 

然而,这返回大小的一个非常大的特征向量:(160563456,1)。

什么是窗口? (winSize) 什么是块? 什么是细胞? 该文档对解释每个参数是什么并不是特别有帮助。

http://www.learnopencv.com/histogram-of-oriented-gradients/ 我看到要计算HOG,我们为图像修补程序的每个单元创建一个直方图,然后在该修补程序上进行归一化。

我想要的是4个9bin直方图我的图像的每一个(32,32),膏药,它应当从这个补丁(16,16)的细胞的直方图来计算。所以我期望一个最终的大小为40716的宏(480,640)图像。

(((32 * 32)/(16 * 16))* 9)*(((480-16 * 640-16)/(32 * 32)* 4))= 40716

( (PatchSize /细胞大小)* numBins)* numPatches = hogSize

我还看到有人在做这样的东西:

winStride = (8,8) 
padding = (8,8) 
locations = ((10,20),) 
hist = hog.compute(image,winStride,padding,locations) 

不过,我不明白的位置参数做,因为我也不是什么希望仅在一个位置计算HOG特征,但是需要计算我的图像的所有(32,32)块。

+0

文档和链接的文档解释窗口,块和细胞。你为什么问这是什么?这些解释不清楚的是什么? – Piglet

回答

0
cell_size = (16, 16) # h x w in pixels 
    block_size = (2, 2) # h x w in cells 
    nbins = 9 # number of orientation bins 

    # winSize is the size of the image cropped to an multiple of the cell size 
    # cell_size is the size of the cells of the img patch over which to calculate the histograms 
    # block_size is the number of cells which fit in the patch 
    hog = cv2.HOGDescriptor(_winSize=(img.shape[1] // cell_size[1] * cell_size[1], 
             img.shape[0] // cell_size[0] * cell_size[0]), 
          _blockSize=(block_size[1] * cell_size[1], 
             block_size[0] * cell_size[0]), 
          _blockStride=(cell_size[1], cell_size[0]), 
          _cellSize=(cell_size[1], cell_size[0]), 
          _nbins=nbins) 


    self.hog = hog.compute(img) 
+0

此代码是否回答您的问题? –

+0

,这不完全符合我链接的教程。你应该仔细检查一下。本教程以像素为单位给出所有尺寸 – Piglet

+0

我以这种方式获得了正确数量的HOG特征。 (与我意识到我误解了有关DFT的论文的问题略有不同)。这给每个32个32个补丁有9个分箱4个直方图。 – Eli

0

我们将图像分成mxn像素的单元格。假设8x8。 因此,64x64图像将导致8x8像素的8x8单元格。

,以降低整体亮度效果,我们添加一个正常化停止入特征计算。一个块包含几个单元格。我们不是对每个单元进行归一化处理,而是在一个块上进行归一化。 32x32像素块将包含4x4 8x8像素单元。

窗口是我们计算的特征描述图像的一部分。假设你想在大图中找到64x64像素的东西。这样,你会滑过图像64×64像素的窗口,并计算出每个位置,你再使用找到最佳匹配的位置的特征描述信息...

这一切都在文件中。只要阅读并试验,直到你理解它。 如果你不能按照文档,阅读源代码,看看是怎么一行行。

+0

因此,窗口大小应该是整个图像,因为我想要整个图像的描述符。 这些文档实际上并不清楚任何参数的含义。 http://docs.opencv.org/2.4/modules/gpu/doc/object_detection.html?highlight=hog#gpu::HOGDescriptor 例如:BLOCK_SIZE - 块大小的像素。与单元格大小对齐。目前只支持(16,16)。 如果我不知道块是什么或是什么是一个单元格,就毫无意义。 更好的版本是“block_size - 根据单元数量计算规范化的块的大小” – Eli

+0

@Eli是的,文档确实不是很好。但OpenCV是开源的,可以随时贡献和改进文档。 – Piglet