直方图均衡化是一种图像处理算法,通过调整图像的灰度级分布,增强图像的对比度和细节。下面是直方图均衡化算法的基本步骤:
- 统计原始图像的灰度直方图:遍历整个图像,计算每个灰度级出现的频次。
- 计算累积直方图:对灰度直方图进行累加,得到每个灰度级及其之前所有灰度级的累积频次。
- 计算映射函数:将累积直方图归一化到期望的灰度范围(通常是0到255),得到一个映射函数。
- 应用映射函数:遍历原始图像,根据映射函数将每个像素的灰度值转换为新的灰度值。
- 生成均衡化后的图像:用转换后的灰度值替换原始图像中的相应像素值。
通过直方图均衡化,图像的灰度级分布会更加平坦,从而增加图像的对比度。这个过程可以使得图像细节更加清晰,使得暗部和亮部的细节都更容易观察到。需要注意的是,直方图均衡化可能会改变图像的整体色调,因此在应用之前,需要根据具体需求进行调整和评估。
以下是一个简单的直方图均衡化算法的例程,以Python语言为例:
import cv2
import numpy as np
def histogram_equalization(image):
# 统计原始图像的灰度直方图
hist, bins = np.histogram(image.flatten(), 256, [0,256])
# 计算累积直方图
cdf = hist.cumsum()
cdf_normalized = cdf * hist.max() / cdf.max()
# 计算映射函数
mapping = np.interp(image.flatten(), bins[:-1], cdf_normalized)
# 应用映射函数,生成均衡化后的图像
equalized_image = mapping.reshape(image.shape).astype(np.uint8)
return equalized_image
# 读取原始图像
image = cv2.imread('input.jpg', 0) # 灰度图像读取
# 执行直方图均衡化
equalized_image = histogram_equalization(image)
# 显示原始图像和均衡化后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Equalized Image', equalized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()