传统方法表情识别,基于fer2013,用python定义一个功能全面的特征提取函数
时间: 2024-05-06 12:15:41 浏览: 167
传统方法的表情识别通常采用基于人工设计的特征提取方法。其中,fer2013是一个常用的数据集,包含了7种基本表情(愤怒、厌恶、恐惧、快乐、伤心、惊讶、中性)的28,709张人脸图片。
下面是一个基于Python的特征提取函数的简单示例:
```python
import cv2
import numpy as np
def feature_extraction(img):
# 将彩色图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
# 计算图像的直方图均衡化
equ = cv2.equalizeHist(gray)
# 提取LBP特征
radius = 1
n_points = 8 * radius
lbp = np.zeros_like(gray)
for i in range(radius, gray.shape[0] - radius):
for j in range(radius, gray.shape[1] - radius):
center = gray[i, j]
for k in range(n_points):
x = i + int(radius * np.cos(2 * np.pi * k / n_points))
y = j - int(radius * np.sin(2 * np.pi * k / n_points))
lbp[i, j] |= (gray[x, y] > center) << k
# 提取图像的HOG特征
winSize = (64, 128)
blockSize = (16, 16)
blockStride = (8, 8)
cellSize = (8, 8)
nbins = 9
hog = cv2.HOGDescriptor(winSize, blockSize, blockStride, cellSize, nbins)
hog_feats = hog.compute(img)
# 将特征串联起来
features = np.hstack((equ.ravel(), lbp.ravel(), hog_feats.ravel()))
return features
```
该函数接受一个RGB图像作为输入,并输出一个包含直方图均衡化、LBP和HOG三种特征的一维向量。其中,LBP和HOG是两种常用的局部特征,用于描述图像的纹理和形状信息。在这里,我们使用了OpenCV库中的cv2.equalizeHist()、HOGDescriptor()和compute()函数来计算这些特征。
阅读全文