Как рассчитать собственные лица в питоне? - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь вычислить собственные грани для набора изображений, используя python.

Сначала я превращаю каждое изображение в вектор, используя:

list(map(lambda x:x.flatten(), x))

Затем я вычисляю ковариационную матрицу (после удаления среднего из всех данных):

# x is a numpy array

x = x - mean_image
cov_matrix = np.cov(x.T)

Затем я вычисляю собственные значения и собственные числа:

eigen_values, eigen_vecotrs = np.linalg.eig(cov_matrix)

Результаты представляют собой векторы с комплексными числами, поэтому я оставляю только действительную часть, чтобы иметь возможность их показать:

eigen_vectors = np.real(eigen_vectors)

После попытки показать собственные грани ( собственные векторы ), результат даже близко не похож на то, как выглядит собственное лицо:

img

Мне удалось получить список собственных лиц, используя np.linalg.svd(), однако мне любопытно, почему мой код не работает и как я могу изменить его, чтобы он работал как положено.

Чтобы исправить np.linalg.eig, возвращающие комплексные результаты, я уменьшил размер изображений, чтобы он больше не возвращал комплексные числа, однако мои собственные векторы не выглядят как собственное лицо:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...