diff --git a/mean-shift.c b/mean-shift.c index b213132..4e0236e 100644 --- a/mean-shift.c +++ b/mean-shift.c @@ -1,61 +1,18 @@ -#include -#include -#include - #include #include #include #include #include - - -#include "serial_declarations.h" - +#include +#include +#include #include -extern int NUMBER_OF_POINTS; -extern int DIMENSIONS; -extern char* POINTS_FILENAME; -extern char* LABELS_FILENAME; - -typedef struct parameters { - double epsilon; - bool verbose; - bool display; -} parameters; - -//Function get_args parses command line arguments. -void get_args(int argc, char **argv, int *h); - -//Function meanshift recursively shifts original points according to th -//mean-shift algorithm saving the result to shiftedPoints. Struct opt has user -//options, h is the desirable deviation, iteration is this call's iteration -//number. -int meanshift(double **original_points, double ***shifted_points, int h - , parameters *opt, int iteration); - -//Function norm returns the second norm of matrix of dimensions rowsXcols. -double norm(double **matrix, int rows, int cols); - -//Function multiply calculates the product of matrices 1 and 2 into output. -void multiply(double **matrix1, double **matrix2, double **output); - -//Function calculateDistance returns the distance between x and y vectors. -double calculateDistance(double *y, double *x); - -//Function alloc_2d_double allocates rows*cols bytes of continuous memory. -double **alloc_2d_double(int rows, int cols); - -//Function duplicate copies the values of source array to dest array. -void duplicate(double **source, int rows, int cols, double ***dest); +#include +#include +#include -//Function print_matrix prints array of dimensions rowsXcols to the console. -void print_matrix(double **array, int rows, int cols); -//Function save_matrix prints matrix in a csv file with path/filename -//"output/output_iteration". If a file already exists new lines are concatenated. -void save_matrix(double **matrix - , int iteration); int NUMBER_OF_POINTS = 600; int DIMENSIONS = 2; @@ -65,64 +22,11 @@ char* LABELS_FILENAME = "data/L.bin"; struct timeval startwtime, endwtime; double seq_time; -int main(int argc, char **argv){ - int h = 1; - - //get_args(argc, argv, &h); commented out while in development - - FILE *f; -// f = fopen(X, "rb"); -// fseek(f, 0L, SEEK_END); -// long int pos = ftell(f); -// fclose(f); -// int elements = pos / sizeof(double); // number of total elements (points*dimension) -// int points = elements/DIMENSIONS; -// //printf("points : %d \n", points); - f = fopen(POINTS_FILENAME, "rb"); - double **vectors; - vectors = alloc_2d_double(NUMBER_OF_POINTS, DIMENSIONS); - for (int i=0; i - // variables of type uint8 are stored as 1-byte (8-bit) unsigned integers - fseek(f, 0L, SEEK_END); - long int pos = ftell(f); - rewind(f); - //printf("position : %ld \n", pos); - int label_elements = pos/ sizeof(char); - char *labels = (char*)malloc(label_elements* sizeof(char)); - fseek(f, 0L, SEEK_SET); - int out = fread(labels, sizeof(char), label_elements, f); - fclose(f); - - // MEAN SHIFT OPTIONS - parameters params; - params.epsilon = 0.0001; - params.verbose = false; - params.display = false; - parameters *opt; - opt = ¶ms; - - double **shifted_points; - // tic - gettimeofday (&startwtime, NULL); - - int iterations = meanshift(vectors, &shifted_points, h, opt, 1); - - // toc - gettimeofday (&endwtime, NULL); - seq_time = (double)((endwtime.tv_usec - startwtime.tv_usec)/1.0e6 + endwtime.tv_sec - startwtime.tv_sec); - printf("%s wall clock time = %f\n","Mean Shift", seq_time); - - //TODO write output points to file -> plot later - //save_matrix(shifted_points, iterations); -} +typedef struct parameters { + double epsilon; + bool verbose; + bool display; +} parameters; void get_args(int argc, char **argv, int *h){ if (argc != 6) { @@ -142,6 +46,84 @@ void get_args(int argc, char **argv, int *h){ LABELS_FILENAME = argv[5]; } +// TODO check why there's is a difference in the norm calculate in matlab +double norm(double **matrix, int rows, int cols){ + double sum=0, temp_mul=0; + for (int i=0; i + // variables of type uint8 are stored as 1-byte (8-bit) unsigned integers + fseek(f, 0L, SEEK_END); + long int pos = ftell(f); + rewind(f); + //printf("position : %ld \n", pos); + int label_elements = pos/ sizeof(char); + char *labels = (char*)malloc(label_elements* sizeof(char)); + fseek(f, 0L, SEEK_SET); + int out = fread(labels, sizeof(char), label_elements, f); + fclose(f); -void duplicate(double **source, int rows, int cols, double ***dest){ - for (int i=0; i plot later + //save_matrix(shifted_points, iterations); +} \ No newline at end of file