直方图均衡化:简单中的大智慧

直方图均衡化:简单中的大智慧

理论讲完了,咱们来动手试试!用Python实现直方图均衡化就像做一道简单的家常菜,只需要准备两个"食材":

OpenCV库:负责读取、显示和处理图像

NumPy库:负责数值计算

如果你还没有这些库,可以先在终端里输入这行命令安装:

pip install opencv-python numpy

然后复制下面这段代码,保存为histogram_equalization.py,运行后就能看到直方图均衡化的效果啦!

# 导入需要的库

import cv2

import numpy as np

import matplotlib.pyplot as plt

# 读取灰度图像

gray_image = cv2.imread('images/gray_image.jpg', cv2.IMREAD_GRAYSCALE)

# 方法1:使用OpenCV内置函数实现直方图均衡化

equalized_image = cv2.equalizeHist(gray_image)

# 方法2:手动实现直方图均衡化(仅作演示,实际应用中推荐使用OpenCV内置函数)

def manual_histogram_equalization(image):

# 计算图像直方图

hist = cv2.calcHist([image], [0], None, [256], [0, 256])

# 计算累积分布函数(CDF)

cdf = hist.cumsum()

# 归一化CDF

cdf_normalized = cdf / cdf.max()

# 应用直方图均衡化

equalized = np.interp(image.flatten(), np.arange(256), cdf_normalized * 255)

return equalized.reshape(image.shape).astype(np.uint8)

# 手动实现的直方图均衡化

manual_equalized = manual_histogram_equalization(gray_image)

# 显示原图和均衡化后的图像

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

# 显示原图

plt.subplot(231)

plt.imshow(gray_image, cmap='gray')

plt.title('灰度原图')

plt.axis('off')

# 显示原图直方图

plt.subplot(232)

plt.hist(gray_image.ravel(), 256, [0, 256])

plt.title('原图直方图')

plt.xlabel('亮度值')

plt.ylabel('像素数量')

# 显示OpenCV均衡化结果

plt.subplot(233)

plt.imshow(equalized_image, cmap='gray')

plt.title('OpenCV直方图均衡化')

plt.axis('off')

# 显示OpenCV均衡化后的直方图

plt.subplot(234)

plt.hist(equalized_image.ravel(), 256, [0, 256])

plt.title('均衡化后直方图')

plt.xlabel('亮度值')

plt.ylabel('像素数量')

# 显示手动均衡化结果

plt.subplot(235)

plt.imshow(manual_equalized, cmap='gray')

plt.title('手动直方图均衡化')

plt.axis('off')

# 显示手动均衡化后的直方图

plt.subplot(236)

plt.hist(manual_equalized.ravel(), 256, [0, 256])

plt.title('手动均衡化后直方图')

plt.xlabel('亮度值')

plt.ylabel('像素数量')

plt.tight_layout()

plt.show()

# 保存均衡化后的图像

cv2.imwrite('images/equalized_image.jpg', equalized_image)

print('均衡化图像已保存!')

💡 小技巧:直方图均衡化虽然能提升图像对比度,但并不是所有图像都适合使用。对于已经有良好对比度的图像,过度均衡化可能会导致噪声放大,影响图像质量。

相关推荐

河南河北中间是什么河 河南河北中间的分界是哪条河
三评“网络黑话烂梗”
365bet世界

三评“网络黑话烂梗”

09-11 955
华为的镜头、显示屏、内存等都是怎么来的?92家核心供应商披露