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 */
|