• 全局阈值算法分析


    因为最近在做数字识别,需要用到自动阈值,重新看了看全局阈值算法,分析写在这里

    (学习了清风似水流的CSDN博客:http://blog.csdn.net/ilyhlf5201314/article/details/8525695)

    1.  处理流程:

                 1.为全局阈值选择一个初始估计值T(图像的平均灰度)。
                 2.用T分割图像。产生两组像素:G1有灰度值大于T的像素组成,G2有小于等于T像素组成。
                 3.计算G1和G2像素的平均灰度值m1和m2;
                 4.计算一个新的阈值:T = (m1 + m2) / 2;
                 5.重复步骤2和4,直到连续迭代中的T值间的差为零。

                 此种方法主要适用于图像直方图有明显波谷。

    2.程序代码:

     1 //全局阈值函数
     2 //给定一个初始阈值T,在T两边分别计算平均阈值T1和T2,不等,T=(T1+T2)/2,知道两边的平均阈值相等
     3 u8 GlobalThreshold(u8 **img, u16 height, u16 width)
     4 {
     5     u8 pg[256] = {0};         //直方图数组
     6     u16 i,j,t=0,t1,t2,k1,k2;
     7     double u=0,u1,u2;
     8 
     9     //for (i = 0; i<256; i++) pg[i]=0;
    10     for (i = 0; i<height; i++) //直方图统计
    11     {
    12         for (j = 0; j<width; j++)
    13         {
    14             pg[ img[i][j] ]++;
    15         }
    16     }
    17             
    18 
    19     
    20     for (i=0;i<256;i++)
    21     {
    22         t += pg[i];              //计算被统计的像素点数目
    23         u += i * pg[i];          //第i阶灰度值*第i阶像素数目
    24     }
    25     k2 = (u16 )( u/t); //计算被统计像素点灰度的平均值,初始灰度值
    26     
    27     do {
    28         k1 = k2;
    29         t1 = 0; u1 = 0;
    30         for (i = 0; i<=k1; i++)       //类似前面,计算低灰度组的累加值
    31         {
    32             t1 += pg[i];         //计算低灰度组被统计的像素点数目
    33             u1 += i * pg[i];
    34         }
    35 
    36         t2 = t - t1;           //得到高灰度组的像素点数目
    37         u2 = u - u1;           //得到高灰度组的加权灰度
    38 
    39         if (t1)
    40             u1=u1/t1;     //计算低灰度组的平均值
    41         else
    42             u1=0;
    43 
    44         if (t2)
    45             u2=u2/t2;    //计算高灰度组的平均值
    46         else
    47             u2=0;
    48 
    49         k2 = (u16 )((u1 + u2)/2 );    //计算新的阈值
    50     }while( k1 != k2);        //如果数值未稳定,继续
    51 
    52     return k1;
    53 }
  • 相关阅读:
    [LeetCode] Baseball Game
    [Linux] Shell Scripts
    [Linux] 正则表达式与文件格式化处理
    [Linux] 学习bash
    [Linux] vim程序编辑器
    [Linux] 文件与文件系统的压缩打包与备份
    [LeetCode] Reverse Words in a String
    [LeetCode] Reverse Integer
    [国嵌笔记][017][Makefile工程管理]
    [国嵌笔记][016][交叉工具链]
  • 原文地址:https://www.cnblogs.com/rongfangliu/p/3575898.html
Copyright © 2020-2023  润新知