OpenCV学习:直方图均衡化

直方图均衡化

        在图像处理中,经常用到直方图,如颜色直方图、灰度直方图等。 图像的灰度直方图就描述了图像中灰度分布情况,能够很直观的展示出图像中各个灰度级所占的多少。 图像的灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像素的个数:其中,横 坐标是灰度级,纵坐标是该灰度级出现的频率

目录

直方图均衡化

一、直方图

二、直方图均衡化

1.灰度直方图的均衡化

2.彩色图像直方图均衡化的效果


一、直方图

  • 直方图反映了图像中像素的灰度分布规律。它描述每个灰度级具有的像素个数,但不包含这些像素在图像中的位置信息。
  • 图像直方图不关心像素所处的空间位置,因此不受图 像旋转和平移变化的影响,可以作为图像的特征。 
  • 任何一幅特定的图像都有唯一的直方图与之对应,但不同的图像可以有相同的直方图。 
  • 如果一幅图像有两个不相连的区域组成,并且每个区域的直方图已知,则整幅图像的 直方图是该两个区域的直方图之和。

二、直方图均衡化

        直方图均衡化是将原图像的直方图通过变换函数变为均匀的直方图,然后按均匀直方图修改原 图像,从而获得一幅灰度分布均匀的新图像。直方图均衡化就是用一定的算法使直方图大致平 和的方法直方图均衡化的作用是图像增强。

1.灰度直方图的均衡化

        使用自带的函数接口求取灰度图像的直方图

  • 灰度直方图的求解
import cv2
import numpy as np
from matplotlib import pyplot as plt

# 获取灰度图像
img = cv2.imread("lena.png", 1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("image_gray", gray)

# 灰度图像的直方图
plt.figure()
plt.hist(gray.ravel(), 256)
plt.show()
 
  
# 灰度图直方图均衡化
result_gray = cv2.equalizeHist(gray)

OpenCV学习:直方图均衡化_第1张图片OpenCV学习:直方图均衡化_第2张图片

2.彩色图像直方图均衡化的效果

# 绘制三通道彩色图像的直方图
image = cv2.imread("lena.png")
cv2.imshow("lena", image)

chans = cv2.split(image)
colors = ("b", "g", "r")
plt.figure()
plt.title("RGB Histogram")
plt.xlabel("Bins")
plt.ylabel("Pixels")

for (chan, color) in zip(chans, colors):
    hist = cv2.calcHist([chan],[0],None,[256],[0,256])
    plt.plot(hist, color=color)
    plt.xlim([0, 256])
plt.show()

OpenCV学习:直方图均衡化_第3张图片 OpenCV学习:直方图均衡化_第4张图片

 

# 彩色图像直方图的均衡化
import cv2
image = cv2.imread("lena.png")
chans = cv2.split(image)
bh = cv2.equalizeHist(chans[0])
gh = cv2.equalizeHist(chans[1])
rh = cv2.equalizeHist(chans[2])
result = cv2.merge((bh, gh, rh))

 OpenCV学习:直方图均衡化_第5张图片OpenCV学习:直方图均衡化_第6张图片

你可能感兴趣的:(OpenCV,计算机视觉)