Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 123 additions & 0 deletions 2015200548_KimJeyeon_Assignment/Eigenface/EigenfaceRecognition.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
# -*- coding: utf-8 -*-
"""
Created on Sun Jun 14 16:39:01 2015

@author: JYKIM
"""

import numpy as np
from PIL import Image
from pylab import *



img_height = 68
img_width = 90
img_sample_num = 15

img_mat = np.zeros(img_height * img_width)

for h in range(img_height):
for w in range(img_width):
temp = Image.open('ImageTestset/other2.bmp')
img_mat[img_height * w + h] = array(temp.convert('L'))[h, w]


img_mean_file = open('meanface.txt')

img_mean_mat = np.zeros((img_height * img_width))


for index in range(img_height * img_width):
img_temp = img_mean_file.readline()
img_mean_mat[index] = float(img_temp)

img_mean_file.close()

img_subtract_mat = np.zeros((img_height * img_width))

for index in range(img_height * img_width):
img_subtract_mat[index] = img_mat[index] - img_mean_mat[index]



img_eigenvector_sample = np.zeros((img_sample_num, img_height * img_width))

for sample_num in range(img_sample_num):

img_eigen_temp = open('ImageDatasetEigenvector/{0:d}.txt'.format(sample_num + 1))

for index in range(img_height * img_width):
img_temp_eigen = img_eigen_temp.readline()
img_eigenvector_sample[sample_num, index] = float(img_temp_eigen)

img_eigen_temp.close()

img_test_weight = np.zeros((img_sample_num))

img_test_weight = np.dot(img_eigenvector_sample, img_subtract_mat.T)

img_weight_sample = np.zeros((img_sample_num, img_sample_num))
img_weight_distance = np.zeros((img_sample_num))

for sample_num in range(img_sample_num):

img_weight_temp = open('ImageDatasetWeight/{0:d}.txt'.format(sample_num + 1))



for index in range(img_sample_num):
img_temp_weight = img_weight_temp.readline()
img_weight_sample[sample_num, index] = float(img_temp_weight)

img_weight_temp.close()


for sample_num in range(img_sample_num):
for index in range(img_sample_num):
img_weight_distance[sample_num] = img_weight_distance[sample_num] + pow(img_weight_sample[sample_num, index] - img_test_weight[index], 2)

img_weight_distance[sample_num] = sqrt(img_weight_distance[sample_num])



min_distance = 10000
classify = 0

for sample_num in range(img_sample_num):
temp = min_distance
min_distance = min(min_distance, img_weight_distance[sample_num])
if temp != min_distance:
classify = sample_num


classnum = int(classify / 5) + 1

if img_weight_distance[classify] <= 1800:
print 'Error : '
print img_weight_distance[classify]
print '\n'
print 'Subset : '
print classnum
else:
print 'Error : '
print img_weight_distance[classify]
print '\n'
print 'Subset : '
print 'This image is a new image!'

print '\n'
print 'Eigen Face'

img_eigenface = np.zeros((img_height, img_width))
img_temp_eigenface = np.zeros((img_height * img_width))

num = 0
for img_sample in range(img_sample_num):
num = num + 1

for h in range(img_height):
for w in range(img_width):
img_eigenface[h, w] = abs(img_eigenvector_sample[img_sample, img_height * w + h])
subplot(3, 5, num)
imshow(img_eigenface)
63 changes: 63 additions & 0 deletions 2015200548_KimJeyeon_Assignment/Eigenface/GetEigenfaceFunction.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# -*- coding: utf-8 -*-
"""
Created on Sat Jun 13 14:37:59 2015

@author: jykim15
"""

import numpy as np
from pylab import *

#import _imaging

def GetSubtractImage(img_mat, average_img_vector, img_height, img_width):


img_subtract_mat = np.zeros((img_height * img_width))

for index in range(img_height * img_width):
img_subtract_mat[index] = img_mat[index] - average_img_vector[index]



return img_subtract_mat



def GetWeight(img_subtract_mat, img_num, img_height, img_width):

L_mat = np.zeros((img_num, img_num))
L_mat = np.dot(img_subtract_mat, img_subtract_mat.T)

