3

我正在尝试使用 Python 和 OpenCV 对面部图像进行一些特征工程。这个想法是使用这些特征进行无监督学习,将同一个人的图像组合在一起。管道如下:

  1. 从几个 OpenCV 人脸检测器中选择一个(几个 LBP 和几个 HAAR 人脸级联)
  2. 使用 OpenCV 来
    2.1 使用 5×5 高斯函数对图像进行卷积以进行低频带滤波以降低噪声
    2.2 将图像转换为灰度
    2.3 从图片中提取人脸图像
    2.4 将人脸大小调整为常见形状(例如 300 x 300)
  3. 使用 scikit-image.feature.local_binary_pattern 获取人脸的局部二进制模式
  4. 使用 numpy 生成这些 LBP 的直方图
  5. 使用直方图作为 scikit-learn 的 NearestNeighbors 无监督学习算法的特征,以寻找可能表明它们属于同一个人的图像集群

问题是集群并不能很好地工作。当我看到我的数据被缩小到二维以进行可视化时,它甚至看起来都没有任何可辨别的集群,尽管我知道我的测试图像包含几个不同人的照片。

我怀疑它与 scikit-image 的 LBP 参数有关:采样点数和采样半径。我尝试为那些希望看到不同人物图像之间良好分离的人尝试几个值,但到目前为止还没有多少运气,请在此处查看结果。(出于可视化目的,不同的颜色表示不同的人。)所以这是我对帖子的问题:

是否有一个好的规则或规则来选择采样点的数量和 LBP 的采样半径,可能基于图像的性质或它们的某些属性?如果您对如何获得好的功能有其他想法,请告诉我。

4

0 回答 0