You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
1.6 KiB
C

#ifndef SHI_TOMASI_H
#define SHI_TOMASI_H
typedef struct data_wrapper_t
{
float data;
int x;
int y;
} data_wrapper_t;
/// Draws a box at specfied location in the image. Used for markgin features.
void draw_features(data_wrapper_t *features, unsigned int count, float *image, int image_width, int image_height);
/// Find features in an image.
unsigned int find_features(data_wrapper_t *eigenvalues, int max_features, int image_width, int image_height, data_wrapper_t **features);
/// Defines comparison for data_wrapper_t. When used with qsort, it will result in a descending order array.
int sort_data_wrapper_value_desc(const void *a, const void *b);
// Sort data_wrapper_t types by their index (x first then y) in ascending order.
int sort_data_wrapper_index_asc(const void *a, const void *b);
/// Compute the eigenvalues of a pixel's Z matrix.
void compute_eigenvalues(float *hgrad, float *vgrad, int image_height, int image_width, int windowsize, data_wrapper_t *eigenvalues);
/// Calculate the minimum eigenvalue.
float min_eigenvalue(float a, float b, float c, float d);
/// Produce the images horizontal and vertical gradients.
void convolve(float *kernel, float *image, float *resultimage, int image_width, int image_height, int kernel_width, int kernel_height, int half);
/// Creates Gaussian kernel and Gaussian derivative kernel for image gradient/convolution procedure.
void gen_kernel(float *gkernel, float *dkernel, float sigma, int a, int w);
/// Prints out the program help menu.
void help(const char *err);
/// Print out all of the detected features.
void print_features(data_wrapper_t *features, unsigned int count);
#endif