Want to improve this question? Update the question so it focuse开发者_Python百科s on one problem only by editing this post.
Closed 6 years ago.
Improve this questionI was wondering, how does face recognition exactly work? Because everyone has a different face, you can't detect some 'general' face or something.
Jun Zhang et al. (1997) investigate three distinct methods of face recognition applicable to computer vision, each a noteworthy domain of statistical analysis in its own right:
1) Eigenface algorithm
2) Elastic matching
3) Autoassociation and classification nets
The eigenface method encodes the statistical variation among face images using some form of dimensionality reduction method (like PCA), where the resulting characteristic differences in the feature space don't necessarily correspond to isolated facial features such as eyes, ears and noses (in other words, the indispensable components of the feature vector are not pre-determined).
Elastic matching generates nodal graphs (ie wireframe model) that correspond to specific contour points of a face, such as the eyes, chin, tip of the nose, etc, and recognition is based on a comparison of image graphs against a known database. Since image graphs can be rotated during the matching process, this system tends to be more robust to large variation in the images.
Classification net recognition utilizes the same geometric characteristics as elastic matching, but fundamentally differs by being a supervised machine learning technique (often involving the use of support vector machines).
Although eigenface detection can underperform other methods when variation in lighting or facial alignment is large, it has the benefit of being easy to implement, computationally efficient, and able to recognize faces in an unsupervised manner, and therefore tends to be a de facto standard. Many state-of-the-art detection techniques also rely on some form of dimensionality reduction prior to recognition, even if feature vector extraction is handled differently.
Here you can find the answer: Face recognition
Every face has numerous, distinguishable landmarks, the different peaks and valleys that make up facial features. FaceIt defines these landmarks as nodal points. Each human face has approximately 80 nodal points. Some of these measured by the software are:
* Distance between the eyes
* Width of the nose
* Depth of the eye sockets
* The shape of the cheekbones
* The length of the jaw line
These nodal points are measured creating a numerical code, called a faceprint, representing the face in the database.
A good way to start is by reading about Principal Component Analysis (PCA also known as Eigenfaces), Fisher's Linear Discriminant Analysis (LDA), and Support Vector Machines (SVMs). These are classification methods that are extremely useful for face classification.
OpenCV already includes excellent implementations of PCA and SVM. An excellent resource for face recognition and classification code for OpenCV in C++ is this website.
One website that offers resources and links to papers for most relevant methods for face classification is this one.
A well explained example of PCA Eigenfaces and LDA with sample code in Matlab that was extremely useful for my first face classification program is here.
This is a complex subject that requires much learning. I'd suggest you start by looking at OpenCV - http://opencv.willowgarage.com/wiki/ - a computer vision library with tutorials etc. Partly it is about not so much a "general face" but about picking out features, and then running a metric - like how far apart or relative orientation of those features.
精彩评论