自己编写代码进行直方图均衡化并显示均衡化后的图像,用Python
时间: 2024-09-26 10:18:41 浏览: 33
直方图均衡化_python_直方图均衡化_
5星 · 资源好评率100%
在Python中,你可以使用PIL(Python Imaging Library)或者其升级版Pillow库来操作图像,并结合NumPy进行数值计算,实现直方图均衡化。以下是一个简单的示例,展示了如何对一张灰度图像进行直方图均衡化:
```python
from PIL import Image
import numpy as np
# 打开图片
img = Image.open('input_image.jpg').convert('L') # L表示灰度模式
# 转换为numpy数组
img_array = np.array(img)
# 计算直方图
hist, bins = np.histogram(img_array.flatten(), 256, [0, 256])
# 绘制原图的直方图
plt.figure()
plt.plot(bins[:-1], hist, r'-')
plt.xlabel('Pixel Value')
plt.ylabel('Frequency')
# 计算累计分布函数 (CDF)
cdf = hist.cumsum() / hist.sum() # 归一化
# 使用CDF映射原图像像素值
equalized_array = cdf[img_array]
# 将均匀化的像素转换回图像
equalized_img = Image.fromarray(equalized_array.astype(np.uint8))
# 显示原始图像和均衡化后的图像
plt.figure(figsize=(10, 4))
plt.subplot(121), plt.imshow(img, cmap='gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(equalized_img, cmap='gray')
plt.title('Equalized Image'), plt.xticks([]), plt.yticks([])
plt.show()
阅读全文