node package manager


Histogram of Oriented Gradients (HOG) descriptor extractor


hog-descriptor extracts a Histogram of Oriented Gradients descriptor from an image (canvas):

var hog = require("hog-descriptor");
var descriptor = hog.extractHOG(canvas);
console.log(descriptor); // [0.455, 0.003, 0.987, ...] 


For node.js:

npm install hog-descriptor


extractHOG() takes options for the cell size (default is 4 pixels), block size (default is 2 cells), block stride (default is blockSize / 2), number of bins per orientation histogram (default is 6), and block normalization method (one of "L1", "L1-sqrt", and default "L2"):

var options = {
  cellSize: 4,    // length of cell in px 
  blockSize: 2,   // length of block in number of cells 
  blockStride: 1, // number of cells to slide block window by (block overlap) 
  bins: 6,        // bins per histogram 
  norm: 'L2'      // block normalization method 
var descriptor = hog.extractHOG(canvas, options);

Other Goodies

In the process of computing a HOG descriptor, a bunch of other intermediate things have to be computed, like the image gradient, so these steps are also provided as secret goodies on the library:

Get a 2d array of the pixel intensities (normalized to fall between 0 and 1):

var intensities = hog.intensities(canvas);

The return array is indexed first by row (y direction) then by column (x direction).

Get a 2d array of the image gradient at each pixel of the canvas with respect to the vertical and horizontal directions using a [-1, 0, 1] filter:

var gradients = hog.gradients(canvas);

Return looks like this:

   x: [[0.0084, 0.354] /* , ... */],
   y: [[0.056, 0.7888] /* , ... */]

Get a 2d array of the gradient vectors at each pixel of the canvas:

var vectors = hog.gradientVectors(canvas);

Return value is the vector at each pixel with mag and orient for magnitude and orientation (in radians):

[[{ mag: 0.4, orient: -1.52} /*, ... */]]

Greyscales a canvas:


Draws the gradient of the canvas with respect to 'x' or 'y' direction:

hog.drawGradient(canvas, 'x')

hog.drawGradient(canvas, 'y')

Draws the magnitude of the gradient vectors over the canvas: