## Paper: Histograms of Oriented Gradients for Human Detection.

The approach lists the points that interest me.  This is NOT an exhaustive summary of the paper.

Approach:

1. First you calculate the gradients.  They tested various ways of doing this and concluded that a simple [-1,0,1] filter was best.  After this calculation you will have a direction and a magnitude for each pixel.
2. Divide the angle of direction in bins (Notice that you can divide 180 or 360 degrees).  This is just a way to gather gradient directions into bins.  A bin can be all the angles from 0 to 30 degrees.
3. Divide the image in cells.  Each pixel in the cell adds to a histogram of orientations based on the angle division in 2.  Two really cool things to note here:
1. You can avoid aliasing by interpolating votes between neighboring bins
2. The magnitude of the gradient controls the way the vote is counted in the histogram
4. Note that each cell is a histogram that contains the “amount” of all gradient directions in that cell.
5. Create a way to group adjacent cell histograms and call it a block.  For each block (group of cells) you will “normalize” it.  Papers suggests something like v/sqrt(|v|^2 + e^2). Note that V is the vector representing the adjacent cell histograms of the block.  Further not that || is the L-2 norm of the vector.
6. Now move through the image in block steps.  Each block you create is to be “normalized”.  The way you move through the image allows for cells to be in more than one block (Though this is not necessary).
7. For each block in the image you will get a “normalized” vector.  All these vectors placed one after another is the HOG. 