• 大小: 1.93MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-02
  • 语言: 其他
  • 标签:

资源简介

在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


评论

共有 条评论