eigenvalue, eigenvector = linalg.eigh(L_mat)

covar_mat_eigenvector = np.zeros((img_height * img_width, img_num))
covar_mat_eigenvector = np.dot(img_subtract_mat.T, eigenvector)

sum_eigen = np.zeros(img_num)

for sample_num in range(img_num):
for index in range(img_height * img_width):
sum_eigen[sample_num] = sum_eigen[sample_num] + pow(covar_mat_eigenvector[index, sample_num], 2)

sum_eigen[sample_num] = sqrt(sum_eigen[sample_num])

for index in range(img_height * img_width):
covar_mat_eigenvector[index, sample_num] = covar_mat_eigenvector[index, sample_num] / sum_eigen[sample_num]


for sample_num in range(img_num):
temp_file = open('ImageDatasetEigenvector/{0:d}.txt'.format(sample_num + 1), 'w')
for index in range(img_height * img_width):
temp_file.write(str(covar_mat_eigenvector[index, sample_num]))
temp_file.write('\n')
temp_file.close()



weight = np.zeros((img_num, img_num))


weight = np.dot(covar_mat_eigenvector.T, img_subtract_mat.T)

return weight
74 changes: 74 additions & 0 deletions 2015200548_KimJeyeon_Assignment/Eigenface/GetSampleEigenface.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# -*- coding: utf-8 -*-
"""
Created on Fri Jun 12 17:27:12 2015

@author: jykim15
"""

import numpy as np
from PIL import Image
from pylab import *
import GetEigenfaceFunction

img_height = 68
img_width = 90
img_sample_num = 15

img_sample = np.zeros((img_sample_num, img_height * img_width))
for sample_num in range(5):
for h in range(img_height):
for w in range(img_width):
temp1 = Image.open('ImageDataset/subset1/{0:d}.bmp'.format(sample_num + 1))
temp2 = Image.open('ImageDataset/subset2/{0:d}.bmp'.format(sample_num + 1))
temp3 = Image.open('ImageDataset/subset3/{0:d}.bmp'.format(sample_num + 1))

img_sample[sample_num, img_height * w + h] = array(temp1.convert('L'))[h, w]
img_sample[5 + sample_num, img_height * w + h] = array(temp2.convert('L'))[h, w]
img_sample[10 + sample_num, img_height * w + h] = array(temp3.convert('L'))[h, w]


img_average_mat = np.zeros((img_height * img_width))

for index in range(img_sample_num):
img_average_mat[:] = img_average_mat[:] + img_sample[index,:]

img_average_mat[:] = img_average_mat[:] / img_sample_num

temp_img = np.zeros((img_height, img_width))
for h in range(img_height):
for w in range(img_width):
temp_img[h, w] = img_average_mat[img_height * w + h]



img_mean_subtract_mat = np.zeros((img_sample_num, img_height * img_width))
temp1_mat = np.zeros((img_height * img_width))
temp2_mat = np.zeros((img_height * img_width))

for index in range(img_sample_num):
for sample1_num in range(img_height * img_width):
temp1_mat[sample1_num] = img_sample[index, sample1_num]

temp2_mat = GetEigenfaceFunction.GetSubtractImage(temp1_mat, img_average_mat, img_height, img_width)
for sample3_num in range(img_height * img_width):
img_mean_subtract_mat[index, sample3_num] = temp2_mat[sample3_num]


eigenface_weight = np.zeros((img_sample_num, img_sample_num))

eigenface_weight = GetEigenfaceFunction.GetWeight(img_mean_subtract_mat, img_sample_num, img_height, img_width)



for sample_num in range(img_sample_num):
temp_file = open('ImageDatasetWeight/{0:d}.txt'.format(sample_num + 1), 'w')
for index in range(img_sample_num):
temp_file.write(str(eigenface_weight[index, sample_num]))
temp_file.write('\n')
temp_file.close()

temp_meanface_file = open('meanface.txt', 'w')
for index in range(img_height * img_width):
temp_meanface_file.write(str(img_average_mat[index]))
temp_meanface_file.write('\n')
temp_meanface_file.close()
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading