资源简介
用于对灰度图像进行二值化分割,采用贝叶斯方法计算阈值
代码片段和文件信息
//////////////////////////////////////////////////////////////////////////
// 文件名: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
- 上一篇:C++程序设计朱金付版课后习题答案
- 下一篇:AES、DES加密算法C语言源码
评论
共有 条评论