41 lines
1.6 KiB
C
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
|