I need to extract and select features from a face image. I have extracted the basic Texture , Color and Shape features using the inbuilt matlab functions. My question is twofold.
Firstly, what are the other ways to extract features from an image.
Secondly, I have about 10 features, how do i select the best ones? I tried sequentialfs but the function 'fun' is giving some errors. Please help me out with the code!
Your question is not very clear. What do you want to do with the face images? Is it a detection problem or recognition problem. How general is the setting (like are occlusions and viewpoint changes are allowed ? )
A feature you extract out of an image is something that characterizes the image. Depending on the exact version of the problem you are trying to solve, this would change.
There are Haar features, HoG features, LBP features, GMP features, SIFT Features etc etc which you can extract. What you should extract depends on the version of the problem. This is still an open issue as to what is a good feature and how to select one. So I would choose to stay silent at that point. I would suggest you to go through some important papers which talk about these issues.
Following are some references you should look at :
a) Viola Jones Face detector paper (IJCV 2004)
b) Viola Jones Face detector (in built in OpenCV. Not sure about MATALAB).
c) HoG feature descriptor.
If you have the Computer Vision System Toolbox, you can use any of the following built-in feature extraction methods:
detectSURFFeatures detectMSERFeatures detectFASTFeatures detectMinEigenFeatures detectHarrisFeatures
Not all of these are necessarily suited to face identification though. One thing you could do is use the vision.CascadeObjectDetector to not only detect faces, but detect the eyes, nose and mouth. You can use the different classification models provided to accomplish this. Once you've identified different parts of the face, you could detect and extract features for each of these face parts using any of the previously mentioned methods (detectSURFFeatures etc).
Feature selection is a different beast. Why do you need to do feature selection? A combination of these features with a good machine learning algorithm should work fine atleast for starting applications. Try an SVM, for instance and see if that works. You can usually throw a bunch of features at an SVM if you have enough training data and hope for a good result.