图像直方图均衡化算法 python实现

一. 直方图均衡化:

        直方图均衡化是使图像直方图变得平坦的操作。直方图均衡化能够有效地解决图像整体过暗、过亮的问题,增加图像的清晰度。

        具体流程如下所示。其中S是总的像素数,Zmax是像素的最大取值(8位灰度图像为255),h(i)为图像像素取值为 i 及 小于 i 的像素的总数。

直方图均衡化算法 ↑


二. python实现直方图均衡化操作

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

# histogram equalization
def hist_equal(img, z_max=255):
	H, W = img.shape
	# S is the total of pixels
	S = H * W  * 1.

	out = img.copy()

	sum_h = 0.

	for i in range(1, 255):
		ind = np.where(img == i)
		sum_h += len(img[ind])
		z_prime = z_max / S * sum_h
		out[ind] = z_prime

	out = out.astype(np.uint8)

	return out


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

# histogram normalization
out = hist_equal(img)

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

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

三. 实验结果:

原图 ↑

原图的像素分布直方图 ↑

 

直方图均衡化后图像 ↑

均衡化后图像的直方图 ↑

        可以看到,直方图均衡化后的图像看起来比原来的图像更加清晰。对于图像亮度整体偏暗或者偏亮的图像,我们可以采用直方图均衡化的方法处理图像,使得它们看上去更加清晰。


四. matlab 实现图像直方图均衡化:

        可以参考一篇优秀的博文:        https://blog.csdn.net/Ibelievesunshine/article/details/79961027


五. 参考内容:

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

        https://www.jianshu.com/p/792b0ae5ba6d

  • 19
    点赞
  • 269
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值