Chúng ta thiết lập các tham số ban đầu cho việc so sánh như :
+ Bán kính tìm kiếm : bán kính vùng tìm kiếm có tâm là tại vị trí của điểm đặc trưng đang xét. Chúng ta sẽ tìm những vector đặc trưng của ảnh tham chiếu có vị trí được giới hạn bởi tham số này. Tham số này chính là ngưỡng “th1” đã được đề cập trong phần lý thuyết.
+ Độ giống nhau tối thiểu giữa 2 vector đặc trưng : Tham số này chính là ngưỡng “th2” đã được đề cập đến trong phần lý thuyết.
+ Hệ số so khớp về độ giống nhau : Chính là tham số α trong phần lý thuyết.
+ Hệ số so khớp về số lượng vector đặc trưng : Chính là tham số β trong phần lý thuyết.
+ Độ giống nhau tối thiểu cho phép : tham số này có ý nghĩa chỉ tìm ra những đối tượng trong Cơ sở dữ liệu có độ giống với đối tượng cần nhận
dạng nếu như độ giống nhau giữa chúng lớn hơn giá trị “Độ giống nhau tối thiểu cho phép”.
Hình 3.5 : Kết quả của quá trình so khớp: a) Ảnh cần kiểm tra.
b) Ảnh trong Cơ sở dữ liệu có kết quả so khớp giống với ảnh cần kiểm tra nhất.
c) d) Tương ứng là những điểm đặc trưng trên ảnh Test và Ảnh kết quả. Đây là những điểm giống nhau của hai khuôn mặt.
Đầu tin ta sẽ xác định độ giống nhau của 2 vector đặc trưng theo công thức (3.9) như sau :
public double Similarity(Feature Feature1, Feature Feature2)
{
double _Similarity = 0;// độ giống nhau của hai vector đặc trưng
double Tuso = 0; //Tử số trong (3.9)
double Mauso = 0; //Mẫu số trong công thức (3.9)
double Mauso1 = 0; // phần mẫu số thứ nhất trong (3.9)
double Mauso2 = 0; // Phần mẫu số thữ 2 trong công thức (3.9)
//----Tính tử số, mẫu số 1 và mẫu số 2
for (byte i = 0; i < 40; i++) {
Mauso2 += Math.Pow(Math.Abs(Feature2.ArrayFeature[i]), 2); }
Mauso = Math.Sqrt(Mauso1 * Mauso2); //---- Độ giống nhau của 2 vector
_Similarity = Tuso / Mauso;
return _Similarity;
}
Sau khi đã có công thức tính độ giống nhau giữa 2 vector đặc trưng thì chúng ta có thể tính được độ giống nhau của 2 ảnh mặt người theo công thức () như sau, với các tham số : FaceTe – là danh sách các vector đặc trưng của ảnh Test ; FaceRe – là danh sách các vector đặc trưng của ảnh tham chiếu trong cơ sở dữ liệu; th1 – là bán kính tìm kiếm khi so khớp; th2 - độ giống nhau đối thiểu giữa hai vector đặc trưng ; anpha - hệ số đánh giá độ giống nhau giữa hai khuôn mặt theo độ giống nhau của các vector đặc trưng; beta - là hệ số đánh giá độ giống nhau giữa hai khuôn mặt theo số lượng các vector đặc trưng giống nhau:
public ArrayList Compa(ArrayList FaceTe, ArrayList FaceRe, double th1,
double th2, double anpha, double beta) {
//Danh sách những điểm giống nhau
ArrayList List_similar = new ArrayList(); // Độ giống nhau của 2 vector
double _Similarity = 0;
foreach (Feature Feature1 in FaceTe)
{
classthongtingiongnhau thongtingiongnhau =
new classthongtingiongnhau(); // ĐỘ giống nhau lớn nhât của các vector đang xét
double Max_Similarity = 0;
foreach (Feature Feature2 in FaceRe)
{
// Kiểm tra điều kiện 1 khi so sánh 2 khuôn mặt
if (Math.Sqrt(Math.Pow(Feature1.X - Feature2.X, 2) +
Math.Pow(Feature1.Y - Feature2.Y, 2)) < th1) {
_Similarity = Similarity(Feature1, Feature2); // Kiểm tra điều kiện 2 khi so sánh 2 khuôn mặt if (_Similarity > th2)
{
// Lưu thông tin của vector giống nhất ở thời điểm hiện tại if (Max_Similarity < _Similarity)
{
thongtingiongnhau.X_te = Feature1.x; thongtingiongnhau.Y_te = Feature1.y; thongtingiongnhau.X_re = Feature2.x; thongtingiongnhau.Y_re = Feature2.y; thongtingiongnhau.dogiongnhau = Max_Similarity; } } } }
//neu luu them 1 vi tri gong nhau
if (thongtingiongnhau.dogiongnhau != 0) {
List_similar.Add(thongtingiongnhau); }
}
// Độ giống nhau trung bình của tất cả các vector được so sánh
double FSF = 0;
double OS = 0;
if (List_similar.Count != 0) {
foreach (classthongtingiongnhau ttgn in List_similar)
{
OS += ttgn.dogiongnhau; }
OS = OS / List_similar.Count;
//---Tính độ giống nhau FSF như công thức (3.14)
FSF = anpha * OS + beta * (List_similar.Count / FaceRe.Count); } List_similar.Insert(0, OS); List_similar.Insert(0, FSF); return List_similar; }
Trong đó đối tượng “classthongtingiongnhau” được dùng để chỉ thông tin khi so khớp giữa hai vector đặc trưng thoả mãn điều kiện khi so khớp, có cấu trúc như sau:
public class classthongtingiongnhau
{
private int x_te;// Toạ độ x,y của ảnh Test
private int y_te;
private int x_re;// Toạ độ x,y của ảnh tham chiếu
private int y_re;
private double _Dogiongnhau;// độ giống nhau của hai vector
public int X_te {
get { return x_te; } set { x_te = value; }
public int Y_te {
get { return y_te; } set { y_te = value; } }
public int X_re {
get { return x_re; } set { x_re = value; } }
public int Y_re {
get { return y_re; } set { y_re = value; } }
public double dogiongnhau {
get { return _Dogiongnhau; } set { _Dogiongnhau = value; }
} }