通过直方图均衡化提升图像的对比度,画出对应的灰度映射函数
时间: 2024-05-08 18:16:21 浏览: 16
直方图均衡化是一种常见的图像增强方法,其思想是通过重新分配图像中像素的灰度级分布来提高图像的对比度。具体实现过程如下:
1. 统计图像中每个灰度级的像素数目,得到原始直方图。
2. 计算每个灰度级出现的概率,即将每个灰度级的像素数目除以总像素数,得到归一化直方图。
3. 计算累积分布函数(CDF),即将归一化直方图每个灰度级的概率依次相加得到的累积概率分布函数。
4. 根据CDF计算灰度映射函数,即将每个灰度级的CDF值乘以最大灰度级(一般为255)得到的灰度映射表。
5. 将灰度映射表应用到原始图像中的每个像素,将其灰度级替换为对应的映射值。
下面是一个简单的Python代码示例:
```python
import cv2
# 读取原始图像
img = cv2.imread("lena.png", cv2.IMREAD_GRAYSCALE)
# 统计原始直方图
hist, bins = np.histogram(img.flatten(), 256, [0, 256])
# 计算归一化直方图
pdf = hist / np.sum(hist)
# 计算累积分布函数
cdf = np.cumsum(pdf)
# 计算灰度映射函数
lut = np.uint8(255 * cdf)
# 应用灰度映射函数
img_eq = cv2.LUT(img, lut)
# 显示结果
cv2.imshow("Original", img)
cv2.imshow("Equalized", img_eq)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,`cv2.imread()`用于读取原始图像,`np.histogram()`用于统计原始直方图,`np.cumsum()`用于计算累积分布函数,`np.uint8()`将灰度映射函数转换为8位无符号整型,`cv2.LUT()`用于应用灰度映射函数。