当前位置:   article > 正文

使用C++实现彩色图像直方图均衡化的三种方法_彩色直方图均衡化算法

彩色直方图均衡化算法

引言

本文主要介绍如何实现彩色图像的直方图均衡化,达到图像增强效果的三种方法:

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就是均衡化的映射函数,下一步骤就是将像素点值作为映射函数的输入,将输出结果替代原来的像素值。

  1. // 功能:对灰度直方图进行均衡化
  2. // 输入:单通道CImg对象, 灰度图对象
  3. // 输出:均衡化结果
  4. CImg<unsigned int> HistogramEqualization::HistogramEqualizationMethod
  5. (CImg<unsigned int> InputImage,CImg<unsigned int> Histogram)
  6. {
  7. int L = 256; //灰度级
  8. int NumOfPixels = (InputImage)._width * (InputImage)._height;
  9. double CumulativeDistributionFunction[256] = { 0 }; // 灰度直方图的累积分布
  10. double EqualizedResult[256] = { 0 }; // 均衡化结果映射函数
  11. /*直方图就对应于概率密度函数pdf,
  12. 而概率分布函数cdf就是直方图的累积和,
  13. 即概率密度函数的积分
  14. 积分*(L(=255)-1)*/
  15. /*均衡化关键步骤*/
  16. int count = 0;
  17. cimg_forX(Histogram, x) {
  18. count += Histogram[x]; // 累计求和
  19. CumulativeDistributionFunction[x] = 1.0 * count / NumOfPixels; //计算概率
  20. Equa
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/78945
推荐阅读
相关标签
  

闽ICP备14008679号