Python opencv 直方图均衡化

直方图均衡化分为两种:一种是直方图均衡化,一种是自适应直方图均衡化

图像领域又分为三种:灰度图均衡化彩色图均衡化、YUV 直方图均衡化

所谓的均衡化又称为图像增强,也是我们熟知的增益

我一般用的最多的是直方图均衡化和自适应直方图均衡化,因此在这里主要介绍这两个。

灰度图直方图均衡化(全局)

#img为输入的单通道图像
cv2.equalizeHist(img) 

灰度图自适应直方图均衡化

#img为输入的单通道图像,clahe和cll是自定义变量
clahe = cv2.createCLAHE(clipLimit=2.0,tileGridSize=(8,8))
#待知晓……
cll = clahe.apply(img)

彩色图直方图均衡化(全局)

# 将BGR图像转换到HSV空间中
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 将HSV图像通道分离
channels = cv2.split(hsv)
# 对第1个通道即色调通道进行全局直方图均衡化并保存
cv2.equalizeHist(channels[0],channels[0])
# 将处理后的通道和没有处理的两个通道合并,命名为hsv
cv2.merge(channels,hsv)
# 将HSV图像转换回BGR图像
cv2.cvtColor(ycrcb, cv.COLOR_HSV2BGR, img)

彩色图自适应直方图均衡化

#将BGR的图像转换成HSV
hsv = cv2.cvtColor(img, cv.COLOR_BGR2HSV)
#分离HSV通道
channels = cv2.split(hsv) 
#将图像自适应均衡化   
clahe = cv2.createCLAHE(clipLimit=2.0,tileGridSize=(8,8))
#对第1个通道即色调通道进行均衡化
clahe.apply(channels[0],channels[0])
#将处理后的通道和没有处理的两个通道合并,命名为hsv
cv2.merge(channels,hsv)
#将HSV的图像转换回BGR
cv2.cvtColor(ycrcb, cv.COLOR_HSV2BGR, img)

YUV直方图均衡化(未细查,但图片出来的效果是最自然的一个)

#将BGR转换成YCrCb
imgYUV = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)
#分离YCrCb通道
channelsYUV = cv2.split(imgYUV)
#按第1个通道即亮度通道进行直方图均衡化
channelsYUV[0] = cv2.equalizeHist(channelsYUV[0])
#将完成转换的通道与其余通道融合
channels = cv2.merge(channelsYUV)
#将YCrCb转换回BGR
result = cv2.cvtColor(channels, cv2.COLOR_YCrCb2BGR)

计算方法

Python opencv 直方图均衡化_第1张图片

 随机一份图像的像素值,从灰度值的小到大 or 大到小进行顺序排列,先计算像素个数,再计算个数占总数的百分比(也就是概率),不同的是我们真正要用的不是概率,而是累计概率。从上到下用概率来计算累计概率,再根据计算公式计算均衡化后的灰度值,(255-0)指的是像素值从0到255,最后进行取整

ps:YUV是另一种表达均衡化方式,和上面的不一样,怎么舒服怎么写

参考:opencv python 实现灰度图像和彩色图像直方图全局均衡化和自适应均衡化_Ibelievesunshine的博客-CSDN博客

深入理解OpenCV+Python直方图均衡化_Linux编程_Linux公社-Linux系统门户网站

python+opencv直方图均衡化_不二的博客-CSDN博客

你可能感兴趣的:(python,opencv,直方图)