В течение некоторого времени я пытался сделать алгоритм распознавания лиц, чтобы попытаться заставить его отобразить, является ли что-то человеческим лицом, если что-то является человеческим лицом, и это известное человеческое лицо, и какое из известных человеческих лиц является илиесли это не человеческое лицо, я пытаюсь сделать это, используя собственные значения матрицы, сформированной из матриц изображения в качестве вектора, отображаемого в виде первой строки, затем второй строки и т. д., получая среднее значение для каждой строки и вычитая ее из сделанной матрицыдля базы данных, а затем построение матрицы, нахождение ее собственных значений, а затем построение некоторых проекционных изображений.
Я попытался сделать это, используя 2 функции: eigenface_core, которая создает всю базу данных, и распознавание лиц, которое вычисляет расстояния.
Первая функция:
function [m A eigenfaces pr_img] = eigenface_core(database_path)
files = dir(fullfile(database_path, '*.jpg'));
T = [];
m = [];
for i = 1 : numel(files)
image_matrix = double(rgb2gray(imread(fullfile(database_path, files(i).name))));
image_matrix = image_matrix';
SIZE = size(image_matrix);
v = image_matrix(:);
T(:, i) = v;
endfor
for i = 1 : size(T)
m(i) = mean(T(i, :));
endfor
m = m';
A = T - m;
[V S] = eig(A'*A);
lambda = diag(S);
%[lambda, order] = sort(lambda, 'descend');
%V = V(:, order);
for i = 1 : size(lambda)
if(lambda(i) < 1)
V(:, i) = [];
endif
endfor
eigenfaces = A*V;
pr_img = eigenfaces'*A;
end
И вторая функция:
function [min_dist output_img_index] = face_recognition(image_path, m, A, eigenfaces, pr_img)
image_matrix = double(rgb2gray(imread(image_path)));
T = [];
image_matrix = image_matrix';
T = image_matrix(:);
miu = mean(T);
B = T - miu;
%SIZE = size(image_matrix);
%figure, imshow(reshape(B, SIZE));
prtest_img = eigenfaces'*B;
%disp(prtest_img);
%imshow(prtest_img);
min_dist = 9999999999999;
for i = 1 : size(pr_img, 2)
if (norm(pr_img(:, i) - prtest_img) < min_dist)
min_dist = norm(pr_img(:, i) - prtest_img);
output_img_index = i;
endif
endfor
end