直方图均衡化算法原理及bins的理解

原理部分转载于:直方图均衡化算法原理与实现
bin的理解和直观展示见 part2

part1 直方图均衡化算法原理

我们知道提高图像对比度的变换函数f(x)需要满足以下条件:

  1. f(x)在0<=x<=L−1上单调递增(不要求严格单调递增),其中L表示灰度级(L=256)
  2. f(x)的范围是[0,L−1]

我们知道当图像直方图完全均匀分布的时候,此时图像的熵是最大的(随机变量每个值的概率都相同时,概率最大),图像对比度是最大的。所以,理想情况下,图像经过变换函数f(x)

变换后,直方图能够均匀分布,此时对比度是最大的。

那问题来了?怎样的变换函数具有如此神奇的功能呢?[1]P74中给出了答案。
在图像处理中,有一个重要的函数,能够满足上面的条件:

在这里插入图片描述

英文原版中P145中的表述为:在这里插入图片描述

其中px(x)表示概率密度函数,在离散的图像中,表示直方图的每个灰度级的概率(在图像中,灰度级就可以看成是一个随机变量,而直方图就是该随机变量的概率密度函数),由概率论的知识,我们可以知道,变换函数f(x)其实就是连续型随机变量x的分布函数,表示的是函数下方的面积。

 

在这里插入图片描述

分布函数的两个性质:1.单调不减 2.值域为[0,1],我们可以知道f(x)满足条件1和2

有人可能会有这个疑问?图像是离散的,为什么可以用连续的来表示呢?从数学角度来看,离散是连续的一种特例(图像就是一个很好的例子)。

下面我们证明变换后的直方图是均匀的。
由概率论知识,变换后的概率密度:

在这里插入图片描述


由变上限函数求导法则可知

在这里插入图片描述


反函数的导数等于原函数导数的倒数,所以

在这里插入图片描述


所以

在这里插入图片描述

看到了吧,变换后的概率密度函数是一个均匀分布,对于图像来说,就是每个灰度级概率都是相等的,达到了我们的目的。
下面我们需要将这个变换函数转换为图像中的表达,图像中,我们可以知道,可以使用求和代替积分,差分代替微分,所以上述的变换函数就是:

在这里插入图片描述

其中h(xi)表示直方图中每个灰度级像素的个数, w和 h分别表示图像的宽和高。

参考文献

	《数字图像处理》第3版,冈萨雷斯

点击查看:直方图均衡化的步骤

part2 直方图均衡化算法原理

bin的含义:计算颜色直方图需要将颜色空间划分为若干小的颜色区间,即直方图的bin,通过计算颜色在每个小区间内德像素得到颜色直方图,bin越多,直方图对颜色的分辨率越强,但增加了计算机的负担。
由下面的对比可以很容易理解bin的含义,途中一个柱体就代表一个bin,bin越多,表示越精细。

bin为10

在这里插入图片描述

bin为128

在这里插入图片描述

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
直方图均衡化是一种用于增强图像对比度的方法,它通过重新分布图像的像素值来实现。算法原理如下[^1][^2]: 1. 计算直方图:首先,统计图像每个像素值的频数,得到原始图像的直方图。 2. 计算累积分布函数(CDF):将直方图的频数进行累加,得到每个像素值的累积频数。 3. 归一化CDF:将CDF进行归一化,使其范围在0到1之间。 4. 映射像素值:对于每个像素值,将其映射到新的像素值上。映射规则为将归一化CDF乘以最大像素值,并四舍五入取整。 5. 生成均衡化后的图像:使用映射后的像素值替换原始图像的像素值,得到均衡化后的图像。 下面是一个示例代码,演示了如何使用Python实现直方图均衡化算法原理[^1]: ```python import cv2 import numpy as np def histogram_equalization(image): # 计算直方图 hist, bins = np.histogram(image.flatten(), 256, [0, 256]) # 计算累积分布函数 cdf = hist.cumsum() # 归一化CDF cdf_normalized = cdf * hist.max() / cdf.max() # 映射像素值 image_equalized = np.interp(image.flatten(), bins[:-1], cdf_normalized).reshape(image.shape) return image_equalized.astype(np.uint8) # 读取图像 image = cv2.imread('image.jpg', 0) # 进行直方图均衡化 image_equalized = histogram_equalization(image) # 显示原始图像和均衡化后的图像 cv2.imshow('Original Image', image) cv2.imshow('Equalized Image', image_equalized) cv2.waitKey(0) cv2.destroyAllWindows() ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值