当前位置: 首页 > article >正文

OpenCV实现彩色图像的直方图均衡化

1、直方图均衡化

在OpenCV中,equalizeHist函数用于直方图均衡化(Histogram Equalization)。这是一种图像处理技术,旨在增强图像的对比度,特别是在图像的灰度值集中于某个范围时非常有用。通过调整图像的灰度分布,使得输出图像的灰度值更加均匀地分布在0到255的范围内,从而改善图像的视觉效果。
工作原理
直方图均衡化的基本思想是:

  1. 计算输入图像的直方图:统计每个灰度级出现的次数。
  2. 计算累积分布函数(CDF):对于每个灰度级,计算包括该灰度级在内的所有较低灰度级的像素总数。
  3. 使用CDF映射灰度级:将原始灰度级通过CDF映射到新的灰度级,确保输出图像的灰度值分布更加均匀。

2、OpenCV的直方图均衡化

dst = cv2.equalizeHist(src)
  • src:输入图像,应为灰度图像。
  • dst:均衡化后的输出图像。

通过,参数的说明可知,这个API仅用于灰度图像,那么,如果想对彩色图像进行直方图均衡化,该怎么处理呢?

3、分通道直方图均衡化方案

顾名思义,把彩色图像的R、G、B三个通道分别进行直方图均衡化处理。python代码如下:

def ChnEqhist(input):
    '''
    分通道进行直方图均衡化
    '''
    #B通道
    blue = cv.equalizeHist(input[:, :, 0])
    #G通道
    green = cv.equalizeHist(input[:, :, 1])
    #R通道
    red = cv.equalizeHist(input[:, :, 2])
    #通道合成
    result = np.stack((blue, green, red), axis=-1)
    return result

测试效果如下:
在这里插入图片描述

可看出,部分玩具的颜色还是整体泛白,存在失真的现象。那么,有没有改进的方案呢?

4、YUV颜色空间的直方图均衡化方案

算法步骤

  1. BGR颜色空间转YUV。
 yuv = cv.cvtColor(input, cv.COLOR_BGR2YUV_I420)
  1. 单独对Y分量进行直方图均衡化。
y_chn = yuv[0:height, 0:width]
#对Y分量进行直方图均衡
eq_y_chn = cv.equalizeHist(y_chn)
  1. 计算有分量直方图均衡后灰度值的变化系数 d e l t a delta delta
delta = (np.float32(eq_y_chn) / np.float32(y_chn))
  1. 使用 d e l t a delta delta系数对原始RGB空间的灰度进行相乘。
dst = np.uint8(np.clip(np.multiply(input, delta[:, :, np.newaxis]), 0, 255))

测试图像如下:
在这里插入图片描述

5、效果对比和分析

在这里插入图片描述
1、在YUV空间进行直方图均衡化,能够减轻颜色失真的现象,避免了整体泛白。
2、也减小了算法的计算量,避免了3个通道的直方图均衡化操作。


http://www.kler.cn/a/503744.html

相关文章:

  • rknn环境搭建之docker篇
  • shell脚本回顾1
  • rtthread学习笔记系列(4/5/6/7/15/16)
  • 【Pandas】pandas Series rtruediv
  • 小米vela系统(基于开源nuttx内核)——如何使用信号量进行PV操作
  • 2 XDMA IP中断
  • riscv架构下linux4.15实现early打印
  • 《零基础Go语言算法实战》【题目 4-2】使用 Go 语言实现一个模拟栈数据结构操作的类 FrequencyStack
  • 智能制造智慧工业4.0大数据平台建设综合解决方案(PPT原件)
  • element-ui动态设置tabel的columns时,切换columns数据表格抖动
  • 30分钟内搭建一个全能轻量级springboot 3.4 + 脚手架 <1> 5分钟快速创建一个springboot web项目
  • MATLAB学习笔记-table
  • C++实现设计模式---代理模式 (Proxy)
  • 【Uniapp-Vue3】vite.config中安装插件unplugin-auto-import自动导入vue和uniapp
  • nginx的可视化配置工具nginxWebUI的使用
  • 2.0 机器学习任务攻略
  • JAVA之单例模式
  • 【2024年华为OD机试】 (B卷,100分)- 矩形相交的面积(Java JS PythonC/C++)
  • 【MacOS】恢复打开系统设置的安全性的允许以下来源的应用程序的“任何来源”
  • 掌控 JMeter 测试节奏:Once Only Controller 让关键操作 “一步到位”
  • FPGA EDA软件的位流验证
  • 【深度学习】神经网络灾难性遗忘(Catastrophic Forgetting,CF)问题
  • 深入理解ASP.NET Core 管道的工作原理
  • Next.js如何用静态文件部署
  • 高并发性能优化随笔
  • 大疆上云API基于源码部署