home *** CD-ROM | disk | FTP | other *** search
/ BBS 1 / BBS#1.iso / document / mn894.ha / KOROTK2.TXT < prev    next >
Text File  |  1994-10-19  |  3KB  |  116 lines

  1. ǬΓπá½∞¡á∩ »α«í½Ñ¼á αáß»«º¡áóá¡¿∩ «íαẫó αÑΦáÑΓß∩ ß »«¼«Θ∞ε ÑÑ
  2. ñѬ«¼»«º¿µ¿¿ ¡á ¡Ñ߬«½∞¬« í«½ÑÑ »α«ßΓδσ »«ñºáñáτ, «ñ¡á ¿º ¬«Γ«αδσ -
  3. »α«óÑñÑ¡¿Ñ »áαá¼ÑΓα¿τÑ߬«ú« »αÑ«íαẫóá¡¿∩ òáΣá. Åα¿óÑñÑ¡δ »α¿¼Ñαδ
  4. »α«úαá¼¼ ¡á æ.
  5.  
  6. ï¿ßΓ¿¡ú
  7.  
  8. #include <stdlib.h>
  9. #include <math.h>
  10. #include <alloc.h>
  11. #include <stdio.h>
  12. #define MAXLINES 5 /* îá¬ß¿¼á½∞¡«Ñ τ¿ß½« »α∩¼δσ    */
  13.                    /* ñ½∩ «ñ¡«ú« º¡áτÑ¡¿∩ πú½á     */
  14.  
  15. void InitHough(float delt, int freshold);
  16. void Hough(int x, int y, int dx, int dy);
  17. void CloseHough(void);
  18. int getch(void);
  19.  
  20. /* öπ¡¬µ¿∩ »«½∞º«óáΓѽ∩. éσ«ñ: ¬««αñ¿¡áΓδ Γ«τ¬¿    */
  21. /* ¿º«íαáªÑ¡¿∩. éδσ«ñ: 1 ¿½¿ 0 - Γ«τ¬á »α¿¡áñ½Ñª¿Γ */
  22. /* ¿º«íαáªÑ¡¿ε (τÑα¡á∩) ¿½¿ ¡ÑΓ (íѽá∩).        */
  23. extern int image(int x,int y);
  24.  
  25. float dt;
  26. float far *Cos, far *Sin;
  27. unsigned far *H;
  28. int fresh;
  29.  
  30. /* delt - αẼÑα Φáúá »« πú½π,                     */
  31. /* freshold - ¼¿¡¿¼á½∞¡«Ñ τ¿ß½« Γ«τѬ, »« ¬«Γ«α«¼π */
  32. /* αÑú¿ßΓα¿απÑΓß∩ »α∩¼á∩                           */
  33. void InitHough(float delt, int freshold)
  34. {
  35. float t;
  36. int i;
  37.  dt=delt;
  38.  fresh=freshold;
  39.  Cos=(float far *)
  40.      farmalloc(sizeof(float)*(int)((M_PI+dt/2)/dt));
  41.  Sin=(float far *)
  42.      farmalloc(sizeof(float)*(int)((M_PI+dt/2)/dt));
  43.  if(Cos==NULL || Sin==NULL) return;
  44.  for(t=0, i=0; i<(int)((M_PI+dt/2)/dt); t+=dt, i++)
  45.  {
  46.   Cos[i]=cos(t);
  47.   Sin[i]=sin(t);
  48.  }
  49. }
  50.  
  51. void CloseHough(void)
  52. {
  53.  farfree(Cos);
  54.  farfree(Sin);
  55. }
  56.  
  57. void Hough(int x, int y, int dx, int dy)
  58. {
  59. int i,j,si,k,R,nt;
  60. int **lines;
  61.  if(!(Cos && Sin)) return;
  62.  si=4*max(dx,dy)/3;     /* ù¿ß½« ñ¿ß¬αÑΓ¡δσ φ½Ñ¼Ñ¡Γ«ó »« "α«" */
  63.  H=(unsigned far *)farmalloc(sizeof(int)*si);
  64.  if(H==NULL) return;
  65.  nt=(int)((M_PI+dt/2)/dt);
  66.                         /* ù¿ß½« Φáú«ó »« πú½π                */
  67.  lines=(int **)malloc(sizeof(int *)*nt);
  68.  if(lines==NULL) goto out;
  69.  for(i=0; i<nt; i++) lines[i]=NULL;
  70.  for(i=0; i<nt; i++)
  71.  {
  72.   lines[i]=(int *)malloc(sizeof(int)*MAXLINES);
  73.   if(lines[i]==NULL) goto out;
  74.   for(j=0; j<MAXLINES; j++) lines[i][j]=0;
  75.  }
  76.  
  77.  for(k=0; k<nt; k++)
  78.  {
  79.   for(i=0; i<si; i++) H[i]=0;
  80.   for(i=0; i<dx; i++)
  81.   {
  82.    for(j=0; j<dy; j++)
  83.    {
  84.     if(image(x+i,y+j))
  85.     {
  86.      R=i*Cos[k]+j*Sin[k];
  87.      if(R>=0 && R < si)
  88.       H[R]++;
  89.     }
  90.    }
  91.   }
  92.   R=0;
  93.   for(i=0; i<si && R<MAXLINES; i++)
  94.   {
  95.    if(H[i] > fresh) lines[k][R++]=i+1;
  96.    /* çừ¼¿¡áѼ ¼á¬ß¿¼π¼δ "α«" ñ½∩ k-ú« πú½á */
  97.   }
  98.  }
  99.  
  100.  for(i=0; i<nt ;i++)
  101.  {
  102.   for(j=0;j<MAXLINES;j++)
  103.   {
  104.    if(lines[i][j]!=0)
  105.    printf("\n»α∩¼á∩: πú«½=%f ñ¿ßΓá¡=%f",
  106.    (float)i*dt*180./3.1415926,(float)(lines[i][j]-1));
  107.   }
  108.  }
  109.  
  110.  getch();
  111.  out:
  112.  for(i=0;i<nt;i++) if(lines[i]) free(lines[i]);
  113.  if(lines) free(lines);
  114.  if(H) farfree(H);
  115. }
  116.