【基础】直方图均衡化:图像对比度调整
发布时间: 2024-06-27 04:38:15 阅读量: 94 订阅数: 158
图像处理领域基于动态直方图均衡化的智能对比度增强技术研究与应用
![python计算机视觉合集](https://media.geeksforgeeks.org/wp-content/uploads/20230707184121/Computer-Vision-Tutorial.webp)
# 2.1 直方图的概念和意义
直方图是一个统计图表,它显示了图像中每个像素值的分布情况。每个像素值都对应一个条形,条形的高度表示该像素值在图像中出现的频率。
直方图对于理解图像的整体亮度分布非常有用。它可以帮助我们确定图像是否过亮、过暗或对比度不足。例如,一个具有窄直方图的图像通常表示图像对比度较低,而具有宽直方图的图像通常表示图像对比度较高。
# 2. 直方图均衡化理论
### 2.1 直方图的概念和意义
直方图是图像中像素值分布的一种统计表示。对于灰度图像,直方图的横轴表示像素值(从 0 到 255),纵轴表示每个像素值出现的频率。
直方图可以反映图像的亮度分布和对比度。均衡的直方图表示图像中所有像素值都均匀分布,而偏斜的直方图表示图像中某些像素值出现频率过高或过低。
### 2.2 直方图均衡化的原理和算法
直方图均衡化的目的是将图像的直方图调整为更均匀的分布,从而增强图像的对比度和细节。其原理是通过累积分布函数(CDF)将图像中每个像素值重新映射到新的像素值。
**累积分布函数 (CDF)**
CDF 表示像素值小于或等于给定值的概率。对于灰度图像,CDF 的横轴表示像素值,纵轴表示像素值出现的累积频率。
**直方图均衡化算法**
直方图均衡化算法如下:
1. 计算图像的直方图。
2. 计算每个像素值的 CDF。
3. 将每个像素值重新映射到新的像素值,该像素值由 CDF 确定。
**代码块:**
```python
import cv2
import numpy as np
def histogram_equalization(image):
# 计算直方图
hist = cv2.calcHist([image], [0], None, [256], [0, 256])
# 计算累积分布函数
cdf = hist.cumsum()
# 归一化累积分布函数
cdf_normalized = cdf / cdf[-1]
# 重新映射像素值
equalized_image = np.interp(image.ravel(), hist.ravel(), cdf_normalized.ravel())
# 重新整形图像
equalized_image = equalized_image.reshape(image.shape)
return equalized_image
```
**逻辑分析:**
此代码实现了直方图均衡化算法。它首先计算图像的直方图,然后计算累积分布函数。接下来,它将每个像素值重新映射到新的像素值,该像素值由累积分布函数确定。最后,它将重新映射的像素值重新整形为原始图像的形状。
**参数说明:**
* `image`:输入灰度图像。
* `equalized_image`:均衡化后的灰度图像。
# 3. 直方图均衡化实践
### 3.1 OpenCV中的直方图均衡化函数
OpenCV提供了一个名为`cv2.equalizeHist()`的函数,用于执行直方图均衡化。该函数接收一个灰度图像作为输入,并返回一个均衡化的图像。以下是如何使用`cv2.equalizeHist()`函数:
```python
import cv2
# 读取图像
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
# 执行直方图均衡化
equalized_image = cv2.equalizeHist(image)
# 显示均衡化后的图像
cv2.imshow('Equalized Image', equalized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
**参数说明:**
* `image`: 输入的灰度图像。
* `equalized_image`: 输出的均衡化图像。
**代码逻辑分析:**
1. `cv2.imread()`函数读取图像并将其转换为灰度图像。
2. `cv2.equalizeHist()`函数执行直方图均衡化并返回均衡化后的图像。
3. `cv2.imsho
0
0