Histogram Normalization 图像直方图归一化

一. 直方图归一化

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

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

直方图归一化算法  ↑


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

import cv2
import numpy as np
import matplotlib.pyplot as plt

# histogram normalization
def hist_normalization(img, a=0, b=255):
	# get max and min
	c = img.min()
	d = img.max()

	out = img.copy()

	# normalization
	out = (b-a) / (d - c) * (out - c) + a
	out[out < a] = a
	out[out > b] = b
	out = out.astype(np.uint8)
	
	return out

# Read image
img = cv2.imread("../head_g_n.jpg",0).astype(np.float)
# histogram normalization
out = hist_normalization(img)

# Display histogram
plt.hist(out.ravel(), bins=255, rwidth=0.8, range=(0, 255))
plt.savefig("out_his.jpg")
plt.show()

# Save result
cv2.imshow("result", out)
cv2.imwrite("out.jpg", out)
cv2.waitKey(0)
cv2.destroyAllWindows()

三. 实验结果及分析

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

 

原图像 ↑

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

 

归一化后的图像 ↑

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


四. 参考内容:

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

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

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值