依据上述直方图均衡化步骤,编写代码实现直方图均衡化,给出均衡化后图 像和其直方图。
时间: 2024-12-03 18:09:31 浏览: 21
直方图均衡化是一种图像增强技术,通过调整像素值的概率分布,使得图像的整体对比度增强。以下是Python中使用OpenCV库实现直方图均衡化的简单示例:
```python
import cv2
import numpy as np
def histogram_equalization(image_path):
# 读取图片
img = cv2.imread(image_path, 0) # 0表示灰度图像
# 计算原始图像的直方图
hist, _ = np.histogram(img.flatten(), bins=256, range=(0, 256))
# 计算累计分布函数(CDF)
cdf = hist.cumsum()
cdf_normalized = cdf * hist.max() / cdf.max()
# 使用线性插值计算新的像素值
equi_img = np.interp(img.flatten(), np.arange(256), cdf_normalized).astype('uint8')
equi_img = equi_img.reshape(img.shape)
# 显示原图和处理后的直方图
cv2.imshow("Original Image", img)
cv2.imshow("Equalized Image", equi_img)
plt.figure(figsize=(10,4))
plt.subplot(121), plt.hist(img.flatten(), 256, [0, 256])
plt.title('Original Histogram'), plt.xlim([0, 256])
plt.subplot(122), plt.hist(equi_img.flatten(), 256, [0, 256])
plt.title('Equalized Histogram'), plt.xlim([0, 256])
plt.show()
# 调用函数并传入图像路径
image_path = 'example_image.jpg'
histogram_equalization(image_path)
```
在这个例子中,我们首先读取灰度图像,然后计算原始图像的直方图。接着,我们计算累积分布函数,并将其归一化。最后,使用线性插值将原始像素值映射到新区间,得到直方图均衡化的图像。同时,我们也展示了原始图像的直方图和处理后的直方图对比。
阅读全文