• 直方图统计增强方法


    直方图统计增强方法的原理:
      直方图统计增强是一种基于像素值分布的图像增强技术,通过调整像素值的分布来增强图像的对比度和细节。其原理是根据图像的直方图信息,将原始像素值映射到一个新的像素值域,从而改变图像的亮度和对比度。
    直方图统计增强方法的意义:
      这种方法的目的是改善图像的视觉效果,使得图像中的细节更加清晰可见,从而提高图像在视觉上的识别和分析能力。通过将图像的像素值重新分布,使得图像的动态范围更好地覆盖了整个像素值域,凸显了图像中的细节,增强了图像的信息内容。
    适用场景:
      直方图统计增强方法在以下场景中特别适用:

    1. 低对比度图像: 当图像的亮度范围分布不均匀,即图像的对比度较低时,直方图统计增强可以使得图像的像素值分布更加均匀,增强图像的对比度。
    2. 局部对比度调整: 有时候图像的一部分区域可能亮度较低,另一部分区域亮度较高。直方图统计增强可以通过针对不同区域使用不同的增强参数,实现局部对比度的调整。
    3. 图像细节增强: 当图像中的细节由于亮度过低或过高而不易分辨时,直方图统计增强可以突出这些细节,使得它们更加清晰可见。

    公式:
      直方图统计增强的基本公式如下:
      给定一个原始图像 I ( x , y ) I(x, y) I(x,y),其像素值为 i i i,进行直方图统计增强后的图像为 I enhanced ( x , y ) I_{\text{enhanced}}(x, y) Ienhanced(x,y),其像素值为 i ′ i' i。增强函数可以表示为:
    i ′ = T ( i ) = round ( c ⋅ i ) i' = T(i) = \text{round}(c \cdot i) i=T(i)=round(ci)
      其中, c c c是增强常数,可以通过调整来控制增强的强度。一般情况下, c > 1 c > 1 c>1 用于增强亮度, c < 1 c < 1 c<1用于降低亮度。函数 ( \text{round} ) 将结果四舍五入到最接近的整数,确保结果在合法的像素值范围内。
      另外,为了避免像素值越界,通常还会使用截断操作将增强后的像素值 ( i’ ) 限制在图像像素值域的合法范围内(通常是 [0, 255]):
    i ′ = { 0 if  c ⋅ i < 0 255 if  c ⋅ i > 255 round ( c ⋅ i ) otherwise i' =

    {0if ci<0255if ci>255round(ci)otherwise" role="presentation">{0if ci<0255if ci>255round(ci)otherwise
    i= 0255round(ci)if ci<0if ci>255otherwise
      这样,直方图统计增强就可以通过调整增强常数 c c c 来改变图像的亮度和对比度,从而实现图像的增强,代码如下所示:

    import cv2
    import matplotlib.pyplot as plt
    import numpy as np
    
    
    def enhanceHistStat(image, const):
        enhanced_image = np.clip(image * const, 0, 255).astype(np.uint8)
        return enhanced_image
    
    def enhance_Histstat(image):
        # 读取图像
        image = cv2.imread(image, flags=0)
    
        if image is None:
            print('Unable to load input_image!')
            return
        else:
    
            # 计算比例因子
            maxImg = image.max()
            maxROI = image[12:120, 12:120].max()
            const = maxImg / maxROI
    
            # 调用增强函数
            image_HSE = enhanceHistStat(image, const)
            image_Equ=cv2.equalizeHist(image)
    
            plt.figure(figsize=(10,6))
    
            plt.subplot(131),plt.title("Original image"),plt.axis('off')
            plt.imshow(image,cmap='gray',vmin=0,vmax=255)
    
            plt.subplot(132),plt.title("Global equalize histogram"),plt.axis('off')
            plt.imshow(image_Equ,cmap='gray',vmin=0,vmax=255)
    
            plt.subplot(133),plt.title("Histogram statistic enhance"),plt.axis('off')
            plt.imshow(image_HSE,cmap='gray',vmin=0,vmax=255)
    
            plt.show()
    
    imgfile1='./Images/cat.jpg'
    enhance_Histstat(imgfile1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
  • 相关阅读:
    《软件测试》实验三:Web应用测试(WEB 功能测试——安居客)
    Python进阶之迭代器
    VoLTE端到端业务详解 | 移动性管理类
    FOC学习笔记-坐标变换以及仿真验证
    SpringCloudAliBaba篇(八)之gateway ---> 手把手教你搭建服务网关
    [论文评析]AdaptivePose: Human Parts as Adaptive Points,AAAI 2022
    kubernetes的多租户管理实践
    【Proteus仿真】【Arduino单片机】蜂鸣器
    Java main方法的形参 和 方法的可变参数
    vue blob实现自定义多sheet数据导出到excel文件
  • 原文地址:https://blog.csdn.net/qq_50993557/article/details/132611826