[Opencv](python)直方图均衡化与直方图比较

OpenCV-Python实战(8)——直方图均衡化 图像处理技术是计算机视觉项目的核心,通常是计算机视觉项目中的关键工具,可以使用它们来完成各种计算机视觉任务。在本文中,将介绍如何使用 OpenCV 函数 cv2.equalizeHist() 执行直方图均衡,并将其应用于灰度和彩色图像,cv2.equalizeHist() 函数将亮度归一化并提高图像的对比度。 阅读详情

1,直方图均衡化 (Histogram Equalization)

假如图像的灰度分布不均匀,其灰度分布集中在较窄的范围内,使图像的细节不够清晰,对比度较低。直方图均衡化,对图像进行非线性拉伸,重新分配图像的灰度值,使一定范围内图像的灰度值大致相等。这样,原来直方图中间的峰值部分对比度得到增强,而两侧的谷底部分对比度降低,输出图像的直方图是一个较为平坦的直方图。使图像的灰度范围拉开或使灰度均匀分布,从而增大反差,使图像细节清晰,以达到增强的目的。

均衡化的基本思想是:尽量使得每个灰度级的像素数量相等。直方图均衡化的另一个优势是:不需要额外参数,整个过程是自动的;直方图均衡化的缺点是:拉伸后有些灰度级可能不被映射到,造成图像观感上的颗粒感
均衡化算法
直方图的均衡化实际也是一种灰度的变换过程,将当前的灰度分布通过一个变换函数,变换为范围更宽、灰度分布更均匀的图像。也就是将原图像的直方图修改为在整个灰度区间内大致均匀分布,因此扩大了图像的动态范围,增强图像的对比度。通常均衡化选择的变换函数是灰度的累积概率,直方图均衡化算法的步骤:
(1)计算原图像的灰度直方图 P(Sk)=nk/n,其中n为像素总数,nk为灰度级Sk的像素个数
(2)计算原始图像的累积直方图 CDF(Sk)=∑ni/n=∑Ps(Si)
(3)Dj=L⋅CDF(Si),其中 Dj是目的图像的像素,CDF(Si)是源图像灰度为i的累积分布,L是图像中最大灰度级(灰度图为255)

2,自适应直方图均衡化(Adaptive histgram equalization/AHE)

