#ifndef EKD_PCA_H #define EKD_PCA_H #include #include #include #include #include #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 */