X-Git-Url: http://git.droids-corp.org/?p=aversive.git;a=blobdiff_plain;f=projects%2Fmicrob2010%2Fsensorboard%2Fimg_processing.h;fp=projects%2Fmicrob2010%2Fsensorboard%2Fimg_processing.h;h=4c06237951317d2a10ca9b21e7cc27de90fd2ac5;hp=0000000000000000000000000000000000000000;hb=5918edd6f4f713ef3c8b0b0020dd30a4fb8222ae;hpb=9d2d9100592e18fed985730298215884127fc568 diff --git a/projects/microb2010/sensorboard/img_processing.h b/projects/microb2010/sensorboard/img_processing.h new file mode 100644 index 0000000..4c06237 --- /dev/null +++ b/projects/microb2010/sensorboard/img_processing.h @@ -0,0 +1,111 @@ + + + +typedef struct _Object_bb +{ + uint8_t x_min; + uint8_t x_max; + uint8_t y_min; + uint8_t y_max; + uint16_t len; +}Object_bb; + +#define POLY_MAX_PTS 12 +typedef struct _Object_poly +{ + uint16_t pixels_perim; + uint16_t pts_num; + point_t pts[POLY_MAX_PTS]; + uint16_t len; + uint8_t color; +}Object_poly; + + +typedef struct _zone +{ + point_t p; + uint8_t h:7; + uint8_t valid:1; +}zone; + + +typedef struct _drop_column_zone +{ + uint8_t valid; + uint8_t z; + uint8_t h; +}drop_column_zone; + +typedef struct _drop_lintel_zone +{ + uint8_t valid; + uint8_t z1; + uint8_t h; + uint8_t z2; +}drop_lintel_zone; + + + + +#define MAX_ZONES 30 + +#define MAX_SISTER_PER_ZONE 1 + + + +unsigned char *parcour_img(unsigned char* data, int16_t x_in, int16_t y_in, Object_bb *sac_obj, Object_poly *sac_obj_poly, int16_t max_obj); + +float vect_get_angle(vect_t*v, vect_t* w); + +void object_poly_get_min_ar(Object_poly *o, unsigned int *pts_index_out, vect_t *v_out, vect_t *r1, vect_t*r2); + +void draw_pt_vect(unsigned char *buf, int16_t x_in, int16_t y_in, vect_t *v, point_t p); + +void vect_rot_trigo(vect_t* v); + +int object_poly_caliper_to_rectangle(Object_poly *o, + unsigned int *pts_index_out, vect_t* caliper, + vect_t *r1, vect_t*r2, point_t *p); + +int split_rectangle(point_t *p, vect_t *r1, vect_t* r2, uint8_t max_zone, zone* zones, uint8_t color); + + + +int zone_filtre_min_surface(unsigned char* data, int16_t x_in, int16_t y_in, + uint8_t color, unsigned int num_zone, zone* p); + +void reset_drop_zone(void); +void display_drop_zones(uint8_t n_columns, uint8_t n_lintels, zone* zones); + +unsigned int solve_objects_dropping(unsigned int points, unsigned int points_max, + uint8_t n_columns, uint8_t n_lintels, + uint8_t zones_num, zone* zones, int8_t sisters[MAX_ZONES][MAX_SISTER_PER_ZONE], uint8_t working_zone); + +uint8_t process_img(unsigned char *buffer, int16_t x_in, int16_t y_in, + zone * all_zones, uint8_t max_zones); + + +uint8_t color2h(uint8_t color); +uint8_t h2color(uint8_t color); + +int8_t get_column_dropzone(unsigned char *buffer, int16_t x_in, int16_t y_in, + uint8_t working_zone, int16_t center_x, int16_t center_y, + int16_t * dropzone_x, int16_t * dropzone_y); + + +uint8_t is_temple_there(unsigned char * buffer, int16_t x_in, int16_t y_in, + uint8_t h, int16_t center_x, int16_t center_y); + + + +int8_t find_temple_dropzone(unsigned char *buffer, int16_t x_in, int16_t y_in, + uint8_t working_zone, int16_t center_x, int16_t center_y, + int16_t * dropzone_x, int16_t * dropzone_y); + +void process_img_to_zone(unsigned char *buffer, int16_t x_in, int16_t y_in); + +#define PIXEL2CM (300./27.) + + +extern uint8_t g_zone_num; +extern zone g_all_zones[MAX_ZONES];