自适应直方图均衡化(AHE)用来提升图像的对比度的一种计算机图像处理技术。和普通的直方图均衡算法不同,AHE算法通过计算图像的局部直方图,然后重新分布亮度来改变图像对比度。因此,该算法更适合于改进图像的局部对比度以及获得更多的图像细节。
图像被分成称为“图块”的小块(在OpenCV中,tileSize默认为8x8)。然后像往常一样对这些块中的每一个进行直方图均衡。所以在一个小区域内,直方图会限制在一个小区域(除非有噪音)。如果有噪音,它会被放大。为避免这种情况,应用对比度限制。如果任何直方图区间高于指定的对比度限制(在OpenCV中默认为40),则在应用直方图均衡之前,将这些像素剪切并均匀分布到其他区间。均衡后,为了去除图块边框中的瑕疵,应用双线性插值。
算法思想:
移动模板W在图像A上逐行移动,并且模板W的中心c(x0,y0)对应图像上的点f(x0,y0);计算模板W区域的直方图均衡化变化关系:g(x,y)= T(f(x,y),计算模板中心点c(x0,y0)的均衡化对应像素值:g(x0,y0) = T(f(x0,y0))。用g(x0,y0)替代f(x0,y0);逐行计算得到整幅图像的自适应直方图均衡化图像。
就是在一个给定框内做直方图均衡化,而框内所有处理(包括均衡化)只为了这个将原始中心点像素a变化到新的像素点b。

3、直方图比较

  1. 图像相似度比较
    如果我们有两张图像,并且这两张图像的直方图一样,或者有极高的相似度,那么在一定程度上,我们可以认为这两幅图是一样的,这就是直方图比较的应用之一。
  2. 分析图像之间关系
    两张图像的直方图反映了该图像像素的分布情况,可以利用图像的直方图,来分析两张图像的关系。
    3、直方图比较函数
    cv2.compareHist(H1, H2, method)
    其中:
    • H1,H2 分别为要比较图像的直方图
    • method - 比较方式
    比较方式(method)
    • 相关性比较 (method=cv.HISTCMP_CORREL) 值越大,相关度越高,最大值为1,最小值为0
    • 卡方比较(method=cv.HISTCMP_CHISQR 值越小,相关度越高,最大值无上界,最小值0
    • 巴氏距离比较(method=cv.HISTCMP_BHATTACHARYYA) 值越小,相关度越高,最大值为1,最小值为0

代码实现

import cv2 as cv
import numpy as np


直方图均衡化

def equalHist_demo(image):
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) #需要转化成灰度图像
    dst = cv.equalizeHist(gray) #均衡化,自动调整图像对比度,是图像增强的一种手段
    cv.imshow("equalHist_demo", dst)

#自适应直方图均衡化
def clahe_demo(image):
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    clahe = cv.createCLAHE(clipLimit=5.0, tileGridSize=(8, 8))
    dst = clahe.apply(gray)
    cv.imshow("clahe_demo", dst)

#rgb 直方图
def create_rgb_hist(image):
    h, w, c = image.shape
    # 创建一个(16*16*16,1)的初始矩阵,作为直方图矩阵
    # 16*16*16的意思为三通道每通道有16个bins
    rgbHist = np.zeros([16*16*16, 1], np.float32)
    bsize = 256 / 16
    for row in range(h):
        for col in range(w):
            b = image[row, col, 0]
            g = image[row, col, 1]
            r = image[row, col, 2]
            # 人为构建直方图矩阵的索引,该索引是通过每一个像素点的三通道值进行构建
            # 该处形成的矩阵即为直方图矩阵
            index = np.int(b/bsize)*16*16 + np.int(g/bsize)*16 + np.int(r/bsize)
            # 该处形成的矩阵即为直方图矩阵
            rgbHist[np.int(index), 0] = rgbHist[np.int(index), 0] + 1
    return rgbHist


def hist_compare(image1, image2):
    """直方图比较函数"""
    # 创建第一幅图的rgb三通道直方图(直方图矩阵
    hist1 = create_rgb_hist(image1)
    # 创建第二幅图的rgb三通道直方图(直方图矩阵
    hist2 = create_rgb_hist(image2)
    # 进行三种方式的直方图比较
    match1 = cv.compareHist(hist1, hist2, cv.HISTCMP_BHATTACHARYYA)
    match2 = cv.compareHist(hist1, hist2, cv.HISTCMP_CORREL)
    match3 = cv.compareHist(hist1, hist2, cv.HISTCMP_CHISQR)
    print("巴氏距离: %s, 相关性: %s, 卡方: %s"%(match1, match2, match3))


print("--------- Hello Python ---------")
src = cv.imread("D:/vcprojects/images/rise.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
#cv.imshow("input image", src)
#clahe_demo(src)

image1 = cv.imread("E:/ji_qi_xue_xi/opencv_kejian/opencv_python_image/.png")
image2 = cv.imread("E:/ji_qi_xue_xi/opencv_kejian/opencv_python_image/.png")
cv.imshow("image1", image1)
cv.imshow("image2", image2)
hist_compare(image1, image2)

cv.waitKey(0)
cv.destroyAllWindows()

输出结果

均衡化结果
在这里插入图片描述

自适应均衡化结果
在这里插入图片描述
直方图对比结果
两张input图片
在这里插入图片描述
结果:巴氏距离: 0.09072200336618969(很小), 相关性: 0.9788106004024394(图片很相似), 卡方: 164.3082768373199(相对而言较小,没有对比很难看出,一般不用)

Linux内存优化:KSM技术原理与实践指南 内存共享是提升虚拟化环境资源利用率的关键技术,其核心原理是通过识别相同内容的内存页进行合并。Linux内核的KSM(Kernel Samepage Merging)机制采用红黑树数据结构管理内存页,通过多级哈希比较算法实现高效合并。该技术能显著降低物理内存消耗,提升CPU缓存命中率,特别适用于运行大量相似虚拟机实例的场景。在容器化和云计算环境中,KSM与NUMA优化、内存气球等技术协同,可实现40%-60%的内存节省。典型应用包括金融云平台的高密度虚拟机部署,以及Kubernetes集群的基础镜像优化。 阅读详情

相关推荐

Enterprise Architect 中文经典教程

本文使用到的EA工程文件下载 一、Enterprise Architect简介 Enterprise Architect是一个对于软件系统开发有着极好支持的CASE软件(Computer Aided Software Engineering)。EA不同于普通的UML画图工具(如VISIO),它将支撑系统开发的全过程。在需求分析阶段,系统分析与设计阶段,系统开发及部署等方面有着强大的支持,...

2万+

图像处理中的直方图与均衡化

1.什么是直方图(histogram) 在统计学中,直方图(Histogram)是一种对数据分布情况的图形表示,是一种二维统计图表,它的两个坐标分别是统计样本和该样本对应的某个属性的度量。一般来说用横轴表示数据类型,纵轴表示分布情况。 直方图是数值数据分布的精确图形表示。 这是一个连续变量(定量变量)的概率分布的估计,并且被卡尔·皮尔逊(Karl Pearson)首先引入。它是一种条形图。 为

bitcarmanlee的博客 1万+

Ubuntu20.04安装Torque-6.1.2单机版(踩坑篇)

说明:PBS排队系统原先是在Centos7安装使用很顺利,但是有客户需求在Ubuntu20.04上使用,着手在Ubuntu20.04安装上安装的时候发现很多报错,并不能顺利安装,网上查找到的教程,有的说是让放弃转slurm,有的是换源安装,但是安装好的版本很低,有许多bug,不是很好用。经过自己慢慢摸索之后,改了部分配置以及源码之后,能够顺利安装,再次记录一下踩坑心得,与大家一起分享学习。如有问题,欢迎大家来撩。...............

华青水上的博客 8088

图像处理(二) 通过直方图均衡化来增强图像

通过直方图均衡化来增强图像

qq_42313095的博客 6082

Sentinel--哨兵系列数据下载地址及流程更新【202310】

哨兵系列数据下载地址及流程更新。哨兵系列卫星作为哥白尼计划的一部分,主要目标便是对地球的观测任务。哥白尼计划由三部分组成:空间部分(哨兵系列太空任务与其他太空机构任务)、测量部分(提供海洋、大陆表面和大气信息的陆基和机载数据收集网络)、数据管理与全球共享。

twg666的博客 3万+

保姆级避坑指南:在Ubuntu 22.04上成功复现VMamba模型(附完整环境依赖清单)

本文提供了在Ubuntu 22.04上复现VMamba模型的详细指南,包括环境准备、CUDA与PyTorch的精确匹配、依赖安装的疑难杂症解决以及完整环境清单。特别针对Linux系统下的环境复现问题,提供了实用的避坑技巧和验证方法,帮助开发者高效完成VMamba模型的部署。

weixin_29083373的博客 263

python数字图像处理(9):直方图与均衡化

在图像处理中,直方图是非常重要,也是非常有用的一个处理要素。 在skimage库中对直方图的处理,是放在exposure这个模块中。 1、计算直方图 函数:skimage.exposure.histogram(image, nbins=256) 在numpy包中,也提供了一个计算直方图的函数histogram(),两者大同小义。 返回一个tuple(hist, bin

宁静家园 3万+

Dify插件离线部署全攻略:从下载到安装的完整流程

本文详细介绍了Dify插件离线部署的完整流程,针对企业内网等无网络环境需求。核心步骤包括在联网环境下载插件包、在特定Python 3.12.9环境下使用专用工具进行离线重打包,以及最终在离线Dify环境中安装验证。重点解决了离线安装的核心难题,并提供了环境配置、批量处理和故障排查等实用技巧,帮助用户实现Dify插件的顺利离线部署。

seed的博客 659

python-opencv 图像处理基础 (五)颜色直方图+直方图均衡化+直方图比较+直方图反向投影

1、颜色直方图 #-------------------------------绘制颜色直方图------ import cv2 import numpy as np import matplotlib.pyplot as plt def plot_demo(image): plt.hist(image.ravel(),256,[0,256]) plt.show("直方图") def image_hist(image): color=('blue','green','red') for i,co

冰雪棋书的博客 8060

Unity Shader学习笔记/Urp/水墨风效果

Unity Shader学习

qq_63133691的博客 2118

工业相机,大恒,面振相机8脚电源线和I/O触发接口线,颜色和接法说明和触发软件设定

上图: 说明一下,工业相机有TTL逻辑电平触发,也有光耦触发等。 这里一般我们用电路板驱动,就用GPIO触发模式, 这里,准备了两个GPIO触发模式,为LINE2,LINE3都可以选择,然后有一个GPIO_GND 如果,你只有一个触发接口,那么如图,选两个就好了。 实际接法如图。 ...

山云的专栏 1万+

直方图均衡化算法原理与c++实现

写在前面 直方图均衡是图像增强的基础算法,本质上是一种非线性拉伸,使图像的灰度级分布变得较为均匀,从而增强图像的对比度,使这些不够明显的图像细节清晰可见。掌握一种算法,必须要弄清楚它的优势和缺点,要知道它的适用场合,这样才能灵活的运用这些算法。 直方图均衡算法的优势:对于背景和前景都太亮或者太暗的图像非常有用,计算量不大,完全可以满足实时。并且是可逆操作,也就是说如果已知均衡化函数,那么就可以...

小武的博客 3035

YOLOv10改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

如何寻找创新点?为什么要使用这个模块?如何才能提升模型的精度?这是贯穿我们研究始终的问题。创新点在这个专栏中我已经整理好了,这已经省去了大部分时间,但是当我们使用这些新的模块去优化已有的模型,如何才能提升模型的精度,才是我们要达到的最终目标。当然我们可以使用传统的A+B+C的方法去堆积模块,然后是进行大量的实验去排列组合以实现最终的精度提升,这无可厚非。

Limiiiing的博客 1万+

python-opencv--直方图/直方图均衡化/直方图比较

import cv2 as cv import numpy as np from matplotlib import pyplot as plt ‘’’ def plot_demo(image): #直方图 plt.hist(image.ravel(), 256, [0, 256]) plt.show() def image_hist(image): #每一个通道的直方图 color = (‘blue’, ‘green’, ‘red’) for i, color in enumerate(color):

weixin_43740956的博客 482

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Python+OpenCV:全局直方图均衡化、局部直方图自适应均衡化、直方图比较(Python版)

1. 全局直方图均衡化 cv2.equalizeHist(src, dst=None)函数只能处理单通道的数据,src为输入图像对象矩阵,必须为单通道的uint8类型的矩阵数据。直方图均衡化可以看作是图像增强的一个手段,示例代码如下: import cv2 as cv src = cv.imread("D:/Open CV/opencv/sources/samples/data/rice_01....

zjy123078_zjy的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python opencv 直方图均衡化_Python opencv—直方图/直方图均衡化/直方图比较,pythonopencv...

import cv2 as cvimport numpy as npfrom matplotlib import pyplot as plt‘’’def plot_demo(image): #直方图plt.hist(image.ravel(), 256, [0, 256])plt.show()def image_hist(image): #每一个通道的直方图color = (‘blue’, ‘gr...

weixin_36414025的博客 314

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

210_Python+OpenCV_06_图像直方图(histogram)HOG-全局/局部均衡化/直方图比较/反向投影

ython+OpenCV_06_图像直方图(histogram)HOG

weixin_44304362的博客 767

python opencv 直方图均衡_Python+OpenCV:全局直方图均衡化、局部直方图自适应均衡化、直方图比较(Python版)...

1. 全局直方图均衡化cv2.equalizeHist(src, dst=None)函数只能处理单通道的数据,src为输入图像对象矩阵,必须为单通道的uint8类型的矩阵数据。直方图均衡化可以看作是图像增强的一个手段,示例代码如下:import cv2 as cvsrc = cv.imread("D:/Open CV/opencv/sources/samples/data/rice_01.jpg"...

weixin_39702479的博客 1068

Python-OpenCV 图像处理(十):直方图均衡化 , 直方图比较

import cv2 import numpy as np from matplotlib import pyplot as plt __author__ = "zxsuperstar" __email__ = "zxsuperstar@163.com" """ 直方图均衡化 , 直方图比较 """ def equalHist_demo(image): gray = cv2.cvtC...

zx_good_night的博客 1010

OpenCV的直方图

本文使用python实现 图像直方图 图像直方图是不同像素值范围的像素个数统计图: # matplotlib.pyplot.hist()函数 def hist(x: Any, # 输入的数据 bins: Any = None, # 条形数 range: Any = None, # x轴的范围,范围之外的将被舍弃,数组元组类型(起,终)

CoolBreeze的博客 1038

Python+OpenCV图像处理之图像直方图

Python+OpenCV图像处理之图像直方图 (一)图像直方图 要画直方图必须要安装matplotlib库,Matplotlib是一个 Python 的 2D绘图库。 图像直方图是反映一个图像像素分布的统计表,其横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的。纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比。图像是由像素构成,因为反映像素分布的直方图往往可以...

748

Python-OpenCV图像处理-10-直方图的操作

均值化: import cv2 as cv import numpy as np # 均衡化(灰度图像) 增强了对比度 def equalHist_demo(image): gray =cv.cvtColor(image,cv.COLOR_BGR2GRAY) dst =cv.equalizeHist(gray) cv.imshow("equalHist_demo",d...

Vuko_Coding Zone 915

OpenCV 图像直方图

OpenCV 图像直方图教程摘要 本教程详解 OpenCV 中图像直方图的核心应用,包括灰度/彩色直方图计算、均衡化及比较。通过 cv2.calcHist 分析像素分布,cv2.equalizeHist 增强对比度,cv2.compareHist 评估图像相似性。提供完整 Python 代码示例,涵盖直方图可视化(Matplotlib)、通道分离处理和多种比较方法(相关系数/卡方/巴氏距离)。适用于图像分析、增强等场景,需提前安装 OpenCV 和 Matplotlib 库。教程包含从基础计算到综合处理的完

likuoelie的博客 725

Python+OpenCV(七)——直方图及其应用

Python+OpenCV(七)——直方图及其应用 学习视频:python+opencv3.3视频教学 基础入门 其他学习记录: Python+OpenCV(一)——基础操作 Python+OpenCV(二)——Numpy模块 Python+OpenCV(三)——色彩空间 Python+OpenCV(四)——像素运算 Python+OpenCV(五)——ROI和泛洪填充 Python+OpenCV(六)——均值/中值/自定义/高斯模糊、高斯噪声处理 源码如下: # -*- coding = utf-8 -*

Cat_South_North的博客 442

python comparehist_opencv+python -- 图像直方图应用

直方图均衡化cv2.equalizeHist函数原型:equalizeHist(src[, dst]) 。函数equalizeHist的作用:直方图均衡化,提高图像质量。createCLAHE函数原型:createCLAHE([, clipLimit[, tileGridSize]]) -> retvalclipLimit参数表示对比度的大小。tileGridSize参数表示每次处理块的大小...

weixin_39953673的博客 150

数字图像处理_012_(图像直方图比较,图像直方图均衡化)

直方图比较 import numpy as np import matplotlib.pyplot as plt import cv2 as cv def show(img): if img.ndim==2: plt.imshow(img,cmap='gray') else: img2=cv.cvtColor(img,cv.COLOR_BGR2RGB) plt.imshow(img2) plt.show() img1=cv.imrea

qq_40331078的博客 402
上一篇: 【OpenCV 4】高斯双边模糊与图像均值迁移模糊(python)
下一篇: 【OpenCv】(python)直方图反向投影
YL_python_C++_java
博客等级 码龄7年 1392粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值