目标
在本节中,
- 我们将学习直方图均衡化的概念,并利用它来提高图像的对比度。
理论
考虑这样一个图像,它的像素值仅局限于某个特定的值范围。例如,较亮的图像将把所有像素限制在高值上。但是一幅好的图像会有来自图像所有区域的像素。因此,您需要将这个直方图拉伸到两端(如下图所示,来自wikipedia),这就是直方图均衡化的作用(简单来说)。这通常会提高图像的对比度。
我建议您阅读直方图均衡化上的Wikipedia页面,以获取有关它的更多详细信息。它很好地解释了示例,使您在阅读完之后几乎可以理解所有内容。相反,在这里我们将看到其Numpy实现。之后,我们将看到OpenCV功能。
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('wiki.jpg',0)
hist,bins = np.histogram(img.flatten(),256,[0,256])
cdf = hist.cumsum()
cdf_normalized = cdf * float(hist.max()) / cdf