#ifndef __CASS_IMAGE__
#define __CASS_IMAGE__

#include <cass.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifndef CHAN
#define CHAN 3
#define	MNTS 3
#endif

int image_init (const char *path);
int image_cleanup (void);

int image_ping (const char *filename, int *width, int *height);
int image_read_rgb (const char *filename, int *width, int *height, unsigned char **data);
int image_read_hsv (const char *filename, int *width, int *height, unsigned char **data);

int image_read_rgb_hsv (const char *filename, int *width, int *height, unsigned char **rgb, unsigned char **hsv);
int image_read_rgb_hsv_buf (const char *buf, int bufsize, int *width, int *height, unsigned char **rgb, unsigned char **hsv);

int image_read_gray (const char *filename, int *width, int *height, float **data);
int image_write_rgb (const char *filename, int width, int height, unsigned char *data);

/* dataset has only 1 vecset */
int image_extract_helper (unsigned char *HSV, unsigned char *mask, int width, int height, int nrgn, cass_dataset_t *ds);
//int image_extract (const char *filename, cass_dataset_t *dataset);

int image_segment (void **output, int *num_ccs, void *pixels, int width, int height);
/* for feature extraction */

void add_edge(unsigned char *rgb, int nx, int ny, unsigned char *rmap);

int image_sift_extract (const char *fname, cass_dataset_t *ds, int O, int S, int o_min);

void add_edge(unsigned char *rgb, int nx, int ny, unsigned char *rmap);

typedef struct {
	int		a1, b1, a2, b2; 
	int		u1, v1, u2, v2; 
	int		cx, cy; 
	int		p1, p2; 
} box_t; 

typedef struct {
	int		nbox; 
	int		size; 
	box_t		**boxes;
} box_set_t; 

typedef struct {
	int		nrow, ncol, nrgn, size;
	uchar		**map;
	box_set_t	*box_set; 
	int		*rgn_sz;
	float		*rgn[CHAN][MNTS]; 
} img_map_t;

box_t *box_new(int a, int b); 

void box_insert_pxl(box_t *box, int a, int b, int clear); 

void box_to_vec(box_t *box, float *vec, int offset);

box_set_t *box_set_new(int hint);

void box_set_free(box_set_t **box_set);

void box_set_insert_pxl(box_set_t *box_set, int r, int a, int b); 

void img_map_free(img_map_t **img_map); 

#ifdef __cplusplus
};
#endif

#endif

