• 大小: 6KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-24
  • 语言: C/C++
  • 标签: 灰度图像  二值化  

资源简介

用于对灰度图像进行二值化分割,采用贝叶斯方法计算阈值

资源截图

代码片段和文件信息

//////////////////////////////////////////////////////////////////////////
//  文件名:mybinary.cpp
//
//  图像二值化函数:
//
//  GetThreshold()    - 计算图像阈值
//  BinaryGlobal()    - 图像阈值分割运算
//
//////////////////////////////////////////////////////////////////////////

#include 

//////////////////////////////////////////////////////////////////////////
//
// 函数名称:
//   ThresholdTrans()
//
// 参数:
//   unsigned char* pImage      - 指向源图像指针
//   int  lWidth               - 源图像宽度(象素数)
//   int  lHeight              - 源图像高度(象素数)
//   unsigned char  bThre      - 阈值
//
// 返回值:
//   bool             - 成功返回TRUE,否则返回FALSE。
//
// 说明:
//   该函数用来对图像进行阈值变换。对于灰度值小于阈值的象素直接设置
// 灰度值为0;灰度值大于阈值的象素直接设置为255。
//
//////////////////////////////////////////////////////////////////////////

bool ThresholdTrans(unsigned char* pImage int lWidth int lHeight unsigned char bThre)
{
unsigned char* lpSrc = pImage;
int i j;

for(i = 0; i < lHeight; i++)
{
for(j = 0; j < lWidth; j++)
{
// if ((*lpSrc) < bThre)
if ((*lpSrc) <= bThre)
{
*lpSrc++ = 0;
}
else
{
*lpSrc++ = 255;
}
}
}
return true;
}
//---------------------------------------------------------------------------

//////////////////////////////////////////////////////////////////////////
//
// 函数名称:
//   GetThreshold()
//
// 参数:
//   int* lHistogram    - 指向源图像的直方图的指针
//
// 返回值:
//   unsigned char          - 图像分割的阈值。
//
// 说明:
// 该函数用于计算图像二值化分割的阈值。
//
//////////////////////////////////////////////////////////////////////////

unsigned char GetThreshold(int* lpHistogram)
{
int i;

    unsigned char iMaxGrayValueiMinGrayValue;

unsigned char iThresholdiNewThreshold;
    unsigned char iMean1GrayValueiMean2GrayValue;
int lP1lP2lS1lS2;
int iIterationTimes;

iMinGrayValue = 255;
    for(i = 0; i < 256; i++)
    {
        if(lpHistogram[i] != 0)
        {
         iMinGrayValue = i;
            break;
        }
    }
iMaxGrayValue = 0;
    for(i = 255; i >= 0; i--)
    {
        if(lpHistogram[i] != 0)
        {
         iMaxGrayValue = i;
            break;
        }
    }
    if(iMinGrayValue == iMaxGrayValue)
        return 255;

iNewThreshold = (iMinGrayValue + iMaxGrayValue)/2;
iThreshold = 0;
for(iIterationTimes = 0; iThreshold != iNewThreshold && iIterationTimes < 100;iIterationTimes ++)
{
iThreshold = iNewThreshold;
lP1 = 0;
lP2 = 0;
lS1 = 0;
lS2 = 0;

for (i = iMinGrayValue; i < iThreshold; i++)
{
lP1 += lpHistogram[i]*i;
lS1 += lpHistogram[i];
}
        if(lS1 == 0) break;
iMean1GrayValue = (unsign

评论

共有 条评论