我已经下载了三种不同的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.
哪一个是正确的?
答案 0 :(得分:4)
一切都是正确的。事情是HOG特征提取功能默认参数随包而异。 (例如 - opencv,matlab,scikit-image等)。通过参数我的意思是,胜利,步幅,块大小,规模等。
通常HOG描述符长度为:
Length = Number of Blocks x Cells in each Block x Number of Bins in each Cell
由于一切都是正确的,您可以使用哪种方式来回答。 您可以尝试不同的参数值并选择适合您的参数值。由于找不到正确的值没有固定的方法,如果您知道每个参数的变化如何影响结果,将会很有帮助。
单元格大小:如果您增加此值,则可能无法捕获小细节。
块大小:同样,大单元格大的大块可能无法帮助您捕获小细节。此外,由于大块意味着照明变化可能更多并且由于梯度归一化步骤,许多细节将丢失。所以选择相应的。
重叠/跨步:如果选择重叠块,这又可以帮助您捕获有关图像补丁的更多信息。通常它被设置为块大小的一半。
您可以通过相应地选择上述参数的值来获得大量信息。但是描述符长度将变得不必要地长。
希望这有帮助:)