文章目录
- 1.实验目的
- 2.需求
- 3.代码
- 4.实验结果
1.实验目的
了解一种最基本的图像增强技术,本质上是对灰度图像进行灰度变换。
2.需求
对给定图像进行灰度直方图展示,然后均衡化后再次展示
3.代码
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
if __name__ == '__main__':
gray = cv.imread("../images/Fig0702.png", flags=0) # flags=0 读取为灰度图像
# gray = cv.multiply(gray, 0.6) # 调整原始图像,用于比较归一化的作用
histSrc = cv.calcHist([gray], [0], None, [256], [0, 255]) # 原始直方图
# 直方图均衡化
grayEqualize = cv.equalizeHist(gray) # 直方图均衡化变换
histEqual = cv.calcHist([grayEqualize], [0], None, [256], [0, 255]) # 均衡直方图
# 比较:直方图归一化
grayNorm = cv.normalize(gray, None, 0, 255, cv.NORM_MINMAX) # 直方图归一化
histNorm = cv.calcHist([grayNorm], [0], None, [256], [0, 255])
plt.figure(figsize=(9, 6))
plt.subplot(231), plt.axis('off'), plt.title("(1) Original")
plt.imshow(gray, cmap='gray', vmin=0, vmax=255) # 原始图像
plt.subplot(232), plt.axis('off'), plt.title("(2) Normalized")
plt.imshow(grayNorm, cmap='gray', vmin=0, vmax=255) # 原始图像
plt.subplot(233), plt.axis('off'), plt.title("(3) Hist-equalized")
plt.imshow(grayEqualize, cmap='gray', vmin=0, vmax=255) # 转换图像
plt.subplot(234, yticks=[]), plt.axis([0, 255, 0, np.max(histSrc)])
plt.title("(4) Gray hist of src")
plt.bar(range(256), histSrc[:, 0]) # 原始直方图
plt.subplot(235, yticks=[]), plt.axis([0, 255, 0, np.max(histSrc)])
plt.title("(5) Gray hist of normalized")
plt.bar(range(256), histNorm[:, 0]) # 原始直方图
plt.subplot(236, yticks=[]), plt.axis([0, 255, 0, np.max(histSrc)])
plt.title("(6) Gray histm of equalized")
plt.bar(range(256), histEqual[:, 0]) # 均衡直方图
plt.tight_layout()
plt.show()