图像处理中人脸特征点归一化

Normalization of facial landmark points in image processing

我正在从事一个与从面部识别情绪(悲伤、快乐、愤怒等)相关的项目。我正在使用 dlib 库中的面部标志检测器,它检测 68 个兴趣点。对于相同的情绪,这些兴趣点会根据不同面部的面部朝向、眼睛大小、嘴唇等而有所不同。

我想标准化这些兴趣点,使它们不受面部方向、眼睛大小、嘴唇等的影响。我可以使用哪些技术来做到这一点。然后我想用 SVM 训练数据。

Dlib 已经有在 http://dlib.net/face_landmark_detection_ex.cpp.html sample by calling http://dlib.net/imaging.html#extract_image_chips 函数中使用的规范化代码。

您将需要使用它的部分代码来获取规范化的地标——它们仍然有足够的信息来检测情绪,但脸部会被旋转和缩放:

...
// 1. detect faces
std::vector<rectangle> dets = detector(image);
for (rectangle d : dets)
{
    // 2. get landmarks
    full_object_detection shape = sp(image, d);
    // 3. chip details (normalization params) for normalized image with normalized size of 100 pixels
    chip_details chip = get_face_chip_details(shape, 100);
    // 4. get normalized landmarks
    full_object_detection normalized = map_det_to_chip(shape, chip);
    // now you can used normalized shape in your classifier
}

获得归一化形状后 - 如何训练分类器就交给你了。可能使用地标 "as is" 就足够了,可能您需要获取最重要的点并计算它们之间的距离并根据距离数据进行训练