資源簡介
在CImage類的基礎上進行直方圖均衡化,分解過程局部實現(xiàn),最后完成直方圖均衡化結果。

代碼片段和文件信息
//第一步:計算初始直方圖,即記錄每一個像素出現(xiàn)次數(shù)。
CImage?*?pTempImage;
pTempImage?=?&m_Image;
int?hist[256];
double?phist[256];
for(i?=?0;?i?256?;?i++)
{
hist[i]?=?0; //清零
}
for(int?i=?0;?iGetHeight();?i++)
{
for(int?j?=?0;?jGetWidth();j++)
{
COLORREF?rgb?=?pTempImage->GetPixel(ji);
int?rValue??=?GetRValue(rgb);??
//??記錄每一個像素出現(xiàn)次數(shù)。
//?j是行,i是列
hist[rValue]++;
}
}
//?第二步:由上面得到的初始直方圖計算歸一化直方圖和累積直方圖
???
for?(int?i?=?0;?i?<=?255?;i++)
{
phist?[i]?=?(double)?hist[i]?/?(pTempImage->GetHeight()?*?pTempImage->GetWidth());??//歸一化直方圖?即每個像素出現(xiàn)概率
}
double?dSum[256]?=?{0.0};
for(int?i?=?0;?i<=255;i++)
{
if(i?!=?0)
{
dSum[i]?=?dSum[i-1]?+?phist[i];
}
else//累積直方圖
{
dSum[i]??=?phist[i];
}
}
Mapping[256];
for(int?i?=?0;?i?256;?i++)
{
Mapping[i]?=?(int)?(255.0?*?dsum[i]?+?0.5);
//保存映射關系;需判斷值在0-255之間
}
??//求均衡化映射(舊圖->新圖)關系,并寫入新圖像
??
for(int?i?=?0;?i?GetHeight();?i++)
{
for(int?j?=?0;?j?GetWidth();j++)
{
COLORREF?rgb?=?pTempImage->GetPixel(ij);
int?rValue?=?GetRValue(rgb);
rValue?=?Mapping[rValue];????????//根據(jù)映射關系實現(xiàn)均衡化
rgb?=?RGB(rValuerValuerValue);
pTempImage->SetPixel(xyrgb);
}
}
Invalidate();
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????256158??2017-09-23?12:03??直方圖均衡化\CImage類.pdf
?????文件???????1587??2017-10-24?13:44??直方圖均衡化\zhifangtujunhenghua.cpp
?????文件??????66614??2004-06-29?23:26??直方圖均衡化\直方圖均衡.bmp
?????文件????7636480??2017-10-24?13:57??直方圖均衡化\直方圖均衡化.exe
?????目錄??????????0??2017-10-24?14:01??直方圖均衡化
-----------?---------??----------?-----??----
??????????????7960839????????????????????5
評論
共有 條評論