直方图均衡化

直方图均衡化是增强图像对比度的一种方法。当一幅图像灰度级分布不均的时候,可以通过直方图均衡化来重新分布灰度。

直方图均衡化可以在YUV的Y数据上,HSI的I分量,HSV的V分量上处理或者RGB上处理。

直方图均衡化分一下几个步骤:

1、统计每个灰度级出现的像素数量:unsigned chargrayArray[i], int i∈[0,255];

2、计算累计直方图:eqHistTemp[0] = grayArray[0];

for(int i= 0; i < 256; i++)  eqHistTemp[i]=  eqHistTemp[i-1]+grayArray[i];

3、累计分布取整,保存计算出来的灰度映射关系:

for(int i= 0; i < 256; i++)

       eqHist[i] =(int)(255*eqHistTemp[i]/size+0.5);  //size= width * height;

4、进行灰度映射,进行均衡化:

for(int i= 0; i < width * height; i++)

{

       unsigned char GrayIndex = pImg[i];  //pImg[i] 原图

       pHistImg[i] = eqHist[GrayIndex];  //pHistImg[i] 均衡化后的图像

}

完整程序如下:

void HistNormolize(unsigned char *pImg, unsigned char *pNormImg,int width,int height)
{
int hist[256] = {0};
int  fpHist[256] = {0};
int eqHistTemp[256] = {0};
int eqHist[256] = {0};
int size = height *width;
int i ,j;

for (i = 0;i < height * width; i++) 
{
unsigned char grayArray = pImg[i];
hist[grayArray] ++ ;
}

eqHistTemp[0] = hist[0];
for ( i = 1; i< 256; i++)   
{
eqHistTemp[i] = eqHistTemp[i-1] + hist[i];
}

for (i = 0; i< 256; i++)
{
eqHist[i] = (int)(255 * eqHistTemp[i] /size + 0.5);
}
for (i = 0;i < height * width; i++) 
{
unsigned char GrayIndex = pImg[i];
pNormImg[i] = eqHist[GrayIndex];

}

直方图均衡化处理结果如下:



                                                                              原图和原图的直方图




                                                                        直方图均衡化后的图像和直方图

源码下载:http://download.csdn.net/detail/fang20277/9559614

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值