问题和代码在结尾
我希望这个问题不属于TCS的堆栈。
我正在尝试通过Turk and Pentland's "Eigenfaces for Recognition"中的算法。
在第74页上,您可以阅读(左栏的最后一段):
其中[*]是一个等式,表示平均人脸等于图像总和除以其计数。为了使用此等式,我使用OpenCV和numpy创建了python脚本。
在第75页上有图1。它应该表示图1中的平均面孔。(第74页),这就是我要达到的目标。
作为一个脸部设置,我正在使用Faces94中的所有脸部。
当我计算传统平均值(1/M *总和)时,结果如下所示:
这与预期相距甚远,主要是因为这些“怪异”的地点。
但是,当我计算平均数时,好像有比实际更多的面孔(例如1/(2 * M)*总和),结果看起来更准确:
我认为在转换int8 int时存在一些问题,但我无法证明这一点。
如果任何人都可以发现该代码的任何问题,即使它不是解决方案,也请让我知道。
问题:我做错了什么/该怎么做才能获得更好的结果。
这是代码:
import numpy as np
import glob
import cv2
from cv2 import imread
dir = "../images/faces94/**/**.jpg"
files = list(glob.iglob(dir, recursive=True))
img = np.zeros(imread(files[0],0).shape)
img = img.astype('int')
for i in range(len(files)):
img += imread(files[i],0).astype('int')
img = np.divide(img,len(files)*2) # HERE you can change it to np.divide(img,len(files)) in order to see bad result
img = np.mod(img,128)
img = img.astype(np.int8)
cv2.imshow("image", img)
cv2.waitKey(0)
最佳答案
多亏了@Divakar,我在代码中发现了两个问题。