混淆在不同的HOG代码中

时间:2017-05-04 03:17:26

标签: matlab computer-vision feature-extraction

我已经下载了三种不同的HoG代码。 使用64x128的图像

1)使用matlab函数:extractHOGFeatures

[hog, vis] = extractHOGFeatures(img,'CellSize',[8 8]);

hog的大小为3780.

如何计算:

HOG要素长度N基于图像大小和函数参数值。

N = prod([BlocksPerImage, BlockSize, NumBins])
BlocksPerImage = floor((size(I)./CellSize – BlockSize)./(BlockSize – BlockOverlap) + 1)

2)从here下载第二个HOG功能。 使用相同的图像

H = hog( double(rgb2gray(img)), 8, 9 );

 %  I        - [mxn] color or grayscale input image (must have type double)
%  sBin     - [8] spatial bin size
%  oBin     - [9] number of orientation bins

H的大小为3024

如何计算:

H        - [m/sBin-2 n/sBin-2 oBin*4] computed hog features

3)来自vl_feat的HoG代码。

cellSize = 8;
 hog = vl_hog(im2single(rgb2gray(img)), cellSize, 'verbose','variant', 'dalaltriggs') ;
vl_hog: image: [64 x 128 x 1]
vl_hog: descriptor: [8 x 16 x 36]
vl_hog: number of orientations: 9
vl_hog: bilinear orientation assignments: no
vl_hog: variant: DalalTriggs
vl_hog: input type: Image

输出为4608.

哪一个是正确的?

1 个答案:

答案 0 :(得分:4)

一切都是正确的。事情是HOG特征提取功能默认参数随包而异。 (例如 - opencv,matlab,scikit-image等)。通过参数我的意思是,胜利,步幅,块大小,规模等。

通常HOG描述符长度为:

 Length = Number of Blocks x Cells in each Block x Number of Bins in each Cell

由于一切都是正确的,您可以使用哪种方式来回答。 您可以尝试不同的参数值并选择适合您的参数值。由于找不到正确的值没有固定的方法,如果您知道每个参数的变化如何影响结果,将会很有帮助。

单元格大小:如果您增加此值,则可能无法捕获小细节。

块大小:同样,大单元格大的大块可能无法帮助您捕获小细节。此外,由于大块意味着照明变化可能更多并且由于梯度归一化步骤,许多细节将丢失。所以选择相应的。

重叠/跨步:如果选择重叠块,这又可以帮助您捕获有关图像补丁的更多信息。通常它被设置为块大小的一半。

您可以通过相应地选择上述参数的值来获得大量信息。但是描述符长度将变得不必要地长。

希望这有帮助:)