资源简介
在CImage类的基础上进行直方图均衡化,分解过程局部实现,最后完成直方图均衡化结果。
代码片段和文件信息
//第一步:计算初始直方图,即记录每一个像素出现次数。
CImage * pTempImage;
pTempImage = &m_Image;
int hist[256];
double phist[256];
for(i = 0; i < 256 ; i++)
{
hist[i] = 0; //清零
}
for(int i= 0; i< pTempImage->GetHeight(); i++)
{
for(int j = 0; j< pTempImage->GetWidth();j++)
{
COLORREF rgb = pTempImage->GetPixel(ji);
int rValue = GetRValue(rgb);
// 记录每一个像素出现次数。
// j是行,i是列
hist[rValue]++;
}
}
// 第二步:由上面得到的初始直方图计算归一化直方图和累积直方图
for (int i = 0; i <= 255 ;i++)
{
phist [i] = (double) hist[i] / (pTempImage->GetHeight() * pTempImage->GetWidth()); //归一化直方图 即每个像素出现概率
}
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 < pTempImage->GetWidth();j++)
{
COLORREF rgb = pTempImage->GetPixel(ij);
int rValue = GetRValue(rgb);
rValue = Mapping[rValue]; //根据映射关系实现均衡化
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
评论
共有 条评论