簡體   English   中英

平均面部算法

[英]Average face - algorithm

問題和代碼最后我希望這個問題屬於這里而不是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)

感謝@Divakar,我在代碼中發現了兩個問題。

  1. opencv中的圖像數組基於uint8而不是int8
  2. 我正在做模數(np.mod(img,128)),因此我的圖像范圍從0到127,應該是0到255。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM