iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >详解OpenCV自适应直方图均衡化的应用
  • 783
分享到

详解OpenCV自适应直方图均衡化的应用

2024-04-02 19:04:59 783人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录介绍主要代码比较 CLAHE 和直方图均衡化介绍 在《直方图均衡化详解》中,我们已经了解的直方图均衡化的基本概念,并且可以使用 cv2.equalizeHist() 函数执行直方

介绍

在《直方图均衡化详解》中,我们已经了解的直方图均衡化的基本概念,并且可以使用 cv2.equalizeHist() 函数执行直方图均衡。

在本节中,将介绍如何应用对比度受限的自适应直方图均衡化 ( Contrast Limited Adaptive Histogram Equalization, CLAHE ) 来均衡图像,CLAHE 是自适应直方图均衡化( Adaptive Histogram Equalization, AHE )的一种变体,区别在于其对比度的增大是受限的。图像相对均匀区域中的噪声被 AHE 过度放大,而 CLAHE 通过限制对比度增大来解决这个问题。该算法通过创建原始图像的多个直方图,并使用这些直方图来重新分配图像的亮度,用于提高图像的对比度。

主要代码

接下来,将 CLAHE 应用于灰度和彩色图像。应用 CLAHE 时,有两个重要参数,第一个是 clipLimit,它设置对比度限制的阈值,默认值为 40;第二个是 tileGridSize ,它设置行和列中的 tiles 数量。应用 CLAHE 时,图像被分成称为 tiles (默认为 8 x 8 )的小块以执行其计算。 将 CLAHE 应用于灰度图像,需要使用以下代码:

# 加载图像
image = cv2.imread('example.png')
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 灰度图像应用 CLAHE
clahe = cv2.createCLAHE(clipLimit=2.0)
gray_image_clahe = clahe.apply(gray_image)
# 使用不同 clipLimit 值
clahe.setClipLimit(5.0)
gray_image_clahe_2 = clahe.apply(gray_image)
clahe.setClipLimit(10.0)
gray_image_clahe_3 = clahe.apply(gray_image)
clahe.setClipLimit(20.0)
gray_image_clahe_4 = clahe.apply(gray_image)

然后,我们将 CLAHE 应用于彩色图像,类似于彩色图像对比度均衡的方法,创建四个函数以仅在不同颜色空间的亮度通道上使用 CLAHE 来均衡化彩色图像:

def equalize_clahe_color_hsv(img):
    cla = cv2.createCLAHE(clipLimit=4.0)
    H, S, V = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2HSV))
    eq_V = cla.apply(V)
    eq_image = cv2.cvtColor(cv2.merge([H, S, eq_V]), cv2.COLOR_HSV2BGR)
    return eq_image

def equalize_clahe_color_lab(img):
    cla = cv2.createCLAHE(clipLimit=4.0)
    L, a, b = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2Lab))
    eq_L = cla.apply(L)
    eq_image = cv2.cvtColor(cv2.merge([eq_L, a, b]), cv2.COLOR_Lab2BGR)
    return eq_image

def equalize_clahe_color_yuv(img):
    cla = cv2.createCLAHE(clipLimit=4.0)
    Y, U, V = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2YUV))
    eq_Y = cla.apply(Y)
    eq_image = cv2.cvtColor(cv2.merge([eq_Y, U, V]), cv2.COLOR_YUV2BGR)
    return eq_image

def equalize_clahe_color(img):
    cla = cv2.createCLAHE(clipLimit=4.0)
    channels = cv2.split(img)
    eq_channels = []
    for ch in channels:
        eq_channels.append(cla.apply(ch))
    eq_image = cv2.merge(eq_channels)
    return eq_image
# 彩色图像应用 CLAHE
image_clahe_color = equalize_clahe_color(image)
image_clahe_color_lab = equalize_clahe_color_lab(image)
image_clahe_color_hsv = equalize_clahe_color_hsv(image)
image_clahe_color_yuv = equalize_clahe_color_yuv(image)

# 可视化
show_img_with_matplotlib(cv2.cvtColor(gray_image, cv2.COLOR_GRAY2BGR), "gray", 1)
show_img_with_matplotlib(cv2.cvtColor(gray_image_clahe, cv2.COLOR_GRAY2BGR), "gray CLAHE clipLimit=2.0", 2)
show_img_with_matplotlib(cv2.cvtColor(gray_image_clahe_2, cv2.COLOR_GRAY2BGR), "gray CLAHE clipLimit=5.0", 3)
# 其他图像的可视化方法类似,不再赘述
# ...

将所有这些函数应用于测试图像后比较结果,如下图所示:

在上图中,我们可以看到改变 clipLimit 参数在测试图像上应用 CLAHE 后的不同效果,同时也可以看到在不同颜色空间( LAB、HSV 和 YUV )的亮度通道上应用 CLAHE 后的不同结果。其中,可以看到在 BGR 图像的三个通道上应用 CLAHE 与仅在不同颜色空间的亮度通道上使用 CLAHE 的不同效果。

比较 CLAHE 和直方图均衡化

为了更好地展示 CLAHE 的效果,接下来对比 CLAHE 和直方图均衡化 (cv2.equalizeHist()) 在同一图像上的效果,同时可视化生成的图像和生成的直方图。

image = cv2.imread('example.png')
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

hist = cv2.calcHist([gray_image], [0], None, [256], [0, 256])
# 直方图均衡化
gray_image_eq = cv2.equalizeHist(gray_image)
# 计算直方图
hist_eq = cv2.calcHist([gray_image_eq], [0], None, [256], [0, 256])
# 创建 clahe:
clahe = cv2.createCLAHE(clipLimit=4.0)
# 在灰度图像上应用 clahe
gray_image_clahe = clahe.apply(gray_image)
# 计算直方图
hist_clahe = cv2.calcHist([gray_image_clahe], [0], None, [256], [0, 256])

可视化的结果如下图所示:

通过以上对比,可以肯定地说,在许多情况下,CLAHE 比应用直方图均衡化有更好的结果和性能。

到此这篇关于详解OpenCV自适应直方图均衡化的应用的文章就介绍到这了,更多相关OpenCV自适应直方图均衡化内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 详解OpenCV自适应直方图均衡化的应用

本文链接: https://www.lsjlt.com/news/138398.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解OpenCV自适应直方图均衡化的应用
    目录介绍主要代码比较 CLAHE 和直方图均衡化介绍 在《直方图均衡化详解》中,我们已经了解的直方图均衡化的基本概念,并且可以使用 cv2.equalizeHist() 函数执行直方...
    99+
    2024-04-02
  • Python+OpenCV之直方图均衡化详解
    目录直方图均衡化自适应直方图均衡化直方图均衡化 直方图均衡化(Histogram Equalization)是一种增强图像对比度(Image Contrast)的方法,其主要思想是将...
    99+
    2024-04-02
  • PythonOpenCV直方图均衡化详解
    目录前言灰度直方图均衡化颜色直方图均衡化前言 图像处理技术是计算机视觉项目的核心,通常是计算机视觉项目中的关键工具,可以使用它们来完成各种计算机视觉任务。在本文中,将介绍如何使用 O...
    99+
    2024-04-02
  • OpenCV 直方图均衡化的实现原理解析
    目录直方图均衡化介绍图像的直方图是什么更形象解释什么是直方图均衡化?直方图均衡化是如何实现的?直方图均衡化的作用直方图均衡化步骤相关APIequalizeHist代码示例灰度图均值化...
    99+
    2024-04-02
  • OpenCV-Python直方图均衡化实现图像去雾
    直方图均衡化 直方图均衡化的目的是将原始图像的灰度级均匀地映射到整个灰度级范围内,得到一个灰度级分布均衡的图像。这种均衡化,即实现了灰度值统计上的概率均衡,也实现了人类视觉系统上(H...
    99+
    2024-04-02
  • OpenCV-Python直方图均衡化如何实现图像去雾
    小编给大家分享一下OpenCV-Python直方图均衡化如何实现图像去雾,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!直方图均衡化直方图均衡化的目的是将原始图像的灰度级均匀地映射到整个灰度级范围内,得到一个灰度级分布均衡的...
    99+
    2023-06-15
  • Python学习之直方图均衡化原理详解
    目录1.点算子2.线性灰度变换3.直方图均衡化4.代码实战1.点算子 点算子是两个像素灰度值间的映射关系,属于像素的逐点运算,相邻像素不参与运算。点算子是最简单的图像处理手段,如:亮...
    99+
    2024-04-02
  • matlab直方图均衡化的方法是什么
    Matlab中直方图均衡化的方法是通过使用函数histeq来实现。histeq函数可以将图像的直方图进行均衡化,从而增强图像的对比度...
    99+
    2023-09-12
    matlab
  • PHP 应用程序性能优化中的负载均衡方法
    负载均衡方法:轮询:将流量按顺序分配给服务器列表中的服务器。加权轮询:根据服务器处理能力分配权重,均衡流量分配。dns 轮询:利用 dns 将域名解析为多个 ip,客户端随机选择 ip ...
    99+
    2024-05-04
    php 负载均衡 swoole
  • css设置banner图自适应的方法
    这篇文章给大家分享的是有关css设置banner图自适应的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在css中,可以使用“background-size”设置banner图自适应,语法“backgroun...
    99+
    2023-06-14
  • Vue中使用Echarts可视化图表宽度自适应的完美解决方案
    目录一、问题阐述:二、解决思路:三、最终效果:一、问题阐述: 开发H5项目中应用到Echarts数据可视化,由于H5主要使用在手机,屏幕宽度大大限制了图表的展现,问题如下。 上图中...
    99+
    2024-04-02
  • Echats图表大屏自适应的实现方法
    目录描述实现项目目录结构如下效果图如下总结描述 使用图表结合数据可以很直观的视觉效应,大屏展示已经成为企业数据展示的常见场景,如何做到大屏自适应是我们需要解决的一个问题,下面是其中一...
    99+
    2024-04-02
  • 实例详解如何给轮播图做自适应的高度
    本篇文章给大家带来了关于前端的相关知识,其中主要介绍了怎么给轮播图做一个自适应的高度,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。不知道大家有没有遇到这样的需求或者说看到类似的效果,就是列表进去详情看轮播图的时候,当手指滚动轮播图时轮...
    99+
    2023-05-14
    前端 JavaScript
  • Oracle直方图统计信息的应用
    Oracle直方图统计信息说明了表中数据的分布情况,用于在表中数据分布十分不均衡的情况下,指导CBO优化器选择最优的执行计划。以下例子说明了这一应用。 创建表 create tab...
    99+
    2024-04-02
  • vue常用的数字孪生可视化的自适应方案
    目录写在前面各自适应方案对比百分比自适应方案Rem + Resize写在前面 前面博主写过一篇文章 面试官:除了 HTTP,你还用过什么通信协议?(Websocket 在数字孪生中的...
    99+
    2024-04-02
  • vue使用echarts图表自适应问题怎么解决
    在Vue中使用ECharts图表时,可以通过监听窗口大小变化,动态调整图表的大小以实现自适应。具体步骤如下: 在Vue组件中引入E...
    99+
    2024-03-08
    vue echarts
  • JavaScript适配器模式的应用详解
    目录适配器模式适配器模式的应用小结适配器模式 适配器模式的作用是解决两个软件实体间的接口不兼容的问题。使用适配器模式之后,原本由于接口不兼容而不能工作的两个软件实体可以一起工作。 适...
    99+
    2022-11-13
    JavaScript 适配器模式 JavaScript 适配器
  • Python接口自动化之cookie、session应用详解
    目录一、cookie1、cookie介绍2、cookie原理二、session1、session介绍2、session原理1. 存储位置不同:2. 存储容量不同:3. 存取方式不同:...
    99+
    2024-04-02
  • PHP 负载均衡的定制:为您的应用程序量身定制解决方案
    定制 PHP 负载均衡的优势 定制 PHP 负载均衡提供了多种优势,包括: 提高性能:针对特定应用程序的需求进行优化,从而减少延迟和提高吞吐量。 增强可靠性:通过将流量分布到多个服务器,确保应用程序在高负载下也能可靠运行。 资源优化:...
    99+
    2024-03-01
    PHP 负载均衡、服务器配置、应用程序性能、可靠性
  • SpringBoot详解自定义Stater的应用
    目录1、SpringBoot starter机制2、为什么要自定义starter3、自定义starter的命名规则4、使用自定义starter1、SpringBoot starter...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作