/* imgCED.c */ #include "tools.h" #include "eigen.h" #include #define PRGNAME "CED" #define ERROR(e) imgError(e,PRGNAME) #define PI 3.14159265 #define PI_OVER_8 (PI / 8.0) int main(int argc,char **argv) { it_image *out1,*rin,*gin,*bin,*im; it_float q1,q2,q4; it_image *e1,*e2,*v; it_float fe1, fe2, fv; int width=0,height=0,x,y; int v_x=0,v_y=0,v_width=0,v_height=0,y_end=0; it_float *Rr0_ptr,*Rr1_ptr,*Rr2_ptr,*ptr1; it_float *Gr0_ptr,*Gr1_ptr,*Gr2_ptr; it_float *Br0_ptr,*Br1_ptr,*Br2_ptr; it_float *r0_ptr,*r1_ptr,*r2_ptr; double val,u1,u2,aa,bb,cc,dd,ee,ff,gg,hh,ii,rx,ry,gx,gy,bx,by; double min,max,angle; IFHELP { fprintf(stderr,"img%s - Perform Canny color edge detection\n", PRGNAME); fprintf(stderr," stdin: Float\n"); fprintf(stderr," stdout: Float\n"); exit(0); } imgStart(PRGNAME); /* Loop for all images */ do { rin=i_read_image_file(stdin,IT_FLOAT,IM_FRAGMENT); if(rin==NULL) ERROR("can't import image file"); gin=i_read_image_file(stdin,IT_FLOAT,IM_FRAGMENT); if(gin==NULL) ERROR("can't import image file"); bin=i_read_image_file(stdin,IT_FLOAT,IM_FRAGMENT); if(bin==NULL) ERROR("can't import image file"); width=rin->width; height=rin->height; v_x=rin->valid_x+1; v_y=rin->valid_y+1; v_width=rin->valid_width-2; v_height=rin->valid_height-2; y_end=v_y+v_height; out1=i_create_image(width,height,IT_FLOAT,IM_FRAGMENT); if(out1==NULL) ERROR("out of memory"); im=i_create_image(width,height,IT_FLOAT,IM_FRAGMENT); if(im==NULL) ERROR("out of memory"); e1=i_create_image(width,height,IT_FLOAT,IM_FRAGMENT); if(e1==NULL) ERROR("out of memory"); e2=i_create_image(width,height,IT_FLOAT,IM_FRAGMENT); if(e2==NULL) ERROR("out of memory"); v=i_create_image(width,height,IT_FLOAT,IM_FRAGMENT); if(v==NULL) ERROR("out of memory"); imgInitMinMax(min,max); for(y=v_y;y= - PI_OVER_8) && (angle < PI_OVER_8)) || (angle >= 7 * PI_OVER_8)) { u1=dd; u2=ff; } else if (((angle >= -5 * PI_OVER_8) && (angle < -3 * PI_OVER_8)) || ((angle >= 3 * PI_OVER_8) && (angle < 5 * PI_OVER_8))) { u1=bb; u2=hh; } else if (((angle >= -7 * PI_OVER_8) && (angle < -5 * PI_OVER_8)) || ((angle >= PI_OVER_8) && (angle < 3 * PI_OVER_8))) { u1=cc; u2=gg; } else if (((angle >= -3 * PI_OVER_8) && (angle < - PI_OVER_8)) || ((angle >= 5 * PI_OVER_8) && (angle < 7 * PI_OVER_8))) { u1=aa; u2=ii; } else { printf("Big error. Angle = %f\n", angle); } val=0.0; if(ee>u1 &&ee>u2) val=ee; *ptr1++=val; if(val>max) max=val; if(valmin_value=min; out1->max_value=max; out1->valid_x=v_x; out1->valid_y=v_y; out1->valid_width=v_width; out1->valid_height=v_height; i_write_image_file(stdout, out1, IF_BINARY); i_destroy_image(e1); i_destroy_image(e2); i_destroy_image(v); i_destroy_image(out1); i_destroy_image(im); } while(!feof(stdin)); imgFinish(PRGNAME); return(0); }