Efficiently compute histogram of oriented gradient (HOG) features. Heavily optimized code to compute HOG features described in "Histograms of Oriented Gradients for Human Detection" by Dalal & Triggs, CVPR05. This function is made largely obsolete by fhog, see fhog.m for details. If I has dimensions [hxw], the size of the computed feature vector H is floor([h/binSize w/binSize nOrients*4]). For each binSize x binSize region, computes a histogram of gradients, with each gradient quantized by its angle and weighed by its magnitude. For color images, the gradient is computed separately for each color channel and the one with maximum magnitude is used. The centered gradient is used except at boundaries (where uncentered gradient is used). Trilinear interpolation is used to place each gradient in the appropriate spatial and orientation bin. For each resulting histogram (with nOrients bins), four different normalizations are computed using adjacent histograms, resulting in a nOrients*4 length feature vector for each region. To compute the normalizations, first for each block of adjacent 2x2 histograms we compute their L2 norm (over all 4*nOrient bins). Each histogram (except at boundaries) thus has 4 different normalization values associated with it. Each histogram bin is then normalized by each of the 4 different L2 norms, resulting in a 4 times expansion of the number of bins. Finally, any bin whose value is bigger than "clip" is set to "clip". The computed features are NOT identical to those described in the CVPR05 paper. Specifically, there is no Gaussian spatial window, and other minor details differ. The choices were made for speed of the resulting code: ~.008s for a 640x480x3 color image on a standard machine from 2011. This function is essentially a wrapper for calls to gradientMag() and gradientHist(). Specifically, it is equivalent to the following: [M,O] = gradientMag( I ); softBin = 1; useHog = 1; H = gradientHist(M,O,binSize,nOrients,softBin,useHog,clip); See gradientHist() for more general usage. This code requires SSE2 to compile and run (most modern Intel and AMD processors support SSE2). Please see: http://en.wikipedia.org/wiki/SSE2. USAGE H = hog( I, [binSize], [nOrients], [clip], [crop] ) INPUTS I - [hxw] color or grayscale input image (must have type single) binSize - [8] spatial bin size nOrients - [9] number of orientation bins clip - [.2] value at which to clip histogram bins crop - [0] if true crop boundaries OUTPUTS H - [h/binSize w/binSize nOrients*4] computed hog features EXAMPLE I=imResample(single(imread('peppers.png')),[480 640])/255; tic, for i=1:125, H=hog(I,8,9); end; toc % ~1s for 125 iterations figure(1); im(I); V=hogDraw(H,25); figure(2); im(V) See also hogDraw, gradientHist Piotr's Computer Vision Matlab Toolbox Version 3.23 Copyright 2014 Piotr Dollar. [pdollar-at-gmail.com] Licensed under the Simplified BSD License [see external/bsd.txt]