我已经下载了三种不同的 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。

哪一个是正确的?

最佳答案

完全正确。事情是 HOG 特征提取函数 默认 参数因包而异。 (例如 - opencv、matlab、scikit-image 等)。我所说的参数是指 winsize、stride、blocksize、scale 等。

通常 HOG 描述符长度为:

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

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

Cell-size :如果你增加这个,你可能无法捕捉到小细节。

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

Overlap/Stride :如果您选择重叠块,这再次帮助您捕获有关图像补丁的更多信息。通常它设置为块大小的一半。

通过相应地选择上述参数的值,您可能会获得很多信息。但是描述符长度会变得不必要地长。

希望这可以帮助 :)

关于matlab - 不同 HOG 代码的混淆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43773298/

10-12 21:54