2017-07-07 89 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