图像识别-直方图均衡化 HE,AHE,CLAHE
原理见
https://blog.csdn.net/schwein_van/article/details/84336633
https://blog.csdn.net/qq_41747057/article/details/116013500
或者可以见B站视频
https://www.bilibili.com/video/BV1vV411d7ne
简而言之,所谓均衡化就是将直方图中的概率分布函数,变成累计分布函数,仍然放回到直方图中
上代码
点击查看代码
# -*- coding: utf-8 -*-
"""
使用OpenCV进行直方图均衡化.py:
"""
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('../data/contrast75.png', 0)
equ = cv2.equalizeHist(img)
res = np.hstack((img, equ)) # stacking images side-by-side
cv2.imwrite('res.png', res)
'''
当直方图中的数据 中在某一个灰度值范围内时 直方图均 化很有用。 但是如果像素的变化很大 而且占据的灰度范围 常广时 例如 既有很亮的 像素点又有很暗的像素点时
'''
img.ravel() # 将图像转成一维数组没有中括号
print(img.ravel())
plt.subplot(2, 2, 1)
plt.hist(img.ravel(), 256, [0, 256])
plt.subplot(2, 2, 2)
plt.hist(equ.ravel(), 256, [0, 256])
plt.xticks([]), plt.yticks([])
plt.subplot(2, 2, 3)
plt.imshow(img, 'gray')
plt.xticks([]), plt.yticks([])
plt.subplot(2, 2, 4)
plt.imshow(equ, 'gray')
plt.xticks([]), plt.yticks([])
plt.show()