• 图像直方图归一化 Histogram Normalization


    一. 直方图归一化

            有些灰度图像的像素并没有分布在 [0,255] 内,而是分布在 [0,255] 的子区间内。这样的图像肉眼看上去往往不是很清晰。我们可以通过直方图归一化的方式,将它的像素分布从 [0,255] 的子区间变为 [0,255] 范围内。通过这样的方式,往往可以增加图像的清晰度。

            这种归一化直方图的操作被称为灰度变换(Grayscale Transformation)。像素点的取值范围从 [c,d] 转换到 [a,b] 的算法如下:


    直方图归一化算法  ↑
     

    二. 实验:将一张灰度范围为 [10,160] 的图像进行直方图归一化,使其灰度范围为 [0,255]

     1 import cv2
     2 import numpy as np
     3 import matplotlib.pyplot as plt
     4 
     5 # histogram normalization
     6 def hist_normalization(img, a=0, b=255):
     7     # get max and min
     8     c = img.min()
     9     d = img.max()
    10 
    11     out = img.copy()
    12 
    13     # normalization
    14     out = (b-a) / (d - c) * (out - c) + a
    15     out[out < a] = a
    16     out[out > b] = b
    17     out = out.astype(np.uint8)
    18     
    19     return out
    20 
    21 # Read image
    22 img = cv2.imread("../head_g_n.jpg",0).astype(np.float)
    23 # histogram normalization
    24 out = hist_normalization(img)
    25 
    26 # Display histogram
    27 plt.hist(out.ravel(), bins=255, rwidth=0.8, range=(0, 255))
    28 plt.savefig("out_his.jpg")
    29 plt.show()
    30 
    31 # Save result
    32 cv2.imshow("result", out)
    33 cv2.imwrite("out.jpg", out)
    34 cv2.waitKey(0)
    35 cv2.destroyAllWindows()

    三. 实验结果及分析


    原图像像素分布直方图[10,160] ↑
     
     
     

    原图像 ↑

    归一化后的图像像素分布直方图[0,255] ↑
     
     
     

    归一化后的图像 ↑
     

            可以看到,我们将灰度范围为 [10,160] 的图像进行直方图归一化到 [0,255] 后,图像的清晰度显著增强。


    四. 参考内容:

      https://www.jianshu.com/p/7b4bf0f2621b

  • 相关阅读:
    Linux GNOME桌面使用技巧大全
    联想旭日 C465A 开机白屏
    基础知识:编程的工作机制
    JavaCC 学习笔记
    笨办法学R编程(1)
    一些学习方法总结
    使用变量表示字、数字和值
    栈溢出2017doubly_dangerous
    栈溢出warmup_csaw_2016
    基础学习ret2text
  • 原文地址:https://www.cnblogs.com/wojianxin/p/12509686.html
Copyright © 2020-2023  润新知