当前位置:   article > 正文

直方图均衡化python实现_直方图均衡化 python

直方图均衡化 python


源代码github地址:

直方图均衡化

实验原理

直方图均衡化是一种图像增强技术,用于改善图像的对比度和视觉质量。它通过重新分配图像的像素值,使得图像的直方图在整个灰度范围内更均匀地分布,从而增强了图像的细节和可视化效果。

以下是直方图均衡化的几个主要作用:

  1. 提高对比度:直方图均衡化通过拉伸图像的亮度范围,将灰度级别均匀分布在整个范围内。这样可以增强图像的对比度,使得细节更加清晰和突出。

  2. 增强细节:直方图均衡化可以增强图像中的细节,尤其是在具有低对比度的区域。通过增强细节,图像的视觉质量得到了改善。

  3. 增强可视化效果:直方图均衡化可以改善图像的可视化效果。它可以使图像更加饱满、明亮,并提供更多的视觉细节。这对于图像展示和观看非常有用。

  4. 应用于图像预处理:直方图均衡化在图像预处理中被广泛应用。它可以增强图像的对比度和细节,有助于提高后续图像处理算法(如边缘检测、目标检测等)的性能。

    需要注意的是,直方图均衡化可能会导致一些副作用,例如在图像中引入噪声或改变图像的整体外观。因此,在应用直方图均衡化之前,需要仔细考虑图像的特定需求和应用场景。

    总的来说,直方图均衡化是一种重要的图像增强技术,可以改善图像的对比度、细节和可视化效果。它在计算机视觉、图像处理和计算机图形学等领域得到广泛应用。

灰度均衡化

实验方法

主要实验原理根据课件的内容实现:

  1. 首先,计算输入图像的总像素数,即图像的宽度乘以高度。

  2. 初始化用于存储灰度级别、灰度概率、灰度累积分布和均衡化后灰度值的数组。

  3. 遍历输入图像的每个像素,统计各个灰度级别的像素个数。

  4. 根据像素个数计算灰度级别的概率。

  5. 计算灰度级别的累积分布,即前一个灰度级别的累积分布加上当前灰度级别的概率。

  6. 根据累积分布计算均衡化后的灰度值,将其存储在数组中。

  7. 遍历输入图像的每个像素,根据原始灰度值查找对应的均衡化后的灰度值,并将其赋值给输出图像的对应位置。

  8. 返回直方图均衡化后的输出图像。

实验结果分析

原图:
在这里插入图片描述
直方图均衡化后的图:
在这里插入图片描述

很明显,我们可以发现直方图均衡化的效果:

  1. 提高对比度:直方图均衡化通过拉伸图像的亮度范围,将灰度级别均匀分布在整个范围内。这样可以增强图像的对比度,使得细节更加清晰和突出。

  2. 增强细节:直方图均衡化可以增强图像中的细节,尤其是在具有低对比度的区域。通过增强细节,图像的视觉质量得到了改善。

  3. 增强可视化效果:直方图均衡化可以改善图像的可视化效果。它可以使图像更加饱满、明亮,并提供更多的视觉细节。这对于图像展示和观看非常有用。

彩色图像直方图均衡化

实验方法

方法1:对RGB空间进行直方均衡化处理

处理方法与灰度均衡化类似,将RGB空间拆分分别进行均衡化处理

方法2:对HSI空间的I空间进行直方均衡化处理

由于直接对RGB空间会导致图像颜色发生改变,故尝试对HSI空间进行均衡化处理((只对亮度进行直方均衡化):

均衡化公式如下:

在这里插入图片描述

  1. 首先,将输入图像分离为H(色调)、S(饱和度)和I(亮度)三个通道。

  2. 将亮度通道赋值给变量I_,这是为了保持色调和饱和度通道不变。

  3. 对亮度通道I_进行处理。首先,根据条件判断(I < 0.5I > 0.5),创建两个布尔型索引数组index1index2,用于指示满足条件的像素位置。

  4. 创建一个与亮度通道I相同形状的全零数组I_

  5. 使用NumPy的幂函数power对满足条件的像素进行幂运算,根据条件将对应位置的像素值赋值给I_数组。这里使用了pitas的理论,将亮度值小于0.5的像素进行平方运算,亮度值大于0.5的像素进行反向平方运算。

  6. 将处理后的亮度通道I_、不变的饱和度通道S_和不变的色调通道H合并成输出图像。

方法3:直接调库

主要目的是对比方法2的实现效果:

hsv_image = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)
# 分离亮度、饱和度和色调通道
h, s, v = cv2.split(hsv_image)
# 对亮度通道执行直方图均衡化
equalized_v = cv2.equalizeHist(v)
# 合并均衡化后的亮度通道与饱和度、色调通道
equalized_hsv_image = cv2.merge([h, s, equalized_v])
# 将均衡化后的图像转换回RGB颜色空间
equalized_image = cv2.cvtColor(equalized_hsv_image, cv2.COLOR_HSV2BGR)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

实验结果分析

原图:

在这里插入图片描述
方法1:
在这里插入图片描述
方法2:
在这里插入图片描述
直接调库:
在这里插入图片描述

方法1分析
  1. RGB 空间提供了显示彩色图像的直接方法,但它并不总是处理和分析的最佳选择。它的缺点之一是无法处理颜色的感知属性,例如强度、色调或饱和度。 H S I 颜色空间具有原色 H(色调)、S(饱和度)和 I(强度),直接对应于颜色的感知属性。
  2. 对RGB空间进行直方均衡化处理会导致颜色失真:直方图均衡是一个非线性过程。通道分割和单独均衡每个通道并不是对比度均衡的正确方法。均衡涉及图像的强度值而不是颜色分量。因此,对于简单的 RGB 彩色图像,不应该在每个通道上单独应用 直方图均衡化。相反,应该应用它以使强度值均衡而不干扰图像的色彩平衡。
方法2分析

对HSI空间进行均衡化处理的效果会比较好,保证了原来的颜色,同时对图像增强的效果还不错,图像的对比度增加;

但是由于参数难以调节,手动实现的HSI空间的直方均衡化和直接调用相关库实现出来的效果仍有差距,图像的细节颜色会发生混乱现象,需要后续继续优化对于HSI空间的均衡化处理。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/661407
推荐阅读
相关标签
  

闽ICP备14008679号