a) Ảnh đầu vào b) Ảnh thể hiện các điểm đặc trưng
Ta xây dựng một đối tượng “đặc trưng” theo công thức (3.8) sẽ có cấu trúc như sau:
public class Feature
{
protected int W = 4;// 1/2 kích thước của cửa sổ tìm đặc trưng
// Toạ độ x,y của mỗi vector đặc trưng
private int x;
private int y;
// Phần Ri,j(xk,yk) trong công thức (3.8)
private double[] ArrayFeature;
public int X { get { return x; } set { x = value; } } public int Y { get { return y; } set { y = value; } }
public double[] arrayFeature
{
get { return ArrayFeature; }
set { ArrayFeature = value; } }
}
Bây giờ ta sẽ thực hiện tìm kiếm tất cả các vector đặc trưng trên dữ liệu của ảnh đầu vào, ở đây dữ liệu của ảnh đã được chuyển về dạng phức :
public ArrayList SeachFeature(Complex[][,] _Data)
{
//Lưu tất cả các vector đặc trưng của đối tượng ảnh ArrayList ListFeature = new ArrayList();
double max = 0;
Complex[][,] data = new Complex[40][,]; data = _Data;
// Tìm điểm đặc trưng trên mỗi ảnh kết quả sau khi đã thực hiện // phép cuôn ảnh đầu vào với sóng Gabor.
for (int i = 0; i < 40; i++) {
//---Tính trung bình độ xám trên mỗi ảnh cuộn theo (3.7)
double total = 0;
for (int x_ = 0; x_ < 128; x_++) for (int y_ = 0; y_ < 128; y_++) {
total += data[i][x_, y_].Re; }
total = total / (128 * 128);
//-- Dùng cửa sổ W= 9x9 de quyet,bỏ qua viền xung quanh ảnh //---Chỉ quan tâm phần thực vì phần ảo bằng 0
{
// Tìm max trong vùng của sổ
max = 0;
for (int v = -W; v <=W ; v++) for (int u = -W; u <= W; u++)
if (max < data[i][x0 + v, y0 + u].Re) {
max = data[i][x0 + v, y0 + u].Re; }
// Xét điều kiện là điểm đặc trưng theo (3.6)và (3.7)
if ((data[i][x0, y0].Re == max) &&
(data[i][x0, y0].Re > total)) {
// Bổ xung thêm 1 điểm đặc trưng vào danh sách
Feature _feature = new Feature(); double[] I = new double[40];
// Lấy độ xám ở 40 ảnh cuộn tai cùng toạ độ for (int v = 0; v < 40; v++)
{
I[v] = data[v][x0, y0].Re; } _feature.x = y0; _feature.y = x0; _feature.ArrayFeature = I; ListFeature.Add(_feature); } } } return ListFeature; }