博客
关于我
008 对比度调整-直方图均衡
阅读量:677 次
发布时间:2019-03-15

本文共 2303 字,大约阅读时间需要 7 分钟。

YUV转换与直方图均衡化

YUV分量解析

在图像处理领域,YUV是一种常用的颜色空间,它将图像分解为三个通道:

  • Y分量:决定了颜色的亮度(称为亮度或明度)。
  • U分量:决定了颜色的色度(类似于蓝色-黄色轴)。
  • V分量:决定了颜色的色调(类似于红色-绿色轴)。

通过将RGB颜色空间转换为YUV,可以更好地适应不同类型的显示设备和网络环境。

YUV转换实现

在代码中,首先需要将输入图像从RGB转换为YUV格式。使用OpenCV库中的cv.cvtColor函数,可以轻松实现这一转换,参数设置为COLOR_BGR2YUV

import cv2 as cv
img = cv.imread('../images/scene_001.jpg')
yuv = cv.cvtColor(img, cv.COLOR_BGR2YUV)

直方图均衡化

直方图均衡化是一种增强图像对比度的方法,通过调整图像的亮度分布,使得图像的亮度和色调更加均匀。常用的均衡化方法包括直方图均衡化和反直方图均衡化。

Y分量均衡化

在本文中,主要对Y分量进行均衡化。Y分量对应图像的亮度,通过对Y分量的直方图进行均衡化,可以显著提升图像的对比度。

y_img = yuv.copy()
y_const = 255
y_img[:, :, 1] = y_const
y_img[:, :, 2] = y_const

U和V分量调整

在调整完Y分量后,可以对U和V分量进行相应的调整,以进一步优化图像效果。

u_img = yuv.copy()
u_img[:, :, 0] = y_const
v_img = yuv.copy()
v_img[:, :, 1] = y_const

直方图均衡化效果展示

通过直方图均衡化处理后的图像,可以看到图像的亮度和色调更加均匀,细节更加丰富。

代码实现

以下是完整的代码实现,展示了从YUV转换到直方图均衡化的整个流程。

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
img = cv.imread('../images/scene_001.jpg')
yuv = cv.cvtColor(img, cv.COLOR_BGR2YUV)
hist_size = 256
# 直方图均衡化
y_hist = np.array(cv.calcHist(img, [0], None, [hist_size], [0, hist_size - 1])).reshape(hist_size)
fig, ax = plt.subplots(5, 2, figsize=(8, 8))
# 显示原始图像
ax[0][0].set_title('原图')
ax[0][0].imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB))
ax[0][0].axis('off')
# 绘制Y分量直方图
ax[0][1].set_title('Y直方图')
ax[0][1].hist(y_hist, 50)
# 直方图均衡化函数
def equalize(adjust_ratio, subplot):
# 克隆YUV图像
yuv_equal = yuv.copy()
# 调整Y分量
for row in yuv_equal:
for col in row:
col[0] = y_hist_equal[int(col[0])]
# 计算均衡化后的直方图
y_hist_equal = np.array(cv.calcHist(yuv_equal, [0], None, [hist_size], [0, hist_size - 1])).reshape(hist_size)
# 绘制处理后的图像
ax[subplot][0].set_title(f'均衡化(ratio={adjust_ratio})')
ax[subplot][0].imshow(cv.cvtColor(yuv_equal, cv.COLOR_YUV2RGB))
ax[subtotal][0].axis('off')
# 绘制均衡化后的直方图
ax[subtotal][1].set_title('均衡化Y直方图')
ax[subtotal][1].hist(y_hist_equal, 50)
# 调用均衡化函数
equalize(0, 1)
equalize(0.33, 2)
equalize(0.66, 3)
equalize(1, 4)
plt.show()

结果展示

通过直方图均衡化处理,图像的亮度和色调更加均匀,细节更加丰富。不同亮度和色调的区域对比度显著增强,图像整体质量得到提升。

代码解释

  • 读取图像:使用cv.imread读取输入图像。
  • 转换为YUV:使用cv.cvtColor将RGB图像转换为YUV格式。
  • 直方图计算:计算Y分量的直方图。
  • 均衡化处理:通过自定义函数equalize对Y分量进行直方图均衡化,并调整U和V分量。
  • 结果展示:在不同子图中分别显示原始图像、Y分量直方图、均衡化处理后的图像和均衡化后的Y分量直方图。
  • 通过上述步骤,可以实现将RGB图像转换为YUV格式,并对Y分量进行直方图均衡化,从而提升图像质量。

    转载地址:http://zhfqz.baihongyu.com/

    你可能感兴趣的文章
    opencv18-canny检测算法
    查看>>
    opencv19-霍夫直线变化
    查看>>
    opencv2-矩阵掩膜操作
    查看>>
    opencv20-霍夫圆检测
    查看>>
    opencv21-像素重映射
    查看>>
    opencv22-直方图均衡化
    查看>>
    opencv23-直方图计算
    查看>>
    opencv24-直方图比较
    查看>>
    opencv25-直方图反向投影
    查看>>
    opencv26-模板匹配
    查看>>
    opencv27-轮廓发现
    查看>>
    opencv28-凸包
    查看>>
    opencv29-轮廓周围绘制矩形框和圆形框
    查看>>
    OpenCV3 install tutorial for Mac
    查看>>
    opencv3-Mat对象
    查看>>
    opencv30-图像矩
    查看>>
    opencv32-基于距离变换和分水岭的图像分割
    查看>>
    opencv4-图像操作
    查看>>
    opencv5-图像混合
    查看>>
    opencv6-调整图像亮度和对比度
    查看>>