⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 susan.c

📁 嵌入式基准程序集Mibench,如果需要全部测试软件,请从密西根大学网站上下载: http://www.eecs.umich.edu/mibench/
💻 C
📖 第 1 页 / 共 4 页
字号:
            c=*(cp-*p);x+=3*c;y+=c;            p+=x_size-5;            c=*(cp-*p++);x-=2*c;y+=2*c;            c=*(cp-*p++);x-=c;y+=2*c;            c=*(cp-*p++);y+=2*c;            c=*(cp-*p++);x+=c;y+=2*c;            c=*(cp-*p);x+=2*c;y+=2*c;            p+=x_size-3;            c=*(cp-*p++);x-=c;y+=3*c;            c=*(cp-*p++);y+=3*c;            c=*(cp-*p);x+=c;y+=3*c;            xx=x*x;            yy=y*y;            sq=xx+yy;            if ( sq > ((n*n)/2) )            {              if(yy<xx) {                divide=(float)y/(float)abs(x);                sq=abs(x)/x;                sq=*(cp-in[(i+FTOI(divide))*x_size+j+sq]) +                   *(cp-in[(i+FTOI(2*divide))*x_size+j+2*sq]) +                   *(cp-in[(i+FTOI(3*divide))*x_size+j+3*sq]);}              else {                divide=(float)x/(float)abs(y);                sq=abs(y)/y;                sq=*(cp-in[(i+sq)*x_size+j+FTOI(divide)]) +                   *(cp-in[(i+2*sq)*x_size+j+FTOI(2*divide)]) +                   *(cp-in[(i+3*sq)*x_size+j+FTOI(3*divide)]);}              if(sq>290){                r[i*x_size+j] = max_no-n;                cgx[i*x_size+j] = (51*x)/n;                cgy[i*x_size+j] = (51*y)/n;}            }	}}}}}}}}}}}}}}}}}}}}  /* to locate the local maxima */  n=0;  for (i=5;i<y_size-5;i++)    for (j=5;j<x_size-5;j++) {       x = r[i*x_size+j];       if (x>0)  {          /* 5x5 mask */#ifdef FIVE_SUPP          if (              (x>r[(i-1)*x_size+j+2]) &&              (x>r[(i  )*x_size+j+1]) &&              (x>r[(i  )*x_size+j+2]) &&              (x>r[(i+1)*x_size+j-1]) &&              (x>r[(i+1)*x_size+j  ]) &&              (x>r[(i+1)*x_size+j+1]) &&              (x>r[(i+1)*x_size+j+2]) &&              (x>r[(i+2)*x_size+j-2]) &&              (x>r[(i+2)*x_size+j-1]) &&              (x>r[(i+2)*x_size+j  ]) &&              (x>r[(i+2)*x_size+j+1]) &&              (x>r[(i+2)*x_size+j+2]) &&              (x>=r[(i-2)*x_size+j-2]) &&              (x>=r[(i-2)*x_size+j-1]) &&              (x>=r[(i-2)*x_size+j  ]) &&              (x>=r[(i-2)*x_size+j+1]) &&              (x>=r[(i-2)*x_size+j+2]) &&              (x>=r[(i-1)*x_size+j-2]) &&              (x>=r[(i-1)*x_size+j-1]) &&	      (x>=r[(i-1)*x_size+j  ]) &&	      (x>=r[(i-1)*x_size+j+1]) &&	      (x>=r[(i  )*x_size+j-2]) &&	      (x>=r[(i  )*x_size+j-1]) &&	      (x>=r[(i+1)*x_size+j-2]) )#endif#ifdef SEVEN_SUPP          if (                 (x>r[(i-3)*x_size+j-3]) &&                (x>r[(i-3)*x_size+j-2]) &&                (x>r[(i-3)*x_size+j-1]) &&                (x>r[(i-3)*x_size+j  ]) &&                (x>r[(i-3)*x_size+j+1]) &&                (x>r[(i-3)*x_size+j+2]) &&                (x>r[(i-3)*x_size+j+3]) &&                (x>r[(i-2)*x_size+j-3]) &&                (x>r[(i-2)*x_size+j-2]) &&                (x>r[(i-2)*x_size+j-1]) &&                (x>r[(i-2)*x_size+j  ]) &&                (x>r[(i-2)*x_size+j+1]) &&                (x>r[(i-2)*x_size+j+2]) &&                (x>r[(i-2)*x_size+j+3]) &&                (x>r[(i-1)*x_size+j-3]) &&                (x>r[(i-1)*x_size+j-2]) &&                (x>r[(i-1)*x_size+j-1]) &&                (x>r[(i-1)*x_size+j  ]) &&                (x>r[(i-1)*x_size+j+1]) &&                (x>r[(i-1)*x_size+j+2]) &&                (x>r[(i-1)*x_size+j+3]) &&                (x>r[(i)*x_size+j-3]) &&                (x>r[(i)*x_size+j-2]) &&                (x>r[(i)*x_size+j-1]) &&                (x>=r[(i)*x_size+j+1]) &&                (x>=r[(i)*x_size+j+2]) &&                (x>=r[(i)*x_size+j+3]) &&                (x>=r[(i+1)*x_size+j-3]) &&                (x>=r[(i+1)*x_size+j-2]) &&                (x>=r[(i+1)*x_size+j-1]) &&                (x>=r[(i+1)*x_size+j  ]) &&                (x>=r[(i+1)*x_size+j+1]) &&                (x>=r[(i+1)*x_size+j+2]) &&                (x>=r[(i+1)*x_size+j+3]) &&                (x>=r[(i+2)*x_size+j-3]) &&                (x>=r[(i+2)*x_size+j-2]) &&                (x>=r[(i+2)*x_size+j-1]) &&                (x>=r[(i+2)*x_size+j  ]) &&                (x>=r[(i+2)*x_size+j+1]) &&                (x>=r[(i+2)*x_size+j+2]) &&                (x>=r[(i+2)*x_size+j+3]) &&                (x>=r[(i+3)*x_size+j-3]) &&                (x>=r[(i+3)*x_size+j-2]) &&                (x>=r[(i+3)*x_size+j-1]) &&                (x>=r[(i+3)*x_size+j  ]) &&                (x>=r[(i+3)*x_size+j+1]) &&                (x>=r[(i+3)*x_size+j+2]) &&                (x>=r[(i+3)*x_size+j+3]) )#endif{corner_list[n].info=0;corner_list[n].x=j;corner_list[n].y=i;corner_list[n].dx=cgx[i*x_size+j];corner_list[n].dy=cgy[i*x_size+j];corner_list[n].I=in[i*x_size+j];n++;if(n==MAX_CORNERS){      fprintf(stderr,"Too many corners.\n");      exit(1);         }}}}corner_list[n].info=7;free(cgx);free(cgy);}/* }}} *//* {{{ susan_quick(in,r,sf,max_no,corner_list) */susan_corners_quick(in,r,bp,max_no,corner_list,x_size,y_size)  uchar       *in, *bp;  int         *r, max_no, x_size, y_size;  CORNER_LIST corner_list;{int   n,x,y,i,j;uchar *p,*cp;  memset (r,0,x_size * y_size * sizeof(int));  for (i=7;i<y_size-7;i++)    for (j=7;j<x_size-7;j++) {        n=100;        p=in + (i-3)*x_size + j - 1;        cp=bp + in[i*x_size+j];        n+=*(cp-*p++);        n+=*(cp-*p++);        n+=*(cp-*p);        p+=x_size-3;        n+=*(cp-*p++);        n+=*(cp-*p++);        n+=*(cp-*p++);        n+=*(cp-*p++);        n+=*(cp-*p);        p+=x_size-5;        n+=*(cp-*p++);        n+=*(cp-*p++);        n+=*(cp-*p++);        n+=*(cp-*p++);        n+=*(cp-*p++);        n+=*(cp-*p++);        n+=*(cp-*p);        p+=x_size-6;        n+=*(cp-*p++);        n+=*(cp-*p++);        n+=*(cp-*p);      if (n<max_no){        p+=2;        n+=*(cp-*p++);      if (n<max_no){        n+=*(cp-*p++);      if (n<max_no){        n+=*(cp-*p);      if (n<max_no){        p+=x_size-6;        n+=*(cp-*p++);      if (n<max_no){        n+=*(cp-*p++);      if (n<max_no){        n+=*(cp-*p++);      if (n<max_no){        n+=*(cp-*p++);      if (n<max_no){        n+=*(cp-*p++);      if (n<max_no){        n+=*(cp-*p++);      if (n<max_no){        n+=*(cp-*p);      if (n<max_no){        p+=x_size-5;        n+=*(cp-*p++);      if (n<max_no){        n+=*(cp-*p++);      if (n<max_no){        n+=*(cp-*p++);      if (n<max_no){        n+=*(cp-*p++);      if (n<max_no){        n+=*(cp-*p);      if (n<max_no){        p+=x_size-3;        n+=*(cp-*p++);      if (n<max_no){        n+=*(cp-*p++);      if (n<max_no){        n+=*(cp-*p);        if (n<max_no)          r[i*x_size+j] = max_no-n;}}}}}}}}}}}}}}}}}}}  /* to locate the local maxima */  n=0;  for (i=7;i<y_size-7;i++)    for (j=7;j<x_size-7;j++) {       x = r[i*x_size+j];       if (x>0)  {          /* 5x5 mask */#ifdef FIVE_SUPP          if (              (x>r[(i-1)*x_size+j+2]) &&              (x>r[(i  )*x_size+j+1]) &&              (x>r[(i  )*x_size+j+2]) &&              (x>r[(i+1)*x_size+j-1]) &&              (x>r[(i+1)*x_size+j  ]) &&              (x>r[(i+1)*x_size+j+1]) &&              (x>r[(i+1)*x_size+j+2]) &&              (x>r[(i+2)*x_size+j-2]) &&              (x>r[(i+2)*x_size+j-1]) &&              (x>r[(i+2)*x_size+j  ]) &&              (x>r[(i+2)*x_size+j+1]) &&              (x>r[(i+2)*x_size+j+2]) &&              (x>=r[(i-2)*x_size+j-2]) &&              (x>=r[(i-2)*x_size+j-1]) &&              (x>=r[(i-2)*x_size+j  ]) &&              (x>=r[(i-2)*x_size+j+1]) &&              (x>=r[(i-2)*x_size+j+2]) &&              (x>=r[(i-1)*x_size+j-2]) &&              (x>=r[(i-1)*x_size+j-1]) &&	      (x>=r[(i-1)*x_size+j  ]) &&	      (x>=r[(i-1)*x_size+j+1]) &&	      (x>=r[(i  )*x_size+j-2]) &&	      (x>=r[(i  )*x_size+j-1]) &&	      (x>=r[(i+1)*x_size+j-2]) )#endif#ifdef SEVEN_SUPP          if (                 (x>r[(i-3)*x_size+j-3]) &&                (x>r[(i-3)*x_size+j-2]) &&                (x>r[(i-3)*x_size+j-1]) &&                (x>r[(i-3)*x_size+j  ]) &&                (x>r[(i-3)*x_size+j+1]) &&                (x>r[(i-3)*x_size+j+2]) &&                (x>r[(i-3)*x_size+j+3]) &&                (x>r[(i-2)*x_size+j-3]) &&                (x>r[(i-2)*x_size+j-2]) &&                (x>r[(i-2)*x_size+j-1]) &&                (x>r[(i-2)*x_size+j  ]) &&                (x>r[(i-2)*x_size+j+1]) &&                (x>r[(i-2)*x_size+j+2]) &&                (x>r[(i-2)*x_size+j+3]) &&                (x>r[(i-1)*x_size+j-3]) &&                (x>r[(i-1)*x_size+j-2]) &&                (x>r[(i-1)*x_size+j-1]) &&                (x>r[(i-1)*x_size+j  ]) &&                (x>r[(i-1)*x_size+j+1]) &&                (x>r[(i-1)*x_size+j+2]) &&                (x>r[(i-1)*x_size+j+3]) &&                (x>r[(i)*x_size+j-3]) &&                (x>r[(i)*x_size+j-2]) &&                (x>r[(i)*x_size+j-1]) &&                (x>=r[(i)*x_size+j+1]) &&                (x>=r[(i)*x_size+j+2]) &&                (x>=r[(i)*x_size+j+3]) &&                (x>=r[(i+1)*x_size+j-3]) &&                (x>=r[(i+1)*x_size+j-2]) &&                (x>=r[(i+1)*x_size+j-1]) &&                (x>=r[(i+1)*x_size+j  ]) &&                (x>=r[(i+1)*x_size+j+1]) &&                (x>=r[(i+1)*x_size+j+2]) &&                (x>=r[(i+1)*x_size+j+3]) &&                (x>=r[(i+2)*x_size+j-3]) &&                (x>=r[(i+2)*x_size+j-2]) &&                (x>=r[(i+2)*x_size+j-1]) &&                (x>=r[(i+2)*x_size+j  ]) &&                (x>=r[(i+2)*x_size+j+1]) &&                (x>=r[(i+2)*x_size+j+2]) &&                (x>=r[(i+2)*x_size+j+3]) &&                (x>=r[(i+3)*x_size+j-3]) &&                (x>=r[(i+3)*x_size+j-2]) &&                (x>=r[(i+3)*x_size+j-1]) &&                (x>=r[(i+3)*x_size+j  ]) &&                (x>=r[(i+3)*x_size+j+1]) &&                (x>=r[(i+3)*x_size+j+2]) &&                (x>=r[(i+3)*x_size+j+3]) )#endif{corner_list[n].info=0;corner_list[n].x=j;corner_list[n].y=i;x = in[(i-2)*x_size+j-2] + in[(i-2)*x_size+j-1] + in[(i-2)*x_size+j] + in[(i-2)*x_size+j+1] + in[(i-2)*x_size+j+2] +    in[(i-1)*x_size+j-2] + in[(i-1)*x_size+j-1] + in[(i-1)*x_size+j] + in[(i-1)*x_size+j+1] + in[(i-1)*x_size+j+2] +    in[(i  )*x_size+j-2] + in[(i  )*x_size+j-1] + in[(i  )*x_size+j] + in[(i  )*x_size+j+1] + in[(i  )*x_size+j+2] +    in[(i+1)*x_size+j-2] + in[(i+1)*x_size+j-1] + in[(i+1)*x_size+j] + in[(i+1)*x_size+j+1] + in[(i+1)*x_size+j+2] +    in[(i+2)*x_size+j-2] + in[(i+2)*x_size+j-1] + in[(i+2)*x_size+j] + in[(i+2)*x_size+j+1] + in[(i+2)*x_size+j+2];corner_list[n].I=x/25;/*corner_list[n].I=in[i*x_size+j];*/x = in[(i-2)*x_size+j+2] + in[(i-1)*x_size+j+2] + in[(i)*x_size+j+2] + in[(i+1)*x_size+j+2] + in[(i+2)*x_size+j+2] -   (in[(i-2)*x_size+j-2] + in[(i-1)*x_size+j-2] + in[(i)*x_size+j-2] + in[(i+1)*x_size+j-2] + in[(i+2)*x_size+j-2]);x += x + in[(i-2)*x_size+j+1] + in[(i-1)*x_size+j+1] + in[(i)*x_size+j+1] + in[(i+1)*x_size+j+1] + in[(i+2)*x_size+j+1] -        (in[(i-2)*x_size+j-1] + in[(i-1)*x_size+j-1] + in[(i)*x_size+j-1] + in[(i+1)*x_size+j-1] + in[(i+2)*x_size+j-1]);y = in[(i+2)*x_size+j-2] + in[(i+2)*x_size+j-1] + in[(i+2)*x_size+j] + in[(i+2)*x_size+j+1] + in[(i+2)*x_size+j+2] -   (in[(i-2)*x_size+j-2] + in[(i-2)*x_size+j-1] + in[(i-2)*x_size+j] + in[(i-2)*x_size+j+1] + in[(i-2)*x_size+j+2]);y += y + in[(i+1)*x_size+j-2] + in[(i+1)*x_size+j-1] + in[(i+1)*x_size+j] + in[(i+1)*x_size+j+1] + in[(i+1)*x_size+j+2] -        (in[(i-1)*x_size+j-2] + in[(i-1)*x_size+j-1] + in[(i-1)*x_size+j] + in[(i-1)*x_size+j+1] + in[(i-1)*x_size+j+2]);corner_list[n].dx=x/15;corner_list[n].dy=y/15;n++;if(n==MAX_CORNERS){      fprintf(stderr,"Too many corners.\n");      exit(1);         }}}}corner_list[n].info=7;}/* }}} *//* }}} *//* {{{ main(argc, argv) */main(argc, argv)  int   argc;  char  *argv [];{/* {{{ vars */FILE   *ofp;char   filename [80],       *tcp;uchar  *in, *bp, *mid;float  dt=4.0;int    *r,       argindex=3,       bt=20,       principle=0,       thin_post_proc=1,       three_by_three=0,       drawing_mode=0,       susan_quick=0,       max_no_corners=1850,       max_no_edges=2650,       mode = 0, i,       x_size, y_size;CORNER_LIST corner_list;/* }}} */  if (argc<3)    usage();  get_image(argv[1],&in,&x_size,&y_size);  /* {{{ look at options */  while (argindex < argc)  {    tcp = argv[argindex];    if (*tcp == '-')      switch (*++tcp)      {        case 's': /* smoothing */          mode=0;	  break;        case 'e': /* edges */          mode=1;	  break;        case 'c': /* corners */          mode=2;	  break;        case 'p': /* principle */          principle=1;	  break;        case 'n': /* thinning post processing */          thin_post_proc=0;	  break;        case 'b': /* simple drawing mode */          drawing_mode=1;	  break;        case '3': /* 3x3 flat mask */          three_by_three=1;	  break;        case 'q': /* quick susan mask */          susan_quick=1;	  break;	case 'd': /* distance threshold */          if (++argindex >= argc){	    printf ("No argument following -d\n");	    exit(0);}	  dt=atof(argv[argindex]);          if (dt<0) three_by_three=1;	  break;	case 't': /* brightness threshold */          if (++argindex >= argc){	    printf ("No argument following -t\n");	    exit(0);}	  bt=atoi(argv[argindex]);	  break;      }	          else        usage();    argindex++;  }  if ( (principle==1) && (mode==0) )    mode=1;/* }}} */  /* {{{ main processing */  switch (mode)  {    case 0:      /* {{{ smoothing */      setup_brightness_lut(&bp,bt,2);      susan_smoothing(three_by_three,in,dt,x_size,y_size,bp);      break;/* }}} */    case 1:      /* {{{ edges */      r   = (int *) malloc(x_size * y_size * sizeof(int));      setup_brightness_lut(&bp,bt,6);      if (principle)      {        if (three_by_three)          susan_principle_small(in,r,bp,max_no_edges,x_size,y_size);        else          susan_principle(in,r,bp,max_no_edges,x_size,y_size);        int_to_uchar(r,in,x_size*y_size);      }      else      {        mid = (uchar *)malloc(x_size*y_size);        memset (mid,100,x_size * y_size); /* note not set to zero */        if (three_by_three)          susan_edges_small(in,r,mid,bp,max_no_edges,x_size,y_size);        else          susan_edges(in,r,mid,bp,max_no_edges,x_size,y_size);        if(thin_post_proc)          susan_thin(r,mid,x_size,y_size);        edge_draw(in,mid,x_size,y_size,drawing_mode);      }      break;/* }}} */    case 2:      /* {{{ corners */      r   = (int *) malloc(x_size * y_size * sizeof(int));      setup_brightness_lut(&bp,bt,6);      if (principle)      {        susan_principle(in,r,bp,max_no_corners,x_size,y_size);        int_to_uchar(r,in,x_size*y_size);      }      else      {        if(susan_quick)          susan_corners_quick(in,r,bp,max_no_corners,corner_list,x_size,y_size);        else          susan_corners(in,r,bp,max_no_corners,corner_list,x_size,y_size);        corner_draw(in,corner_list,x_size,drawing_mode);      }      break;/* }}} */  }    /* }}} */  put_image(argv[2],in,x_size,y_size);}/* }}} */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -