图像识别-直方图均衡化 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()


posted @ 2022-03-07 20:01  筷点雪糕侠  阅读(343)  评论(0编辑  收藏  举报