python实现直方图均衡化(HE)

本文介绍了直方图均衡化(Histogram Equalization)的概念,它通过对图像进行非线性拉伸来重新分配像素值,使得图像的灰度分布更均匀。通过灰度化图像并绘制直方图,利用直方图的累计分布函数(CDF)计算新的像素值,最终实现图像的直方图均衡化,显著提升图像对比度。文章提供了从计算像素占比到生成均衡化图像的详细步骤和效果展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介:
直方图均衡化(Histogram Equalization) 又称直方图平坦化,实质上是对图像进行非线性拉伸,重新分配图像象元值,使一定灰度范围内象元值的数量大致相等…(具体百度 or Google)

首先我们要对图像进行灰度化并画出它的直方图,灰度化在前一篇博客已经讲了,这里简要介绍一下如何画出直方图。
hist函数参数解析

#将灰度图(512,512)转化为一维的数据(262144,)
img_gray_1D = img_gray.flatten() # img_gray_1D(262144,)
_,_,_ = plt.hist(img_gray_1D,bins=256,normed=0)# 绘制直方图
plt.show()

效果:

公式三部曲
1、对0~255这256个像素值计算图像的像素占比
P ( S k ) = n k N P(S_{k}) = \frac{n_{k}}{N} P(Sk)=Nnk

### HE直方图均衡化原理 #### 原理概述 直方图均衡化(Histogram Equalization, HE)是一种用于增强图像对比度的技术。其核心思想在于重新分配像素的灰度值,使这些灰度值在整个可能范围内尽可能均匀分布[^1]。 具体来说,在理想情况下,经过处理后的图像应该具有平坦的直方图,即每个灰度级出现的概率相等。这可以通过累积分布函数(CDF)映射原图中的各灰阶到新的灰阶来达成。CDF定义如下: \[ CDF(i)=\sum_{j=0}^{i} p(j), \quad i=0,1,...,L-1 \] 其中 \(p(j)\) 表示第 j 个灰度级别的概率密度,\( L \) 是总的灰度级别数。对于8位灰度图像而言,\( L = 256 \)[^4]。 #### 实现过程 为了实现这一目标,通常按照以下几个方面来进行计算: 1. **构建原始图像的直方图**:统计各个灰度等级上像素的数量; 2. **计算累计分布频率**:基于上述得到的直方图数据求取每一个灰度值对应的累加比例; 3. **应用线性拉伸公式**:利用所得的比例关系对原有像素值做变换,形成新图片; 4. **生成最终结果**:完成以上步骤之后即可获得经由HE优化过的版本[^2]。 下面是Python环境下简单的HE算法实现代码片段: ```python import cv2 import numpy as np from matplotlib import pyplot as plt def hist_equalize(image_path): img = cv2.imread(image_path, 0) # 计算并绘制原始图像直方图 plt.hist(img.ravel(), bins=256, range=[0, 256]) plt.show() equ = cv2.equalizeHist(img) # 显示均衡化后的图像及其直方图 res = np.hstack((img, equ)) cv2.imshow('Equalized Image', res) plt.figure() plt.hist(equ.ravel(), bins=256, range=[0, 256], color='r') plt.title("After Histogram Equalization") plt.show() hist_equalize('your_image.png') # 替换为实际路径名 ``` 此段脚本首先读入一张灰度模式下的输入文件,接着调用了OpenCV库内的`equalizeHist()` 函数执行标准形式上的直方图均衡操作,并最后展示了处理前后的视觉差异以及相应的直方图表征。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值