mirror of
https://github.com/wassname/scikit-image.git
synced 2026-06-29 17:21:18 +08:00
added HOG example
This commit is contained in:
committed by
Stefan van der Walt
parent
7a0c1f6f8b
commit
8a4bd8510d
@@ -0,0 +1,105 @@
|
||||
r'''
|
||||
===============================
|
||||
Histogram of Oriented Gradients
|
||||
===============================
|
||||
|
||||
The Histogram of Oriented Gradient (HOG) feature descriptor is popular
|
||||
for object detection
|
||||
<http://en.wikipedia.org/wiki/Histogram_of_oriented_gradients>`__.
|
||||
|
||||
In the following example, we compute the HOG descriptor and display
|
||||
a visualisation.
|
||||
|
||||
Algorithm overview
|
||||
------------------
|
||||
|
||||
Compute a Histogram of Oriented Gradients (HOG) by
|
||||
1) (optional) global image normalisation
|
||||
2) computing the gradient image in x and y
|
||||
3) computing gradient histograms
|
||||
3) normalising across blocks
|
||||
4) flattening into a feature vector
|
||||
|
||||
The first stage applies an optional global image normalisation
|
||||
equalisation that is designed to reduce the influence of illumination
|
||||
effects. In practice we use gamma (power law) compression, either
|
||||
computing the square root or the log of each colour channel.
|
||||
Image texture strength is typically proportional to the local surface
|
||||
illumination so this compression helps to reduce the effects of local
|
||||
shadowing and illumination variations.
|
||||
|
||||
The second stage computes first order image gradients. These capture
|
||||
contour, silhouette and some texture information, while providing
|
||||
further resistance to illumination variations. The locally dominant
|
||||
colour channel is used, which provides colour invariance to a large
|
||||
extent. Variant methods may also include second order image derivatives,
|
||||
which act as primitive bar detectors - a useful feature for capturing,
|
||||
e.g. bar like structures in bicycles and limbs in humans.
|
||||
|
||||
The third stage aims to produce an encoding that is sensitive to
|
||||
local image content while remaining resistant to small changes in
|
||||
pose or appearance. The adopted method pools gradient orientation
|
||||
information locally in the same way as the SIFT [Lowe 2004]
|
||||
feature. The image window is divided into small spatial regions,
|
||||
called "cells". For each cell we accumulate a local 1-D histogram
|
||||
of gradient or edge orientations over all the pixels in the
|
||||
cell. This combined cell-level 1-D histogram forms the basic
|
||||
"orientation histogram" representation. Each orientation histogram
|
||||
divides the gradient angle range into a fixed number of
|
||||
predetermined bins. The gradient magnitudes of the pixels in the
|
||||
cell are used to vote into the orientation histogram.
|
||||
|
||||
The fourth stage computes normalisation, which takes local groups of
|
||||
cells and contrast normalises their overall responses before passing
|
||||
to next stage. Normalisation introduces better invariance to illumination,
|
||||
shadowing, and edge contrast. It is performed by accumulating a measure
|
||||
of local histogram "energy" over local groups of cells that we call
|
||||
"blocks". The result is used to normalise each cell in the block.
|
||||
Typically each individual cell is shared between several blocks, but
|
||||
its normalisations are block dependent and thus different. The cell
|
||||
thus appears several times in the final output vector with different
|
||||
normalisations. This may seem redundant but it improves the performance.
|
||||
We refer to the normalised block descriptors as Histogram of Oriented
|
||||
Gradient (HOG) descriptors.
|
||||
|
||||
The final step collects the HOG descriptors from all blocks of a dense
|
||||
overlapping grid of blocks covering the detection window into a combined
|
||||
feature vector for use in the window classifier.
|
||||
|
||||
References
|
||||
----------
|
||||
|
||||
.. [1] Dalal, N and Triggs, B, Histograms of Oriented Gradients for
|
||||
Human Detection, IEEE Computer Society Conference on Computer
|
||||
Vision and Pattern Recognition 2005 San Diego, CA, USA
|
||||
'''
|
||||
|
||||
from scikits.image.feature import hog
|
||||
from scikits.image import data
|
||||
from scikits.image.color import rgb2grey
|
||||
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
|
||||
# Construct test image
|
||||
|
||||
image = data.lena()
|
||||
|
||||
# HOG
|
||||
|
||||
grey = rgb2grey(image)
|
||||
|
||||
fd, hog_image = hog(grey, orientations=8, pixels_per_cell=(16, 16),
|
||||
cells_per_block=(1, 1), visualise=True)
|
||||
|
||||
plt.figure(figsize=(12, 5))
|
||||
|
||||
plt.subplot(121)
|
||||
plt.imshow(grey, cmap=plt.cm.gray)
|
||||
plt.title('Input image')
|
||||
|
||||
plt.subplot(122)
|
||||
plt.imshow(hog_image, cmap=plt.cm.gray)
|
||||
plt.title('Histogram of Oriented Gradients')
|
||||
plt.show()
|
||||
Reference in New Issue
Block a user