140 lines
5.6 KiB
C++
140 lines
5.6 KiB
C++
// Copyright (C) 2014 Davis E. King (davis@dlib.net)
|
|
// License: Boost Software License See LICENSE.txt for the full license.
|
|
#undef DLIB_LBP_ABSTRACT_Hh_
|
|
#ifdef DLIB_LBP_ABSTRACT_Hh_
|
|
|
|
#include "../image_processing/generic_image.h"
|
|
#include "../pixel.h"
|
|
|
|
namespace dlib
|
|
{
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename image_type,
|
|
typename image_type2
|
|
>
|
|
void make_uniform_lbp_image (
|
|
const image_type& img,
|
|
image_type2& lbp
|
|
);
|
|
/*!
|
|
requires
|
|
- image_type == an image object that implements the interface defined in
|
|
dlib/image_processing/generic_image.h
|
|
- image_type2 == an image object that implements the interface defined in
|
|
dlib/image_processing/generic_image.h
|
|
- image_type2 should contain a grayscale pixel type such as unsigned char.
|
|
ensures
|
|
- #lbp.nr() == img.nr()
|
|
- #lbp.nc() == img.nc()
|
|
- This function extracts the uniform local-binary-pattern feature at every pixel
|
|
and stores it into #lbp. In particular, we have the following for all valid
|
|
r and c:
|
|
- #lbp[r][c] == the uniform LBP for the 3x3 pixel window centered on img[r][c].
|
|
In particular, this is a value in the range 0 to 58 inclusive.
|
|
- We use the idea of uniform LBPs from the paper:
|
|
Face Description with Local Binary Patterns: Application to Face Recognition
|
|
by Ahonen, Hadid, and Pietikainen.
|
|
!*/
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename image_type,
|
|
typename T
|
|
>
|
|
void extract_histogram_descriptors (
|
|
const image_type& img,
|
|
const point& loc,
|
|
std::vector<T>& histograms,
|
|
const unsigned int cell_size = 10,
|
|
const unsigned int block_size = 4,
|
|
const unsigned int max_val = 58
|
|
);
|
|
/*!
|
|
requires
|
|
- image_type == an image object that implements the interface defined in
|
|
dlib/image_processing/generic_image.h
|
|
- image_type contains unsigned char valued pixels.
|
|
- T is some scalar type like int or double
|
|
- All pixel values in img are <= max_val
|
|
- cell_size >= 1
|
|
- block_size >= 1
|
|
- max_val < 256
|
|
ensures
|
|
- This function extracts histograms of pixel values from block_size*block_size
|
|
windows in the area in img immediately around img[loc.y()][loc.x()]. The
|
|
histograms are appended onto the end of #histograms. Each window is
|
|
cell_size pixels wide and tall. Moreover, the windows do not overlap.
|
|
- #histograms.size() == histograms.size() + block_size*block_size*(max_val+1)
|
|
!*/
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename image_type,
|
|
typename T
|
|
>
|
|
void extract_uniform_lbp_descriptors (
|
|
const image_type& img,
|
|
std::vector<T>& feats,
|
|
const unsigned int cell_size = 10
|
|
);
|
|
/*!
|
|
requires
|
|
- cell_size >= 1
|
|
- T is some scalar type like int or double
|
|
ensures
|
|
- Extracts histograms of uniform local-binary-patterns from img. The
|
|
histograms are from densely tiled windows that are cell_size pixels wide and
|
|
tall. The windows do not overlap and cover all of img.
|
|
- #feats.size() == 59*(number of windows that fit into img)
|
|
(i.e. #feats contains the LBP histograms)
|
|
- We will have taken the square root of all the histogram elements. That is,
|
|
#feats[i] is the square root of the number of LBPs that appeared in its
|
|
corresponding window.
|
|
!*/
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename image_type,
|
|
typename T
|
|
>
|
|
void extract_highdim_face_lbp_descriptors (
|
|
const image_type& img,
|
|
const full_object_detection& det,
|
|
std::vector<T>& feats
|
|
);
|
|
/*!
|
|
requires
|
|
- T is some scalar type like int or double
|
|
- det.num_parts() == 68
|
|
ensures
|
|
- This function extracts the high-dimensional LBP feature described in the
|
|
paper:
|
|
Blessing of Dimensionality: High-dimensional Feature and Its Efficient
|
|
Compression for Face Verification by Dong Chen, Xudong Cao, Fang Wen, and
|
|
Jian Sun
|
|
- #feats == the high-dimensional LBP descriptor. It is the concatenation of
|
|
many LBP histograms, each extracted from different scales and from different
|
|
windows around different face landmarks. We also take the square root of
|
|
each histogram element before storing it into #feats.
|
|
- #feats.size() == 99120
|
|
- This function assumes img has already been aligned and normalized to a
|
|
standard size.
|
|
- This function assumes det contains a human face detection with face parts
|
|
annotated using the annotation scheme from the iBUG 300-W face landmark
|
|
dataset. This means that det.part(i) gives the locations of different face
|
|
landmarks according to the iBUG 300-W annotation scheme.
|
|
!*/
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
}
|
|
|
|
#endif // DLIB_LBP_ABSTRACT_Hh_
|
|
|