头歌直方图均衡化第1关:直方图均衡化
时间: 2024-12-30 16:35:39 浏览: 10
### 实现直方图均衡化解题思路
在处理图像增强技术时,直方图均衡化是一种常用的方法。该方法通过重新分配灰度级来扩展对比度,从而改善图像质量。对于头歌平台上的直方图均衡化任务,主要涉及以下几个方面:
#### 1. 图像读取与预处理
为了执行直方图均衡化操作,首先需要加载待处理的图像并将其转换为灰度模式。这一步骤可以利用Python中的OpenCV库轻松完成。
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 加载彩色图片作为灰度图
img = cv2.imread('image_path',0)
plt.hist(img.ravel(),256,[0,256])
plt.show()
```
上述代码展示了如何使用`cv2.imread()`函数读入一幅图像,并指定参数使其成为灰度图像[^1]。接着调用了Matplotlib库展示原始图像的直方图分布情况。
#### 2. 计算累积分布函数(CDF)
接下来要做的就是基于原图构建其对应的累计概率密度函数CDF。这是因为在直方图均衡化过程中,新的像素值取决于旧像素值在整个图像范围内出现频率的比例关系。
```python
hist,bins = np.histogram(img.flatten(),256,[0,256])
cdf = hist.cumsum() # cumulative distribution function
cdf_normalized = cdf * float(hist.max()) / cdf.max()
plt.plot(cdf_normalized, color = 'b')
plt.hist(img.flatten(),256,[0,256], color = 'r')
plt.xlim([0,256])
plt.legend(('cdf','histogram'), loc = 'upper left')
plt.show()
```
这里先计算了各个亮度级别的频数统计表`hist[]`及其边界数组`bins[]`;随后依据这些数据求得累积分布函数`cdf[]`以及标准化后的版本`cdf_normalized[]`用于后续可视化显示[^2]。
#### 3. 应用映射规则进行变换
最后一步则是按照之前得到的概率密度曲线调整每一个像素点的颜色强度。具体来说,即是以当前像素位置处的CDF数值乘以最大可能输出范围再除以输入端总样本数量的结果替代原有色彩分量。
```python
img_equalized = cv2.equalizeHist(img)
plt.hist(img_equalized.flatten(),256,[0,256], color = 'g')
plt.xlim([0,256])
plt.show()
res = np.hstack((img,img_equalized)) # stacking images side-by-side
cv2.imwrite('result.jpg', res)
```
这段程序实现了完整的直方图均衡化过程——不仅完成了新老两版图像之间直观效果差异性的比较分析工作,还保存下了最终成果文件以便进一步观察验证[^3]。
阅读全文