MaL*_*223 13 python algorithm opencv numpy
问题和代码最后 我希望这个问题属于这里而不是TCS的堆栈.我试图通过Turk和Pentland的"Eigenfaces for Recognition"中的算法.
在页74上可以阅读(左栏的最后一段):
让训练(...)集合的平均面由[*]定义
其中[*]是一个等式,表示平均面等于图像之和除以它的计数.为了使用这个equantion我使用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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1226 次 |
| 最近记录: |