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

基于OpenCV的图像增强技术:直方图均衡化与自适应直方图均衡化

文章目录

    • 引言
    • 1. 准备工作
    • 2. 加载图像并分析原始直方图
    • 3. 全局直方图均衡化
    • 4. 自适应直方图均衡化(CLAHE)
    • 5. 三种效果对比
    • 6. 参数调优建议
    • 7. 总结

引言

在数字图像处理中,直方图均衡化是一种常用的图像增强技术,它能够改善图像的对比度,使图像细节更加清晰。本文将带你深入了解全局直方图均衡化和自适应直方图均衡化(CLAHE)的原理与实现。

1. 准备工作

首先导入必要的库:

import cv2
import numpy as np
from matplotlib import pyplot as plt

2. 加载图像并分析原始直方图

我们首先加载一张名为"women.png"的灰度图像,并分析其原始像素分布:

women = cv2.imread('women.png', cv2.IMREAD_GRAYSCALE)plt.hist(women.ravel(), bins=256)
plt.show()

ravel()函数将多维数组展平为一维数组,便于直方图统计。这段代码会显示原始图像的像素值分布直方图,通常能反映出图像对比度的基本情况。

  • 原始图像像素分布图如下:

在这里插入图片描述

3. 全局直方图均衡化

接下来,我们对图像进行全局直方图均衡化处理:

phone_equalize = cv2.equalizeHist(women)
plt.hist(phone_equalize.ravel(), bins=256)
plt.show()res = np.hstack((women, phone_equalize))
cv2.imshow('phone_equalize', res)
cv2.waitKey(0)

cv2.equalizeHist()函数实现了全局直方图均衡化:

  1. 它会重新分布图像像素的强度值,使其均匀分布在所有范围内
  2. 处理后图像的直方图会变得更加平坦
  3. 通过np.hstack()我们可以将原始图像和处理后图像并排显示,便于比较

全局直方图均衡化适用于整体对比度较低的图像,但它有一个明显的缺点:会同时增强图像中的噪声。

  • 全局直方图均衡化的像素分布如下:

在这里插入图片描述

  • 处理后显示的图片:

在这里插入图片描述

4. 自适应直方图均衡化(CLAHE)

为了解决全局均衡化的问题,我们引入自适应直方图均衡化(CLAHE):

clahe = cv2.createCLAHE(clipLimit=1, tileGridSize=(16,16))
phone_clahe = clahe.apply(women)
res = np.hstack((women, phone_equalize, phone_clahe))
cv2.imshow('phone_equalize', res)
cv2.waitKey(0)

CLAHE的工作原理:

  1. 将图像分成若干个小块(称为tiles)
  2. 对每个小块单独进行直方图均衡化
  3. 使用clipLimit参数限制对比度增强的幅度,防止噪声被过度放大

参数说明:

  • clipLimit: 对比度限制阈值(默认8)
  • tileGridSize: 局部均衡化的邻域大小(默认8×8)
  • 将三种效果下的图片进行对比如下所示:

在这里插入图片描述

5. 三种效果对比

通过np.hstack()我们将三种图像并排显示:

  1. 原始图像
  2. 全局直方图均衡化结果
  3. 自适应直方图均衡化结果

这种对比可以清晰地展示:

  • 全局均衡化虽然提高了整体对比度,但可能丢失细节或增强噪声
  • CLAHE在增强对比度的同时,更好地保留了图像细节
  • 不同参数设置对结果的影响

6. 参数调优建议

  1. clipLimit:通常设置在1-3之间,值越大对比度增强越明显,但也可能放大噪声
  2. tileGridSize:根据图像大小调整,较大的图像可以使用更大的网格(如32×32)
  3. 可以尝试不同的参数组合,找到最适合特定图像的处理方案

7. 总结

直方图均衡化是图像增强的基础技术,而CLAHE则是其改进版本,更适合处理局部对比度变化大的图像。通过本文的代码示例,你可以:

  1. 快速实现图像直方图分析
  2. 应用全局直方图均衡化
  3. 使用CLAHE进行局部自适应增强
  4. 直观比较不同处理方法的差异

掌握这些技术将为你的图像处理工作提供强大工具。在实际应用中,建议根据具体需求选择合适的算法和参数。

http://www.xdnf.cn/news/13558.html

相关文章:

  • JavaWeb期末速成
  • 力扣 Hot100 动态规划刷题心法:从入门到精通的蜕变之路
  • 论文略读:When Attention Sink Emerges in Language Models: An Empirical View
  • VAS1085Q奇力科技LED驱动芯片车规级线性芯片
  • OpenCV CUDA模块图像变形------ 构建仿射变换的映射表函数buildWarpAffineMaps()
  • Python文件读写操作详解:从基础到实战
  • 【笔记】NVIDIA AI Workbench 中安装 PyTorch
  • Monkey 测试的基本概念及常用命令(Android )
  • 网络安全中对抗性漂移的多智能体强化学习
  • 硬件测试 图吧工具箱分享(附下载链接)
  • 亚马逊商品数据实时获取方案:API 接口开发与安全接入实践
  • 安卓上架华为应用市场、应用宝、iosAppStore上架流程,保姆级记录(1)
  • MySQL 8配置文件详解
  • 数据淘金时代:公开爬取如何避开法律雷区?
  • 杉山将(Sugiyama Masa)《图解机器学习》
  • 重拾前端基础知识:CSS预处理器
  • 计算机视觉与深度学习 | 基于Matlab的低照度图像增强算法原理,公式及实现
  • 第二节:Vben Admin v5 (vben5) Python-Flask 后端开发详解(附源码)
  • 记一次nacos搭建
  • leetcode0684. 冗余连接-medium
  • kafka-生产者(day-2)
  • 【Pandas】pandas DataFrame notna
  • 14.计算机网络End
  • 使用 C++ 和 OpenCV 构建智能答题卡识别系统
  • mysql知识点3--创建和使用数据库
  • 【图纸管理教程-2】工厂图纸混乱,用PLM怎么搜索数据?
  • 【医学目标检测】LN-DETR:一种基于多尺度特征融合的肺结节检测高效Transformer架构
  • 中兴B860AV1.1强力降级固件包
  • Spring Boot + MyBatis Plus 项目中,entity和 XML 映射文件的查找机制
  • Traefik 可观测性最佳实践