質疑和代碼是在末尾 我希望這個問題屬於這裏,而不是TCS的堆棧。 我正試圖通過Turk and Pentland's "Eigenfaces for Recognition"中的算法。平均臉 - 算法
在74人能讀(左欄的最後一段)頁:
讓培訓(...)設定的平均面由[*]
定義其中[*]是表示平均面等於圖像總和除以它的計數的等式。爲了使用這個equantion,我使用OpenCV和numpy創建了python腳本。
在第75頁有圖1.它應該代表圖1中的平均面(第74頁),這是我試圖實現的。
作爲一個臉部套裝,我使用了Faces94的所有臉部。 當我計算traditionall平均(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這是正確的答案,請張貼它作爲答案,所以我可以接受它。 此外,我不得不將模數從128更改爲256 :) – MaLiN2223
嗯,我會鼓勵你在回答帖子中發佈那些與其他相關細節。找到那些好的工作! :) – Divakar