直方图均衡化计算公式
时间: 2023-09-22 07:09:52 浏览: 343
直方图均衡化是一种用于增强图像对比度的方法,可以通过重新分布图像像素值来实现。计算公式如下:
1. 首先,计算图像中每个像素值出现的频次,形成原始图像的直方图。
2. 计算每个像素值在原始直方图中的累计分布函数(CDF),表示为CDF(i)。CDF(i)可以通过累积所有小于等于i的像素频次来计算。
3. 然后,将CDF归一化到[0,255]的范围内,使用以下公式计算均衡化后的像素值:
均衡化后的像素值 = round(CDF(i) × (L-1))
其中,L为像素值的灰度级数(通常为256)。
4. 对图像中的每个像素应用均衡化后的像素值。
这样,通过直方图均衡化,可以使得图像的像素值分布更加均匀,从而增强图像的对比度。
相关问题
直方图均衡化算法公式
### 数字图像处理中的直方图均衡化
在数字图像处理领域,直方图均衡化是一种用于增强图像对比度的技术。该方法通过调整灰度级的概率密度函数来实现这一点。
对于一幅输入图像 \(I\),其像素强度范围为 \([0, L-1]\),其中 \(L\) 是可能的灰度级别数,则直方图均衡化的转换过程可以表示为:
设原始图像的累积分布函数 (CDF) 为 \(C(i)\),则有:
\[ C(i) = \sum_{j=0}^{i} p(j),\quad i = 0, 1,...,L-1 \]
这里 \(p(j)\) 表示第 \(j\) 级灰度出现的概率[^1]。
为了使变换后的图像具有均匀分布的直方图,定义新的灰度映射关系如下:
\[ s_k = T(r_k)=(L-1) * C(r_k)= (L-1)*\sum_{j=0}^{r_k} p_j,\quad k = 0, 1,...,K-1 \]
此处 \(s_k\) 和 \(r_k\) 分别代表输出和输入图像中对应的灰度值;\(T(\cdot)\) 即为所求得的变换函数。
此公式表明,每一个原始灰度级别的概率会被累加起来形成一个新的标准化数值,并乘以最大灰度等级减一得到最终的结果。这样做的效果就是拉伸了低频部分而压缩高频部分,使得整个动态范围内各亮度层次都能较好地展现出来。
```python
import numpy as np
from skimage import data, exposure, img_as_float
def histeq(im,nbr_bins=256):
""" 对一个灰度图像进行直方图均衡化 """
# 计算图像直方图并归一化
imhist,bins = np.histogram(im.flatten(),nbr_bins,density=True)
cdf = imhist.cumsum() # cumulative distribution function
cdf = (nbr_bins-1) * cdf / cdf[-1]
# 使用线性插值累计分布函数获得新像素值
im2 = np.interp(im.flatten(),bins[:-1],cdf)
return im2.reshape(im.shape), cdf
```
自适应直方图均衡化的公式
自适应直方图均衡化是一种图像增强的方法,其公式如下:
1. 将原始图像分成若干个大小相同的子图像;
2. 对于每个子图像,计算其直方图;
3. 计算每个子图像的累计分布函数;
4. 将每个子图像的累计分布函数映射到均衡化的累计分布函数上,得到每个子图像的均衡化函数;
5. 对于每个子图像,使用其对应的均衡化函数对其像素值进行均衡化。
其中,第4步中的累计分布函数可以使用以下公式计算:
$CDF_i(k) = \sum_{j=0}^{k} \frac{hist_i(j)}{N_i}$
其中,$i$ 表示第 $i$ 个子图像,$k$ 表示像素值,$hist_i(j)$ 表示第 $i$ 个子图像中像素值为 $j$ 的像素个数,$N_i$ 表示第 $i$ 个子图像中的像素总数。
阅读全文