• OTSU自适应阈值分割


    int otsu (unsigned char *image, int rows, int cols, int x0, int y0, int dx, int dy, int vvv)
    {

      unsigned char *np;      // 图像指针
      int thresholdValue=1; // 阈值
      int ihist[256];             // 图像直方图,256个点

      int i, j, k;          // various counters
      int n, n1, n2, gmin, gmax;
      double m1, m2, sum, csum, fmax, sb;

      // 对直方图置零...
      memset(ihist, 0, sizeof(ihist));

      gmin=255; gmax=0;
      // 生成直方图
      for (i = y0 + 1; i < y0 + dy - 1; i++) {
        np = &image[i*cols+x0+1];
        for (j = x0 + 1; j < x0 + dx - 1; j++) {
          ihist[*np]++;
          if(*np > gmax) gmax=*np;
          if(*np < gmin) gmin=*np;
          np++;
        }
      }

      // set up everything
      sum = csum = 0.0;
      n = 0;

      for (k = 0; k <= 255; k++) {
        sum += (double) k * (double) ihist[k];   
          += ihist[k];                                        
      }

      if (!n) {
        // if n has no value, there is problems...
        fprintf (stderr, "NOT NORMAL thresholdValue = 160\n");
        return (160);
      }

      // do the otsu global thresholding method
      fmax = -1.0;
      n1 = 0;
      for (k = 0; k < 255; k++) {
        n1 += ihist[k];
        if (!n1) { continue; }
        n2 = n - n1;
        if (n2 == 0) { break; }
        csum += (double) k *ihist[k];
        m1 = csum / n1;
        m2 = (sum - csum) / n2;
        sb = (double) n1 *(double) n2 *(m1 - m2) * (m1 - m2);
       
        if (sb > fmax) {
          fmax = sb;
          thresholdValue = k;
        }
      }

      // at this point we have our thresholding value

      // debug code to display thresholding values
      if ( vvv & 1 )
      fprintf(stderr,"# OTSU: thresholdValue = %d gmin=%d gmax=%d\n",
         thresholdValue, gmin, gmax);

      return(thresholdValue);
    }

    原文:http://wsyjwps1983.blog.163.com/blog/static/680090012009722114728877/

  • 相关阅读:
    poj3192
    poj3511
    cnblogs太好了,让我能在开发时使用微软雅黑!!
    用ftp实现大文件上传
    学习.net必看的书:Scott Mitchell ASP.NET 2.0(pdf)
    c#实现ftp功能
    猛然发现c学的好不精阿!!
    OFFICE 大全简介(转自网络)
    c# 实现文件浏览功能
    IntelliSense
  • 原文地址:https://www.cnblogs.com/yingying0907/p/2128073.html
Copyright © 2020-2023  润新知