直方图均衡化图像增强
1、原理:将原始图像的灰度图从比较集中的某个灰度区间均匀分布在整个灰度空间中,实现对图像的非线性拉伸,重新分配图像像素值。
2、应用场景:对于图像背景或者前景太亮(曝光严重)可以得到较好的显示。
3、算法特点:直方图均衡化保证在图像像素映射过程中原来的大小关系保持不变,即较亮的区域依旧较亮,较暗的依旧较暗,只是对比度增加,不能明暗颠倒;保证像素映射函数的值域在0和255之间。累积分布函数是单增长函数,并且值域是0到1。
4、算法流程:(下图可以具体理解)
1)统计直方图中每个灰度级出现的次数,计算原始灰度图像的像素概率分布
2)根据像素概率分布获取图像累积分布函数
3)根据映射函数获取变换后的图像
5、利用库函数代码实现:
# coding:utf-8 import cv2 import matplotlib.pyplot as plt import numpy as np path = r"people.jpg" path1 = r"people1.jpg" path2 = r"people2.jpg" def ku(): # 库函数 img = cv2.imread(path) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 可以转换为灰度图 # 彩色图像均衡化,需要分解通道 对每一个通道均衡化 (b, g, r) = cv2.split(img) gray = cv2.equalizeHist(gray) bH = cv2.equalizeHist(b) gH = cv2.equalizeHist(g) rH = cv2.equalizeHist(r) # 合并每一个通道 result = cv2.merge((bH, gH, rH)) cv2.imwrite(path1, result) cv2.imwrite(path2, gray)
结果:
原图 | 灰度图结果 | 彩色图结果 |
原图灰度级 | 直方图均衡化后灰度级 | |