直方图均衡化在灰度图像增强中的实际应用
发布时间: 2024-04-06 15:53:32 阅读量: 81 订阅数: 39
# 1. 简介
灰度图像增强在图像处理领域中起着至关重要的作用。通过提高图像的质量和增强图像的特征,可以使图像更加清晰和易于分析。直方图均衡化作为一种常用的图像增强方法,在这方面发挥着关键作用。本章将介绍灰度图像增强的重要性,并深入探讨直方图均衡化的概念及原理。让我们一起来深入了解这一引人注目的主题。
# 2. 直方图均衡化的基本算法
直方图均衡化是一种常用的图像增强方法,通过对图像的像素灰度值进行调整,使其直方图分布更加均匀,从而提升图像的视觉效果。下面将介绍直方图均衡化的基本算法原理和实现步骤。
### 2.1 灰度级别的统计
在进行直方图均衡化之前,首先需要统计原始图像中各个灰度级别的像素数量,以便后续计算各个灰度级别的累积分布函数。
```python
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取灰度图像
img = cv2.imread('lena.jpg', 0)
# 统计各个灰度级别的像素数量
hist, _ = np.histogram(img.flatten(), 256, [0, 256])
# 可视化原始图像的灰度直方图
plt.figure()
plt.hist(img.flatten(), 256, [0, 256], color='gray')
plt.xlabel('Pixel Intensity')
plt.ylabel('Frequency')
plt.title('Original Image Histogram')
plt.show()
```
### 2.2 直方图均衡化公式推导
直方图均衡化的核心在于将原始图像的灰度值映射到新的灰度值,使得新的灰度值分布均匀。其数学表达式为:
T(r_k) = \frac{(L-1)}{MN} \sum_{j=0}^{k} n_j
其中,$T(r_k)$为灰度级别$k$映射之后的值,$L$为灰度级别总数,$MN$为图像像素总数,$n_j$为灰度级别$j$对应的像素数量。
### 2.3 算法实现步骤
1. 计算累积分布函数
2. 根据累积分布函数进行像素映射
3. 更新图像像素值
```python
# 计算累积分布函数
cdf = hist.cumsum()
cdf_normalized = cdf * hist.max() / cdf.max()
# 根据累积分布函数进行像素映射
cdf_m = np.ma.masked_equal(cdf, 0)
cdf_m = (cdf_m - cdf_m.min()) * 255 / (cdf_m.max() - cdf_m.min())
cdf = np.ma.filled(cdf_m, 0).astype('uint8')
# 更新图像像素值
img_equalized = cdf[img]
# 可视化均衡化后的图像和灰度直方图
plt.figure()
plt.imshow(img_equalized, cmap='gray')
plt.axis('off')
plt.title('Equalized Image')
plt.show()
plt.figure()
plt.hist(img_equalized.flatten(), 256, [0, 256], color='gray')
plt.xlabel('Pixel Intensity')
plt.ylabel('Frequency')
plt.title('Equalized Image Histogram')
plt.show()
```
通过以上步骤,
0
0