summaryrefslogtreecommitdiff
path: root/OASIS/c/src/ekd_pca.h
blob: 842e4852f289169365c044a4e9987234ecac54a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#ifndef EKD_PCA_H
#define EKD_PCA_H

#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>

#include "ekd_blas.h"

#define NUM_DNEG_IMAGES 134
#define NUM_DPOS_IMAGES 99
#define NUM_IMAGES 233
#define IMAGE_WIDTH 144
#define IMAGE_HEIGHT 176
#define FEATURE_VECTOR_SIZE 25344
#define MAX_ITERATIONS 100
#define TOLERANCE 1e-3

typedef enum {
    MEAN_UNIT_VARIANCE,
    MEAN
} centre_scale_operation_e;

// Prototypes
void centre_scale(float** input_matrix, uint32_t rows, uint32_t cols, centre_scale_operation_e operation);
void covariance(float** input_matrix, uint32_t rows, uint32_t cols, float** covariance_matrix);
void house_holder_vector(float* input_vector, uint32_t size);
void house_holder_transformation(float* house_holder_vector, uint32_t size, float** house_holder_matrix);
void qr_decomposition(float** input_matrix, uint32_t size, float** resultant_matrix);
void qr_algorithm(float** input_matrix, uint32_t rows, uint32_t cols, float** resultant_matrix);
void power_iteration(float** input_matrix, uint32_t size, float* eigen_vector);
float eigen_value_compute(float* eigen_vector, float** input_matrix, uint32_t size);
void subtract_eigen(float* eigen_vector, float** input_matrix, float** resultant_matrix, float eigen_value, uint32_t size);
void pca_covariance_method(float** input_matrix, uint32_t rows, uint32_t cols, float** resultant_matrix, uint32_t components);

#endif /* EKD_PCA_H */