1. 图像增强
(1)基本概念
(2)空间域
(3)变换域
2. 直方图均衡化
(1)基本概念
图像直方图
直方图均衡化
(2)直方图均衡化实现
获取原图信息
绘制直方图
直方图均衡化
3. 局部直方图均衡化
(1)基本概念
(2)代码实现
4. 图像去雾
(1)基本概念
(2)实现
结束语
参考论文
(1)《直方图均衡化在图像处理中的应用_任艳斐》
(2)《基于直方图均衡的图像增强_李耀辉》
1. 图像增强
此处参考论文:《直方图均衡化在图像处理中的应用_任斐艳》
(1)基本概念
图像增强是图像处理的最基本手段, 它往住是各种图像分析与处理时的预处理过程。图像增强就是增强图像中用户感兴趣的信息, 其主要目的有两个: 一是改善图像的视觉效果, 提高图像成分的清晰度; 二是使图像变得更有利于计算机处理。图像增强方法一般分为空间域和变换域两大类
(2)空间域
空间域方法直接对图像像素的灰度进行处理。在空间域内对图像进行点运算, 它是一种既简单又重要的图像处理技术, 它能让用户改变图像上像素点的灰度值, 这样通过点运算处理将产生一幅新图像
(3)变换域
变换域方法是指在图像的某个变换域中对变换系数进行处理, 然后通过逆变换获得增强图像。对于这个变换域的理解,可以了解一下信号的傅里叶变换,将信号转化到频域内进行观察分析
2. 直方图均衡化
(1)基本概念
图像直方图
此处可以参考我之前的文章:Python 计算机视觉(七)—— OpevCV进行直方图统计
简单来说,直方图描述了图像像素点中某一个灰度值出现的概率,一幅图像的直方图是确定不变的,但不同的两幅图像的直方图可能相同
直方图均衡化
此处参考:《基于直方图均衡的图像增强_李耀辉》
图像直方图反映了不同灰度值的像素的面积 (连续图像)或像素个数 (离散图像)在一帧中的比例,反映了图像的某些信息,直方图均衡就是把一幅已知灰度概率分布的图像经过一种变换使之变成具有均匀概率分布的图像从而使信息嫡达到最大,(简单来说就是将图像的灰度图变得近似均匀分布,让其各种灰度级的像素点分布较为均匀)
(2)直方图均衡化实现
获取原图信息
首先第一步永远是经典的读取图像信息:
"""
Author:XiaoMa
date:2021/10/25
"""
import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei' # matplotlib 绘图库正常使用中文黑体
#读取图像信息
img0 = cv2.imread('E:\From Zhihu\For the desk\cveight1.jpg')
img1 = cv2.resize(img0, dsize = None, fx = 0.5, fy = 0.5)
h, w = img1.shape[:2]
print(h, w)
img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
cv2.namedWindow("W0")
cv2.imshow("W0", img1)
cv2.waitKey(delay = 0)
获得图像信息:
540 540
得到的原图如上,显得不是很清晰,就像蒙了一层雾一样,所以我们要对其进行图像增强,让它变得清晰一点,让我们能更好的欣赏美女
绘制直方图
这个在前面的文章中已经介绍过了:
#绘制直方图
hist0 = cv2.calcHist([img2], [0], None, [256], [0, 255])
plt.plot(hist0, label = "灰度图直方图", linestyle = "--", color = 'g')
plt.legend() #增加图例
plt.savefig("E:\From Zhihu\For the desk\cveight0.jpg") #保存直方图
plt.show()
得到的直方图如下:
可以看出来这幅图的像素点很少有那种亮度特别高的,大多数分布在灰度级数较低和中等的灰度级别处 ,所以这副图像整体色调是较为暗沉的(这里是对灰度图画的直方图,并不是原图哈)
直方图均衡化
直方图均衡化使用的函数是:cv2.equalizeHist()
OpenCV官网给出的解释:OpenCV has a function to do this(this 代表直方图均衡化), cv2.equalizeHist() . Its input is just grayscale image and output is our histogram equalized image.
该函数输入一幅灰度图像,输出即为经过直方图均衡化后的图像
我们使用该函数进行直方图的均衡化:
img3 = cv2.equalizeHist(img2) #直方图均衡化
cv2.namedWindow("W1")
cv2.imshow("W1", img3)
cv2.waitKey(delay = 0)
不管效果如何,我们先把结果放出来:
可以看出来图片的效果并没有增强,好像变得更差了
再把它的直方图画出来,和原灰度图的直方图进行对比
代码都在上一篇文章中解释过了,有不懂的地方可以去上一篇查或者评论区大家讨论也行
#绘制均衡化后的直方图
#绘制直方图
hist0 = cv2.calcHist([img2], [0], None, [256], [0, 255])
hist1 = cv2.calcHist([img3], [0], None, [256], [0, 255])
plt.subplot(2,1,1)
plt.plot(hist0, label = "灰度图直方图", linestyle = "--", color = 'g')
plt.legend()
plt.subplot(2,1,2)
plt.plot(hist1, label = "均衡化后的直方图", linestyle = "--", color = 'r')
plt.legend()
plt.savefig("E:\From Zhihu\For the desk\cveight0.jpg")
plt.show()