《图像处理系列----灰度图像的直方图均衡化》
此文章属于原创文章,转载请注明:http://blog.csdn.net/iamsheldon 谢谢!!!
首先,在进行程序设计之前我们来了解一下的直方图均衡化的原理。
其中最重要的是最后一条公式
以下是实现程序:
- /*******************************************************
- *函数功能:灰度图像均衡化
- *参数: gray_in指向输入数据的指针
- gray_out指向输出数据的指针
- size 为图片的大小
- *说明: gray_in与gray_out可以相等
- *返回值:无
- *********************************************************/
- void zjGrayHistQual(BYTE *gray_in,BYTE *gray_out,Size size)
- {
- int i;
- int j;
- int height;
- int width;
- long hist[256];
- long pixelnum=0;
- long nnum=0;
- double pr;
- height=size.height;
- width=size.width;
- pixelnum=height*width;
- //直方图初始化
- for(i=0;i<256;i++)
- hist[i]=0;
- //计算图像的直方图
- for(i=0;i<height;i++)
- for(j=0;j<width;j++)
- {
- ++hist[*(gray_in+i*width+j)];
- }
- //计算变换后的灰度值
- for(i=0;i<256;i++)
- {
- nnum+=hist[i];
- pr=(double)nnum/pixelnum;
- hist[i]=(BYTE)255*pr;
- }
- //根据结果,替换原图像的灰度
- for(i=0;i<height;i++)
- for(j=0;j<width;j++)
- {
- *(gray_out+i*width+j)=hist[*(gray_in+i*width+j)];
- }
- }
说明:左边是处理前,右边是处理后。
大家看效果是不是很明显呢,还可以,这种处理一般出现在图像处理前期,为后续的
的处理 如边缘提取之类的做准备。
文章到此结束,其实我也是一只菜鸟,刚刚入门而已,所以献丑,希望大家可以交流交流。我们共同进步,为解放世界做贡献(开玩笑啦)。