目录
1. 介绍
2. 直方图均衡化(直方图修正)
3. 代码实现
空域指的是像素组成的空间,空间域是图像平面本身。
空间域的图像处理方法是直接对图像中的像素进行处理。后面介绍的变换域,是指将空间域的图像转换到别的域中,例如频率域,在变换域中进行处理,再将结果反变换到空间域
空域变换的图像处理可以分为两个类别:灰度变换、空间滤波
其实图像变换都是基于像素的映射,区别是像素是怎么映射的。灰度变换的话是通过点对点的映射,也就是变换后的像素点之和当前的像素点有关(gramma变换、对数变换等等),依次来进行对比度拉伸。而空间滤波变换后的像素点是和当前像素点以及当前像素点周围的点有关,也就是对图像每个像素点的领域进行映射
本章介绍的直方图处理是针对于全局的像素点,将任意图像的像素点的分布变换为均匀分布的形式,来增强灰度动态范围偏小的反差以此增强图像的对比度
直方图处理是一种统计表示,反映了像素灰度值的分布情况,即图像像素点灰度取值的分布情况
例如:
图像像素点的分布是[[1,2],[1,3]],那么灰度值为1的个数就有两个,灰度值为2,3的个数都为2,这种就是图像的直方图表示。如果将灰度值的个数除以所以像素点的个数的话(0.5,0.25,0.25)这种就是归一化直方图
接下来介绍一下累计直方图,它描述的是图像像素点的灰度值 <= k 的像素点数量。如果将结果除以总像素点的个数的话,就成为归一化累计直方图,它描述的是图像像素点的灰度值 <= k 的像素点占总像素点的概率。
直方图均衡化我们先假设两个性质
这里不作具体的数学描述,我们通过一个直方图修正的例子来讲解
我们假设图像的灰度值是一 3bit,灰度级为8的图像,直方图均衡化的过程如下:
cv库里面的计算直方图的函数为:hist = cv2.calcHist([img],[0],None,[256],[0,256])
直方图均衡化的函数为:dst = cv2.equalizeHist(img)
import numpy as np
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('./img.png',0) # 读取灰度图像
hist = cv2.calcHist([img],[0],None,[256],[0,256]) # 原图的直方图
dst = cv2.equalizeHist(img)
hist_dst = cv2.calcHist([dst],[0],None,[256],[0,256]) # 均衡化之后的直方图
plt.plot(hist,color = 'b',label = 'blue')
plt.plot(hist_dst,color = 'r',label = 'red')
plt.legend() # 显示图例
plt.show()
cv2.imshow('img',np.hstack((img,dst)))
cv2.waitKey()
cv2.destroyAllWindows()
处理图像效果
图像直方图对比