欢迎访问宙启技术站
智能推送

Python图像处理中的直方图均衡化技术

发布时间:2023-12-16 01:53:38

直方图均衡化是一种用于增强图像对比度的图像处理技术。它通过对图像的像素值进行重分布来扩展图像的动态范围,从而提高图像的视觉效果。

在Python中,可以使用OpenCV库来实现直方图均衡化。下面是一个使用例子。

首先,需要安装OpenCV库。可以使用以下命令在Python中安装OpenCV:

pip install opencv-python

然后,导入所需的库和模块:

import cv2
import numpy as np
from matplotlib import pyplot as plt

接下来,加载图像并转换为灰度图像:

img = cv2.imread('input.jpg')  # 读取图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 将图像转换为灰度图像

然后,计算图像的直方图:

hist, bins = np.histogram(gray.flatten(), 256, [0,256])

然后,计算累积分布函数(CDF):

cdf = hist.cumsum()
cdf_normalized = cdf * hist.max() / cdf.max()

接下来,在图像中进行直方图均衡化:

equalized = cv2.equalizeHist(gray)

最后,绘制原始图像和直方图均衡化后的图像及其直方图:

plt.figure(figsize=(10, 8))

# 绘制原始图像及其直方图
plt.subplot(2, 2, 1)
plt.imshow(gray, cmap='gray')
plt.title('Original Gray Image')
plt.xticks([]), plt.yticks([])

plt.subplot(2, 2, 2)
plt.plot(cdf_normalized, color='b')
plt.hist(gray.flatten(), 256, [0,256], color='r')
plt.xlim([0,256])
plt.legend(('CDF', 'Histogram'), loc='upper left')

# 绘制直方图均衡化后的图像及其直方图
plt.subplot(2, 2, 3)
plt.imshow(equalized, cmap='gray')
plt.title('Equalized Image')
plt.xticks([]), plt.yticks([])

plt.subplot(2, 2, 4)
plt.hist(equalized.flatten(), 256, [0,256], color='r')
plt.xlim([0,256])
plt.title('Histogram of Equalized Image')

plt.tight_layout()
plt.show()

运行上述代码后,将会显示原始图像、直方图均衡化后的图像以及它们的直方图。

直方图均衡化是一种简单但有效的图像增强技术,它可以改善图像的对比度,使细节更加清晰。通过使用Python和OpenCV,你可以很容易地实现直方图均衡化,并将其应用于图像处理任务中。