2017-01-03 6 views
11

प्रश्नोत्तरी और कोड अंत में मुझे उम्मीद है कि यह प्रश्न यहां है और टीसीएस के ढेर के लिए नहीं। मैं Turk and Pentland's "Eigenfaces for Recognition" में एल्गोरिदम के माध्यम से जाने की कोशिश कर रहा हूं।औसत चेहरा - एल्गोरिदम

पेज 74 एक पढ़ सकते हैं (बाएं स्तंभ के अंतिम पैराग्राफ) पर:

प्रशिक्षण करते हैं (...) सेट का औसत चेहरे से [*]

परिभाषित किया गया है जहां [*] एक समीकरण कहता है कि औसत चेहरा इसकी गणना से विभाजित छवियों के बराबर है। इस समीकरण का उपयोग करने के लिए मैंने ओपनसीवी और numpy का उपयोग कर पायथन लिपि बनाई।

पृष्ठ 75 पर चित्रा 1 है। जो चित्रा 1 (पृष्ठ 74) से औसत चेहरे का प्रतिनिधित्व करना चाहिए और यही वह है जिसे मैं प्राप्त करने की कोशिश कर रहा हूं।

एक फेस सेट के रूप में मैं Faces94 से सभी चेहरों का उपयोग कर रहा हूं। जब मैं traditionall औसत की गणना (1/एम * योग) परिणाम इस प्रकार है:

enter image description here

जो ज्यादातर उन अजीब 'स्पॉट' की वजह से अब तक उम्मीद से दूर है। हालांकि, जब मैं औसत की गणना की तरह वहाँ अधिक चेहरे था वास्तव में है की तुलना में (उदाहरण के लिए 1/(2 * एम) * योग) परिणाम और अधिक सटीक लग रहा है:

enter image description here

मैं वहाँ लगता है 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) 
+0

@ दिवाकर यह सही उत्तर है, कृपया इसे उत्तर के रूप में पोस्ट करें ताकि मैं इसे स्वीकार कर सकूं। इसके अलावा मुझे 128 से 256 तक मॉड्यूलो बदलना पड़ा :) – MaLiN2223

+1

ठीक है, मैं आपको उत्तर पोस्ट में उन अन्य प्रासंगिक विवरणों के साथ पोस्ट करने के लिए प्रोत्साहित करता हूं। उनको खोजने पर अच्छा काम! :) – Divakar

उत्तर

7

@Divakar के लिए धन्यवाद मैं अपने कोड में दो समस्या नहीं पाई गई।

  1. opencv में छवि सरणियों uint8 int8 नहीं
  2. मैं सापेक्ष कर रहा था (np.mod (img, 128)) पर आधारित हैं और क्योंकि यह की मेरी छवि 127 0 से लेकर किया गया था और 0 से होना चाहिए 255.
संबंधित मुद्दे