赞
踩
本文主要介绍如何实现彩色图像的直方图均衡化,达到图像增强效果的三种方法:
1. 对RGB三个通道图像分别进行直方图均衡化,然后再合并三个通道;
2. 提取RGB三个通道图像,计算其平均直方图结果,然后再进行均衡化;
3. RGB空间转为HSI空间图像,对I(亮度,Intensity)通道进行直方图均衡化,再转为RGB图像。
第一种方法不推荐,会破坏色彩结构;根据情况选择第2,3种方法。
首先必须了解灰度直方图是什么东西。直方图就是统计一个图像各灰度级值0~255有多少各像素点。
在实现之前先了解单通道图像(灰度图)直方图均衡化和其过程。
上述过程就是求出一个原像素点到均衡化的像素点的一个映射函数 f(x)。利用该映射函数就可以循环扫描图像的每一个像素x,然后得到f(x)替代原来的像素值x,达到均衡化的结果。
在实际均衡化过程中,核心步骤如下:
1. 传入单通道图像和该的灰度直方图。
2. 遍历灰度直方图,对值 I 从 0~255 累计求和,对累计求和,对和结果除以图像的素数,然后乘以 L-1得到函数结果 得到函数结果 f(xi )。
3. 将每一个灰度值 i累积求和的结果 累积求和的结果 f(xi )存储在一个大小为 256 的 int 数组中,存储的位置为 i;
4. 遍历输入图像每一个素,记点值为 x,修改其像素值使等于 f(x)。
5. 均衡化结束。
主要步骤如下,EqualizedResult就是均衡化的映射函数,下一步骤就是将像素点值作为映射函数的输入,将输出结果替代原来的像素值。
-
- // 功能:对灰度直方图进行均衡化
- // 输入:单通道CImg对象, 灰度图对象
- // 输出:均衡化结果
- CImg<unsigned int> HistogramEqualization::HistogramEqualizationMethod
- (CImg<unsigned int> InputImage,CImg<unsigned int> Histogram)
- {
- int L = 256; //灰度级
- int NumOfPixels = (InputImage)._width * (InputImage)._height;
-
- double CumulativeDistributionFunction[256] = { 0 }; // 灰度直方图的累积分布
- double EqualizedResult[256] = { 0 }; // 均衡化结果映射函数
- /*直方图就对应于概率密度函数pdf,
- 而概率分布函数cdf就是直方图的累积和,
- 即概率密度函数的积分
- 积分*(L(=255)-1)*/
-
- /*均衡化关键步骤*/
- int count = 0;
- cimg_forX(Histogram, x) {
- count += Histogram[x]; // 累计求和
- CumulativeDistributionFunction[x] = 1.0 * count / NumOfPixels; //计算概率
- Equa
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。