图像增强直方图规定化python
时间: 2023-10-28 13:07:09 浏览: 95
直方图规定化(python实现)
好的,关于图像增强直方图规定化的Python实现,可以按照以下步骤进行:
1. 读取原始图像和目标图像
2. 计算原始图像和目标图像的直方图
3. 计算原始图像和目标图像的累积分布函数(CDF)
4. 将原始图像的CDF映射到目标图像的CDF上,得到映射函数
5. 对原始图像进行映射,得到增强后的图像
下面是一个简单的实现示例:
```python
import cv2
import numpy as np
# 读取原始图像和目标图像
src_img = cv2.imread('src_img.jpg', cv2.IMREAD_GRAYSCALE)
dst_img = cv2.imread('dst_img.jpg', cv2.IMREAD_GRAYSCALE)
# 计算原始图像和目标图像的直方图
src_hist, _ = np.histogram(src_img.flatten(), 256, [0, 256])
dst_hist, _ = np.histogram(dst_img.flatten(), 256, [0, 256])
# 计算原始图像和目标图像的累积分布函数(CDF)
src_cdf = np.cumsum(src_hist)
src_cdf_normalized = src_cdf / float(src_cdf.max())
dst_cdf = np.cumsum(dst_hist)
dst_cdf_normalized = dst_cdf / float(dst_cdf.max())
# 将原始图像的CDF映射到目标图像的CDF上,得到映射函数
mapping = np.zeros(256, dtype=np.uint8)
for i in range(256):
j = 255
while j >= 0 and dst_cdf_normalized[j] > src_cdf_normalized[i]:
j -= 1
mapping[i] = j
# 对原始图像进行映射,得到增强后的图像
enhanced_img = mapping[src_img]
# 显示结果
cv2.imshow('src_img', src_img)
cv2.imshow('dst_img', dst_img)
cv2.imshow('enhanced_img', enhanced_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文