資源簡介
用于對灰度圖像進行二值化分割,采用貝葉斯方法計算閾值
代碼片段和文件信息
//////////////////////////////////////////////////////////////////////////
//??文件名: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? {
for(j?=?0;?j? {
// if?((*lpSrc)? 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? {
lP1?+=?lpHistogram[i]*i;
lS1?+=?lpHistogram[i];
}
????????if(lS1?==?0)?break;
iMean1GrayValue?=?(unsign
- 上一篇:C++程序設計朱金付版課后習題答案
- 下一篇:AES、DES加密算法C語言源碼
評論
共有 條評論