首页 > 其他 > 详细

图像直方图归一化 Histogram Normalization

时间:2020-03-17 12:17:50      阅读:112      评论:0      收藏:0      [点我收藏+]

一. 直方图归一化

        有些灰度图像的像素并没有分布在 [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

图像直方图归一化 Histogram Normalization

原文:https://www.cnblogs.com/wojianxin/p/12509686.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!