การรู้จำใบหน้าโดยการใช้ Eigen face
การรู้จำใบหน้าโดยการใช้ Eigen face
1.
ขั้นตอนที่ 1 รับภาพอินพุท (Input images) และ ค่าเฉลี่ยของรูปภาพ
กำหนดให้รูปภาพใบหน้า
เป็น
,
, …,
เมื่อ M เป็นจำนวนของรูปภาพของภาพใบหน้า
และกำหนดให้ค่าเฉลี่ยของรูปภาพภาพใบหน้า
เป็น
%%%%%%% Calculating the mean image
m = mean(T,2); % Computing the
average face image m = (1/P)*sum(Tj's)
(j = 1 : P)
Train_Number = size(T,2);
2.
ขั้นตอนที่ 2 หาลักษณะความแตกต่างของภาพ
การดึงลักษณะเด่นออกจากภาพ
ทำได้โดยหาลักษณะความแตกต่างของภาพ จากภาพอินพุทของหน้าแต่ละคน
กับภาพเฉลี่ยของภาพหน้าคน
โดยสามารถทำได้โดย
%%%%% Calculating the deviation of each image from mean
image
A = [];
for i = 1 : Train_Number
temp = double(T(:,i)) -
m; % Computing the difference image for each image
in the training set Ai = Ti - m
A = [A temp]; % Merging all centered images
end
3.
ขั้นตอนที่ 3 การคำนวณหาค่า Covariance Matrix ( Covariance Matrix Calculation)
หลังจากนั้น
จึงได้นำภาพความแตกต่างที่ได้ไปทำให้เป็นภาพเวกเตอร์ซึ่งมีขนาดความกว้างเท่ากับ 1 จุดภาพ คูณด้วยความกว้างของภาพ
คูณด้วยความกว้างของภาพ (1 x (w x h)) จึงนำมาหา
Correlation ของภาพความแตกต่างโดยการสร้าง Covariance Matrix
%%%%%%%
Snapshot method of Eigenface methos
L = A'*A; % L is the surrogate of covariance matrix C=A*A'.
4.
ขั้นตอนที่ 4 การคำนวณหา ค่า
Eigenvector (Eigenvector Calculation)
เมื่อได้
Covariance Matrix มาแล้วจะทำการหาเวกเตอร์เจาะจง (Eigenvector,
) และค่าเจาะจง (Eigenvalue,
)
โดยวิธีการแก้ค่าตัวแปรของสมการเชิงเส้นจาก Covariance Matrix ผลที่ได้ออกมาจะเป็นภาพไอเก้น
โดยที่
มีจำนวนเท่ากับจำนวนภาพการสอน
[V D] = eig(L);
%%%%%% Sorting and eliminating eigenvalues
L_eig_vec = [];
for i = 1 : size(V,2)
if( D(i,i)>1 )
L_eig_vec =
[L_eig_vec V(:,i)];
end
end
%%%%%%% Calculating the eigenvectors of covariance matrix
'C'
Eigenfaces = A * L_eig_vec; % A: centered
image vectors
5.
ขั้นตอนที่ 5
การคำนวณหาค่าเวกเตอร์น้ำหนัก (Vector of weights calculation)
เมื่อภาพได้ถูกแปลงไปสู่ยังบริเวณ
ของเวกเตอร์เจาะจง (Eigen space) ที่แทนลักษณะของภาพหน้าคน
จากนั้นเวกเตอร์เจาะจงจะถูกนำไปใช้หาเวกเตอร์น้ำหนัก โดยสมาชิกของเวกเตอร์ของน้ำหนักหาได้จาก
โดยที่
เป็นเวกเตอร์เจาะจงซึ่งจะใช้เวกเตอร์น้ำหนักนี้ ในการอธิบายลักษณะของใบหน้าแต่ละหน้าคน โดยส่วนแรกจะเก็บเวกเตอร์น้ำหนัก ของชุดข้อมูลสำหรับสอนเอาไว้
เพื่อใช้เป็นตัวเปรียบเทียบกับข้อมูลภาพที่เก็บเข้ามาเปรียบเทียบหน้าคน ซึ่งสามารถแยกแยะลักษณะของแต่ละหน้าคนได้ตามขั้นตอนถัดไป ในเอกสารนี้ใช้
%%%%%%%%%%%%%%%%%%%%%%%% Calculating Euclidean distances
Euc_dist = [];
for i = 1 : Train_Number
q =
ProjectedImages(:,i);
temp = ( norm(
ProjectedTestImage - q ) )^2;
Euc_dist = [Euc_dist
temp];
end
[Euc_dist_min , Recognized_index] = min(Euc_dist);
Comments
Post a Comment