直方图均衡化图像增强计算公式
时间: 2024-12-26 09:13:08 浏览: 8
### 直方图均衡化的计算公式与算法原理
直方图均衡化是一种常用的图像增强技术,其目的是通过调整图像的灰度分布来提高对比度。具体来说,该方法通过对原始图像的灰度值进行变换,使得处理后的图像具有更宽广且均匀的灰度范围。
对于一幅大小为 \(M \times N\) 的单通道灰度图像,设其第 i 级灰度出现的概率密度函数 (PDF) 为:
\[ p(r_i)=\frac{n_i}{MN} \]
其中 \(n_i\) 表示灰度级别等于 ri 的像素数目;\(r_i\) 是输入图像中的某个特定灰度级;而 MN 则代表整个图像中所有像素的数量总和[^1]。
为了实现直方图均衡化,需要构建累积分布函数(CDF),定义如下:
\[ s_k = T(r_k)=(M\times N)\sum_{j=0}^{k}p_r(j), k=0,1,...,L-1 \]
这里 L 表明了可能存在的最大灰度等级数(通常情况下是256)。经过上述转换得到的新灰度值 sk 将被映射回实际可用的整数值区间内,一般采用四舍五入的方式取最接近的标准亮度层次作为最终输出结果[^2]。
下面是 Python 实现的一个简单例子,展示了如何应用这些理论来进行直方图均衡化操作:
```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 = 255 * cdf / cdf[-1] # 归一化
# 使用线性插值方式创建原图像到新图像之间的映射表
original_shape = im.shape
im_flat = im.flatten()
im_eq = np.interp(im_flat, bins[:-1], cdf)
return im_eq.reshape(original_shape).astype(np.uint8)
# 加载测试图片并显示效果比较
image_gray = color.rgb2gray(data.astronaut())*255
plt.figure(figsize=(12,6))
plt.subplot(121); plt.title('Original Image')
plt.imshow(image_gray,cmap='gray')
img_histeq = histeq(img_as_float(image_gray))
plt.subplot(122); plt.title('Histogram Equalized Image')
plt.imshow(img_histeq ,cmap='gray');
```
阅读全文