直方图均衡化是一种图像处理算法,通过调整图像的灰度级分布,增强图像的对比度和细节。下面是直方图均衡化算法的基本步骤:
-
统计原始图像的灰度直方图:遍历整个图像,计算每个灰度级出现的频次。
-
计算累积直方图:对灰度直方图进行累加,得到每个灰度级及其之前所有灰度级的累积频次。
-
计算映射函数:将累积直方图归一化到期望的灰度范围(通常是0到255),得到一个映射函数。
-
应用映射函数:遍历原始图像,根据映射函数将每个像素的灰度值转换为新的灰度值。
-
生成均衡化后的图像:用转换后的灰度值替换原始图像中的相应像素值。
通过直方图均衡化,图像的灰度级分布会更加平坦,从而增加图像的对比度。这个过程可以使得图像细节更加清晰,使得暗部和亮部的细节都更容易观察到。需要注意的是,直方图均衡化可能会改变图像的整体色调,因此在应用之前,需要根据具体需求进行调整和评估。
以下是一个简单的直方图均衡化算法的例程,以Python语言为例:
import cv2
import numpy as npdef 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()